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


第二種方法:對進行奇數倍n分頻時鍾,首先進行n/2分頻(帶小數,即等於(n-1)/2+0.5),然后再進行二分頻得到。得到占空比為50%的奇數倍分頻。下面講講進行小數分頻的設計方法。

小數分頻:首先講講如何進行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分頻輸出相異或的結果。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM