CMT簡(jiǎn)介
FPGA中時(shí)鐘管理模塊(CMT)包括PLL和MMCM,用于將時(shí)鐘倍頻(比如輸入時(shí)鐘25M,我們要產(chǎn)生50M時(shí)鐘)、分頻(在不影響系統(tǒng)功能的前提下,較低的工作時(shí)鐘,能夠降低系統(tǒng)功耗)、改變相位偏移或占空比等。
當(dāng)需要上板時(shí),由于板上晶振時(shí)鐘固定,所以其他頻率的時(shí)鐘產(chǎn)生就要用到PLL或者M(jìn)MCM。兩者類似,MMCM可以完成PLL的所有功能外加一些高級(jí)功能。
其中具體的一些時(shí)鐘域,BUFG等時(shí)鐘資源介紹,以及FPGA中的PLL和MMCM介紹可參考時(shí)鐘IP核(MMCM PLL)、RAM 和 FIFO 實(shí)驗(yàn)-嗶哩嗶哩(待學(xué))
這里只介紹PLL鎖相環(huán)。
一、PLL IP的使用
1、ip調(diào)用
如果只是調(diào)用ip的話,知道怎樣使用即可
vivado中的調(diào)用及上板測(cè)試可以參考:
FPGA實(shí)戰(zhàn)(五)時(shí)鐘IP核(MMCM PLL)
基本就是調(diào)用ip,然后設(shè)置一個(gè)輸入時(shí)鐘一個(gè)輸出時(shí)鐘;注意其中有一個(gè)locked信號(hào),當(dāng)locked信號(hào)拉高的時(shí)候代表鎖相環(huán)輸出信號(hào)已經(jīng)穩(wěn)定。
locked信號(hào)常被用于復(fù)位信號(hào)。
2、生成的頻率限制
另外,時(shí)鐘管理IP核并不能產(chǎn)生任意頻率的時(shí)鐘信號(hào)。 產(chǎn)生的時(shí)鐘信號(hào)與輸入之間僅能是M/N的關(guān)系,其中M、N必須是整數(shù)(在原理部分會(huì)介紹)。
二、PLL實(shí)現(xiàn)原理
PLL組成:
鎖相環(huán)是一種以消除頻率誤差為目的的反饋控制電路。原理是利用相位誤差消除頻率誤差,所以當(dāng)電路平衡時(shí),會(huì)有剩余相位誤差,但頻率誤差為0。
具體推導(dǎo):
也可以參考一文弄懂鎖相環(huán)(PLL)的工作原理及應(yīng)用
終止最終達(dá)到的效果就是輸入輸出有相位差(VCO需要一定的電壓驅(qū)動(dòng)它到正確的頻率,所以一定有相差)但是頻率相等,就如下圖所示。
那對(duì)于分頻是怎樣實(shí)現(xiàn)的呢?
如下圖,插入分頻模塊即可,這樣就可以實(shí)現(xiàn)輸出/輸出=N/M, N M為整數(shù)。
圖片來(lái)自鎖相環(huán)的工作原理
三、使用過(guò)程中的問(wèn)題
我只使用鎖相環(huán)對(duì)板子就行了簡(jiǎn)單的分頻,基于PYNQ-Z2板子,從125M到50M,寫(xiě)了一個(gè)燈亮滅的程序,等locked信號(hào)穩(wěn)定后才計(jì)數(shù)。
程序如下:
module led(
(* MARK_DEBUG="true" *)input sys_clk,
input clk_restn,
output reg[3:0] led
);
reg[31:0] timer_cnt;
(* MARK_DEBUG="true" *)wire clk;
(* MARK_DEBUG="true" *)wire locked_out;
/*
initial begin
led<=0;
timer_cnt<=0;
end
*/
clk_wiz_0 clk_wiz
(
// Clock out ports
.clk_out1(clk), // output clk_out1
// Status and control signals
.reset(clk_restn), // input resetn
// Clock in ports
.clk_in1(sys_clk), // input clk_in1
.locked(locked_out)); // output locked
always@(posedge clk) begin
if((locked_out==1) && (timer_cnt>=32'd49999999))begin
//if(timer_cnt>=32'd4999)begin
led<=~led;
timer_cnt<=0;
end
else if(locked_out==1)begin
led<=led;
timer_cnt<=timer_cnt+1;
end
else begin
led<=led;
timer_cnt<=0;
end
end
endmodule
我設(shè)置的是1s亮1s滅,但是實(shí)際上板出現(xiàn)的問(wèn)題是1s亮2s滅或者2s滅1s亮,肉眼可見(jiàn)的有問(wèn)題。
上板抓信號(hào)發(fā)現(xiàn)locked信號(hào)拉高之后還會(huì)拉低,不是一直拉高,這就導(dǎo)致拉低時(shí)計(jì)數(shù)清零,拉高又重新計(jì)數(shù),時(shí)長(zhǎng)就變長(zhǎng)了。
最后發(fā)現(xiàn)問(wèn)題是板子有問(wèn)題,換了板子就正確了。應(yīng)該是原來(lái)板子晶振有問(wèn)題,會(huì)周期性不穩(wěn)定,導(dǎo)致PLL的locked信號(hào)周期性拉低拉高。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-794226.html
程序注意事項(xiàng)
上述程序也有一些問(wèn)題,這里記錄一下:
1、initial塊不要寫(xiě)在要綜合的代碼中,因?yàn)樗豢删C合,用復(fù)位來(lái)設(shè)置初值
2、clk是分頻出來(lái)的,最好后面模塊也給復(fù)位,不然如果PLL出錯(cuò)后面clk控制的就都沒(méi)辦法控制了
3、locked_out==1這樣寫(xiě)是沒(méi)問(wèn)題的,如果板子時(shí)鐘沒(méi)問(wèn)題就是拉高之后不會(huì)拉低了。也確實(shí)要等始終穩(wěn)定locked_out=1再進(jìn)行操作。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794226.html
到了這里,關(guān)于vivado中的FPGA時(shí)鐘管理單元PLL學(xué)習(xí)記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!