1.介绍
本篇简单介绍一下如何通过VCS与Verdi实现混合仿真,在学习过程中也遇到了很多头疼的问题,因此通过一些例子简要总结一下,当然,也希望对各位小伙伴有所帮助。
很多公司ASIC设计所使用的还是更加专业的EDA软件,即Synopsys下的VCS、Verdi这种(Vivado大多针对于自家FPGA),VCS编译速度极快,仿真效率高,Verdi支持信号追溯、无缝增加信号波形等功能。
2.使用
环境:Linux。 学习之前要学习一些Linux的基本指令,比如:ls、pwd、cd、mkdir、cp、mv、touch...
写verilog/VHDL代码:VIM编辑器
编译:VCS
查看波形:Verdi 运行VCS编译生成的fsdb文件
开始之前可以把环境配置好,利用vcs -help查看是否配置成功
3.过程
我简单写了一个加法器,利用verilog和vhdl分别编写了它的模块设计,暂且命名为add.v和add.vhd,用verilog给他们写了testbench,可以分别实例化调用add.v或者add.vhd,记为add_tb.v。代码非常简单,就不放在下面了,我把它们一起放在了桌面下的一个目录文件里(顶层和设计文件必须放在一个目录)
1 先实现add.v和add_tb.v的verilog仿真(直接命令法):
首先,确保Verilog 测试平台文件 add_tb.v和加法器设计文件add.v在同一目录下。然后使用 VCS 编译这些文件:
vcs -full64 -sverilog add.v add_tb.v -o simv
这里 `-full64` 表示使用 64 位模式编译,`-sverilog` 表示启用 SystemVerilog 支持。`-o simv` 指定输出的仿真可执行文件名为 `simv`。
编译完成后,运行仿真
./simv
为了生成波形文件,需要在TB中添加代码来完成波形转储
initial begin
$fsdbDumpfile("waveform.fsdb"); // 指定生成的波形文件名
$fsdbDumpvars(0, add_tb); // 转储当前模块及其子模块的所有信号
end
重新编译并运行仿真,以生成波形文件 `waveform.fsdb`。
使用 Verdi 查看波形:
VCS 通常与 Verdi 波形查看器配合使用。要使用 Verdi 查看波形,首先确保 Verdi 已经安装在Linux系统上。然后使用以下命令启动 Verdi 并加载波形文件:
verdi -ssf waveform.fsdb
这将打开 Verdi 并加载 `waveform.fsdb` 文件,就可以在 Verdi 的 GUI 中查看和分析波形了。
2.add.vhd和add_tb.v的混合仿真(三步命令法):
编写一个synopsys_sim.setup文件,代码如下:
--VCS MX setup file for ASIC
--Mapping default work directory
WORK > DEFAULT
DEFAULT : ./work
--Library Mapping
STATS_PKG : ./stat_work
MEM_PKG : ./mem_work
--Simulation variables
TIMEBASE = ps
LBUFG:./lbufg
需要先将add.vhd文件编译成库,使用如下两条代码:
vhdlan -work lbufg add.vhd
vhdlcom -nc add.vhd
再编译add_tb.v
vlogan -work lbufg add_tb.v
vericom -nc add_tb.v
然后指定top_module,必须指定,不然识别不到top_module,就不能实例化add.vhd
vcs -top add_tb
就可以编译成功了,再利用./simv指令生成fsdb文件,最后通过verdi -ssf waveform.fsdb就可以查看混仿的波形了。
4.可以通过编写makefile省略上述步骤:
5.补:shell脚本,可直接编译
#!/bin/bash
# 设置VHDL和Verilog文件列表
vhdl_files="file1.vhd file2.vhd"
verilog_files="file1.v file2.v"
vcs_path = "/home/EDA/Synopsys/vcs-mx/amd64/bin/vcs"
# 创建work库(如果不存在)
vlib work
# 编译VHDL文件
echo "Compiling VHDL files..."
vhdlan -work work $vhdl_files
vhdlcom -work work $vhdl_files
# 编译Verilog文件
echo "Compiling Verilog files..."
vlogan -work work $verilog_files
# 链接仿真
echo "Linking simulation..."
vcs -full64 -sverilog -top TopLevel -o simv
# 运行仿真
echo "Running simulation..."
./simv
# 生成波形文件
echo "Generating waveform file..."
./simv +vcs+dumpvars+0+waveform.fsdb
# 使用 Verdi 查看波形
echo "Viewing waveforms with Verdi..."
verdi -ssf waveform.fsdb
放在linux的项目目录下,需要在tb里加生成波形的代码,直接运行shell即可生成.fsdb文件