郭 烜,楊曉玲
基于FPGA的信號發(fā)生器的設(shè)計與實現(xiàn)
郭 烜1,楊曉玲2
(1.中兵通信科技股份有限公司,河南 新鄉(xiāng) 453000;2.新鄉(xiāng)市科學(xué)技術(shù)協(xié)會,河南 新鄉(xiāng) 453000)
信號發(fā)生器是數(shù)字設(shè)備工作中必不可少的一部分,文章主要研究了基于FPGA的函數(shù)信號發(fā)生器的設(shè)計思路和軟硬件實現(xiàn)過程。首先介紹了該設(shè)計的總體方案,以及該方案中所使用的軟件及硬件基本知識。在此基礎(chǔ)上進行了硬件電路的設(shè)計,主要采用VHDL語言編寫各個波形模塊,將波形數(shù)據(jù)存儲在rom中,通過控制信號時鐘依次讀出形成波形信號,基于Altera公司的cycloneII系列FPGA-EP2C50作為核心芯片,搭建外圍轉(zhuǎn)換電路,最后在軟件Quartus上給出了系統(tǒng)仿真波形,驗證了該設(shè)計的正確性。
信號發(fā)生器;VHDL;FPGA
信號發(fā)生器是一種常用的信號源,廣泛應(yīng)用于通信、雷達、測控、電子對抗及現(xiàn)代化儀器儀表等領(lǐng)域,是最普通、最基本也是應(yīng)用最廣泛的電子儀器之一。
傳統(tǒng)的信號發(fā)生器都采用諧振法,即用具有頻率選擇性的回路來產(chǎn)生正弦振蕩,弊端是輸出波形單一。隨著微處理器和集成電路的發(fā)展,對信號發(fā)生器的要求也在不斷的提高中,本文就是基于FPGA來完成信號發(fā)生器的設(shè)計與實現(xiàn)。
本文主要研究了5種常用波形模塊,包括正弦波、余弦波、三角波、鋸齒波和方波,下面依次介紹這五種波形模塊的軟件實現(xiàn)過程。
正弦波是頻率成分最為單一的一種信號,因波形是數(shù)學(xué)上的正弦曲線而得名。采集一個周期內(nèi)?的64個點數(shù)值,放入存儲單元,采集點數(shù)值如圖1所示。
然后通過控制時鐘在上升沿處依次讀取存儲數(shù)值,最后輸出形成波形,具體編程過程如下:
signal cnt:integer range 0 to points-1;
begin
process(clk,reset)
begin
if reset='1'then
cnt<=0;
elsif rising_edge(clk)then
if cnt>=points-1 then
cnt<=0;
else
cnt<=cnt+1;
end if;
d1<=sin_data(cnt);
end if;
end process;
圖1 正弦曲線上64個采集點的數(shù)值
余弦波和正弦波在波形上相差 1/4周期,其他均一樣,所以該設(shè)計與正弦波模塊的設(shè)計流程和代碼均相同,可參考1.1節(jié)代碼,rom里采集點數(shù)值位置不同,余弦波的64個采集點的數(shù)值如圖2所示。
圖2 余弦曲線上64個采集點的數(shù)值
然后通過控制時鐘在上升沿處依次讀取存儲數(shù)值,最后輸出形成波形。
三角波的波形特點是數(shù)值從最小值開始按一定的斜率逐漸增大,等數(shù)值達到最大值時,開始按一定的負斜率逐漸減小,直到達到最小值,從而形成一個波形周期,按此周期進行循環(huán),形成連續(xù)的三角波波形。
依據(jù)三角波的特點,我們在編寫程序中通過計數(shù)器來完成主要工作,前半波形周期,計數(shù)器遞增;后半波形周期,計數(shù)器遞減。然后通過控制時鐘依次輸出計數(shù)器的值來輸出三角波。
三角波模塊程序如下:
architecture behave of triangle is
begin
process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
variable a:std_logic;
begin
if reset='1'then
tmp:="00000000";
elsif rising_edge(clk)then
if a='0'then
if tmp="11111110"then
tmp:="11111111";
a:='1';
else
tmp:=tmp+1;
end if;
else
if tmp="00000001"then
tmp:="00000000";
a:='0';
else
tmp:=tmp-1;
end if;
end if;
end if;
d3<=tmp;
end process;
鋸齒波的波形特點是數(shù)值從最小值開始按一定的斜率逐漸增大,等數(shù)值達到最大值時,數(shù)值由最大值直降為最小值,從而形成一個波形周期,按此周期進行循環(huán),就可以形成連續(xù)的鋸齒波波形。
依據(jù)鋸齒波的特點,我們在編寫程序中通過計數(shù)器來完成主要工作,波形周期內(nèi),計數(shù)器遞增,等數(shù)值達到最大值時,重新開始計數(shù)。然后通過控制時鐘依次輸出計數(shù)器的值來輸出鋸齒波。
鋸齒波模塊程序如下:
architecture behave of sawtooth is
begin
process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='1'then
tmp:="00000000";
elsif rising_edge(clk)then
if tmp="11111111"then
temp="00000000"
else
tmp:=tmp+1;
end if;
end if;
d4<=tmp;
end process;
方波又稱矩形波,波形特點是只有高低兩個固定數(shù)值,并且每個數(shù)值均占據(jù)半個周期,高低數(shù)據(jù)交替出現(xiàn)。
依據(jù)方波的特點,我們在編寫程序中通過計數(shù)器來完成主要工作,取整個計數(shù)周期的中間數(shù)值為依據(jù),大于中間值則在上升沿輸出高,小于中間值則在上升沿輸出低,等數(shù)值達到最大值時,重新開始計數(shù)。通過控制時鐘依次輸出高低值來輸出方波。
方波模塊程序如下:
architecture behave of square is
signal a:std_logic;
begin
process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='1'then
a<='0';
elsif rising_edge(clk)then
if tmp="11111111"then
tmp:="00000000";
else
tmp:=tmp+1;
end if;
if tmp<"10000000"then
a<='1';
else
a<='0';
end if;
end if;
end process;
process(clk,a)
begin
if rising_edge(clk)then
if a='1'then
d5<="11111111";
else
d5<="00000000";
end if;
end if;
end process;
1.6 數(shù)據(jù)選擇器模塊
數(shù)據(jù)選擇器模塊的作用是根據(jù)實際需求輸出指定波形。
該模塊的程序如下;
architecture behave of MUX5_1 is
signal p: std_logic_vector(7 downto 0);
begin
process(sel)
begin
case sel is
when "000" =>p<=d1; --正弦波
when "001" =>p<=d2; --余弦波
when "010" =>p<=d3; --三角波
when "011" =>p<=d4; --鋸齒波
when "100" =>p<=d5; --方波
when others =>p<=NULL;
end case;
q(9 downto 2)<=p;
q(1)<='0';
q(0)<='0';
end process;
本文的設(shè)計思路是基于FPGA來實現(xiàn)信號發(fā)生器模塊,通過 Quartus軟件來設(shè)計頂層結(jié)構(gòu)文件,采用VHDL語言來編寫各種波形模塊,然后將仿真程序燒寫到FPGA片子里,器件采用Altera公司的cycloneII系列 EP2C50。EP2C50配置原理圖如圖 3所示。
圖3 EP2C50配置原理圖
FPGA片子產(chǎn)生的信號,經(jīng)過AD9761來進行模 數(shù)轉(zhuǎn)換,最后經(jīng)過濾波電路和放大電路來輸出波形。其中輸入時鐘接DSP54_TOUT(19.2MHz)管腳,由外部提供,經(jīng)過8倍分頻得到2.4MHz,接到TX_CLK時鐘管腳上,設(shè)計中涉及的讀寫控制時鐘均采用TX_CLK。器件 EP2C50(TX_TEST9~TX_TEST0)十位數(shù)據(jù)輸出線與 AD9761(DB9~DB0)相對應(yīng)。AD9761周圍電路原理圖如圖4所示。
圖4 AD9761外圍電路圖
成功編譯全部程序,經(jīng) JTAG 口下載wave_generate.sof仿真文件到器件 EP2C50,通過Quartus的仿真工具SignalTap II 邏輯分析器觀察信號發(fā)生器輸出的波形,得到的仿真波形信號如圖 5所示。
圖5 正弦波、余弦波、三角波、鋸齒波和方波仿真波形信號
本文對信號發(fā)生器進行了理論研究,并在Altera公司的 EP2C50芯片上采用 VHDL語言實現(xiàn)了一種生成五種波形信號的算法,最后以直觀的仿真圖來驗證了這種算法的有效性和正確性,該設(shè)計能滿足在實際應(yīng)用中涉及波形信號方面的大部分需求,具有一定的參考價值。
[1] Douglas L Perry. VHDL 編程實例(第四版)[M].北京:電子工業(yè)出版社,2009 .
[2] 黃振華. 基于 FPGA函數(shù)信號發(fā)生器的設(shè)計與實現(xiàn)[D].江蘇大學(xué),2009.
[3] 張亦華.數(shù)字電路EDA入門-VHDL程序?qū)嵗痆M]. 北京:北京郵電大學(xué)出版社,2012.
[4] 高淼.基于 FPGA的自治型 SPWM波形發(fā)生器的設(shè)計[D]. ?2005.
[5] 王志鵬,付麗琴. 可編程邏輯器件開發(fā)技術(shù) MAX+PLUS II[M].北京:國防工業(yè)出版社,2005.
[6] 尹佳喜,尹仕. 基于CPLD的三相多波形函數(shù)發(fā)生器設(shè)計[D]. ?2005.
TN741
A
1008–2093(2017)04–0005–04
2017-05-20
郭烜(1987―),男,河南新鄉(xiāng)人,助理工程師,碩士,主要從事電子工程研究。
(責(zé)任編輯 王 磊)