问题标签 [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.

0 投票
1 回答
304 浏览

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

如何从正在测试它的测试器内部访问用于构造模块的参数?

在下面的测试中,我将参数明确地传递给模块和测试器。我宁愿不必将它们传递给测试器,而是从同样传入的模块中提取它们。

此外,我是 scala/chisel 的新手,因此我将不胜感激任何关于我正在使用的不良技术的提示:)。

0 投票
1 回答
263 浏览

scala - 将 uncore 包添加到 Chisel 项目

rocc.scalaRocket repo中有一个描述接口的文件rocc,我想构建它的verilog代码并查看代码。我的问题是我不知道如何将其他包导入到我的项目中,例如“uncore. ”或“Util. ”并运行SBT.

现在用于构建我刚刚使用的新项目build.sbtchisel-dependent.sbt文件位于 chisel-tutorial/problems 文件夹中

谢谢

0 投票
1 回答
634 浏览

riscv - Chisel 中的 Queue() 函数有什么作用?

我正在阅读火箭芯片的源代码,在rocc.scala文件中rocket/src/main/scala/有一个AccumulatorExample使用rocc. 在代码的第一部分,有一个函数Queue()我不知道它在做什么?

谢谢

0 投票
1 回答
151 浏览

chisel - 如何从展平的 Bundle 中推断宽度?

我正在尝试将 aBlackBox连接到任意Bundle,但宽度推断似乎不适用于 fromBits 函数。以下编译良好:

但是如果我删除这个(new testBundle).getWidth参数,Chisel 就无法推断出输出端口的宽度并且会出错。如何testBox连接到任意捆绑包?

0 投票
1 回答
335 浏览

cpu-architecture - MemReq 和 MemResp 如何在 RoccIO 中准确工作 - RISCV

我试图弄清楚当我使用 RoCCIO 时如何在 RISCV 中读取和写入内存。但我无法清楚地了解发生了什么。尤其是我如何处理内存或者我应该如何使用内存tag。是否有任何资源可以找到如何在 Rocket 核心和我的加速器之间传输数据?

他们在uncore/src/main/scala/consts.scala路径中提到了不同类型的内存cmd。但还有什么?

例如,我想将数组的起始地址和计划提取的元素数量传递到加速器中,然后开始提取它们。我应该使用什么信号?

谢谢

0 投票
1 回答
931 浏览

c++ - 如何更改转储的 VCD 文件的时间刻度?

我正在尝试在“真实世界”项目中使用 Chisel,并且我正在用 C++ 编写测试台代码部分。效果很好,我可以使用 gtkwave 在 dump.vcd 文件中看到我所有的转储信号。

但是我的时间刻度有问题,默认情况下,函数module->dump()记录时间刻度为1ps的信号:

你知道如何改变它吗?

我发现在测试台 C++ 代码中更改它的唯一方法是在关闭 vcd 并修改第一行后重新打开它:

0 投票
1 回答
274 浏览

scala - Chisel poke() 打印格式

是否可以在 Chisel 测试类中配置 poke() 函数的打印格式?

我想“戳()”一个无符号长整数(64位)整数,当我启动这个代码时,Chisel像一个有符号长整数一样打印它:

结果 :

我不能像在 C 中那样添加字母 'U' 来强制 unsigned :

那不编译。

0 投票
2 回答
651 浏览

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

0 投票
2 回答
1463 浏览

scala - Chisel switch 语句似乎无法以官方教程中概述的方式工作

当我收到与我正在使用的 switch 语句相关的多个错误时,我正试图为 chisel 中的电路创建控制逻辑。我决定运行官方chisel 教程第 9 页和第 10 页提供的 switch 语句示例代码来隔离问题。

斯卡拉代码:

但我收到与 UFix 相关的错误:

该教程实际上将它写为 UFIx 并带有大写 I,但我尝试了两种方式都无济于事。我认为这只是一种旧类型,所以我用 UInt 替换了 UFix,但其他一切都保持不变。然后我收到以下错误:

注意到错误消息,我尝试通过在每个“is”语句之前添加分号来解决错误,但第一个语句除外:

结果代码终于成功生成了verilog。然后我还尝试删除分号,但将前一个 switch 语句中的右大括号放在上面的行中,这也有效:

我现在担心的是凿子教程中提供的 switch 语句的版本是否适用于其他人,如果可以,有谁知道为什么我必须小心地以非常特殊的方式格式化我的 switch 语句以便它们正常工作?如果是这种情况,我该怎么做才能解决它?

0 投票
1 回答
277 浏览

chisel - 如何在 VCS 中测试 Chisel 生成的 verilog 模块?vpi_uer.cc 在凿子中是如何工作的?

在凿子教程中,我跑了之后

我得到了 Hello.v ,Hello-harness.v ,vpi_user.cc 文件

  • 如何测试 Hello.v 文件?
  • vpi_user.cc 的用途是什么?