基於verilog的分頻器設計(半整數分頻,小數分頻:下)

第二種方法:對進行奇數倍n分頻時鐘,首先進行n/2分頻(帶小數,即等於(n-1)/2+0.5),而後再進行二分頻獲得。獲得佔空比爲50%的奇數倍分頻。下面講講進行小數分頻的設計方法。spa

小數分頻:首先講講如何進行n+0.5分頻,這種分頻須要對輸入時鐘進行操做。基本的設計思想:對於進行n+0.5分頻,首先進行模n的計數,在計數到n-1時,輸出時鐘賦爲‘1’,回到計數0時,又賦爲0,所以,能夠知道,當計數值爲n-1時,輸出時鐘才爲1,所以,只要保持計數值n-1爲半個輸入時鐘週期,即實現了n+0.5分頻時鐘,所以保持n-1爲半個時鐘週期便是一個難點。從中能夠發現,由於計數器是經過時鐘上升沿計數,所以能夠在計數爲n-1時對計數觸發時鐘進行翻轉,那麼時鐘的降低沿變成了上升沿。即在計數值爲n-1期間的時鐘降低沿變成了上升沿,則計數值n-1只保持了半個時鐘週期,因爲時鐘翻轉降低沿變成上升沿,所以計數值變爲0。所以,每產生一個n+0.5分頻時鐘的週期,觸發時鐘都是要翻轉一次.設計

半整數分頻器:計數器是經過上升沿觸發,故在計數爲N-1時對計數觸發進行翻轉,時鐘的降低沿變爲上升沿,所以計數值爲0,因此每產生n+0.5分頻時鐘的週期,觸發時鐘都要翻轉一次。如圖所示,採用異或門和2分頻模塊設計脈衝扣除電路,脈衝扣除是輸入頻率和2分頻輸出相異或的結果。code

image

image

複製代碼
module fenpin(clk,rst_n,clk_out);
input clk;
input rst_n;
output clk_out;
reg clk_out2;
wire clk_out1;
reg [1:0] cnt;
reg FB_CLK;
always@(posedge clk_out2,negedge rst_n)
begin if (!rst_n)
FB_CLK<=0;
else
FB_CLK<=~FB_CLK;
end
always@(posedge clk_out1,negedge rst_n)
begin if (!rst_n)
begin
cnt<=0;
clk_out2<=0;
end
else if (cnt==2)
begin
cnt<=0;
clk_out2<=1;
end
else
begin
cnt<=cnt+1'b1;
clk_out2<=0;
end
end
xor xor1(clk_out1,clk,FB_CLK);
wire CLK_OUT_R;
assign CLK_OUT_R=(cnt==1) ? 1'b0:1'b1;
assign clk_out=clk_out2 | CLK_OUT_R;
endmodule
相關文章
相關標籤/搜索