如何解决在 Chisel 开始设计硬件之前,我可以在软件中计算常数吗?
我是 Chisel 的新手,我想知道在 Chisel 开始设计任何电路之前是否可以在软件中计算常数。例如,我有一个带有一个参数 myParameter
的模块,但是我想从这个参数派生出更多变量(constant1
和 constant2
),这些变量稍后将用于初始化寄存器。
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 = 4
和 constant2 = 17 * 2 = 34
。然后继续实例化和初始化寄存器 register1 = RegInit(4.U(8.W))
和 register2 = RegInit(34.U(8.W))
?
解决方法
我想知道在 Chisel 开始设计任何电路之前是否可以在软件中计算常数
除非我误解了你的问题,否则这就是 Chisel 的工作原理。
从根本上说,Chisel 是一个 Scala 库,其中执行您编译的 Scala 代码会创建硬件。这意味着您的 Chisel 中的任何纯 Scala 代码仅存在于精化时间,即在执行此 Scala 程序(我们称之为 生成器)期间。 >
现在,程序中的值按照 Scala 定义的顺序创建(与任何通用编程语言或多或少相同)。例如,io
是在 constant1
和 constant2
之前定义的,因此 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))
//...
//...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。