问题标签 [verilator]

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 投票
2 回答
57 浏览

system-verilog - SystemVerilog Dataflow Modeling Ripple-Adder 与数组实例

我已经使用生成实现了一个(工作的)波纹进位加法器来创建 16 个不同full_adder的实例(full_adder按预期工作):

现在我正在尝试修改加法器,以便我可以保留一组加法器。下面是我试图开始工作的代码示例:

但是,我从 Verilator 收到了一个 ASSIGNIN 错误(文档说“正在对输入信号进行分配错误。这几乎可以肯定是一个错误,尽管在技术上是合法的。”)在行assign adders[0].cin = cin;assign adders[i+1].cin = adders[i].cout;. 我有两个问题:

  1. 我在这里做错了什么,我该如何解决?该错误对我来说没有意义,因为两个分配方程的左侧都是子模块的输入,而不是模块的参数ripple_adder16
  2. 我想理想地用以下行替换 for 循环assign adders[15:1].cin = adders[14:0].cout;,尽管这本身就是一个语法错误。有没有办法在没有直接内联的情况下做这样的事情full_adder

谢谢!

PS。如果相关,full_adder则完全用电线实现。

0 投票
1 回答
52 浏览

verilog - Verilog:仿真出错但在 FPGA 上运行良好

我正在尝试熟悉 verilog 中的(子)模块,但遇到了我无法解释的错误。我有这两个文件:

顶部.v

序列号.v

要将它们上传到我的 ECP5,我使用以下命令流:

它上传并正常工作(有一个 LED 连接到 txd,它根据serialtx.vinitial o_txd = 1'bx中的语句打开/关闭,其中 x 可以是 1 或 0)。

但是,当我尝试模拟 verilog 代码时,会出现一些错误。我无法解释这些错误,因为错误消息对我来说是中文的,并且实际的实现是有效的。这是我使用的命令:

这是生成的错误日志:

[编辑] 据我了解,程序分配是寄存器值的更新。此外,默认情况下,输出定义为电线而不是寄存器。因此,模拟引发错误是有道理的。但是这个硬件怎么可能在实现中运行呢?

0 投票
1 回答
50 浏览

system-verilog - Verilator 是否支持 SystemVerilog 库?

从多个源编译 RTL 时,通常会将它们编译到单独的 SystemVerilog 库中。这样做意味着它们不会相互干扰,并且您可以将多个具有相同名称的不同模块编译到不同的库中。

SystemVerilog 配置用于选择从哪个库中详细说明模块。如 SV LRM 2017(33 配置设计内容)中所述。例如

Verilator 是否支持编译成单独的库,如商业模拟器?

0 投票
1 回答
28 浏览

trace - 如何使用 Verilator 跟踪特定信号?

我有一个想用 Verilator 跟踪的系统,但是使用 VCD 跟踪文件对资源的要求很高(数百 GB)并且很耗时。我把trace文件类型改成FST,文件大小合理,但还是比较费时间。跟踪整个系统目前不是我的目标,因为我只想要 8 个信号的值,而不是系统的 16000 个信号。

如何使用 Verilator 跟踪特定信号?

任何帮助或提示将不胜感激。

0 投票
0 回答
56 浏览

verilog - 如何在验证器中处理 $stop

这是一个简单的计数器verilog代码,它转储一个vcd文件。它已从这里改编。

下面的代码运行 20 个周期。但是,如果我取消注释 verilog 代码中的 $stop 行,那么在模拟过程中会出现此错误:

如何解决这个问题,以便我可以在 $stop 上优雅地退出?我尝试用 gotStop() 替换 gotFinish(),但这给出了这个错误:

这是 tb.cpp,顶部还有编译/运行指令:

这是counter.v:

0 投票
0 回答
7 浏览

verilator - Verilator 生成空的 .vcd 文件,因此 GTKWave 无法检查它们

我目前正在尝试弄清楚如何将 Verilator 与 GTKWave 一起使用来验证和调试 System Verilog 设计,但我遇到了一个问题。我设法让 Verilator 输出一个 .vcd 文件(位于 /tmp/trace.vcd),但是当我尝试使用 GTKwave 打开它时出现错误:

这个错误在我看来文件中没有任何数据,并且在文本编辑器中检查其内容并不能阻止这一点:

当我通过 GTKWave GUI 打开 .vcd 文件时,它只显示一个空的 GUI,进一步支持该文件是空的(奇怪的是,它在命令行上给出了一个错误,但不是通过 GUI。)。

我的代码基于通过获取示例的点点滴滴直到它编译来猜测要做什么(如果我直接尝试,来自 Verilator 存储库的跟踪示例会引发大量 C++ 错误),因此这不起作用并不特别令人惊讶,但我找不到任何文章可以更系统地解释跟踪应该如何在 Verilator 中工作,所以这并没有给我一个继续工作的方向。

以下是显示此错误的 MCVE 的文件:CMakeLists.txt

测试台.cpp:

计数器.sv:

使用这些文件,我只需像普通 C++ 项目一样编译 CMake 项目,然后运行代码:

如何检查通过 Verilator 模拟的 System Verilog 代码的波形?我希望 gtkwave 在使用此过程时显示波形,但事实并非如此。