簡體   English   中英

如何在 Chisel3 中初始化 Mem 的數據

[英]How to initialize the data of a Mem in Chisel3

有沒有什么簡單的方法可以從文件中初始化 Mem 的數據(類似於 Verilog 中的“readmemh”)?

現在chisel 堆棧中有一種機制可以注釋內存以在模擬中使用readmemh 或readmemb。 查看Chisel Wiki 中的文檔

另外,請參見Chisel Testers中的具體用法示例

Chisel 沒有內置的方法來做到這一點。 Chisel 的指導理念之一是,您模擬的是您在 ASIC 中構建的內容。 由於 ASIC 無法初始化 SRAM,因此無法在 Chisel 中初始化存儲器。

您可以使用 Vec 的 Reg(可以初始化)來解決此問題。 如果目標設計是 ASIC,您可以創建一個庫,該庫使用狀態機在復位后初始化給定的 Mem。 如果目標設計是 FPGA,您可以使用 BlackBox 並為 Mem 編寫 Verilog。

本周參加ASPIRE務虛會,聽說有一種方法可以在Chisel中編寫參數化黑匣子,可以兼得:
1) 附帶的 Verilog 代碼(因此您可以使用 $readmemh 來初始化 ROM),以及
2) 附加的 Scala 代碼(以便 firrtl-interpreter 可以模擬 ROM)。
我還不知道如何做到這兩點。 也許傑克或其他人可以詳細說明。

以下函數是 Verilog 的 readmemh 的近似值:

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)

或鑿子3:

  VecInit(Tools.readmemh(romfile))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM