時間:2014-04-09 16:40:08來源:張乙丑
摘要 基于FPGA的函數發生器主要實現方波、鋸齒波和正弦波等,基于FPGA/CPLD開發設計數字系統設計的函數發生器電路簡單、可靠性好,而且EDA工具可以在硬件條件不足的情況下對其進行編譯、綜合、布線,可實現大致地系統仿真。本系統使用VHDL語言編寫,實現方波、鋸齒波和正弦波等。最后,通過QuartusⅡ進行軟件仿真測試和使用實驗箱DICE-EH2000實驗系統進行硬件驗證,使整個設計更加緊湊、穩定且可靠。
關鍵詞 FPGA 函數發生器 VHDL QuartusⅡ
DesignofFunctiongeneratorBasedonFPGA
1引言
傳統數字函數發生器多數由單片機或DSP來實現。而基于FPGA等可編程邏輯器件的可編程邏輯技術是近年來發展起來的新興技術,FPGA器件具有很高的集成度以及靈活的編程方式,因此,可以考慮利用FPGA器件,將數字函數發生器與FPGA相結合,設計出一種簡單而高效的數字函數發生器系統[1]。
本文所設計的函數發生器是一個基于FPGA的數字頻率合成器,該系統在軟件仿真時,選用了實驗箱DICE-EH2000實驗系統Altera公司生產的ACEX系列的EP1K30TC144-3[2]。ACEX系列是Altera公司在98年推出的2.5VSRAM工藝的PLD(FPGA),從3萬門到25萬門,主要有10K30E、10K50E、10K100E、帶嵌入式存儲塊(EAB)。較早期的型號還有FLEX10K(5V)、FLEX10KA(3.3v)、5v的10K和3.3v的10KA已基本不推廣,10KE目前也已使用較少,逐漸被ACEX1K和Cyclone取代。ACEX1K是2000年推出的2.5v低價格SRAM工藝PLD(FPGA),結構與10KE類似,帶嵌入式存儲塊(EAB),部分型號帶PLL,主要有1K10,1K30,1K50,1K100。AXEC系列如表1-1所示。
表1-1AXEC系列
就本設計而言,重點在于能夠編寫基于FPGA實現方波、鋸齒波和正弦波等函數的發生器的VHDL源程序。當然,配合D/A轉換器、示波器,實現硬件的既定功能。因此,整個設計主要完成了以下幾項工作:
①根據需求確定軟件的實現方案;
②編寫調試發生器的VHDL源程序;
③用QuartusⅡ對該函數發生器進行仿真測試。
④通過開發板與示波器的連接觀察輸出波形。
2FPGA簡介
FPGA[3]是英文FieldProgrammableGateArray的縮寫,即現場可編程門陣列,是在PAL、GAL、EPLD等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。FPGA采用了邏輯單元陣列LCA(LogicCellArray)這樣一個新概念,內部包括可配置邏輯模塊CLB(ConfigurableLogicBlock)、輸出輸入模塊IOB(InputOutputBlock)和內部連線(Interconnect)三個部分。FPGA的特點主要有:
1)采用FPGA設計ASIC電路,用戶不需要投片生產,就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。
3)FPGA內部有豐富的觸發器和I/O引腳。
4)FPGA是ASIC電路中設計周期最短、開發費用最低、風險最小的器件之一。
5)FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。可以說,FPGA芯片是小批量系統提高系統集成度、可靠性的最佳選擇之一。
目前FPGA的品種很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。FPGA是由存放在片內RAM中的程序來設置其工作狀態的,因此,工作時需要對片內的RAM進行編程。用戶可以根據不同的配置模式,采用不同的編程方式。加電時,FPGA芯片將EPROM中數據讀入片內編程RAM中,配置完成后,FPGA進入工作狀態。掉電后,FPGA恢復成白片,內部邏輯關系消失,因此,FPGA能夠反復使用。FPGA的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片FPGA不同的編程數據,可以產生不同的電路功能。因此,FPGA的使用非常靈活。FPGA有多種配置模式:并行主模式為一片FPGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片FPGA;串行模式可以采用串行PROM編程FPGA;外設模式可以將FPGA作為微處理器的外設,由微處理器對其編程FPGA是80年代中期出現的高密度可編程邏輯器件(PLD)。FPGA器件及其系統軟件是開發大規模數字集成電路的最新技術。它利用計算機輔助設計,以電路原理圖、VHDL、布爾方程、真值表或狀態機等格式,輸入設計邏輯,然后經一系列變換,將輸入的邏輯轉換成適合于FPGA器件結構的圖形文件或文本形式。此時不僅可以觀察整個設計在器件中實際布線的結果,了解各網絡的延時特性,進行人工修改或編輯;從而可利用模擬手段,對設計的輸入、輸出及任意點信號進行模擬仿真,包括驗證設計功能是否正確的功能模擬,以及確定最終設計是否滿足相位和延時要求的定時模擬。把經過模擬驗證后的設計文件轉換成比特流文件或PROM(可編程只讀存儲器)格式文件,把常規的編程器對EPROM(可擦可編程只讀存儲器)編程。然后把這EPROM與FPGA器件適當連接,加上(5V)電源。此FPGA器件就可作為大規模專用集成電路使用。用不同的設計文件配置同一塊FPGA"白片",則可實現不同的邏輯功能。FPGA器件可實現所有數字電路功能。目前,器件集成度已經達到了兩萬門數量級,工作頻率可達300MHz以上。一般可在幾個小時或幾天內完成一個設計,并可隨時修改。這加速了產品設計開發的進程,免去了昂貴的ASIC(專用集成電路)器件半導體生產工藝費用及投資風險。FPGA技術是電子工程師不可缺少的好幫手在發達國家,PLD技術已經成為大學電子類專業的必修課程,它已經象單片機一樣廣泛的應用在各種需要數字邏輯的領域。然而,在國內,PLD技術才剛剛起步。
2.1FPGA工作原理與簡介
FPGA是在PAL、GAL、EPLD、CPLD等可編程器件的基礎上進一步發展的產物。它是作為ASIC領域中的一種半定制電路而出現的,即解決了定制電路的不足,又克服了原有可編程器件門電路有限的缺點。
由于FPGA需要被反復燒寫,實現組合邏輯的基本結構不可能像ASIC那樣通過固定的與非門來完成,而只能采用一種易于反復配置的結構。查找表可以很好地滿足這一要求,目前主流FPGA都采用了基于SRAM工藝的查找表結構,也有一些軍品和宇航級FPGA采用Flash或者熔絲與反熔絲工藝的查找表結構。通過燒寫文件改變查找表內容的方法來實現對FPGA的重復配置。
對于一個n輸入的邏輯運算,不管是與或非運算還是異或運算等等,最多只可能存在2n種結果。所以如果事先將相應的結果存放于一個存貯單元,就相當于實現了與非門電路的功能。FPGA的原理也是如此,通過燒寫文件去配置查找表的內容,從而在相同的電路情況下實現了不同的邏輯功能。
查找表(Look-Up-Table)簡稱為LUT,LUT本質上就是一個RAM。目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的的RAM。當用戶通過原理圖或HDL語言描述了一個邏輯電路以后,PLD/FPGA開發軟件會自動計算邏輯電路的所有可能結果,并把真值表(即結果)事先寫入RAM,這樣,每輸入一個信號進行邏輯運算就等于輸入一個地址進行查表,找出地址對應的內容,然后輸出即可。
由于基于LUT的FPGA具有很高的集成度,其器件密度從數萬門到數千萬門不等,可以完成極其復雜的時序與邏輯組合邏輯電路功能,所以適用于高速、高密度的高端數字邏輯電路設計領域。其組成部分主要有可編程輸入/輸出單元、基本可編程邏輯單元、內嵌SRAM、豐富的布線資源、底層嵌入功能單元、內嵌專用單元等,主要設計和生產廠家有Xilinx、Altera、Lattice、Actel、Atmel和QuickLogic等公司,其中最大的是Xilinx、Altera、Lattice三家。
如前所述,FPGA是由存放在片內的RAM來設置其工作狀態的,因此工作時需要對片內RAM進行編程。用戶可根據不同的配置模式,采用不同的編程方式。FPGA有如下幾種配置模式:
l并行模式:并行PROM、Flash配置FPGA;
l主從模式:一片PROM配置多片FPGA;
l串行模式:串行PROM配置FPGA;
l外設模式:將FPGA作為微處理器的外設,由微處理器對其編程。
目前,FPGA市場占有率最高的兩大公司Xilinx和Altera生產的FPGA都是基于SRAM工藝的,需要在使用時外接一個片外存儲器以保存程序。上電時,FPGA將外部存儲器中的數據讀入片內RAM,完成配置后,進入工作狀態;掉電后FPGA恢復為白片,內部邏輯消失。這樣FPGA不僅能反復使用,還無需專門的FPGA編程器,只需通用的EPROM、PROM編程器即可。Actel、QuickLogic等公司還提供反熔絲技術的FPGA,只能下載一次,具有抗輻射、耐高低溫、低功耗和速度快等優點,在軍品和航空航天領域中應用較多,但這種FPGA不能重復擦寫,開發初期比較麻煩,費用也比較昂貴。Lattice是ISP技術的發明者,在小規模PLD應用上有一定的特色。早期的Xilinx產品一般不涉及軍品和宇航級市場,但目前已經有QPro-R等多款產品進入該類領域。
2.2FPGA芯片結構
目前主流的FPGA仍是基于查找表技術的,已經遠遠超出了先前版本的基本性能,并且整合了常用功能(如RAM、時鐘管理和DSP)的硬核(ASIC型)模塊。如圖2-1所示(注:圖2-1只是一個示意圖,實際上每一個系列的FPGA都有其相應的內部結構),FPGA芯片主要由6部分完成,分別為:可編程輸入輸出單元、基本可編程邏輯單元、完整的時鐘管理、嵌入塊式RAM、豐富的布線資源、內嵌的底層功能單元和內嵌專用硬件模塊。
圖2-1FPGA芯片的內部結構
2.3軟核、硬核以及固核的概念
核是具有知識產權核的集成電路芯核總稱,是經過反復驗證過的、具有特定功能的宏模塊,與芯片制造工藝無關,可以移植到不同的半導體工藝中。到了SOC階段,IP核設計已成為ASIC電路設計公司和FPGA提供商的重要任務,也是其實力體現。對于FPGA開發軟件,其提供的IP核越豐富,用戶的設計就越方便,其市場占用率就越高。目前,IP核已經變成系統設計的基本單元,并作為獨立設計成果被交換、轉讓和銷售。
從IP核的提供方式上,通常將其分為軟核、硬核和固核這3類。從完成IP核所花費的成本來講,硬核代價最大;從使用靈活性來講,軟核的可復用使用性最高。
(1)軟核
軟核在EDA[5]設計領域指的是綜合之前的寄存器傳輸級(RTL)模型;具體在FPGA設計中指的是對電路的硬件語言描述,包括邏輯描述、網表和幫助文檔等。軟核只經過功能仿真,需要經過綜合以及布局布線才能使用。其優點是靈活性高、可移植性強,允許用戶自配置;缺點是對模塊的預測性較低,在后續設計中存在發生錯誤的可能性,有一定的設計風險。軟核是IP核應用最廣泛的形式。
(2)固核
固核在EDA設計領域指的是帶有平面規劃信息的網表;具體在FPGA設計中可以看做帶有布局規劃的軟核,通常以RTL代碼和對應具體工藝網表的混合形式提供。將RTL描述結合具體標準單元庫進行綜合優化設計,形成門級網表,再通過布局布線工具即可使用。和軟核相比,固核的設計靈活性稍差,但在可靠性上有較大提高。目前,固核也是IP核的主流形式之一。
(3)硬核
硬核在EDA設計領域指經過驗證的設計版圖;具體在FPGA設計中指布局和工藝固定、經過前端和后端驗證的設計,設計人員不能對其修改。不能修改的原因有兩個:首先是系統設計對各個模塊的時序要求很嚴格,不允許打亂已有的物理版圖;其次是保護知識產權的要求,不允許設計人員對其有任何改動。IP硬核的不許修改特點使其復用有一定的困難,因此只能用于某些特定應用,使用范圍較窄。
3基于FPGA的開發流程
3.1FPGA設計方法概論
FPGA是可編程芯片,因此FPGA的設計方法包括硬件設計和軟件設計兩部分。硬件包括FPGA芯片電路、存儲器、輸入輸出接口電路以及其他設備,軟件即是相應的HDL程序以及最新才流行的嵌入式C程序。硬件設計是基礎,但其方法比較固定,本節主要介紹軟件的設計方法。目前微電子技術已經發展到SOC階段,即集成系統(IntegratedSystem)階段,相對于集成電路(IC)的設計思想有著革命性的變化。SOC是一個復雜的系統,它將一個完整產品的功能集成在一個芯片上,包括核心處理器、存儲單元、硬件加速單元以及眾多的外部設備接口等,具有設計周期長、實現成本高等特點,因此其設計方法必然是自頂向下的從系統級到功能模塊的軟、硬件協同設計,達到軟、硬件的無縫結合。這么龐大的工作量顯然超出了單個工程師的能力,因此需要按照層次化、結構化的設計方法來實施。首先由總設計師將整個軟件開發任務劃分為若干個可操作的模塊,并對其接口和資源進行評估,編制出相應的行為或結構模型,再將其分配給下一層的設計師。這就允許多個設計者同時設計一個硬件系統中的不同模塊,并為自己所設計的模塊負責;然后由上層設計師對下層模塊進行功能驗證。自頂向下的設計流程從系統級設計開始,劃分為若干個二級單元,然后再把各個二級單元劃分為下一層次的基本單元,一直下去,直到能夠使用基本模塊或者IP核直接實現為止,如圖3-1所示。流行的FPGA開發工具都提供了層次化管理,可以有效地梳理錯綜復雜的層次,能夠方便地查看某一層次模塊的源代碼以修改錯誤。
圖3-1自頂向下的FPGA設計開發流程
在工程實踐中,還存在軟件編譯時長的問題。由于大型設計包含多個復雜的功能模塊,其時序收斂與仿真驗證復雜度很高,為了滿足時序指標的要求,往往需要反復修改源文件,再對所修改的新版本進行重新編譯,直到滿足要求為止。這里面存在兩個問題:首先,軟件編譯一次需要長達數小時甚至數周的時間;其次,重新編譯和布局布線后結果差異很大,會將已滿足時序的電路破壞。因此必須提出一種有效提高設計性能,繼承已有結果,便于團隊化設計的軟件工具。FPGA廠商意識到這類需求,由此開發出了相應的邏輯鎖定和增量設計的軟件工具。例如,Xilinx公司的解決方案就是PlanAhead。
Planahead允許高層設計者為不同的模塊劃分相應FPGA芯片區域,并允許底層設計者在在所給定的區域內獨立地進行設計、實現和優化,等各個模塊都正確后,再進行設計整合。如果在設計整合中出現錯誤,單獨修改即可,不會影響到其它模塊。Planahead將結構化設計方法、團隊化合作設計方法以及重用繼承設計方法三者完美地結合在一起,有效地提高了設計效率,縮短了設計周期。不過從其描述可以看出,新型的設計方法對系統頂層設計師有很高的要求。在設計初期,他們不僅要評估每個子模塊所消耗的資源,還需要給出相應的時序關系;在設計后期,需要根據底層模塊的實現情況完成相應的修訂。
3.2典型FPGA開發流程
FPGA的設計流程就是利用EDA開發軟件和編程工具對FPGA芯片進行開發的過程。FPGA的開發流程一般如圖3-2所示,包括電路設計、設計輸入、功能仿真、綜合優化、綜合后仿真、實現、布線后仿真、板級仿真以及芯片編程與調試等主要步驟。
圖3-2FPGA開發的一般流程
(1)電路設計
在系統設計之前,首先要進行的是方案論證、系統設計和FPGA芯片選擇等準備工作。系統工程師根據任務要求,如系統的指標和復雜度,對工作速度和芯片本身的各種資源、成本等方面進行權衡,選擇合理的設計方案和合適的器件類型。一般都采用自頂向下的設計方法,把系統分成若干個基本單元,然后再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。
(2)設計輸入
設計輸入是將所設計的系統或電路以開發軟件要求的某種形式表示出來,并輸入給EDA工具的過程。常用的方法有硬件描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可編程芯片發展的早期應用比較廣泛,它將所需的器件從元件庫中調出來,畫出原理圖。這種方法雖然直觀并易于仿真,但效率很低,且不易維護,不利于模塊構造和重用。更主要的缺點是可移植性差,當芯片升級后,所有的原理圖都需要作一定的改動。目前,在實際開發中應用最廣的就是HDL語言輸入法,利用文本描述設計,可以分為普通HDL和行為HDL。普通HDL有ABEL、CUR等,支持邏輯方程、真值表和狀態機等表達方式,主要用于簡單的小型設計。而在中大型工程中,主要使用行為HDL,其主流語言是VerilogHDL和VHDL。這兩種語言都是美國電氣與電子工程師協會(IEEE)的標準,其共同的突出特點有:語言與芯片工藝無關,利于自頂向下設計,便于模塊的劃分與移植,可移植性好,具有很強的邏輯描述和仿真功能,而且輸入效率很高。
(3)功能仿真
功能仿真,也稱為前仿真,是在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的仿真沒有延遲信息,僅對初步的功能進行檢測。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關心的輸入信號組合成序列),仿真結果將會生成報告文件和輸出信號波形,從中便可以觀察各個節點信號的變化。如果發現錯誤,則返回設計修改邏輯設計。常用的工具有ModelTech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟件。
(4)綜合優化
所謂綜合就是將較高級抽象層次的描述轉化成較低層次的描述。綜合優化根據目標與要求優化所生成的邏輯連接,使層次設計平面化,供FPGA布局布線軟件進行實現。就目前的層次來看,綜合優化(Synthesis)是指將設計輸入編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯連接網表,而并非真實的門級電路。真實具體的門級電路需要利用FPGA制造商的布局布線功能,根據綜合后生成的標準門級結構網表來產生。為了能轉換成標準的門級結構網表,HDL程序的編寫必須符合特定綜合器所要求的風格。由于門級結構、RTL級的HDL程序的綜合是很成熟的技術,所有的綜合器都可以支持到這一級別的綜合。常用的綜合工具有Synplicity公司的Synplify/SynplifyPro軟件以及各個FPGA廠家自己推出的綜合開發工具。
(5)綜合后仿真
綜合后仿真檢查綜合結果是否和原設計一致。在仿真時,把綜合生成的標準延時文件反標注到綜合仿真模型中去,可估計門延時帶來的影響。但這一步驟不能估計線延時,因此和布線后的實際情況還有一定的差距,并不十分準確。目前的綜合工具較為成熟,對于一般的設計可以省略這一步,但如果在布局布線后發現電路結構和設計意圖不符,則需要回溯到綜合后仿真來確認問題之所在。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。
(6)實現與布局布線
實現是將綜合生成的邏輯網表配置到具體的FPGA芯片上,布局布線是其中最重要的過程。布局將邏輯網表中的硬件原語和底層單元合理地配置到芯片內部的固有硬件結構上,并且往往需要在速度最優和面積最優之間作出選擇。布線根據布局的拓撲結構,利用芯片內部的各種連線資源,合理正確地連接各個元件。目前,FPGA的結構非常復雜,特別是在有時序約束條件時,需要利用時序驅動的引擎進行布局布線。布線結束后,軟件工具會自動生成報告,提供有關設計中各部分資源的使用情況。由于只有FPGA芯片生產商對芯片結構最為了解,所以布局布線必須選擇芯片開發商提供的工具。
(7)時序仿真
時序仿真,也稱為后仿真,是指將布局布線的延時信息反標注到設計網表中來檢測有無時序違規(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)現象。時序仿真包含的延遲信息最全,也最精確,能較好地反映芯片的實際工作情況。由于不同芯片的內部延時不一樣,不同的布局布線方案也給延時帶來不同的影響。因此在布局布線后,通過對系統和各個模塊進行時序仿真,分析其時序關系,估計系統性能,以及檢查和消除競爭冒險是非常有必要的。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。
(8)板級仿真與驗證
板級仿真主要應用于高速電路設計中,對高速系統的信號完整性、電磁干擾等特征進行分析,一般都以第三方工具進行仿真和驗證。
(9)芯片編程與調試
設計的最后一步就是芯片編程與調試。芯片編程是指產生使用的數據文件(位數據流文件,BitstreamGeneration),然后將編程數據下載到FPGA芯片中。其中,芯片編程需要滿足一定的條件,如編程電壓、編程時序和編程算法等方面。邏輯分析儀(LogicAnalyzer,LA)是FPGA設計的主要調試工具,但需要引出大量的測試管腳,且LA價格昂貴。目前,主流的FPGA芯片生產商都提供了內嵌的在線邏輯分析儀(如XilinxISE中的ChipScope、AlteraQuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要占用芯片少量的邏輯資源,具有很高的實用價值。
4VHDL簡介
VHDL和VerilogHDL是目前世界上最流行的兩種硬件描述語言(HDL:HardwareDescriptionLanguage),均為IEEE標準,被廣泛地應用于基于可編程邏輯器件的項目開發。二者都是在20世紀80年代中期開發出來的,前者由GatewayDesignAutomation公司(該公司于1989年被Cadence公司收購)開發,后者由美國軍方研發。
VHDL語言以文本形式來描述數字系統硬件結構和行為,是一種用形式化方法來描述數字電路和系統的語言,可以從上層到下層來逐層描述自己的設計思想。即用一系列分層次的模塊來表示復雜的數字系統,并逐層進行驗證仿真,再把具體的模塊組合由綜合工具轉化成門級網表,接下去再利用布局布線工具把網表轉化為具體電路結構的實現。目前,這種自頂向下的方法已被廣泛使用。概括地講,VHDL語言包含以下主要特征:
lVHDL語言既包含一些高級程序設計語言的結構形式,同時也兼顧描述硬件線路連接的具體結構。
l通過使用結構級行為描述,可以在不同的抽象層次描述設計。VHDL語言采用自頂向下的數字電路設計方法,主要包括3個領域5個抽象層次。
lVHDL語言是并行處理的,具有同一時刻執行多任務的能力。這和一般高級設計語言(例如C語言等)串行執行的特征是不同的。
lVHDL語言具有時序的概念。一般的高級編程語言是沒有時序概念的,但在硬件電路中從輸入到輸出總是有延時存在的,為了描述這一特征,需要引入時延的概念。VHDL語言不僅可以描述硬件電路的功能,還可以描述電路的時序。
4.1VHDL語言的歷史
1983年,GatewayDesignAutomation(GDA)[5]硬件描述語言公司的PhilipMoorby首創了VHDL。后來Moorby成為VHDL-XL的主要設計者和Cadence公司的第一合伙人。1984至1986年,Moorby設計出第一個關于VHDL的仿真器,并提出了用于快速門級仿真的XL算法,使VHDL語言得到迅速發展。1987年Synonsys公司開始使用VHDL行為語言作為綜合工具的輸入。1989年Cadence公司收購了Gateway公司,VHDL成為Cadence公司的私有財產。1990年初,Cadence公司把VHDL和VHDL-XL分開,并公開發布了VHDL。隨后成立的OVI(OpenVHDLInternational)組織負責VHDL的發展并制定有關標準,OVI由VHDL的使用者和CAE供應商組成。1993年,幾乎所有ASIC廠商都開始支持VHDL,并且認為VHDL-XL是最好的仿真器。同時,OVI推出2.0版本的VHDL規范,IEEE則將OVI的VHDL2.0作為IEEE標準的提案。1995年12月,IEE制E定了VHDL的標準IEEE1364-1995。目前,最新的VHDL語言版本是2000年IEEE公布的VHDL2001標準,其大幅度地提高了系統級和可綜合性能。
4.2VHDL的主要能力
VHDL既是一種行為描述語言,也是一種結構描述語言[6]。如果按照一定的規則和風格編寫代碼,就可以將功能行為模塊通過工具自動轉化為門級互連的結構模塊。這意味著利用VHDL語言所提供的功能,就可以構造一個模塊間的清晰結構來描述復雜的大型設計,并對所需的邏輯電路進行嚴格的設計。
下面列出的是VHDL語言的主要功能:
l可描述順序執行或并行執行的程序結構;
l用延遲表示式或事件表達式來明確地控制過程的啟動時間;
l通過命名的事件來觸發其他過程里的激活行為或停止行為;
l提供了條件和循環等程序結構;
l提供了可帶參數且非零延續時間的任務程序結構;
l提供了可定義新的操作符的函數結構;
l提供了用于建立表達式的算術運算符、邏輯運算符和位運算符;
l提供了一套完整的表示組合邏輯基本元件的原語;
l提供了雙向通路和電阻器件的描述;
l可建立MOS器件的電荷分享和衰減模型;
l可以通過構造性語句精確地建立信號模型;表4-1給出VHDL的表述能力。
表4-1VHDL語言能力總結
此外,VHDL語言還有一個重要特征就是:和C語言風格有很多的相似之處,學習起來比較容易。
5函數發生器的設計與實現
本設計中的函數發生器是通過VHDL語言來描述的,通過這樣一種硬件描述語言,根據設計要求中所需要使用到的功能,盡可能的滿足了實際應用中的具體需求。設計要求通過本設計產生頻率可控的正弦波,方波,三角波和鋸齒波等波形。
5.1軟件設計思路
數字頻率合成器(DDFS)技術是一種可把一系列數字量形式信號通過DAC轉換成模擬量形式信號的合成技術[9]。目前使用最廣泛的一種DDFS方式是利用高速存儲器作查尋表,然后通過高速DAC產生已用數字形式存入的正弦波。圖5-1是DDFS的基本原理圖。
圖5-1DDFS基本原理圖
相位累加器由N位加法器與N位累加寄存器級聯構成。時鐘脈沖每觸發一次,加法器便將頻率控制數據與累加寄存器輸出的累加相位數據相加,然后把相加后的結果送至累加寄存器的數據輸入端。累加寄存器將加法器在上一個時鐘作用后所產生的新相位數據反饋到加法器的輸入端,以使加法器在下一個時鐘的作用下繼續與頻率控制數據相加。這樣,相位累加器在參考時鐘的作用下將進行線性相位累加,相位累加器累加滿量時,就會產生一次溢出,以完成一個周期性的動作,這個周期就是DDFS合成信號的一個頻率周期,累加器的溢出頻率就是DDFS輸出的信號頻率。
用相位累加器輸出的數據作為取樣地址來對正弦波波形存儲器進行相位-幅值轉換,即可在給定的時間上確定輸出的波形幅值。
通過DAC可將數字量形式的波形幅值轉換成所要求的合成頻率模擬量形式信號,低通濾波器用于衰減和濾除不需要的取樣分量,以便輸出頻譜純凈的正弦波信號[10]。
對于計數容量為2N的相位累加器和具有M個相位取樣的正弦波波形存儲器,若頻率控制字為K,則DDFS系統輸出信號的頻率為:fo=fc×K/2N,而頻率分辨率則為:Δf=fomin=fc/2N。
波形的數據存放在RAM里,主要有正弦波、三角波、鋸齒波包括半正弦波、半三角波和半鋸齒波的數據。
要達到較高的頻率精度,必須利用DDFS來實現對輸出波形頻率的控制并按頻率要求對相位增量進行累加,然后以累加相位值作為地址碼來讀取存放在存儲器中的波形數據。通過改變相位增量寄存器的增量值(即步長),使相位累加器能夠輸出依據相位增量寄存器所給出的步長來改變波形存儲器的地址,從而改變波形每周期的點數,從而達到改變輸出波形頻率的目的。該電路的設計關鍵在于用硬件構造一個多位累加器來實現相位的累加。
根據DDFS的原理,輸出信號頻率fo與累加器時鐘fclk,累加器位數M,相位增量N的關系如下:
fo=(fclk*N)/2M
5.2源程序的說明
以下是數字函數發生器設計的部分源程序說明。(完整程序請見附錄)
1.調用雙口RAM:
雙口RAM擁有兩套讀寫資源,可以同時進行讀寫而相互不受影響。這里使用雙口RAM來實現波形查找表的功能,可以方便地使用外部控制器更改查找表中的內容,也就更改了輸出波形的類型,從而簡單的實現任意波的輸出。
altsyncram_component:altsyncram
GENERICMAP(
intended_device_family=>"ACEX1K",
operation_mode=>"DUAL_PORT",
width_a=>8,
widthad_a=>10,
numwords_a=>1024,
width_b=>8,
widthad_b=>10,
numwords_b=>1024,
lpm_type=>"altsyncram",
width_byteena_a=>1,
outdata_reg_b=>"UNREGISTERED",
indata_aclr_a=>"NONE",
wrcontrol_aclr_a=>"NONE",
address_aclr_a=>"NONE",
address_reg_b=>"CLOCK0",
address_aclr_b=>"NONE",
outdata_aclr_b=>"NONE",
read_during_write_mode_mixed_ports=>"DONT_CARE",
power_up_uninitialized=>"FALSE",
init_file=>"sin_rom1024_2.mif"
)
2.頻率合成輸出:
在每一個時鐘周期,頻率累加器以輸入的頻率字為步進進行自增累加;累加結果的高位送給相位累加器與相位字進行累加,可以理解為在這里加上相位偏置;相位累加器的輸出作為波形查找表的地址從查找表中讀出相應的數據后送給D/A轉換器,最后經過低通濾波器,后級放大等信號調理電路形成模擬量的波形輸出。
FREQ_WORDS<=X"EEEEE";
PHASE_WORDS<="0000000000";
FreqAcc:PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
reg_G_FreqWords<=FREQ_WORDS;--頻率字輸入同步
reg_G_PhaseWords<=PHASE_WORDS;--相位字輸入同步
arith_G_FreqAcc<=arith_G_FreqAcc+reg_G_FreqWords;--相位累加器
ENDIF;
ENDPROCESSFreqAcc;
--相位累加器
arith_G_PhaseAcc<=arith_G_FreqAcc(freq_adder_width-1DOWNTOfreq_adder_width-phase_words_width)+reg_G_PhaseWords;
--取累加器高位送LUT
reg_G_LUTAddress<=arith_G_PhaseAcc(phase_adder_width-1DOWNTOphase_adder_width-lut_add_width);
DDFSOUT<=reg_G_OutRegister;
5.3系統的時序仿真實現和驗證
在完成了軟件部分的設計就可以在所選用的仿真軟件上進行調試,以驗證所編寫的程序是否可以實現預先設定的功能。
5.3.1使用QuartusIITextEditor建立設計
QuartusIITextEditor[11]是一個靈活的工具,用于以AHDL、VHDL和VerilogHDL語言以及Tcl腳本語言輸入文本型設計。還可以使用TextEditor輸入、編輯和查看其它ASCII文本文件,包括為QuartusII軟件或由QuartusII軟件建立的那些文本文件。還可以用TextEditor將任何AHDL語句或節段模板、Tcl命令或任何支持的VHDL或VerilogHDL構造模板插入當前文件中。AHDL、VHDL和VerilogHDL模板為您輸入HDL語法提供了一個簡便的方法,可以提高設計輸入的速度和準確度。還可以獲取有關所有AHDL元素、關鍵字和語句以及宏功能模塊和基本單元的上下文相關幫助。
5.3.2使用AssignmentEditor指定初始設計的約束條件
AssignmentEditor是用于在QuartusII軟件中建立和編輯分配的界面。分配用于在設計中為邏輯指定各種選項和設置,包括位置、I/O標準、時序、邏輯選項、參數、仿真和引腳分配。使用AssignmentEditor可以選擇分配類別;使用QuartusIINodeFinde選擇要分配的特定節點和實體;顯示有關特定分配的信息;添加、編輯或刪除選定節點的分配。還可以向分配添加備注,可以查看出現分配的設置和配置文件。
以下步驟描述使用AssignmentEditor進行分配的基本流程:
1.打開AssignmentEditor。
2.在Category欄中選擇相應的類別分配。
3.在NodeFilter欄中指定相應的節點或實體,或使用NodeFinder對話
框查找特定的節點或實體。
4.在顯示當前設計分配的電子表格中,添加相應的分配信息。
AssignmentEditor中的電子表格提供適用的下拉列表,或允許您鍵入分配信息。當您添加、編輯和刪除分配時,消息窗口中將出現相應的Tcl命令[12]。還可以將數據從AssignmentEditor導出到Tcl腳本文件(.tcl)或與電子表格兼容的文件中。建立和編輯分配時,QuartusII軟件對適用的分配信息進行動態驗證。如果分配或分配值無效,QuartusII軟件不會添加或更新數值,改為轉換為當前值或不接受該值。當您查看所有分配時,AssignmentEditor將顯示為當前工程而建立的所有分配,但當您分別查看各個分配類別時,AssignmentEditor將僅顯示與所選特定類別相關的分配。
圖5-3QuartusIIAssignmentEditor
5.3.3使用QuartusIIVHDL
可以使用Analysis&Synthesis分析并綜合VHDL和VerilogHDL設計[13]。Analysis&Synthesis包括QuartusIIIntegratedSynthesis,它完全支持VHDL和VerilogHDL語言,并提供控制綜合過程的選項。
如圖5-4中所示。
圖5-4Settings對話框的VHDLInput頁
Analysis&Synthesis構建單個工程數據庫,將所有設計文件集成在設計實體或工程層次結構中。QuartusII軟件用此數據庫進行其余工程處理。其它Compiler模塊對該數據庫進行更新,直到它包含完全優化的工程。開始時,該數據庫僅包含原始網表;最后,它包含完全優化且合適的工程,工程將用于為時序仿真、時序分析、器件編程等建立一個或多個文件。當它建立數據庫時,Analysis&Synthesis的分析階段將檢查工程的邏輯完整性和一致性,并檢查邊界連接和語法錯誤。
Analysis&Synthesis還在設計實體或工程文件的邏輯上進行綜合和技術映射。它從VerilogHDL和VHDL中推斷觸發器、鎖存器和狀態機。它為狀態機建立狀態分配,并作出能減少所用資源的選擇。此外,它還用Altera參數化模塊庫(LPM)函數中的模塊替換運算符,例如+或-,而該函數已為Altera器件做了優化。Analysis&Synthesis使用多種算法來減少門的數量,刪除冗余邏輯以及盡可能有效地利用器件體系結構。可以使用邏輯選項分配自定義綜合。Analysis&Synthesis還應用邏輯綜合技術,以協助實施工程時序要求,并
優化設計以滿足這些要求。消息窗口和Report窗口的消息區域顯示Analysis&Synthesis生成的任何消息。Status窗口記錄工程編譯期間在Analysis&Synthesis中處理所花的時間。
5.3.4控制Analysis&Synthesis
可以使用以下選項和功能來控制QuartusIIAnalysis&Synthesis:
l編譯器指令和屬性
lQuartusII邏輯選項
lQuartusII綜合網表優化選項
1.使用編譯器指令和屬性
QuartusII軟件支持編譯器指令,這些指令也稱為編譯指示。可以在VerilogHDL或VHDL代碼中包括translate_on和translate_off等編譯器指令作為備注。這些指令不是VerilogHDL或VHDL命令;但是,綜合工具使用它們以特定方式推動綜合過程。仿真器等其它工具則忽略這些指令并將它們作為備注處理。還可以指定屬性,這些屬性有時稱為編譯指示或指令,用于推動特定設計元素的綜合過程。它還提供一些屬性,作為QuartusII邏輯選項。
2.使用QuartusII邏輯選項
QuartusII邏輯選項允許您在不編輯源代碼的情況下設置屬性。可以在AssignmentEditor中指定QuartusII邏輯選項。QuartusII邏輯選項用于保留寄存器、指定通電時的邏輯電平、刪除重復或冗余的邏輯、優化速度或區域、控制扇出、設置狀態機的編碼級別以及控制其它許多選項。使用QuartusII綜合網表優化選項QuartusII綜合優化選項用于設置選項,在許多Altera器件系列的綜合期間優化網表。這些優化選項對標準編譯期間出現的優化進行補充,并且是在全編譯的Analysis&Synthesis階段出現。這些優化對綜合網表進行更改,通常有利于區域和速度的改善。Settings對話框(Assignments菜單)的
NetlistOptimizations頁用于指定網表優化選項,其中包括以下綜合優化選項:
l進行WYSIWYG基本單元再綜合
l進行邏輯門級寄存器重新定時
l允許寄存器重新定時,在Tsu/Tco和Fmax之間進行取舍
5.3.5使用QuartusII仿真器進行仿真設計
可以使用QuartusII仿真器在工程中仿真任何設計[14]。視所需的信息類型而定,可以進行功能仿真以測試設計的邏輯運算,也可以進行時序仿真以在目標器件中測試設計的邏輯運算和最差時序。
QuartusII軟件可以仿真整個設計,或仿真設計的任何部分。可以在工程中將任何設計實體指定為仿真焦點。在仿真設計時,仿真器仿真焦點實體及其所有附屬設計實體指定仿真器設置通過建立仿真器設置,指定要仿真的類型、仿真涵蓋的時間段、激勵向量以及其它仿真選項。可以使用Settings對話框(Assignments菜單)或仿真器SettingsWizard(Processing菜單)建立仿真器設置的自定義組,也可以使用每次建立新工程時自動生成的默認仿真器設置。建立波形文件
QuartusIIWaveformEditor可以建立和編輯用于波形格式仿真的輸入矢量。使用WaveformEditor,可以將輸入矢量添加到波形文件中,此文件描述設計中的邏輯行為。
QuartusII軟件支持矢量波形文件(.vwf)、表文件(.tbl)、矢量文件(.vec)和矢量表輸出文件(.tbl)格式的波形文件。可以在MAX+PLUS®II軟件中將MAX+PLUSII仿真器通道文件(.scf)另存為表文件,然后使用WaveformEditor打開表文件并另存為矢量波形文件。
圖5-5QuartusIIWaveformEditor
5.3.6在QuartusII軟件中進行時序分析
TimingAnalyzer在全編譯期間對設計自動進行時序分析。以下準則描述了使用QuartusIITimingAnalyzer可以完成的一些任務:
l使用定時設置向導(Assignments菜單)、Settings對話框(Assignments菜單)和AssignmentEditor,指定初始工程范圍的時序要求和個別時序要求。
l在全編譯期間進行時序分析或在初始編譯之后單獨進行時序分析。
l使用報告窗口、時序逼近布局圖和list_pathsTcl命令查看時序結果。
指定時序要求時序要求允許為整個工程、特定的設計實體或個別實體、節點和引腳指定所需的速度性能。可以使用定時設置向導(Assignments菜單)幫助您建立初始工程范圍時序設置。指定初始時序設置之后,可以再次使用定時設置向導或使用Settings對話框(Assignments菜單)修改設置。可以使用AssignmentEditor(Assignments菜單)進行個別時序設置。指定工程范圍時序分配和/或單個時序分配之后,通過編譯設計或在初始編譯之后通過單獨運行TimingAnalyzer來運行時序分配。如果未指定時序要求設置或選項,QuartusIITimingAnalyzer將使用默認設置運行分析。默認情況下,TimingAnalyzer計算并報告每個寄存器的fMAX、每個輸入寄存器的tSU和tH、每個輸出寄存器的tCO、所有引腳至引腳路徑間的tPD、延緩時間、保持時間、最小tCO以及當前設計實體的最小tPD。
使用Settings對話框或定時設置向導,可以指定以下時序要求和其它選項:
l工程的總頻率要求或各個時鐘信號的設置
l延時要求、最短延時要求和路徑切割選項
l報告選項,包括數字或源以及目標寄存器,且不包括路徑
l時序驅動編譯選項指定工程范圍的時序設置
工程范圍的時序設置包括最大頻率、建立時間、保持時間、時鐘至輸出延時和引腳至引腳延時以及最低時序要求。還可以設置工程范圍的時鐘設置和多個時鐘域、路徑切割選項和默認外部延時[15]。
1.要求描述
a)fMAX(最大頻率)
在不違反內部建立(tSU)和保持(tH)時間要求下可以達到的最大時鐘頻率。
b)tSU(時鐘建立時間)
在觸發寄存器計時的時鐘信號已經在時鐘引腳確立之前,經由數據輸入或使能端輸入而進入寄存器的數據必須在輸入引腳處出現的時間長度。
c)tH(時鐘保持時間)
在觸發寄存器計時的時鐘信號已經在時鐘引腳確立之后,經由數據輸入或使能端輸入而進入寄存器的數據必須在輸入引腳處保持的時間長度。
d)tCO(時鐘至輸出延時)
時鐘信號在觸發寄存器的輸入引腳上發生轉換之后,在由寄存器饋送信號的輸出引腳上取得有效輸出所需的時間。
e)tPD(引腳至引腳延時)
輸入引腳處信號通過組合邏輯進行傳輸并出現在外部輸出引腳上所需的時間。
f)最小tCO(時鐘至輸出延時)
時鐘信號在觸發寄存器的輸入引腳上發生轉換之后,在由寄存器饋送信號的輸出引腳上取得有效輸出所需的最短時間。這個時間總是代表外部引腳至引腳延時。
g)最短tPD(時鐘至輸出延時)
指定可接受的最少的引腳至引腳延時,即輸入引腳信號通過組合邏輯傳輸并出現在外部輸出引腳上所需的時間。
2.指定個別時序分配
可以使用AssignmentEditor對個別實體、節點和引腳進行個別時序分配。個別時序分配超越工程范圍要求(如果它們比工程范圍要求更加嚴格)。AssignmentEditor支持點到點時序分配和通配符,用于在做分配時標識特定節點。輸入的引腳和節點時序要求保存在當前層次結構中最高層實體的實體設置文件(.esf)中。
可以在TimingAnalyzer中進行以下類型的個別時序分配:
l個別時鐘設置:允許通過定義時序要求和設計中所有時鐘信號之間的關系,進行精確的多時鐘時序分析
l多周期路徑:需要一個以上時鐘周期才能穩定下來的寄存器之間的路徑。可以設置多周期路徑,指示TimingAnalyzer調整其度量,并避免不當地違反建立或保持時間。
l剪切路徑:默認情況下,如果沒有設置時序要求或只使用默認的fMAX時鐘設置,QuartusII軟件將切斷不相關時鐘域之間的路徑。如果設置了各個時鐘分配,但沒有定義時鐘分配之間的關系,QuartusII也將切斷不相關時鐘域之間的路徑。還可以定義設計中特定路徑的剪切路徑。_最少延時要求:特定節點或組的個別tH、最小tCO和最小tPD時序要求。可以對特定節點或組進行這些分配,以超越工程范圍最小時序要求。
l外部延時:指定信號從外部寄存器(器件之外)到達輸入引腳的延時。
l設計中特定節點的個別tSU、tPD和tCO要求。
3.進行時序分析
指定時序設置和分配之后,就可以通過全編譯運行TimingAnalyzer。完成編譯之后,可以使用Start>StartTimingAnalyzer命令(Processing菜單)重新單獨運行時序分析,或通過選擇Start>StartMinimumTimingAnalysis(Processing菜單)運行最少時序分析。
4.查看時序分析結果
運行時序分析之后,可以在編譯報告的TimingAnalyzer文件夾中查看時序分析結果。然后,可以列出時序路徑以驗證電路性能,確定關鍵速度路徑以及限制設計性能的路徑,并進行另外的時序分配。此外,還可以使用list_pathsTcl命令查找并查看設計中任何延時路徑的信息。報告窗口的時序分析部分列出報告的時鐘建立和保持的時序信息;tSU、tH、tPD、tCO;最小脈沖寬度要求;在時序分析期間忽略的任何時序分配;以及TimingAnalyzer生成的任何消息。默認情況下,TimingAnalyzer還報告最佳情況最少時鐘至輸出時間和最佳情況最少點到點延時。
報告窗口包括以下類型的時序分析信息:
l時序要求的設置
l停滯和最少停滯
l源和目標時鐘名稱
l源和目標節點名稱
l所需的和實際的點到點時間
l所需的保持關系
l實際fMAX
圖5-6Report窗口中的時序分析結果
可以從Report窗口的TimingAnalyzer部分直接進入AssignmentEditor、ListPaths和LocateinTimingClosureFloorplan命令,從而可以進行個別時序分配和查看延時路徑信息。此外,還可以使用list_pathsTcl命令列出延時路徑信息。可以使用AssignmentEditor在TimingAnalyzer報告中對任何路徑進行個別時序分配。此功能還可以用來方便地對路徑進行點到點分配。以下步驟描述在AssignmentEditor中進行個別時序分配的基本流程:
1.在Category欄中,單擊Timing,以指示您要做的分配的類別。
2.在電子表格中單擊DestinationName(To)單元格并使用NodeFinder查找節點,或鍵入標識要分配目標節點的節點名稱和/或通配符。
3.在電子表格中單擊SourceName(From)單元格并使用NodeFinder查找節點,或鍵入標識要分配源節點的節點名稱和/或通配符。
4.在電子表格中,雙擊Option單元格并選擇您要做的時序分配。對于要求賦值的分配,可以雙擊Value單元格并鍵入或選擇相應的分配值。還可以使用LocateinTimingClosureFloorplan命令(Project菜單)在時序逼近布局圖中查找路徑,允許利用時序逼近布局圖功能對特定路徑做分配。可以使用ListPaths命令(右邊按鈕彈出菜單),在消息窗口的TimingAnalyzer報告小窗口中顯示任何路徑的中間延時。它允許用戶查找引腳至引腳、寄存器至寄存器和時鐘至輸出引腳延時路徑,并顯示在Report窗口中出現的設計的任何延時路徑的信息。請參見圖5-7。
圖5-7OutputfromListPaths命令
結果:最后在示波器上可以觀察到頻率可控的正弦波,方波,鋸齒波三角波。
6結論
本文通過對FPGA器件和數字函數發生器的詳細闡述,通過仔細研究FPGA和DDFS原理后,根據項目設計的背景及實際需要,基于FPGA器件設計并實現了數字函數發生器的設計,完成了實現正弦波,三角波,鋸齒波,方波的功能要求,并用DICE-EH2000實驗箱和示波器實現了其功能。與使用單片機、DSP或嵌入式ARM等其他芯片實現數字函數發生器相比,本設計更符合整個項目開發過程中的實際情況,用FPGA進行數字系統的設計靈活方便,周期短。而且,當參考時鐘頻率和相位累加器的位寬滿足一定的要求時,輸出分辨率可以非常小。使用DDS技術產生的任意波在精度上非常高,誤差很小。
總的來說,本設計利用FPGA構建數字函數發生器,一方減少了使用專用集成芯片帶來的成本增加和資源浪費;另一方面,通過軟件時序仿真,減少了設計周期,提高了系統的穩定性。設計完成后,在DICE-EH2000實驗箱和示波器上進行了硬件驗證,并獲得通過。可以說,在多數場合中,可以用它來實現數字函數發生器的基本功能。
標簽:
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-04-30
2025-04-11
2025-04-08
2025-03-31
2025-03-26
2025-03-20