基于FPGA多通道采樣系統(tǒng)設(shè)計(jì)資料

摘??要
本論文介紹了基于FPGA的多通道采樣系統(tǒng)的設(shè)計(jì)。用FPGA設(shè)計(jì)一個(gè)多通道采樣控制器,利用VHDL語(yǔ)言設(shè)計(jì)有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)對(duì)AD7892的控制。由于FPGA器件的特性是可以實(shí)現(xiàn)高速工作,為此模擬信號(hào)選用音頻信號(hào)。由于音頻信號(hào)的頻率是20Hz-20KHz,這樣就對(duì)AD轉(zhuǎn)換的速率有很高的要求.因?yàn)镕PGA的功能很強(qiáng)大,所以我們把系統(tǒng)的許多功能都集成到FPGA器件中,例如AD通道選擇部分,串并輸出控制模塊,這樣使得整個(gè)系統(tǒng)的外圍電路簡(jiǎn)單、系統(tǒng)的穩(wěn)定性強(qiáng)。FPGA的配置模式選用被動(dòng)串行模式,這樣就增強(qiáng)了系統(tǒng)的可擴(kuò)展性。輸出模式可選擇性使得系統(tǒng)的應(yīng)用相當(dāng)廣泛,串行輸出可以用于通信信號(hào)的采集,方便調(diào)制后發(fā)射到遠(yuǎn)程接受端,遠(yuǎn)程接收端對(duì)采集的數(shù)據(jù)進(jìn)行解調(diào);而并行輸出模式則可以通過高速存儲(chǔ)器將采集的信號(hào)放到微機(jī)或者其他的處理器上,根據(jù)采集的數(shù)據(jù)進(jìn)行相應(yīng)的控制。此系統(tǒng)的缺點(diǎn)是由于FPGA器件配置是基于SRAM查找表單元,編程的信息是保持在SRAM中,但SRAM在掉電后編程信息立即丟失,所以每次系統(tǒng)上電都需要重新配置芯片,這對(duì)在野外作業(yè)的工作人員很不方便,解決的方法是專用的配置器件來(lái)配置FPGA,在每次系統(tǒng)上電的時(shí)候會(huì)自動(dòng)把編程信息配置到FPGA芯片中。但設(shè)計(jì)中沒有采用到這種配置方案主要是考慮到專用配置器件的價(jià)格問題。
本文開始介紹了多通道系統(tǒng)的組成部分,然后分別介紹了各個(gè)組成部分的原理和設(shè)計(jì)方法,其中重點(diǎn)介紹了FPGA軟件設(shè)計(jì)部分。還對(duì)當(dāng)前十分流行的基于FPGA的設(shè)計(jì)技術(shù)作了簡(jiǎn)單的闡述,最后對(duì)系統(tǒng)的調(diào)試和應(yīng)用作了簡(jiǎn)短的說(shuō)明。
引言
FPGA(Field-Programmable Gate Array 現(xiàn)場(chǎng)可編程門陣列)是近年來(lái)廣泛應(yīng)用的超大規(guī)模、超高速的可編程邏輯器件,由于其具有高集成度(單片集成的系統(tǒng)門數(shù)達(dá)上千萬(wàn)門)、高速(200MHz以上)、在線系統(tǒng)可編程等優(yōu)點(diǎn),為數(shù)字系統(tǒng)的設(shè)計(jì)帶來(lái)了突破性變革,大大推動(dòng)了數(shù)字系統(tǒng)設(shè)計(jì)的單片化、自動(dòng)化,提高了單片數(shù)字系統(tǒng)的設(shè)計(jì)周期、設(shè)計(jì)靈活性和可靠性。在超高速信號(hào)處理和實(shí)時(shí)測(cè)控方面有非常廣泛的應(yīng)用。
硬件描述語(yǔ)言HDL是一種用形式化方法描述數(shù)字電路和系統(tǒng)的語(yǔ)言。VHDL是硬件描述語(yǔ)言的幾種代表性語(yǔ)言的一種。VHDL(Very High Speed?Integrated?Circuit Hardware Description Language 即超高速集成電路硬件描述語(yǔ)言)主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,與其它的硬件描述語(yǔ)言相比,VHDL具有更強(qiáng)的行為描述能力,從而決定了它成為系統(tǒng)設(shè)計(jì)領(lǐng)域最佳的硬件描述語(yǔ)言。用VHDL設(shè)計(jì)的程序,通過綜合工具產(chǎn)生網(wǎng)表文件,下載到目標(biāo)器件,從而生成硬件電路。VHDL還是一種仿真語(yǔ)言,包括行為仿真、功能仿真和時(shí)序仿真,給系統(tǒng)設(shè)計(jì)各個(gè)階段的可行性做出了決策。
目前,這種高層次(high-level-design)的方法已被廣泛采用。據(jù)統(tǒng)計(jì),目前在美國(guó)硅谷約有90%以上的ASIC和FPGA采用硬件描述語(yǔ)言進(jìn)行設(shè)計(jì)。
數(shù)據(jù)采集在現(xiàn)代工業(yè)生產(chǎn)以及科學(xué)研究中的重要地位日益突出,并且實(shí)時(shí)高速數(shù)據(jù)采集的要求也不斷提高,在信號(hào)測(cè)量、圖像處理,音頻信號(hào)處理等一些高速、高精度的測(cè)量中,都需要進(jìn)行高速數(shù)據(jù)采集。本次設(shè)計(jì)就是用FPGA實(shí)現(xiàn)采樣系統(tǒng),來(lái)實(shí)現(xiàn)音頻信號(hào)的數(shù)據(jù)采集。
1??FPGA和VHDL概述
1.1 FPGA發(fā)展歷程
當(dāng)今社會(huì)是數(shù)字化的社會(huì),是數(shù)字集成電路廣泛應(yīng)用的社會(huì)。數(shù)字集成電路本身在不斷地進(jìn)行更新?lián)Q代。它由早期的電子管、晶體管、小中規(guī)模集成電路、發(fā)展到超大規(guī)模集成電路(VLSIC,幾萬(wàn)門以上)以及許多具有特定功能的專用集成電路。但是,隨著微電子技術(shù)的發(fā)展,設(shè)計(jì)與制造集成電路的任務(wù)已不完全由半導(dǎo)體廠商來(lái)獨(dú)立承擔(dān)。系統(tǒng)設(shè)計(jì)師們更愿意自己設(shè)計(jì)專用集成電路(ASIC)芯片,而且希望ASIC的設(shè)計(jì)周期盡可能短,最好是在實(shí)驗(yàn)室里就能設(shè)計(jì)出合適的ASIC芯片,并且立即投入實(shí)際應(yīng)用之中,因而出現(xiàn)了現(xiàn)場(chǎng)可編程邏輯器件(FPLD),其中應(yīng)用最廣泛的當(dāng)屬現(xiàn)場(chǎng)可編程門陣列(FPGA)和復(fù)雜可編程邏輯器件(CPLD)。
早期的可編程邏輯器件只有可編程只讀存儲(chǔ)器(PROM)、紫外線可擦除只讀存儲(chǔ)器(EPROM)和電可擦除只讀存儲(chǔ)器(EEPROM)三種。由于結(jié)構(gòu)的限制,它們只能完成簡(jiǎn)單的數(shù)字邏輯功能。其后,出現(xiàn)了一類結(jié)構(gòu)上較復(fù)雜的可編程芯片,即可編程邏輯器件(PLD),它能夠完成各種數(shù)字邏輯功能。典型的PLD由一個(gè)“與”門和一個(gè)“或”門陣列組成,而任意一個(gè)組合邏輯都可以用“與一或”表達(dá)式來(lái)描述,所以, PLD能以乘積和的形式完成大量的組合邏輯功能。
這一階段的產(chǎn)品主要有PAL(可編程陣列邏輯)和GAL(通用陣列邏輯)。PAL由一個(gè)可編程的“與”平面和一個(gè)固定的“或”平面構(gòu)成,或門的輸出可以通過觸發(fā)器有選擇地被置為寄存狀態(tài)。PAL器件是現(xiàn)場(chǎng)可編程的,它的實(shí)現(xiàn)工藝有反熔絲技術(shù)、EPROM技術(shù)和EEPROM技術(shù)。還有一類結(jié)構(gòu)更為靈活的邏輯器件是可編程邏輯陣列(PLA),它也由一個(gè)“與”平面和一個(gè)“或”平面構(gòu)成,但是這兩個(gè)平面的連接關(guān)系是可編程的。PLA器件既有現(xiàn)場(chǎng)可編程的,也有掩膜可編程的。在PAL的基礎(chǔ)上,又發(fā)展了一種通用陣列邏輯GAL (Generic Array Logic),如GAL16V8,GAL22V10 等。它采用了EEPROM工藝,實(shí)現(xiàn)了電可擦除、電可改寫,其輸出結(jié)構(gòu)是可編程的邏輯宏單元,因而它的設(shè)計(jì)具有很強(qiáng)的靈活性,至今仍有許多人使用。這些早期的PLD器件的一個(gè)共同特點(diǎn)是可以實(shí)現(xiàn)速度特性較好的邏輯功能,但其過于簡(jiǎn)單的結(jié)構(gòu)也使它們只能實(shí)現(xiàn)規(guī)模較小的電路。
為了彌補(bǔ)這一缺陷,20世紀(jì)80年代中期。Altera和Xilinx分別推出了類似于PAL結(jié)構(gòu)的擴(kuò)展型 CPLD(Complex Programmab1e Logic?Device)和與標(biāo)準(zhǔn)門陣列類似的FPGA(Field Programmable Gate Array),它們都具有體系結(jié)構(gòu)和邏輯單元靈活、集成度高以及適用范圍廣等特點(diǎn)。這兩種器件兼容了PLD和通用門陣列的優(yōu)點(diǎn),可實(shí)現(xiàn)較大規(guī)模的電路,編程也很靈活。與門陣列等其它ASIC(Application Specific IC)相比,它們又具有設(shè)計(jì)開發(fā)周期短、設(shè)計(jì)制造成本低、開發(fā)工具先進(jìn)、標(biāo)準(zhǔn)產(chǎn)品無(wú)需測(cè)試、質(zhì)量穩(wěn)定以及可實(shí)時(shí)在線檢驗(yàn)等優(yōu)點(diǎn),因此被廣泛應(yīng)用于產(chǎn)品的原型設(shè)計(jì)和產(chǎn)品生產(chǎn)(一般在10,000件以下)之中。幾乎所有應(yīng)用門陣列、PLD和中小規(guī)模通用數(shù)字集成電路的場(chǎng)合均可應(yīng)用FPGA和CPLD器件。
FPGA(現(xiàn)場(chǎng)可編程門陣列)與 CPLD(復(fù)雜可編程邏輯器件)都是可編程邏輯器件,它們是在PAL,GAL等邏輯器件的基礎(chǔ)之上發(fā)展起來(lái)的。同以往的PAL,GAL等相比較,F(xiàn)PGA的規(guī)模比較大,它可以替代幾十甚至幾千塊通用IC芯片。這樣的FPGA實(shí)際上就是一個(gè)子系統(tǒng)部件。這種芯片受到世界范圍內(nèi)電子工程設(shè)計(jì)人員的廣泛關(guān)注和普遍歡迎。
盡管FPGA和其它類型PLD的結(jié)構(gòu)各有其特點(diǎn)和長(zhǎng)處,但概括起來(lái),它們是由三大部分組成的:
一個(gè)二維的邏輯塊陣列,構(gòu)成了PLD器件的邏輯組成核心;
輸入/輸出塊;
連線資源:由各種長(zhǎng)度的連線線段組成,其中也有一些可編程的連接開關(guān),它們用于邏輯塊之間、邏輯塊與輸入/輸出塊之間的連接。
FPGA芯片都是特殊的ASIC芯片,它們除了具有ASIC的特點(diǎn)之外,還具有以下幾個(gè)優(yōu)點(diǎn):
(1)隨著VLSI(Very Large Scale IC,超大規(guī)模集成電路)工藝的不斷提高單一芯片內(nèi)部可以容納上百萬(wàn)個(gè)晶體管,F(xiàn)PGA芯片的規(guī)模也越來(lái)越大,其單片邏輯門數(shù)已達(dá)到上百萬(wàn)門,它所能實(shí)現(xiàn)的功能也越來(lái)越強(qiáng),同時(shí)也可以實(shí)現(xiàn)系統(tǒng)集成。
(2)FPGA芯片在出廠之前都做過百分之百的測(cè)試,不需要設(shè)計(jì)人員承擔(dān)投資的風(fēng)險(xiǎn)和費(fèi)用,設(shè)計(jì)人員只需在自己的實(shí)驗(yàn)室里就可以通過相關(guān)的軟硬件環(huán)境來(lái)完成芯片的最終功能設(shè)計(jì)。所以,F(xiàn)PGA的資金投入小,節(jié)省了許多潛在的花費(fèi)。
(3)用戶可以反復(fù)地編程、擦除、使用或者在外圍電路不動(dòng)的情況下用不同軟件就可實(shí)現(xiàn)不同的功能。
所以,用FPGA 試制樣片,能以最快的速度占領(lǐng)市場(chǎng)。FPGA軟件包中有各種輸入工具和仿真工具,及版圖設(shè)計(jì)工具和編程器等全線產(chǎn)品,電路設(shè)計(jì)人員在很短的時(shí)間內(nèi)就可完成電路的輸入、編譯、優(yōu)化、仿真,直至最后芯片的制作。當(dāng)電路有少量改動(dòng)時(shí),更能顯示出FPGA的優(yōu)勢(shì)。電路設(shè)計(jì)人員使用FPGA進(jìn)行電路設(shè)計(jì)時(shí),不需要具備專門的IC(集成電路)深層次的知識(shí), FPGA軟件易學(xué)易用,可以使設(shè)計(jì)人員更能集中精力進(jìn)行電路設(shè)計(jì),快速將產(chǎn)品推向市場(chǎng)。
1.2 VHDL語(yǔ)言介紹
VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語(yǔ)句外,VHDL的語(yǔ)言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級(jí)語(yǔ)言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件,一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)。應(yīng)用VHDL進(jìn)行工程設(shè)計(jì)的優(yōu)點(diǎn)是多方面的。
(1)與其他的硬件描述語(yǔ)言相比,VHDL具有更強(qiáng)的行為描述能力,從而決定了他成為系統(tǒng)設(shè)計(jì)領(lǐng)域最佳的硬件描述語(yǔ)言。強(qiáng)大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。
(2)VHDL豐富的仿真語(yǔ)句和庫(kù)函數(shù),使得在任何系統(tǒng)的設(shè)計(jì)早期就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對(duì)設(shè)計(jì)進(jìn)行仿真模擬。
(3)VHDL語(yǔ)句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。符合市場(chǎng)需求的大規(guī)模系統(tǒng)設(shè)計(jì),高速的完成必須有多人甚至多個(gè)開發(fā)組共同并行工作才能實(shí)現(xiàn)的工程。
(4)對(duì)于用VHDL完成的一個(gè)確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動(dòng)的把VHDL描述設(shè)計(jì)轉(zhuǎn)變成門級(jí)網(wǎng)表。
(5)VHDL對(duì)設(shè)計(jì)的描述具有相對(duì)獨(dú)立性,設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì)。
2??多通道采樣系統(tǒng)的組成
本系統(tǒng)硬件電路包括FPGA設(shè)計(jì)的多通道采樣控制器和相應(yīng)的通道選擇電路,A/D轉(zhuǎn)換電路,由于采樣音頻信號(hào),所以需要設(shè)計(jì)音頻的放大和濾波電路。系統(tǒng)組成部分如圖2.1所示:

圖2.1 多通道系統(tǒng)的組成
3?總體方案設(shè)計(jì)與論證
3.1 方案設(shè)計(jì)
3.1.1方案一
用FPGA實(shí)現(xiàn)一個(gè)3位8進(jìn)制的計(jì)數(shù)器,記數(shù)脈沖是FPGA鎖存AD轉(zhuǎn)換數(shù)據(jù)的鎖存信號(hào),計(jì)數(shù)器的輸出作為數(shù)據(jù)開關(guān)CD4051的地址。利用進(jìn)程的并行操作來(lái)實(shí)現(xiàn)AD574來(lái)實(shí)現(xiàn)AD轉(zhuǎn)換,這個(gè)方案的優(yōu)點(diǎn)是節(jié)省了FPGA芯片的資源,但數(shù)字電路較為復(fù)雜,而且AD574的轉(zhuǎn)換速率最高達(dá)到50KHz,不能達(dá)到8通道的高速音頻采集。
3.1.2方案二
用FPGA實(shí)現(xiàn)一個(gè)3位8進(jìn)制的計(jì)數(shù)器,記數(shù)脈沖是FPGA鎖存AD轉(zhuǎn)換數(shù)據(jù)的鎖存信號(hào),計(jì)數(shù)器的輸出作為數(shù)據(jù)開關(guān)CD4051的地址。用有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)對(duì)AD7892的控制,用外部RAM實(shí)現(xiàn)采樣數(shù)據(jù)的存儲(chǔ),這樣電路實(shí)現(xiàn)比較簡(jiǎn)單,而且AD7892的采樣速率可以達(dá)到500KHz,可以實(shí)現(xiàn)8個(gè)通道同時(shí)8路音頻信號(hào)采集。但需要外接RAM芯片,成本比較高,而且外部RAM的讀寫速度達(dá)不到高速數(shù)據(jù)采集的要求。
3.1.3方案三
用FPGA實(shí)現(xiàn)一個(gè)3位8進(jìn)制的計(jì)數(shù)器,記數(shù)脈沖是FPGA鎖存AD轉(zhuǎn)換數(shù)據(jù)的鎖存信號(hào),計(jì)數(shù)器的輸出作為數(shù)據(jù)開關(guān)CD4051的地址。用有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)對(duì)AD7892的控制,這樣電路實(shí)現(xiàn)比較簡(jiǎn)單,而且AD7892的采樣速率可以達(dá)到500KHz,可以實(shí)現(xiàn)8個(gè)通道同時(shí)8路音頻信號(hào)采集。同時(shí)采用FIFO模塊,讓數(shù)字?jǐn)?shù)據(jù)先存到隊(duì)列中,一邊往隊(duì)列中寫數(shù)據(jù),一邊從隊(duì)列中讀數(shù)據(jù),這樣就對(duì)數(shù)字?jǐn)?shù)據(jù)起了一個(gè)高速緩存的作用,更加快了整個(gè)系統(tǒng)的運(yùn)行速度。
3.2?方案比較
為獲得更佳的系統(tǒng)功能,使系統(tǒng)資源能得到充分地利用,我們采用第三種方案。主要是因?yàn)?/span>狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊,為了消除電路中的毛刺現(xiàn)象,在狀態(tài)機(jī)設(shè)計(jì)中有很多種設(shè)計(jì)方案可供選擇。FIFO隊(duì)列的讀寫操作只需要一個(gè)周期就可以完成,起到高速緩存的作用,這樣更加快了整個(gè)系統(tǒng)的運(yùn)行速度,解決了采樣和存儲(chǔ)的“瓶頸問題”,更加有效地利用FPGA芯片的資源。
4??單元電路的設(shè)計(jì)
由圖2.1可以看出,系統(tǒng)可以分為4個(gè)大部分,分別是音頻放大、濾波部分,F(xiàn)PGA控制部分,AD采樣電路,F(xiàn)PGA硬件電路的設(shè)計(jì)。其中以FPGA控制部分為主體部分,它涉及到AD采樣控制,通道選擇控制,串并輸出模式選擇模塊,延時(shí)模塊以及FIFO模塊介紹。這些模塊的實(shí)現(xiàn)是系統(tǒng)實(shí)現(xiàn)的關(guān)鍵。下面分別對(duì)系統(tǒng)的這些單元電路做詳細(xì)的闡述。
4.1 音頻放大、濾波部分
人的耳朵可以辨別到的聲音頻率范圍是:20Hz-20KHz,所以對(duì)音頻放大部分的放大器有帶寬要求,要求放大器是寬頻帶的。所以本次設(shè)計(jì)選用專門用于音頻放大的高速低噪聲運(yùn)放NE5532作為放大部分的放大器。濾波部分是一個(gè)有源帶通濾波器,濾掉電路的20Hz以下的低頻和20KHz以上的高頻干擾。
4.1.1音頻放大部分
音源采用普通CD輸出的音頻信號(hào),它產(chǎn)生輸出的信號(hào)的幅度約有300mV左右,根據(jù)設(shè)計(jì)AD7892的輸入電壓是±10V,選擇放大器的放大倍數(shù)在10-30之間,通過一個(gè)精密可調(diào)電阻來(lái)調(diào)節(jié)放大倍數(shù)。音頻放大芯片NE5532特性是雙運(yùn)放、寬頻帶、低噪聲、轉(zhuǎn)換速率大、電源范圍廣。
NE5532的管腳結(jié)構(gòu)及其功能:
(1腳)輸出信號(hào)??????????????????(2腳)反相端輸入
???(3腳)同相端輸入????????????????(4腳)負(fù)電源
???(5腳)同相端輸入????????????????(6腳)反相端輸入
???(7腳)輸出信號(hào)??????????????????(8腳)正電源
NE5532技術(shù)參數(shù)
????參數(shù)名稱??????單位??????數(shù)據(jù)值
????輸入失調(diào)電壓???mV????????±0.5?
????溫漂??????????μV/℃????????5
????增益帶寬積?????MHz?????????10
????轉(zhuǎn)換速率???????V/us?????????9
????諧波失真????????%?????????0.001
????工作電流????????mA??????????8
工作電壓????????V?????????±3-±22
設(shè)計(jì)中因?yàn)椴捎梅聪喽溯斎胍纛l信號(hào),為了在輸出端得到正向的音頻信號(hào),所以放大部分采用兩級(jí)放大,前級(jí)放大10倍,后級(jí)放大通過可調(diào)電阻設(shè)計(jì)在1-3倍,這樣得到的正向音頻信號(hào)就方便了AD采樣。
4.1.2有源濾波器的設(shè)計(jì)
在一個(gè)實(shí)際的電子系統(tǒng)中,輸入信號(hào)往往因受干擾等原因而含有一些不必要的成份,應(yīng)設(shè)法將干擾衰減到足夠小的程度。在其他一些情況,我們需要的信號(hào)和干擾信號(hào)混在一起,如果這兩個(gè)信號(hào)在頻率成分上有較大的差別,就可以用濾波的方法將所需要的信號(hào)濾出。為了解決上述問題,可采用濾波電路。濾波器包括電抗性元件L、C構(gòu)成的無(wú)源濾波器、由集成運(yùn)算放大器組成的有源濾波器、以及晶體濾波器等。本次設(shè)計(jì)需要的通帶頻率范圍是20Hz-20KHz,如果用有源帶通濾波器來(lái)實(shí)現(xiàn),考慮到該帶通濾波器的上下截止頻率之比20000/20=1000,大于一個(gè)倍頻程,為一個(gè)寬帶濾波器,所以采用一個(gè)低通濾波器和一個(gè)高通濾波器級(jí)聯(lián)來(lái)實(shí)現(xiàn)帶通濾波。
(1)設(shè)計(jì)步驟
有源濾波器的設(shè)計(jì),就是根據(jù)所給定的指標(biāo)要求,確定濾波器的階數(shù)n,選擇具體的電路形式,算出電路中各元件的具體數(shù)值,安裝電路和調(diào)試,使設(shè)計(jì)的濾波器滿足指標(biāo)要求,具體步驟如下:
①根據(jù)阻帶衰減速率要求,確定濾波器的階數(shù)n。
②選擇具體的電路形式。
③根據(jù)電路的傳遞函數(shù)和附錄中表1歸一化濾波器傳遞函數(shù)的分母多項(xiàng)式,建立起系數(shù)的方程組。
④解方程組求出電路中元件的具體數(shù)值。
⑤將設(shè)計(jì)好的電路,在EWB上進(jìn)行仿真。
⑥按照所設(shè)計(jì)的電路,將元件安裝在實(shí)驗(yàn)板上。
⑦安裝電路并進(jìn)行調(diào)試,使電路的性能滿足指標(biāo)要求。
(2)對(duì)安裝好的電路按以下方法進(jìn)行調(diào)整和測(cè)試
①?仔細(xì)檢查安裝好的電路,確定元件與導(dǎo)線連接無(wú)誤后,接通電源。
②?在電路的輸入端輸入U(xiǎn)i=10mv的正弦信號(hào),慢慢改變輸入信號(hào)的頻率(注意保持Ui的值不變),用示波器觀察波形的變化,在濾波器的截止頻率附近,觀察電路是否具有濾波特性,若沒有濾波特性,應(yīng)檢查電路,找出故障原因并排除之。
③?若電路具有濾波特性,可進(jìn)一步進(jìn)行調(diào)試。對(duì)于低通和高通濾波器應(yīng)觀測(cè)其截止頻率是否滿足設(shè)計(jì)要求,若不滿足設(shè)計(jì)要求,應(yīng)根據(jù)有關(guān)的公式,確定應(yīng)調(diào)整哪一個(gè)元件才能使截止頻率既能達(dá)到設(shè)計(jì)要求又不會(huì)對(duì)其它的指標(biāo)參數(shù)產(chǎn)生影響。然后觀測(cè)電壓放大倍數(shù)是否滿足設(shè)計(jì)要求,若達(dá)不到要求,應(yīng)根據(jù)相關(guān)的公式調(diào)整有關(guān)的元件,使其達(dá)到設(shè)計(jì)要求。最后設(shè)計(jì)的有源帶通濾波器在EWB上的仿真圖如圖4.1所示:

圖4.1 有源帶通濾波器的仿真圖
有源帶通濾波電路分成兩個(gè)部分,高通部分和低通部分,圖4.2是20HZ的高通濾波器,圖4.3是20KHZ的低通濾波器。

圖4.2 低通濾波器電路圖

圖4.3 高通濾波器電路圖
音頻信號(hào)經(jīng)過音頻放大電路放大后就進(jìn)入了上圖的電路。經(jīng)過20HZ-20KHZ的帶通濾波電路進(jìn)行濾波。
4.2 AD采樣電路
由于人的耳朵能識(shí)別的音頻的頻率范圍是20Hz-20KHz,根據(jù)奈魁斯特(NYQUIST)采樣定理知道,要使采樣后的數(shù)字信號(hào)能恢復(fù)成模擬信號(hào),采樣的頻率必須是模擬信號(hào)的頻率的兩倍,即本次采樣系統(tǒng)的采樣頻率最低要設(shè)計(jì)在40KHz,而一般CD格式的音頻信號(hào)的采樣頻率是44.1KHz,由于是8路通道的采樣,所以AD芯片的最低采樣頻率應(yīng)該是44.1KHz*8=352.8KHz,所以選擇采樣頻率為500KHz的AD7892。這樣我們每個(gè)通道的采樣頻率就是500KHz/8=62.5KHz。
4.2.1芯片介紹
AD7892是美國(guó)ANALOG DEVICE公司生產(chǎn)的具有采樣保護(hù)功能的逐次逼近式12位高速ADC,根據(jù)輸入模擬信號(hào)范圍的不同可分為AD7892-1,AD7892-2,AD7892-3三種類型。其中,AD7892-1輸入信號(hào)范圍為±10V或者±5V(可設(shè)置),AD7892-2輸入信號(hào)范圍為0~+2.5V,這兩種的采樣轉(zhuǎn)換速率均為500kSPS,AD7892-3的輸入信號(hào)范圍為±2.5V,采樣轉(zhuǎn)換速率為600kSPS,AD7892-1和AD7892-3的輸入信號(hào)過壓保護(hù)電壓分別為±17V和±7V。本次設(shè)計(jì)選用的是AD7892AN-1,因?yàn)槠洳蓸铀俾室逊?路的音頻采集速率。
AD7892模數(shù)轉(zhuǎn)換器具有如下特點(diǎn):
①單電源工作(+5V);
②內(nèi)含采樣保持放大器;
③具有高速串、并行接口。
AD7892的內(nèi)部框圖如圖4.5所示,它內(nèi)含模擬信號(hào)換算電路、采樣保持電路、A/D轉(zhuǎn)換的基準(zhǔn)電源(+2.5V)、時(shí)鐘電路、12位逐次逼近式ADC電路和控制電路,轉(zhuǎn)換的結(jié)果可以并行輸出,也可以串行輸出,非常容易和微處理器或DSP(數(shù)字信號(hào)處理器)接口。AD7892共有兩種封裝,一種是24腳雙列直插式DIP封裝,另一種為貼面式SOIC封裝,AD7892的引腳排列如圖4.4所示。各個(gè)引腳的功能說(shuō)明如表4.1所列。

??
圖4.4 AD7892引腳排列圖?

? ? ? ? ?
圖4.5 AD7892功能框圖
表4.1?AD7892的管腳名稱及功能說(shuō)明

(1) AD7892的并行輸出時(shí)序
當(dāng)MODE引腳接高電平時(shí),AD7892為并行輸出方式,其時(shí)序如圖4.6所示。CONVST信號(hào)t1應(yīng)大于35ns,在上升沿,采樣保護(hù)器進(jìn)入保持狀態(tài),并開始A/D轉(zhuǎn)換,轉(zhuǎn)換時(shí)間tCONV為1.47μs(AD7892-3)或1.6μs(AD7892-1,AD7892-2),轉(zhuǎn)換結(jié)束后EOC腳輸出t2=60ns的負(fù)脈沖以進(jìn)行中斷或數(shù)據(jù)鎖存,并在EOC下降沿開始下次采樣,也就是轉(zhuǎn)換一結(jié)束就開始下次采樣,采樣時(shí)間tACQ要大于等于200ns(AD7892-3)或400ns(AD7892-1,AD7892-2),當(dāng)轉(zhuǎn)換結(jié)束后(EOC的下降沿),只要CS和RD有效,經(jīng)過t6=40ns的時(shí)間,即可在DB0~DB11上獲得轉(zhuǎn)換后的12位數(shù)據(jù),CS和一般的片選信號(hào)相同,可一直有效,外加RD的時(shí)間t5亦應(yīng)大于35ns。下次采樣和本次的輸出可同時(shí)進(jìn)行,所以最小的一次采樣轉(zhuǎn)換輸出時(shí)間對(duì)于AD7892-3來(lái)說(shuō)為1.47+0.2=1.67μs(600kSPS),而對(duì)于AD7892-1和AD7892-2來(lái)說(shuō)為1.6+0.4=2μs (即500kSPS),圖6中t9=
200ns,t7=5ns,t3、t4、t8可為零(此時(shí)t9=tACQ)。

圖4.6?AD7892的并行輸出時(shí)序
(2)?轉(zhuǎn)換后的二進(jìn)制代碼
由于三種類型的模擬輸入范圍不相同,因而其轉(zhuǎn)換輸出的二進(jìn)代碼碼也不相同,表3所列為AD7892-1和AD7892-3的輸入輸出代碼。
表4.2?AD7892-1,AD7892-3理想的輸入輸出表

對(duì)于AD7892-1和AD7892-3,F(xiàn)SR為滿度范圍,如輸入為±10V,則FSR=20V,輸入為±5V,F(xiàn)SR=10V,輸入為±2.5V,F(xiàn)SR=5V.模擬信號(hào)從-FSR/2→GND→+FSR/2變化,輸出則從100…000→111…111→000…000→011…111變化。而對(duì)于AD7892-2,在輸入從0→+2.5V變化時(shí),輸出則從全0→全1。
4.2.2芯片應(yīng)用
如圖4.7所示為AD7892應(yīng)用于采樣系統(tǒng)。目的是把音頻輸入模擬信號(hào)轉(zhuǎn)換為12位數(shù)字信號(hào),該電路采用的是AD7892AN-1的并行輸出模式,其采集速度設(shè)計(jì)為500kSPS。
在此應(yīng)用中,將IN2接到AGND,IN1接音頻輸入信號(hào),其輸入范圍為±10V,音頻信號(hào)經(jīng)過放大、濾波和AD7892的輸出信號(hào)為100…000~111…111,即從2048→4095,在D11反相后,在狀態(tài)機(jī)的第5個(gè)狀態(tài)鎖存器鎖存的數(shù)據(jù)為000…000→011…111,即從0→2047。由P/S選擇相應(yīng)的輸出模式輸出。

圖4.7 AD7892采樣系統(tǒng)
????電路中的CONV,EOC,CS,RD控制信號(hào)均由有限狀態(tài)機(jī)提供,D[0]到D[11]數(shù)字信號(hào)是經(jīng)過AD采樣后的數(shù)字信號(hào)。
4.3 FPGA控制部分
4.3.1通道選擇模塊
通道選擇部分是一個(gè)二進(jìn)制模8的計(jì)數(shù)器,計(jì)數(shù)器的時(shí)鐘是AD數(shù)字信號(hào)的鎖存信號(hào),每次鎖存數(shù)據(jù)后,計(jì)數(shù)器就會(huì)一次進(jìn)行加一操作,CD4051選擇下一個(gè)通道的音頻信號(hào)進(jìn)行采集。在MAX+PlusⅡ中用VHDL語(yǔ)言設(shè)計(jì)圖形如下圖4.8所示:

圖4.8 通道選擇部分
通過CNT[0]到CNT[2]來(lái)選擇相應(yīng)的通道,CD4051的輸出就是最后要進(jìn)行AD采樣的音頻信號(hào)。例如:若CNT[0]CNT[1]CNT[2]=“000”,則選擇第一通道音頻信號(hào)進(jìn)行AD采樣。這個(gè)部分實(shí)現(xiàn)的重點(diǎn)是對(duì)數(shù)字鎖存信號(hào)記數(shù),計(jì)數(shù)器的輸出作為CD4051的通道選擇地址。
通道選擇部分的主體程序如下:
二進(jìn)制模8計(jì)數(shù)器
signal q:std_logic_vector(2 downto 0);
?begin
?counter:process(clk)
???begin
??????if(clk'event?and clk='1') then
?????????if?q="111" then
????????????q<="000";
?????????else
????????????q<=q+1;
??????end?if;
end if;
cnt<=q;? ? ? ? ?
process;
通道選擇模塊的仿真圖如圖4.9所示:

圖4.9 通道模塊仿真圖
4.3.2AD7892控制部分
這個(gè)部分的主要工作是對(duì)AD7892的控制,使得AD7892可以工作。對(duì)AD7892的控制部分主要是通過一個(gè)有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)的,通過對(duì)AD7892的工作時(shí)序觀察,用有限狀態(tài)機(jī)對(duì)AD的控制信號(hào)做出描述,從而讓AD芯片能工作起來(lái),這就是有限狀態(tài)機(jī)的主題任務(wù),當(dāng)然還有一些其他的功能,將在后序的部分介紹,這里先對(duì)有限狀態(tài)機(jī)作個(gè)闡述。
(1)有限狀態(tài)機(jī)的介紹
AD采樣的控制部分主要是設(shè)計(jì)一個(gè)有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn),利用VHDL設(shè)計(jì)的使用邏輯系統(tǒng)中,有許多是可以利用有限狀態(tài)機(jī)的設(shè)計(jì)方案來(lái)描述和實(shí)現(xiàn)的,無(wú)論與基于VHDL的其他設(shè)計(jì)方案相比,還是與完成相似功能的CPU相比,狀態(tài)機(jī)都有其難以超越的優(yōu)越性,它主要表現(xiàn)在以下幾個(gè)方面:
有限狀態(tài)機(jī)克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點(diǎn)。狀態(tài)機(jī)的工作方式是根據(jù)控制信號(hào)按照預(yù)先設(shè)定的狀態(tài)進(jìn)行順序運(yùn)行的,狀態(tài)機(jī)是純硬件數(shù)字系統(tǒng)中的順序控制電路,因此狀態(tài)機(jī)在其運(yùn)行方式上類似于控制靈活和方便的CPU,而在運(yùn)行速度和工作可靠方面都優(yōu)于CPU。
由于狀態(tài)機(jī)的結(jié)果模式相對(duì)簡(jiǎn)單,設(shè)計(jì)方案相對(duì)固定,特別是可以定義符號(hào)化枚舉類型的狀態(tài),這一切都為VHDL綜合器盡可能發(fā)揮其強(qiáng)大的優(yōu)化功能提供了有利條件。而且,性能良好的綜合器都具備許多可控或自動(dòng)的專門用于優(yōu)化狀態(tài)機(jī)的功能。
狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊,這對(duì)于對(duì)付大規(guī)模邏輯電路設(shè)計(jì)中令人深感棘手的競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象無(wú)疑是一個(gè)上佳的選擇。為了消除電路中的毛刺現(xiàn)象,在狀態(tài)機(jī)設(shè)計(jì)中有很多種設(shè)計(jì)方案可供選擇。
與VHDL的其他描述方式相比,狀態(tài)機(jī)的VHDL表述豐富多樣、程序?qū)哟畏置?,結(jié)構(gòu)清晰,易懂易讀;在排錯(cuò)、修改和模塊移植方面也有其獨(dú)特的特點(diǎn)。
在高速運(yùn)算和控制方面,狀態(tài)機(jī)就更有其巨大的優(yōu)勢(shì)。由于在VHDL中,一個(gè)狀態(tài)機(jī)可以由多個(gè)進(jìn)程構(gòu)成,一個(gè)結(jié)構(gòu)體可以包括多個(gè)狀態(tài)機(jī),而一個(gè)單獨(dú)的狀態(tài)機(jī)(或多個(gè)并行進(jìn)程的狀態(tài)機(jī))以順序方式所能完成的運(yùn)算和控制方面的工作與一個(gè)CPU的功能類似。因此,一個(gè)設(shè)計(jì)實(shí)體的功能便類似于一個(gè)含有并行運(yùn)行的CPU的高性能微處理器的功能。事實(shí)上,多CPU的微處理早已在通信、工控和軍事等領(lǐng)域有了十分廣泛的應(yīng)用。
就可靠性而言,狀態(tài)機(jī)的優(yōu)勢(shì)也是十分明顯的。CPU本身的結(jié)構(gòu)特點(diǎn)與執(zhí)行軟件指令的工作方式?jīng)Q定了任何CPU都不可能獲得圓滿的容錯(cuò)保障,這已是不爭(zhēng)的事實(shí)了。因此,用于要求高可靠性的特殊環(huán)境中的電子系統(tǒng)中,如果以CPU作為主控部件,應(yīng)是一項(xiàng)錯(cuò)誤的決策。然而,在狀態(tài)機(jī)系統(tǒng)就不同了,首先它是由純硬件電路構(gòu)成,不存在CPU運(yùn)行軟件過程中固有的缺陷;其次是由于狀態(tài)機(jī)的設(shè)計(jì)中能使用各種完整的容錯(cuò)技術(shù);再次是當(dāng)狀態(tài)機(jī)進(jìn)入非法狀態(tài)并從中跳出,進(jìn)入正常狀態(tài)所耗的時(shí)間十分短暫,通常只有2、3個(gè)時(shí)鐘周期,約十個(gè)ns,尚不足對(duì)系統(tǒng)的運(yùn)行構(gòu)成損害;而CPU通過復(fù)位方式從非法運(yùn)行方式中恢復(fù)過來(lái),耗時(shí)達(dá)到十ms,這對(duì)于高速高可靠系統(tǒng)顯然是無(wú)法容忍,特別是本次設(shè)計(jì)的采集音頻信號(hào),十ms的就會(huì)丟失很多的模擬數(shù)據(jù),這樣就會(huì)讓音頻信號(hào)的不完整,所以采用有限狀態(tài)機(jī)是一個(gè)很好的選擇。
(2)有限狀態(tài)機(jī)的設(shè)計(jì)
根據(jù)AD7892的時(shí)序圖設(shè)計(jì)的狀態(tài)轉(zhuǎn)換圖如圖4.10所示:

圖4.10??AD采樣的狀態(tài)轉(zhuǎn)移圖
(由于FPGA芯片時(shí)鐘定在20MHZ,故一個(gè)周期是0.05us,完成一次AD采樣,AD7982AN-1大約需要2us,40個(gè)時(shí)鐘周期)
ST1:對(duì)AD7892的初始化,此時(shí)conv<='1';cs<='1';rd<='1';lock<='0';wr_en='0';rd_en='0'
ST2:?jiǎn)?dòng)AD7892輸入端,使采樣保持器保持開始轉(zhuǎn)換,此時(shí)conv<='0';cs<='1';rd<='1';lock<='0';wr_en='0';rd_en='0'
ST3:開始進(jìn)行模數(shù)轉(zhuǎn)換,此時(shí)conv<='1';cs<='1';rd<='1';lock<='0';wr_en='0';rd_en='0';
ST4:采樣周期等待,等待EOC跳變低電平,此時(shí)conv<='1';cs<='1';rd<='1';lock<='0';wr_en='0';rd_en='0';
ST5:判斷EOC是否跳變高電平,若跳變,則開始讀數(shù)據(jù),此時(shí)conv<='1';cs<='1';rd<='1';lock<='0';wr_en='0';rd_en='0'
ST6:鎖存信號(hào)有效,鎖存轉(zhuǎn)換后的數(shù)據(jù)到12位并行輸出口,F(xiàn)IFO的寫信號(hào)有效,此時(shí)conv<='1';cs<='0';rd<='0';lock<='1';wr_en='1';rd_en='0'
ST7:從FIFO中讀出寫入的數(shù)據(jù),此時(shí)conv<='1';cs<='1';rd<='1';lock<='0';wr_en='0';rd_en='1'
ST8:等待狀態(tài),準(zhǔn)備下次的采樣,此時(shí)conv<='1';cs<='1';rd<='1';lock<='0';wr_en='0';rd_en='0'
程序的主體如下:
com1:process(current_state,eoc)
???begin
??????case current_state is
???????????when?st1 => next_state <= st2;
?????????when st2 => next_state <= st3;
??????????when st3 => next_state <= st4;
???????????
???????????when?st4 => if (eoc='1') then next_state <= st4;
???????????????????else next_state <= st5;
???????????????????????end?if;
???????????when?st5 => if (eoc='0') then next_state <= st5;
????????????????????????else?next_state <=st6;
???????????????????????end?if;
???????????when?st6 => next_state <= st7;
???????????when?st7 => next_state <= st8;
???????????when?st8 => next_state <= st1;
???????????when?others => next_state<=st1;
???????????end?case;
?????end?process com1;
com2:process(current_state)
?????begin
??????case?current_state is
???????????when?st1 => conv<='1';cs<='1';rd<='1';lock<='0';wr_en<='0';rd_en<='0';
???????????when?st2 => conv<='0';cs<='1';rd<='1';lock<='0';wr_en<='0';rd_en<='0';
???????????when?st3 => conv<='1';cs<='1';rd<='1';lock<='0';wr_en<='0';rd_en<='0';
???????????when?st4 => conv<='1';cs<='1';rd<='1';lock<='0';wr_en<='0';rd_en<='0';
???????????when?st5 => conv<='1';cs<='1';rd<='1';lock<='0';?wr_en<='0';rd_en<='0';
???????when st6 => conv<='1';cs<='0';rd<='0';lock<='1';?wr_en<='1';rd_en<='0';
???????????when?st7 => conv<='1';cs<='1';rd<='1';lock<='0';?wr_en<='0';rd_en<='1';
???????????when?st8 => conv<='1';cs<='1';rd<='1';lock<='0';wr_en<='0';rd_en<='0';
???????????when?others => conv<='1';cs<='1';rd<='1';lock<='0';wr_en<='0';rd_en<='0';
??????end?case;
?????end?process com2;
com3:process(clk)
variable dog_count:integer range 0 to 64;
variable com3_num_count:integer range 0 to 16553500;
?????begin
??????if(clk'event?and clk='1') then
??????current_state<=next_state;
??????--看門狗
??????if(current_state=st4) then
??????m_watchdog <= s0;
???????end?if;
???????if(current_state=st6)?then
??????m_watchdog <= s1;
??????dog_count:=0;
???????end?if;??????
???if(m_watchdog=s0) then
???????dog_count:=dog_count+1;
?????if(dog_count>40) then
????????current_state<=st1;
????????dog_count:=0;
?????end if;
???end if;
??????--看門狗
??????end?if;
????end?process com3;
latch1:process(lock)
????????begin
?????????if?lock='1' and lock'event then regl1<=D;
?????????end?if;?
???????end?process latch1;
regl<='0'&b2&b1&b0?l1;
Q<=regl1;
由程序三個(gè)主控進(jìn)程可以知道,此狀態(tài)機(jī)屬于Moore機(jī),外加一個(gè)輔助進(jìn)程,即鎖存器進(jìn)程LATCH1,層次清晰,各進(jìn)程分工明確。在一個(gè)完整的采樣周期中,狀態(tài)機(jī)中最先被啟動(dòng)的是以CLK為敏感信號(hào)的時(shí)序進(jìn)程,接著兩個(gè)組合進(jìn)程COM1和COM2被同時(shí)啟動(dòng),因?yàn)樗麄円酝恍盘?hào)current_state為敏感信號(hào)。最后被啟動(dòng)的是鎖存進(jìn)程,它是在狀態(tài)機(jī)進(jìn)入ST6后被啟動(dòng)的,即此時(shí)LOCK產(chǎn)生了一個(gè)上升沿信號(hào),從而啟動(dòng)進(jìn)程LATCH1,將AD7892在本次采樣周期的12位數(shù)據(jù)和通道選擇的3位數(shù)據(jù)鎖存到寄存器中,同時(shí)FIFO存儲(chǔ)器從Q端讀到穩(wěn)定正確的數(shù)據(jù),進(jìn)入下一個(gè)狀態(tài)后FIFO又把數(shù)據(jù)讀出到q端,這樣一個(gè)采樣周期就完成。在MAX PlusⅡ仿真的波形如下圖4.11所示:

圖4.11 AD采樣控制仿真波形
從仿真波形可以看出, 控制信號(hào)符合AD7892的時(shí)序,可以對(duì)AD進(jìn)行采樣控制,同時(shí)數(shù)據(jù)的鎖存信號(hào)也符合題目設(shè)計(jì)要求。但從仿真圖中可以看到,這些信號(hào)都很多毛刺,由于毛刺很短,多為幾納秒,基本上都不可能滿足數(shù)據(jù)的建立和保持時(shí)間,這對(duì)整個(gè)系統(tǒng)的影響不會(huì)很大,所以就沒有對(duì)這些毛刺進(jìn)行處理。
4.3.3延時(shí)模塊的設(shè)計(jì)
在采樣控制部分的狀態(tài)機(jī)中也加入了輸出數(shù)據(jù)編碼部分,因?yàn)槭茄h(huán)采集8路的模擬信號(hào),而輸出為一路輸出,這樣就需要對(duì)輸出信號(hào)進(jìn)行標(biāo)志,方法就是把12位數(shù)據(jù)轉(zhuǎn)換為16位數(shù)據(jù),第一位是0,第二位到第四位是標(biāo)志位,標(biāo)志是哪一通道數(shù)字信號(hào),如果是串行輸出的時(shí)候可以讓接受方知道是第幾通道的數(shù)據(jù)。又因?yàn)閿?shù)字信號(hào)數(shù)據(jù)鎖存信號(hào)是比通道選擇信號(hào)早一個(gè)周期,所以要加一個(gè)延時(shí)模塊,這樣就可以實(shí)現(xiàn)每次鎖存了通道的標(biāo)志位和采樣的數(shù)據(jù)。通過程序來(lái)實(shí)現(xiàn)對(duì)通道選擇信號(hào)的延時(shí)。如果當(dāng)前選擇第3個(gè)通道采樣,那么通道選擇信號(hào)就是“011”,在這個(gè)通道信號(hào)采集完畢后鎖存信號(hào)就會(huì)使計(jì)數(shù)器進(jìn)行加1操作,這樣通道選擇信號(hào)就是“100”,而這個(gè)時(shí)候鎖存的數(shù)據(jù)需要“011”,所以將標(biāo)志位信號(hào)通過“100”的延時(shí)一個(gè)時(shí)鐘周期變成“011”即可。VHDL完成可以勝任。
延時(shí)模塊程序主體部分
process(in1,in2,in3)
begin
comin<=in3&in2&in1;
case comin is
??????????when?"000"=> comout<="111";
??????????when?"001"=> comout<="000";
??????????when?"010"=> comout<="001";
??????????when?"011"=> comout<="010";
??????????when?"100"=> comout<="011";
??????????when?"101"=> comout<="100";
??????????when?"110"=> comout<="101";
??????????when?"111"=> comout<="110";
??????????when?others=>comout<="ZZZ";
????????end?case;
out1<=comout(0);out2<=comout(1);out3<=comout(2);
??end?process;
4.3.4串并輸出選擇控制
從AD控制模塊輸出的數(shù)據(jù)是并行16位數(shù)據(jù)。串行輸出的原理是:通過一個(gè)16選1的數(shù)據(jù)選擇器連續(xù)選擇輸出的并行16位數(shù)據(jù),數(shù)據(jù)選擇器的選擇信號(hào)是一個(gè)對(duì)系統(tǒng)時(shí)鐘記數(shù)的二進(jìn)制模16的計(jì)數(shù)器輸出,這樣就可以實(shí)現(xiàn)將并行16位數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)。通過外部輸入信號(hào)P/S可以實(shí)現(xiàn)是串行輸出還是并行輸出,如果P/S是低電平,就選通16選1的選擇器,禁止16個(gè)與門的輸出,此時(shí)為串行輸出;如果P/S為高電平,則禁止16選1的選擇器,同時(shí)打開16個(gè)與門,此時(shí)為并行16位輸出。輸出模式可選擇性使得系統(tǒng)的應(yīng)用相當(dāng)廣泛,串行輸出可以用于通信信號(hào)的采集,方便調(diào)制后發(fā)射到遠(yuǎn)程接受端,遠(yuǎn)程接收端對(duì)采集的數(shù)據(jù)進(jìn)行解調(diào);而并行輸出模式則可以通過高速存儲(chǔ)器將采集的信號(hào)放到微機(jī)或者其他的處理器上,根據(jù)采集的數(shù)據(jù)進(jìn)行相應(yīng)的控制。
4.3.5?FIFO模塊
本設(shè)計(jì)項(xiàng)目是利用FPGA直接控制AD7892來(lái)實(shí)現(xiàn)對(duì)音頻信號(hào)的高速信號(hào)采集,在完成對(duì)一個(gè)周期的采樣后,將數(shù)據(jù)存儲(chǔ)到存儲(chǔ)器中,然后從存儲(chǔ)器中讀出數(shù)據(jù)并顯示出來(lái),采樣存儲(chǔ)器可以有多種方式實(shí)現(xiàn):
(1)外部隨機(jī)存儲(chǔ)器RAM,其優(yōu)點(diǎn)是存儲(chǔ)量大,缺點(diǎn)是需要外接芯片,且常用的RAM讀寫速度較低;與FPGA間的連接線過長(zhǎng);特別是在存儲(chǔ)數(shù)據(jù)時(shí)需要對(duì)地址進(jìn)行加一操作,影響讀寫速度。
(2)內(nèi)部隨機(jī)存儲(chǔ)器RAM,在Altera的大部分FPGA器件中都含有EAB模塊,由此可配置成不同類型的內(nèi)部高速RAM。與外部RAM相比,盡管內(nèi)部RAM有更大的優(yōu)勢(shì),但使用中仍然存在需要對(duì)地址加一的操作,而影響數(shù)據(jù)讀寫速度的缺點(diǎn)。
(3)內(nèi)部FIFO,相比之下,F(xiàn)IFO更適合與用做高速AD采樣的數(shù)據(jù)存儲(chǔ)器,因?yàn)镕IFO的寫入時(shí)間只有一個(gè)時(shí)鐘周期,因此決定使用LPM_FIFO作為采樣存儲(chǔ)器。
由計(jì)算公式:數(shù)據(jù)量(字節(jié)) =(采樣頻率×量化精度×聲道數(shù))/8×?xí)r間(秒)以及本次設(shè)計(jì)的采樣頻率為62.5KHz,量化精度為12位,聲道是單聲道,可以計(jì)算出一分種采樣所需要的存儲(chǔ)空間是5625000個(gè)字節(jié),而FPGA芯片的內(nèi)部RAM最多只有49152位(每個(gè)EAB有4096位),不足以存儲(chǔ)一分種需要的存儲(chǔ)容量,所以我們選擇FIFO作為暫存器,設(shè)計(jì)FIFO的容量是512×16=8192位,每次鎖存數(shù)字?jǐn)?shù)據(jù)后,狀態(tài)機(jī)在下一個(gè)狀態(tài)(狀態(tài)6)進(jìn)入寫指令,將鎖存的數(shù)據(jù)寫入FIFO隊(duì)列中,由于FIFO的讀寫操作都只需要一個(gè)時(shí)鐘周期,所以在狀態(tài)機(jī)再下一個(gè)狀態(tài)(狀態(tài)7)進(jìn)入讀操作,從FIFO隊(duì)列中讀出數(shù)據(jù),將數(shù)據(jù)送到輸出端口,其實(shí)FIFO隊(duì)列只需要16位的存儲(chǔ)容量就足夠了,但設(shè)計(jì)讓整個(gè)EAB塊都用來(lái)儲(chǔ)存,這也是為了存儲(chǔ)中有多余空間。采用FIFO隊(duì)列就不需要存儲(chǔ)容量為5626000個(gè)字節(jié)的存儲(chǔ)器了,更有效得利用了FPGA芯片資源。
如果采樣先將256個(gè)數(shù)據(jù)存到FIFO隊(duì)列中,由于從FIFO隊(duì)列中讀數(shù)據(jù)只需要一個(gè)時(shí)鐘,而在串行輸出的模式下,在進(jìn)行串并轉(zhuǎn)換的時(shí)候,需要最少16個(gè)時(shí)鐘周期,而FIFO端口的數(shù)據(jù)只出現(xiàn)一個(gè)周期就會(huì)發(fā)生改變,這樣就體現(xiàn)出FIFO的高速特性,而在一個(gè)AD采樣周期中完成一次串并轉(zhuǎn)換時(shí)間是足夠的。
本次設(shè)計(jì)是通過調(diào)用MAX+PlusⅡ的參數(shù)可設(shè)置LPM兆功能塊來(lái)實(shí)現(xiàn)FIFO隊(duì)列的。LPM是參數(shù)可設(shè)置模塊庫(kù)的英文縮寫(Library of Parameterized Modules),這些可以以圖形或硬件描述語(yǔ)言模塊形式方便調(diào)用的兆功能塊,使得基于EDA技術(shù)的電子設(shè)計(jì)的效率和可靠性有了很大的提高。設(shè)計(jì)者可以根據(jù)實(shí)際電路的設(shè)計(jì)需要,選擇LPM庫(kù)中的適當(dāng)模塊,并為其設(shè)定適當(dāng)?shù)膮?shù),就能滿足自己的設(shè)計(jì)需要。從而在自己的項(xiàng)目中十分方便調(diào)用了優(yōu)秀電子工程技術(shù)人員的硬件設(shè)計(jì)成果。在MAX+PlusⅡ中,進(jìn)入LPM元件定制器界面,按照電路需要設(shè)計(jì)各個(gè)參數(shù),最后完成FIFO的設(shè)計(jì),通過調(diào)用生成的圖形來(lái)調(diào)用FIFO隊(duì)列模塊。
4.3.6AD采樣系統(tǒng)頂層電路設(shè)計(jì)
通道選擇模塊、AD采樣控制模塊、延時(shí)模塊、串并輸出控制模塊以及FIFO模塊設(shè)計(jì)完畢以后,我們就可以將設(shè)計(jì)的各個(gè)模塊連接起來(lái),可以得到整個(gè)系統(tǒng)的頂層電路。頂層電路見附錄。
4.4 FPGA的硬件設(shè)計(jì)
本次畢業(yè)設(shè)計(jì)選用的FPGA芯片是ALTERA公司的ACEX1K系列的EP1K30TC144-3。由于它的高密度和易于在設(shè)計(jì)中實(shí)現(xiàn)復(fù)雜宏函數(shù)和存儲(chǔ)器,因此可以把一個(gè)子系統(tǒng)集成在單一芯片上,EP1K30包括一個(gè)嵌入式陣列,這為設(shè)計(jì)人員提供了有效的嵌入式門陣列和靈活的可編程邏輯。嵌入式陣列是由一系列嵌入式陣列塊(EAB)組成的,它能夠用來(lái)實(shí)現(xiàn)各種存儲(chǔ)器和復(fù)雜邏輯功能;該器件也提供多電壓I/O接口操作。它允許器件橋架在不同電壓工作的系統(tǒng)中。比如本次系統(tǒng)設(shè)計(jì)器件的I/O輸出就是2.5V,這樣不但使FPGA芯片工作安全,也可以讓AD7892能工作安全狀態(tài)。
4.4.1EP1K30TC144-3芯片介紹
EP1K30TC144-3芯片特性:
有30000個(gè)典型門,最大的系統(tǒng)門可達(dá)119000個(gè);
1728個(gè)邏輯單元(LE);
6個(gè)嵌入式陣列塊(EAB);
具有實(shí)現(xiàn)宏函數(shù)的嵌入式陣列和普通功能的邏輯器件;
高達(dá)49152位的內(nèi)部RAM(每個(gè)EAB有4096位),使得RAM并不影響或減少其他邏輯功能;
支持多電壓I/O接口,低功耗(維持狀態(tài)小于0.5mA);
器件可在2.5V和3.3V電源電壓下工作;
多種系統(tǒng)配置方式;
時(shí)鐘鎖定和時(shí)鐘自舉選項(xiàng)有助于減少時(shí)鐘延遲/變形和對(duì)時(shí)鐘進(jìn)行倍頻;
快速、可預(yù)測(cè)連線延時(shí)的快速通道(Fast Track)連續(xù)式布線結(jié)構(gòu);
實(shí)現(xiàn)快速加法器、計(jì)數(shù)器和比較器的專用進(jìn)位鏈;
每個(gè)引腳都有一個(gè)獨(dú)立的三態(tài)輸出使能控制;
每個(gè)引腳都有漏極開路選擇;
具有快速建立時(shí)間的寄存器;
提供多種其他EDA產(chǎn)品的設(shè)計(jì)文件輸出;
4.4.2芯片組成描述
ACEX1K系列的EP1K30主要有嵌入式陣列塊,邏輯陣列塊,F(xiàn)ast Track和I/O單元四部分組成。
(1)嵌入式陣列
嵌入式陣列是由一系列嵌入式陣列塊(EAB)構(gòu)成的。當(dāng)要實(shí)現(xiàn)有關(guān)存儲(chǔ)器功能時(shí),每個(gè)EAB提供2048位用來(lái)構(gòu)造RAM,ROM,FIFO或者雙口RAM等功能。當(dāng)EAB用來(lái)實(shí)現(xiàn)乘法器、微控制器、狀態(tài)機(jī)以及DSP等復(fù)雜邏輯時(shí),每個(gè)EAB可貢獻(xiàn)出100-600個(gè)門。EAB可以單獨(dú)使用,也可以組合起來(lái)使用。
??(2)邏輯陣列
邏輯陣列是由一系列邏輯陣列塊(LAB)構(gòu)成的,每個(gè)LAB包括8個(gè)LE和一些連接線,每個(gè)LE含有一個(gè)4輸入查找表(LUT)、一個(gè)可編程觸發(fā)器、進(jìn)位鏈和級(jí)聯(lián)鏈、LE的結(jié)構(gòu)能有效實(shí)現(xiàn)各種邏輯。每個(gè)LAB是一個(gè)獨(dú)立的結(jié)構(gòu),它具有共同的輸入,互連與控制信號(hào),LAB的這種“粗粒度”結(jié)構(gòu)有利于布線和實(shí)現(xiàn)器件的高性能,例如8位計(jì)數(shù)器、地址譯碼器或者狀態(tài)機(jī)。多個(gè)LAB組合起來(lái)也可以構(gòu)成更大的邏輯塊,每個(gè)LAB代表大約96個(gè)可用邏輯門。
?(3)快速通道(Fast Track)
器件內(nèi)部信號(hào)的互連和器件引腳之間的信號(hào)互連是由快速通道連線提供的,它是貫通器件長(zhǎng)、寬的快速連續(xù)通道。
?(4) I/O單元
EP1K30器件的I/O引腳是有一些I/O單元(IOE)驅(qū)動(dòng)的,IOE位于快速通道的行和列的末端,每個(gè)IOE有一個(gè)雙向I/O緩沖器和一個(gè)既可作輸入寄存器也可作輸出寄存器的觸發(fā)器。當(dāng)IOE作為專用時(shí)鐘引腳時(shí),這些寄存器提供了特殊的性能。當(dāng)它作為輸入時(shí),可提供少于4.2ns的建立時(shí)間和0ns的保持時(shí)間;而作為輸出時(shí),這些寄存器可提供少于5.7ns的“時(shí)鐘到輸出”的時(shí)間。
EP1K30還提供了6個(gè)專用輸入引腳,這些引腳用來(lái)驅(qū)動(dòng)觸發(fā)器的控制端,以確??刂菩盘?hào)高速、低偏移(1.2ns)地有效分配。這些信號(hào)使用了專用的布線支路,以便具有比快速通道更短的延時(shí)和更小的偏移。專用輸入中的4個(gè)輸入引腳可用來(lái)驅(qū)動(dòng)全局信號(hào),這4個(gè)全局信號(hào)也能由內(nèi)部邏輯驅(qū)動(dòng),它為時(shí)鐘分配或產(chǎn)生用以清除器件內(nèi)部多個(gè)寄存器的異步清除信號(hào)提供了一個(gè)理想的方法。
4.4.3芯片工作電壓設(shè)計(jì)
由于芯片對(duì)工作電壓有很高的要求,所以選擇三端穩(wěn)壓器LM317,LM317是美國(guó)國(guó)家半導(dǎo)體公司的三端可調(diào)穩(wěn)壓器集成電路,它的使用非常簡(jiǎn)單,僅需要兩個(gè)外接電阻來(lái)設(shè)置輸出電壓。此外它的線性調(diào)整率和負(fù)載調(diào)整率也比標(biāo)準(zhǔn)的固定穩(wěn)壓器要好,它還內(nèi)置有過載保護(hù)、安全區(qū)保護(hù)和多種保護(hù)電路。由于設(shè)計(jì)FPGA芯片的I/O口的引腳電壓設(shè)為2.5V,所以把LM317的電壓設(shè)計(jì)為2.5V為整個(gè)FPGA芯片提供工作電壓。LM317的典型應(yīng)用電路如圖4.12所示:

圖4.12 三端穩(wěn)壓器LM317的典型應(yīng)用
下面對(duì)三端穩(wěn)壓器LM317的特性做簡(jiǎn)單的介紹。
保證1%的輸出電壓誤差;
保證最大0.01%的線性調(diào)整率;
保證0.1%的負(fù)載調(diào)整率;
保證1.5A的輸出電流;
可調(diào)整電壓輸出最低1.2V,最高可以調(diào)到37V;
輸出短路保護(hù),過流、過熱保護(hù);
80db的紋波抑制;
標(biāo)準(zhǔn)三端晶體管封裝;
三端穩(wěn)壓器LM317在輸出和穩(wěn)壓器的末端提供一個(gè)內(nèi)部參考電壓1.25V,這樣就可以過兩個(gè)電阻的比例關(guān)系來(lái)決定的輸出的電壓,輸出電壓和參考電壓的關(guān)系如下式

器件設(shè)計(jì)Iadj的最大值為100mA,這個(gè)值是不隨負(fù)載的變化而變化的,所以通常Iadj*R2可以忽略的。
由于本設(shè)計(jì)需要2.5V的穩(wěn)定電壓,而Vref是1.25V,所以R2/R1=1,讓R2=R1=240。即可達(dá)到輸出2.5V的電壓。
4.4.4芯片配置介紹
目前常見的大規(guī)??删幊踢壿嬈骷木幊坦に囉腥N
① 基于電可擦除存儲(chǔ)單元的EEPROM或FLASH技術(shù),CPLD一般使用此技術(shù)進(jìn)行編程。CPLD被編程后改變了電可擦除存儲(chǔ)單元的信息,掉電后可保持。
② 基于SRAM查找表的編程單元,對(duì)該類器件,編程信息是保持在SRAM中的,SRAM在掉電后編程信息立即丟失,在下次上電后,還需要重新載入編程信息。因此該類器件的編程一般稱為配置,大部分FPGA采用該種編程工藝。
③ 基于反熔斷絲編程單元。Actel的FPGA;Xilinx部分早期的FPGA采用此種結(jié)構(gòu),現(xiàn)在Xilinx已不采用。反熔斷技術(shù)編程方法是一次性可編程性。
相比之下,電可擦除編程工藝的優(yōu)點(diǎn)是編程后信息不會(huì)因掉電而丟失,但編程次數(shù)有限,編程的速度不快。對(duì)于SRAM型的FPGA來(lái)說(shuō),配置次數(shù)為無(wú)限,在加電時(shí)可隨時(shí)更改邏輯,但掉電后芯片中的信息即丟失,每次上電時(shí)必須重新載入信息,下載信息的保密性不如前者。
FPGA配置可以用專門的編程設(shè)備,也可以使用下載電纜。如Altera的ByteBlaster(MV)并行下載電纜,連接PC機(jī)的并行打印口和需要編程或配置的器件。并與MAX PlusⅡ配合可以對(duì)Altera 公司的多種CPLD、FPGA進(jìn)行編程或編程。由于實(shí)驗(yàn)臺(tái)上有一個(gè)FPGA的配置端口,所以在本次畢業(yè)設(shè)計(jì)中選用ByteBlaster(MV)配置方法。ByteBlaster(MV)下載電纜與Altera器件的接口一般都是10芯的,引腳對(duì)應(yīng)關(guān)系如下表4.3所示,F(xiàn)PGA上配置引腳功能說(shuō)明如表4.4所示。

編程配置電路的設(shè)計(jì)圖入圖4.13所示:

圖4.13 編程配置電路圖
Altera的SRAM??LUT結(jié)構(gòu)的器件中,F(xiàn)PGA可使用6中配置模式,這些模式通過FPGA上的兩個(gè)模式選擇引腳MSEL1和MSEL0上設(shè)定的電平來(lái)決定;
1.配置器件,如用EPC器件進(jìn)行配置;
2.PS(Passive Serial 被動(dòng)串行)模式:MSEL1=0,MSEL0=0;
3.PPS(Passive Parallel Synchronous 被動(dòng)并行同步)模式:MSEL1=1,MSEL0=0;
4.PPA(Passive Parallel Asynchronous 被動(dòng)并行異步)模式:MSEL1=1,MSEL0=1;
5.PSA(Passive Serial Asynchronous 被動(dòng)串行異步)模式:MSEL1=1,MSEL0=0;
6.JTAG模式:MESL1=0,MESL0=0;
這6種配置模式中,PS模式可以利用PC機(jī)通過ByteBlaster(MV)下載電纜Altera器件應(yīng)用ICR(電路可重配置)。在本次畢業(yè)設(shè)計(jì)中,選用第二種配置模式,即被動(dòng)串行模式,配置時(shí)序如圖4.14所示:

圖4.14 PS配置時(shí)序圖
由時(shí)序圖可用看出PS配置工作過程:當(dāng)nCONFIG產(chǎn)生下降沿脈沖時(shí)啟動(dòng)配置過程,在DCLK上升沿,將數(shù)據(jù)移入目標(biāo)芯片。在配置過程中,系統(tǒng)需要實(shí)時(shí)監(jiān)測(cè),一旦出現(xiàn)錯(cuò)誤,nSTATUS將被拉低,系統(tǒng)識(shí)別到這個(gè)信號(hào)后,立即重新啟動(dòng)配置過程。配置數(shù)據(jù)全部正確地移入目標(biāo)芯片內(nèi)部后,CONF_DONE信號(hào)跳變?yōu)楦撸撕?,DCLK必須提供幾個(gè)周期的時(shí)鐘(具體周期數(shù)與DCLK的頻率有關(guān)),確保目標(biāo)芯片被正確初始化,進(jìn)入用戶工作模式。由時(shí)序圖可以看出,在芯片配置之前和配置之后,nCONFIG,nSTATUS,CONF_DONE都是高電平,所以需要注意的是在配置電路的設(shè)計(jì)中需要在每個(gè)配置引腳上都需要加一個(gè)上拉電阻。
4.4.5電路設(shè)計(jì)注意事項(xiàng)
本次設(shè)計(jì)采用的EP1K30TC144-3是貼片式的封裝,引腳共有144個(gè),所以對(duì)電路的設(shè)計(jì)有很大的要求,在設(shè)計(jì)電路中遇到很多麻煩,比如開始設(shè)計(jì)想通過布雙面板,但Protel的雙面板布線是以工業(yè)制板作為標(biāo)準(zhǔn)的,在自動(dòng)布線的時(shí)候,在芯片中間設(shè)計(jì)了許多過孔,這在手工制板中是很難實(shí)現(xiàn)的,所以采用手動(dòng)布線來(lái)實(shí)現(xiàn)電路,把要用到的引腳通過插針引出來(lái),這樣就可以拓寬布線的空間,使得可以用單面板來(lái)實(shí)現(xiàn)FPGA硬件電路,這次布線的不足之處是在電源和地線上沒有處理好,本來(lái)可以把地線布在芯片里面,而把電源放到外面,而我把電源和地都放在外面,這樣就有很多跳線,讓電路板很不美觀。
本次設(shè)計(jì)中的外部時(shí)鐘采用有源晶振,因?yàn)橛性淳д窨梢?/span>提供穩(wěn)定時(shí)鐘,增強(qiáng)線路板抗干擾性能,所以選用20M的有源晶振,在布線的過程中,有源晶振離FPGA芯片距離盡量小一點(diǎn),這樣是為了防止走線過長(zhǎng),導(dǎo)致電路干擾太大。
在對(duì)FPGA芯片沒有用到的引腳的處理要特別注意,因?yàn)橛行┮_在不使用狀態(tài)下是應(yīng)該接地的。這一點(diǎn)要特別注意。比如此芯片上的CEn(106腳)是應(yīng)該接地。
4.4.6硬件電路設(shè)計(jì)技巧
本次設(shè)計(jì)中采用的FPGA芯片由于有144個(gè)引腳,所以對(duì)電路的設(shè)計(jì)有很高的要求,如果是工業(yè)制板,那也就沒什么問題,用Protel的自動(dòng)布線就可以畫出電路PCB圖了,但如果是手工制板,那就在布線和I/O口的使用有很大的要求,特別是在本設(shè)計(jì)中,輸入信號(hào)和輸出信號(hào)都比較多,在I/O的使用上就應(yīng)該把相同類型的數(shù)據(jù)信號(hào)引腳盡量鎖定在一起,這樣就方便制板。還有對(duì)地線的處理也很重要,因?yàn)樵谛酒闹車加须娫春偷鼐€,這些都是芯片已定好的,不能更改的。技巧就是把地線全部放中間,然后把中間的地線拉出來(lái),和芯片外面的地連在一起。
5??軟件介紹
在實(shí)驗(yàn)中主要使用了MAX+PlusⅡ、EWB、以及Protel99se三種軟件,其中,Max PlusⅡ主要完成對(duì)FPGA芯片的編程,仿真,芯片引腳鎖定以及編程在線配置等操作,EWB主要用于對(duì)放大、濾波電路作分析與設(shè)計(jì),并以分析為主,尤其是EWB能提供一個(gè)虛擬的實(shí)驗(yàn)室,可以對(duì)電路和系統(tǒng)進(jìn)行十分逼真的模擬;Protel99se則是整個(gè)電路設(shè)計(jì)PCB的重要工具。現(xiàn)分別對(duì)這三種軟件進(jìn)行介紹,其中重點(diǎn)介紹使用MAX+PlusⅡ的常用基本設(shè)計(jì)方法。
5.1 MAX+PlusⅡ
???MAX+PlusⅡ是Altera提供的FPGA/CPLD開發(fā)集成環(huán)境,Altera是世界最大可編程邏輯器件供應(yīng)商之一。MAX+PlusⅡ界面友好,使用便捷,被譽(yù)為業(yè)界最易用易學(xué)的EDA軟件,在MAX+PlusⅡ上可以完成FPGA/CPLD的設(shè)計(jì)所有流程,包括設(shè)計(jì)輸入、綜合、適配、時(shí)序仿真與功能仿真和編程下載,使設(shè)計(jì)者能方便地進(jìn)行設(shè)計(jì)輸入、快速處理和器件編程。常用設(shè)計(jì)輸入方法有圖形設(shè)計(jì)輸入,文本編輯輸入,波形輸入方式和混合輸入方式。利用MAX+PlusⅡ進(jìn)行設(shè)計(jì)的一般流程如圖5.1所示:

圖5.1 MAX+PlusⅡ一般設(shè)計(jì)流程
5.2 Electronics Workbench(EWB)
Electronics Workbench(簡(jiǎn)稱EWB)就是一個(gè)虛擬電子實(shí)驗(yàn)室,只是這個(gè)實(shí)驗(yàn)室裝入了電腦。Electronics Workbench之所以很快被廣大電路設(shè)計(jì)工作者所接受,首先它真的就像一個(gè)電子實(shí)驗(yàn)室,提供了模擬和數(shù)字電路的虛擬實(shí)驗(yàn)環(huán)境,具有和真實(shí)的實(shí)驗(yàn)室一致的元器件庫(kù)和儀器儀表;其次,EWB提供交互式的SPICE電路模擬,使用人機(jī)圖形界面真實(shí)、方便、快捷;EWB具有完整的模擬混合和數(shù)字信號(hào)模擬功能,可以任意地在系統(tǒng)中集成數(shù)字和模擬元件,會(huì)自動(dòng)地進(jìn)行信號(hào)轉(zhuǎn)換??傊?,EWB作為EDA軟件,功能強(qiáng)大,可視化界面清晰,且易學(xué)易用。
5.3 Protel99SE
Protel?99SE采用數(shù)據(jù)庫(kù)的管理方式。Protel 99SE軟件沿襲了Protel以前版本方便易學(xué)的特點(diǎn),內(nèi)部界面與Protel 99大體相同,新增加了一些功能模塊,功能更加強(qiáng)大。新增的層堆棧管理功能,可以設(shè)計(jì)32個(gè)信號(hào)層,16個(gè)地電層,16個(gè)機(jī)械層。新增的3D功能讓您在加工印制版之前可以看到板的三維效果。增強(qiáng)的打印功能,使您可以輕松修改打印設(shè)置控制打印結(jié)果。其主要組成部分有:
原理圖設(shè)計(jì)系統(tǒng)(Design system of schematic diagram),原理圖設(shè)計(jì)系統(tǒng)用于原理圖設(shè)計(jì)的Advanced Schematic系統(tǒng)。
印制電路板設(shè)計(jì)系統(tǒng)(Design system of printing circuit board),印制電路板設(shè)計(jì)系統(tǒng)是用于電路設(shè)計(jì)的Advanced PCB系統(tǒng)。
信號(hào)模擬仿真系統(tǒng)(Simulation system of signal imitation),信號(hào)模擬仿真系統(tǒng)是在原理圖上進(jìn)行信號(hào)模擬仿真的 SPICE系統(tǒng)。
可編程邏輯設(shè)計(jì)系統(tǒng)(Programmable logical design system),可編程邏輯設(shè)計(jì)系統(tǒng)是基于CUPL的集成于原理圖設(shè)計(jì)系統(tǒng)中PLD設(shè)計(jì)系統(tǒng)。
6??整機(jī)調(diào)試
6.1硬件電路的調(diào)試步驟
在硬件電路中用到了音頻放大、濾波電路,電源穩(wěn)壓電路,AD采樣電路,F(xiàn)PGA控制等主要部分,由于電路連線較多而且復(fù)雜,采用的方法是分塊調(diào)試,這樣比較容易發(fā)現(xiàn)問題和解決問題。這種硬件調(diào)試方法在實(shí)際應(yīng)用是比較普遍的。
在進(jìn)行硬件調(diào)試之前,首先要檢查電路板,看看電路板上的線路是否有短路、虛焊或者是斷路的情況,如果有則要修正它,如果沒有就可以進(jìn)行各個(gè)模塊的調(diào)試。
6.1.1音頻放大部分調(diào)試
對(duì)音頻放大部分調(diào)試需要一個(gè)函數(shù)信號(hào)發(fā)生源,一個(gè)示波器,一個(gè)萬(wàn)用表和提供放大器電源的直流穩(wěn)壓電源。首先,給NE5532加上+12V的電源,使之工作起來(lái),用萬(wàn)用表檢查NE5532除了正負(fù)電源引腳的電壓,電壓接近為零,這表明放大器正常工作,在輸入端輸入頻率為1KHz,幅度為300mV的正弦波,用示波器觀察輸出端的波形,可以看到輸出幅度為5.3V的正弦波,正弦波中包含了很多高頻干擾,這是由于周圍的干擾在放大器的放大作用,使得干擾成為一個(gè)明顯波形出現(xiàn)在示波器上,通過濾波器后可以濾掉這些干擾。調(diào)節(jié)可調(diào)電阻,可以觀察到輸出波形的幅度變化。接上音源,可以看到示波器有不規(guī)則波形輸出,增大音源的音量可以看到輸出波形的幅度也隨之增大,只是這不規(guī)則波形中混有很多的干擾,通過濾波器后可以濾掉這些干擾。這表明音頻放大部分工作正常,達(dá)到設(shè)計(jì)要求。
6.1.2濾波部分調(diào)試
對(duì)濾波部分調(diào)試需要一個(gè)函數(shù)信號(hào)發(fā)生源,一個(gè)示波器,一個(gè)萬(wàn)用表和提供放大器電源的直流穩(wěn)壓電源。首先,給LM324加上+12V的電源,使之工作起來(lái),用萬(wàn)用表檢查L(zhǎng)M324除了正負(fù)電源引腳的電壓,電壓接近為零,這表明濾波器的放大器正常工作。輸入1KHZ,300mv的正弦波信號(hào),經(jīng)過音頻放大電路放大后得到的1KHZ,5.3V的正弦波信號(hào)從輸入點(diǎn)進(jìn)入濾波電路。調(diào)試過程中發(fā)現(xiàn)示波器中的波形一直有一定高頻和低頻的干擾,檢查電路沒有錯(cuò)誤,最后判斷是電源的干擾,在電源輸入端加上一個(gè)大電容和一個(gè)小電容分別濾掉電源的高頻干擾和低頻干擾,再調(diào)試可以看到完整的正弦波波形。減少輸入信號(hào)的頻率到10HZ,可以看到當(dāng)頻率減到20HZ的時(shí)候,輸出信號(hào)的幅度逐漸變小,這表明高通濾波部分已實(shí)現(xiàn)其功能,濾掉小于20HZ的低頻干擾;然后慢慢增加輸入信號(hào)的頻率到30KZ左右,可以看當(dāng)頻率大于18KHZ的時(shí)候,輸出信號(hào)的幅度開始減小,達(dá)到20KHZ,輸出信號(hào)幅度衰減到通帶內(nèi)的幅度的75%,大于20KZ后,輸出幅度小于通帶內(nèi)幅度一半,達(dá)到衰減的目的,這表明低通濾波器也實(shí)現(xiàn)了其功能。整個(gè)濾波器部分調(diào)試完畢,達(dá)到設(shè)計(jì)要求。
6.1.3LM317穩(wěn)壓塊調(diào)試
在調(diào)試LM317的輸出電壓的時(shí)候遇到這樣一個(gè)問題,本來(lái)LM317是穩(wěn)壓塊,它的輸出電壓是不應(yīng)該隨輸入電壓的改變而改變的,而當(dāng)改變輸入電壓的時(shí)候,輸出電壓有很大的變化,這樣對(duì)FPGA芯片很危險(xiǎn),如果電源電壓突然變高,F(xiàn)PGA的VCCINT引腳無(wú)法承受這個(gè)電壓就會(huì)燒掉整塊FPGA芯片。在后面的畢業(yè)設(shè)計(jì)中發(fā)現(xiàn),在用LM317的時(shí)候,最好不要用可調(diào)電阻,雖然是精密的可調(diào)電阻,它的阻值隨溫度的變化是很大的,當(dāng)外部電壓升高,通過可調(diào)電阻的電流就越大,就會(huì)讓電阻的溫度升高。這樣LM317的輸出電壓隨溫度的變化而變化,所以換下可調(diào)電阻,用一個(gè)固定240代替它,這樣就解決輸出電壓隨外部電壓的變化而變化的問題。
6.1.4FPGA硬件電路調(diào)試
這部分調(diào)試是整個(gè)調(diào)試的主體,包括對(duì)有源晶振的調(diào)試,配置電路的調(diào)試。在MAX+PlusⅡ中寫一個(gè)小程序,選擇器件和鎖定引腳后,用ByteBlaster(MV)下載電纜連接PC機(jī)上的打印并行口和硬件電路板上的下載口,在配置即將結(jié)束的時(shí)候彈出配置失敗,讀靜態(tài)存儲(chǔ)器失敗,檢查硬件和FPGA的配置時(shí)序圖知道,在配置結(jié)束的時(shí)候,芯片的第二個(gè)引腳CONFING_DONE會(huì)跳回高電平,而硬件上的一直是低電平,經(jīng)過了解,是應(yīng)該在引腳上加一個(gè)1K的上拉電阻,這樣在配置結(jié)束后就會(huì)變成高電平。加上拉電阻后還是出現(xiàn)同樣的問題,查閱相關(guān)資料后知道,芯片的CEn引腳是應(yīng)該接地的,?PS配置模式下,F(xiàn)PGA芯片的MSEL0,MSEL1引腳是應(yīng)該接地,改過電路后,再進(jìn)行配置,用示波器檢查配置時(shí)候的5個(gè)引腳的波形符合配置時(shí)序圖。這樣就解決了芯片無(wú)法配置的錯(cuò)誤。接著是檢查外部時(shí)鐘產(chǎn)生電路,由于采用的是有源晶振,所以必須把2.5V電源接入FPGA模塊上,讓有源晶振工作起來(lái),把有源晶振的輸出端連接到示波器上,由于采用的20M的有源晶振,在用示波器觀察波形的時(shí)候要選用100MHZ示波器,而且要把輸入信號(hào)衰減后才可以進(jìn)入示波器,否則無(wú)法看不到準(zhǔn)確的時(shí)鐘波形。通過示波器,可用看到有源晶振已經(jīng)起振。
6.1.5AD采樣模塊調(diào)試
將實(shí)現(xiàn)AD采樣的狀態(tài)機(jī)程序單獨(dú)寫成一個(gè)文件,選擇器件和鎖定引腳后,配置到FPGA芯片中,模擬信號(hào)采用+5V電源,在調(diào)試過程中,發(fā)現(xiàn)AD采樣在工作若干次后,就會(huì)出現(xiàn)“死機(jī)”現(xiàn)象,分析知道,在采樣過程中會(huì)出現(xiàn)控制AD開始采樣的CONV信號(hào)丟失現(xiàn)象,導(dǎo)致AD無(wú)限期等待采樣開始信號(hào)CONV,而狀態(tài)機(jī)又無(wú)限期等待采樣結(jié)束信號(hào)EOC,這樣就使得狀態(tài)機(jī)進(jìn)入“死機(jī)”狀態(tài)。解決的方法是加入一段“看門狗”程序,當(dāng)狀態(tài)機(jī)進(jìn)入死機(jī)狀態(tài)后,用一個(gè)變量判斷狀態(tài)機(jī)是否等待超過一個(gè)采樣周期,如果超過,就復(fù)位狀態(tài)機(jī),使?fàn)顟B(tài)機(jī)重新進(jìn)入開始狀態(tài)。這樣就可以解決狀態(tài)機(jī)的“死機(jī)”現(xiàn)象了。加入“看門狗”程序后,通過示波器可以看到12位數(shù)據(jù)的任何一位的電平信號(hào)。這樣AD采樣部分就調(diào)試完畢。
6.2 聯(lián)機(jī)調(diào)試
聯(lián)機(jī)調(diào)試需要實(shí)驗(yàn)工具有:示波器,穩(wěn)壓電源,EDA實(shí)驗(yàn)臺(tái),PC機(jī),ByteBlaster(MV)下載電纜。按照?qǐng)D2.1中各模塊連接順序連接好整個(gè)采樣系統(tǒng),分別接上12V的放大器工作電壓,+5V的AD采樣電壓和+2.5V的FPGA芯片工作電壓,把串并選擇端口選擇串行輸出,也即將短路帽短路,這樣輸入到器件是低電平。將示波器連接到串行輸出口,用EDA實(shí)驗(yàn)臺(tái)上的下載電路連接PC機(jī)上的打印并行口和硬件電路板上的下載口,可以看到示波器有高低的電平輸出。將串并選擇端口選為并行輸出,也即將短路帽斷開,這樣輸入到器件是高電平,任意選擇一位連接到示波器,也可以看到有高低電平輸出。通過調(diào)試可以證實(shí)整個(gè)高速多通道采樣系統(tǒng)基本實(shí)現(xiàn),聯(lián)機(jī)調(diào)試完畢。
6.3調(diào)試注意事項(xiàng)
在調(diào)試音頻放大部分的時(shí)候,話筒和電路板的連接線要選用屏蔽線,這樣用助于屏蔽周圍的干擾信號(hào),普通的電線無(wú)法做到這一點(diǎn)。
由于FPGA芯片引腳過多,而且電路相對(duì)復(fù)雜,所以在硬件電路的功能調(diào)試之前,需要對(duì)硬件電路的檢查和調(diào)試。特別是對(duì)FPGA芯片的電源的檢查,電源電壓的過高,芯片就會(huì)燒壞;電壓過低,芯片就工作不起來(lái)。設(shè)計(jì)把AD部分和FPGA芯片分到了兩塊板子上,而且FPGA芯片電源是由LM317穩(wěn)壓塊提供,所以先在AD模塊加上+5V電源,用萬(wàn)用表測(cè)得LM317的輸出電壓是否是2.5V,這樣就起到保護(hù)FPGA芯片的作用。
電路需要外部供電的部分,為防止電源對(duì)電路的干擾,在電源的輸入兩端都要接一個(gè)大電容(47uF)和一個(gè)小電容(0.1uF),這樣可以濾掉電源中的高頻和低頻的干擾。
7??結(jié)論
????本次設(shè)計(jì)采用FPGA實(shí)現(xiàn)采樣系統(tǒng),從而系統(tǒng)具有高速、穩(wěn)定、低功耗等特點(diǎn),音頻模擬信號(hào)經(jīng)放大器NE5532放大后,經(jīng)過8路選擇后,進(jìn)入濾波器進(jìn)行濾波,濾掉高頻干擾信號(hào)和低頻干擾信號(hào)的干擾,然后進(jìn)入AD7892進(jìn)行AD采樣,采樣后的12位數(shù)據(jù)通過一個(gè)FIFO隊(duì)列存儲(chǔ),最后從FIFO中讀出數(shù)字信號(hào),在串并輸出模式的選擇下在示波器上顯示出來(lái)。
本系統(tǒng)基本達(dá)到了預(yù)期的設(shè)計(jì),但還有一些不足之處,例如:在對(duì)FIFO隊(duì)列的讀寫操作中是通過狀態(tài)機(jī)來(lái)實(shí)現(xiàn)的,但這樣FIFO隊(duì)列就只起了一個(gè)緩存的作用。由于本人水平有限,無(wú)法實(shí)現(xiàn)其存儲(chǔ)后再進(jìn)行讀寫的操作,懇請(qǐng)各位老師多多批評(píng)指教。
多通道采樣系統(tǒng)應(yīng)用十分廣泛,特別是在控制系統(tǒng)上的應(yīng)用,比如說(shuō)溫度,濕度等,通過傳感器把模擬信號(hào)采集到微機(jī)或者控制部分,根據(jù)采集的數(shù)據(jù)來(lái)對(duì)系統(tǒng)進(jìn)行相應(yīng)的控制,同時(shí)基于FPGA的多通道采樣系統(tǒng)的實(shí)現(xiàn),為一些特殊領(lǐng)域的實(shí)時(shí)測(cè)控提供了一個(gè)簡(jiǎn)單、靈活、可靠的方案,不失為一個(gè)良好的嘗試。
附??錄
1 各模塊程序
1?FPGA頂層設(shè)計(jì)圖


3??電路設(shè)計(jì)圖
(1)音頻放大

(2)濾波器

(3)AD7892電路

FPGA芯片PCB圖

表1?歸一化的巴特沃斯低通濾波器傳遞函數(shù)的分母多項(xiàng)式
