凿子,生成块和大 Intermediate/Output 文件
Chisel, Generate Blocks and Large Intermediate/Output Files
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)
}
}
我正在为 rows
和 cols
>= 256 的值编译此代码。所以这个矩阵的大小变得非常大。
如果我将其编写为 Verilog 模块,我会使用 generate
块。但是,在 Chisel 中,由于我使用的是 Scala 循环,所以整个 lattice/matrix 在 FIRRTL/Verilog 输出中展开。通常使用 512x512 格子的所有 _T*
线生成 >100k 行。这会在 Chisel 编译中导致一大堆 JVM 内存不足错误,并使输出文件的 VCS 模拟(只是解析文件需要永远)非常 慢。
有什么办法解决这个问题吗?也许让 Chisel 生成 Verilog generate
块?
Chisel 和 FIRRTL 都不支持压缩它。这样的功能可能会非常有用,但我们没有计划或时间表。如果您发现节省的编译时间值得,您始终可以使用黑盒并自己编写 Verilog 来完成。
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)
}
}
我正在为 rows
和 cols
>= 256 的值编译此代码。所以这个矩阵的大小变得非常大。
如果我将其编写为 Verilog 模块,我会使用 generate
块。但是,在 Chisel 中,由于我使用的是 Scala 循环,所以整个 lattice/matrix 在 FIRRTL/Verilog 输出中展开。通常使用 512x512 格子的所有 _T*
线生成 >100k 行。这会在 Chisel 编译中导致一大堆 JVM 内存不足错误,并使输出文件的 VCS 模拟(只是解析文件需要永远)非常 慢。
有什么办法解决这个问题吗?也许让 Chisel 生成 Verilog generate
块?
Chisel 和 FIRRTL 都不支持压缩它。这样的功能可能会非常有用,但我们没有计划或时间表。如果您发现节省的编译时间值得,您始终可以使用黑盒并自己编写 Verilog 来完成。