摘要:信號發(fā)生器又稱為波形發(fā)生器,是一種常用的信號源,廣泛應用于電子電路、通信、控制和教學實驗等領域。用FPGA所構(gòu)成的系統(tǒng)來產(chǎn)生波形信號,這個系統(tǒng)既能和主機系統(tǒng)相連,用相應的上層軟件展示波形信號,又方便程序的編寫,而且還有A/D0809接口可以產(chǎn)生模擬信號的輸出和外面的示波器相連。
以FPGA芯片為載體,通過QuartusII的LPM_ROM模塊和VHDL語言為核心設計一個多功能信號發(fā)生器,根據(jù)輸入信號的選擇可以輸出遞增鋸齒波、遞減鋸齒波、三角波、階梯波和方波等5種信號,通過QuartusII軟件進行波形仿真、定時分析,仿真正確后,利用實驗板提供的資源,下載到芯片中實現(xiàn)預定功能。
信號發(fā)生器又稱為波形發(fā)生器,是一種常用的信號源,廣泛應用于電子電路、通信、控制和教學實驗等領域。它是科研及工程實踐中zui重要的儀器之一,以往多用硬件組成,系統(tǒng)結(jié)構(gòu)比較復雜,可維護性和可操作性不佳。隨著計算機技術的發(fā)展,信號發(fā)生器的設計制作越來越多的是用計算機技術,種類繁多,價格、性能差異很大。用FPGA或CPLD來實現(xiàn),它的優(yōu)點是可以進行功能仿真,而且FPGA和CPLD的片內(nèi)資源豐富,設計的流程簡單。用FPGA所構(gòu)成的系統(tǒng)來產(chǎn)生波形信號,這個系統(tǒng)既能和主機系統(tǒng)相連,用相應的上層軟件展示波形信號,又方便程序的編寫,而且還有A/D0809接口可以產(chǎn)生模擬信號的輸出和外面的示波器相連。
1、正弦信號發(fā)生器的LPM定制
正弦信號發(fā)生器由計數(shù)器或地址發(fā)生器(6位)、正弦信號數(shù)據(jù)ROM(6位地址線,8位數(shù)據(jù)線,含有64個8位數(shù)據(jù),一個周期)、原理圖頂層設計和8位D/A(實驗中用DAC0832代替)。
其框圖如圖1所示。其中信號產(chǎn)生模塊將產(chǎn)生所需的各種信號,這些信號的產(chǎn)生可以有多種方式,如用計數(shù)器直接產(chǎn)生信號輸出,或者用計數(shù)器產(chǎn)生存儲器的地址,在存儲器中存放信號輸出的數(shù)據(jù)。信號發(fā)生器的控制模塊可以用數(shù)據(jù)選擇器實現(xiàn),用8選1數(shù)據(jù)選擇器實現(xiàn)對5種信號的選擇。
圖1信號發(fā)生器結(jié)構(gòu)框圖
zui后將波形數(shù)據(jù)送入D/A轉(zhuǎn)換器,將數(shù)字信號轉(zhuǎn)換為模擬信號輸出。用示波器測試D/A轉(zhuǎn)換器的輸出,可以觀測到5種信號的輸出。
1.1定制初始化數(shù)據(jù)文件
QuartusII能接受的LPM_ROM模塊中的初始化數(shù)據(jù)文件的格式有兩種:。mif格式文件和。hex格式文件。實際應用中只要使用其中一種格式的文件即可。下面采用。mif格式文件,調(diào)出產(chǎn)生ROM數(shù)據(jù)文件大小的選擇窗。根據(jù)64點8位正弦數(shù)據(jù)的情況,可選ROM的數(shù)據(jù)數(shù)Number為64,數(shù)據(jù)寬Wordsize取8位。單擊OK按鈕,將出現(xiàn)圖2所示的空的。mif數(shù)據(jù)表格,表格中的數(shù)據(jù)格式可通過鼠標右鍵單擊窗口邊緣的地址數(shù)據(jù)彈出的窗口選擇。
圖2.mif數(shù)據(jù)表格
將波形數(shù)據(jù)填入mif文件表中也可以使用QuartusII以外的編輯器設計MIF文件,其格式如下:
#Include<STdio.h>
#Include"math.h"
main()
{inti;floats;
for(i=0;i<1024;i++)
{s=sin(atan(1)*8*i/1024);
printf("%d:%d;n",i,(int)((s+1)*1023/2));}}
把上述程序編譯成程序后,可在DOS命令行下執(zhí)行命令:
romgen>sin_rom.mif;
1.2定制LPM元件
打開MegaWizardPlug_InManager初始對話框,選擇Createanewcustom…項。單擊Next按鈕后,選擇Storage項下的LPM_ROM,再選擇ACEX1K器件和VHDL語言方式;zui后輸入ROM文件存放的路徑和文件名:F:sing_gntdata_rom(定制的ROM元件文件名),單擊Next按鈕,選擇ROM控制線、地址線和數(shù)據(jù)線。這里選擇地址線位寬和ROM中數(shù)據(jù)數(shù)分別為6和64;選擇地址鎖存控制信號inclock。
對于地址信號發(fā)生器的設計。方法一:用VHDL語言設計6位計數(shù)器,產(chǎn)生其元件符號;方法二:仍采用LPM定制的方法。
1.3完成頂層設計
按圖3畫出頂層原理圖,然后進行編譯,波形仿真如圖4所示。
圖3簡易正弦信號發(fā)生器頂層電路設計
圖4當前工程仿真波形輸出
對當前設計通過執(zhí)行QuartusII的命令Create∠Update/CreateSymbolFilesforCurrentFile,可以為設計電路建立一個元件符號,以便被頂層設計多功能信號發(fā)生器所調(diào)用。
2、其他信號部分原程序
其他各信號發(fā)生器可參照正弦信號發(fā)生器的設計方法設計或直接采用VHDL硬件描述語言進行設計。
LIBRARYIEEE;--遞增鋸齒波的設計
USEIEEE.STDLOGIC1164.ALL;
USEIEEE.STDLOGICUNSIGNED.ALL;
ENTITYsignal2IS--遞增鋸齒波signal1
PORT(clk,reset:INstd_logic;--復位信號reset,時鐘信號clk
q:OUTstd_logic_vector(7DOWNTO0));--輸出信號q
ENDsignal2;
ARCHITECTUREbOFsignal2IS
BEGIN
PROCESS(clk,reset)
VARIABLEtmp:std_logic_vector(7DOWNTO0);
BEGIN
IFreset='0'THEN
tmp:="00000000";
ELSITrising_ege(clk)THEN
IFtmp="11111111"THEN
tmp:="00000000";
ELSE
tmp:=tmp+1;--遞增信號的變化
ENDIF;
ENDIF;
q<=tmp:
ENDPROCESS;
ENDb;
LIBRARYIEEE;--方波的設計
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entitysignal5is--方波signal5
PORT(clk,reset:instd_logic;--復位信號reset,時鐘信號clk
q:outstd_logic_vector(7DOWNTO0));--輸出信號q,8位數(shù)字信號
ENDsignal5;
ARCHITEECTUREaOFsignal5IS
SIGNAL;a:std_logic;
BEGIN
PROCESS(clk,reset)
YARIABLEtmp:std_logic_vector(7downto0);
BEQIN
IFreset='0'then
a<='0';
elsifrising_edge(clk)THEN
IFtmp="11111111"THEN
tmp:="00000000";
ELSE
tmp:=tmp+1;
ENDIF;
iftmp<="10000000"then
a<='1';
else
a<='0';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(clk,a)
BEGIN
IFrising_edge(clk)THEN
IFa='1'THEN
q<="11111111";
ELSE
q<="00000000";
ENDIF;
ENDIF;
ENDPROCESS;
ENDa;
3、頂層電路的設計
將上述6個模塊生成符號,供頂層電路調(diào)用。這些模塊分別是:遞減鋸齒波信號產(chǎn)生模塊signall、遞增鋸齒波信號產(chǎn)生模塊signal2、三角波信號產(chǎn)生模塊signal3、階梯波信號產(chǎn)生模塊signal4、方波信號產(chǎn)生模塊signal5和數(shù)據(jù)選擇器mux51。頂層電路的連接如圖5所示。
圖5信號發(fā)生器頂層電路
4、D/A轉(zhuǎn)換器的連接
選擇一個D/A轉(zhuǎn)換器,將數(shù)據(jù)選擇器的輸出與D/A轉(zhuǎn)換器的輸入端連接。D/A轉(zhuǎn)換器的可選范圍很寬,這里以常用的DAC0832為例。DAC0832的連接電路如圖6所示。
圖6DAC0832的連接電路
5、實現(xiàn)與測試
信號發(fā)生器頂層電路的仿真波形如圖7所示,這里只就輸入選擇信號等于5時的情況進行仿真,此時輸出波形是方波,輸出的數(shù)字信號為周期性的全0或全1。
圖7信號發(fā)生器頂層電路的仿真波形
信號發(fā)生器的底層電路模塊也可以分別進行仿真,例如對階梯波信號產(chǎn)生模塊signal4進行仿真,仿真波形如圖8所示,輸出的數(shù)字信號為階梯狀變化。
圖8階梯波信號產(chǎn)生模塊signal4的仿真波形
6、結(jié)束語
硬件電路設計主要是設計相關模塊的設計思想的可視化,是相關模塊的電路圖的匯總和其相關仿真波形的集錦,該部分條理清晰,思路明確,從中我們可以清晰地看到該設計方案的具體模塊和整個設計的原理結(jié)構(gòu)實圖;程序設計這一部分主要闡述該設計的設計方法與設計思想,進一步從軟件設計上揭示設計構(gòu)思,主要包含了整個設計所用到的模塊的硬件描述語言的設計,本文設計思路清晰,通過QuartusII軟件進行波形仿真成功,特別是正弦信號發(fā)生器的LPM定制對于編程不是特別強的人員提供另一種途徑來實現(xiàn),加深理解EDA的層次設計思想,很好的把握住了教學的改革方向,更好的鍛煉了學生理論實踐的能力。