Chipyard同接XDMA与自定义外设时a.bits.user.amba_prot未初始化问题
问题解答
1. a.user.amba_prot系列信号的作用
这组信号是Rocket-Chip中TLToAXI4转换模块自动附加在TileLink用户域的控制信号,直接映射AXI协议的事务属性位,作用分别如下:
fetch:标记当前事务为取指请求,对应AXI的AxPROT[0]位,用于区分指令访问和数据访问secure:标记当前事务为安全域发起的访问,对应AXI的AxPROT[1]位,适配TrustZone安全隔离机制,未开启安全扩展时默认值为0privileged:标记当前事务为处理器特权模式(机器/监督模式)发起的访问,对应AXI的AxPROT[2]位,用于区分内核态和用户态访问modifiable:标记当前事务允许总线互联修改(如合并事务、拆分burst、重排顺序),对应AXI的AxCACHE相关控制位,用于支持缓存可合并的访问请求
2. 同时接入XDMA和自定义外设才出现未驱动报错的原因
这个问题的核心是TileLink Diplomacy框架的全局参数协商机制:TileLink总线的Bundle结构(包括是否携带用户域字段)是由整条链路两端的所有节点参数共同协商决定的,只要链路上存在任意一个节点需要使用amba_prot字段,整条链路的TL Bundle都会自动携带这些字段。
- 仅接入XDMA时,XDMA所在的跨ChipTop到TestHarness的TL链路中没有任何节点需要用到
amba_prot字段,协商出来的TL Bundle本身就不包含这组信号,自然不会触发未初始化报错。 - 仅接入自定义外设时,自定义外设内部的
TLToAXI4节点确实会生成amba_prot字段,但所有相关信号的驱动链路都在ChipTop内部闭环,不会传递到对外导出的XDMA相关TL端口上,也不会报错。 - 二者同时接入时,自定义外设的
TLToAXI4节点会触发系统总线的全局参数更新,导致ChipTop对外导出的XDMA相关TL端口的Bundle也自动带上了amba_prot字段;但你在TestHarness中实现的XDMA连接链路没有节点会主动驱动这组信号,就触发了FIRRTL的$RefNotInitializedException异常。
你补充的beatBytes不匹配问题不是根因,但确实会增加参数协商的复杂度,如果不需要用到这组信号,可以直接在HarnessBinder中手动给这几个信号赋值为0,比直接用DontCare更安全,不会引入潜在的功能隐患。
内容的提问来源于stack exchange,提问作者metzkorn
相关产品推荐
相关产品推荐

