使用 Chisel 开发通用 AXI4 外设

Developing Generic AXI4 Peripheral with Chisel

我想用 Chisel 开发一个通用的 AXI4 外设。我可以为此目的使用 Rocket-Chip 的 AMBA 库吗?我只能在下面的 link 中找到有关此主题的文档;

MMIO-Peripherals

但是,本文档中的示例旨在与 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 接口: