天天看點

verilog将100mhz分頻為1hz_使用verilog語言實作分頻器 将50MHZ分為1hz和5hz

匿名使用者

1級

2012-10-21 回答

你好,使用以下程式即可,使用時隻需改變N值,N的取值大小請看注釋,此程式适合對任意時鐘的整數分頻(包括奇偶),此程式已認證驗證。根據你的情況,想得到1HZ,N取50000000即可;想得到5HZ,N取10000000即可。

modulediv_N(

inputCLK,// 基準時鐘

outputCLK_div_N// N分頻後得到的時鐘

);

wire[31:0]N=20;// N為分頻系數,N≥2即可,N的值為CLK除以CLK_div_N後取整(四舍五入)

reg[31:0]cnt1;

regCLK_div_N_1;

always @ (posedge CLK)

begin

if(N%2==0)// 如果N為偶數

begin

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

CLK_div_N_1 <= ~CLK_div_N_1;

else

begin

if(cnt1==(N-2)/2)

begin

cnt1 <= 0;

CLK_div_N_1 <= ~CLK_div_N_1;

end

else

cnt1 <= cnt1+1;

end

end

else// 如果N為奇數

begin

if(cnt1==N-1)

cnt1 <= 0;

else

cnt1 <= cnt1+1;

if((cnt1==N-1) || (cnt1==(N-1)/2))

CLK_div_N_1 <= ~CLK_div_N_1;

else ;

end

end

wireCLK0=(N%2)? (~CLK):0;// 如果N為偶數,備用時鐘2(CLK_div_N_2)恒為0,即不需要用到此備用時鐘

reg[31:0]cnt2;

regCLK_div_N_2;

always @ (posedge CLK0)

begin

if(cnt2==N-1)

cnt2 <= 0;

else

cnt2 <= cnt2+1;

if((cnt2==N-1) || (cnt2==(N-1)/2))

CLK_div_N_2 <= ~CLK_div_N_2;

end

assignCLK_div_N = CLK_div_N_1 | CLK_div_N_2;

endmodule

-- Bob Liu原創