基于FPGA的函數(shù)信號發(fā)生器設(shè)計論文_第1頁
基于FPGA的函數(shù)信號發(fā)生器設(shè)計論文_第2頁
基于FPGA的函數(shù)信號發(fā)生器設(shè)計論文_第3頁
基于FPGA的函數(shù)信號發(fā)生器設(shè)計論文_第4頁
基于FPGA的函數(shù)信號發(fā)生器設(shè)計論文_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、基于FPGA的函數(shù)信號發(fā)生器題 目:多功能信號發(fā)生器的設(shè)計l 摘 要:在傳感器設(shè)計、模擬試驗等方面經(jīng)常需要產(chǎn)生一些測試信號,一臺能方便產(chǎn)生各種有規(guī)律和不規(guī)則信號的任意信號產(chǎn)生器將減少設(shè)備的研制復雜度。從軟件的角度著手,提出一種任意信號發(fā)生器軟件的設(shè)計方法,這種軟件可以在各種任意信號發(fā)生器硬件之間移植重復利用,所以具有良好的應(yīng)用前景。介紹本任意信號產(chǎn)生器的原理及軟件結(jié)構(gòu)設(shè)計和信號數(shù)據(jù)的產(chǎn)生方法,給出部分由本任意信號產(chǎn)生器產(chǎn)生的信號波形圖。 關(guān)鍵詞:任意信號發(fā)生器;軟件設(shè)計;數(shù)字射頻存儲器bcb;信號波形圖 l Abstract:It is needed to generate some test

2、 signals in sensor designing and in experiment environment simulating.a set of arbitrary signal generator which can generate various kinds of regulation and irregular signals will reduce the research complications and manufacture complications.this paper brings forward a designing method of software

3、 of the arbitrary signal generator throw the aspect of using the software.it can be reused among various kinds of the arbitrary signal generators,so it has a good application foreground.this paper first introduces the main principles,immediately after introduces the designing method of the software

4、structure and the creation method of the signal data,at last shows a part of the wave forms of the signal data created by the arbitrary signal generator. keywords:arbitrary signal generator;software design;drfm bcb;signal waveform picture 1、引言在科學研究、工程教育及生產(chǎn)實踐中,常常需要用到信號發(fā)生器。而信號發(fā)生器的主要功能是為各種場合產(chǎn)生所需的信號波形。長

5、期使用的信號發(fā)生器,大部分是由一些電子元器件組成的模擬電路構(gòu)成的,這類儀器作為信號源,頻率可達上百MHz,但是其體積大,損耗也大。EDA技術(shù)是現(xiàn)代電子信息工程領(lǐng)域的一門新技術(shù)它是在先進的計算機工作平臺上開發(fā)出來的一整套電子系統(tǒng)設(shè)計的軟硬件工具,它提供了先進的電子系統(tǒng)設(shè)計方法。隨著EDA技術(shù)的不斷發(fā)展,當大規(guī)??删幊踢壿嬈骷﨔PGA 和CPLD出現(xiàn),并有了相應(yīng)EDA設(shè)計工具之后,其含義就不僅局限在當初的電路版圖的設(shè)計自動化概念上,而當今的EDA技術(shù)更多的是指芯片內(nèi)的電子系統(tǒng)設(shè)計自動化。硬件描述語言的發(fā)展至今已有幾十年的歷史,并已成功地應(yīng)用到系統(tǒng)的仿真、驗證和設(shè)計綜合等方面。FPGA是英文Fiel

6、d Programmable Gate Array的縮寫,即現(xiàn)場可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成電路硬件描述語言)誕生于1982年,是由美國國防部開發(fā)的一種快速設(shè)計電路的工具,目前已經(jīng)成為IEEE(The Institute of Electrical and Elec

7、tronics Engineers)的一種工業(yè)標準硬件描述語言。相比傳統(tǒng)的電路系統(tǒng)的設(shè)計方法,VHDL具有多層次描述系統(tǒng)硬件功能的能力,支持自頂向下(Top to Down)和基于庫(LibraryBased)的設(shè)計的特點,因此設(shè)計者可以不必了解硬件結(jié)構(gòu)。從系統(tǒng)設(shè)計入手,在頂層進行系統(tǒng)方框圖的劃分和結(jié)構(gòu)設(shè)計,在方框圖一級用VHDL對電路的行為進行描述,并進行仿真和糾錯,然后在系統(tǒng)一級進行驗證,最后再用邏輯綜合優(yōu)化工具生成具體的門級邏輯電路的網(wǎng)表,下載到具體的FPGA器件中去,從而實現(xiàn)可編程的專用集成電路(ASIC)的設(shè)計。波形發(fā)生器在生產(chǎn)實踐和科技領(lǐng)域中有著廣泛的應(yīng)用。例如在通信、廣播、電視系

8、統(tǒng)中,都需要射頻(高頻)發(fā)射,這里的射頻波就是載波,把音頻(低頻)、視頻信號或脈沖信號運載出去,就需要能夠產(chǎn)生高頻的振蕩器。在工業(yè)、農(nóng)業(yè)、生物醫(yī)學等領(lǐng)域內(nèi),如高頻感應(yīng)加熱、熔煉、淬火、超聲診斷、核磁共振成像等,都需要功率或大或小、頻率或高或低的振蕩器?,F(xiàn)在波形發(fā)生器的實現(xiàn)方法通常有以下幾種:(1)用分立元件組成的波形發(fā)生器:通常是單一波形發(fā)生器且頻率不高,其工作不很穩(wěn)定,不易調(diào)試。(2)可以由晶體管、運放IC等通用器件制作,更多的則是用專門的波形發(fā)生器IC產(chǎn)生。早期的波形發(fā)生器IC,如L8038、BA205、R2207/2209等,它們的功能較少,精度不高,頻率上限只有300kHz,無法產(chǎn)生更

9、高頻率的信號,調(diào)節(jié)方式也不夠靈活,頻率和占空比不能獨立調(diào)節(jié),二者互相影響。(3)利用單片集成芯片的波形發(fā)生器:能產(chǎn)生多種波形,達到較高的頻率,且易于調(diào)試。鑒于此,美國馬克西姆公司開發(fā)了新一代波形發(fā)生器,它克服了(2)中芯片的缺點,可以達到更高的技術(shù)指標,是上述芯片望塵莫及的。此波形發(fā)生器頻率高、精度好,因此它被稱為高頻精密波形發(fā)生器IC。在鎖相環(huán)、壓控振蕩器、頻率合成器、脈寬調(diào)制器等電路的設(shè)計上都是優(yōu)選的器件。2、本設(shè)計的基本思路: Reset是復位鍵,但reset等于0時,信號發(fā)生器不產(chǎn)生任何函數(shù),只有當reset等于1時,才會產(chǎn)生相應(yīng)的波形;當adress=”000”產(chǎn)生方波;當adres

10、s=”001”產(chǎn)生階梯波;當adress=”010”產(chǎn)生鋸齒波;當adress=”011”產(chǎn)生三角波;當adress=”100”產(chǎn)生正弦波;3 系統(tǒng)總體方案設(shè)計該方案采用FPGA作為中心控制邏輯,由于其具有高速和邏輯單元數(shù)多的特點,因此可以由FPGA、DAC和I/V運放直接構(gòu)成信號源發(fā)生器的最小系統(tǒng)。在該方案中通過FPGA控制DAC并直接向DAC發(fā)送數(shù)據(jù),這樣就提高了所需波形的頻率并繞過了通用存儲器讀取速度慢的特點,再加上外部的開關(guān)按鈕就能夠簡單控制波形切換與頻率選擇。當然,為了增加人機界面的交互性與系統(tǒng)功能,可以在原有的基礎(chǔ)上添加一個標準鍵盤和LED或LCD,這樣就能夠通過編程實現(xiàn)波形的任意

11、性、幅度變化的靈活性時 鐘 系 統(tǒng) 控 制 器復 位波形選擇頻率選擇方波階梯波鋸齒波遞增鋸齒波遞減三角波正弦波TLC7528 I/V轉(zhuǎn)換運放輸出分頻器 FPGA 系統(tǒng)方案圖4、函數(shù)發(fā)生器的硬件設(shè)計 波形發(fā)生器制作過程中用到的硬件有: 5V的電源、以ALTERA公司生產(chǎn)的芯片,和以這個目標芯片為核心的核心板,核心板上有穩(wěn)壓管及其供電系統(tǒng)、50MHZ的晶振、SDRAM:8Mbyte、Flash:2Mbyte,此外所有IO配置管腳通過插針引出,下載設(shè)計到目標芯片時用到的并口下載數(shù)據(jù)線;還用到選擇波形的按鈕。由于這些波形產(chǎn)生都是在FPAG芯片中產(chǎn)生,產(chǎn)生的都是數(shù)字信號,比如三角波,它從00000000

12、,CLK來一個上升延信號系統(tǒng)會自動給它加1,變成了00000001,再把這個8位二進制的信號輸出來,這樣周而復始地工作。而FPGA只是數(shù)字信號處理器,在模擬信號轉(zhuǎn)換它是顯得很無助的。所以在它的輸出端接上一個數(shù)模轉(zhuǎn)換器,把數(shù)字信號轉(zhuǎn)換成模擬信號輸出。所以它由兩部分組成:數(shù)據(jù)產(chǎn)生,數(shù)據(jù)的轉(zhuǎn)換。1、FPGA芯片(數(shù)據(jù)產(chǎn)生)在本次設(shè)計方案中,F(xiàn)PGA芯片采用ALTERA公司生產(chǎn)的EPF10K10LC84-4型芯片。ALTERA 公司作為全球最大的可編程邏輯器件供應(yīng)商,可提供MAX7000S(E)、MAX7000A(AE)、MAX7000B、FLEX6000A、FLEX 10KA、FLEX 10KE 等

13、系列產(chǎn)品。這些產(chǎn)品可用于組合邏輯、時序、算法、雙端口RAM、FIFO的設(shè)計。在加上ALTERA 公司的MAX+pulsII 集成開發(fā)軟件,集設(shè)計輸入、處理、校驗和器件編程于一體,集成度高,使用方便,大大縮短產(chǎn)品的開發(fā)周期。MAX EPF10K10LC84-4 是一種復雜可編程邏輯器件,是84pinPLCC 封裝,另外還有其它類型的管腳和封裝,選擇性強,該IC 具有以下主要性能:(1)、嵌入式可編程邏輯器件,提供了集成系統(tǒng)于單個可編程邏輯器件中的性能;(2)、高密度:提供10000250000 個可用門,614440960 位內(nèi)部RAM;(3)、低功耗:多數(shù)器件在靜態(tài)模式下電流小于0.5mA,在

14、2.5V、3.3V 或5.0v 下工作;(4)、高速度:時鐘鎖定和時鐘自舉選項分別用于減少時鐘延時/過沖和時鐘倍頻;器件內(nèi)建立樹形分布的低失真時鐘;具有快速建立時間和時鐘到輸出延時的外部寄存器;(5)、靈活的互連方式:快速、互連延時可預(yù)測的快速通道(Fast Track)連續(xù)式布線結(jié)構(gòu);實現(xiàn)快速加法、計數(shù)、比較等算術(shù)邏輯功能的專用進位鏈;實現(xiàn)高速、多輸入(扇入)邏輯功能的專用級聯(lián)鏈;實現(xiàn)內(nèi)部三態(tài)的三態(tài)模擬;多達六個全局的時鐘信號和四個全局清除信號;(6)、支持多電壓I/O 接口;(7)、強大的引腳功能:每個引腳都有一個獨立的三態(tài)輸出使能控制及漏極開路配置選項及可編程輸出壓擺率控制;FLEX10

15、KA、10LE、10KS 器件都支持熱插拔;(8)、多種配置方式:內(nèi)置JTAG 邊界掃描測試電路,可通過外部EPROM、智能控制或JTAG 接口實現(xiàn)在電路重構(gòu)(ICR);( 9 )、多種封裝形式:引腳范圍為84600,封裝形式有TQFP、PQFP、BGA 和PLCC 等,同一封裝的FLEX 10K 系列器件的引腳相兼容。EPF10K10LC84-4管腳圖5、函數(shù)發(fā)生器的軟件設(shè)計(1)、正弦波的設(shè)計FPGA輸出的數(shù)字信號需要經(jīng)DA轉(zhuǎn)換器轉(zhuǎn)換成各種波形輸出。而由DA轉(zhuǎn)換器可知,TLC7528的分辨率是8位,這樣,將模擬信號的正弦波在一個周期內(nèi)平均分成255份,由于已經(jīng)確定每周期的取樣點數(shù)為100,

16、即每隔2/100的間隔取值一次,所取的值為該點對應(yīng)的正弦值,通過計算可以獲得100個取樣點的值;也可以通過查表的方法取得100個取樣點的值。正弦波產(chǎn)生模塊sinbo:library ieee;-正弦波use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Zhengxianbo isport (clk,reset :in std_logic;-clock時鐘信號,clrn復位信號qt: out std_logic_vector(7 downto 0); -8位數(shù)據(jù)輸出end Zhengxianbo;architect

17、ure behave of Zhengxianbo issignal q: std_logic_vector(8 downto 0);beginprocess(clk,reset) variable tmp : integer range 63 downto 0;begin if reset='0' then q<="000000000"tmp:=0; elsif clk'event and clk='1' then if tmp=63 then tmp:=0;else tmp:=tmp+1;end if;case tmp is

18、 when 0 =>q<="100000000"when 1 =>q<="100011001"when 2 =>q<="100110010"when 3 =>q<="101001010" when 4 =>q<="101100010"when 5 =>q<="101111000"when 6 =>q<="110001110"when 7 =>q<="1

19、10100010" when 8 =>q<="110110100"when 9 =>q<="111000101"when 10 =>q<="111010100"when 11 =>q<="111100001" when 12 =>q<="111101110"when 13 =>q<="111110100"when 14 =>q<="111111010"when 1

20、5 =>q<="111111110" when 16 =>q<="111111111"when 17 =>q<="111111110"when 18 =>q<="111111010"when 19 =>q<="111110100" when 20 =>q<="111101110"when 21 =>q<="111100001"when 22 =>q<="

21、;111010100"when 23 =>q<="111000101" when 24 =>q<="110110100"when 25 =>q<="110100010"when 26 =>q<="110001110"when 27 =>q<="101111000" when 28 =>q<="101100010"when 29 =>q<="101001010"wh

22、en 30 =>q<="100110010"when 31 =>q<="100011001" when 32 =>q<="100000000"when 33 =>q<="011100111"when 34 =>q<="011001110"when 35 =>q<="010110110" when 36 =>q<="010011110"when 37 =>q<=&

23、quot;010000111"when 38 =>q<="001110000"when 39 =>q<="001011100" when 40 =>q<="001001100"when 41 =>q<="000111011"when 42 =>q<="000101100"when 43 =>q<="000011111" when 44 =>q<="000010010&quo

24、t;when 45 =>q<="000001100"when 46 =>q<="000000110"when 47 =>q<="000000010" when 48 =>q<="000000001"when 49 =>q<="000000010"when 50 =>q<="000000110"when 51 =>q<="000001100" when 52 =>q&l

25、t;="000010010"when 53 =>q<="000011111"when 54 =>q<="000101100"when 55 =>q<="000111011" when 56 =>q<="001001100"when 57 =>q<="001011110"when 58 =>q<="001110000"when 59 =>q<="010000100&

26、quot; when 60 =>q<="010011011"when 61 =>q<="010110010"when 62 =>q<="011001010"when 63 =>q<="011100101" when others =>NULL;end case;end if;qt<=q(8 downto 1); end process;end behave;(2)、方波的設(shè)計由于方波的占空比是50,且只有兩個狀態(tài),所以方波的取樣比較簡單。它的值經(jīng)過128個

27、時鐘脈沖秒跳變一次,形成輸出方波,也就是從00經(jīng)過128個時鐘脈沖后變?yōu)镕F,從而實現(xiàn)了0101 的值變化。方波產(chǎn)生模塊fangbo:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fangbo isport(reset:in std_logic; clk: in std_logic; cnt:buffer std_logic_vector(7 downto 0);end entity;architecture one of

28、fangbo isbeginprocess(clk)variable count:integer range 0 to 500;begin if reset='0' then count:=0; elsif rising_edge(clk) then if count=500 then cnt<="00000000" count:=0; elsif count=255 then cnt<="11111111" count:=count+1; else count:=count+1; end if;end if;end proc

29、ess;end one;(3)、階梯波形的設(shè)計可采用0,50,100,150···,每次間隔50進行設(shè)計階梯波產(chǎn)生模塊jietibo:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity jietibo isport(reset:in std_logic; clk: in std_logic; cnt:buffer std_logic_vector(7 downto 0);end entity;arch

30、itecture one of jietibo isbeginprocess(clk)variable count:integer range 0 to 500;begin if reset='0' then count:=0; elsif rising_edge(clk) then count:=count+1; if count=500 then count:=0; elsif count>=450 then cnt<="11011000" elsif count>=400 then cnt<="11000000&quo

31、t; elsif count>=350 then cnt<="10101000" elsif count>=300 then cnt<="10010000" elsif count>=250 then cnt<="01110000" elsif count>=200 then cnt<="01100000" elsif count>=150 then cnt<="01000100" elsif count>=100 then cn

32、t<="00110000" elsif count>=50 then cnt<="00011000" else cnt<="00000000" end if;end if;end process;end one;(4)鋸齒波的設(shè)計采用0255循環(huán)加法計數(shù)器實現(xiàn)。通過賦值給輸出值。clk是時鐘信號,當復位信號有效時,輸出為0,輸出最小值設(shè)為“0”,最大值設(shè)為“255”,從“0”開始,當時鐘檢測到有上升沿的時候,輸出就會呈現(xiàn)遞增的趨勢,加“1”。鋸齒波產(chǎn)生模塊juchi:library ieee;use ieee.

33、std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity juchibo isport(reset:in std_logic; clk: in std_logic; cnt:buffer std_logic_vector(7 downto 0);end entity;architecture one of juchibo isbeginprocess(clk)begin if reset='0' then cnt<="00000000"

34、elsif rising_edge(clk) then if cnt="11111111"then cnt<="00000000" else cnt<=cnt+1; end if; end if;end process;end one;(5)、三角波的設(shè)計采用02550循環(huán)加減法計數(shù)器實現(xiàn)三角波產(chǎn)生模sanjiaobo:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sanj

35、iaobo isport(reset:in std_logic; clk: in std_logic; cnt:buffer std_logic_vector(7 downto 0);end entity;architecture one of sanjiaobo isbeginprocess(clk)variable up:integer range 0 to 1;begin if reset='0' then cnt<="00000000" elsif rising_edge(clk) then if up=1 then if cnt="

36、11111111" then up:=0; cnt<="11111110" else cnt<=cnt+1; end if; else if cnt="00000000"then up:=1; cnt<="00000001" else cnt<=cnt-1; end if; end if;end if;end process;end one;(6)、分頻器數(shù)控分頻器的功能就是當在輸入端給定不同輸入數(shù)據(jù)時,將對輸入的時鐘信號有不同的分頻比。用計數(shù)值可并行預(yù)置的加法計數(shù)器設(shè)計完成,方法是將計數(shù)溢出位與預(yù)置數(shù)加載輸入信號相接即可。本次設(shè)計采用八位的數(shù)控分頻器。LIBRARY IEEE;-分頻器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PULSE ISPORT ( CLK: in std_logic;D:in std_logic_vector(7 downto 0);FOUT:out std_logic);END ENTITY PULSE;ARCHITECTURE behave OF PULSE IS SIGNAL FULL:STD_LOGIC;BEGIN P_REG:PR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論