动态架构图谱 · GSAP Timeline / ScrollTrigger 驱动

TMS320C55x
从系统到芯片内部的完整复习地图

按“应用算法 → DSP 定位 → C55x 芯片结构 → 总线并行 → IPAD CPU → 统一物理空间 → 寻址方式 → C/汇编/链接 → 片内外设 → 实验代码”的层次展开,覆盖 TMS320C55x/VC5509 课程资料中的全部考点。

12条核心总线关系
IPADCPU 四大单元
23→24数据地址左移一位
PSC+TIM20 位通用定时器
Didactic chip die viewC55x / VC5509
TMS320C55x DSP · 改进型哈佛结构 统一 24 位物理空间 + 独立程序/数据/I/O 访问规则 CPU Core IIBQ PPAGEN ADAGEN D40-bit ALU/MAC 程序空间24-bit byte addr 数据空间23-bit word addr<<1 → 24-bit I/O 空间16-bit word addr 片上 RAMDARAM / SARAM EMIFCE[3:0] 外设DPLL Timer DMA

1. 系统层:为什么需要 DSP

DSP 不是替代 CPU,而是用专用硬件和指令高效完成连续信号流的实时数学运算。

2. 芯片层:C55x 的结构变化

C55x 相对 C54x 的核心变化可归纳为:性能更高、功耗更低、存储结构更先进。重点抓住两个质变:可变长指令与统一的程序/数据物理空间。

可变长指令 8–48 位统一 24 位物理空间低功耗定点 C5000VC5509 课程重点

C54x → C55x 的两项质变

  • 可变长指令:C55x 支持 8、16、24、32、40、48 位指令;代码密度更高,但取指后需要指令缓冲与预译码重新组合。
  • 统一程序/数据空间:物理地址空间统一为 24 位;访问时仍通过程序总线、数据总线和不同寻址规则完成。
  • 注意:统一编址不等于随意混放,段放置由 .cmd 文件中的 MEMORYSECTIONS 控制。

统一编址与哈佛结构不矛盾

统一的是物理地址空间;CPU 访问程序和数据时仍有独立的程序总线、数据总线和地址产生电路,因此仍体现改进型哈佛结构的并行取指、取数、写回能力。

程序访问PB 32 位取指令包,PAB 产生 24 位字节地址
数据访问BB/CB/DB 读,EB/FB 写,DAGEN 产生 23 位字地址

3. 总线层与 IPAD CPU

总线数量和位宽是第二章最容易出填空、判断、简答和综合题的内容。C55x 的高吞吐来自单周期取程序、读多个操作数和写回结果。

总线并行流动演示

PB 程序数据总线32 位:一次读 4 个字节指令包
PAB 程序地址总线24 位:产生程序空间字节地址
BB/CB/DB 数据读总线各 16 位:单周期最多并行读 3 个 16 位数据
EB/FB 数据写总线各 16 位:单周期最多并行写 2 个 16 位数据
BAB/CAB/DAB/EAB/FAB各 23 位:配合 5 条数据总线产生数据字地址

必背总线关系

  • PB = 32 位,程序数据总线。
  • PAB = 24 位,程序地址总线。
  • BB/CB/DB/EB/FB = 16 位,5 条数据总线。
  • BAB/CAB/DAB/EAB/FAB = 23 位,5 条数据地址总线。
  • 总线合计:1 程序数据 + 1 程序地址 + 5 数据 + 5 数据地址 = 12 条

CPU 的 IPAD 四个单元

单元英文名称硬件组成/关键部件功能
IInstruction Buffer Unit 指令缓冲单元PB 输入、IBQ 指令缓冲队列、预译码接收程序代码,缓冲可变长指令,预译码并分发。
PProgram Flow Unit 程序流程单元PAGEN、程序地址相关寄存器产生程序空间 24 位地址,控制顺序执行、跳转、调用、循环。
AAddress Data Flow Unit 地址流程单元DAGEN、16 位 ALU、寄存器组产生数据空间 23 位地址,配合 BB/CB/DB/EB/FB 访问数据。
DData Computation Unit 数据计算单元40 位 ALU、桶形移位器、乘法器/MAC、累加器完成算术、逻辑、移位、乘法累加等运算。

C55x 主要硬件特征

两个 MAC

提高乘加密集算法吞吐,适合 FIR、相关、卷积等。

40 位 ALU/累加器

16 位输入反复乘加会产生更宽中间结果,40 位可降低溢出和舍入误差。

桶形移位器

快速完成定点缩放、规格化和移位。

辅助 ALU

用于地址修改、循环计数和指针更新。

IBQ

配合可变长指令,减少取指等待。

IDLE

无任务时进入低功耗机制。

4. 存储空间与地址规则

C55x 有统一程序/数据物理空间和独立 I/O 空间。程序空间按字节寻址,数据空间按 16 位字寻址,I/O 空间也按 16 位字寻址。

三类空间总览

空间地址位数寻址单位关键规则
程序空间24 位字节,8 位为一个地址PAB 传 24 位地址;PB 一次读 32 位指令包。
数据空间23 位逻辑地址字,16 位为一个地址访问时逻辑地址左移 1 位,最低位补 0,形成 24 位物理字节地址。
I/O 空间16 位字,16 位为一个地址与程序/数据空间分开,常用 port(k16)ioport 访问。

地址转换模拟器:23 位数据字地址 → 24 位物理字节地址

规则:物理地址 = 数据字地址 ≪ 1,最低位固定补 0。

24 位物理字节地址
000204

32 位长字存放模拟器:LSW = MSW ⊕ 1

长字地址就是 MSW 地址,LSW 地址由 MSW 地址最低位取反得到。

LSW 地址
0101

MSW 在偶地址,LSW 在后一个奇地址,同属一个 32 位对齐单元。

MMR 与存储器映射

MMR 是 Memory Mapped Registers,即存储器映射寄存器。许多控制寄存器借用存储空间低地址区域访问。

  • 课程必记:前 96 个字地址用于 MMR。
  • .cmd 时常以字节为单位:96 个 16 位字 = 0xC0 字节

程序空间对齐与取指

程序空间按字节寻址,指令长度可为 1–6 字节。PB 宽 32 位,CPU 按 4 字节边界读取指令包,常见边界地址:

000000h, 000004h, 000008h, 00000Ch, ...

指令本身可从任意字节地址开始;若 PC 不在边界,硬件从所在 32 位边界取回指令包,再从缓冲中选择真正执行的指令字节。

片上 RAM、片外存储器与容量单位

  • DSP 资料常用“多少 K 字”描述容量,因为基本数据处理单位常是 16 位字。
  • 128K × 16 bit = 128K 个 16 位字 = 256KB 字节
  • DARAM 是双访问 RAM,一个机器周期可支持两次访问。
  • SARAM 通常单周期一次访问。
  • 片外存储器通过 EMIF 扩展 SRAM、ROM、Flash、SDRAM 等。

记忆图:从逻辑空间到物理空间

程序地址

24 位,字节地址,直接对应统一物理空间。

数据地址

23 位,16 位字地址,访问时左移 1 位补成 24 位物理字节地址。

I/O 地址

16 位,独立 I/O 空间,使用 port(k16) 或 ioport。

5. 指令系统与寻址方式

第三章最重要的是寻址方式:绝对寻址、直接寻址、间接寻址。复杂指令不要求全背,但要能读懂 MOV、ADD、SUB、MPY、MAC、FIR、LMS 等功能。

绝对寻址:k16、k23、port(k16)

形式含义易错点
k16指令中给出 16 位地址常数。访问数据空间时,通常与 DPH 高 7 位级联形成 23 位数据地址,因此受当前数据页影响。k16 是地址字段宽度,不是数据位宽。
k23指令中给出 23 位无符号地址常数,可直接给出数据空间地址,不受 64K 页内偏移限制。可突破 64K 页内限制。
port(k16)访问 16 位 I/O 空间,k16 给出 I/O 空间地址。访问 I/O,不是普通数据空间。

直接寻址:由 ST1_55 中 CPL 位决定 DP 或 SP

CPL模式23 位有效地址形成适用场景
0DP 直接寻址DPH 高 7 位 + DP 中 9 位页内块号 + 指令 7 位偏移,可理解为 DPH:DP:offset7。全局/静态数据。
1SP 直接寻址SPH 高 7 位 + SP 16 位基址 + 指令 7 位偏移相加。重点是 SP + offset7 有加法,不是简单拼接。堆栈局部变量、参数、返回现场。

纠错:SP 直接寻址不是形成 30 位地址,最终仍形成数据空间的 23 位有效地址,随后再左移 1 位形成 24 位物理地址。

间接寻址:AR 与双 AR

写法含义
*ARn访问 ARn 指向的数据存储单元。
*ARn+先使用 ARn 指向的地址,再使 ARn 自增,常用于顺序读数组。
*ARn-先使用 ARn 指向的地址,再使 ARn 自减。
*+ARn先修改地址,再访问;具体形式受 ARMS 模式限制。
  • AR0–AR7:8 个辅助寄存器。
  • ST2_55 中 ARMS=0:DSP 模式,地址修改方式丰富,适合数据流处理。
  • ARMS=1:控制模式,地址修改方式较少。
  • 双 AR 间接寻址:可同时通过两个辅助寄存器访问两个数据存储单元。
ADD Xmem, Ymem, AC0    /* AC0 gets Xmem + Ymem */

指令并行

形式含义
::单条指令内部的隐含并行,指令本身同时完成两个操作。
||用户或编译器显式指定两条指令并行执行。
混合形式内置并行与用户显式并行同时出现。
  • 两条指令总长度不超过 6 字节。
  • 没有运算器、地址产生单元、总线等资源冲突。
  • 其中一条具有并行使能位,或两条指令符合软双并行条件。

常见汇编指令识别方法

1. 先看助记符

MOV 搬移,ADD 加法,SUB 减法,MPY 乘法,MAC 乘加,AND/OR/XOR 逻辑运算,B 跳转,CALL 调用,RET/RETURN 返回。

2. 再看操作数来源

# 表示立即数;*ARn 表示 AR 间接寻址;AC0–AC3 是累加器;T0/T1 是临时寄存器;port(k16) 是 I/O 端口。

3. 最后看地址是否修改

*ARn+ 先取数再自增;*ARn- 先取数再自减。

6. 软件设计:C、汇编、COFF、CMD

软件设计从源程序进入编译器、汇编器、链接器,再由 .cmd 文件决定逻辑段落到哪块实际存储器。

开发工具链与裸机程序结构

工具作用
编译器把 C/C++ 源程序转换为汇编语言或目标代码。
汇编器把汇编源程序转换成目标文件。
链接器按 .cmd 文件把多个目标文件、库文件和段合成为可执行文件。
归档器把多个目标文件打包成库,供链接使用。

裸机程序通常由初始化、主循环和中断服务程序构成。RTOS 任务状态可了解为休眠、就绪、运行、挂起、被中断。

C55x C 语言类型长度

类型或指针C55x 长度注意

关键字:ioport / interrupt / onchip / volatile

C 语言优化等级

  • -o0:较低级优化,主要进行局部无用代码删除、表达式简化等。
  • -o1 / -o2:逐步增强优化。
  • -o3:最高级优化,可做函数间、文件级优化,可能内联小函数、删除未使用函数。
  • 优化等级越高,优化越强,高等级包含低等级的大部分优化功能。

C 与汇编混合编程

// C 中直接嵌入汇编
asm("BCLR ST1_INTM");

// C 端声明汇编函数
extern int asmfunc(int a, int *p);

; 汇编端符号常加下划线
_asmfunc:
    ; assembly body
    RETURN

C 编译器通常不检查嵌入汇编语法和副作用,复杂功能更适合“C 调用独立汇编子程序”。

COFF 段与链接命令文件

段名作用

-heap 是链接选项,用于设置动态内存大小;课程中动态内存重点看 .sysmem 段,malloc/free 使用该动态内存池。

CMD 文件:MEMORY 与 SECTIONS

样例结构

-stack 0x1800
-heap  0x0100
-e RESET_ISR

MEMORY
{
  PAGE 0:
    MMR    (RWIX) : origin = 000000h, length = 0000C0h
    DARAM0 (RWIX) : origin = 0000C0h, length = 000F40h
    SARAM0 (RWIX) : origin = 010000h, length = 010000h

  PAGE 2:
    IOPORT (RWI)  : origin = 000000h, length = 020000h
}

SECTIONS
{
  .text     > SARAM0
  .const    > SARAM0
  .cinit    > SARAM0
  .bss      > DARAM0
  .data     > DARAM0
  .stack    > DARAM0
  .sysstack > DARAM0
  .sysmem   > DARAM0
  .ioport   > IOPORT PAGE 2
}

答题模板

MEMORY

描述芯片或开发板上有哪些物理存储区域,包括区域名称、属性、起始地址 origin/o 和长度 length/l。

SECTIONS

描述编译链接生成的逻辑段如何分配到 MEMORY 中声明的物理区域。

检查重叠

起始地址 + 长度不能越过下一个区域起始地址。

段分配规律

.text 常放程序空间或高速 SARAM;.bss/.data/.stack/.sysmem 常放数据 RAM;.ioport 放 I/O 空间 PAGE 2。

7. 片内集成外设

第五章重点是时钟发生器和通用定时器,EMIF、EHPI、McBSP、DMA、GPIO 掌握概念和作用。

时钟发生器:CLKIN → DPLL → CPU/外设时钟

  • 从 CLKIN 引脚接收输入时钟。
  • 经 DPLL 和分频/倍频电路产生 CPU 与外设工作时钟。
  • 可通过 CLKOUT 输出给外部器件。
  • 重点寄存器:CLKMD,字段为 PLL ENABLE、PLL MULT、PLL DIV。
  • 题目给寄存器表时,先看 PLL ENABLE,再看 MULT/DIV;字段是否 “+1” 按题目表格,课程强调常以字段值 +1 参与计算。
锁定模式:fCPU ≈ fCLKIN × 倍频系数 / 分频系数
旁路模式:PLL 不倍频,输入时钟经旁路分频送入系统

通用定时器模拟器:PSC + TIM

定时周期
0.01 s

公式:Ttimer = (TDDR + 1)(PRD + 1)Tclk

PSC预定标计数器,更像低位/个位
TIM主计数器,更像高位/十位

定时器寄存器与工作过程

寄存器作用
PRSC预定标寄存器,包含 TDDR 周期字段和 PSC 当前计数字段。
TIM16 位主计数器当前值。
PRD16 位主周期寄存器,装载给 TIM。
TCR定时器控制寄存器,含 TSS 停止位、TLB 装载位、FUNC 工作模式位等。
输入时钟 → PSC 递减 → PSC 到 0 → TIM 递减 → TIM 到 0 产生事件

定时器初始化顺序

1. 停止

设置 TSS=1 停止定时器,必要时保存现场或冻结当前计数。

2. 写周期

写入预定标周期 TDDR 和主周期 PRD。

3. 装载

设置 TLB=1,把 TDDR → PSC、PRD → TIM。

4. 启动

清除装载请求,设置 TSS=0,启动定时器。

易错:不要理解成“先装载再写周期值”。真正运行的是 PSC/TIM 当前计数器,周期寄存器需要先写好再装载。

EMIF、EHPI、McBSP、DMA、GPIO

外设复习要点
EMIF连接片外存储器和并行外设:SRAM、ROM、Flash、SBSRAM、SDRAM、并行 A/D、并行 D/A、FPGA、CPLD。C55x 使用 CE[3:0] 片选信号划分不同片外地址空间,减少外部译码逻辑。看图时识别数据线、地址线、片选、读写控制、复位、字节选择信号。
Flash非易失,常按异步存储器接口连接,掉电不丢失,写入较慢。
SRAM静态随机存储器,访问较快。
SBSRAM同步突发静态存储器,支持突发访问,速度高。
SDRAM同步动态存储器,容量大,控制更复杂。
EHPI增强型主机接口,使外部主处理器可访问 DSP 部分存储空间,用于主机控制 DSP、下载程序、交换数据或产生中断。
McBSP多通道缓冲串行口,可配置时钟、帧同步、数据位宽和极性,可模拟 SPI 等串行通信方式。
DMA直接存储器访问,不经 CPU 搬运数据,可在存储器与外设、存储器与存储器之间传输,常由事件触发,完成后可中断 CPU。
GPIO通用输入输出口,用于简单数字输入输出控制。

8. 实验代码与程序分析题

程序分析题不要求逐字默写,而是考查能否读懂代码功能、数据流、初始化、核心循环与输出结果。

程序分析总框架

1. 找输入/输出/核心数据结构

数组、缓冲区、图像矩阵、端口、寄存器、全局变量。

2. 找初始化

时钟、定时器、串口、DMA、中断、数组清零、图像读入。

3. 看主循环或核心函数

循环次数、索引变化、条件判断、关键运算。

4. 解释关键变量

计数器、指针、累加器、阈值、像素值、滤波系数。

5. 一句话说明功能

完成什么输入处理,生成什么输出结果。

常见实验类型识别

类型程序功能分析重点
输入/输出模拟函数看从哪里读入数据、写到哪个缓冲区、是否模拟外设采样或图像加载。
直方图统计把灰度值作为下标,对 hist[pixel] 加 1,得到 0–255 灰度频数。
边缘检测/计数用 Sobel 或类似模板计算梯度,与阈值比较,统计或输出边缘点。
图像增强看灰度变换、均衡化、滤波、锐化等核心公式和输出数组。
定时器实验看 TDDR、PRD、TCR 配置,说明定时周期和中断/事件作用。
I/O 端口实验看 ioport 指针或 port(k16),说明读写 I/O 空间而不是普通数据空间。
DMA/McBSP 实验看源地址、目的地址、长度、触发事件和完成中断,说明 CPU 不直接搬运。

直方图核心逻辑模板

for (i = 0; i < 256; i++) {
    hist[i] = 0;
}

for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
        gray = image[i][j];
        hist[gray]++;
    }
}

答题说明:先把 256 个灰度级计数清零;再逐像素扫描图像;每读到一个灰度值,就把对应灰度级计数加 1;最终 hist[k] 表示灰度值为 k 的像素个数。

Sobel 边缘检测核心逻辑模板

Gx = -p00 + p02 - 2*p10 + 2*p12 - p20 + p22;
Gy =  p00 + 2*p01 + p02 - p20 - 2*p21 - p22;
mag = abs(Gx) + abs(Gy);

if (mag > threshold) {
    out[i][j] = 255;
} else {
    out[i][j] = 0;
}

答题说明:用邻域模板计算水平和垂直方向灰度变化,变化越大越可能是边缘;再用阈值区分边缘点和非边缘点,输出二值边缘图或统计边缘数量。

9. 高频易错点翻卡

点击卡片查看正确理解。这里集中覆盖判断题、填空题和简答题中最容易混淆的表述。

10. 考前最小背诵清单与覆盖矩阵

下面的 15 条是最小背诵清单;后面的覆盖矩阵用于确认本 Web App 没有漏掉资料目录中的 TMS320C55x 知识点。

15 条最小背诵清单

    覆盖矩阵:从目录到本 App 对应位置