FPGA基础 -- Verilog TCM的概念与实现

一、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 系列

  • ITCMDTCM 分别代表指令与数据紧耦合内存

  • 地址范围通常是:

    • 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 区直接映射
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值