问题标签 [chisel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Chisel:从测试仪访问模块参数
如何从正在测试它的测试器内部访问用于构造模块的参数?
在下面的测试中,我将参数明确地传递给模块和测试器。我宁愿不必将它们传递给测试器,而是从同样传入的模块中提取它们。
此外,我是 scala/chisel 的新手,因此我将不胜感激任何关于我正在使用的不良技术的提示:)。
scala - 将 uncore 包添加到 Chisel 项目
rocc.scala
Rocket repo中有一个描述接口的文件rocc
,我想构建它的verilog代码并查看代码。我的问题是我不知道如何将其他包导入到我的项目中,例如“uncore. ”或“Util. ”并运行SBT
.
现在用于构建我刚刚使用的新项目build.sbt
,chisel-dependent.sbt
文件位于 chisel-tutorial/problems 文件夹中
谢谢
riscv - Chisel 中的 Queue() 函数有什么作用?
我正在阅读火箭芯片的源代码,在rocc.scala
文件中rocket/src/main/scala/
有一个AccumulatorExample
使用rocc
. 在代码的第一部分,有一个函数Queue()
我不知道它在做什么?
谢谢
chisel - 如何从展平的 Bundle 中推断宽度?
我正在尝试将 aBlackBox
连接到任意Bundle
,但宽度推断似乎不适用于 fromBits 函数。以下编译良好:
但是如果我删除这个(new testBundle).getWidth
参数,Chisel 就无法推断出输出端口的宽度并且会出错。如何testBox
连接到任意捆绑包?
cpu-architecture - MemReq 和 MemResp 如何在 RoccIO 中准确工作 - RISCV
我试图弄清楚当我使用 RoCCIO 时如何在 RISCV 中读取和写入内存。但我无法清楚地了解发生了什么。尤其是我如何处理内存或者我应该如何使用内存tag
。是否有任何资源可以找到如何在 Rocket 核心和我的加速器之间传输数据?
他们在uncore/src/main/scala/consts.scala
路径中提到了不同类型的内存cmd
。但还有什么?
例如,我想将数组的起始地址和计划提取的元素数量传递到加速器中,然后开始提取它们。我应该使用什么信号?
谢谢
c++ - 如何更改转储的 VCD 文件的时间刻度?
我正在尝试在“真实世界”项目中使用 Chisel,并且我正在用 C++ 编写测试台代码部分。效果很好,我可以使用 gtkwave 在 dump.vcd 文件中看到我所有的转储信号。
但是我的时间刻度有问题,默认情况下,函数module->dump()记录时间刻度为1ps的信号:
你知道如何改变它吗?
我发现在测试台 C++ 代码中更改它的唯一方法是在关闭 vcd 并修改第一行后重新打开它:
scala - Chisel poke() 打印格式
是否可以在 Chisel 测试类中配置 poke() 函数的打印格式?
我想“戳()”一个无符号长整数(64位)整数,当我启动这个代码时,Chisel像一个有符号长整数一样打印它:
结果 :
我不能像在 C 中那样添加字母 'U' 来强制 unsigned :
那不编译。
scala - 凿子将启用添加到具有下一个字段的寄存器
我有一个浮点添加凿子模块,我想使用它有几个阶段的管道。我想让它变得稳定,以便我可以将它放入一个管道中,该管道可能无法在任何给定时间使用输出数据,因此我希望将部分计算的添加存储在模块中。
我最初希望我可以添加一个启用信号,然后将其添加为更新各种寄存器的另一个条件,但不幸的是,该模块包含许多 Reg(next=xxx) 形式的语句。我很想知道如果我只是将寄存器分配给它自己会发生什么,即使它的输入已经通过 next=xxx 分配,所以我制作了一个测试模块并得到了一些(在我看来)奇怪的结果。
这是斯卡拉:
这是生成的verilog:
令我好奇的是,verilog 似乎几乎以两种不同的方式实现了启用。它使用 T1 (!en) 在 test_reg 和 io_in 之间进行复用,并标记输出 T0。如果无条件地将 T0 作为 test_reg 的输入,我认为这将具有所需的功能。相反,T0 被完全忽略,并且在 if else 块中使用 T1 来选择寄存器是否应该更新。
最终,这个例子似乎仍然可以正常工作,但现在我有点害怕在更复杂的浮点单元中使用它,如果它在简单的情况下表现得有点出乎意料。
有没有更优雅的方法来停止浮点添加模块的管道?我最初喜欢上面的方法,因为我可以在最后添加一个 when(!en) 块,它将所有状态的输出写入其输入。我认为另一种方法是用 Reg() 替换 Reg(next=xxx) 的任何实例,然后是更新寄存器的 when(en) {reg := next} 块。最终,我正在尝试学习 Chisel,所以我想知道最干净的方法是什么。
作为参考,我说的浮点加法模块是:https ://github.com/zhemao/chisel-float/blob/master/src/main/scala/FPAdd.scala
scala - Chisel switch 语句似乎无法以官方教程中概述的方式工作
当我收到与我正在使用的 switch 语句相关的多个错误时,我正试图为 chisel 中的电路创建控制逻辑。我决定运行官方chisel 教程第 9 页和第 10 页提供的 switch 语句示例代码来隔离问题。
斯卡拉代码:
但我收到与 UFix 相关的错误:
该教程实际上将它写为 UFIx 并带有大写 I,但我尝试了两种方式都无济于事。我认为这只是一种旧类型,所以我用 UInt 替换了 UFix,但其他一切都保持不变。然后我收到以下错误:
注意到错误消息,我尝试通过在每个“is”语句之前添加分号来解决错误,但第一个语句除外:
结果代码终于成功生成了verilog。然后我还尝试删除分号,但将前一个 switch 语句中的右大括号放在上面的行中,这也有效:
我现在担心的是凿子教程中提供的 switch 语句的版本是否适用于其他人,如果可以,有谁知道为什么我必须小心地以非常特殊的方式格式化我的 switch 语句以便它们正常工作?如果是这种情况,我该怎么做才能解决它?
chisel - 如何在 VCS 中测试 Chisel 生成的 verilog 模块?vpi_uer.cc 在凿子中是如何工作的?
在凿子教程中,我跑了之后
我得到了 Hello.v ,Hello-harness.v ,vpi_user.cc 文件
- 如何测试 Hello.v 文件?
- vpi_user.cc 的用途是什么?