modelsim脚本仿真(二)带quartus的IP核工程仿真

仿真以调用quartus的pll为例

我把工程打包发出来了。
链接: sim_ip.

1.文件夹结构


prj为quartus工程sim为modelsim仿真脚本以及tb文件。

2.使用quartus调用pll IP核

先在prj里新建pll工程,然后调用pll对应的IP核(这里过程略过,我将自己的IP核命名为pll,存放在ip文件夹中),完成之后进入PLL的IP文件夹会生成一个pll_sim文件夹,在这里面在会有一个.vo文件,这个要拿出来与顶层一起编译。
需要用到的有rtl顶层例化和IP文件夹里的.vo文件
在这里插入图片描述
ip文件夹:
在这里插入图片描述
pll_sim文件夹:
在这里插入图片描述
我们在编译的时候需要编译这个文件夹中的pll.vo
我们使用的是modelsim,这个软件是mentor公司的,quartus在生成IP的时候会把各个仿真软件的脚本同时生成出来,也就是在mentor文件夹中的tcl脚本文件,我的工程生成的是msim_setup.tcl

2.1顶层文件例化

module my_pll(input clk_50,input rst_n,output clk_100,output locked);pll pll1( .locked		(locked),.outclk_0	(clk_100)	,.refclk		(clk_50),.rst			(rst_n));endmodule

2.仿真设计

主要文件如下:
在这里插入图片描述

如图主要有4个文件,sim.bat是Windows脚本,用于启动modelsim的,sim.do就是我们的modelsim脚本,tb_pll.v就是测试文件,msim_setup.tcl为前面所说的quartus生成的用于modelsim的脚本文件。

2.1.sim.bat文件内容:

modelsim -do sim.do

2.2. tb_pll.v文件:

`timescale 1ns/1ps
module tb_pll();reg clk_50;
reg rst_n;wire clk_100;
wire locked;my_pll pll0(.clk_50		(clk_50),.rst_n 		(rst_n),. clk_100  ( clk_100),.locked (locked)
);always begin #3 clk_50 = 1; #3 clk_50 = 0; endinitial
beginrst_n = 1;#10rst_n = 0;#10#1000$stop;
end
endmodule

2.3.设计仿真脚本sim.do

transcript on
if {[file exists dyq_work]} {vdel -lib dyq_work -all
}
#编译quartus器件库
do msim_setup.tcl 
dev_com#在sim下新建自己的库dyq_work
vlib dyq_work  
vmap work dyq_work#编译源代码,对于IP核部分,要编译前面说的vo文件,而不是v文件
vlog  ../prj/ip/pll_sim/pll.vo
vlog  ../prj/rtl/*.v
vlog  ../sim/*.v#这里设置仿真精度,-L是映射库
vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cyclonev_ver -L cyclonev_hssi_ver -L cyclonev_pcie_hip_ver -L dyq_work -L work -voptargs="+acc"  tb_pll#添加波形
add wave *view structure
view signals
run -all

3.仿真

以上完成之后双击bat文件就可以直接打开modelsim进行仿真了。如果启动不了,那就是环境变量没有配置好。
在这里插入图片描述
编译完后的sim文件夹:
在这里插入图片描述

Published by

风君子

独自遨游何稽首 揭天掀地慰生平