看了好久的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 命令就開始仿真的,省去了鼠標操作的過程。
仿真結果:

