先說一種設計思路:通過兩個分頻時鐘的與操作實現。兩個分頻時鐘的占空比均為(n+1)/(2*n+1),對於5.5分頻電路來講,其占空比為6/11,不過這兩個分頻時鐘乙個是基於時鐘上公升沿觸發乙個是基於時鐘下降沿觸發,並且時鐘的初始化值相反,這樣將這兩個時鐘相與就可以得到5.5分頻的電路了.
module half_div #(parameter n = 5)(
input clk_in,
input rst,
output clk_out);
reg [3:0] cnt1;
reg [3:0] cnt2;
reg div1;
reg div2;
always@(posedge clk_in or negedge rst)
begin
if(!rst)
begin
cnt1<=3'b0;
div1 <= 0;
endelse
begin
cnt1 <= cnt1 + 1'b1;
if(cnt1 == 2*n)
begin
cnt1 <= 0;
endelse if(cnt1 == n+1|| cnt1 == 0)
begin
div1 = ~div1;
endend
end
always@(negedge clk_in or negedge rst)//下降沿觸發
begin
if(!rst)
begin
cnt2 <= 3'b0;
div2 <= 1'b1;
endelse
begin
cnt2 <= cnt2 + 1;
if(cnt2 == 2*n)
begin
cnt2 <= 0;
endelse if(cnt2 == n+1||cnt2 == 1)
begin
div2 = ~div2;
endend
end
assign clk_out = div1 & div2;//兩個時鐘相與
第二中設計思路是基於通用的半整數分頻器進行實現,其設計思路是利用模n器從0計數到n,當計數到n的時候輸出為1,但是為了實現n+0.5個週期,則輸出的1持續的時間為半個週期,這樣的話就需要將輸入時鐘的下降沿變成上公升沿,這樣就可以實現輸出半個週期長度的1。將輸入時鐘的上公升沿變成下降沿通過二分頻的輸出和輸入時鐘異或實現的。
verilog 寫 N 0 5倍分頻
1.原理如上圖所示,將輸出clk out的二分頻反饋給輸入,與輸入clk in異或,得到clk half 模n計數器作用時以clk half為時鐘計數,當計數器cnt n時,clk out輸出1,否則輸出0 如下 module div half parameter n 4 clk,rst,clk o...
3分頻器 verilog解析
分頻分為偶分頻和奇分頻。分頻器從某種程度上來講是計數器有計畫的輸出。1.偶數倍分頻 偶數倍分頻應該是大家都比較熟悉的分頻,通過計數器計數是完全可以實現的。如進行n倍偶數分頻,那麼可以通過由待分頻的時鐘觸發計數器計數,當計數器從0計數到n 2 1時,輸出時鐘進行翻轉,並給計數器乙個復位訊號,使得下乙個...
verilog奇數分頻器的問題講解(7分頻為例)
先不多嗶嗶,直接上 veriloghdl 的後面講原理 module fenpin3 clk,clk7,rst input clk,rst 設定rst的目的是當rst 1的時候給cnt0和cnt1賦初值 output clk7 reg 2 0 cnt0,cnt1 定義兩個加法器分別生成兩個7分頻的訊...