微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将内存添加到 regmap()

如何解决将内存添加到 regmap()

我在火箭芯片上添加一个设备,它有控制和状态寄存器,还有一个内部内存。为了能够使用软件访问它,我以下一种方式将它添加到 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)。有人可以建议一种不同的/更好的方法来做到这一点吗?

解决方法

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

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

然后,除了正常的内存映射寄存器之外,您还可以将新的 TLRAM 连接到 Xbar。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?