一、概述
PDS支持仿真功能主要包括编译仿真库和启动运行仿真两部分
编译仿真库是指调用ModelSim或QuestaSim等第三方仿真工具编译GTP库和VOP库,GTP库应用于前仿(pnr前的仿真),VOP库应用于后仿(pnr后的仿真)
启动运行仿真是指调用ModelSim或QuestaSim等仿真工具对用户的design进行编译和仿真,分为run behavior simulation,run post synthesis simulation,run post pnr function simulation,run post pnr timing simulation等不同阶段的仿真,其中pnr之前的仿真可能要用到GTP库,而pnr后的仿真要用到VOP库。
PDS仿真功能可以方便地让用户启动第三方仿真工具如ModelSim或QuestaSim等进行仿真,验证功能或时序是否正确。一般仿真的流程包括:
1)创建一个test bench,编译仿真库library,对仿真运行进行相应设置;
2)如果是post synthesis simulation或者post pnr simulation则还需要运行Synthesis得到vm,或gen netlist得到sim.v和sdf;
3)启动仿真。
二、 编译仿真库
编译仿真库功能主要对仿真模型GTP和VOP,启动第三方工具如ModelSim或QuestaSim进行编译,形成仿真用的库文件。编译后的库名字分别为usim和vsim
其中usim是GTP前仿库,而vsim是VOP后仿库。除了输出编译的库,编译用的ModelSim或QuestaSim脚本也生成出来,运行脚本可以直接生成库而无需打开PDS。
三、 运行仿真
启动运行仿真包括:
1) run behavior simulation,是综合前行为级仿真
2) run post synthesis simulation,是综合后gtp仿真
3) run post pnr function simulation,是pnr后的功能仿真
4) run post pnr timing simulation,是pnr后带sdf的时序仿真
四、操作步骤
1、创建新工程和TestBench文件
由于PDS在创建IP时会自动生成IP核文件和IP_TestBench,所以这里以PLL为例创建工程仿真
创建PLL工程,并且添加IP核到工程中,锁相环的配置如下
右击Source目录下的Simlution,添加自动生成的TestBench文件pll0_tb,并设置top module
2、通过PDS生成Modelsim的编译库
菜单栏【Tools】按钮点【Compile Simulation Libraries】启动编译库
注:编译库的时候,工程有无TestBench都不影响结果,这一步的实际意义是PDS产生适配Modelsim编译仿真需要的库文件,与工程无关
点击后弹出向导界面,各选项含义如下: Simulator: 第三方仿真工具,目前支持ModelSim和QuestaSim; Language: 仿真库用的语言; Library: 选择usim则是前仿库,vsim则是后仿库,ALL则包括usim和vsim两个库; Compiled Library Location:编译出来的库的位置,默认是在当前工程下面; Simulator Executable Path:第三方仿真工具运行路径,ModelSim的话需要选择到根目录下的WIN64文件夹; Command:编译库对应的TCL命令,可在Console中运行。
配置完成后点击Compile,编译库完成提示成功如图所示:
3、替换ModelSim的ModelSIm_ini配置文件(不确定是否一定需要这一步)
完成编译库操作后,会在刚刚选择的文件夹pango_sim_libraries下生成modelsim.ini文件,即ModelSim的库配置文件,将该文件复制到ModelSim安装目录下,替换到原来的配置文件
右击top module或者在【Process】文件菜单下选择运行仿真:
这里由于没有编译,只能选择run behavior simulation
进行综合前行为级仿真
随后PDS会自动运行TCL脚本,启动ModelSim输出仿真结果
仿真结果如下,可以看到CLKOUT1是25MHz时钟,CLKOUT2是延后180°的100MHz时钟
五、仿真错误解决
错误编码VOPT-7063 关键词GRS_INST
错误提示:Failed to find 'GRS_INST' in hierarchical name '/GRS_INST/GRSNET’
错误原因:PDS官方配置文件GTP_DRM9K中只调用了GRS_INST,没有定义
解决方式:只需要在仿真的激励文件中加入一段代码即可,如下所示(可直接复制使用):
//###############################
//GTP_GRS
//###############################
reg grs_n;
GTP_GRS GRS_INST(
.GRS_N (grs_n)
);
initial begin
grs_n = 1'b0;
#5000 grs_n = 1'b1;
end
错误编码vish-17 关键词modelsim.ini
错误提示:# ** Error: (vish-17) Recursive reference in 'others' clause in "C:\modeltech_10.1a\win32/../modelsim.ini" to "C:\modeltech_10.1a\win32/../modelsim.ini".
错误原因:配置文件modelsim.ini没有修改正确,多半是由于PDS编译库生成的配置文件错误
解决方式:打开安装根目录里的modelsim.ini,将[Library]里的others = $MODEL_TECH/../modelsim.ini删除,只删除第14行的内容即可
错误编码vlog-6 关键词Waiting for lock by
错误提示:Warning: (vlog-6) -- Waiting for lock by "Administrator@PC-202206301028……
错误原因:由于之前配置错误,生成了LOCK文件
解决方式:只需要删除对应的目录下的lock文件即可
错误编码 vopt-13130 关键词failed to find design unit
错误提示:error:(vopt-13130)failed to find design unit****
错误原因:由于TestBench或者工程源文件的语法错误,或者文件名错误等等原因导致ModelSim编译没有通过
解决方式:需要依次修改处理掉其他错误后才能有效解决
错误编码 关键词failed to find design unit
错误提示:Error:D/Microsemi/Libero_SoC_v11.8/Modelsim/win32acoem/vlog failed.
错误原因:由于TestBench或者工程源文件的语法错误导致ModelSim编译没有通过
解决方式:按照上面的错误提示进行修改即可,如下图中的错误vlog-2388意思是变量重复定义