一、Verilator官網
Verilator是一種高速的組合邏輯仿真器,它將Verilog HDL編寫的硬件描述代碼轉換為C++或SystemC的仿真代碼。Verilator在很多方面都比其他仿真器更快、更準確。Verilator官網提供了完整的文檔、教程和安裝指南等資料,方便用戶使用。
下面是Verilator的官方網址:
https://www.veripool.org/projects/verilator/wiki/Intro
二、Verilator Windows
Verilator可以在Windows系統上安裝使用。不過,官方並沒有提供Windows版本的二進制包,需要手動編譯。在Windows上編譯Verilator,需要先安裝Cygwin,然後使用Cygwin終端進入Verilator的源代碼目錄,運行如下命令進行編譯:
perl scripts/make_verilator.pl
編譯完成後,將生成verilator.exe可執行文件,將其加入系統環境變量中,即可在Windows上使用Verilator進行硬件描述語言的仿真。
三、Verilator仿真
使用Verilator進行仿真,需要先將Verilog HDL代碼轉換為C++代碼。在Linux系統上,可以使用如下命令進行轉換:
verilator --cc [Verilog HDL文件名]
上述命令將生成一個C++文件(默認為verilated.cpp)和一個頭文件(默認為[Verilog HDL文件名]_top.h),可以在C++文件中調用頭文件中定義的仿真函數進行仿真。
在仿真過程中,需要設置一些仿真參數,如仿真的時鐘周期和仿真時間等,可以在C++文件中使用如下代碼進行設置:
#include "verilated.h"
VL_PRINTF("[INFO] Starting simulation\\n");
//初始化Verilog模塊
top = new Vtop;
//設置時鐘周期
Verilated::timeunit(-9);
Verilated::timeprecision(-12);
//仿真時間
vluint64_t sim_time = 0;
while (!Verilated::gotFinish()) {
//設置仿真時間
sim_time += 10;
top->i_clk = 0;
//更新輸入端口
top->eval();
//模擬時鐘上升沿
top->i_clk = 1;
top->eval();
//輸出仿真結果
if (sim_time % (10*1000*1000) == 0) {
VL_PRINTF("[INFO] sim_time=%lu ns\\n", sim_time);
}
}
四、Verilator VCS
Verilator支持VCS格式的仿真,可以將轉換後的C++代碼與VCS聯合編譯。在Linux系統上,可以使用如下命令進行聯合編譯:
vlogan [Verilog HDL文件名]
verilator --vpi --cc [Verilog HDL文件名]
cd obj_dir
make -f V[Verilog HDL文件名]_top.mk
vcs V[Verilog HDL文件名]_top.cpp [其他C++文件] -o [仿真可執行文件名]
./[仿真可執行文件名]
該命令將生成一個可執行文件,可以直接運行進行仿真。
五、Verilator教程
Verilator官網提供了完整的教程,涵蓋了從入門到精通的各個方面,包括Verilog HDL語言基礎、Verilator的基本應用、Verilator與其他仿真器的比較等內容。
下面是Verilator官方提供的教程地址:
https://www.veripool.org/projects/verilator/wiki/Tutorial
六、Verilator中文文檔
Verilator中文文檔由Verilator中文社區翻譯並維護,其中包括了Verilator的基本概念、使用方法、應用案例等內容。
下面是Verilator中文文檔的地址:
https://www.osdv.org/docs/verilator/index.html
七、Verilator手冊
Verilator官方提供了完整的手冊,包括了Verilog HDL語言的基本知識、Verilator的基本原理、Verilator的使用方法、調試技巧等內容。
下面是Verilator官方提供的手冊地址:
https://www.veripool.org/projects/verilator/wiki/Manual-verilator
八、Verilator多線程
Verilator可以在多核CPU上進行多線程仿真,提高仿真效率。在Linux系統上,可以使用如下命令進行多線程仿真:
verilator --cc [Verilog HDL文件名] --threads [線程數]
上述命令將根據指定的線程數,自動進行多線程仿真。
九、Verilator tb
Verilator支持使用C++編寫測試代碼對硬件進行單元測試。在C++測試代碼中,需要調用Verilator生成的頭文件中定義的函數進行仿真,測試某個特定的問題。
下面是一個使用Verilator進行單元測試的例子:
// C++測試代碼
#include "verilated.h"
#include "Vtop.h"
#include "testbench.h"
class Testbench : public VerilatedTestbench {
public:
Vtop* u_DUT;
Testbench() {
u_DUT = new Vtop;
}
~Testbench() {
delete u_DUT;
}
virtual void op() {
// 進行仿真
u_DUT->eval();
// 測試完成後調用finish
if (Verilated::gotFinish()) {
(*log_os) <addClock(1, 10);
// 開始仿真
tb->run(argc, argv);
return 0;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/286275.html