使用 Chisel 开发通用 AXI4 外设
Developing Generic AXI4 Peripheral with Chisel
我想用 Chisel 开发一个通用的 AXI4 外设。我可以为此目的使用 Rocket-Chip 的 AMBA 库吗?我只能在下面的 link 中找到有关此主题的文档;
但是,本文档中的示例旨在与 Rocket-Chip 一起使用。我想开发一个独立的 AXI4 外设。
您的问题涉及以下内容:
- 我想开发一个独立的Axi4外设
当我开始在 Chisel 中开发 AXI4 接口时,我的出发点是 Chisel official documentation 它们从使用 AXI4 作为写入通道的典型 Verilog 外设开始,如下所示:
module my_module(
// Write Channel
input AXI_AWVALID,
output AXI_AWREADY,
input [3:0] AXI_AWID,
input [19:0] AXI_AWADDR,
input [1:0] AXI_AWLEN,
input [1:0] AXI_AWSIZE,
// ...
);
为此,凿子包如下:
class VerilogAXIBundle(val addrWidth: Int) extends Bundle {
val AWVALID = Output(Bool())
val AWREADY = Input(Bool())
val AWID = Output(UInt(4.W))
val AWADDR = Output(UInt(addrWidth.W))
val AWLEN = Output(UInt(2.W))
val AWSIZE = Output(UInt(2.W))
// The rest of AW and other AXI channels here
}
// Instantiated as
class my_module extends RawModule {
val AXI = IO(new VerilogAXIBundle(20))
}
虽然上述示例很简单,但这对我开始在 Chisel 中编写通用 AXI4 接口很有帮助。
话虽如此,我还使用了以下一些资源在 Chisel 中开发 AXI 接口:
我想用 Chisel 开发一个通用的 AXI4 外设。我可以为此目的使用 Rocket-Chip 的 AMBA 库吗?我只能在下面的 link 中找到有关此主题的文档;
但是,本文档中的示例旨在与 Rocket-Chip 一起使用。我想开发一个独立的 AXI4 外设。
您的问题涉及以下内容:
- 我想开发一个独立的Axi4外设
当我开始在 Chisel 中开发 AXI4 接口时,我的出发点是 Chisel official documentation 它们从使用 AXI4 作为写入通道的典型 Verilog 外设开始,如下所示:
module my_module(
// Write Channel
input AXI_AWVALID,
output AXI_AWREADY,
input [3:0] AXI_AWID,
input [19:0] AXI_AWADDR,
input [1:0] AXI_AWLEN,
input [1:0] AXI_AWSIZE,
// ...
);
为此,凿子包如下:
class VerilogAXIBundle(val addrWidth: Int) extends Bundle {
val AWVALID = Output(Bool())
val AWREADY = Input(Bool())
val AWID = Output(UInt(4.W))
val AWADDR = Output(UInt(addrWidth.W))
val AWLEN = Output(UInt(2.W))
val AWSIZE = Output(UInt(2.W))
// The rest of AW and other AXI channels here
}
// Instantiated as
class my_module extends RawModule {
val AXI = IO(new VerilogAXIBundle(20))
}
虽然上述示例很简单,但这对我开始在 Chisel 中编写通用 AXI4 接口很有帮助。
话虽如此,我还使用了以下一些资源在 Chisel 中开发 AXI 接口: