“ModelsimSE 10.5 仿真教程”介绍了如何使用 Modelsim SE 进行仿真,其中待仿真的 fifo 模块是自己编写的 verilog 模块,但是在实际工作中,设计中会经常用到 FPGA 厂商提供的现成模块—IP 核,这些模块看到不到源代码,只知道 IP 核的端口信息,当要仿真的时候,同样要向 ModelsimSE 提供这些 IP 核的信息,而 FPGA 厂商也会给我们提供相应的 IP 核的编译库文件,如果设计中包含这些 IP 核,就必须在仿真之前,将这些库文件编译到 MoldelsimSE 的库中去。其实 IP 核只是要添加的其中一种库(MegaFunction),除此之外,还需要添加 lpm 库(设计中如果调用了 lpm 原件,需要添加此库),原语库(primitive),器件库(例如,cyclone),同一种库,还会分 Verilog 版和 VHDL 版。这里只介绍 Verilog 版相关库文件的添加,VHDL 版的,方法类似,只需更换相应的 VHDL 编译文件即可。
一、建立 IP 仿真库
先将 IP 核等相关库文件编译到 ModelsimSE 中后,以后凡是设计中调用到 IP 核时,就不用再重复添加了。
下面开始准备添加相关库文件。
第一步,首先在新建一个文件夹,用来存放编译后的库文件,这里命名为 altera_lib,这里存放到了“C:\modeltech64_10.5\”路径下,然后在 altera_lib 下新建四个文件夹 lpm、altera_mf、altera_primitive、cyclone,后面会建立四个对应且相同名称的库。
第二步,建立库,以添加 IP 核库文件(altera_mf)为例进行介绍。首先打开 Modelsim,选择菜单 File—>New—>Library。这里介绍一下“库”的概念,库实际就用来存放编译结果的一个文件夹,他最终都和硬盘上的物理空间的文件夹是一一对应的,例如,之前提到过工作库(work 库),存放的是设计文件的编译结果。
第三步,弹出新建库的窗口,选择第三项“a new library and a logical mapping to it”,即创建一个新库,并映射到硬盘的相应路径下。Library Name 填写相应的库名称“altera_mf”,Library Physical Name 中填写第一步中新建库对应文件夹的存放路径。这里 altera_mf 对应文件夹路径为“C:\modeltech64_10.5\altera_lib\altera_mf”。然后点击确定。
第四步,在 ModelsimSE 的 library 窗口下,可以看到新建的 altera_mf 库,不过此时库文件为空的。
第五步,编译相应文件到库中,这里需要将相关 IP 核文件编译到 altera_mf 库中去。菜单栏选择 compile—>compile…(如果 ModelsimSE 新建或打开了工程,此项为灰色),弹出如下窗口,首先选择待编译的库 library,这里选择刚新建的库“altera_mf”,然后找到在 quartus 安装目录下,找到 Altera 提供的关于 altera IP 核的编译文件 altera_mf.v,路径为“altera\13.1\quartus\eda\sim_lib”。最后点击 compile,完成编译后,关闭。此时可以看到 library 窗口下,altera_mf 库不再是一个空的库。
第六步,重复 2-5 步,依次建立 lpm、altera_primitive、cyclone 三个库。对应的编译文件依次是 220model.v(lpm)、altera_primitives.v(altera_primitive)、cycloneiv_atoms.v(cyclone 库,这只添加了 cyclone4 的库文件)。添加完成后可以在 library 中看到四个库,如下图。
第七步,找到 Modelsim 安装路径下的 modelsim.ini 文件,去除文件的只读属性,然后打开, 将上一步中的四个库的名称及路径以下图的方式,添加到 57 行后。关闭文件,再设置为只读属性。注意路径是反斜杠(不是反斜杠也可以)。
至此,已经将 altera 相关的库文件添加到了 ModelsimSE 中了。
二、建立 PLL IP 核
PLL IP 核的调用就不详细展开了,主要提一点,下图指明了仿真 PLL IP 核所需要的库,这个库已经在上面生成了。另外,如果进行后仿真的话,需要将 Generate netlist 打勾。
三、建立激励文件
这里直接调用了 pll.v 文件。
`timescale 1 ns/ 100 ps module pll_tb(); // constants reg clk_25m; wire clk_150m; // assign statements (if any) pll i1 ( // port map - connection between master ports and signals/registers .inclk0(clk_25m), .c0(clk_150m)); // initial begin #0 clk_25m = 1'b0; end // 25MHz always #20 clk_25m = ~clk_25m; endmodule
四、仿真波形
仿真波形的大致步骤跟前一篇文章一样,建立库——>编译——>仿真。仿真这里需要说一下,因为采用了 IP 库,所以需要添加对应的库文件。具体步骤如下:
菜单 simulate——>start simulation 打开仿真设置:
添加 PLL 所对应的 altera_mf 库文件,也就是在第一节中添加的库文件。
一定要添加所用 IP 对应的库文件,否则,在仿真的时候会 Instantiation of ‘xxx’ failed. The design unit was not found.的错误。
仿真波形如下图所示,可以看出能够得出正确的波形。
扫码关注尚为网微信公众号
原创文章,作者:sunev,如若转载,请注明出处:https://www.sunev.cn/embedded/678.html