Verilog任意整數分頻電路

2021-08-27 04:16:48 字數 3126 閱讀 6006

//`define n 5module div_n (input clk, // 基準時鐘output clk_div_n, // n分頻後得到的時鐘input rst

);

wire [31:0] n=5; // ★ n為分頻係數,n≥2即可,n的值為clk除以clk_div_n後取整(四捨五入)

/******************** 產生備用時鐘1 ***************/

reg [31:0] cnt1;

reg clk_div_n_1;

always @ (posedge clk or negedge rst)

begin

if(!rst)

begin

cnt1<=0;

clk_div_n_1<=0;

end

else if(n[0]==0) // 如果n為偶數,比n%2==0這種判斷方式更節省資源

begin

if(n==2) // 如果n為2

clk_div_n_1 <= ~clk_div_n_1;

else

if(cnt1==((n-2)>>1)) //比cnt1==(n-2)/2這種判斷方式更節省資源

begin

cnt1 <= 0;

clk_div_n_1 <= ~clk_div_n_1;

end

else

cnt1 <= cnt1+1;

end

end

else // 如果n為奇數

if(cnt1==(n-1)/2)

begin

clk_div_n_1 <= ~clk_div_n_1;cnt1<=cnt1+1'b1;

end

else if(cnt1==n-1) begin cnt1 <= 0;clk_div_n_1 <= ~clk_div_n_1;end

else

cnt1<=cnt1+1'b1;

end

/*********************** 產生備用時鐘2 *********************/

wire clk0=(n%2)? (~clk):0; // 如果n為偶數,備用時鐘2(clk_div_n_2)恒為0,即不需要用到此備用時鐘

reg [31:0] cnt2;

reg clk_div_n_2;

always @ (posedge clk0 or negedge rst)

if(!rst)

begin

cnt2<=0;

clk_div_n_2<=0;

end

else

if(cnt2==(n-1)/2)

begin

clk_div_n_2 <= ~clk_div_n_2;cnt2 <= cnt2+1;

end

else if(cnt2==n-1) begin cnt2 <= 0;clk_div_n_2 <= ~clk_div_n_2;end

else

cnt2 <= cnt2+1;

/******************** 產生最終分頻時鐘************************/

Verilog 時鐘偶分頻 奇分頻 任意分頻

分頻器是指使輸出訊號頻率為輸入訊號頻率整數分之一的電子電路。偶分頻計數器 偶分頻比較簡單,假設為n分頻,只需計數到n 2 1,然後時鐘翻轉 計數清零,如此迴圈就可以得到n 偶 分頻。如下 module even divider clk in,rst n,even en,偶分頻使能訊號,方便後續設計任...

Verilog 奇數分頻與偶數分頻及占空比

分頻器設計 1.簡單的二分頻 module half clk reset,clk in,clk out input clk in,reset output clk out reg clk out always posedge clk in begin if reset clk out 0 else ...

verilog奇數分頻,三分頻例項

目的 輸入乙個時鐘訊號,輸出占空比為50 的三分頻。首先得到乙個占空比為1 3的分頻時鐘,然後將輸入訊號取反,得到乙個移相180度的占空比為1 3的分頻時鐘,將兩個時鐘相或得到目的時鐘。verilog module divider 3 input clk,clock input rst n,asyn...