歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

FPGA時鐘分頻

FPGA分頻相信是FPGA中使用比較頻繁、比較基礎的一項技術。下面講具體來講解FPGA的時鐘分頻。

概念:

FPGA時鐘分頻即對FPGA的系統時鐘根據自己所需進行頻率處理,使之達到原來的1/N倍頻率。根據N的值,通常可分為偶數分頻和奇數分頻。

偶分頻:

偶分頻即N為偶數的對系統時鐘分頻。該設計主要通過一個計數器來實現。設計原理為:以系統參考時鐘為觸發條件做一個加計數器,當計數器值為(n/2 - 1)時,輸出時鐘發生跳轉。如要實現一個4分頻程序如下:

module div_4(clk,clr_n,clk_o);

input clk;

input clr_n;

output clk_o;

reg [1:0] cnt_div;

reg clk_o_1;

always @ (posedge clk or negedge clr_n)

begin

if( !clr_n)

cnt_div <= 0;

else if(cnt_div == 2'b01)

cnt_div <= 0;

else

cnt_div <= cnt_div+1;

end

always @ (posedge clk or negedge clr_n)

begin

if(!clr_n)

clk_o_1<=0;

else if (cnt_div == 2'b01)

clk_o_1 <= ~clk_o_1;

end

assign clk_o=clk_o_1;

endmodule

奇分頻:

奇數倍分頻方法即當N為奇數時的系統時鐘分頻。其原理為:設置兩個相同的最大值為(n-1)的計數器,其中一個以系統時鐘上升沿為觸發條件,另一個以系統時鐘下降沿為觸發條件;輸出時鐘在計數器值為(n-1)/2和(n-1)時分別進行翻轉,得到兩個占空比非50%的時鐘,最後把兩個輸出時鐘進行相或運算,即可得到一個占空比為50%的奇數分頻時鐘。如要實現一個5分頻時鐘的參考代碼如下:

 

module div_5(clk,clr_n,clk_o);

input clk;

input clr_n;

output clk_o;

reg [2:0] cnt_div1;

reg [2:0] cnt_div2;

reg clk_o_1;

reg clk_o_2;

always @ (posedge clk or negedge clr_n)

begin

if( !clr_n)

cnt_div1 <= 0;

else if(cnt_div1 == 3'b100)

cnt_div1 <= 0;

else

cnt_div1 <= cnt_div1+1;

end

always@ (posedge clk or negedge clr_n)

begin

if(!clr_n)

clk_o_1<=0;

else if (cnt_div 1== 3'b010)

clk_o_1 <= ~clk_o_1;

else if(cnt_div1 ==3'b100)

clk_o_1 <= ~clk_o_1;

end

always @ (negedge clk or negedge clr_n)

begin

if( !clr_n)

cnt_div2 <= 0;

else if(cnt_div2 == 3'b100)

cnt_div2 <= 0;

else

cnt_div2 <= cnt_div2+1;

end

always @ (posedge clk or negedge clr_n)

begin

if(!clr_n)

clk_o_2<=0;

else if (cnt_div2== 3'b010)

clk_o_2 <= ~clk_o_2;

else if(cnt_div2 ==3'b100)

clk_o_2 <= ~clk_o_2;

end

assign clk_o=clk_o_1 | clk_o_2;

endmodule

OK,大功告成!還有一些帶小數位的分頻待後面繼續補充

Copyright © Linux教程網 All Rights Reserved