【问题标题】:Chisel, Generate Blocks and Large Intermediate/Output Files凿子、生成块和大型中间/输出文件
【发布时间】:2018-03-26 09:09:24
【问题描述】:

Chisel 中是否有一个构造来生成 Verilog generate 块,而不是将 Scala for 循环展开为 非常 大(>100k 行)输出 Verilog 和 FIRRTL 文件。

例如,我有以下代码,它构造了MatrixElement 模块的二维点阵并连接它们的输入和输出。

private val mat_elems = Seq.tabulate(rows, cols) { (i, j) => {
    Module(new MatrixElement(n=i, m=j))
}}

for (i <- 0 until rows; j <- 0 until cols) {
    // Wavefront propagation
    if (i == 0 && j != 0) {
      // First row
      mat_elems(i)(j).io.in <> (false.B, false.B, mat_elems(i)(j - 1).io.out)
    } else if (i != 0 && j == 0) {
      // First col
      mat_elems(i)(j).io.in <> (false.B, mat_elems(i - 1)(j).io.out, false.B)
    } else if (i >= 1 && j >= 1) {
      // Internal matrix
      mat_elems(i)(j).io.in <> (mat_elems(i - 1)(j - 1).io.out, mat_elems(i - 1)(j).io.out,
        mat_elems(i)(j - 1).io.out)
    }
  }

我希望为 rowscols >= 256 的值编译此代码。所以这个矩阵的大小变得非常大。

如果我将其编写为 Verilog 模块,我会使用 generate 块。然而,在 Chisel 中,由于我使用的是 Scala 循环,因此整个晶格/矩阵在 FIRRTL/Verilog 输出中展开。通常使用 512x512 格的所有 _T* 线产生 >100k 线。这会在 Chisel 编译中导致一大堆 JVM 内存不足错误,并使输出文件的 VCS 模拟(仅解析文件需要很长时间)非常变慢。

有没有办法解决这个问题?也许让 Chisel 生成 Verilog generate 块?

【问题讨论】:

    标签: hdl chisel loop-unrolling


    【解决方案1】:

    Chisel 和 FIRRTL 都不支持压缩它。这样的功能可能会非常有用,但我们没有计划或时间表。如果您发现节省的编译时间值得,您可以随时使用黑盒并编写 Verilog 来自己完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-22
      • 2022-01-25
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多