dsp第二章笔记

📌 导航索引目录


📍 第一站:内部总线物理结构(4对/8条独立并行线)

C54x 采用改进型哈佛结构,物理上集成了 8 组 16 位独立的并行总线,实现了“程序空间”与“数据空间”的物理彻底分离。

TMS320C54x硬件结构图
  • 物理本质:总线分为两类,带有 A 后缀的为地址总线,专传料单;不带 A 后缀的为数据总线,专门搬运指令与操作数。
  • 流水线并行能力:独立总线阵列支持 CPU 在同一个时钟周期内同时执行:读取 1 条指令、抓取 2 个数据操作数、写入 1 个运算结果

🚨 空间划分核心避坑
数据存储器前 128 个字(0000h - 007Fh)被严格括为 MMRs(存储器映射寄存器)与 Scratch-pad(暂存 RAM)。绝对禁止在此区域存放用户普通数组,应用层变量必须从 0080h(DARAM 核心区起点)开始存储。


📍 第二站:CPU 运算核心四大组件深剖

1. ALU 核心硬件逻辑与输入源预处理

ALU功能框图

(1) 双路物理输入源(MUX 选择器精准调度)

  • X 输入源:① 桶形移位寄存器输出端;② 数据总线 DB(来自数据存储器的操作数)。
  • Y 输入源:① 累加器 ACC AACC B;② 数据总线 CB;③ 暂存器 T

(2) SXM 符号位扩展预处理机制(16位输入向40位对齐)

当 16 位操作数通过 DBCB 进入 40 位 ALU时,根据对齐格式触发以下预处理:

操作数物理位置 开关状态 高位处理 (39~16位) 低位处理 (15~0位)
操作数在低 16 位 SXM = 0 (无符号) 强行补 0 保持原 16 位数据
SXM = 1 (有符号) 依照第 15 位符号位扩展 保持原 16 位数据
操作数在高 16 位 SXM = 0 (无符号) 39~32位补 0 15~0位强行清 0
SXM = 1 (有符号) 39~32位依照符号位扩展 15~0位强行清 0

(3) OVM 饱和溢出物理逻辑

当 40 位运算发生爆表溢出时,芯片由状态寄存器 ST1 中的 OVM 控制:

  • OVM = 0(正常溢出):不对 ALU 结果做任何干预,直接写入目标累加器,高位溢出丢失。
  • OVM = 1(饱和压制):硬件自动执行裁剪修正:
    • 正向溢出:将 32 位最大正数 007FFFFFFFH 锁死装入累加器。
    • 负向溢出:将 32 位最小负数 FF80000000H 锁死装入累加器。
    • 状态反馈:状态寄存器 ST0 中的溢出标志位 OVA/OVB 自动拉响警报(置 1)。

2. 40位累加器结构与“三步切糕移位法”

累加器结构

C54x 集成两个独立的 40 位累加器(A 和 B),其物理空间严格被划分为三段:AG (39~32位)、AH (31~16位)、AL (15~0位)。

STH数据移动例子

✍️ 移位存储指令速记物理链路

当执行带移位的 STH(存储高位)或 STL(存储低位)指令时,遵循“桶形移位器输出镜像,累加器本尊不变”的死律:

移位寄存器物理框图
  • 第一步:看正负,滑整体
    • 立即数为正(如 8):代表左移。数据整体左滑,右侧空出车道一律补 0
    • 立即数为负(如 -8):代表右移。数据整体右滑,左侧空出车道一律复制符号位
  • 第二步:看指令,切蛋糕
    • 若为 STH:眼睛死盯最新镜像中的 AH 区域(中间 4 个十六进制字母),切下存入目标内存。
    • 若为 STL:眼睛死盯最新镜像中的 AL 区域(最后 4 个十六进制字母),切下存入目标内存。
  • 第三步:本尊判定:在旁边无条件写下:累加器 A / B 的内部原数值保持绝对不变

📊 移位存储全链精炼对照表(原数据:FF 0123 4567

移位指令 物理换算过程(滑移镜像) 🎯 存储单元 T 结果 累加器 A 本尊状态
STH A, 8, T 左移 8 位 \(\rightarrow\) 01 2345 6700 2345H 不变 (FF 0123 4567)
STH A, -8, T 右移 8 位 \(\rightarrow\) FF FF01 2345 FF01H 不变 (FF 0123 4567)
STL A, 8, T 左移 8 位 \(\rightarrow\) 01 2345 6700 6700H 不变 (FF 0123 4567)
STL A, -8, T 右移 8 位 \(\rightarrow\) FF FF01 2345 2345H 不变 (FF 0123 4567)

3. 桶形移位寄存器与“指数归一化”黄金搭档

桶形移位器框图

桶形移位器由多路选择器门阵列组成,可在 1 个时钟周期内 完成 -16 ~ 31 位的任意移位。

🎯 移位控制源的三大物理途径

  1. 立即数控制ADD A, -4, B \(\rightarrow\) 步数写死在代码中(负数代表右移 4 位)。
  2. 预设开关控制ADD A, ASM, B \(\rightarrow\) 硬件动态读取 ST1 中的 ASM 寄存器(5 位)。
  3. 动态小黑板控制NORM A \(\rightarrow\) 步数强行由暂存器 T 的低 6 位决定。

4. 17×17 硬件乘法累加单元(MAC)

MAC单元功能框图
  • 17×17 的物理本质:数据虽为 16 位,但为了在底层完美包容有符号数(补码)的加减,硬件上额外拓宽了 1 位物理补码符号位,拼成 17 位乘法器。
  • 算法支撑:17×17 乘法器输出端直通下面的 40 位加法器,实现了乘法与累加在单个周期内一步到位。

📍 第三站:专用算法硬核加速部件

1. CSSU(比较、选择和存储单元)与 CMPS 指令

CSSU硬件框图

CMPS 是为 Viterbi 算法进行路径追溯而设计的纯硬件快车道。

  • 考场速记死律
    • 高位大 \(\rightarrow\)AH \(\rightarrow\) TRN(0) = 0 \(\rightarrow\) TC = 0(全员归零)。
    • 低位大 \(\rightarrow\)AL \(\rightarrow\) TRN(0) = 1 \(\rightarrow\) TC = 1(全员起航)。
  • TRN 移位机理:通过连续 16 次左移,TRN 寄存器得以用最紧凑的二进制(0与1)无缝锁死 16 轮淘汰赛的完整历史分叉足迹。

2. 指数编码器(EXP)手算图表拓扑

\[\text{T 寄存器中的指数值} = \text{总连续相同符号位数} - 8 \]

题型分类 考场原题样例 1. 展开二进制(数出总符号位数) 2. 带入公式计算 🎯 最终答案(存入 T) 后续 NORM 动作
题型 Ⅰ(高位全 F) A = FF FFFFF F001H 从第39位往右数,共有 19 个连续的 1 \(19 - 8 = 11\) 000BH 向左平移 11 位
题型 Ⅱ(高位全 0) A = 00 0000 1234H 从第39位往右数,共有 27 个连续的 0 \(27 - 8 = 19\) 0013H 向左平移 19 位
  • 物理反向避坑:若连续符号位数小于 8,减 8 后必得负数,此时 T 写入负数二进制补码,后续 NORM 自动驱动桶形移位器向右平移以防高位爆表。

📍 第四站:状态寄存器(ST0 / ST1)标志位物理账本

1. ST0(状态寄存器 0):主要负责“看天气(记录运算状态)”

标志位 物理全称 核心硬件逻辑 考场状态判定
OVF Overflow Flag 监测 40 位累加器是否发生爆表。 累加器满溢出来时自动置 1
TC Test/Control flag 记录测试指令与 CMPS 淘汰赛的胜负。 CMPS 指令下低位 AL 获胜时置 1,高位胜清 0
C Carry bit 算术运算最高位进位/借位状态。 加法产生进位或减法无借位时置 1;硬件复位默认置 1

2. ST1(状态寄存器 1):主要负责“设机关(控制硬件模式)”

控制位 物理全称 核心硬件逻辑 考场控制死律
OVM Overflow Mode 累加器防爆高压饱和安全帽的总开关。 OVM=1:锁定最大/最小值;OVM=0:任由高位丢失。
SXM Sign Extension Mode 16位有无符号数向40位拉伸的对齐开关。 SXM=1:依照符号位拉伸;SXM=0:高24位强行清零。
ASM Accumulator Shift Mode 5位存储空间,控制桶形移位器的滑移步数。 ADD A, ASM, B 指令启动时,滑梯移位直接读取此处的数值。

🚀 第一部分:第二章核心汇编指令大集结 (Cheat Sheet)

基于文档内容,我将 PPT 和笔记中提到的关键指令整理如下,适合考前速记:

1. 算术与逻辑运算类

指令 功能描述 核心考点/避坑
ADD A, -4, B A 右移 4 位后加到 B 负数右移,A 原值不变
ADD A, ASM, B A 按 ASM 设定位数移位后加到 B 移位量由状态寄存器 ST1.ASM 决定
ADDS / SUBS 无符号加/减法 禁止符号扩展,不看 SXM 标志
ADDM 存储器到存储器运算 结果不进累加器,直接存内存

2. 数据存储与定标类 (累加器操作)

指令 功能描述 核心考点/避坑
STH A, 8, T A 左移 8 位,存高 16 位 (AH) 到 T 切中间;正数左移补 0
STL A, -8, T A 右移 8 位,存低 16 位 (AL) 到 T 切尾部;负数右移补符号位
STLM A, AR1 A 的低 16 位存入 AR1 属于 MMR 写操作,极易引发流水线冲突

3. 特种算法加速类 (CSSU & EXP)

指令 功能描述 核心考点/避坑
CMPS A, *AR1 比较 AH 与 AL,存大者 CSSU 核心;自动更新 TRN 和 TC 标志
EXP A 提取指数 计算公式:\(T = \text{前导符号位数} - 8\)
NORM A 归一化 根据 T 寄存器的值对 A 进行物理移位

4. 系统控制与 I/O

指令 功能描述
RSBX / SSBX 复位/置位状态位 (如 SSBX SXM)
IDLE1/2/3 闲置省电指令 (分级关闭外设/PLL)
PORTR / PORTW 外部 I/O 空间读写
FB[D] 等系列 扩展程序存储器的长跳转/长调用指令

📚 第二部分:硬件结构与关键机制总结

1. 内部总线结构 (8组16位总线)

  • 架构:1 条程序总线 (PB) + 3 条数据总线 (CB, DB, EB) + 4 条地址总线。
  • 优势:单周期内可同时完成 取指 (1条) + 取数 (2个操作数) + 写结果 (1个)

2. CPU 核心部件

  • ALU (算术逻辑单元)
    • SXM (符号扩展):决定 16 位数据进入 40 位 ALU 时,高位补 0 还是补符号位。
    • OVM (溢出模式):决定溢出时是饱和处理 (Saturation) 还是正常溢出。
  • 累加器 (ACC A/B)
    • 结构:40 位 = AG (8位保护) + AH (16位高) + AL (16位低)
    • 移位存储口诀:正左负右,STH 切中,STL 切尾,本尊不变
  • 桶形移位器:支持 \(-16 \sim 31\) 位移位,用于归一化和定点数运算。

🧠 第三部分:终极通关 Quiz 满分答案库

1、TMS320C54x芯片的基本结构都包括哪些部分?

TMS320C54x 系列 DSP 芯片虽然种类很多,但结构基本相同,主要由以下 10 个部分 组成:

  1. 中央处理器 (CPU)
  2. 内部总线控制结构
  3. 特殊功能寄存器
  4. 数据存储器 (RAM)
  5. 程序存储器 (ROM)
  6. I/O 接口 (扩展功能)
  7. 串行口
  8. 主机通信接口 (HPI)
  9. 定时系统 / 定时器
  10. 中断系统

2、TMS320C54x芯片的CPU主要由几部分组成?

它的 CPU 是个拥有高度并行处理能力的“超级加工厂”,主要由以下 7 大核心部件 组成:

  1. 40 位算术逻辑运算单元 (ALU)
  2. 2 个 40 位累加器 (ACCA 和 ACCB)
  3. 支持 -16~31 位移位的桶形移位寄存器
  4. 乘法-累加单元 (MAC)
  5. 比较、选择和存储单元 (CSSU)
  6. 指数编码器 (EXP)
  7. CPU 状态和控制寄存器 (ST0、ST1、PMST 等)

3、PMST中的MP/MC、OVLY和DROM 3个状态位对存储空间结构有何影响?

这三个开关是大厨用来布置“粮仓”的关键:

  • MP/MC (微处理器/微型计算机方式位):决定是否允许使用片内程序存储器 ROM。MP/MC=0 时,工作在微机模式,片内 ROM 映射到程序空间;MP/MC=1 时,工作在微处理器模式,程序空间全部在外部存储器,不能使用片内 ROM。
  • OVLY (RAM 重复占位标志):决定内部 DARAM 是否映射到程序存储空间。OVLY=0 时,内部 DARAM 只作为数据存储器;OVLY=1 时,内部 DARAM 同时被映射到程序存储空间和数据存储空间(除数据页0外)。
  • DROM (数据 ROM 位):决定片内 ROM 是否可以映射到数据存储空间。DROM=0 时,内部 ROM 不映射到数据空间;DROM=1 时,部分片内 ROM 被映射到数据存储空间。

4、TMS320C54x芯片的内外设主要包括哪些电路?

为了配合强大的 CPU,芯片配备了以下 7 种 核心片内外设电路:

  1. 通用 I/O 引脚(如 XF 和 BIO)
  2. 定时器
  3. 时钟发生器(含锁相环 PLL)
  4. 主机接口 (HPI)
  5. 串行通信接口
  6. 软件可编程等待状态发生器
  7. 可编程分区转换逻辑

5、TMS320C54x芯片的流水线操作共有多少个操作阶段?

共有 6 个 操作阶段(深度为6的流水线)。它们分别是:

  1. 预取指 (P):生成地址并送上程序地址总线 PAB。
  2. 取指 (F):从存储器读取指令代码送到程序总线 PB。
  3. 译码 (D):将指令送入译码器 IR 翻译并产生控制信号。
  4. 寻址 (A):生成数据存储器的读/写地址。
  5. 读数 (R):从存储器读取操作数。
  6. 执行 (X):执行运算并将结果写回存储器。

6、流水线冲突是怎样产生的?有哪些方法可以避免?

  • 产生原因:由于 CPU 的内部资源有限,当多于一个流水线上的指令在同一个机器周期内“抢夺”同一个硬件资源(例如同时访问两次同一个存储器块,或者对 MMR 寄存器执行写操作后紧接着马上读取)时,就会产生时序冲突。
  • 避免方法
    1. 硬件自动解决:由 CPU 硬件通过自动延迟操作周期来解决(自动插入等待)。
    2. 程序软件解决:通过重新安排汇编指令的执行顺序来规避。
    3. 手动插入空操作:查阅等待周期表,在冲突的指令之间人为插入对应数量的 NOP(空操作)指令。
    4. 利用隐含保护:利用双字或三字指令(如 STM)自身执行周期长、自带隐含保护周期的特性来填补等待间隙。

7、TMS320C54x芯片的串行口有哪几种类型?

不同型号配置不同,总共分为以下 4 种 类型:

  1. 标准同步串行口 (SP)
  2. 缓冲同步串行口 (BSP)
  3. 多通道缓冲同步串行口 (McBSP)
  4. 时分复用串行口 (TDM)

8、TMS320VC5402 共有多少可屏蔽中断?它们分别是什么?NMI和RS属于哪一类?

  • 共有 16 个 固定优先级的可屏蔽硬件中断,分别是 SINT0 ~ SINT15
  • NMI (不可屏蔽中断)RS (复位) 属于非屏蔽中断(外部硬件中断源),它们不受控制寄存器中 INTM 开关的屏蔽限制。

Q9:试分析下列程序的流水线冲突,画出流水线操作图。如何解决流水线冲突?

STLM A, AR0
STM #10, AR1
LD *AR1, B

  • 冲突分析
  1. 第一条指令 STLM 在执行级 X 级(假设在 \(T_6\) 周期)向存储器映像寄存器进行了写操作 。

  2. 第二条指令 STM 在其执行级也准备进行写操作,造成外部总线与写资源的冲突,芯片硬件会自动将其延迟一个周期(产生 1 个周期的自动保护) 。

  3. 第三条指令 LD *AR1, B 在寻址级 A 级需要对 AR1 进行读出间接寻址 。但此时由于前面的冲突和延迟,AR1 里的最新值 #10 尚未完全写入准备好。“前写后读”导致了新的严重流水线冲突

  • 流水线操作图(图解数据流冲突与延迟)
机器周期 ──►   T1   T2   T3   T4   T5   T6   T7   T8   T9
────────────────────────────────────────────────────────────
STLM A, AR0    [P]  [F]  [D]  [A]  [R]  [Xw]
STM #10, AR1        [P]  [F]  [D]  [A]  [R]  [Xw]  <-- 硬件自适应延迟
LD *AR1, B               [P]  [F]  [D]  [A]* [R]   [X]
                                         ▲
                                         └─ 冲突!此时AR1尚未写入完毕

  • 解决办法:在 STLM 后、或者在 STM 指令后插入一条 NOP 空操作指令,将读寻址动作强行错开,以腾出足够的物理级时间给 AR1 刷新数据 :
STLM A, AR0
NOP               ; 插入一个空操作
STM #10, AR1
LD *AR1, B

Q10:试根据等待周期表,确定下列程序段需要插入几个NOP指令。

① 核心分析:

LD @GAIN, T       ; 对 T 寄存器进行写操作(查表:对 T 写操作需要 1 个等待周期)
STM #input, AR1   ; 属于【双字指令】,在流水线中自带 1 个周期的隐含保护
MPY *AR1+, A      ; 读 T 碗干活

  • 结论:因为紧随其后的 STM 是一个双字指令,物理上已经创造了 1 个周期的隐含保护延迟,刚好抵消了 LD ..., T 所需的 1 个等待周期 。

  • 需要插入的 NOP 数量0 个

② 核心分析:

STLM B, AR2       ; 存储器映像写操作(查表:对辅助寄存器 ARx 写入需要 2 个等待周期)
STM #input , AR3  ; 属于【双字指令】,提供 1 个周期的隐含保护。2 - 1 = 1,仍欠 1 个周期
MPY *AR2+, *AR3+, A

  • 结论:对 AR2 写入需要 2 个周期,虽然双字指令 STM 隐含屏蔽了 1 个周期,但在第三行马上使用 AR2 间接寻址时,依旧存在 1 个周期的断层 。

  • 需要插入的 NOP 数量1 个。应修改为 :

STLM B, AR2
STM #input, AR3   ; 隐含保护 1 周期
NOP               ; 补齐最后的 1 个等待周期
MPY *AR2+, *AR3+, A

③ 核心分析:

MAC @x, B
STLM B, ST0       ; 对状态寄存器 ST0 进行写操作(查表:对 ST0 写入需要 3 个等待周期)
ADD @table, A, B  ; 紧随其后的普通单字算术指令,无任何隐含保护

  • 结论:对存储器映像状态寄存器 ST0 执行写操作后,必须雷打不动地插入 3 个完全空开的机器周期,后面的指令才能安全执行 。

  • 需要插入的 NOP 数量3 个。应修改为 :

MAC @x, B
STLM B, ST0
NOP               ; 插入第 1 个空操作
NOP               ; 插入第 2 个空操作
NOP               ; 插入第 3 个空操作
ADD @table, A, B

posted @ 2026-05-27 13:21  无敌烤肉大王  阅读(13)  评论(0)    收藏  举报