来源: http://wenku.baidu.com/view/53681cf24693daef5ef73dc1.html
在这个论坛中我学到了很多东西,所以总结点东西做为回报。
大家是不是被modelsim折磨的死去活来呢?是不是觉得在没有人指点下,学习modelsim就象是黑暗中摸索,everyting is black!.如果我们能直接在quartus中调用modelsim那么我们就可以直接得到我们的仿真波形,不用在modelsim 中建立工程,加入文件,编译,加载波形,运行等等烦琐的工序,而且后仿的时候还经常会出现找不到库的情况,这对出学者来说更是郁闷的要死。直接调用可以进行rtl级仿真和门级仿真。一个前仿一个后仿。因此为了方便大家我特意研究了一下如何实现直接调用。以下是结论。
在ISE环境中。
1,edit->preferences:ise General->Intergrated tools
设置:Model Tech Simulator: C:\Modeltech_6.0\win32\modelsim.exe(看你装在哪里了)
2,在 Sources in Project窗口里的 器件名称上单击左键。然后双击:Compile HDL Simulation Library
3,建立testbench。方法:Project->new source. vhdl 是:VHDL module verilog hdl 是:verilog test fixture.
4,单击testbench 文件,就可以看到下面框框里的四个仿真级别。双击分别进行仿真。
5。用眼睛看modelsim 出来的波形。
在Quartus 中。
1,我的电脑->属性->高级->环境变量.
在系统变量里增加:QUARTUS_INIT_PATH C:\Modeltech_6.0\win32 (看你装在哪里了)
(和有些参考PDF上说的环境变量好像无关,至少我用的Quartus II 9.0 Web Edtion是这样的)具体方法是,进入
Quartus9.0->Tools->Options,在Categroy里选中General下的EDA Tool Options,在ModelSim右边的Location of
Executable中双击来改变路径,就并且在工程中设置了自动启动ModelSim,就可以自动启用了。
1.在EDA Tool Settings,首先将仿真工具设置为ModelSim,然后点击让它自动启动。
2.NativeLink settings中选择testbench,完成相关的设置,例如test bench name,top level module in test bench,Design instance name in test bench,仿真时间,然后编译时会自动启动ModelSim然后完成所有操作,大概这就是Altera所指的和很多EDA工具的无缝连接。
2.Assignments->settings->ead tool setting:Simulation:
tool name:modelsim(verilog)(我用的是这个,用啥选啥)
别的能填的就填一下。但是下边的两个按纽还是要设置的,因为要指定test bench文件才能仿真的。所以先写好testbench。然后把路径设置好。那两个按纽一个是前仿真,一个是后仿真。不知道写testbench大家会不?就是:process->start->start testbench template writer
然后把生成的文件打开,改一改就行了。在哪里打开?看屏幕下面的提示啊。
3.现在就可以进行仿真了。
tools -> eda simulation tool->run RTL simulaiton...前仿
tools -> eda simulation tool->run Gate Level simulaiton 后仿。
4.用眼睛看波形。
如何在ModelSim中仿真Altera IP宏?(使用modelsim-altera的同学忽略这步)
Altera的基本宏功能的功能(行为)仿真模型在Quartus工具安装目录下的"eda\sim_lib"目录中:
Verilog HDL语言的仿真库文件为220model.v和altera_mf.v;
VHDL语言的仿真库文件为220pack.vhd、220model.vhd、altera_mf.vhd和altera_mf_components.vhd。
仿真时把相关库文件加到工程中去就行了。
补充一下:
在ISE环境中,选中某个仿真(behavioral或者Post fit等等)单机Process- Properties-可以设置仿真的时间、vism vlog vcom参数或者指定DO file。Quartus6就更方便了。在tools->options->EDA Tool Options里面设置modelsim synplify之类的路径。然后按照楼主的方法设置assignment settings 就ok了。
通过本论坛学习它们已经有一个星期了,期间有好多学习地方需要总结,在此一说。
quartus ii对只能对源程序进行验证和综合,以及指定相应的ALTERA元件进行端口映射和下载相应文件到实际硬件电路。仿真部分只能利用波形文件进行简单的仿真,不能利用测试文件输入进行仿真。
modelsim SE是专门进行仿真的软件,可以分别进行前仿真和后仿真。 前仿真也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与Testbench. 后仿真也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、Testbench和扩展名为SDO或SDF的标准时延文件。SDO或SDF的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。一般来说后仿真是必选的,检查设计时序与实际的FPGA运行情况是否一致,确保设计的可靠性和稳定性
后仿真的前提是quartus已经对要仿真的目标文件进行编译,并生成modelsim仿真所需要的.vo文件(网表文件)和.sdo文件(时延文件),具体操作过程又有两种方法,一种是通过Quartus调用Modelsim,Quartus在编译之后自动把仿真需要的.vo文件以及需要的仿真库加到modelsim中,操作简单;一种是手动将需要的文件和库加入modelsim进行仿真,这种方法可以增加主观能动性,充分发挥modelsim的强大仿真功能。
如果要进行时序仿真则要将quartus生成的.sdo文件一起编译到work库里。
前仿真和后仿真的区别:前仿真就是指综合前的仿真,也就是行为级的仿真,如你在modelsim直接写代码的仿真.后仿真指的是综合后的仿真,也就是功能仿真.比如你在modelsim中用VHDL写了个计数器,行为级的仿真通过了,你把它加到QUARTUS中或者其他的综合工具进行综合,综合完后生成一功能网表,它把行为语言变成寄存器传送级语言,这时候你把它加到modelsim中仿真叫后仿真,后仿真成功后,你还要在quartus中进行映射,布局布线,完后进行时序分析,时序分析完成后会生成一时序网表,描述器件中门,或者布线的延时.最后,你把延时网表和功能网表一起加到modelsim中仿真叫门级仿真,如果通过的话,你就可以出产品了。
门级仿真和时序仿真的区别:门级仿真是quartusii生成的网表文件.vo。门级则不考虑互联延迟,而只考虑了器件的延迟。时序仿真是选择具体器件并布局布线后进行的包含定时关系的仿真,主要验证是否满足时间约束关系、延时、最大工作频率和消耗的资源等。时序仿真是需添加时延文件.sdo。
我认为一般所说的后仿真包括门仿真和时序仿真。
生成网表文件(.vo)和时延文件 (.sdo)后,在进行Modelsim仿真时,在建立工程后,往工程里添加文件时,选择copy到工程目录下。这样后仿真才能成功。
quartus ii对只能对源程序进行验证和综合,以及指定相应的ALTERA元件进行端口映射和下载相应文件到实际硬件电路。仿真部分只能利用波形文件进行简单的仿真,不能利用测试文件输入进行仿真。
modelsim SE是专门进行仿真的软件,可以分别进行前仿真和后仿真。 前仿真也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与Testbench. 后仿真也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、Testbench和扩展名为SDO或SDF的标准时延文件。SDO或SDF的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。一般来说后仿真是必选的,检查设计时序与实际的FPGA运行情况是否一致,确保设计的可靠性和稳定性
后仿真的前提是quartus已经对要仿真的目标文件进行编译,并生成modelsim仿真所需要的.vo文件(网表文件)和.sdo文件(时延文件),具体操作过程又有两种方法,一种是通过Quartus调用Modelsim,Quartus在编译之后自动把仿真需要的.vo文件以及需要的仿真库加到modelsim中,操作简单;一种是手动将需要的文件和库加入modelsim进行仿真,这种方法可以增加主观能动性,充分发挥modelsim的强大仿真功能。
如果要进行时序仿真则要将quartus生成的.sdo文件一起编译到work库里。
前仿真和后仿真的区别:前仿真就是指综合前的仿真,也就是行为级的仿真,如你在modelsim直接写代码的仿真.后仿真指的是综合后的仿真,也就是功能仿真.比如你在modelsim中用VHDL写了个计数器,行为级的仿真通过了,你把它加到QUARTUS中或者其他的综合工具进行综合,综合完后生成一功能网表,它把行为语言变成寄存器传送级语言,这时候你把它加到modelsim中仿真叫后仿真,后仿真成功后,你还要在quartus中进行映射,布局布线,完后进行时序分析,时序分析完成后会生成一时序网表,描述器件中门,或者布线的延时.最后,你把延时网表和功能网表一起加到modelsim中仿真叫门级仿真,如果通过的话,你就可以出产品了。
门级仿真和时序仿真的区别:门级仿真是quartusii生成的网表文件.vo。门级则不考虑互联延迟,而只考虑了器件的延迟。时序仿真是选择具体器件并布局布线后进行的包含定时关系的仿真,主要验证是否满足时间约束关系、延时、最大工作频率和消耗的资源等。时序仿真是需添加时延文件.sdo。
我认为一般所说的后仿真包括门仿真和时序仿真。
生成网表文件(.vo)和时延文件(.sdo)后,在进行Modelsim仿真时,在建立工程后,往工程里添加文件时,选择copy到工程目录下。这样后仿真才能成功。
ModelSim作布局布线后仿真的库问题[日期:2009-3-4]
Modelsim是目前最流行的应用最广泛的FPGA仿真器,是Mentor Graphics的子公司Model Technology开发的。因为Modelsim好学易用,调试方便,仿真速度快,功能强大,所以很多芯片厂商的开发系统都OEM Mentor Graphics公司的Modelsim仿真器,包括Xilinx,Altera,Lattice和Actel等。Modelsim是一个单内核仿真器,同一个内核可以进行VHDL仿真、Verilog仿真和VHDL/Verilog混合仿真;支持所有的VHDL和Verilog标准;采用直接编译技术(Direct-Compiled),大大提高了HDL编译和仿真速度。
Modelsim支持三个层次的仿真:RTL仿真、综合后仿真和布局布线后仿真。为了加快仿真速度,一般情况下设计中调用的库都是已经进行编译过的,然后对设计进行仿真,此时仿真器直接调用库中已经编译过的单元,而不是再次对设计中的单元模块进行编译。所以如果要对设计进行综合后仿真和布局布线后仿真,必须先对设计中调用的库进行编译处理。这也是本文的重点内容。因为每个厂商的库不一样,而且同一个厂商,不同的器件库就有可能不同,所以下面就目前国内比较常用的几个公司的芯片的库问题分别进行探讨。
1.Xilinx公司的器件
其库的处理方式有两种,一种是在Xilinx的网站上,我们可以下载到压缩文件xilinx_lib_4.zip,解压缩后有一个xilinx_lib_4.tcl(将来的版本可能会升级)。单独运行Modelsim,然后在工具菜单中有一项是执行宏(这里Modelsim5.5 和5.6、5.7有一些差异,不过在5.5中仍可以找到执行宏Execute Macro),运行xilinx_lib_4.tcl后可以看到。
你可以根据你的厂商软件版本选择,指定Xilinx 的安装路径,在Install Path中指定你编译后的数据将要放的目录位置(可以是任何一个目录,最好是设计者数据盘中的某个目录,因为库编译一次就可以了,重新安装软件不需要重新编译库)。对于Xilinx作布局布线后仿真只需要simprim库即可;如果要作综合后仿真,就需要编译Unisim库;如果设计中调用了CoreGen产生的核就需要编译CoreGen库。这应该根据设计者的具体情况进行选择。
如果编译完了后,在Modelsim中库会自动变为标准库(注意:Xilinx提供的早期脚本文件作不到这一点所谓标准库,也就是说这个库会和IEEE这些库一样,当Modelsim启动时,这些库会自动加载,里面的单元在VHDL代码中可以随意调用。比如:在布局布线后的VHDL文件中大家可以看到Library simprim这样的语句。当然也可以自己手动改变这些库的性质,只用修改在Modelsim安装路径下的Modelsim.ini文件即可。比如:修改后的Modelsim.ini可以看到为
[Library]
std = $MODEL_TECH/../std
ieee = $MODEL_TECH/../ieee
verilog = $MODEL_TECH/../verilog
std_developerskit = $MODEL_TECH/../std_developerskit
synopsys = $MODEL_TECH/../synopsys
modelsim_lib = $MODEL_TECH/../modelsim_lib
simprim = D:/test/test/simprim
unisim = D:/test/test/unisim
logiblox = D:/test/test/logiblox
simprims_ver = D:/test/test/simprims_ver
unisims_ver = D:/test/test/unisims_ver
xilinxcorelib = D:/test/test/xilinxcorelib
xilinxcorelib_ver = D:/test/test/xilinxcorelib_ver
lpm = d:/test/test/lpm
…
可以看到修改后的文件中simprim库和IEEE等标准库处于同等的位置。如果关于这些库的行不加到这个文件中,那么每做一个项目的时候,设计者都要建立一个库,然后把这个库和编译后的目录映射好。比如:在Modelsim中用命令
vlib simprim
vmap simprim D:/test/test/simprim
在一个项目中设置的库对其他项目是无效的,所以如果你经常用一些库,就可以把这些库设置成标准库。
另外一种编译库的方法更本质一些,上面这种方法是厂商做一个脚本文件方便大家对库进行处理。事实上,我们可以手工处理这些库。在Xilinx的ISE安装目录下,比如:D:/xilinx/vhdl/src和D:/xilinx/Verilog/src下都有这些库源文件;simprim库的源文件就在…/src/simprims目录下,CoreGen库的源文件就在…/src/XilinxCoreLib下等。
在Modelsim的命令窗口运行下面的命令即可:
vlib simprim
vmap simprim d:/test/test/simprim (路径可以自己任意指定)
vcom –work simprim $XILINX/vhdl/src/simprims/simprim_Vcomponents.vhd
vcom –work simprim $XILINX/vhdl/src/simprims/simprim_Vpackage.vhd
vcom –work simprim $XILINX/vhdl/src/simprims/simprim_VITAL.vhd
(注意:编译顺序不能颠倒),Unisim库如下所示:
vlib unisim
vmap unisim D:/test/test/unisim
vcom -work unisim $XILINX/vhdl/src/unisims/unisim_VCOMP.vhd
vcom -work unisim $XILINX/vhdl/src/unisims/unisim_VPKG.vhd
vcom -work unisim $XILINX/vhdl/src/unisims/unisim_VITAL.vhd
vcom -work unisim $XILINX/vhdl/src/unisims/unisim_VCFG4K.vhd
如果是Verilog语言,可以进行同样的处理。不过必须注意一定要编译glbl.v文件。如果要
了解更详细的信息,可以参考相关文献。
库编译后就可以手工修改安装目标下的Modelsim.ini文件。修改后的文件如前所述即可。
2.Altera公司的器件
对于Altera公司,其MaxplusII软件能开发的器件的库的名字是alt_vtl,仿真模型在maxplus2/vhdl87/vital或者maxplus2/vhdl93/vital下面可以找到。如果是Quartus,则库的名字不再用alt_vtl。该公司不同的器件库名字是不一样的,库名如下:
如果是lpm库,要编译的文件是220model.vhd和220pack.vhd,在安装目录下可以搜索的到。比如:…quartus/eda/sim_lib/
关于lpm库设置过程是这样的,进入MODELSIM,创建一个库,例如:
vlib lpm
vmap lpm <…/myalteralib/lpm>(自己指定绝对路径,或者用菜单创建)
vcom –work lpm <…/sim_lib/220pack.vhd> (自己指定绝对路径,或者用菜单编译)
vcom –work lpm <…/sim_lib/220model.vhd> (自己指定绝对路径,或者用菜单编译)
现在可以到Modelsim的安装目录,编辑modelsim.ini。
[Library]
std = $MODEL_TECH/../std
ieee = $MODEL_TECH/../ieee
verilog = $MODEL_TECH/../verilog
std_developerskit = $MODEL_TECH/../std_developerskit
synopsys = $MODEL_TECH/../synopsys
modelsim_lib = $MODEL_TECH/../modelsim_lib
lpm = <…/myalteralib/lpm>(一定要和自己刚才创建的lpm库目录一致)
此时,即可在Modelsim的library窗口中看到有这个库了。其他的库同理可以这么作。下面举例apex20k库为例:
运行Modelsim,创建库apex20k,
vlib apex20k
vmap apex20k <…/myalteralib/apex20k>
vcom –work apex20k <…/eda/sim_lib/apex20k_atoms.vhd>
vcom –work apex20k <…/eda/sim_lib/apex20k_componenets.vhd>
然后修改modelsim.ini文件即可。
3.Actel公司的器件
因为大多数设计者使用Actel公司器件的原因是其反熔丝特性,这些芯片是一次编程的,所以布局布线后仿真显的更加重要。安装Actel公司的Designer后其库的原文件位置是:
VHDL 的 VITAL Library: :/Actel/ Designer_R1-2001/ lib/vtl/95
Verilog Library: :/Actel/ Designer_R1-2001/lib/vlog
此处以VHDL为例进行库编译说明。对应于不同的器件系列其库名字分别是act1, act2, act3, a3200dx, a40mx, a42mx, a54sx,a54sxa, ex and a500k等。Verilog的库名稍微有所不同,库名分别是act1, act2, act3, 3200dx, 40mx, 42mx, 54sx, 54sxa, ex and a500k等。源文件分别和库名相对应,很容易看出。下面以act2库为例进行说明。
vlib act2
vmap act2 d:/test/test/act2
vcom –93 –work act2 :/Actel/ Designer_R1-2001/ lib/vtl/95/act2.vhd
然后对Modelsim安装目录下的Modelsim.INI文件进行修改即可。此处大家看到利用vcom –93对库进行编译,是因为Actel的库源文件是利用VHDL 93标准写的,而Modelsim默认是安装87标准进行编译的。