chisel - 我可以在 Chisel 开始设计硬件之前在软件中计算常量吗?

标签 chisel

我是 Chisel 的新手,我想知道是否可以在 Chisel 开始设计任何电路之前在软件中计算常量。例如,我有一个带有一个参数的模块,myParameter,但是我想从这个参数中导出更多变量(constant1constant2) 稍后将用于初始化寄存器。

class MyModule(myParameter: Int) extends Module {
    val io = IO(new Bundle{
        val in = Input(SInt(8.W))
        val out = Output(SInt(8.W))
    })

    val constant1 = 2 * myParameter
    val constant2 = 17 * myParameter

    val register1 = RegInit((constant1).U(8.W))
    val register2 = RegInit((constant2).U(8.W))
    //...
    //...
}

有没有办法配置 Chisel 的功能,以便 MyModule(2) 的实例将首先计算软件中的所有 Scala val:constant1 = 2 * 2 = 4constant2 = 17 * 2 = 34。然后继续实例化和初始化寄存器 register1 = RegInit(4.U(8.W))register2 = RegInit(34.U(8.W))?

最佳答案

I was wondering if it's possible to calculate constants in software before Chisel begins designing any circuitry

除非我误解了你的问题,否则 Chisel 实际上就是这样工作的。

从根本上说,Chisel 是一个 Scala 库,执行 已编译的 Scala 代码会创建硬件。这意味着您的 Chisel 中的任何纯 Scala 代码仅存在于精化时,即在执行此 Scala 程序(我们称之为生成器)期间。 p>

现在,程序中的值是按 Scala 定义的顺序创建的(与任何通用编程语言大致相同)。例如,io 是在 constant1constant2 之前定义的,因此 io 的 Chisel 对象将在这两个常量之前创建是经过计算的,但这对于您的问题而言并不重要。

Chisel 中的一个常见做法是创建自定义类来保存大量参数。在这种情况下,您可以执行类似的操作:

// Note this doesn't extend anything, it's just a Scala class
// Also note myParameter is a val now, this makes it accessible outside the class
class MyParameters(val myParameter: Int) {
    val constant1 = 2 * myParameter
    val constant2 = 17 * myParameter
}

class MyModule(params: MyParameters) extends Module {
    val io = IO(new Bundle{
        val in = Input(SInt(8.W))
        val out = Output(SInt(8.W))
    })

    val register1 = RegInit((params.constant1).U(8.W))
    val register2 = RegInit((params.constant2).U(8.W))
    //...
    //...
}

关于chisel - 我可以在 Chisel 开始设计硬件之前在软件中计算常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66647412/

相关文章:

scala - CHISEL 中的列表查找

chisel - 如何调用内部定义的变量 withClockAndReset

chisel - 模块是对象还是类?

riscv - 凿子——时钟门控

scala - 凿子 "Enum(UInt(), 5)"失败

chisel - 如何将零打包到凿子中的捆绑中

Chisel 中的矩阵运算

chisel - 如何在Chisel3中指定两个无符号数的差的平方?

scala - Chisel IO 接口(interface)构造函数中克隆方法的使用

scala - Chisel:从测试仪访问模块参数