原創聲明:
本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權并注明出處(http://www.alinx.com)。
適用于板卡型號:
PGL22G/PGL12G
1. 文檔簡介
很多初學者看到板上只有一個50Mhz時鐘輸入的時候都產生疑惑,時鐘怎么才50Mhz?如果要工作在100Mhz、150Mhz怎么辦?在很多FPGA芯片內部都集成了PLL,其他廠商可能不叫PLL,但是也有類似的功能模塊,通過PLL可以倍頻分頻,產生其他很多時鐘。本實驗通過調用PLL ip core來學習PLL的使用方法。
2. 實驗環境
-
Windows 10 64位
-
開發板
3. 實驗原理
PLL(phase-locked loop),即鎖相環。是FPGA中的重要資源。由于一個復雜的FPGA系統往往需要多個不同頻率,相位的時鐘信號。所以,一個FPGA芯片中PLL的數量是衡量FPGA芯片能力的重要指標。FPGA的設計中,時鐘系統的FPGA高速的設計極其重要,一個低抖動, 低延遲的系統時鐘會增加FPGA設計的成功率。
本實驗將通過使用PLL, 輸出一個方波到開發板上的擴展口J8的PIN3腳,來給大家演示使用PLL的方法。
-
數字鎖相環(PLL)
PLL內部的功能框圖如下圖所示:Logos PLL 主要由鑒頻鑒相器(PFD,Phase Frequency Detector)、環路濾波器(LF,Loop Filter)和壓控振蕩器(VCO,Voltage Controlled Oscillator) 等組成。通過不同的參數配置,可實現信號的調頻、調相、同步、頻率綜合等功能。 LogosPLL 的電路框圖如下圖所示:
想了解更多的時鐘配置, 建議大家看看官方提供的文檔"Logos系列產品PLL IP用戶指南 "。
4. 建立工程
本實驗中為大家演示如果調用PLL IP核來產生不同頻率的時鐘, 并把其中的一個時鐘輸出到FPGA外部IO上, 開發板J8的PIN3腳。
下面為程序設計的詳細步驟。
1. 新建一個pll_test的工程,點擊Tool菜單下的IP Compiler。
2. 再在彈出的界面里選擇PLL下的Logos PLL,再對PLL取名clk_wiz_0,然后單擊Customize。
3. 在Basic Configurations界面里, 勾選復位管腳使能"Enable Port pll_rst",輸入的時鐘頻率為50Mhz。輸出選擇clk_out0~clk_out3四個時鐘的輸出,頻率分別為200Mhz, 100Mhz, 50Mhz, 25Mhz。這里還可以設置時鐘輸出的相位,我們不做設置,保留默認相位, 點擊 OK完成,
5. 然后點擊Generate按鈕生成PLL IP的設計文件。
6. 這時一個 clk_wiz_0 IP會自動添加到我們的pll_test項目中, 用戶可以雙擊它來修改這個IP的配置。
7. 我們再來編寫一個頂層設計文件來實例化這個PLL IP, 編寫pll_test.v代碼如下。
`timescale1ns/1ps//================================================================================//RevisionHistory://DateByRevisionChangeDescription//--------------------------------------------------------------------------------//2019/04/13lhj1.0Original//*******************************************************************************///////////////////////////////////////////////////////////////////////////////////modulepll_test(inputsys_clk,inputrst_n,outputclk_out,//pllclockoutputJ8_Pin3outputlocked);/////////////////////PLLIPcall////////////////////////////clk_wiz_0clk_wiz_0_inst(//Clockinports.clkin1(sys_clk),//IN50Mhz//Clockoutports.clkout0(),//OUT200Mhz.clkout1(),//OUT100Mhz.clkout2(),//OUT50Mhz.clkout3(clk_out),//OUT25Mhz //Statusandcontrolsignals .pll_rst(~rst_n),//RESETIN.pll_lock(locked));//OUTendmodule
程序中先用實例化clk_wiz_0, 把單端50Mhz時鐘信號輸入sys_clk到clk_wiz_0的clkin1,把clk_out3的輸出賦給clk_out。
8. 保存工程后,pll_test自動成為了top文件,clk_wiz_0成為Pll_test文件的子模塊。
9. 再為工程進行管腳約束,這里不做介紹,見教程《LED流水燈實驗及仿真》中的內容。
注意:例化的目的是在上一級模塊中調用例化的模塊完成代碼功能,在Verilog里例化信號的格式如下:模塊名必須和要例化的模塊名一致,包括信號名也必須一致,模塊與模塊之間的連接信號不能相互沖突,否則會產生編譯錯誤。
5. Modelsim 仿真PLL輸出波形
創建仿真文件vtf_pll_test.v文件,鼠標右鍵點擊仿真文件,點擊“run Behavior Simulation”會打開Modelsim軟件進行波形仿真。仿真文件和仿真波形如圖所示:
波形圖中 sys_clk為50MHz的系統時鐘,rst_n為復位信號,clk_out為PLL輸出的25MHz,locked為波形穩定輸出鎖定。
6. 測量PLL輸出波形
編譯工程并生成pll_test.sbit文件,再把sbit文件下載到FPGA中,接下去我們就可以用示波器來測量輸出時鐘波形了。
用示波器探頭的地線連接到開發板上的地(開發板J8的PIN1腳),信號端連接開發板J8的PIN3腳(測量的時候需要注意,避免示波器表頭碰到其它管腳而導致電源和地短路)。
這時我們可以在示波器里看到25Mhz的時鐘波形,波形的幅度為3.3V, 占空比為1:1,波形顯示如下圖所示:
如果您想輸出其它頻率的波形,可以修改時鐘的輸出為clk_wiz_0的clkout0或clkout1或clkout2。也可以修改clk_wiz_0的clkout3為您想要的頻率,這里也需要注意一下,因為時鐘的輸出是通過PLL對輸入時鐘信號的倍頻和分頻系數來得到的,所以并不是所有的時鐘頻率都可以用PLL能夠精確產生的,不過PLL也會自動為您計算實際輸出接近的時鐘頻率。
-
FPGA
+關注
關注
1629文章
21729瀏覽量
602993 -
pll
+關注
關注
6文章
776瀏覽量
135130 -
時鐘
+關注
關注
10文章
1733瀏覽量
131446 -
PDS
+關注
關注
2文章
31瀏覽量
15287 -
紫光同創
+關注
關注
5文章
85瀏覽量
27503
發布評論請先 登錄
相關推薦
評論