一、TCM 概念及背景
TCM 的含义:
TCM,全称 Tightly Coupled Memory,是一种不通过总线仲裁、直连 CPU 核心的数据/指令高速存储区域,具有:
- 低延迟:单周期访问延迟(通常 1-cycle read/write)
- 高确定性:不受 AXI 总线等总线干扰,RTOS 实时性更好
- 高性能访问路径:与 CPU Cache 并行存在,通常用于中断向量表、中断栈、关键任务代码、DSP 数据等高频访问区
二、TCM 与 AXI/BRAM 的关系
接口类型 | 访问延迟 | 仲裁机制 | 用途 | 接口协议 |
---|---|---|---|---|
TCM | 极低 | 无仲裁 | 实时任务/中断栈/算法核心 | 直接CPU耦合 |
AXI/AXI-Lite | 中等/高 | 需仲裁 | 通用数据/寄存器访问 | 标准协议 |
BRAM/URAM | 可变 | 无/需仲裁 | 作为TCM、缓存、FIFO等 | 任意封装 |
在 ARM Cortex-M7、Cortex-R5、Zynq A9、ZynqMP A53/R5 等 SoC 中,TCM 都是可配置的 tightly-coupled memory,用于 提高确定性性能,弥补 cache 不可控特性。
三、Verilog 层实现与接口建模
TCM 并不是一个协议,而是一种存储器接口模式,在 Verilog 中表现为:
1. 接口形式(简化版)
module tcm_interface (
input wire clk,
input wire rst_n,
input wire tcm_req, // 请求有效
input wire tcm_we, // 写使能
input wire [31:0] tcm_addr, // 地址
input wire [31:0] tcm_wdata, // 写数据
output reg [31:0] tcm_rdata, // 读数据
output reg tcm_ready // 响应
);
reg [31:0] tcm_mem [0:1023]; // 模拟 4KB TCM
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
tcm_ready <= 1'b0;
end else begin
if (tcm_req) begin
if (tcm_we) begin
tcm_mem[tcm_addr[11:2]] <= tcm_wdata;
end else begin
tcm_rdata <= tcm_mem[tcm_addr[11:2]];
end
tcm_ready <= 1'b1;
end else begin
tcm_ready <= 1'b0;
end
end
end
endmodule
✅ 注意:
- 通常情况下,tcm_ready 只延迟 1cycle,代表高性能路径;
- 地址
tcm_addr[11:2]
以字对齐访问 4KB 内存;- 需要处理 RAM 同时读写的边界条件与数据冲突。
四、TCM 接入 ARM Core 的方式(SoC FPGA)
1. Cortex-M 系列
-
ITCM
、DTCM
分别代表指令与数据紧耦合内存 -
地址范围通常是:
ITCM
:0x0000_0000 ~ 0x0000_3FFF
DTCM
:0x2000_0000 ~ 0x2000_3FFF
2. Cortex-A 系列(如 Zynq A9)
OCM
(On-Chip Memory)常用于 TCM 功能(可配置为 cache 或 TCM)- OCM 地址固定为:
0x0000_0000 ~ 0x0003_FFFF
3. TCM 在 Zynq/Vivado 中的绑定方式:
在 Vivado Block Design
中可通过:
ps7_cortexa9_0.tcm_instruction
ps7_cortexa9_0.tcm_data
绑定对应 BRAM Controller 接口,即可自定义 TCM 实现。
五、应用案例:实时图像处理中的TCM用途
以 图像滤波器 为例:
-
边缘检测滤波核处理窗口为 3x3 时:
- 可将当前行与上一行的数据缓存至 TCM
- 提高访问速度、减少 DDR 带宽需求
六、测试建议(SystemVerilog Testbench)
initial begin
tcm_req = 1;
tcm_we = 1;
tcm_addr = 32'h0000_0004;
tcm_wdata = 32'hDEADBEEF;
#10;
tcm_we = 0;
#10;
$display("Read back: %h", tcm_rdata);
$finish;
end
配合 dump.vcd
使用 GTKWave
查看时序,验证 tcm_ready
单周期响应行为。
七、总结
项目 | 特点 |
---|---|
TCM 接口延迟 | 通常为 1 cycle(极低) |
与 AXI 差异 | 无仲裁、高实时性 |
典型用途 | 中断栈、DSP运算、缓存窗口数据等 |
Verilog 实现 | 与 BRAM 接口类似,简单有效 |
FPGA SoC 平台绑定 | 与 CPU 的 TCM/OCM 区直接映射 |