大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場(chǎng)小白及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。
系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。本次帶來Vivado系列,鎖相環(huán)使用教程。話不多說,上貨。
鎖相環(huán)使用教程
鎖相環(huán)是我們比較常用的IP核之一。PLL的英文全稱是Phase locked loop即鎖相環(huán),是一種反饋電路。具有分頻、倍頻、相位偏移和占空比可調(diào)的功能。在XILINX 7系列芯片中時(shí)鐘資源包含了時(shí)鐘管理單元CMT,每一個(gè)CMT都是由一個(gè)MMCM和一個(gè)PLL組成。對(duì)于使用者來說,當(dāng)我們實(shí)現(xiàn)簡(jiǎn)單的分頻時(shí),設(shè)計(jì)者可以通過寫代碼的方式來進(jìn)行分頻,但是對(duì)于復(fù)雜的設(shè)計(jì),比如倍頻、相位偏移等設(shè)計(jì)時(shí),寫代碼的方式就顯得力不從心。此時(shí)就體現(xiàn)了學(xué)習(xí)鎖相環(huán)的必要性。接下來我們一起了解一下鎖相環(huán)的使用。
PLL鎖相環(huán)由以下幾部分組成:前置分頻計(jì)數(shù)器、相位頻率檢測(cè)器電路、電荷泵、環(huán)路濾波器、壓控振蕩器、反饋乘法器計(jì)數(shù)器和后置分頻計(jì)數(shù)器。在工作室,相位頻率檢測(cè)器檢測(cè)其參考頻率和反饋信號(hào)之間的相位差和頻率差,控制電荷泵和環(huán)路濾波器將相位差轉(zhuǎn)換為控制電壓,壓控振蕩器根據(jù)不同的控制電壓產(chǎn)生不同的振蕩頻率從而影響反饋信號(hào)的相位和頻率。在參考頻率和反饋信號(hào)具有相同的頻率和相位后,就認(rèn)為PLL處于鎖相的狀態(tài)。
本次實(shí)驗(yàn)我們將輸出四個(gè)不同的頻率波形,其中有兩個(gè)相位相差180°。其中四個(gè)頻率分別為100MHZ,30MHZ,10MHZ,10MHZ_180。
接下來我們首先先新建一個(gè)工程:
首先選擇新建工程,在此之前,新建工程的介紹已經(jīng)給大家詳細(xì)介紹過了,在此就不在重復(fù)介紹,新建好之后,如下圖:
大家可以在工程總覽中看到工程的信息。
我們?cè)谧髠?cè)菜單欄里面選中IP Catalog
打開之后搜索clock,如下圖:
雙擊打開此選項(xiàng),彈出如圖界面:
我們需要在此界面做一些配置,IP核的名字我們可以修改,但是要符合起名字的規(guī)則,當(dāng)然也可以不做修改。在時(shí)鐘特征里面,我們保持默認(rèn)選項(xiàng)即可。輸入時(shí)鐘我們需要修改,我們開發(fā)板的晶振是50MHz,所以此處頻率我們改為50MHz。
輸入時(shí)鐘設(shè)置好之后,我們?cè)O(shè)置第二個(gè)配置界面。按照我們提前規(guī)定好的輸出頻率去設(shè)置。
需要添加額外的時(shí)鐘的時(shí)候,在對(duì)應(yīng)的選項(xiàng)前面勾選上,設(shè)置好對(duì)應(yīng)的輸出。clk_out4是10MHz偏移180度的波形,所以在相位偏移選項(xiàng)里面設(shè)置成180度。
其他界面沒有需要設(shè)置的內(nèi)容,我們直接點(diǎn)擊OK即可。然后會(huì)彈出提示框。這個(gè)提示框是確認(rèn)是否給IP核新建路徑,在此我們點(diǎn)擊OK。
此處我們也保持默認(rèn)然后點(diǎn)擊Generate。
生成好之后,在源文件界面會(huì)看到我們生成的IP核。
接下來我們寫個(gè)頂層文件,調(diào)用一下我們的IP核,然后做個(gè)仿真看一下我們的輸出波形。
頂層代碼如下:
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
在頂層文件當(dāng)中,我們需要例化我們的IP核,那么我們需要先打開IP Sources,我們會(huì)看到我們新建的IP,然后點(diǎn)開之后會(huì)看到第一個(gè)選項(xiàng)Instantiation template,打開之后又會(huì)看到一個(gè).veo文件,雙擊打開就可以看到我們ip核的例化頭文件。如圖所示:
我們將頭文件直接復(fù)制粘貼到我們的頂層文件當(dāng)中,然后修改括號(hào)里面的端口名。修改好之后就是我們頂層文件的樣子。
接下來是我們的仿真文件,代碼如下:
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
代碼編譯沒有問題之后,我們打開仿真波形觀察現(xiàn)象:
觀察波形可以看出,在復(fù)位結(jié)束之后的一段時(shí)間內(nèi),輸出是沒有波形的,在這段時(shí)間,IP核的輸出還不穩(wěn)定,所以看不到波形,在黃色光標(biāo)處,locked信號(hào)拉高,此時(shí)表明輸出穩(wěn)定,我們觀察后續(xù)波形的周期,跟我們定義的頻率正好對(duì)應(yīng)。
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1624文章
21568瀏覽量
600580 -
鎖相環(huán)
+關(guān)注
關(guān)注
35文章
577瀏覽量
87629 -
振蕩器
+關(guān)注
關(guān)注
28文章
3789瀏覽量
138737
原文標(biāo)題:FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-鎖相環(huán)使用教程
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論