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。輸出第一行輸出所有的奇數 第二...