大俠好,歡迎來到FPGA技術江湖。本系列將帶來FPGA的系統性學習,從最基本的數字電路基礎開始,最詳細操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業學生、初入職場小白及打算進階提升的職業開發者都可以有系統性學習的機會。
系統性的掌握技術開發以及相關要求,對個人就業以及職業發展都有著潛在的幫助,希望對大家有所幫助。本次帶來Vivado系列,鎖相環使用教程。話不多說,上貨。
鎖相環使用教程
鎖相環是我們比較常用的IP核之一。PLL的英文全稱是Phase locked loop即鎖相環,是一種反饋電路。具有分頻、倍頻、相位偏移和占空比可調的功能。在XILINX 7系列芯片中時鐘資源包含了時鐘管理單元CMT,每一個CMT都是由一個MMCM和一個PLL組成。對于使用者來說,當我們實現簡單的分頻時,設計者可以通過寫代碼的方式來進行分頻,但是對于復雜的設計,比如倍頻、相位偏移等設計時,寫代碼的方式就顯得力不從心。此時就體現了學習鎖相環的必要性。接下來我們一起了解一下鎖相環的使用。
PLL鎖相環由以下幾部分組成:前置分頻計數器、相位頻率檢測器電路、電荷泵、環路濾波器、壓控振蕩器、反饋乘法器計數器和后置分頻計數器。在工作室,相位頻率檢測器檢測其參考頻率和反饋信號之間的相位差和頻率差,控制電荷泵和環路濾波器將相位差轉換為控制電壓,壓控振蕩器根據不同的控制電壓產生不同的振蕩頻率從而影響反饋信號的相位和頻率。在參考頻率和反饋信號具有相同的頻率和相位后,就認為PLL處于鎖相的狀態。
本次實驗我們將輸出四個不同的頻率波形,其中有兩個相位相差180°。其中四個頻率分別為100MHZ,30MHZ,10MHZ,10MHZ_180。
接下來我們首先先新建一個工程:
首先選擇新建工程,在此之前,新建工程的介紹已經給大家詳細介紹過了,在此就不在重復介紹,新建好之后,如下圖:
大家可以在工程總覽中看到工程的信息。
我們在左側菜單欄里面選中IP Catalog
打開之后搜索clock,如下圖:
雙擊打開此選項,彈出如圖界面:
我們需要在此界面做一些配置,IP核的名字我們可以修改,但是要符合起名字的規則,當然也可以不做修改。在時鐘特征里面,我們保持默認選項即可。輸入時鐘我們需要修改,我們開發板的晶振是50MHz,所以此處頻率我們改為50MHz。
輸入時鐘設置好之后,我們設置第二個配置界面。按照我們提前規定好的輸出頻率去設置。
需要添加額外的時鐘的時候,在對應的選項前面勾選上,設置好對應的輸出。clk_out4是10MHz偏移180度的波形,所以在相位偏移選項里面設置成180度。
其他界面沒有需要設置的內容,我們直接點擊OK即可。然后會彈出提示框。這個提示框是確認是否給IP核新建路徑,在此我們點擊OK。
此處我們也保持默認然后點擊Generate。
生成好之后,在源文件界面會看到我們生成的IP核。
接下來我們寫個頂層文件,調用一下我們的IP核,然后做個仿真看一下我們的輸出波形。
頂層代碼如下:
1 module pll( 2 3 input wire clk, 4 input wire rst_n, 5 output wire clk_100m, 6 output wire clk_30m, 7 output wire clk_10m, 8 output wire clk_10m_180, 9 output wire locked 10 ); 11 12 clk_wiz_0 clk_wiz_0_inst 13 ( 14 // Clock out ports 15 .clk_out1(clk_100m), // output clk_out1 16 .clk_out2(clk_30m), // output clk_out2 17 .clk_out3(clk_10m), // output clk_out3 18 .clk_out4(clk_10m_180), // output clk_out4 19 // Status and control signals 20 .reset(~rst_n), // input reset 21 .locked(locked), // output locked 22 // Clock in ports 23 .clk_in1(clk)); // input clk_in1 24 25endmodule
在頂層文件當中,我們需要例化我們的IP核,那么我們需要先打開IP Sources,我們會看到我們新建的IP,然后點開之后會看到第一個選項Instantiation template,打開之后又會看到一個.veo文件,雙擊打開就可以看到我們ip核的例化頭文件。如圖所示:
我們將頭文件直接復制粘貼到我們的頂層文件當中,然后修改括號里面的端口名。修改好之后就是我們頂層文件的樣子。
接下來是我們的仿真文件,代碼如下:
1 `timescale 1ns / 1ps 2 3 module pll_tb; 4 5 reg clk; 6 reg rst_n; 7 wire clk_100m; 8 wire clk_30m; 9 wire clk_10m; 10 wire clk_10m_180; 11 wire locked; 12 13 initial begin 14 rst_n = 0; 15 clk = 0; 16 #105; 17 rst_n = 1; 18 #10000; 19 $stop; 20 end 21 22 always #10 clk = ~clk; 23 24 pll pll_inst( 25 26 .clk (clk ), 27 .rst_n (rst_n ), 28 .clk_100m (clk_100m ), 29 .clk_30m (clk_30m ), 30 .clk_10m (clk_10m ), 31 .clk_10m_180 (clk_10m_180), 32 .locked (locked ) 33 ); 34 35 endmodule
代碼編譯沒有問題之后,我們打開仿真波形觀察現象:
觀察波形可以看出,在復位結束之后的一段時間內,輸出是沒有波形的,在這段時間,IP核的輸出還不穩定,所以看不到波形,在黃色光標處,locked信號拉高,此時表明輸出穩定,我們觀察后續波形的周期,跟我們定義的頻率正好對應。
審核編輯 :李倩
-
FPGA
+關注
關注
1626文章
21677瀏覽量
601990 -
鎖相環
+關注
關注
35文章
583瀏覽量
87699 -
振蕩器
+關注
關注
28文章
3813瀏覽量
138911
原文標題:FPGA零基礎學習之Vivado-鎖相環使用教程
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論