FPGA三分頻,五分頻,奇數分頻

2022-05-14 01:55:29 字數 2308 閱讀 8557

我們在做fpga設計時,有時會用到時鐘頻率奇數分頻的頻率,例如筆者fpga的晶振為50m,當我們需要10m的時鐘時,一種方式可以使用dcm或pll獲取,系統會內部分頻到10m,但其實verilog內部也完全能實現,所以我們還是來了解一下。

有這樣乙個歡樂的時鐘了,我們要得到以下的分頻效果:

奇數分頻的難點就在於,三分頻要求1.5倍的時鐘時間翻轉一次,這樣整體的週期時間是原來的3倍,即三分頻。五分頻亦類似。而恰恰verilog不允許你在兩個always模組裡對同一reg賦值。

那怎麼得到三分頻的時鐘呢?請看下圖

如果生成這樣乙個占空比2/3,週期三倍於時鐘的訊號(2行)。同時產生乙個超前或落後於它半個clock週期時間的訊號(3行),對兩訊號做與運算

,得到的結果就恰好是三分頻的時鐘(4行);而verilog中恰好不允許你在兩個always模組裡對同一reg賦值,但允許你在clock的posedge和negedge分別對兩個不相關的訊號賦值。

同樣的,五分頻

[cpp]view plain

copy

print

?assign clkout=state1[1]&state2[1];  

always@(posedge clk)  

begin  

case(state1)  

begin  

3'b010:state<=3'b011;  

3'b011:state<=3'b100;  

3'b100:state<=3'b101;  

3'b101:state<=3'b110;  

3'b110:state<=3'b111;  

3'b111:state<=3'b010;  

endcase  

end  

always@(negedge clk)  

begin  

case(state2)  

3'b010:state<=3'b011;  

3'b011:state<=3'b100;  

3'b100:state<=3'b101;  

3'b101:state<=3'b110;  

3'b110:state<=3'b111;  

3'b111:state<=3'b010;  

endcase  

end  

什麼原理呢?其實這樣想挺好理解的:

三分頻,每1.5個時鐘週期就要翻轉一次,因此我們通過時鐘上公升沿構造低電平佔1個時鐘週期,高電平佔2個時鐘週期的訊號,再通過時鐘的下降沿產生相同的訊號,這相當與把原訊號右移了半個時鐘週期,相與後高電平被削掉了半個週期,低電平添了半個週期,就產生了1.5個時鐘週期翻轉一次的效果。

五分頻類似。

由此猜測11分頻可以由上公升沿構造低電平佔5個時鐘週期,高電平佔6個時鐘週期的訊號產生,我們來驗證一下

驗證是的啦

FPGA三分頻,五分頻,奇數分頻

我們在做fpga設計時,有時會用到時鐘頻率奇數分頻的頻率,例如筆者fpga的晶振為50m,當我們需要10m的時鐘時,一種方式可以使用dcm或pll獲取,系統會內部分頻到10m,但其實verilog內部也完全能實現,所以我們還是來了解一下。有這樣乙個歡樂的時鐘了,我們要得到以下的分頻效果 奇數分頻的難...

verilog奇數分頻,三分頻例項

目的 輸入乙個時鐘訊號,輸出占空比為50 的三分頻。首先得到乙個占空比為1 3的分頻時鐘,然後將輸入訊號取反,得到乙個移相180度的占空比為1 3的分頻時鐘,將兩個時鐘相或得到目的時鐘。verilog module divider 3 input clk,clock input rst n,asyn...

FPGA三分頻電路的實現

最近剛開始學習fpga,準備使用verlog實現一些分頻電路,偶數倍分頻比較好操作,奇數倍分頻相對來說要複雜一點點,我在網上查閱了一些資料,我來用我自己的話總結下。使用乙個計數器 對基準時鐘的上公升沿和下降沿計數。計數範圍 0 n 1 在n 1對輸出訊號進行翻轉並復位計數值。以三分頻為例子,下面給出...