【问题标题】:Add a memory to regmap()向 regmap() 添加内存
【发布时间】:2021-08-30 20:23:12
【问题描述】:

我在火箭芯片中添加了一个设备,它有控制和状态寄存器,还有一个内部 ram。为了能够使用软件访问它,我已通过以下方式将其添加到 regmap() 中:

  val mem = Module(new SinglePortMemory(32,128, 7))
  // init //
  mem.io.re := false.B
  mem.io.we := false.B
  mem.io.addr := 0.U
  mem.io.din := 0.S
  val dout = RegNext(mem.io.dout)

  regmap((
        Seq(
          0x0  -> Seq(RegField(1,enable,RegFieldDesc("enable","This bit enable my device")))
          ++ Seq.tabulate(128) {j => 
          (0x50 + (j*4)) -> Seq(RegField(32,
            RegReadFn(ready => {
              when(ready) {
                mem.io.addr := j.asUInt
                mem.io.re   := true.B
              }
              (true.B,dout.asUInt)  
          }),
          RegWriteFn((valid,data) => {
            when(valid) {
              mem.io.addr := j.asUInt
              mem.io.we   := true.B
              mem.io.din  := data.asSInt
            }
            true.B   
          }),
          RegFieldDesc(s"mem_${j}","")
        ))}
      ):_*)

现在这可行,但我不确定这是否是最好的方法(我的意思是向 regmap 添加内存)。有人可以就不同/更好的方法提出建议吗?

【问题讨论】:

  • 你检查过凿子的 SyncReadMem 构造吗?
  • 是的,我有,上面的代码 sn-p 中没有显示,但我确实使用它。它在 SinglePortMemory() 内存模块中使用。

标签: chisel rocket-chip


【解决方案1】:

rocketchip 有一些用于 TileLink 和 AXI 的内置存储器(AHB/APB 我不记得了,但可以使用其他的作为示例和/或添加转换器)

https://github.com/chipsalliance/rocket-chip/blob/master/src/main/scala/tilelink/SRAM.scala

然后,您可以将新的TLRAM 连接到 Xbar 以及正常的内存映射寄存器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多