问题标签 [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.
android - 使用 CMake 内置 NDK 构建 Verilator (C++)
我尝试了这个例子,但没有任何反应:
例如,如果我将其更改CMAKE_ANDROID_ARCH_ABI
为其他任何内容,则不会发生任何事情。就像 CMake 忽略了代码的 NDK 部分。
但是,如果我将项目更改为另一个位置,则会发生不同的事情:
错误:
我没有使用 CMake 的经验,我认为问题在于事物的顺序。谁能帮我?
c++ - 在 .dll 中使用 typedef void*
我尝试从 Verialtor 源代码制作一个 .dll,因为他们已经实现了这种可能性。
他们使用通用处理程序typedef void* svScope
来初始化范围。.dll 也使用此句柄。现在我可以使用创建新功能
__declspec(dllexport) svScope svGetScope( void );
这是头代码 svdpi.h
和一个简单的实现 svdpi.cpp
我已经创建了测试文件 test.cpp
我编译了库并链接了它。编译器找到库但我收到此错误
g++ -o test.exe -s test.o -L。-lsvdpi
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: test.o:test.cpp:(. text+0xf): undefined reference to `_imp__svGetScope' collect2.exe: error: ld returned 1 exit status
c++ - 多线程仿真比单线程慢几个数量级
我正在使用 Verilator 从一个非常简单的程序中模拟一个电路,该程序只是反复将时钟线设置为高电平,然后是低电平,直到满足某些输出条件:
所以问题是,如果我在单线程模式下运行 Verilator(即我在verilator
没有--threads N
标志的情况下运行,我在编译期间没有设置
VL_THREADED
,也没有链接-lpthread
到
verilated_threads.o
结果中),那么这个程序需要大约 150 毫秒:
但是如果我使用 4 个线程,那么在同一台机器上(总共 8 个 HT 核心有 4 个真正的核心),我看到进程使用 400% CPU,但它使用超过 250 倍的 CPU并且挂钟时间增加了 70 倍:
是什么原因造成的,我该如何解决?
编辑添加:这个问题是关于 Verilator 的。似乎c++
问题标签吸引了对 Verilator 一无所知的人,并认为他们应该能够从第一原则中推理出这一点。你不会,因为实际的多线程发生在 Verilator 生成的代码中。
编辑添加:我正在模拟的 RTL 不是世界上最好的 Verilog,因为它是由 Clash 生成的;但是在评论中已经出现了这种行为可能是由于它的某些属性。所以这里是完整的 Verilog 代码:
verilator - Verilator - VerilatedVcdC->dump() 的解释
我正在阅读精彩的 Verilator教程,在这些幻灯片 (第 25 页)中,作者使用了库调用:
我知道这tfp
是一个指向 Verilator 库对象的指针 VerilatedVcdC
,因此这个调用实际上是:
但是这个调用实际上做了什么?头文件/usr/share/verilator/include/verilated_vcd_c.h
中的描述有点短。它只说:
这里有点混乱:
这是否意味着 CPU 周期或 OS 周期?我已经在这里以编程方式发现我的 Linux Debian OS 周期是 10 毫秒。我假设从现在开始 Verilator 作者的意思是 CPU 周期,因为 gtkwave 最后会显示纳秒单位(继续阅读)!
所以VerilatedVcdC->dump(x)
理论上应该在转储文件中写入/转储x
CPU 周期(整个周期而不是 ½ 周期)的数据tfp
。
但是由于某种原因,作者将其乘以 10 并减去 2。他的评论比说:
起初我无法相信这一点,因为当 时tickcount = 1
,我们得到:
因此我们应该转储 8 个 CPU 周期...
出于某种原因,我错了,如果我将转储文件上传到内部gtkwave
并检查波形,则可以确认这一点。
确实,2ns的数据在开始时被转储到转储文件中。这怎么可能?
是否可能x
inVerilatedVcdC->dump(x)
实际上是操作系统滴答计数器的绝对值而不是相对时间?
verilog - Verilog - 比特流在硬件上工作,但模拟无法编译
我正在使用 Verilog 设置 FPGA,使其每秒闪烁一次 LED。这是一种方法:
现在我写了这个makefile:
前两个 makefile 目标 ( all
& flash
) 工作完美,当比特流文件上传到板上时,LED 以 1Hz 的频率闪烁。好的。
但是,当我尝试模拟这个模块时,我运行 makefile target simulate
,我得到一个错误:
有人可以解释什么是错的吗?该设计已经在硬件上运行(!),那么为什么我的仿真不能编译呢?我如何让这个例子也适用于模拟?
c++ - 为什么在头文件中定义为静态的 C++ 方法未显示在符号表中
我正在尝试编译和链接 Verilator (veripool.org) 的运行时支持代码。它构建得很好,但由于某种原因,有一些方法没有出现在相关的目标文件中,Verilated::timeunit(int)
并且Verilated::timeprecision(int)
.
这些表面上是在 include/verilated.h 中定义的:
现在,您可以看到调用函数中两种类型的方法都有一个参数,该参数int
显示在链接步骤中:
我尝试将方法声明更改verilated.h
为将 int 作为参数,即使缺少该参数会导致编译时错误,但是这两个方法声明仍然没有出现在verilated.cpp
. 类中的其他方法Verilated::
显示得很好。
我错过了什么?
c++ - VERILATOR:使用 C++ 包装器执行 helloworld SystemVerilog 后终端卡住
我是 Verilator 的新手,遇到了基本 HelloWorld 示例的问题。我正在关注Verilator Manual并希望使用 C++ 包装程序(2.1 Example C++ Execution)执行基本的 Helloworld 示例。调用命令后
obj_dir
使用生成的 C++ 代码创建了一个目录,运行Vrun
文件后,我的终端卡住了,被阻塞了..whatever..什么都不做。
我总是必须 CTRL-c 并在之后取消它。我也试过不使用-build
命令中的,我手动编译它。而且还是无济于事。
有没有人遇到过这样的问题,或者有人知道出了什么问题吗?我正在使用 Ubuntu 20.04.3 LTS 和 Verilator 版本 4.211 devel rev v4.210-78-g27d53691
谢谢。
注意:我在安装过程中没有任何问题
riscv - 如何在火箭芯片模拟器中禁用调试中断
我正在尝试使用 github 存储库中给出的指令在火箭芯片模拟器中执行一组程序。即使对于小型 riscv 测试(ISA 测试),我也注意到跟踪中还有其他说明。许多这些附加指令是在跳转到我尝试运行的实际程序之前执行的。
有谁知道如何禁用这些中断,以便我可以获得干净的指令跟踪? 另外,我有一个更大的程序,它可以用 Spike 很好地执行,但在火箭芯片仿真器中永远不会结束(一段时间后继续循环调试序列)。
我使用的是默认的火箭芯片配置,没有任何附加功能。我正在使用截至 2021 年 9 月 18 日的最新火箭芯片提交。
下面是我用来模拟 ISA 测试的命令:
我得到的调试序列的一部分:
verilog - Verilator,运行模拟器给出:无效的参数
我正在关注本教程。在第 24 页上,我没有得到教程中提到的 Makefile。当我运行./thruwire
它说:bash: ./thruwire: Invalid argument
。
这是我的 thruwire.v:
在生成了这个 verilog 文件后,我运行了这些命令来创建 obj_dir 目录:
然后,我在我的主目录中创建了一个文件 thruwire.cpp(所以是 obj_dir 上面的那个),如下所示:
我返回一个目录并编译如下所有内容:
到目前为止,我已经完成了教程中提到的所有内容,直到幻灯片 24。但是,我的项目目录中没有 Makefile,根据教程应该是这样。当我运行 ./thruwire 时,我得到所说的错误。
我对这一切都很陌生,请帮帮我。我错过了什么吗?
我尝试使用 --exe 标志,因为文档说将为我生成一个模拟可执行文件。但它在运行时给了我同样的错误。我尝试自己指定参数并一起从主函数中删除参数,但它一直给我这个错误。
我正在虚拟盒子图像中运行模拟。我最近使用本指南缩小了 .vdi 。我不知道这是否与它有关。