PLL的modelsim仿真
看了好久的modelsim学习资料,写了一个简单的PLL仿真实验,该实验是仿真DE2板子上50MHz时钟输入,经PLL之后输出100MHz的时钟。
同时用.do文件来代替烦躁的鼠标操作。
首先在Quartus里面例化一个PLL模块,输入为clk,50MHz,输出为clk_100。
打开pll.v文件,
// ============================================================ // File Name: pll.v // Megafunction Name(s): // altpll // // Simulation Library Files(s): // altera_mf // ============================================================
这个头文件告诉我们,pll需要用到一个库文件名为:altera_mf。
在quartus的安装目录下的eda/sim_lib文件夹下面找到这个文件。
下面就开始编写仿真文件盒.do文件:
建立个工程文件夹,取名为pll,在里面建立两个文件夹,src和modelsim,src存放源文件和仿真文件,modelsim存放.do文件。
src中共有四个文件:
pll_module:
1 //`timescale 1 ps / 1 ps
2 module pll_module(
3 clk,
4 clk_100m
5 );
6
7 input clk;
8 output clk_100m;
9
10 pll pll_u1(
11 .inclk0 (clk),
12 .c0 (clk_100m)
13 );
14
15 endmodule
pll_module_tb:
1 `timescale 1 ps / 1 ps
2 module pll_module_tb;
3
4 reg clk;
5 wire clk_100m;
6
7 pll_module u1(
8 .clk (clk),
9 .clk_100m (clk_100m)
10 );
11
12 initial
13 begin
14 clk = 0;
15 end
16
17 always #10000 clk = ~clk;
18
19
20 endmodule
然后在modelsim文件夹中假如pll.do文件。
pll.do:
1 #Creat a work lib
2 vlib work
3
4 #Map the work lib to current lib
5 vmap work work
6
7 #Compile the source files
8 vlog D:/test/pll/src/altera_mf.v
9 vlog D:/test/pll/src/pll.v
10 vlog D:/test/pll/src/pll_module.v
11 vlog D:/test/pll/src/pll_module_tb.v
12
13 #Start simulation
14 vsim -novopt work.pll_module_tb
15
16 #add wave
17 add wave -hex /*
18
19 run 500000000
该文件包括4个部分:
1-2行位创建一个工作库为work,注意#为注释。
4-5行位把刚建立的工作库映射到modelsim中work工作库中。
8-11行为编译上述的4个源文件。
14行为仿真work库中的pll_modelsim_tb文件,novopt为禁止优化的意思。
17行为添加波形,hex为16进制表示,/*表示为所有的波形。这里也可以添加自己想要看到的波形。
19行为开始仿真。
然后在modelsim的命令行输入:do pll.do 命令就开始仿真的,省去了鼠标操作的过程。
仿真结果: