先不多嗶嗶,直接上**(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...