verilog奇數分頻器的問題講解(7分頻為例)

2021-10-04 15:08:48 字數 1674 閱讀 6774

先不多嗶嗶,直接上**(veriloghdl),**的後面講原理

module fenpin3(clk,clk7,rst);

input clk,rst; //設定rst的目的是當rst=1的時候給cnt0和cnt1賦初值

output clk7;

reg [2:0] cnt0,cnt1; //定義兩個加法器分別生成兩個7分頻的訊號

reg clk0,clk1; //由加法器兩個7分頻的訊號

wire clk7; //用於後面clk0和clk1相加得到最後的結果clk7

always@(posedge clk or posedge rst ) //clk取上公升沿,區別於下面的always@(negedge clk or posedge rst )

begin

if(rst1)

cnt0<=0;

else if(cnt03』d6) //是cnt在0-6無限迴圈方能得到7分頻訊號,簡言之想得到n分頻,就0——(n-1)迴圈

cnt0<=0;

else

cnt0<=cnt0+1;

endalways@(posedge clk)

begin

if(cnt03』d0||cnt03』d1||cnt03』d6) //這個地方比較重要,文章後面單獨講

clk0<=1;

else

clk0<=0;

endalways@(negedge clk or posedge rst ) //注意clk是取下降沿,為的就是保證下面的clk1與上面的clk0相差一週期

begin

if(rst1)

cnt1<=0;

else if(cnt13』d6)

cnt1<=0;

else

cnt1<=cnt1+1;

endalways@(negedge clk)

begin

if(cnt13』d0||cnt13』d1||cnt13』d6)

clk1<=1;

else

clk1<=0;

endassign clk7=clk0|clk1; // 兩個七分頻訊號按位或運算

endmodule

強調文字

強調文字

== if(cnt03』d0||cnt03』d1||cnt0==3』d6)

clk0<=1;

else

clk0<=0;==這一句的解讀:七分頻就是講原始clk這個時鐘訊號的七個週期合併到乙個週期內,可以理解為7=3+4;

這裡的3+4是指3週期+4週期。當cnt分別等於0、1、6的時候clk等於1,這其實就是高電平佔了三個週期,剩下四個都是低電平。

好了,說到這裡我們不禁會想到這樣乙個問題,你三個週期高電平,四個週期低電平它不是50%占空比啊,咋辦!掌握了怎麼搞出乙個七分頻訊號後,我們可以在搞出乙個七分頻訊號,這也就是**中clk0、clk1;由於這兩個訊號是相差了乙個週期的時間,我們讓他們按位或就能得到50%占空比的七分頻訊號啦!

注意我講的過程中可能有些表述不是很合理,但是奇數分頻器的原理確實是這樣的,不必懷疑方法有問題。

Verilog 奇數分頻與偶數分頻及占空比

分頻器設計 1.簡單的二分頻 module half clk reset,clk in,clk out input clk in,reset output clk out reg clk out always posedge clk in begin if reset clk out 0 else ...

占空比為50 的奇數分頻器的設計

占空比為50 的奇數分頻器設計思路 1.首先進行上公升沿觸發的n模計數,計數器從零開始,到 n 1 2 處時鐘翻轉,然後經過 n 1 2再次翻轉 得到乙個占空比非50 的輸出時鐘out1.2.同時進行下降沿觸發的n模計數,計數方法同上公升沿相同,然後得到乙個占空比非50 的輸出時鐘out2 3.把以...

verilog奇數分頻,三分頻例項

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