文章目录
背景
独立于三大FPGA平台进行仿真,可以加快仿真速度,所以,完全有必要掌握以下,而且,我很纳闷儿的事情是每次修改了verilog后,修改了TB后,都要重新启动modelsim,这一点也让验证仿真的过程变得十分慢,而且每次都要在modelsim中,我们才知道tb的语法是否正确,这一点也让我觉得挺烦的。所以本篇文章开始致力于解决这件头疼的事情。另外modelsim SE版本是最高级的版本,而集成在这三大器件厂商的版本都是OEM版本,SE版和OEM版在功能和性能上有较大的差别,比如,对于大家都关心的仿真速度问题,以Xilinx公司提供的OEM版本modelsim XE为例,对于代码少于40 000行的设计,SE要快10倍,而超过40 000行的设计,modelsim SE要快40倍。此外,SE还支持linux平台。
1、Modelsim对Alteral器件的独立仿真
后仿真又称之为时序仿真,是利用SDF文件对原有设计进行时序标注。后仿真从一定程度上可以反映设计的时序性能,modelsim本身并不能生成后仿真需要的SDF文件,但是由于Modelsim对多数FPGA厂商的支持,使其可以利用其它FPGA工具生成的SDF文件进行时序仿真。
1.1 对Quartus 的仿真
工具:modelsim SE-64 10.4 Quartus 13.1
当我们成功编译完verilog程序后,不用再simulation 设置里面匹配 tb 文件,此时,就可以把Quartus软件关闭了,接下来转为使用modelsim。
启动modelsim ,编译对应器件的库文件。也就是说,modelsim中需要有Alteral的器件库文件,这样才能调用这些器件库文件。为此,为了一劳永逸,我们需要在我们的modelsim中添加Alteral的器件库,然后编译进modelsim中。以下文本经过我多次检测,走了不少弯路,倒腾了很久。
- 建立库
新建一个名字为ALT的库,当然上图不是空的,这是我成功后的图片。
- 新建空文件
在modelsim中,在默认路径下面建立库,此时库里面是空的。然后在modelsim的安装路径中新建一个空文件。
- 编译入库
只有通过编译,我们才能添加到库中,我们把目录切换到上述图片的路径下面,然后点击编译
注意选择编译到的库,另外选择alteral的安装路径下eda-》simlib,这里注意了,选择所有的verilog文件,不要全部.v和.vhd全部选,至于为什么,我之前试过好多次,全选后用verilog写的程序开启仿真会导致错误。由于,我本身也不会VHDL,这里我们就只选择所有的.v文件,通过编译入库吧。实际上,我们只需要我们需要的alteral_primerite.v以及cycloneiv_atoms.v入库即可,但是这里,我们就把所有都编译入库吧。
-修改ini
由于我们切换modelsim的工作路径过后,我们添加的编译的器件库就会消失,为了解决这个问题,我们可以在ini文件中,找到我们定义的库名,此处为ALT,ini中写的是ALT=ALT ,我们更改为:
重启软件,这样我们切换目录,完全不影响了
- 开始仿真
在开始仿真前,我们要新建一个工程,把用到的.v文都包含进一个新建的文件夹中,包括我们用到的IP的.v文件。
然后在文件中新建一个工程。然后开始点击start simulation
如上图所示,选中要仿真的顶层实体,并且库,选择我们之前设置的ALT库,里面包含了我们的各种器件。当然,也包含了我们需要的cyclone iv的RAM IP核。
- 注意事项
首先,有时候点击编译是灰色的,这个时候,是因为我们的工程中已经编译完成了添加进来的实体。我们只需要继续添加即可,或者我们要添加器件库的话,就切换路径到默认路径(安装路径)
有时候切换路径按钮也是灰色的,这个时候需要在仿真里面,终止仿真。
此外,有些情况下,我们还需要关闭当前工程,恢复到无工程状态。
最后一点心得体会就是:不管modelsim的操作如何,思路很简单,要仿真,就得添加库进来,要添加库,只能通过编译入库,这样就可以调用这些库里面的函数和定义了。最后开启仿真即可。
1.2 对quartus 独立仿真实际案例
对于一个modelsim工程来说,需要有这几个文件组成:程序硬件设计verilog文件(包括IP的.v文件)、匹配的器件库文件、测试激励输入文件。
这里,我们要说的是需要先在quartus里面写好激励文件vt,编译,这样才能生成匹配的器件库。前面所说的方法,我们的用户往往电脑并不是这样设置的,所以,在项目交接过程中,我们最好提供给用户一个完整的modelsim工程,这样才能称得上独立的modelsim工程。下面,我就以一个实际的例子来说明。
如上图所示verilog_libs里面包含了匹配的器件库。
如上图所示,拷贝匹配的器件库到RAM工程文件夹中。另外,我们还需要拷贝.v文件
另外,把vt文件改成v文件,并把vt文件里面的名字改写成tb
然后·在modelsim中建立工程
进行编译
在开始编译的库选择中,选择我们modelsim工程文件中的这两个文件
在如下图的i 1中右键点击add wave就可以将所有的寄存器变量加入wave中观察
如下图所示,我们可以看到没有延迟。所采用的是功能仿真。
至此功能仿真完毕,我们又该如何增加时序仿真呢?下面我接着来讲解一番
我们向modelsim工程中添加vo文件,并拷贝到modelsim文件夹中来
然后编译仿真即可
从上图,我们可以看到出现了延时,以及跳变
1.3 保存波形文件
当我们一次运行了modelsim后,想要保存下来,以便下次直接打开,而不需要重新运行,我们点击保存。如下图所示,会提示我们保存为.do文件。这个文件包含了我们在modelism的波形操作设置,包括添加波形等等。如何看懂do文件的内容,后续我会补充。如下图,点击保存即可。
接下来,我们下次要打开波形的时候,首先打开.wlf文件,然后再进行运行
do wave.do
后续,我会继续完善怎么运行modelsim,由于独立运行modelsim不是必要条件,所以,我们也不急于求成,以后再慢慢来商讨,本次,先有了库的概念,然后进行后仿真的操作。虽然,我个人觉得,还有很多问题要解决,比如,如何进行前仿真,如何保存波形数据,如何与matlab互联等等,都是要解决的问题。这些问题,暂且留到以后吧。
参考:Modelsim电子系统分析及仿真 第七章
2、Modelsim对ISE Xilinx器件的独立仿真
对于modelsim,对ISE器件的仿真也是同样的道理,我们最重要的是添加ISE的xilinx器件库,这里我已经把库添加进去了,如果你还没有把xilinx的库添加进去,你可以按照联合仿真,然后拷贝用到库,再手动仿真。当然也可以先添加入库,详见:modelsim加入xilinx ISE库的方法
如上图所示
另外注意了,我们需要拷贝 RAM_IP.v 文件
如上图所示,注意添加xilinxcorelib文件。
这里要特别注意的一点是,请务必关掉优化,不然不能添加波形。
之后我们如果我们需要再次打开此modelsim工程,仍然可以保存do文件。然后打开wlf文件后在 run do文件即可
3、Modelsim对vivado Xilinx器件的独立仿真
这里由于我vivado的器件库并没有添加到Modelsim中,这里我将其添加到modelsim中,因为只要我添加进去,ISE就不能自动调用Modelsim了。这里,我先更改一下ini文件,将vivado的Xilinx库添加进去,后续我再删除。
这里,我就暂时不给出例子了,其实都是一样的步骤。
总结一下,就是加入器件库,然后编译仿真。