如何解决将内存添加到 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 举报,一经查实,本站将立刻删除。