第二種方法:對進行奇數倍n分頻時鐘,首先進行n/2分頻(帶小數,即等於(n-1)/2+0.5),然後再進行二分頻得到。得到占空比為50%的奇數倍分頻。下麵講講進行小數分頻的設計方法。 小數分頻:首先講講如何進行n+0.5分頻,這種分頻需要對輸入時鐘進行操作。基本的設計思想:對於進行n+0.5分頻,首 ...
第二種方法:對進行奇數倍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分頻輸出相異或的結果。
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