有没有简单的方法从文件初始化Mem的数据(类似于" readmemh"在Verilog中)?
答案 0 :(得分:1)
本周参加ASPIRE撤退,我听说有一种方法可以在Chisel中编码参数化的黑匣子,它们可以同时具备:
1)附加了Verilog代码(因此您可以使用$ readmemh初始化ROM)和
2)附加的Scala代码(以便firrtl-interpreter可以模拟ROM)
我还不知道如何做其中任何一个。也许杰克或其他人可以详细说明。
答案 1 :(得分:1)
凿子堆栈中现在有一种机制可以注释内存,以便在仿真中使用readmemh或readmemb。请查看Chisel Wiki
中的文档此外,请参见Chisel Testers中的具体用法示例
答案 2 :(得分:0)
Chisel无法做到这一点。 Chisel的指导原则之一是你模拟的是你构建成ASIC的东西。由于ASIC无法初始化SRAM,因此无法在Chisel中初始化存储器。
您可以使用Reg of Vec(可以初始化)解决此问题。如果目标设计是ASIC,则可以创建一个库,该库使用状态机在重置后初始化给定的Mem。如果目标设计是FPGA,您可以使用BlackBox并为Mem编写Verilog。
答案 3 :(得分:-1)
以下功能是Verilog自述文件的近似值:
object Tools {
def readmemh(path: String): Array[BigInt] = {
val buffer = new ArrayBuffer[BigInt]
for (line <- Source.fromFile(path).getLines) {
val tokens: Array[String] = line.split("(//)").map(_.trim)
if (tokens.length > 0 && tokens(0) != "") {
val i = Integer.parseInt(tokens(0), 16)
buffer.append(i)
}
}
buffer.toArray
}
}
然后在SpinalHDL中
rom.initialContent = Tools.readmemh(romfile)
或Chisel3:
VecInit(Tools.readmemh(romfile))