簡單的是計數取反,奇數略有不同,分為上公升沿和下降沿計數取反然後再邏輯與即可,相當於補了半個週期
module pulsediv(input clk_100m,input n_rst,output reg pulseout);
reg[7:0] divcnt;
reg clkp,clkn;
//任意偶數分頻占空比50% 10分頻
always@(posedge clk_100m or negedge n_rst)
begin
if(!n_rst)
begin
divcnt <= 8
'd0;
pulseout <= 1
'd0;
endelse
begin
if(divcnt == 8
'd4)
begin
divcnt <= 8
'd0;
pulseout <= ~pulseout;
endelse
begin
divcnt <= divcnt + 8
'd1;
endendend
//任意奇數分頻占空比(50%+1/n) 11分頻
always@(posedge clk_100m or negedge n_rst)
begin
if(!n_rst)
begin
divcnt <= 8
'd0;
pulseout <= 1
'd0;
endelse
begin
if(divcnt == 8
'd4)
begin
divcnt <= divcnt + 8
'd1;
pulseout <= 1
'd1;
endelse
begin
if(divcnt == 8
'd10)
begin
divcnt <= 8
'd0;
pulseout <= 1
'd0;
endelse
begin
divcnt <= divcnt + 8
'd1;
endendend
end//任意奇數分頻占空比50% 11分頻
always@(posedge clk_100m or negedge n_rst)
begin
if(!n_rst)
begin
divcnt <= 8
'd0;
clkp <= 1
'd0;
endelse
begin
if(divcnt == 8
'd4)
begin
divcnt <= divcnt + 8
'd1;
clkp <= 1
'd1;
endelse
begin
if(divcnt == 8
'd10)
begin
divcnt <= 8
'd0;
clkp <= 1
'd0;
endelse
begin
divcnt <= divcnt + 8
'd1;
endendend
endalways@(posedge clk_100m or negedge n_rst)
begin
if(!n_rst)
begin
divcnt <= 8
'd0;
clkn <= 1
'd0;
endelse
begin
if(divcnt == 8
'd4)
begin
divcnt <= divcnt + 8
'd1;
clkn <= 1
'd1;
endelse
begin
if(divcnt == 8
'd10)
begin
divcnt <= 8
'd0;
clkn <= 1
'd0;
endelse
begin
divcnt <= divcnt + 8
'd1;
endendend
endassign pulseout = clkp & clkn;//將pulseout改為wire再執行
endmodule
verlog任意奇數和偶數分頻
下面展示一些內聯 片。執行環境 quartus ii 13.0 module five div input clk,rst n,output reg clk div 5分頻時鐘只能用於奇數分頻 reg clk pose reg clk nege reg clk oushu parameter fen...
FPGA實現任意奇數分頻
我們都知道用fpga做偶數分頻很簡單,只需要用計數器計數到分頻係數n的一半再減去1,不斷去翻轉分頻的訊號即可得到分頻的訊號,那麼奇數奇數分頻其實也是一樣的,但是如果要得到占空比為50 的訊號,那可能就需要處理一下才可以,下圖為占空比為50 的3分頻訊號產生原理。利用原始訊號的上公升沿產生乙個三分頻的...
FPGA奇數分頻
前注 設計中盡量還是要避免使用自己計數分頻得到的時鐘,去使用廠家自帶的分頻ip 如vivado中的clock wizard 偶數分頻比較簡單,這裡略過。對於不要求占空比為50 的奇數分頻,也比較簡單,直接模n計數,期間進行兩次翻轉就可以了。這裡重點介紹要求占空比為50 的奇數分頻。步驟 1.在時鐘上...