[Xilinx]Modelsim獨立仿真Vivado生成的PLL核


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!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM