问题标签 [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 回答
271 浏览

scala - ChiselHDL 是否支持#ifdef(宏)之类的东西?

我在 Google 上搜索到 Scala 使用“@elidable”作为 C++ 中的一种宏。
ChiselHDL 是否也支持这样的调试?
或者,还有其他选择吗?

在 scala 上下文中,

假设 Chisel 有预处理器和 #ifdef 语句

0 投票
2 回答
973 浏览

riscv - Rocket and Chisel - 模拟器中没有发生任何组装测试

我构建了 riscv-tools 和火箭芯片模拟器。当我运行 run-asm-tests 时,输出是一个空文件。似乎什么也没有发生。

如果我手动运行它并减少最大周期,这就是我得到的:

笔记 ::

1) 我在 mm_dramsim2.cc 中取消了宏#ifdef DEBUG_DRAMSIM2 的注释

2) chisel 编译器的模拟器生成流程中有一些警告。转载如下,以防万一。

3)这是我在堆栈溢出中的第一篇文章,此外我对 chisel/riscv 很陌生。请原谅明显的错误,如果有的话!

0 投票
2 回答
1474 浏览

riscv - Rocket芯片的复位地址是什么?

RV64G 处理器在复位时从哪个地址开始?我应该查看哪个 scala 文件来理解/修改重置向量地址?

我尝试在 Top 类中为 TopIO 添加一个简单的 printf 语句来监控 MemIO 并生成模拟器。就绪时,valid = true,打印的地址 (io.mem.req_cmd.bits.addr) 为 0x8,标签为 (io.mem.req_cmd.bits.tag) = 0x13。我可以在程序 rv64ui-p-add.dump 的地址 0x200 中找到获取的指令(在 128 位宽的 io.mem.resp.bits.data 中)

所以我假设 0x200 是处理器的起始地址。这个对吗?

(a) 如果这是正确的,我想知道,address=0x8 和 tag=0x13 如何转换为 0x200?

(b) 生成的地址 + 标签是 32 位,而我期望它是 64 位(RV64G 架构)。在 Configs.scala MIFAddrBits 设置为 26 位(取决于 PAddrBits (32) 和 CacheBlocOffsetBits(log2Up(64))。为什么这些设置是这样的?

(c) 在详细模式下仿真器输出显示的 PC 地址为 40 位,但寄存器为 64 位。为什么仅显示 PC 地址只有 40 位?仿真器输出的一部分如下所示。

0 投票
2 回答
63 浏览

chisel - ChiselUtil 中 ShiftRegister 的时钟配置

ShiftRegister 是一个有用的功能,可通过两个触发器将外部信号与主时钟同步:

在这种情况下效果很好。但是有没有办法将它与这样的其他时钟一起使用:

?

0 投票
1 回答
139 浏览

chisel - 仲裁器的输出不稳定

我刚刚发现了这个问题。

假设我使用仲裁器来仲裁来自多个并行事务启动器的总线驱动程序的输出。总线和启动器使用 DecoupledIO。众所周知,Arbiter 优先于 in(0) 而不是 in(1)。考虑到这种情况:

所以时钟 1 和 2 都有 bus.valid === 1 如果这个总线上的一个客户端不能在同一个周期响应但是下一个周期,这个客户端驱动的 out.ready 实际上对应于 in(1) NOT in( 0) 在时钟 2 中。

如果 in(0) 和 in(1) 在同一时钟周期内有效,我希望仲裁器选择 in(0),但如果 in(1) 在 in(0) 之前变为有效,则仲裁器继续选择 in(1 ) 直到 in(1) 被触发。

在这种情况下,LockingArbiter、RRArbiter 都具有相同的行为,即较高优先级的输入总是可以在较低优先级的输入被锁定之前抢占较低优先级的输入(当 count == 1 时,根本没有锁定)。

我有点将这种不稳定的输出视为 Arbiter 的类似错误的问题。有解决办法吗?

0 投票
1 回答
96 浏览

scala - 凿子编程错误

我的 Chisel 代码有问题,我尝试了以下方法

但是在运行上述代码时出现以下错误

谁能告诉这个错误是什么以及如何纠正它。

0 投票
1 回答
59 浏览

scala - 不确定错误消息试图传达什么

我收到以下错误。但我无法从打印的错误消息中理解问题。

产生此错误的代码在这里

0 投票
1 回答
471 浏览

riscv - 在 VCD 中显示凿子信号

我正在使用 RISC-V Rocket 芯片。我添加了一些我自己的信号和逻辑,并希望查看 Rocket 芯片中现有信号的值,这些信号尚未显示在 VCD 波形中。如何将这些信号转储到 VCD 文件中?

0 投票
1 回答
197 浏览

scala - 如何刷新 ChiselUtil 队列?

ChiselUtil 类中有一个队列,手册中描述为:

但是在scala代码中,接口参数不同: https ://github.com/ucb-bar/chisel/blob/master/src/main/scala/ChiselUtil.scala#L426

代码中没有“可刷新”布尔输入。我找不到“管道”和“流量”参数的含义。

有人知道如何使用队列来刷新它吗?

0 投票
2 回答
223 浏览

chisel - sbt 运行期间缺少构建文件

我在 chiselMainTest 列表中添加了“--backend”和“v”,虽然我得到了 verilog 输出,但我也得到了一个构建错误:

sbt 运行的完整列表如下:

我的源代码的完整列表如下: