【從零開始走進(jìn)FPGA】教你什么才是真正的任意分頻
一、為啥要說任意分頻
本文引用地址:http://m.butianyuan.cn/article/269805.htm也許FPGA中的第一個(gè)實(shí)驗(yàn)應(yīng)該是分頻實(shí)驗(yàn),而不是流水燈,或者LCD1602的"Hello World"顯示,因?yàn)榉诸l的思想在FPGA中極為重要。當(dāng)初安排流水燈,只是為了能讓大家看到效果,來激發(fā)您的興趣(MCU的學(xué)習(xí)也是如此)。
在大部分的教科書中,都會(huì)提到如何分頻,包括奇數(shù)分頻,偶數(shù)分頻,小數(shù)分頻等。有些教科書中也會(huì)講到任意分頻(半分頻,任意分?jǐn)?shù)分頻)原理,用的是相位與的電路,并不能辦到50%的占空比,也不是很靈活。
但沒有一本教科書會(huì)講到精準(zhǔn),淺顯易懂的高精度任意分頻原理(至少Bingo沒看到過),同時(shí)也沒有一種設(shè)計(jì)能用同一個(gè)電路實(shí)現(xiàn)任意頻率的控制。Bingo對(duì)于當(dāng)年做的任意波形發(fā)生器時(shí)候的相位累加器原理,從中受到啟發(fā),總結(jié)出高精度任意頻率合成的重要思維,在此貢獻(xiàn)給大家,希望對(duì)大家有用。
二、任意分頻原理以及性能
1. DDS相位累加器
(1)DDS合成流程
首先講訴DSS(直接頻率合成法)的原理。
DDS是重要的頻率合成方法,在波形發(fā)生器中有極其重要的應(yīng)用。DDS主要由以下幾部分組成:
a) 相位累加器
b) RAM數(shù)據(jù)讀取
c) D/A轉(zhuǎn)換器
d) 低通濾波器
見如下流程圖:直接頻率合成法的流程圖,有固定模塊,輸入頻率控制器,輸出固定頻率的波形。
此電路最主要模塊是相位累加器,通過相位累加器循環(huán)計(jì)數(shù),循環(huán)讀取RAM的數(shù)據(jù),從而得到固定頻率的波形數(shù)據(jù)。
(2)相位累加器原理
相位累加原理流程如上所示:
輸入頻率控制字,根據(jù)算法,來實(shí)現(xiàn)相位的變化,分析如下所示:
假定FPGA基準(zhǔn)頻率為50MHz,即基準(zhǔn)頻率:(MHz)
假定計(jì)數(shù)器為32位計(jì)數(shù)器,即;
K為頻率控制字,則相位輸出的頻率為: (1)
即(2)
根據(jù)相位累加原理,以及RAM緩存讀取數(shù)據(jù),每一次的循環(huán),RAM數(shù)據(jù)間隔K讀取一次。
當(dāng)K=1的時(shí)候,公式能輸出最小頻率,根據(jù)公式(1):
所以,最小波形頻率步進(jìn)為0.011655Hz。
當(dāng)fo=1Hz的時(shí)候,根據(jù)公式(2)
所以,每Hz的增減,K的步進(jìn)為85.90。
當(dāng)K=N/2的時(shí)候,公式能輸出最大頻率(因?yàn)槊總€(gè)CLK跳變一次),此時(shí),根據(jù)公式(1),得到:
因此,根據(jù)頻率控制字K的變化,能輸出及固定頻率的波形。
2. 任意頻率分頻原理
在FPGA中某些應(yīng)用場(chǎng)合,對(duì)頻率要求比較高的情況下,用相位累加器原理來生成固定頻率的方法,未嘗不可。
我們規(guī)定,對(duì)Cnt進(jìn)行對(duì)半50%拆分,具體如下:
(1)當(dāng)的時(shí)候,,即低電平;
(2)當(dāng)的時(shí)候,fo=1,即高電平。
同上:
在FPGA中應(yīng)用,Verilog代碼如下所示:
/***************************************************
* Module Name : clk_generator
* Engineer : Crazy Bingo
* Target Device : EP2C8Q208C8
* Tool versions : Quartus II 9.1SP1
* Create Date : 2011-6-25
* Revision : v1.0
* Description :
**************************************************/
/*************************************************
fc = 50MHz 50*10^6
fo = fc*K/(2^32)
K = fo*(2^32)/fc
= fo*(2^32)/(50*10^6)
**************************************************/
module clk_generator
#
(
parameter FREQ_WORD = 32'd8590 //1KHz
)
(
input clk, //50MHz
input rst_n, //clock reset
output reg clk_out
);
//--------------------------------------
reg [31:0] max_value;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
max_value <= 1'b0;
else
max_value <= max_value + FREQ_WORD;
end
//--------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
clk_out <= 1'b0;
else
begin
if(max_value < 32'h7FFF_FFFF)
clk_out <= 1'b0;
else
clk_out <= 1'b1;
end
end
endmodule
本代碼由Bingo從DDS相位累加器中,相應(yīng)移植總結(jié)出來的任意頻率分頻原理,本模塊應(yīng)用在多個(gè)對(duì)頻率精準(zhǔn)度要求比較高的工程中(如UART中,要得到115200Hz的bps,用這種任意分頻的原理來得到精準(zhǔn)的方法,一定程度上能夠提高數(shù)據(jù)傳輸?shù)臏?zhǔn)確率)。
在DDS中的相位累加器的任意分頻原理,在一般工程中同樣可以應(yīng)用。在某些應(yīng)用場(chǎng)合,還是值得考慮的。本應(yīng)用純屬Bingo個(gè)人主觀應(yīng)用,如有異議,請(qǐng)聯(lián)系本人。
fpga相關(guān)文章:fpga是什么
低通濾波器相關(guān)文章:低通濾波器原理
負(fù)離子發(fā)生器相關(guān)文章:負(fù)離子發(fā)生器原理 塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理 離子色譜儀相關(guān)文章:離子色譜儀原理
評(píng)論