打印

基于Xilinx+ModelSim的FPGA仿真设计

[复制链接]
1651|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LongChip|  楼主 | 2012-12-18 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文主要概括一下,如何针对Xilinx+ModelSim进行FPGA的仿真设计。
1. xHDL仿真器
常用的硬件描述语言的仿真器有很多种,例如,VCS,Ncsim,Affirima,Verilog-XL,SpeedWave,Finisim和ModelSim。个人认为比较流行的就是ModelSim和Ncsim,像opencores提供的源码大部分都含有Ncsim仿真支持,或者ModelSim仿真支持。
1.1 ModelSim简介
ModelSim仿真器在FPGA/CPLD设计中的使用得到了广泛的应用,这是因为Model Technology公司为各个FPGA/CPLD厂家都提供了OEM版本的ModelSim工具。ModelSim仿真原理是基于事件驱动的,它可支持Verilog和VHDL语言的的单独仿真与混合仿真。
1.2 ModelSim版本
ModelSIm仿真工具有许多版本,首先就是他的版本号很多,这里不多介绍,因为它无非就是软件性能,功能的升级。这里主要是要说明ModelSim PE/LE/SE之间的区别:
为了满足不同用户的需要,ModelSim每个版本号都可以分为PE,LE和SE等类别。其中SE功能是比较完善的,但是它有一个特点就是,在进行仿真前,要首先编译相应的仿真库(通过设置,也可以一老永逸),后面会专门介绍。
在进行Xilinx FPGA产品开发时,我们有时会遇到ModelSim XE版本,这是ModelSim的Xilinx OEM版本,里面集成了Xilinx的仿真库。同样道理也适用于Altera。

相关帖子

沙发
LongChip|  楼主 | 2012-12-18 11:39 | 只看该作者
2. 仿真库的生成
结合自己的实际经验,本文以Verilog + ModelSim SE + Xilinx ISE为例来说明仿真库的生成。
2.1 仿真库的命名
在ModelSim中编译器件的仿真库时,使用的仿真库的名称可以随意定义,只要满足操作系统的命明规则就行。但是在实际操作中,则不然。
当我们使用Xilinx ISE + ModelSim进行仿真时,Xilinx ISE会产生一些对ModelSim进行控制的文件,而在这些文件中,包含仿真库的映射机制,因此为了兼容性,这里的仿真库的命名就是固定的了,而不是任意定义。他们分别是Unisim_ver,Simprim_ver,Xilinxcorelib_ver。
2.2 仿真库文件的说明
上面提到了ModelSim仿真所需要的3个基本的库,这里主要介绍一下他们的作用。
Unisim_ver:如果要做综合后的仿真,还要编译这个库。即UNISIM,Library of Unified Component simulation models,这个库用来做功能仿真。这个库包含了Xilinx的所有的标准元件,可以被绝大多数的综合工具推论。UNISIM库被分为VHDL和Verilog两种。以Verilog为例:Verilog UNISIM库文件中每一个元件使用一个独立的文件。根据器件的不同,这个库分为两个目录,对于FPGA器件家族,源文件位置在$Xilinx\Verilog\src\unisims目录下,对于CPLD家族,源文件位置在$Xilinx\Verilog\src\uni9000目录下。
Simprim_ver:这个库用于布局布线后的仿真。对于Verilog来说,这个库位于$Xilinx\Verilog\src\simprimes,对于VHDL来说,这个库位于$Xilinx\VHDL\src\simprimes。
Xilinxcorelib_ver:这个库仅仅用来做功能仿真。但其和Unisim_ver不同,如果设计中调用了CoreGen产生的核,则需要编译这个库。Core Generator HDL Library models, 它包含了适用Core Generator产生的各种IP核的仿真模型。Xilinx的IP核都针对不同的器件结构作了很好的优化,但是对于使用者来说,大部分只能够做为黑合来处理。对于Verilog来说,其对应的源文件位置所在的位置是$Xilinx\Verilog\src\xilinxcorelib,对VHDL来说,其对应的源文件所在的位置是$Xilinx\VHDL\src\xilinxcorelib。

使用特权

评论回复
板凳
LongChip|  楼主 | 2012-12-18 11:39 | 只看该作者
2.3 仿真库的建立
本节将以Verilog语言中时序仿真库simprimes为例来说明,为ModelSim建立仿真库。
第一步:将ModelSim根目录下的配置文件Modelsim.ini属性由只读改为可读写。这样做的目的就是为了让软件可以记录仿真库建立的路径以及映射关系。以后每次启动Modelsim时,软件会根据ModelSim.ini中的配置寻找仿真库,并且形成映射关系。
第二步:在这一步,有2种方法可以作。
(1) 在modelsim环境下,新建工程,工程的路径与你想把库存储的路径一致。这里Project Name: Xilinx_lib;
Project Location: D:/My_Work/ModelSim_Simulation/Xilinx—即仿真库保存的路径。如下图所示:


(2): 在主窗口中选择[File] / [Change Directory]命令,将工作目录改到我们想要保存仿真库的目录下,即D:/My_Work/ModelSim_Simulation/Xilinx。
以上两个方法均可,最终的结果都是一样的。
第三步:新建库,库名起作simprim_ver。我们首先就是要建的就是这个库。
即在主窗口选择[File] / [New] / [Library]命令,然后根据下图设置[Create]选项,[Library Name]选项,以及Libray Physical Name]选项(软件自动生成)。如下图所示:


这一操作实际上相当于在ModelSim主窗口的脚本区域输入命令
vlib simprimes_ver
vmap simprimes_ver simprimes_ver

使用特权

评论回复
地板
LongChip|  楼主 | 2012-12-18 11:39 | 只看该作者
第四步:这一步有两种方法实现,这两种方式是等效的
(1): 在modelsim的命令栏上,打下如下命令:
vlog -work simprim_ver $xilinx/verilog/src/simprims/*.v
其中的$xilinx是Xilinx ISE的安装路径,你把这个改成你的就行了。编译完之后,你会发现你的工程文件夹下出现了一个simprim文件夹,里面又有很多个文件夹。这些就是我们要的库了。
(2): 在主窗口选择[Compile] / [Compile]命令,弹出[Compile Source Files]窗口,然后选择$xilinx/verilog/src/simprims/目录下的所有*.v文件,点击Compile按钮执行编译。
第五步:按照第三步中的任意一种方式编译其它两个库,对应的命令行是:
vlog -work unisim_ver $xilinx /verilog/src/unisims/*.v
vlog -work xilinxcorelib_ver $xilinx /verilog/src/XilinxCoreLib/*.v
如果你想要编译的是VHDL的库,你需要建立的库分别是simprim,unisim和xilinxcorelib。这三个库所需要的modelsim指令分别如下:
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
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
vcom –work xilinxcorelib $xilinx /VHDL/src/ XilinxCoreLib/*.vhd
第六步:库文件编译好了以后,为了方便以后使用,可以修改ModelSim.ini配置文件,打开配置文件之后,可添加对Xilinx仿真库的映射。经过修改后,Xilinx ISE+ ModelSim进行各个阶段的仿真就不会出现任何的错误了。PS:有的人反映,在仿真过程中,有时还需要指定库的路径,其原因就是ModelSim.ini文件没有配置正确。

使用特权

评论回复
5
LongChip|  楼主 | 2012-12-18 11:39 | 只看该作者
没有修改过的ModelSim.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 = D:/My_Work/ModelSim_Simulation/Xilinx/simprim_ver
unisim_ver = D:/My_Work/ModelSim_Simulation/Xilinx/unisim_ver
xilinxcorelib_ver = D:/My_Work/ModelSim_Simulation/Xilinx/xilinxcorelib_ver
如果还需要其它的仿真库支持,例如abel_ver, cpld_ver,可按照上述的1~5步完成这些仿真库的添加。
完成上面的步骤后,如果重新打开ModelSim,发现下面的库文件的话,就说明,你的仿真环境建立好了,接下来就可以做你该做的事情了。

使用特权

评论回复
6
LongChip|  楼主 | 2012-12-18 11:40 | 只看该作者
3. ModelSim常用命令
在作FPGA开发时,由于需要屡次的修改源文件进行调试,因此,每次仿真都不可避免的要进行编译。这道程序比较麻烦,ModelSim提供了一个捷径,即我们只需要编写一个*.do文件,然后再ModelSim命令行里键入do *.do就可以替代这一麻烦过程。
下面以Giga Eth MAC开发仿真为例,说明一下*.do的语法结构,如下图所示:


(1) vlib work >> 由于vlib<库名>,表示创建一个库,因此vlib work表示创建一个work库,这里的work是库的名称。
(2) vmap work work >>vmap表示映射库,前一个work表示以创建的库的名称,后一个work表示当前ModelSim工作目录下的文件夹,即将一个名为work的库映射到当前目下的work文件夹。
(3) vlog -work work C:/Xilinx91i/verilog/src/glbl.v >> vlog表示编译源代码,”-work”表示其后面跟着的参数表示编译完的源文件要存放的位置,最后的参数表示源文件的位置,即该语法表示,将文件C:/Xilinx91i/verilog/src/glbl.v编译,得到的编译后的文件,存放在当前工作目录下的work目录下。

使用特权

评论回复
7
LongChip|  楼主 | 2012-12-18 11:40 | 只看该作者
最终的仿真结果如下图所示:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

129

帖子

0

粉丝