总线
最后更新于
我们使用 SimpleBus 作为 NutCore 的访存总线, 它的设计借鉴了 AMBA, TileLink 等总线的思想, 根据我们的需求加入了一定的功能, 是专门为本项目设计的一套最小满足功能需求的总线.
目前, SimpleBus 有两个实现层级, 分别是 SimpleBusUC 和 SimpleBusC.
SimpleBusUC 是 SimpleBus 的最基本实现, 用于非 Cache 的访存通路中, 它包含了 req 和 resp 两个通路, 使用 Decoupled 方式握手, 信号细节如下:
SimpleBus的id通道在NutShell顺序核的设计中并没有被使用.
我们也内置了基于 SimpleBusUC 的各类 CrossBar, 经过了一定的验证, 方便开发者进行复用.
SimpleBusC 在 SimpleBusUC 的基础上增加了与一致性相关的功能, 用于 Cache 的访存通路中, 本质上是由两个 SimpleBusUC 组合而成的:
其中 mem 是访存通道, coh 是一致性维护通道.
考虑到在 FPGA 验证和实际流片过程中, 相关 IP 接口通常是标准化的总线协议(比如 AMBA 系列), 我们无法直接让 SimpleBus 总线接入外设和内存, 因此我们加入了 SimpleBus 到 AXI4 的转换部件, 最终以 AXI4 协议的形式暴露给 SoC, 详见访存系统和外设系统章节.
req 信号名称
位宽
注释
req.addr
AddrBits
访存地址(位宽与体系结构实现相关)
req.size
3
访存大小(访存Byte = 2^(req.size))
req.cmd
4
访存指令, 详见 SimpleBus.scala 中 SimpleBusCmd 的实现
req.wdata
DataBits
内存写数据(位宽与体系结构实现相关)
req.wmask
DataBits/8
内存写掩码
req.user
UserBits
用户自定义数据, 在访存过程中不被修改
req.id
IdBits
标识访存请求的来源, 在访存过程中不被修改
resp 信号名称
位宽
注释
resp.cmd
4
访存状态回复
resp.rdata
DataBits
访存读数据
resp.user
UserBits
用户自定义数据, 在访存过程中不被修改
resp.id
IdBits
标识访存请求的来源, 在访存过程中不被修改