把相對成熟的技術應用到某些特定領域如通訊,視頻,信息處理等等開發出滿足行業需要并能被行業客戶接受的產品這方面主要是FPGA技術和專業技術的結合問題,另外還有就是與專業客戶的界面問題產品設計還包括專業工具類產品及民用產品。FPGA因為具備接口,控制,功能IP,內嵌CPU等特點有條件實現一個構造簡單,固化程度高,功能全面的系統產品設計將是FPGA技術應用最廣大的市場,具有極大的爆發性的需求空間產品設計對技術人員的要求比較高。為解決相關FPGA工程師及愛好者提供相關實際案例和電路參考,電子發燒友網隆重整合推出《FPGA設計實例全攻略》系列,后期會陸續推出相關章節,以饗讀者,敬請關注。
一、基于FPGA的信號發生器設計
以FPGA 芯片為載體, 通過QuartusII 的LPM_ROM 模塊和VHDL 語言為核心設計一個多功能信號發生器,根據輸入信號的選擇可以輸出遞增鋸齒波、遞減鋸齒波、三角波、階梯波和方波等5 種信號,通過QuartusII 軟件進行波形仿真、定時分析,仿真正確后,利用實驗板提供的資源,下載到芯片中實現預定功能。
信號發生器又稱為波形發生器, 是一種常用的信號源,廣泛應用于電子電路、通信、控制和教學實驗等領域。它是科研及工程實踐中最重要的儀器之一, 以往多用硬件組成,系統結構比較復雜,可維護性和可操作性不佳。隨著計算機技術的發展,信號發生器的設計制作越來越多的是用計算機技術,種類繁多,價格、性能差異很大。用FPGA 或CPLD 來實現,它的優點是可以進行功能仿真,而且FPGA 和CPLD 的片內資源豐富,設計的流程簡單。用FPGA 所構成的系統來產生波形信號,這個系統既能和主機系統相連,用相應的上層軟件展示波形信號, 又方便程序的編寫, 而且還有A/D0809接口可以產生模擬信號的輸出和外面的示波器相連。
1 正弦信號發生器的LPM 定制
正弦信號發生器由計數器或地址發生器(6 位)、正弦信號數據ROM (6 位地址線,8 位數據線, 含有64 個8 位數據, 一個周期)、原理圖頂層設計和8 位D/A ( 實驗中用DAC0832 代替)。
其框圖如圖1 所示。其中信號產生模塊將產生所需的各種信號,這些信號的產生可以有多種方式,如用計數器直接產生信號輸出,或者用計數器產生存儲器的地址,在存儲器中存放信號輸出的數據。信號發生器的控制模塊可以用數據選擇器實現, 用8 選1 數據選擇器實現對5 種信號的選擇。
?
圖1 信號發生器結構框圖
最后將波形數據送入D/A 轉換器,將數字信號轉換為模擬信號輸出。用示波器測試D/A 轉換器的輸出,可以觀測到5 種信號的輸出。
1.1 定制初始化數據文件
QuartusII 能接受的LPM_ROM 模塊中的初始化數據文件的格式有兩種:。mif 格式文件和。hex 格式文件。實際應用中只要使用其中一種格式的文件即可。下面采用。mif 格式文件,調出產生ROM 數據文件大小的選擇窗。根據64 點8 位正弦數據的情況,可選ROM 的數據數Number 為64,數據寬Word size 取8 位。單擊OK 按鈕,將出現圖2 所示的空的。mif數據表格,表格中的數據格式可通過鼠標右鍵單擊窗口邊緣的地址數據彈出的窗口選擇。
?
圖2 .mif 數據表格
將波形數據填入mif 文件表中也可以使用QuartusII 以外的編輯器設計MIF 文件,其格式如下:
#include
#include "math.h"
main()
{int i;float s;
for (i=0;i<1024; i++)
{ s = sin(atan(1)*8*i/1024);
printf("%d : %d; ",i,(int)((s+1)*1023/2)); }}
把上述程序編譯成程序后, 可在DOS 命令行下執行命令:
romgen > sin_ rom. mif;
1.2 定制LPM 元件
打開Mega Wizard Plug_In Manager 初始對話框, 選擇Create a new custom… 項。單擊Next 按鈕后,選擇Storage 項下的LPM_ROM, 再選擇ACEX1K 器件和VHDL 語言方式;最后輸入ROM 文件存放的路徑和文件名:F:sing_gntdata_rom (定制的ROM 元件文件名),單擊Next 按鈕,選擇ROM 控制線、地址線和數據線。這里選擇地址線位寬和ROM 中數據數分別為6 和64; 選擇地址鎖存控制信號inclock。
對于地址信號發生器的設計。方法一:用VHDL 語言設計6 位計數器,產生其元件符號;方法二:仍采用LPM 定制的方法。
?
1.3 完成頂層設計
按圖3 畫出頂層原理圖,然后進行編譯,波形仿真如圖4所示。
?
圖3 簡易正弦信號發生器頂層電路設計
?
圖4 當前工程仿真波形輸出
對當前設計通過執行Quartus II 的命令Create ∠ Update/ Create Symbol Files for Current File,可以為設計電路建立一個元件符號,以便被頂層設計多功能信號發生器所調用。
2 其他信號部分原程序
其他各信號發生器可參照正弦信號發生器的設計方法設計或直接采用VHDL 硬件描述語言進行設計。
LIBRARY IEEE;--遞增鋸齒波的設計
USE IEEE.STD LOGIC 1164.ALL;
USE IEEE.STD LOGIC UNSIGNED.ALL;
ENTITY signal2 IS --遞增鋸齒波signal1
PORT(clk,reset:IN std_logic;--復位信號reset, 時鐘信號clk
q:OUT std_logic_vector (7 DOWNTO 0));--輸出信號q
END signal2;
ARCHITECTURE b OF signal2 IS
BEGIN
PROCESS(clk,reset)
VARIABLE tmp:std_logic_vector(7 DOWNTO 0);
BEGIN
IF reset='0' THEN
tmp:="00000000";
ELSIT rising_ege(clk)THEN
IF tmp="11111111"THEN
tmp:="00000000";
ELSE
tmp:=tmp+1; --遞增信號的變化
END IF;
END IF;
q<=tmp:
END PROCESS;
END b;
LIBRARY IEEE;--方波的設計
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity signal5 is --方波signal5
PORT(clk,reset:in std_logic; --復位信號reset,時鐘信號clk
q:out std_logic_vector (7 DOWNTO 0)); --輸出信號q,8 位數字信號
END signal5;
ARCHITEECTURE a OF signal5 IS
SIGNAL; a:std_logic;
BEGIN
PROCESS(clk,reset)
YARIABLE tmp:std_logic_vector(7 downto 0);
BEQIN
IF reset='0' 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
q<="11111111";
ELSE
q<="00000000";
END IF;
END IF;
END PROCESS;
END a;
3 頂層電路的設計
將上述6 個模塊生成符號,供頂層電路調用。這些模塊分別是:遞減鋸齒波信號產生模塊signall、遞增鋸齒波信號產生模塊signal2、三角波信號產生模塊signal3、階梯波信號產生模塊signal4、方波信號產生模塊signal5 和數據選擇器mux51。頂層電路的連接如圖5 所示。
?
圖5 信號發生器頂層電路
4 D/A 轉換器的連接
選擇一個D/A 轉換器,將數據選擇器的輸出與D/A 轉換器的輸入端連接。D/A 轉換器的可選范圍很寬,這里以常用的DAC0832 為例。DAC0832 的連接電路如圖6 所示。
?
圖6 DAC0832 的連接電路
5 實現與測試
信號發生器頂層電路的仿真波形如圖7 所示,這里只就輸入選擇信號等于5 時的情況進行仿真,此時輸出波形是方波,輸出的數字信號為周期性的全0 或全1。
?
圖7 信號發生器頂層電路的仿真波形
信號發生器的底層電路模塊也可以分別進行仿真,例如對階梯波信號產生模塊signal4 進行仿真,仿真波形如圖8 所示,輸出的數字信號為階梯狀變化。
?
圖8 階梯波信號產生模塊signal4 的仿真波形
6 結束語
硬件電路設計主要是設計相關模塊的設計思想的可視化,是相關模塊的電路圖的匯總和其相關仿真波形的集錦,該部分條理清晰,思路明確,從中我們可以清晰地看到該設計方案的具體模塊和整個設計的原理結構實圖;程序設計這一部分主要闡述該設計的設計方法與設計思想,進一步從軟件設計上揭示設計構思,主要包含了整個設計所用到的模塊的硬件描述語言的設計, 本文設計思路清晰,通過QuartusII 軟件進行波形仿真成功,特別是正弦信號發生器的LPM 定制對于編程不是特別強的人員提供另一種途徑來實現,加深理解EDA 的層次設計思想,很好的把握住了教學的改革方向,更好的鍛煉了學生理論聯系實踐的能力。
二、基于FPGA的DDS信號發生器設計
引 言
信號發生器又稱信號源或振蕩器,在生產實踐和科技領域中有著廣泛的應用。能夠產生多種波形,如三角波、鋸齒波、矩形波(含方波)、正弦波的電路被稱為函數信號發生器。函數信號發生器的實現方法通常是采用分立元件或單片專用集成芯片,但其頻率不高,穩定性較差,且不易調試,開發和使用上都受到較大限制。隨著可編程邏輯器件(FPGA)的不斷發展,直接頻率合成(DDS)技術應用的愈加成熟,利用DDS原理在FP-GA平臺上開發高性能的多種波形信號發生器與基于DDS芯片的信號發生器相比,成本更低,操作更加靈活,而且還能根據要求在線更新配置,系統開發趨于軟件化、自定義化。本文研究了基于FPGA的DDS信號發生器設計,實現了滿足預定指標的多波形輸出。
1 DDS基本原理
DDS建立在采樣定理基礎上,首先對需要產生的波形進行采樣,將采樣值數字化后存入存儲器作為查找表,然后通過查表讀取數據,再經D/A轉換器轉換為模擬量,將保存的波形重新合成出來。DDS基本原理框圖如圖1所示。
?
除了濾波器(LPF)之外,DDS系統都是通過數字集成電路實現的,易于集成和小型化。系統的參考時鐘源通常是一個具有高穩定性的晶體振蕩器,為各組成部分提供同步時鐘。頻率控制字(FSW)實際上是相位增量值(二進制編碼)作為相位累加器的累加值。相位累加器在每一個參考時鐘脈沖輸入時,累加一次頻率字,其輸出相應增加一個步長的相位增量。由于相位累加器的輸出連接在波形存儲器(ROM)的地址線上,因此其輸出的改變就相當于查表。這樣就可以通過查表把存儲在波形存儲器內的波形抽樣值(二進制編碼)查找出來。ROM的輸出送到D/A轉換器,經D/A轉換器轉換成模擬量輸出。
2 系統總體方案設計
該設計以FPGA開發平臺為核心,將各波形的幅值/相位量化數據存儲在ROM內,按照設定頻率,以相應頻率控制字k為步進,對相位進行累加,以累加相位值作為地址碼讀取存放在存儲器內的波形數據,經D/A轉換和幅度控制、濾波即可得到所需波形。波形發生器采取全數字化結構,用硬件描述語言Verilog設計實現其頻率可調可顯示。經開發平臺的D/A轉化和外加濾波整形處理波形數據,理論上能夠實現任意頻率的各種波形。系統總體設計方框圖如圖2所示。
?
系統按工作原理和控制對象的先后分為三個功能單元:波形數據產生單元、D/A轉化單元和濾波整形處理單元。波形數據產生單元除具有波形數據輸出功能外,還有頻率設置和輸出顯示功能。波形信號頻率可設置范圍為0~99 999 999 Hz,系統時鐘采用外接晶體振蕩器40 MHz時鐘脈沖,頻率穩定度優于10-4輸出采用8位LED數碼循環動態顯示。D/A轉換單元負責對從ROM表里讀取的波形數據進行D/A轉換,對D/A轉換器件的選用從建立時間、位數、轉化誤差和轉換時間等四個方面考慮。濾波整形處理單元完成對D/A轉換的模擬波進行平滑,濾除雜波和高頻干擾,補償頻帶損耗和幅度損失,最終輸出低誤差、高質量、滿足題設要求的波形。
?
3 系統功能單元實現
3.1 波形數據產生單元
波形數據產生單元是信號發生器設計的主體。在此,采用DDS原理設計的信號發生器能完成三種波形(正弦、三角和方波)數據的產生,而且根據控制信號還可完成選定波形指定頻率的輸出。波形數據產生單元按功能實現上的相互聯系可劃分為頻率控制字生成模塊、相位累加器模塊和波形數據ROM表模塊,如圖3所示。其中,頻率控制字生成模塊可根據輸入產生指定頻率字,同時顯示輸入頻率數字。相位累加器模塊負責對所選波形的相位尋址,以頻率控制字作為步長反復進行累加運算。波形數據ROM表模塊存放三種波形的幅值/相位量化值,通過地址選擇相應波形的數據。
系統輸入控制使用4×4鍵盤.鍵盤主要按鍵功能介紹如下:
“0~9”:數字鍵,設定信號頻率;
“確定”:用于對波形信號設置的確認,波形信號的設置必須“確定”后才有效;
“←”:刪除已輸入信號頻率數字的最后一位,用于修改設置的頻率;
“清零”:將頻率數字快速全部清零;
“↑”:步進增大控制;
“↓”:步進減小控制。
設定頻率輸出范圍為1 kHz~10 MHz,頻率步進為50 Hz。系統輸出采用8個LED數碼管,以掃描方式顯示(單位為Hz)頻率數字。根據DDS原理,以步進值50Hz作為頻率控制字1,那么最大值10 MHz對應的頻率控制字為200 000,用18位二進制數值就可以表示(218>200 000)。從抽樣值恢復出原波形數據,理論上每個周期波形數據至少抽取2個點,考慮到實際應用時受頻率損耗、線間串擾等因素的限制,該設計采用22 b的頻率控制字和相位累加器,4 Kb的8位波形ROM表,取相位累加器輸出的高12 b尋址波形數據,三種波形按幅值/相位對應關系分別存儲782個數據。故各波形數據單位周期有800 768(782×210)個相位狀態,完全滿足任一波形在單位周期內取4個幅值點的要求,可保證即使輸出最大頻率的波形仍能達到較好的效果。波形選擇功能由兩位開關組合實現,共有四種狀態,其中三組用來表征不同的波型,另一組留作擴展波形用。
3.2 D/A轉換單元
數/模轉換單元是繼波形數據產生單元之后,將數字量形式的波形幅值轉換成所要求的合成頻率的模擬量形式信號。DAC輸出信號實際上是階梯模擬信號,需在數/模轉換后利用低通濾波器對波形進行平滑處理。在此,采用ADI公司生產的單片雙8位CMOS乘法數/模轉換器AD7528,線性度達到1/2,轉換時間達到納秒級,可以很準確地進行10 MHz信號的量化運算。
3.3 濾波處理單元
濾波器是一種能通過有用頻率信號而同時抑制(或衰減)無用頻率信號的電子裝置。由于運算放大器具有近似理想的特性,且可以省去電感,得到接近理論預測的頻率響應特性。構成有源濾波電路后還具有一定的電壓放大和緩沖作用,并能減小體積。綜合考慮,系統采用運算放大器SL560構成二階低通濾波器。
4 系統功能仿真和驗證分析
4.1 頻率控制字生成模塊仿真與分析
頻率控制字的生成直接影響著波形數據的尋址,該模塊負責快速記錄并實時顯示輸入的頻率數字,準確計算得到相應的頻率控制字。系統鍵盤為高速動態掃描(頻率為200Hz),采用狀態機設計,設置了按鍵去抖動功能。在FPGA開發平臺對該模塊進行功能驗證,整體無誤操作產生,幾乎沒有時滯效應,按鍵的防抖動效果也良好,達到了預期的目的。
4.2 相位累加器模塊仿真與分析
相位累加器用于實現相位累加,并存儲其累加結果。當前,相位累加器的值和時鐘周期到來后的相位累加器的值相差k(k為頻率控制字)。該模塊的仿真波形如圖4所示。
?
4.3 實驗波形觀測與誤差分析
信號發生器功能驗證無誤,用示波器觀測實驗波形如圖5所示。
?
檢測輸入頻率為0~10 MHz時,波形形狀均良好,未出現明顯失真。計算理論誤差為0.095%,在實測中發現,波形數字的誤差相對很小,不足0.1 %。由于濾波整形電路存在高頻耦合通路,產生線間串擾,對濾波效果形成了不利影響,因此濾波器設計必須滿足頻帶寬,截止特性好,抗干擾性強等特性。
5 結 語
介紹了以直接數字頻率合成技術(DDS)為基礎的波形信號發生器工作原理和設計過程,并在FPGA實驗平臺上設計實現了滿足各功能指標的信號發生器。系統硬件除需外加濾波整形電路外,其余部分均可在FPGA開發實驗系統KH-310上集成開發,系統軟件可在Quartus下編寫代碼,實現數據信息處理和控制操作等功能。整體開發環境成熟,應用工具齊全,隨著FPGA性價比的不斷提高,基于FPGA平臺開發信號發生器將逐步走向標準化、規模化和產品化。
現代電子和通信技術的發展,對信號發生器提出了更高、更嚴格的要求。除了對信號頻率范圍、帶寬和頻率分辨率的嚴格限制外,對信號的波型及調制特性等也有著苛刻的規定。研究和開發具有更高性價比的信號發生器將是當前和今后一段時間內亟需解決的課題。這里旨在建立一種基于FPGA的簡單數字信號發生器設計方法。若能充分利用FPGA強大的數據運算處理能力以及編程靈活、運行速率快等優點,合理整合IP核資源和SoPC技術,簡化設計結構,一定可以設計出功能多樣、性能更加出色的信號發生器。
評論
查看更多