EDA Tools:
1、Vivado 2015.1(64-bit)
2、Modelsim SE-64 10.1c
Time:
2016.05.26
-----------------------------------------------------------------------------------
喜歡使用Modelsim工具獨立進行代碼的仿真。也不是Vivado自帶的不好(至少目前的小代碼沒啥影響)
只是在一個vivado工程進行仿真時,添加文件的功能沒用太明白,好煩!
--
大前提:和Altera一樣,也是需要先將底層的模塊編譯為庫。這個步驟其實是一勞永逸。編譯一次,以后
仿真用到時,只需添加使用到的編譯庫的目錄即可,節省時間成本。
當然,如若樂意,你也可自行添加底層模塊的源碼到Modelsim當前工程。
--
Vivado更為便捷的是直接提供GUI按鈕來一鍵編譯Modelsim仿真所需的庫(當然,並非所有都編譯)。
-----------------------------------------------------------------------------------
tb代碼:
1 `timescale 1ns/1ns 2 3 module tb; 4 5 reg clk_in1 = 0; 6 reg reset = 1; 7 8 always #5 clk_in1 = !clk_in1; 9 10 initial begin 11 #10; 12 repeat(50) @(posedge clk_in1); 13 reset <= 0; 14 end 15 16 17 //全局復位 18 glbl glbl(); 19 20 pll_OSC_27M_system pll_OSC_27M_system_inst 21 ( 22 // Clock in ports 23 .clk_in1(clk_in1), // input clk_in1 24 // Clock out ports 25 .clk_out1(clk_out1), // output clk_out1 26 .clk_out2(clk_out2), // output clk_out2 27 .clk_out3(clk_out3), // output clk_out3 28 .clk_out4(clk_out4), // output clk_out4 29 // Status and control signals 30 .reset(reset), // input reset 31 .locked(locked)// output locked 32 ); 33 34 35 initial begin 36 #10; 37 repeat(200) @(posedge clk_in1); 38 $stop; 39 end 40 41 42 endmodule
試驗過程:
1、最開始tb里面是沒有第18行的。
然后,源碼添加tb.v、pll_name.v和pll_name_clk_wiz.v這三個模塊。
這時,會提示pll_name_clk_wiz模塊里面例化到的一些底層模塊找不到。
具體是:
Instantiation of 'PLLE2_ADV' failed.
Instantiation of 'BUFG' failed.
2、根據經驗,這就是需要添加搜索庫的路徑。
具體GUI操作就是:Simulate -->Start Simulation
默認是Design標簽處於激活,先切換到Libraries標簽,
在Search Libraries(-L)添加需要使用到的庫(這里僅需要simprims_ver)的路徑。
比如我的情況是:
接着,再切換到Design標簽,展開work,選擇tb(最頂層模塊),然后選擇ok。
3、但發現還是有問題!截圖如下:
網絡搜索下,了解這是xilinx全局復位的模塊。
該模塊在C:\Xilinx\Vivado\2015.1\data\verilog\src
路徑其實在上面Error提示的一部分。
4、於是,自己copy一份glbl.v到當前工程,進行編譯。
但還是彈出相同的錯誤提示。
只好打開PLLE2_ADV.v模塊的代碼,搜索glbl關鍵字。
發現代碼有2處用到glbl,具體分別是:
第152行:
tri0 GSR = glbl.GSR;
第1645行:
assign (weak1, strong0) glbl.PLL_LOCKG = (glock == 0) ? 0 : p_up;
----
注意到上面都是層次調用。
換言之,我們需要tb例化glbl,且例化名只能取glbl。
這便有了前面pose的tb代碼的第18行!
-----------------------------------------------------------------------------------
仿真波形:
這是全局視圖。可見locked信號還是一樣,高電平表示時鍾鎖住,呈穩定狀態。
這是局部視圖1。此時剛開始產生輸出時鍾波形,但locked尚未有效!
注意到PLL設置的同相對應的是各個輸出時鍾的上升沿。
這是局部視圖2。此時locked正要拉高。
----------------------------------
OVER!