在這篇文章中,小編將對奇數分頻器的技術設計和代碼實現加以介紹以幫助大家增進對它的了解程度,和小編一起來閱讀以下內容吧。
一、奇數分頻器技術設計 & 代碼實現
1、設計方法
3分頻時鐘設計,只需要在上升沿時循環(huán)計數0~2,上升沿計數時鐘信號和下降沿計數時鐘信號,都是前1個周期為低電平,后2個周期為高電平;
5分頻時鐘設計,只需要在上升沿時循環(huán)計數0~4,上升沿計數時鐘信號和下降沿計數時鐘信號,都是前2個周期為低電平,后3個周期為高電平;
7分頻時鐘設計,只需要在上升沿時循環(huán)計數0~6,上升沿計數時鐘信號和下降沿計數時鐘信號,都是前3個周期為低電平,后4個周期為高電平;
下圖分別畫出了基準時鐘、3分頻時鐘、5分頻時鐘、7分頻時鐘。
由此可以推導出,奇數分頻設計的方法:設為2N+1分頻,只需設計一個計數器在上升沿時循環(huán)計數0~2N,上升沿計數時鐘信號和下降沿計數時鐘信號,都是前N個周期為低電平,后N+1個周期為高電平;
2、verilog代碼實現
任意偶數分頻設計,可通過設置參數NUM,設定分頻數,具體代碼如下所示:
module clk_divider_odd#(parameter NUM = 7)(input clk,input rst,output wire clk_o);//參數定義
localparam WIDTH = $clog2(NUM);
localparam CNT_END = NUM - 1;
localparam CNT_END0 = NUM/2 - 1;
reg [WIDTH-1:0] cnt;
reg clk_pos, clk_neg;//計數模塊
always@(posedge clk or posedge rst)
beginif(rst)cnt <= 'b0;
else if(cnt == CNT_END) //計滿則清零
cnt <= 'b0;elsecnt <= cnt + 1'b1;
end//分頻時鐘輸出模塊,時鐘上升沿
always@(posedge clk or posedge rst)
beginif(rst)clk_pos <= 1'b0;
else if(cnt == CNT_END0)clk_pos <= 1'b1;
else if(cnt == CNT_END )clk_pos <= 1'b0;
elseclk_pos <= clk_pos;
end//分頻時鐘輸出模塊,時鐘下降沿
always@(negedge clk or posedge rst)
beginif(rst)clk_neg <= 1'b0;
else if(cnt == CNT_END0)clk_neg <= 1'b1;
else if(cnt == CNT_END)clk_neg <= 1'b0;
elseclk_neg <= clk_neg;
end//輸出時鐘
assign clk_o = clk_pos && clk_neg;
endmodule仿真結果如下圖:
從圖中看出,輸出了7分頻時鐘信號,與預期一致。
二、分頻器技術參數
一般來說,分頻器包括三個基本參數。
第一個,就是分頻器的分頻點,這個應該不用多說。
第二個,就是所謂分頻器的“路”,也就是分頻器可以將輸入的原始信號分成幾個不同頻段的信號,我們通常說的二分頻、三分頻,就是分頻器的“路”。
第三個,就是分頻器的“階”,也稱“類”。
一個無源分頻器,本質上就是幾個高通和低通濾波電路的復合體,而這些濾波電路的數量,就是上面所說的“路”。但是在每一個濾波電路中,還有更精細的設計,換句話說,在每一個濾波電路中,都可以分別經過多次濾波,這個濾波的次數,就是分頻器的“階”。
一階分頻器也是感容分頻的結構,而二階分頻器中的每一路都經過了兩次濾波,這個“兩次濾波”才是“二階”的真正含義!
以上便是小編此次想要和大家共同分享的有關奇數分頻器的技術設計和代碼實現的內容,如果你對本文內容感到滿意,不妨持續(xù)關注我們網站喲。最后,十分感謝大家的閱讀,have a nice day!





