Mailbox 功能设计讲解

✅ Mailbox 功能设计讲解(cndm_micro_cmd_mbox

非常棒!你提供的 RTL 和驱动代码让我能给出完整且准确的设计说明。整体设计很清晰:把寄存器访问(AXI Lite)和命令通道(AXI Stream)分离,既保证软件可控,又支持硬件流水。


1. 软件端逻辑(cndm_cmd.c

  • cndm_exec_mbox_cmd()
    • 将 16 个 32bit 字写入硬件 mailbox 区:hw_addr + 0x10000 + k*4
    • 写入后 wmb() 强同步,写命令寄存器 0x0200 的 bit0=1 发起执行
    • 轮询 0x0200 bit0 清零表示完成(最多 10 次 100us)
    • 读回 16 个 32bit 响应:hw_addr + 0x10040 + k*4
    • 互斥锁 mbox_lock 序列化访问
  • cndm_access_reg():用 mailbox 实现寄存器读写,依 raw/write 标志构造命令。

2. 硬件 cndm_micro_cmd_mbox 模块结构

  • AXI-Lite 接口 (s_axil_wr, s_axil_rd) -> 读写内部 RAM(命令/响应存储)
  • AXIS 命令接口:
    • m_axis_cmd:从 mailbox 内部 RAM 读出命令数据发送到硬件命令处理链
    • s_axis_rsp:接收处理结果写回 mailbox RAM
  • 控制信号:
    • start:接受客户端启动(读指针从0开始发命令)
    • busy:当前命令流是否处理中

3. 内部 RAM 结构(taxi_ram_2rw_1c

  • 一组 32-bit x 32 的双端口 RAM:
    • a 端:AXI-lite 读写,axil_mem_addr, axil_mem_wr_en/rd_en
    • b 端:CMD/RSP 读写,cmd_mem_addr, cmd_mem_wr_en/rd_en
  • 地址逻辑:
    • 5-bit 地址 (ADDR_W=7, VALID_ADDR_W=5) -> 用于 32 个 32-bit 字 => 128B 区域
    • 低 16 words 替成命令,另外16 words 可作为应答缓存(通过高位 cmd_mem_addr[4]区分)

4. 命令处理流程(状态机)

  • 读指针 rd_ptr_reg、写指针 wr_ptr_reg 递增
  • CMD 发送:
    • (!m_axis_cmd_tvalid || m_axis_cmd.tready) && (rd_ptr != 0 || start)
    • 从 RAM 读 cmd_mem_addr = {0, rd_ptr}
    • 通过 m_axis_cmd.tvalid/tlast 发出
    • rd_ptr++; busy=1
  • RSP 写入:
    • s_axis_rsp.tvalid && !s_axis_rsp_tready_reg
    • 写到 RAM cmd_mem_addr = {1, wr_ptr}
    • tlastwr_ptr=0, busy=0;否则 wr_ptr++

5. AXI-Lite 读写握手简要

  • write_eligible / read_eligible 判断:
    • AWVALID|WVALID + !BVALID 等写条件
    • ARVALID + !RVALID 等读条件
  • last_read_reg 处理读写冲突,保证读写顺序互斥
  • 写成功后 BVALID 拉高;读成功后 RVALID 拉高

6. 关键设计优点

  • 交互一致性:
    • 驱动端写命令、poll完成、读响应一致
  • 双口 RAM:
    • AXI-Lite 与 AXIS 并行访问,不冲突
  • 简单指针环:
    • rd_ptrwr_ptr 做命令窗口(最多 16 个 word 命令)
  • start/busy 控制:
    • 外部可知正在命令发射/等待结果

7. 可能扩展点(观察即可)

  • 现在 busy 在收到 s_axis_rsp.tlast 清零,client 可以做超时/重试
  • 目前没有完整错误码 / FIFO 协议异常处理(可在上层加)
  • cmd 长度固定 16 words;如需要更灵活可在协议里加 length 字段

🔍 读者快速结论

这个 mailbox 设计是一种“AXI-Lite 写/读 + AXIS 流通道”的混合架构:

  • CPU 通过寄存器区写命令数据、触发执行、读返回;
  • 硬件通过 AXIS 命令/响应通道实际运作;
  • 通过双口 RAM 实现“寄存器到流”的桥接,并保留简单状态机控制。

Mailbox 功能设计讲解
http://witbit.cn/FPGA/taxi/Mailbox 功能设计讲解.html
作者
朝彻
发布于
2026年3月23日
许可协议