基於 Verilog HDL偶數分頻和奇數

2021-10-04 16:15:55 字數 2866 閱讀 1912

fpga開發板上的晶振頻率都是固定值,只能產生固定頻率的時鐘訊號,但是實際工程中需要各種不同頻率的訊號,這時就需要對晶振產生的頻率進行分頻。比如 fpga開發板上的晶振頻率為50mhz,若想要得到1mhz的方波訊號,那麼就需要對晶振產生的訊號進行50分頻;若要實現秒計數,則需對50mhz頻率進行50000000分頻,形成1hz的脈衝。

偶數分頻器的設計比較簡單,通常用計數器的方法來實現。比如要實現乙個n分頻(n為偶數)的分頻器,當計數到(n/2-1)時,讓輸出狀態翻轉,並將計數器清零,這樣輸出的訊號就是輸入時鐘的n分頻了。

以10分頻為例,即n=10,計數到4時鐘反轉。

//設計**

module div_10

(clk,rst_n,div_10)

;input clk ;

input rst_n;

output div_10;

reg div_10;

reg [3:

0] cnt;

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

cnt <=

4'b0;

div_10 <=

1'b0;

endelse

if(cnt ==

4'd4)

begin

cnt <=

4'b0;

div_10 <=

~div_10;

endelse

cnt <= cnt +1;

endendmodule

//測試**

module div_10_tb;

reg clk;

reg rst_n;

wire div_10;

div_10 unit(.

clk(clk),.

rst_n

(rst_n),.

div_10

(div_10));

always #10 clk =

~clk ;

initial

begin

clk=

1'b1; rst_n=1'b0;

#10 rst_n=

1'b1;

endendmodule

波形圖如下所示:

以三分頻且占空比為50%的奇數分頻器為例,設計思路是:計數器為時鐘上公升沿觸發,計數到2清零,clk1為時鐘上公升沿觸發,當cnt清零時clk1翻轉;clk2時鐘下降沿觸發,當cnt計數到2時clk2翻轉,最後將clk1與clk2進行與運算。

n=3,占空比為50%,具體實現**如下:

//設計**

module div_3

( input clk, input rst_n, output div_three )

;reg [1:

0] cnt;

reg div_clk1;

reg div_clk2;

always @(posedge clk or negedge rst_n)

begin

if(rst_n ==

1'b0)

cnt <=0;

else

if(cnt ==2)

cnt <=0;

else

cnt <= cnt +1;

end

always @(posedge clk or negedge rst_n)

begin

if(rst_n ==

1'b0)

div_clk1 <=0;

else

if(cnt ==0)

div_clk1 <=

~div_clk1;

else div_clk1 <= div_clk1;

endalways @(negedge clk or negedge rst_n)

begin

if(rst_n ==

1'b0)

div_clk2 <=0;

else

if(cnt ==2)

div_clk2 <=

~div_clk2;

else

div_clk2 <= div_clk2;

end

assign div_three = div_clk2 ^ div_clk1;

endmodule

//測試**

module div_3_tb;

reg clk;

reg rst_n;

wire div_three;

div_3 unit(.

clk(clk),.

rst_n

(rst_n),.

div_three

(div_three));

always #10 clk=

~clk;

initial

begin

clk=

1;rst_n=0;

#20 rst_n=1;

endendmodule

波形圖如下所示

若需了解其他分頻方法可參考如下:

基於verilog的偶數、奇數、半整數分頻以及任意分頻器設計

Verilog HDL 6 偶數分頻器

funtion frequency even divider ports clk 時鐘輸入 posedge clkout 頻率輸出值 instruction 更改value為分頻值,以及更改計數值q的位數,使得q位數所允許的最大值 value 2 data 2020 12 18。version 1....

奇偶數分離

描述 有乙個整型偶數n 2 n 10000 你要做的是 先把1到n中的所有奇數從小到大輸出,再把所有的偶數從小到大輸出。輸入第一行有乙個整數i 2 i 30 表示有 i 組測試資料 每組有乙個整型偶數n。輸出第一行輸出所有的奇數 第二行輸出所有的偶數 樣例輸入210 14樣例輸出 1 3 5 7 9...

奇偶數分離

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 有乙個整型偶數n 2 n 10000 你要做的是 先把1到n中的所有奇數從小到大輸出,再把所有的偶數從小到大輸出。輸入第一行有乙個整數i 2 i 30 表示有 i 組測試資料 每組有乙個整型偶數n。輸出第一行輸出所有的奇數 第二...