Modelsim/Queasim全自动化仿真脚本

Modelsim分为几个不同的版本:SE 、PE、LE、OEM,其中SE是最高级的版本,而集成在Actel 、Atmel、Altera、Xilinx及Lattice等FPGA厂商设计工具中的均是OEM版本,SE版本和OEM版本在性能上有很大的差别,一般我们推荐使用SE版本进行仿真。有很多使用Vivado的都喜欢使用Vivado自带的仿真工具进行仿真,我自己也使用过,感觉跟modelsim的差距还是很大,仿真一个PCIE的IP核,modelsim大概十分钟左右就搞定,Vivado自带的仿真工具跑了将近半个小时。
关于modelsim/Queasim软件的安装包下载,破解以及使用教程网上也都是有一大堆,自己去搜一搜就看看就可以了,我就不做多余的阐述了,仿真脚本在网上也是有一大堆,但是拿过来一看,基本上都是大同小异,总感觉缺少一些自己总结的东西。
下面是我工作以来自己一直在用的一个脚本,感觉还很实用,都是自己东凑西凑慢慢积累起来的,在仿真中使用alias这条语句是在altera的官方仿真脚本中学来的,它可当做是一个verilog中的task一样在modelsim的命令窗口中调用,可以把我们需要输入的仿真脚本全部封装在alias里面,在modelsim的命令窗口中只需要输入alias的名字就可以调用里面对应的命令。
Modelsim/Queasim全自动化仿真脚本_第1张图片
Modelsim/Queasim全自动化仿真脚本_第2张图片
Modelsim/Queasim全自动化仿真脚本_第3张图片

这个脚本也不难,大部分行里面的脚本大家在其它地方都见过,我在这里对部分脚本在做一下阐述:
1.filelist_create这个可以参考我的另外一篇文档《自动生成filelist的tcl脚本》;
2._TOP_LEVEL_NAME这个是仿真testbench顶层名字,一般我都默认为test_top;因为我的每一个工程的仿真顶层都是取这个名字。
3.在alias dev_com里面,我在仿真的时候也并不是每次都会使用filelist,因为filelist里面一般只包含rtl代码,当需要仿真大型IP的时候,像DDR、PCIE等,并不适合这么做,我通常的做法是使用VIVADO或者QUARTUS生成的vlog脚本直接替换掉alias dev_com里面的内容,这样更加简单方便很多,在alias elab_debug里面也会使用VIVADO或者QUARTUS自动生成的脚本,因为在仿真这些不怎么常用的IP核的时候,我们确实是不知道它需要调用哪些库,而从VIVADO或者QUARTUS自动生成的脚本中我们可以知道,只需要把它们复制过来到我们的脚本文件中就可以了。
4.波形比较和代码覆盖率统计这个比较少用,我也比较少用。
5.log -f /* 这条语句比较重要,加上它后,在仿真的时候就会自动保存所有的波形数据,在仿真停止之后,如果需要看其它的波形,直接从object中添加就可以了,不再需要重新编译。
6.可能有人会说为什么没有restart -f这条语句了,因为我发现在使用restart -f这条语句的时候,modelsim会出现卡死的情况,有时长达半分钟才恢复过来。所以我就选用退出仿真再重新开始仿真的方法,这样可以避免卡顿现象。
7.在退出仿真之前我会用“write format wave -window .mian_pane.wave.interior.cs.body.pw.wf wave.do”脚本保存当前的波形文件,在重新开始仿真后通过调用“source wave.do”脚本重新打开之前的波形。
8.脚本改写完后如何仿真呢?可以选择通过批处理打开这个脚本,或者打开modelsim后,进入这个do文件的目录下输入“do run.do”运行这个脚本,打开后会直接执行第130行脚本,会调用第115~122行脚本从而调用其它alias脚本完成仿真,如果修改代码后需要重新仿真只需要在modelsim命令窗口输入re_debug_all即可,简单方便。

modelsim的仿真脚本的使用应该不是件难事,可以灵活变通修改代码脚本。我的使用准则就是怎么方便就怎么用。
另外我用的软件是Questasim10.6c 64位,仿真速度明显比前面的版本要快很多。也有些人问我说使用Questasim还是Modelsim好,我16年去北京参加仿真培训的时候,那个老师也是回答说Questasim要好,因为Questasim在处理随机性的时候要比Modelsim好,尤其是在使用SystemVerilog语言进行仿真平台搭建的时候。

关于仿真平台的搭建我自己也有一套简单的框架,是基于SystemVerilog语言的,等什么时候有时间了抽空进行分享。

声明:所有文章属于个人在工作中所记下和搜集的笔记,不得转载

-------------------------20200325 更新 -----------------------------
下面这段是带xilinx库仿真的一小段脚本:run.do



alias debug {
	.main clear
	D:\\questasim64_10.6c\\win64\\vlib questa_lib
	D:\\questasim64_10.6c\\win64\\vlib questa_lib/work
	D:\\questasim64_10.6c\\win64\\vlib questa_lib/xil_defaultlib
	
	D:\\questasim64_10.6c\\win64\\vmap xil_defaultlib questa_lib/xil_defaultlib
	
	D:\\questasim64_10.6c\\win64\\vlog -incr +define+sim -work xil_defaultlib \
	"../code/uart/fifo_32deep/sim/fifo_32deep.v" \
	
	D:\\questasim64_10.6c\\win64\\vlog -incr +define+sim -work xil_defaultlib \
	"../code/*.v" \
	
	D:\\questasim64_10.6c\\win64\\vcom -incr +define+sim -work xil_defaultlib \
	"../code/*.vhd" \
	
	D:\\questasim64_10.6c\\win64\\vlog -incr +define+sim -sv -L xil_defaultlib -work xil_defaultlib \
	"../sim/tb.sv" \
	
	D:\\questasim64_10.6c\\win64\\vlog -work xil_defaultlib "glbl.v" \
	
	vsim -voptargs="+acc" -t 1ps -L xil_defaultlib -L blk_mem_gen_v8_4_1 -L fifo_generator_v13_2_1 \
		-L blk_mem_gen_v8_3_6 -L unisims_ver -L unimacro_ver -L xpm -L lib xil_defaultlib xil_defaultlib.tb glbl
		
	view wave
	view structure
	view signals
	
	log -r /*
	
	source wave.do
	
	run -all
}

alias re_debug {
	write format wave -window .mmin_pan.wave.interior.cs.body.pw.wf wave.do
	.main clear
	debug
}

debug

如果修改了run.do脚本,则在questasim中输入source run.do
如果只是修改了代码,则在questasim中输入re_debug

下面是altera下仿真的脚本



alias debug {
	.main clear
	D:\\questasim64_10.6c\\win64\\vlib questa_lib
	D:\\questasim64_10.6c\\win64\\vlib questa_lib/work
	D:\\questasim64_10.6c\\win64\\vlib questa_lib/xil_defaultlib
	
	D:\\questasim64_10.6c\\win64\\vmap xil_defaultlib questa_lib/xil_defaultlib
	
	D:\\questasim64_10.6c\\win64\\vlog -incr +define+sim -work xil_defaultlib \
	"../sim/altera_mf.v" \
	"../async_fifo_sdram2vga.v" \
	
	D:\\questasim64_10.6c\\win64\\vlog -incr +define+sim -work xil_defaultlib \
	"../src/*.v" \
	"../src/sdram/*.v" \
	"./SDRAMmodle/*.v" \
	
	D:\\questasim64_10.6c\\win64\\vlog -incr +define+sim -sv -L xil_defaultlib -work xil_defaultlib \
	"../sim/tb.sv" \
	
	vsim -voptargs="+acc" -t 1ps -L xil_defaultlib  xil_defaultlib.tb 

	view wave
	view structure
	view signals
	
	log -r /*
	
	source wave.do
	
	run -all
}

alias re_debug {
	write format wave -window .main_pane.wave.interior.cs.body.pw.wf wave.do
	.main clear
	debug
}

debug

你可能感兴趣的:(modelsim)