//`define n 5
module 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...