verilator 和vcs 如何进行联合仿真?
时间: 2023-11-22 11:56:02 浏览: 436
Verilator和VCS都是常用的硬件描述语言(HDL)仿真工具,它们可以用于单独的仿真,也可以进行联合仿真。
联合仿真的基本步骤如下:
1. 使用Verilator将Verilog代码编译为C++代码。
2. 在C++代码中添加对VCS的调用。
3. 使用VCS编译C++代码和其他Verilog模块的源代码。
4. 运行联合仿真。
具体实现步骤如下:
1. 编译Verilog代码并生成C++仿真模型:
```
verilator --cc --exe top.v --top-module top --trace
make -C obj_dir -j -f Vtop.mk Vtop
```
2. 编写C++仿真程序以调用VCS库中的函数:
```
#include "verilated_vcd_c.h"
#include "Vtop.h"
#include "vcs.h"
Vtop* top;
VerilatedVcdC* tfp;
int main(int argc, char** argv) {
Verilated::commandArgs(argc, argv);
top = new Vtop;
tfp = new VerilatedVcdC;
Verilated::traceEverOn(true);
top->trace(tfp, 99);
tfp->open("top.vcd");
vcs_init();
vcs_set_clock(*top, &top->clk, 1);
while (!Verilated::gotFinish()) {
top->eval();
tfp->dump(top->tick());
vcs_tick();
}
tfp->close();
top->final();
return 0;
}
```
3. 编译C++仿真程序:
```
g++ -I obj_dir -I$VCS_HOME/include -o sim main.cpp obj_dir/Vtop__ALL.a $VCS_HOME/lib/libvcs.a $VCS_HOME/lib/libvcsi.a -lpthread -ldl
```
4. 运行联合仿真:
```
./sim
```
需要注意的是,Verilator和VCS使用的是不同的仿真内核,因此在进行联合仿真时,可能会遇到不兼容的问题。此外,联合仿真还需要保证Verilog代码的可综合性和正确性,否则可能会导致仿真结果不准确。
阅读全文