摘 要:為了解決信號(hào)發(fā)生器的一些具體問題,如需要它能產(chǎn)生多種信號(hào)、工作穩(wěn)定、成本低等,因此采用GW48型SoPC開發(fā)系統(tǒng),以Nios軟核為控制核心,來實(shí)現(xiàn)參數(shù)可調(diào)的任意波形DDS信號(hào)源。重點(diǎn)闡述系統(tǒng)硬件方案、軟件設(shè)計(jì),并對(duì)整個(gè)系統(tǒng)進(jìn)行了仿真,仿真結(jié)果符合設(shè)計(jì)要求,具有方案設(shè)計(jì)便捷、集成度高、擴(kuò)展靈活和功能全面等特點(diǎn)。
關(guān)鍵詞:SoPC; DDS; Nios; 任意波形信號(hào)發(fā)生器
中圖分類號(hào):TN911.72-34 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2011)17-0092-03
Design of Arbitrary Waveform Signal Generator Based on SoPC
LIN Wei, SHAO Yan, WANG Hai-guang
(School of Electronic and Control Engineering, Chang’an University, Xi’an 710064, China)
Abstract: In order to meet the specific requirements of signal generator, such as generation of various signals, stable operation and low cost, the GW48 type SoPC development system which takes Nios as a control core is adopted to design the arbitrary waveform DDS signal source whose parameters is adjustable. The paper elaborates the system hardware and software design. The whole system simulation results meet design requirements. The system has convenient design scheme, high integration, flexible expansion and perfect function.
Keywords: SoPC; DDS; Nios; arbitrary waveform signal generator
0 引 言
可編程片上系統(tǒng)(System on a Programmable Chip,SoPC)結(jié)合了SoC,PLD和FPGA的諸多優(yōu)點(diǎn),既擁有可編程邏輯技術(shù)將整個(gè)系統(tǒng)集成于一塊硅片之上,由單個(gè)芯片實(shí)現(xiàn)主要邏輯功能的特點(diǎn),又具備可裁減、可擴(kuò)展、可升級(jí)、軟硬件系統(tǒng)可編程的功能,是一種特殊的嵌入式系統(tǒng)。直接數(shù)字頻率合成(DDS)是20世紀(jì)70年代初提出的一種全數(shù)字的頻率合成技術(shù),常用于產(chǎn)生相位可控的信號(hào),具有轉(zhuǎn)換快、分辨率高等特點(diǎn)[1-2]。而SoPC具有速度快、集成度高、存儲(chǔ)容量大的優(yōu)點(diǎn),使之與DDS技術(shù)相結(jié)合,可以極大地提高信號(hào)發(fā)生器的性能,降低生產(chǎn)成本[1-4]。本文采用SoPC技術(shù),把DDS模塊和微處理控制部分集成到FPGA芯片,從而實(shí)現(xiàn)頻率可調(diào)的正弦、鋸齒、方波、三角等任意波形的信號(hào)發(fā)生器。
1 DDS原理
DDS的基本原理是以采樣定理為基礎(chǔ),利用查表法產(chǎn)生數(shù)字量形式的波形信號(hào),并通過DAC轉(zhuǎn)換成模擬量形式的信號(hào)。其基本的原理電路如圖1所示,直接數(shù)字頻率合成(DDS)是由頻率合成器、相位累加器、波形ROM、D/A轉(zhuǎn)換器和低通濾波器LPF構(gòu)成[5-8]。
連續(xù)信號(hào)按照相位取樣、量化、編碼后,形成一個(gè)波形函數(shù)表,存于ROM中。合成時(shí),每輸入一個(gè)時(shí)鐘相位累加器把頻率控制字累加一次,輸出合成信號(hào)的相位,通過改變相位累加器的頻率控制字可以改變相位增量。當(dāng)相位增量改變時(shí),一個(gè)周期內(nèi)的采樣點(diǎn)數(shù)也隨之改變。在時(shí)鐘頻率即采樣頻率不變的情況下,通過相位增量的改變來實(shí)現(xiàn)頻率的改變,計(jì)算公式為Δp=ωΔt=2πfΔt,其中Δp為相位變化,ω為角頻率,Δt為時(shí)鐘周期。經(jīng)過轉(zhuǎn)換的合成信號(hào)的頻率為f=Δp/(2πΔt)=Δpfclk/(2π),fclk為時(shí)鐘頻率。通過改變?chǔ)改變合成信號(hào)的頻率f。由N位相位累加器對(duì)2π進(jìn)行量化,對(duì)2π取2N個(gè)點(diǎn),則f=(K/2N)fclk,其中K為頻率控制字,取值范圍[5-8]為0~2N-1。
2 信號(hào)發(fā)生器的設(shè)計(jì)
設(shè)計(jì)方案采用Altera公司的Quartus Ⅱ和Nios Ⅱ IDE軟件作為開發(fā)工具[9-10],包括硬件和軟件兩部分。
2.1 硬件方案
該設(shè)計(jì)選用Altera公司CycloneⅡ系列EP2C35F484C8型FPGA芯片作為產(chǎn)生波形信號(hào)的核心組件,以搭載Nios軟核和DDS模塊,并由外部添加輸入鍵盤,修改DDS發(fā)生器的參數(shù),來選擇不同的輸出波形[3]。為了保證輸出信號(hào)不失真,DAC芯片的轉(zhuǎn)換速率必須高于100 MHz,所以D/A轉(zhuǎn)換器選用了190 MHz的THS5651高速DAC芯片[11]。硬件系統(tǒng)結(jié)構(gòu)如圖2所示,系統(tǒng)頂層設(shè)計(jì)圖如圖3所示。
系統(tǒng)頂層設(shè)計(jì)的核心是可裁剪的Nios軟核和可存儲(chǔ)多種波形信號(hào)的DDS模塊,如圖3所示[5]。Nios軟核為DDS設(shè)置輸出波形選擇參數(shù),DDS模塊生成相應(yīng)波形信號(hào),再由PIO口將輸出信號(hào)傳輸給DAC芯片。DDS模塊是由1個(gè)相位累加器和4個(gè)LPM_ROM構(gòu)成,主要完成保存設(shè)置參數(shù),產(chǎn)生波形ROM地址,形成波形ROM等工作。LPM_ROM分別以matlab生成的MIF格式文件存儲(chǔ)了正弦、鋸齒、三角、方波四種常見的波形數(shù)據(jù)表,若要生成其他任意波形,只需將相應(yīng)的連續(xù)信號(hào)轉(zhuǎn)化為MIF文件,替換LPM_ROM中的波形文件即可實(shí)現(xiàn)任意波形信號(hào)的輸出[5]。為了取得精細(xì)的頻率分辨率,將相位累加器設(shè)為32位,同時(shí)為使LPM_ROM中數(shù)據(jù)量不至于過大,使用相位截?cái)嚅y,讓相位累加器輸出的高10位用來查表,這樣可以保證系統(tǒng)在高速穩(wěn)定運(yùn)行的前提下,最大限度地減少輸出波形信號(hào)的誤差。
2.2 軟件設(shè)計(jì)
軟件設(shè)計(jì)流程如下:
unsigned long int key_flag=1;
int init_set=1;
void set();
volatile int edge_capture;
void button_ISR(void* context,alt_u32 id) //按鍵中斷處理
{volatile int* edge_capture_ptr=(volatile int*)context; //捕獲按鍵中斷
*edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE);
switch(*edge_capture_ptr)
{case 0x01: key_flag=0;
break;
case 0x02: key_flag=1;
……
case 0x10: init_set=0;
break;
default: key_flag=key_flag;
break;}
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE,0x0); //清除中斷
}
void init_keyISR()
{
void *edge_capture_ptr=(void*) edge_capture;
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE,0x0); //清除中斷
IOWR_ALTERA_AVALON_PIO_IR Q_MASK(KEY_PIO_BASE,0x0f); //中斷使能
alt_irq_register(KEY_PIO_IRQ,edge_capture_ptr,button_ISR); //中斷函數(shù)注冊(cè)}
int main()
{
init_keyISR();
DAOUT->DATA=0;
while(init_set)//設(shè)置輸出波形參數(shù)
set();
while(1)
{switch(key_flag)//選擇輸出波形
{ case 0:DAOUT->DATA=SIN->DATA;
break;
……
case 3:DAOUT->DATA=SQUARE->DATA;
break;
default: DAOUT->DATA=0;
break; } }
return 0;
}
3 測(cè)試結(jié)果與分析
采用邏輯分析儀對(duì)DDS發(fā)生器的輸出信號(hào)進(jìn)行測(cè)試,輸出信號(hào)如圖4所示,設(shè)置初始頻率字與實(shí)測(cè)值見表1,誤差小于0.05,輸出信號(hào)精度較高。
4 結(jié) 語
本文介紹了基于SoPC的DDS任意波形發(fā)生器的一種設(shè)計(jì)方案,詳述了硬件結(jié)構(gòu)及軟件設(shè)計(jì)過程,并對(duì)整個(gè)系統(tǒng)進(jìn)行了仿真與測(cè)試,輸出信號(hào)頻率的誤差較小,可以滿足不同系統(tǒng)對(duì)波形信號(hào)的要求,適用于工業(yè)控制、檢測(cè)、通信等不同領(lǐng)域。
參 考 文 獻(xiàn)
[1]侯建軍,郭勇.SoPC技術(shù)基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2008.
[2]潘松,黃繼業(yè).SoPC技術(shù)使用教程[M].北京:清華大學(xué)出版社,2005.
[3]李洪偉,袁斯華.基于Quartus Ⅱ的CPLD/FPGA設(shè)計(jì)[M].北京:電子工業(yè)出版社,2008.
[4]王彥,黃智偉.基于FPGA的工程設(shè)計(jì)與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2007.
[5]白居憲.直接數(shù)字頻率合成[M].西安:西安交通大學(xué)出版社,2007.
[6]師麗彩,郭叔軍,王玉花.基于Nios的DDS信號(hào)源實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2005,28(14):123-128.
[7]高琴,姜壽山,魏忠義.基于FPGA的DDS信號(hào)源設(shè)計(jì)與實(shí)現(xiàn)[J].西安工程科技學(xué)院學(xué)報(bào),2006,20(2):14-17.
[8]丁紀(jì)峰.任意波形信號(hào)發(fā)生器的研制[D].哈爾濱:哈爾濱工業(yè)大學(xué),2005.
[9]朱正偉.EDA技術(shù)及應(yīng)用[M].北京:清華大學(xué)出版社,2005.
[10]潘松.VHDL使用教程[M].西安:西安電子科技大學(xué)出版社,2001.
[11]Altera Corporation. Nios Ⅱ processor reference handbook [R]. [S.l.]: Altera Corporation, 2006.
作者簡介:
林 薇 女,1964年出生,陜西人,副教授。研究方向?yàn)殡娮蛹夹g(shù)應(yīng)用。
邵 嚴(yán) 男,1985年出生,陜西人,在讀研究生。研究方向?yàn)榭刂评碚撆c控制工程。
汪海光 男,1985年出生,陜西人,在讀研究生。研究方向?yàn)殡娮蛹夹g(shù)應(yīng)用。