資源描述:
《基于fpga和sram的數(shù)控振蕩器的設(shè)計(jì)與實(shí)現(xiàn) - search readpudncom》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、基于FPGA和SRAM的數(shù)控振蕩器的設(shè)計(jì)與實(shí)現(xiàn)1引言數(shù)控振蕩器是數(shù)字通訊中調(diào)制解調(diào)單元必不可少的部分,同時(shí)也是各種數(shù)字頻率合成器和數(shù)字信號發(fā)生器的核心。隨著數(shù)字通信技術(shù)的發(fā)展,對傳送數(shù)據(jù)的精度和速率要求越來越高。如何得到可數(shù)控的高精度的高頻載波信號是實(shí)現(xiàn)高速數(shù)字通信系統(tǒng)必須解決的問題,可編程邏輯器件和大容量存儲(chǔ)器的發(fā)展為這一問題的解決帶來了曙光。本文介紹如何用FPGA(現(xiàn)場可編程邏輯門陣列)和SRAM(靜態(tài)隨機(jī)存儲(chǔ)器)實(shí)現(xiàn)高精度數(shù)控振蕩器。2NCO概述NCO(NumericalControlledOsc
2、illator)即數(shù)控振蕩器用于產(chǎn)生可控的正弦波或余弦波,其實(shí)現(xiàn)的方法目前主要有計(jì)算法和查表法等。計(jì)算法以軟件編程的方式通過實(shí)時(shí)計(jì)算產(chǎn)生正弦波樣本,該方法耗時(shí)多且只能產(chǎn)生頻率相對較低的正弦波,而需要產(chǎn)生高速的正交信號時(shí),用此方法無法實(shí)現(xiàn)。因此,在實(shí)際應(yīng)用中一般采用最有效、最簡單的查表法,即事先根據(jù)各個(gè)NCO正弦波相位計(jì)算好相位的正弦值,并以相位角度作為地址把該相位的正弦值數(shù)據(jù)存儲(chǔ)在表中,然后通過相位累加產(chǎn)生地址信息讀取當(dāng)前時(shí)刻的相位值在表中對應(yīng)的正弦值,從而產(chǎn)生所需頻率的正弦波。用查表法實(shí)現(xiàn)NCO的性能
3、指標(biāo)取決于查表的深度和寬度,即取決于表示相位數(shù)據(jù)的位數(shù)(查表存儲(chǔ)器地址線的位數(shù))和表示正弦值數(shù)據(jù)的位數(shù)(查表存儲(chǔ)器數(shù)據(jù)線的位數(shù))。改善NCO性能最簡單和最根本的方法是加大查找表的深度和寬度。目前,用查找表法實(shí)現(xiàn)NCO的普遍做法是用片內(nèi)ROM作為查找表,由于片內(nèi)資源的限制,查找表的深度和寬度一般不會(huì)很大(通常為256×8bits),大大限制了NCO性能的提高,用獨(dú)立的大容量SRAM作為查找表,把查找表從片內(nèi)移到片外,可以較好解決這個(gè)問題,基于這種思想,筆者成功地用FPGA(Xilinx公司的XC2V100
4、0型門陣列)和SRAM(Cypress公司的CY7C1021型存儲(chǔ)器)實(shí)現(xiàn)了NCO。3NCO的實(shí)現(xiàn)3.1結(jié)構(gòu)設(shè)計(jì)用FPGA和SRAM實(shí)現(xiàn)的NCO的結(jié)構(gòu)如圖1所示。大框內(nèi)部分是由FPGA完成,主要部件分為頻率控制字寄存器,相位控制字寄存器、通道控制字寄存器、累加器、加法器、通道選擇器和鎖存器等。微處理器對NCO進(jìn)行控制,可用單片機(jī)或DSP(數(shù)字信號處理器)實(shí)現(xiàn)。3.1.1頻率控制字寄存器、相位控制字寄存器、累加器和加法器頻率控制字寄存器和相位控制字寄存器都是32位并行輸入/并行輸出寄存器,它們通過微處理器
5、接口進(jìn)行讀寫。頻率控制字寄存器確定載波的頻率,相位控制字寄存器確定載波的初始相位。32位累加器對代表頻率的頻率控制字進(jìn)行累加運(yùn)算,累加結(jié)果與代表初始相位的相位控制字通過32位加法器進(jìn)行相加運(yùn)算,相加結(jié)果的高16位數(shù)據(jù)讀取查找表的地址信息。頻率控制字寄存器、相位控制字寄存器、累加器和加法器可以用VHDL語言描述,集成在一個(gè)模塊中,其VHDL源程序如下:entityaddr_sinisPort(clock:inSTD_LOGIC;——時(shí)鐘信號reset:inSTD_LOGIC;——同步復(fù)位信號——定義頻率控
6、制字寄存器g_sin:inSTD_LOGIC;data_con_sin:inSTD_LOGIC_VECTOR(31downto0);d_con_sin:outSTD_LOGIC_VECTOR(31downto0);——定義相位控制字寄存器g_sin1:inSTD_LOGIC;data_con_sin1:inSTD_LOGIC_VECTOR(31downto0);d_con_sin1:outSTD_LOGIC_VECTOR(31downto0);dout:outSTD_LOGIC_VECTOR(15dow
7、nto0)——加法器輸出信號);endaddr_sin;architectureBehavioralofaddr_sinissignala_sin,a_sin1,count,count1:STD_LOGIC_VECTOR(31downto0):=“00000000000000000000000000000000”;——定義中間變量并初始化begind_con_sin<=a_sin;——用于微處理器讀頻率控制字寄存器d_con_sin<=a_sin1;——用于微處理器讀相位控制字寄存器dout<=coun
8、t1(31downto16);——加法器輸出process(g_sin,data_con_sin)——寫頻率控制字寄存器beginif(g_sin=“1”)thena_sin<=data_con_sin;endif;endprocess;process(g_sin1,data_con_sin1)——寫相位控制字寄存器beginif(g_sin1=‘1’)thena_sin1<=data_con_sin1;endif;endprocess;p