【FPGA】Modelsim的文件结构和使用
世界Skill
Modelsim是一个HDL仿真软件,其相比其他的软件,最大的优势在于可以在个人电脑上跑出很不错的速度,用起来也颇为顺手,一般分为SE, ISE, ASE几个版本,第一个是原版,后面的是xilinx和altera定制版,SE版本最为强大,支持混合仿真,同时仿真速度不是后两个版本可以比的。
1.工程文件结构
对于一般的需求,使用Modelsim主要是通过建立project来完成的,一般情况下这个project都会在被选择在默认的work库中,并且我们选择的应该是不导入文件和不独立创立一个Ini文件,也就是将安装目录下默认的ini文件作为配置文件,这样,建立好一个project后,目录下一般会有两个文件,假设项目名字为EX:
EX.mpf
Ex.cr.mti
然而真正有用的文件实际上只有EX.mpr一个,也就是说,如果我们想要转移一个仿真工程,原则上只需要复制这一个文件就OK。
Modelsim的这个工程文件也是明文的,但和Vivado不同,它并不遵从xml语法,它使用的是一套类似标记语言的语法,打开它后,我们将会看到很多行的文件,这些行基本说明了这个工程的所有配置,但有很多是我们不需要关心的,我们需要关心的,实际上只有:
检索到:
[Project]
这一行,我们会看到下面有很多类似这样的文本:
Project_Version = 6
Project_DefaultLib = work
Project_SortMethod = unused
Project_Files_Count = 4
Project_File_0 = ../HDL/ContrastTransform.srcs/sources_1/ip/Multiplier12x24LUT/Multiplier12x24LUT_funcsim.v
......
这便是我们需要主要关心的主体内容,来一一解析:
Project_Version = 6
这表明了项目的版本号。
Project_DefaultLib = work
这表明了项目默认所在的库。
Project_SortMethod = unused
项目排序,暂时不知道是做什么的,估计是给文件排序?
Project_Files_Count = 4
项目文件总数,如果和实际不符,小了的话少文件,多了的话报错。
Project_File_0 = ../HDL/ContrastTransform.srcs/sources_1/ip/Multiplier12x24LUT/Multiplier12x24LUT_funcsim.v
第零个文件的路径,这里使用的是相对路径,要注意的是,在modelsim里,一般情况下是不能够使用相对路劲的,似乎只有工程目录下的文件才能使用相对路径表示同时有时候也不行,所以如果相对路径行不通就用绝对路径吧。
至此,我们需要关心的内容基本就搞定了。
2.使用
使用Modelsim的基础部分就不再赘述,已经有无数篇文章写过这种问题,这里主要说几点觉得有用的经验。
1.编译xilinx仿真库到modelsim
在Vivado里面,你只需要在它的控制台中输入以下指令:
compile_simlib -directory <library_output_directory> -simulator <agr>
-simulator_exec_path<sim_install_location>
之后,在modelsima安装目录中打开modelsim.ini文件(去掉只读属性),然后粘贴下列语句:
>ini
[Library]
std = $MODEL_TECH/../std
ieee = $MODEL_TECH/../ieee
verilog = $MODEL_TECH/../verilog
vital2000 = $MODEL_TECH/../vital2000
std_developerskit = $MODEL_TECH/../std_developerskit
synopsys = $MODEL_TECH/../synopsys
modelsim_lib = $MODEL_TECH/../modelsim_lib
simprim_ver = G:/EDA/Xilinx/simprim_ver(库的路径,以下同)
unisim_ver = G:/EDA/Xilinx/unisim_ver
xilinxcorelib_ver = G:/EDA/Xilinx/xilinxcorelib_ver
最后,还原只读属性即可。
2.自动化测试
使用tcl脚本和控制台来完成,我的一般做法如下:
首先,使用以下指令创建work库:
vlib work
而后,编译文件并执行仿真,一次仿真结束后ctrl+s保存一个wave.do文件,之后新建一个run.do文件,在wave.do文件开头和结尾加上两行内容:
vsim work.glbl -voptargs=+acc -L unisims_ver work.ContrastTransform_TB
(wave.do)
run -all
work.glbl是由于使用了xilinx的仿真库,必须先加载这个才可以进行仿真,后面的则是禁止优化参数,为了调试而准备,这条指令只要结构是vsim xxx,开始仿真的意思。
之后再次仿真只需要执行:
do run.do
即可。
当然,我们也可以建立一个tcl脚本来完成自动化测试,不过看需求了,完。