“一生一芯”学习笔记 2 【Verilator】
什么是Verilator?
Verilator 将 Verilog 和 SystemVerilog 硬件描述语言(HDL)设计转换为 C + + 或 SystemC 模型,编译后可以执行该模型。Verilator 不是传统的模拟器,而是编译器。
Verilator 的主要功能就是将 Verilog 代码转化为 SystemC 或 C++ 代码
Verilator 具体工作原理
Verilator 命令行参数配置
--cc
表示将根据HDL生成C++文件,--sc
表示将生成System C文件{prefix}.cpp为模型的C文件
{prefix}.h为模型的头文件
{prefix}.mk为模型编译时的makefile
--build
表示直接根据{prefix}.mk生成模拟时模型的库。{prefix}__ALL.a 包含所有必须对象的库
既可以直接buil得到库
1
2verilator -cc --exe --build -j top.v sim_main.cpp
obj_dir/Vtop也可以不直接build
1
2
3verilator -cc --exe sim_main.cpp top.v
make -j -C obj_dir -f Vtop.mk Vtop
./obj_dir/Vtop--exe
表示生成模型的二进制文件,在Vtop.mk中体现--main
表示将会自动生成一个含main函数的cpp文件,即wrapper file,这个文件将会读取命令行参数、实例化模型,并驱动模拟{prefix}__main.cpp
前缀{prefix}可以通过
--prefix
指定。生成的所有文件都在目标文件夹中,可以由
--Mdir
指定,默认为“obj_dir”--top-module
or--top
指定顶层模块-j {}
指定编译线程数-o {file abspath}
指定生成目标文件的路径和名称
命令行参数:verilator Arguments — Verilator Devel 5.021 documentation
生成的文件:Files — Verilator Devel 5.021 documentation
Overview — Verilator Devel 5.021 documentation
Verilator 使用指南 - USTC CECS 2023
wrapper 驱动
需要使用<verilated.h>中的VerilatedContext类构建一个环境
1 | #include <verilated.h> |
Verilator + GTKwave 查看仿真波形
在 C++ wrapper中,控制产生波形
1 | ... |
在verilator的编译命令行中开启--trace
选项,然后运行程序,会生成wave.vcd波形文件
用GTKwave打开波形文件
1 | gtkwave wave.vcd |
效果如下:
GTKwave波形 GTKWave (sourceforge.net)