安装modelsim和vivado。点击vivado菜单栏中的tools,在下拉选项中选择compile simulation libraries。simulator选项选择:modelsim simulator。compile library location表示编译库存放的路径。simulator executable path:表示modelsim安装路径,即modelsim.exe所在的路径。如下所示:
根据计算机配置,编译时间大概在10分钟左右。
编译完modelsim的仿真库后,在编译库路径下找到modelsim.ini文件,将所有内容拷贝。再在modelsim安装目录下找到modelsim.ini文件,去掉只读属性后,将编译库路径下的modelsim.ini文件拷贝过来,保存后再选中只读属性。
编译库路径下的modelsim.ini文件
modelsim安装目录下的modelsim.ini文件
如下所示,将编译库路径下modelsim.ini文件中的内容拷贝到modelsim安装目录下的modelsim.ini文件中,注意在vital2000 = $MODEL_TECH/../vital2000语句后开始粘贴。
这一步将vivado与modelsim联合起来。点击vivado菜单栏中的tools,在下拉菜单中选择setting,target simulator选择modelsim simulator ,compile library location选择刚才编译库的路径。再点击apply,最后点击ok。
在vivado中建立工程后,创建源文件以及tb文件,点击simulation—>run behavior simulation。如下图所示:这一步骤将打开modelsim。
在vivado中点击simulation 后,将自动打开modelsim界面。此时,在modelsim中的library、project、覆盖率coverage界面中都没有内容,这是因为vivado将工程创建在xil_defaultlib默认的库下,在modelsim命令窗口中会看到这条命令:
这条命令拷贝如下:
vsim -voptargs=""+acc"" -L blk_mem_gen_v8_4_2 -L xil_defaultlib -L
fifo_generator_v13_2_3 -L xbip_utils_v3_0_9 -L c_reg_fd_v12_0_5 -L
xbip_dsp48_wrapper_v3_0_4 -L xbip_pipe_v3_0_5 -L xbip_dsp48_addsub_v3_0_5 -L
xbip_addsub_v3_0_5 -L c_addsub_v12_0_12 -L xbip_bram18k_v3_0_5 -L
mult_gen_v12_0_14 -L axi_utils_v2_0_5 -L cordic_v6_0_14 -L unisims_ver -L
unimacro_ver -L secureip -L xpm -lib xil_defaultlib xil_defaultlib.tb xil_defaultlib.glbl
将上述命令中-voptargs=""+acc""删掉,这个选项表示优化设计;然后在命令的最后加上覆盖率的选项:-coverage -novopt
整个命令如下:
vsim -L blk_mem_gen_v8_4_2 -L xil_defaultlib -L
fifo_generator_v13_2_3 -L xbip_utils_v3_0_9 -L c_reg_fd_v12_0_5 -L
xbip_dsp48_wrapper_v3_0_4 -L xbip_pipe_v3_0_5 -L xbip_dsp48_addsub_v3_0_5 -L
xbip_addsub_v3_0_5 -L c_addsub_v12_0_12 -L xbip_bram18k_v3_0_5 -L
mult_gen_v12_0_14 -L axi_utils_v2_0_5 -L cordic_v6_0_14 -L unisims_ver -L
unimacro_ver -L secureip -L xpm -lib xil_defaultlib xil_defaultlib.tb xil_defaultlib.glbl
-coverage -novopt
在modelsim命令行窗口中敲入上面修改后的命令,将在modelsim的instance或者sim 窗口中显示各个模块实例的覆盖率。如下所示
在Modelsim菜单栏中点击view—>coverage—>instance coverage ,即可看到各个模块实例的覆盖率情况,点击view—>coverage—>code coverage analysis即可看到每个实例的语句覆盖情况。
通过vivado打开modelsim后,显示的命令行如下所示:
vsim -voptargs=""+acc"" -L blk_mem_gen_v8_4_2 -L xil_defaultlib -L
fifo_generator_v13_2_3 -L xbip_utils_v3_0_9 -L c_reg_fd_v12_0_5 -L
xbip_dsp48_wrapper_v3_0_4 -L xbip_pipe_v3_0_5 -L xbip_dsp48_addsub_v3_0_5 -L
xbip_addsub_v3_0_5 -L c_addsub_v12_0_12 -L xbip_bram18k_v3_0_5 -L
mult_gen_v12_0_14 -L axi_utils_v2_0_5 -L cordic_v6_0_14 -L unisims_ver -L
unimacro_ver -L secureip -L xpm -lib xil_defaultlib xil_defaultlib.tb xil_defaultlib.glbl
(1)删除第1行中的-voptargs=""+acc""
(2)将最后一行的 xil_defaultlib.tb删掉,再在最后一行添加如下命令:
-coverage xil_defaultlib.tb -voptargs="+cover=bcesfx"。xil_defaultlib表示xilinx默认库,tb表示自己的顶层仿真模块名。
vsim -L blk_mem_gen_v8_4_2 -L xil_defaultlib -L fifo_generator_v13_2_3
-L xbip_utils_v3_0_9 -L c_reg_fd_v12_0_5 -L xbip_dsp48_wrapper_v3_0_4
-L xbip_pipe_v3_0_5 -L xbip_dsp48_addsub_v3_0_5 -L xbip_addsub_v3_0_5
-L c_addsub_v12_0_12 -L xbip_bram18k_v3_0_5 -L mult_gen_v12_0_14
-L axi_utils_v2_0_5 -L cordic_v6_0_14 -L unisims_ver -L unimacro_ver
-L secureip -L xpm -lib xil_defaultlib xil_defaultlib.glbl
-coverage xil_defaultlib.tb -voptargs="+cover=bcesfx"
保存覆盖率信息报告,在菜单栏中选择Tools-->Coverage Save-->保存为.ucdb文件格式。
如果需要合并多个.ucdb文件,使用quit -sim退出仿真,点击菜单栏“File”—>“change dirctory”,切换到.ucdb保存的目录下(所有测试用例生成的ucdb文件放在同一目录下),在modelsim命令窗口使用“vcover merge file_name.ucdb *.ucdb”,*表示通配符。