如何在Chisel3中初始化Mem的数据

时间:2017-01-30 23:52:09

标签: chisel

有没有简单的方法从文件初始化Mem的数据(类似于" readmemh"在Verilog中)?

4 个答案:

答案 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))