首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Chisel开始设计硬件之前,我能计算软件中的常数吗?

在Chisel开始设计硬件之前,我能计算软件中的常数吗?
EN

Stack Overflow用户
提问于 2021-03-16 00:08:34
回答 1查看 51关注 0票数 3

我对Chisel很陌生,我想知道在Chisel开始设计任何电路之前是否有可能在软件中计算常量。例如,我有一个模块,它接受一个参数myParameter,但是我想从这个参数中派生更多的变量(constant1constant2),这些变量稍后将用于初始化寄存器。

代码语言:javascript
复制
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值:constant1 = 2 * 2 = 4constant2 = 17 * 2 = 34。然后继续实例化和初始化寄存器register1 = RegInit(4.U(8.W))register2 = RegInit(34.U(8.W))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 00:28:27

我在想,在

开始设计任何电路之前,是否有可能在软件中计算常数

除非我误解了你的问题,事实上,这是切塞尔的工作方式。

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

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

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

代码语言:javascript
复制
// 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))
    //...
    //...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66647412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档