本原創教程由芯驛電子科技(上海)有限公司(ALINX)創做,版權歸本公司全部,如需轉載,需受權並註明出處。node
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EGide
實驗Vivado工程爲「pll_test」。oop
不少初學者看到板上只有一個25Mhz時鐘輸入的時候都產生疑惑,時鐘怎麼是25Mhz?若是要工做在100Mhz、150Mhz怎麼辦?其實在不少FPGA芯片內部都集成了PLL,其餘廠商可能不叫PLL,可是也有相似的功能模塊,經過PLL能夠倍頻分頻,產生其餘不少時鐘。本實驗經過調用PLL IP core來學習PLL的使用、vivado的IP core使用方法。學習
PLL(phase-locked loop),即鎖相環。是FPGA中的重要資源。因爲一個複雜的FPGA系統每每須要多個不一樣頻率,相位的時鐘信號。因此,一個FPGA芯片中PLL的數量是衡量FPGA芯片能力的重要指標。FPGA的設計中,時鐘系統的FPGA高速的設計極其重要,一個低抖動, 低延遲的系統時鐘會增長FPGA設計的成功率。ui
本實驗將經過使用PLL, 輸出一個方波到開發板上的擴展口,來給你們演示在Vivado軟件裏使用PLL的方法。spa
Ultrascale+系列的FPGA使用了專用的全局(Global)和區域(Regional)IO和時鐘資源來管理設計中各類的時鐘需求。Clock Management Tiles(CMT)提供了時鐘合成(Clock frequency synthesis),傾斜矯正(deskew),過濾抖動(jitter filtering)功能。設計
每一個CMTs包含一個MMCM(mixed-mode clock manager)和一個PLL。以下圖所示,CMT的輸入能夠是BUFR,IBUFG,BUFG,GT,BUFH,本地佈線(不推薦使用),輸出須要接到BUFG或者BUFH後再使用3d
MMCM用於在與給定輸入時鐘有設定的相位和頻率關係的狀況下,生成不一樣的時鐘信號。 MMCM提供了普遍而強大的時鐘管理功能,code
MMCM內部的功能框圖以下圖所示:orm
鎖相環(PLL)主要用於頻率綜合。使用一個PLL能夠從一個輸入時鐘信號生成多個時鐘信號。與MMCM相比,不能進行時鐘的deskew,不具有高級相位調整,倍頻器和分頻器可調範圍較小等。
PLL功能框圖以下圖所示:
想了解更多的時鐘資源, 建議你們看看Xilinx提供的文檔"7 Series FPGAs Clocking Resources User Guide"。
本實驗中爲你們演示若是調用Xilinx提供的PLL IP核來產生不一樣頻率的時鐘, 並把其中的一個時鐘輸出到FPGA外部IO上, 下面爲程序設計的詳細步驟。在建立PLL IP以前,有一點須要提下,在原理圖中能夠看到PL_REF_CLK,也就是25MHz參考時鐘,在BANK44中,並且屬於HDGC
在ug572文檔中提到HDGC引腳不能直接鏈接到MMCMs/PLLs,須要通過BUFG,再鏈接到MMCMs/PLLs,這個地方是須要注意的。
新建一個pll_test的工程,點擊Project Manager界面下的IP Catalog。
2.1 再在IP Catalog界面裏選擇FPGA Features and Design\Clocking下面的Clocking Wizard,雙擊打開配置界面。
2.2 默認這個Clocking Wizard的名字爲clk_wiz_0, 這裏咱們不作修改。在第一個界面Clocking Options裏,輸入的時鐘頻率爲25Mhz,並選擇No buffer,也就是在PLL以前要接個BUFG。
2.3 在Output Clocks界面裏選擇clk_out1~clk_out4四個時鐘的輸出,頻率分別爲200Mhz, 100Mhz, 50Mhz, 25Mhz。這裏還能夠設置時鐘輸出的相位,咱們不作設置,保留默認相位,點擊 OK完成,
2.4 在彈出的對話框中點擊Generate按鈕生成PLL IP的設計文件。
2.5 這時一個 clk_wiz_0.xci的IP會自動添加到咱們的pll_test項目中, 用戶能夠雙擊它來修改這個IP的配置。
選擇IP Sources這頁,而後雙擊打開clk_wiz_0.veo文件,這個文件裏提供了這個IP的實例化模板。咱們只須要把框框的中內容拷貝到咱們verilog程序中,對IP進行實例化。
2.6 咱們再來編寫一個頂層設計文件來實例化這個PLL IP, 編寫pll_test.v代碼以下。注意PLL的復位是高電平有效,也就是高電平時一直在復位狀態,PLL不會工做,這一點不少新手會忽略掉。這裏咱們將rst_n綁定到一個按鍵上,而按鍵是低電平復位,所以須要反向鏈接到PLL的復位。在程序中插入一個BUFG原語,鏈接到PLL。
`timescale1ns/1ps module pll_test( input sys_clk,//system clock 25Mhz on board input rst_n,//reset ,low active output clk_out //pll clock output ); wire locked; wire sys_clkbuf ; BUFG BUFG_inst ( .O(sys_clkbuf),// 1-bit output: Clock output. .I(sys_clk)// 1-bit input: Clock input. ); /////////////////////PLL IP call//////////////////////////// clk_wiz_0 clk_wiz_0_inst (// Clock in ports .clk_in1(sys_clkbuf),// IN 25Mhz // Clock out ports .clk_out1(),// OUT 200Mhz .clk_out2(),// OUT 100Mhz .clk_out3(),// OUT 50Mhz .clk_out4(clk_out),// OUT 25Mhz // Status and control signals .reset(~rst_n),// pll reset, high-active .locked(locked));// OUT endmodule
程序中先用實例化clk_wiz_0, 把25Mhz時鐘信號輸入到clk_wiz_0的clk_in1_p和clk_in1_n,把clk_out4的輸出賦給clk_out。
注意:例化的目的是在上一級模塊中調用例化的模塊完成代碼功能,在Verilog裏例化信號的格式以下:模塊名必須和要例化的模塊名一致,好比程序中的clk_wiz_0,包括模塊信號名也必須一致,好比clk_in1,clk_out1,clk_out2.....。鏈接信號爲TOP程序跟模塊之間傳遞的信號,模塊與模塊之間的鏈接信號不能相互衝突,不然會產生編譯錯誤。
2.7 保存工程後,pll_test自動成爲了top文件,clk_wiz_0成爲Pll_test文件的子模塊。
2.8 再爲工程添加xdc管腳約束文件pll.xdc,添加方法參考」PL的」Hello World」LED實驗」,也能夠直接複製如下內容。並編譯生成bitstream。
############## clock and reset define##################set_property PACKAGE_PIN AB11 [get_ports sys_clk] set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]create_clock -period 40.000 -name sys_clk -waveform {0.000 20.000} [get_ports sys_clk]set_property IOSTANDARD LVCMOS33 [get_ports {rst_n}]set_property PACKAGE_PIN AA13 [get_ports {rst_n}]############## pll output define J11 PIN3##################set_property IOSTANDARD LVCMOS33 [get_ports clk_out]set_property PACKAGE_PIN A11 [get_ports clk_out] |
編譯工程並生成pll_test.bit文件,再把bit文件下載到FPGA中,接下去咱們就能夠用示波器來測量輸出時鐘波形了。
用示波器探頭的地線鏈接到開發板上的地(開發板J15的PIN1腳),信號端鏈接開發板J15的PIN3腳(測量的時候須要注意,避免示波器表頭碰到其它管腳而致使電源和地短路)。
這時咱們能夠在示波器裏看到25Mhz的時鐘波形,波形的幅度爲3.3V, 佔空比爲1:1,波形顯示以下圖所示:
若是您想輸出其它頻率的波形,能夠修改時鐘的輸出爲clk_wiz_0的clk_out2或clk_out3或clk_out4。也能夠修改clk_wiz_0的clk_out4爲您想要的頻率,這裏也須要注意一下,由於時鐘的輸出是經過PLL對輸入時鐘信號的倍頻和分頻係數來獲得的,因此並非全部的時鐘頻率均可以用PLL可以精確產生的,不過PLL也會自動爲您計算實際輸出接近的時鐘頻率。
另外須要注意的是,有些用戶的示波器的帶寬和採樣率過低,會致使測量高頻時鐘信號的時候,高頻部分衰減太大,測量波形的幅度會變低。