问题标签 [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.
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;
. 我有两个问题:
- 我在这里做错了什么,我该如何解决?该错误对我来说没有意义,因为两个分配方程的左侧都是子模块的输入,而不是模块的参数
ripple_adder16
。 - 我想理想地用以下行替换 for 循环
assign adders[15:1].cin = adders[14:0].cout;
,尽管这本身就是一个语法错误。有没有办法在没有直接内联的情况下做这样的事情full_adder
?
谢谢!
PS。如果相关,full_adder
则完全用电线实现。
verilog - Verilog:仿真出错但在 FPGA 上运行良好
我正在尝试熟悉 verilog 中的(子)模块,但遇到了我无法解释的错误。我有这两个文件:
顶部.v:
序列号.v:
要将它们上传到我的 ECP5,我使用以下命令流:
它上传并正常工作(有一个 LED 连接到 txd,它根据serialtx.vinitial o_txd = 1'bx
中的语句打开/关闭,其中 x 可以是 1 或 0)。
但是,当我尝试模拟 verilog 代码时,会出现一些错误。我无法解释这些错误,因为错误消息对我来说是中文的,并且实际的实现是有效的。这是我使用的命令:
这是生成的错误日志:
[编辑] 据我了解,程序分配是寄存器值的更新。此外,默认情况下,输出定义为电线而不是寄存器。因此,模拟引发错误是有道理的。但是这个硬件怎么可能在实现中运行呢?
system-verilog - Verilator 是否支持 SystemVerilog 库?
从多个源编译 RTL 时,通常会将它们编译到单独的 SystemVerilog 库中。这样做意味着它们不会相互干扰,并且您可以将多个具有相同名称的不同模块编译到不同的库中。
SystemVerilog 配置用于选择从哪个库中详细说明模块。如 SV LRM 2017(33 配置设计内容)中所述。例如
Verilator 是否支持编译成单独的库,如商业模拟器?
trace - 如何使用 Verilator 跟踪特定信号?
我有一个想用 Verilator 跟踪的系统,但是使用 VCD 跟踪文件对资源的要求很高(数百 GB)并且很耗时。我把trace文件类型改成FST,文件大小合理,但还是比较费时间。跟踪整个系统目前不是我的目标,因为我只想要 8 个信号的值,而不是系统的 16000 个信号。
如何使用 Verilator 跟踪特定信号?
任何帮助或提示将不胜感激。
verilog - 如何在验证器中处理 $stop
这是一个简单的计数器verilog代码,它转储一个vcd文件。它已从这里改编。
下面的代码运行 20 个周期。但是,如果我取消注释 verilog 代码中的 $stop 行,那么在模拟过程中会出现此错误:
如何解决这个问题,以便我可以在 $stop 上优雅地退出?我尝试用 gotStop() 替换 gotFinish(),但这给出了这个错误:
这是 tb.cpp,顶部还有编译/运行指令:
这是counter.v:
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 在使用此过程时显示波形,但事实并非如此。