基于FPGA的數(shù)據(jù)采集卡_第1頁(yè)
基于FPGA的數(shù)據(jù)采集卡_第2頁(yè)
基于FPGA的數(shù)據(jù)采集卡_第3頁(yè)
基于FPGA的數(shù)據(jù)采集卡_第4頁(yè)
基于FPGA的數(shù)據(jù)采集卡_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一章 引言1.1 課題背景隨著現(xiàn)代微電子技術(shù)的快速發(fā)展, FPGA技術(shù)微電子技術(shù)的一個(gè)發(fā)展方向。利用FPGA強(qiáng)大的邏輯運(yùn)算功能來(lái)實(shí)現(xiàn)數(shù)據(jù)采集卡存在的問(wèn)題,基于FPGA的數(shù)據(jù)采集卡是32位數(shù)據(jù)寬度工作頻率達(dá)33MHz。同時(shí),本采集卡的數(shù)據(jù)傳輸符合Avalon總線,打破了傳統(tǒng)嵌入式系統(tǒng)數(shù)據(jù)傳輸速率的瓶頸問(wèn)題,使得片上可編程系統(tǒng)的性能得到充分的發(fā)揮。另外,Avalon總線是片內(nèi)總線的獨(dú)特優(yōu)勢(shì),開發(fā)出的數(shù)據(jù)采集卡,可以大幅度提高其時(shí)實(shí)性、準(zhǔn)確性等。在國(guó)防建設(shè)、工業(yè)生產(chǎn)中產(chǎn)生較大的社會(huì)效益和經(jīng)濟(jì)效益,應(yīng)用前景十分廣闊。因此,研究基于FPGA的數(shù)據(jù)采集卡是十分必要的。方便地進(jìn)行升級(jí)和移植。數(shù)據(jù)采集系統(tǒng)是

2、計(jì)算機(jī)智能儀器與外界物理世界聯(lián)系的橋梁,是獲取信息的重要途徑。數(shù)據(jù)采集技術(shù)主要指從傳感器輸出的微弱電信號(hào),經(jīng)信號(hào)調(diào)理、模數(shù)轉(zhuǎn)換到存儲(chǔ)、記錄這一過(guò)程所涉及的技術(shù)。隨著科學(xué)技術(shù)的進(jìn)步,特別是以傳感器技術(shù)、通信技術(shù)和計(jì)算機(jī)技術(shù)為基礎(chǔ)的現(xiàn)代信息技術(shù)的發(fā)展,以及測(cè)試?yán)碚摰牟粩喟l(fā)展,數(shù)據(jù)采集技術(shù)的發(fā)展也是日新月異。數(shù)據(jù)采集系統(tǒng)的核心是中心控制邏輯單元,它對(duì)整個(gè)系統(tǒng)進(jìn)行控制和數(shù)據(jù)處理。隨著計(jì)算機(jī)技術(shù)的發(fā)展和廣泛的應(yīng)用,尤其是在工程控制領(lǐng)域的應(yīng)用越來(lái)越廣發(fā),計(jì)算機(jī)通信顯得尤為重要。串行通信雖然使設(shè)備之間的連線大為減少,降低了設(shè)備費(fèi)用,但隨著帶來(lái)的串/.并轉(zhuǎn)換和位計(jì)數(shù)等問(wèn)題,這使得串行通信技術(shù)比并行通信計(jì)數(shù)更為

3、復(fù)雜。由于計(jì)算機(jī)內(nèi)部通信為并行通信,而與外設(shè)通信一般為串行通信,所以計(jì)算機(jī)在與外設(shè)通信中,必須要有“接收移位寄存器”(串并)和“發(fā)送移位寄存器”(并串)的接口設(shè)備。能夠完成上述“串并”轉(zhuǎn)換功能的電路,通常稱為“通用異步收發(fā)器”(UART:Universal Asynchronous Receiver and Transmitter)。UART是一種應(yīng)用廣泛的串行傳輸接口。因?yàn)槠湟蟮膫鬏斁€少,可靠性高,傳輸距離遠(yuǎn)。UART允許在串行鏈路上進(jìn)行全雙工的通信。串行外設(shè)用到的RS232-C異步串行接口,一般采用專用的集成電路即UART實(shí)現(xiàn)。它廣泛的應(yīng)用于軍事、工業(yè)、醫(yī)藥、通信、自動(dòng)控制、儀器、話音圖

4、像處理等眾多領(lǐng)域。如8250、8251、NS16450等芯片都是常見的UART器件,然而這類芯片已經(jīng)相當(dāng)復(fù)雜,有的含有許多輔助的模塊(如FIFO),有時(shí)我們不需要使用完整的UART的功能和這些輔助功能。由于FPGA的功能日益強(qiáng)大,開發(fā)周期短、可重復(fù)編程等優(yōu)點(diǎn)也越來(lái)越明顯,可以在FPGA芯片上集成AD采樣控制器和UART功能模塊。并通過(guò)FPGA自動(dòng)生成FIFO FIFO作為備份系統(tǒng),將AD采樣數(shù)據(jù)進(jìn)行保存然后給后續(xù)電路經(jīng)UART上傳給PC機(jī)。此外,F(xiàn)PGA的設(shè)計(jì)具有很高的靈活性,可以方便地進(jìn)行升級(jí)和移植。1.2 研究的可行性在電子計(jì)數(shù)飛速發(fā)展的今天,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)和CPLD(復(fù)雜可

5、編程邏輯器件)應(yīng)用已經(jīng)十分廣泛。PLD是電子設(shè)計(jì)領(lǐng)域中最具活力和發(fā)展前途的一項(xiàng)技術(shù),它的影響絲毫不亞于70年代單片機(jī)的發(fā)明和使用。由于該可編程器件可以通過(guò)軟件編程對(duì)其硬件結(jié)構(gòu)和工作方式進(jìn)行重構(gòu),硬件的設(shè)計(jì)如同軟件設(shè)計(jì)那樣方便快捷,極大的改變了傳統(tǒng)的設(shè)計(jì)方法和理念。使用可編程邏輯器件來(lái)開發(fā)數(shù)字電路,可以通過(guò)對(duì)芯片結(jié)構(gòu)的設(shè)計(jì)實(shí)現(xiàn)多種數(shù)字邏輯功能,由于管腳定義的靈活性可以大大縮短設(shè)計(jì)時(shí)間,減少PCB面積,提高系統(tǒng)的可靠性。 可編程邏輯器件的這些優(yōu)點(diǎn)使得這項(xiàng)技術(shù)在90年代以后得到飛速的發(fā)展,同時(shí)也大大推動(dòng)了EDA軟件和硬件描述語(yǔ)言(HDL)的進(jìn)步。本次設(shè)計(jì)應(yīng)用EDA技術(shù),基于FPGA器件設(shè)計(jì)與實(shí)現(xiàn)UA

6、RT,使用VHDL將AD控制器和UART的核心功能集成,從而簡(jiǎn)化電路,縮小PCB面積,提高系統(tǒng)可靠性,使整個(gè)設(shè)計(jì)更加緊湊、穩(wěn)定且可靠。采用FPGA-EP1C6/EP1C12芯片作為系統(tǒng)主控制器,采用UART和上位機(jī)連接能夠?qū)崿F(xiàn)外置式、高速、實(shí)時(shí)通信。因此,研究開發(fā)基于FPGA/CPLD的UART控制器具有較高的理論價(jià)值和廣泛的應(yīng)用前景。本次設(shè)計(jì)應(yīng)用EDA技術(shù),基于FPGA器件設(shè)計(jì)與實(shí)現(xiàn)UART,使用VHDL將AD控制器和UART的核心功能集成,從而簡(jiǎn)化電路,縮小PCB面積,提高系統(tǒng)可靠性,使整個(gè)設(shè)計(jì)更加緊湊、穩(wěn)定且可靠。采用FPGA-EP1C6/EP1C12芯片作為系統(tǒng)主控制器,采用UART和

7、上位機(jī)連接能夠?qū)崿F(xiàn)外置式、高速、實(shí)時(shí)通信。因此,研究開發(fā)基于FPGA/CPLD的UART控制器具有較高的理論價(jià)值和廣泛的應(yīng)用前景。Mars-EP1C6-F-Core核心板采用Cyclone系列中較為基礎(chǔ)的EP1C6/EP1C12器件,針對(duì)FPGA的初級(jí)、中級(jí)開發(fā)者設(shè)計(jì),幫助用戶降低學(xué)習(xí)成本和系統(tǒng)評(píng)估成本的硬件模塊。板子采用4層板布線,兩個(gè)96pin歐式接插件將所有FPGA器件IO引出,適合用戶在此基礎(chǔ)上擴(kuò)展所需模塊,做算法評(píng)估,數(shù)據(jù)處理等使用。配合Mars-EDA-P系列實(shí)驗(yàn)主板,用戶可做相關(guān)一系列實(shí)驗(yàn),亦可借助實(shí)驗(yàn)主板提供的現(xiàn)有功能做評(píng)估使用。板上有標(biāo)準(zhǔn)DC接口,板載FPGA-EP1C6/E

8、P1C12和PROMEPCS1/EPCS4配置芯片,板上同時(shí)提供JTAG接口和AS編程下載接口。本次畢業(yè)設(shè)計(jì)擴(kuò)展了AD采樣模塊,通過(guò)96pin的歐式接插件來(lái)和FPGA的IO口聯(lián)系上關(guān)系。1.3 課題主要研究?jī)?nèi)容及主要工作本課題根據(jù)實(shí)際應(yīng)用需要,設(shè)計(jì)出基于FPGA/CPLD的UART控制器,并制成實(shí)際電路板。國(guó)際上通用的一個(gè)串行通信波特率標(biāo)準(zhǔn)系列是: 300、600、1200、1800、2400、4800、9600、19200。系統(tǒng)方案采用的是1位停止位,8位數(shù)據(jù)位,不設(shè)奇偶校驗(yàn)位,1位停止位,波特率可調(diào)的傳輸方式。采用Altera公司的Quartus II 5.1.為設(shè)計(jì)平臺(tái),設(shè)計(jì)采用的(ha

9、rdware description language,HDL)語(yǔ)言為VHDL,作為本系統(tǒng)邏輯程序設(shè)計(jì)的唯一表達(dá)語(yǔ)言。采用自頂向下的設(shè)計(jì)原則,對(duì)異步接收發(fā)送器(UART)進(jìn)行設(shè)計(jì),在編譯完成并仿真完成后,通過(guò)Quartus II 5.1將UART的VHDL程序下載到選用的Cyclone系列EP1C6/EP1C12中,來(lái)實(shí)現(xiàn)最終的UART電路。并添加ADC0809采樣電路和上位機(jī),完成PC機(jī)和UART板卡和ADC0809采樣的通信。第二章 FPGA/CPLD系統(tǒng)設(shè)計(jì)流程FPGA系統(tǒng)設(shè)計(jì)流程包括硬件和軟件設(shè)計(jì)流程。首先確定系統(tǒng)功能,并對(duì)關(guān)鍵部分予以仿真。在確定系統(tǒng)功能并劃分功能模塊之后,根據(jù)不同的

10、結(jié)構(gòu)和算法,確定不同的資源消耗。由上述過(guò)程可以確定系統(tǒng)設(shè)計(jì)需要消耗的門級(jí)、存儲(chǔ)器的大小。根據(jù)系統(tǒng)設(shè)計(jì)需要,對(duì)系統(tǒng)時(shí)序和時(shí)鐘速率進(jìn)行考察和估計(jì),可以確定所需要的器件的速度級(jí)別。根據(jù)系統(tǒng)外部接口的要求,確定接口時(shí)序和芯片引腳資源消耗情況。在上述過(guò)程完成以后,考慮系統(tǒng)功能和性能的可擴(kuò)展性,確定器件型號(hào)。型號(hào)確定以后,需要確定配置方式,因?yàn)椴煌吞?hào)的器件,其配置方式是有很大差異。硬件設(shè)計(jì)和軟件設(shè)計(jì)可以同時(shí)進(jìn)行。系統(tǒng)功能定義和邏輯功能劃分設(shè)計(jì)規(guī)模的初步規(guī)劃設(shè)計(jì)時(shí)序的初步規(guī)劃器件選型邏輯模塊劃分及接口定義模塊A設(shè)計(jì)模塊B 設(shè)計(jì)模塊C 設(shè)計(jì)模塊合并、仿真與測(cè)試 器件定型、調(diào)試、生產(chǎn)圖2-1 FPGA設(shè)計(jì)流程

11、如圖2-1所示為FPGA/CPLD的系統(tǒng)設(shè)計(jì)流程。第三章 UART串行通信及ADC0809采樣原理UART即通用異步收發(fā)器,是一種串行通信方式,數(shù)據(jù)在傳輸過(guò)程中是通過(guò)一位一位地進(jìn)行傳輸來(lái)實(shí)現(xiàn)通信的。串行通信具有傳輸線少、成本低廉等優(yōu)點(diǎn),缺點(diǎn)是傳輸速度慢。串行通信被廣泛的應(yīng)用在計(jì)算機(jī)與外設(shè)之間的通信和計(jì)算機(jī)和計(jì)算機(jī)之間的通信。3.1 串行通信的基本原理所謂“串行通信”是指外設(shè)和計(jì)算機(jī)間使用一根數(shù)據(jù)信號(hào)線,數(shù)據(jù)在一根數(shù)據(jù)信號(hào)線上按位進(jìn)行傳輸,每一位數(shù)據(jù)都占據(jù)一個(gè)固定的時(shí)間長(zhǎng)度。 這種通信方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,當(dāng)然,其傳輸速度比并行傳輸慢。相比之下,由于高速率的要求,處

12、于計(jì)算機(jī)內(nèi)部的CPU與串口之間的通訊仍然采用并行的通訊方式,所以串行口的本質(zhì)就是實(shí)現(xiàn)CPU與外圍數(shù)據(jù)設(shè)備的數(shù)據(jù)格式轉(zhuǎn)換(或者稱為串并轉(zhuǎn)換器),即當(dāng)數(shù)據(jù)從外圍設(shè)備輸入計(jì)算機(jī)時(shí),數(shù)據(jù)格式由位 (bit)轉(zhuǎn)化為字節(jié)數(shù)據(jù);反之,當(dāng)計(jì)算機(jī)發(fā)送下行數(shù)據(jù)到外圍設(shè)備時(shí),串口又將字節(jié)數(shù)據(jù)轉(zhuǎn)化為位數(shù)據(jù)。串行數(shù)據(jù)的傳輸方式:(1) 全雙工方式通訊雙方能同時(shí)進(jìn)行發(fā)送和接收操作 (2) 半雙工方式只有1根數(shù)據(jù)線傳送數(shù)據(jù)信號(hào),要求通訊雙方的發(fā)送和接收由電子開關(guān)切換。由于只有一條信道,所以數(shù)據(jù)不能同時(shí)在兩個(gè)方向上傳送。 (3) 單工方式只允許數(shù)據(jù)按照一個(gè)固定的方向傳送。串行通信可以分為兩種類型:同步通信和異步通信。異步通信

13、:一個(gè)字符一個(gè)字符地傳輸,每個(gè)字符一位一位地傳輸,傳輸一個(gè)字符時(shí),以起始位開始,然后傳輸字符本身的各位,接著傳輸校驗(yàn)位,最后以停止位結(jié)束該字符的傳輸。一次傳輸?shù)钠鹗嘉?、字符各位、校?yàn)位、停止位構(gòu)成一組完整的信息,稱為幀(Frame-)。幀與幀之間可有任意個(gè)空閑位。起始位之后是數(shù)據(jù)的最低位。異步通信的接收和發(fā)送方各自具有獨(dú)立的時(shí)鐘,傳輸?shù)乃俾视呻p方約定。異步通信的好處是通信設(shè)備簡(jiǎn)單、便宜,但傳輸效率較低(因?yàn)殚_始位和停止位的開銷所占比例較大)。同步通信:同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀與異步通信中的字符幀不同,通常含有若干個(gè)數(shù)據(jù)字符。 它們均由同步字

14、符、數(shù)據(jù)字符和校驗(yàn)字符(CRC)組成。其中同步字符位于幀開頭,用于確認(rèn)數(shù)據(jù)字符的開始。數(shù)據(jù)字符在同步字符之后,個(gè)數(shù)沒(méi)有限制,由所需傳輸?shù)臄?shù)據(jù)塊長(zhǎng)度來(lái)決定;校驗(yàn)字符有1到2個(gè),用于接收端對(duì)接收到的字符序列進(jìn)行正確性的校驗(yàn)。同步通信的缺點(diǎn)是要求發(fā)送時(shí)鐘和接收時(shí)鐘保持嚴(yán)格的同步。3.2 UART工作原理 UART協(xié)議是實(shí)現(xiàn)設(shè)備之間低速數(shù)據(jù)通信的標(biāo)準(zhǔn)協(xié)議。因發(fā)送時(shí)不需同時(shí)發(fā)送時(shí)鐘,故此協(xié)議為異步。UART鏈接典型為38400,9600波特 。UART字符格式為1個(gè)起始位,58個(gè)數(shù)據(jù)位,1個(gè)地址位或奇偶位(可選),1個(gè)停止位。 由于接收器、發(fā)送器異步工作,無(wú)需聯(lián)接接收和發(fā)送時(shí)鐘。接收器采取對(duì)輸入數(shù)據(jù)流高

15、度采樣方式,通常采樣為16,并根據(jù)采樣值確定位值。按慣例,使用16個(gè)采樣值的中間三個(gè)值。UART是通用異步收發(fā)器(異步串行通信口)的英文縮寫,它包括了RS232、RS499、RS423、RS422和RS485等接口標(biāo)準(zhǔn)規(guī)范和總線標(biāo)準(zhǔn)規(guī)范,即UART是異步串行通信口的總稱。 而RS232、RS499、RS423、RS422和RS485等,是對(duì)應(yīng)各種異步串行通信口的接口標(biāo)準(zhǔn)和總線標(biāo)準(zhǔn),它規(guī)定了通信口的電氣特性、傳輸速率、連接特性和接口的機(jī)械特性等內(nèi)容。實(shí)際上是屬于通信網(wǎng)絡(luò)中的物理層(最底層)的概念,與通信協(xié)議沒(méi)有直接關(guān)系。而通信協(xié)議,是屬于通信網(wǎng)絡(luò)中的數(shù)據(jù)鏈路層(上一層)的概念。UART(Univ

16、ersal Asynchronous Receiver/Transmitter)即通用異步收發(fā)傳輸器,工作于數(shù)據(jù)鏈路層。包含了RS232、RS422、RS485串口通信和紅外(IrDA) 等等。UART協(xié)議作為一種低速通信協(xié)議,廣泛應(yīng)用于通信領(lǐng)域等各種場(chǎng)合。UART基本可分為并口通信及串口通信兩種。其中各位的意義如下: 起始位:先發(fā)出一個(gè)邏輯”0”的信號(hào),表示傳輸字符的開始。 資料位:緊接著起始位之后。資料位的個(gè)數(shù)可以是4、5、6、7、8等,構(gòu)成一個(gè)字符。通常采用ASCII碼。從最低位開始傳送,靠時(shí)鐘定位。 奇偶校驗(yàn)位:資料位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn)),以

17、此來(lái)校驗(yàn)資料傳送的正確性。停止位:它是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志??梢允?位、1.5位、2位的高電平??臻e位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒(méi)有資料傳送。 波特率:是衡量資料傳送速率的指針。表示每秒鐘傳送的二進(jìn)制位數(shù)。例如資料傳送速率為120字符/秒,而每一個(gè)字符為10位,則其傳送的波特率為101201200字符/秒1200波特。通用異步接收器/發(fā)送器(UART)是能夠編程以控制計(jì)算機(jī)到附加串行設(shè)備的接口的微芯片。它提供給計(jì)算機(jī)RS-232C 數(shù)據(jù)終端設(shè)備(DTE)接口,這樣它就可以與調(diào)制解調(diào)器和其他的串行設(shè)備進(jìn)行對(duì)話并交換數(shù)據(jù)了。作為接口的一部分,UART還具有如下功能:將從計(jì)算機(jī)接受到的字

18、節(jié)沿著并行電路轉(zhuǎn)換為單一的串行比特流,以用于帶外傳輸。在帶內(nèi)傳輸中,將串行比特流轉(zhuǎn)換為計(jì)算機(jī)可以處理的字節(jié)。3.3 ADC0809工作原理 ADC0809是采樣頻率為8位的、以逐次逼近原理進(jìn)行模數(shù)轉(zhuǎn)換的器件。其內(nèi)部有一個(gè)8通道多路開關(guān),它可以根據(jù)地址碼鎖存譯碼后的信號(hào),只選通8路模擬輸入信號(hào)中的一個(gè)進(jìn)行A/D轉(zhuǎn)換。1主要特性1)8路8位AD轉(zhuǎn)換器,即分辨率8位。 2)具有轉(zhuǎn)換起??刂贫?。 3)轉(zhuǎn)換時(shí)間為100s4)單個(gè)5V電源供電 5)模擬輸入電壓范圍05V,不需零點(diǎn)和滿刻度校準(zhǔn)。 6)工作溫度范圍為-4085攝氏度 7)低功耗,約15mW。 2內(nèi)部結(jié)構(gòu) ADC0809是CMOS單片型逐次逼近

19、式AD轉(zhuǎn)換器,內(nèi)部結(jié)構(gòu)如圖32所示,它由8路模擬開關(guān)、地址鎖存與譯碼器、比較器、8位開關(guān)樹型DA轉(zhuǎn)換器、逐次逼近 3外部特性(引腳功能) ADC0809芯片有28條引腳,采用雙列直插式封裝,如33所示。下面說(shuō)明各引腳功能。 IN0IN7:8路模擬量輸入端。2-12-8:8位數(shù)字量輸出端。ADDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路ALE:地址鎖存允許信號(hào),輸入,高電平有效。 START: AD轉(zhuǎn)換啟動(dòng)信號(hào),輸入,高電平有效。 EOC: AD轉(zhuǎn)換結(jié)束信號(hào),輸出,當(dāng)AD轉(zhuǎn)換結(jié)束時(shí),此端輸出一個(gè)高電平(轉(zhuǎn)換期間一直為低電平)。 OE:數(shù)據(jù)輸出允許信號(hào),輸入,高電平有效。

20、當(dāng)AD轉(zhuǎn)換結(jié)束時(shí),此端輸入一個(gè)高電平,才能打開輸出三態(tài)門,輸出數(shù)字量。CLK:時(shí)鐘脈沖輸入端。要求時(shí)鐘頻率不高于640KHZ。 REF(+)、REF(-):基準(zhǔn)電壓。 Vcc:電源,單一5V。 GND:地。 ADC0809的工作過(guò)程是:首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經(jīng)譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復(fù)位。下降沿啟動(dòng) AD轉(zhuǎn)換,之后EOC輸出信號(hào)變低,指示轉(zhuǎn)換正在進(jìn)行。直到AD轉(zhuǎn)換完成,EOC變?yōu)楦唠娖?,指示AD轉(zhuǎn)換結(jié)束,結(jié)果數(shù)據(jù)已存入鎖存器,這個(gè)信號(hào)可用作中斷申請(qǐng)。當(dāng)OE輸入高電平 時(shí),輸出三態(tài)門打開,轉(zhuǎn)換結(jié)果的數(shù)字量輸出到數(shù)

21、據(jù)總線上。 圖3-2 圖3-3 第四章 數(shù)據(jù)采集卡的VHDL實(shí)現(xiàn)4.1 VHDL程序設(shè)計(jì)概述4.1.1 VHDL概況和特點(diǎn)VHDL的英文是Very-High-Speed Integrated Circuit HardwareDescription Language,誕生于1982年。1987年底,VHDL被IEEE和美國(guó)國(guó)防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語(yǔ)言 ?,F(xiàn)在,VHDL語(yǔ)言作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語(yǔ)言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語(yǔ)言。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語(yǔ)句外,VHDL的語(yǔ)言形式和描述風(fēng)格

22、與句法是十分類似于一般的計(jì)算機(jī)高級(jí)語(yǔ)言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件,一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可是部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實(shí)體的內(nèi)部功能和算法完成部分。在對(duì)一個(gè)設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。在描述硬件的結(jié)構(gòu)和行為中,VHDL具有如下幾個(gè)特點(diǎn):(1)VHDL語(yǔ)言支持自頂向下(Top-down)的設(shè)計(jì)方法,還支持同步電路、一部電路、FPGA/CPLD以及其他隨機(jī)電路的設(shè)計(jì)。(2)VHDL豐富的仿真語(yǔ)句和庫(kù)函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早起就能查驗(yàn)設(shè)計(jì)系統(tǒng)的可行性,隨時(shí)可對(duì)設(shè)

23、計(jì)進(jìn)行仿真模擬。(3)VHDL語(yǔ)言具有多層次描述系統(tǒng)硬件功能的能力,可以從系統(tǒng)的數(shù)學(xué)模型到門級(jí)電路,其高層次的行為描述可以與低層次的寄存器傳輸級(jí)(Register Transfer Level,RTL)描述和機(jī)構(gòu)描述混合使用,還可以自定義數(shù)據(jù)類型,給編程人員帶來(lái)較大的自由和方便。(4)VHDL語(yǔ)句的行為描述能力和程序結(jié)構(gòu)決定了其具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。符合市場(chǎng)需求的大規(guī)模系統(tǒng)高效、快速的完成必須有多人甚至多個(gè)開發(fā)組進(jìn)行工作才能實(shí)現(xiàn)。(5)對(duì)于用VHDL完成的一個(gè)確定的設(shè)計(jì),可以使用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動(dòng)把VHDL描述設(shè)計(jì)轉(zhuǎn)變成門級(jí)列表。4.1.2 VHDL

24、描述結(jié)構(gòu)VHDL程序設(shè)計(jì)時(shí)常用的一些術(shù)語(yǔ):(1)實(shí)體是VHDL設(shè)計(jì)中最基本的組成部分之一,VHDL表達(dá)的設(shè)計(jì)均與實(shí)體有關(guān),是設(shè)計(jì)中最基本的構(gòu)造塊。實(shí)體類似于原理圖中的一個(gè)不見符號(hào),它并不描述設(shè)計(jì)的具體功能,只是定義所需的全部輸入和輸出信號(hào)。(2)所有能被仿真的實(shí)體都具有結(jié)構(gòu)體描述,結(jié)構(gòu)體用于描述實(shí)體的結(jié)構(gòu)或行為。一個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體分別代表該實(shí)體功能的不同實(shí)現(xiàn)方案。一個(gè)VHDL程序代碼包含實(shí)體(ENTITY)、結(jié)構(gòu)體(ARCHITECTURE)、配置(CONFIGURATION)、程序包(PACKAGE)、庫(kù)(LIBRARY)等部分,其中配置和程序包是可選的。完整的VHDL代碼

25、至少應(yīng)該包含三個(gè)部分,即庫(kù)、結(jié)構(gòu)體和實(shí)體。庫(kù)包含用于設(shè)計(jì)的所有庫(kù),比如IEEE、STD、WORK等。實(shí)體描述外部接口信號(hào)。結(jié)構(gòu)體包含了描述電路或系統(tǒng)行為的VHDL代碼。4.1.3 Quartus II 綜合工具Altera Quartus II設(shè)計(jì)軟件提供完整的多平臺(tái)設(shè)計(jì)環(huán)境,它可以輕易滿足特定設(shè)計(jì)的需要。它是單芯片可編程系統(tǒng)設(shè)計(jì)的綜合性環(huán)境。Quartus II軟件擁有FPGA和CPLD設(shè)計(jì)的所有階段的解決方案。Quartus II設(shè)計(jì)軟件除了支持Altera的APEX 20KE,APEX 20KC, APEX II,ARM的Excalibur嵌入處理器方 案,Mercury,F(xiàn)LEX10K

26、E和ACEX1K之外,還支持MAX3000A,MAX7000系列乘積項(xiàng)器件。MAX3000A和MAX7000設(shè)計(jì)者現(xiàn)在可 以使用QuartusII設(shè)計(jì)軟件中才有的所有強(qiáng)大的功能。4.2 UART模塊設(shè)計(jì)UART主要有由數(shù)據(jù)總線接口、控制邏輯、波特率發(fā)生其、發(fā)送部分和接受部分組成。其主要功能包括微處理器接口,發(fā)送緩沖器(tbr)、發(fā)送移位寄存器(tsr)、幀產(chǎn)生、并轉(zhuǎn)串、數(shù)據(jù)接收緩沖器(rbr)、接收移位寄存器(rsr)、幀產(chǎn)生、串轉(zhuǎn)并等。UART接收/發(fā)送的幀格式為:1個(gè)起始位、8個(gè)數(shù)據(jù)位、1個(gè)停止位和若干空閑位,這種格式是由起始位和停止位來(lái)實(shí)現(xiàn)字符的同步。UART的傳輸字符幀格式如圖4-1所

27、示。1個(gè)起始位8個(gè)數(shù)據(jù)位一個(gè)停止位空閑位一個(gè)完整字符110/10圖4-1 UART傳輸字符幀格式UART的功能結(jié)構(gòu)框圖如圖4-2所示。CPU總線控制器波特率發(fā)生器發(fā)送部分接收部分對(duì)象器件 圖4-2 UART的功能結(jié)構(gòu)框圖4.2.1 UART發(fā)送模塊發(fā)送器實(shí)現(xiàn)的功能是將輸入的8位并行數(shù)據(jù)變?yōu)榇袛?shù)據(jù),同時(shí)在數(shù)據(jù)頭部加起始位,在數(shù)據(jù)位尾部加停止位,當(dāng)電路復(fù)位以后,控制器首先進(jìn)入開始狀態(tài)??刂瓢l(fā)送器發(fā)送低電平開始位和有效數(shù)據(jù)位。發(fā)送器每隔16個(gè)CLK時(shí)鐘周期輸出一位,次序遵循1位起始位、8位數(shù)據(jù)位、1位停止位。計(jì)數(shù)器計(jì)數(shù)滿一個(gè)波特率時(shí)鐘后,發(fā)出移位信號(hào),發(fā)送下一位數(shù)據(jù)位;當(dāng)8位有效數(shù)據(jù)位發(fā)送完之后,

28、轉(zhuǎn)入停止?fàn)顟B(tài),發(fā)送停止位。發(fā)送模塊的有限狀態(tài)機(jī)如圖4-3所示。State 0State2State 1State 4State 3讀8位并行數(shù)據(jù)輸出邏輯高電平輸出邏輯低電平輸出8位串行數(shù)據(jù)輸出停止位圖4-3發(fā)送模塊的有限狀態(tài)機(jī)State 0 狀態(tài):當(dāng)UART被復(fù)位信號(hào)復(fù)位以后,狀態(tài)機(jī)將立刻進(jìn)入這一狀態(tài),在該狀態(tài)下都8位并行數(shù)據(jù),并轉(zhuǎn)到State 1。State 1 狀態(tài):輸出起始位之前的以為邏輯1,軟后轉(zhuǎn)入到State 2。State 2 狀態(tài):輸出起始位0.綜合State 1和State 2可知,在第一位數(shù)據(jù)位之前,有一個(gè)從1到0的下跳變的過(guò)程。State 3狀態(tài):輸出起始位之后,輸出8位數(shù)

29、據(jù)位。State 4 狀態(tài):輸出停止位。發(fā)送器每隔16個(gè)CLK時(shí)鐘周期輸出1位,引入發(fā)送字符長(zhǎng)度和發(fā)送次數(shù)計(jì)數(shù)器,實(shí)現(xiàn)發(fā)送器功能的部分VHDL程序如下:PROCESS(clkbaud8x,rst) BEGIN IF (NOT rst = 1) THEN txd_reg = 1; trasstart = 0; txd_buf = ; state_tras = 0000; key_entry2 = 0; ELSE IF(clkbaud8xEVENT AND clkbaud8x = 1) THEN IF (NOT key_entry2 = 1) THEN IF (key_entry1 = 1) TH

30、EN key_entry2 = 1; txd_buf -發(fā)送起始位 IF (NOT trasstart=1) THEN trasstart = 1; ELSE IF (clkbaud_tras = 1) THEN txd_reg = 0; state_tras -發(fā)送第1位 IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras -發(fā)送第2位 IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd

31、_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras -發(fā)送第3位 IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras -發(fā)送第4位 IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras -發(fā)送第5位 IF (clkbaud_tras = 1)

32、THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras -發(fā)送第6位 IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras -發(fā)送第7位 IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras

33、 -發(fā)送第8位 IF (clkbaud_tras = 1) THEN txd_reg = txd_buf(0); txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1); state_tras -發(fā)送停止位 IF (clkbaud_tras = 1) THEN txd_reg = 1; txd_buf = ; state_tras IF (clkbaud_tras=1) then state_tras=0000; trasstart=0; key_entry2 IF (clkbaud_tras=1) then state_tras=state_tras+0001;

34、trasstart=1; END IF; END CASE; END IF; END IF;END IF; END PROCESS;4.2.2 波特率發(fā)生模塊起始位設(shè)計(jì)的UART接收和發(fā)送按照相同的波特率進(jìn)行,波特率可以通過(guò)接口模塊的總線接口進(jìn)行設(shè)置。UART收發(fā)的每一個(gè)數(shù)據(jù)寬度都是波特率發(fā)生器輸出的時(shí)鐘周期的16倍,即假定當(dāng)前按照9600bit/s進(jìn)行收發(fā),那么波特率發(fā)生器的輸出時(shí)鐘頻率應(yīng)該位9600*16HZ,目的是為在接受時(shí)進(jìn)行精確地采樣,以提出異步的串行數(shù)據(jù)。根據(jù)給定的晶振時(shí)鐘和要求的波特率發(fā)生器波特率的分頻系數(shù)。假定提供的外部時(shí)鐘位12MHZ,可以很簡(jiǎn)單的通過(guò)總線寫入不同的數(shù)值到波特

35、率發(fā)生器保持寄存器,然后用計(jì)數(shù)器的方式生成所需要的各種波特率,即分頻器,計(jì)算公式為:/9600*16。如果希望輸出9600HZ的波特率,可以得出從總線寫入的數(shù)值為:01110;波特率發(fā)生器的狀態(tài)機(jī)如圖4-4所示??臻e狀態(tài)配置完畢復(fù)位完畢計(jì)算時(shí)鐘分頻比復(fù)位首發(fā)狀態(tài)機(jī)復(fù)位握手信號(hào)線位時(shí)鐘計(jì)數(shù)器清零配置波特率控制寄存器圖4-4 波特率發(fā)生器的狀態(tài)機(jī)實(shí)現(xiàn)波特率功能的部分VHDL程序如下:CONSTANT div_par : std_logic_vector(15 DOWNTO 0) := 01110; -分頻參數(shù),其值由對(duì)應(yīng)的波特率計(jì)算而得,按此參數(shù)分頻的時(shí)鐘頻率是波倍特率的16倍,此處值對(duì)應(yīng)9600

36、的波特率,即分頻出的時(shí)鐘頻率是9600*16 PROCESS(clk,rst) BEGIN IF (NOT rst = 1) THEN div_reg = 00000; ELSIF(clkEVENT AND clk=1)THEN IF (div_reg = div_par - 00001) THEN div_reg = 00000; ELSE div_reg = div_reg + 00001; END IF; END IF; END PROCESS;PROCESS(clk,rst) -分頻得到16倍波特率的時(shí)鐘 BEGIN IF (NOT rst = 1) THEN clkbaud8x =

37、0; ELSIF(clkEVENT AND clk=1)THEN IF (div_reg = div_par - 00001) THEN clkbaud8x = NOT clkbaud8x; END IF; END IF; END PROCESS;4.2.3 UART接收模塊在異步串行通信中,需要采取有效的措施來(lái)避免錯(cuò)誤的出現(xiàn),在找準(zhǔn)幀頭起始位;選擇比較可靠的采集點(diǎn),確保數(shù)據(jù)判斷的正確。接收端不斷檢測(cè)線路的狀態(tài),若連續(xù)為1后又檢測(cè)到一個(gè)0,就知道發(fā)來(lái)一個(gè)新字符,應(yīng)馬上準(zhǔn)備接受。所以只需要每個(gè)時(shí)鐘周期都循環(huán)檢測(cè)數(shù)據(jù)線,當(dāng)發(fā)現(xiàn)數(shù)據(jù)線為低電平時(shí)就認(rèn)為找到了起始位,顯然這個(gè)時(shí)刻落后于起始位躍變沿的時(shí)間

38、。要保證異步通信的雙方準(zhǔn)確無(wú)誤的交換信息,必須有效控制采集通信線路上電平信號(hào)的時(shí)機(jī),根據(jù)時(shí)機(jī)選擇恰當(dāng)?shù)臅r(shí)機(jī)能夠使系統(tǒng)準(zhǔn)確穩(wěn)定。如圖 3-5所示的D點(diǎn)是每一數(shù)據(jù)位周期的中心點(diǎn),所以一般系統(tǒng)中的D點(diǎn)是最佳采集時(shí)機(jī)。當(dāng)所用的開發(fā)系統(tǒng)的時(shí)鐘頻率和波特率不匹配就容易產(chǎn)生固定的頻差。采用高穩(wěn)定度的時(shí)鐘可以將誤差縮小,只要流出比較小的余度就可以。因此,稍微靠近A點(diǎn)的B點(diǎn)和C點(diǎn)是最佳采集時(shí)期。采樣過(guò)程分析圖如圖4-5所示。起始位數(shù)據(jù)D0BCDEF圖4-5 采樣過(guò)程分析在異步串口接受中,幀結(jié)構(gòu)起了至關(guān)重要的作用。如果在數(shù)據(jù)幀的結(jié)尾第一個(gè)停止位的位置抽取到了低電平,說(shuō)明發(fā)生了幀錯(cuò)誤。接受模塊的完成上述功能的VHD

39、L語(yǔ)句的有限狀態(tài)機(jī)FSM(finite state machine)流程圖如4-6所示??臻e狀態(tài)數(shù)據(jù)正 確停止位確認(rèn)起始位確認(rèn)起始位有效采采樣數(shù)據(jù)虛假起始位檢測(cè)到起始位寄入數(shù)據(jù)存儲(chǔ)器沒(méi)有檢測(cè)到起始位圖4-6 接受模塊有限狀態(tài)機(jī)程序在偵測(cè)到起始位后,計(jì)16個(gè)時(shí)鐘周期,便開始接收數(shù)據(jù),移位輸入到rxd_buf中,最后輸出數(shù)據(jù)seg_data。實(shí)現(xiàn)該功能的部分VHDL程序如下:PROCESS(clkbaud8x,rst) -接受PC機(jī)的數(shù)據(jù) BEGIN IF (NOT rst =1) THEN rxd_reg1 =0; rxd_reg2 =0; rxd_buf = ; state_rec = 000

40、0; recstart =0; recstart_tmp =0; ELSE IF(clkbaud8xEVENT AND clkbaud8x =1) THEN rxd_reg1 = rxd; rxd_reg2 = rxd_reg1; IF (state_rec = 0000) THEN IF (recstart_tmp =1) THEN recstart =1; recstart_tmp =0; state_rec = state_rec + 0001; ELSE IF (NOT rxd_reg1 AND rxd_reg2) =1) THEN -檢測(cè)到起始位的下降沿,進(jìn)入接受狀態(tài) recstar

41、t_tmp = 0001 AND state_rec=1000) THEN IF (clkbaud_rec =1) THEN rxd_buf(7) = rxd_reg2; rxd_buf(6 DOWNTO 0) = rxd_buf(7 DOWNTO 1); state_rec = state_rec + 0001; END IF; ELSE IF (state_rec = 1001) THEN IF (clkbaud_rec =1) THEN state_rec = 0000; recstart =0; END IF; END IF; END IF; END IF; END IF;END IF

42、;seg_data ale=0;start=0;oe=0;lock=0; next_state ale=1;start=0;oe=0;lock=0; next_state ale=1;start=1;oe=0;lock=0; next_state ale=0;start=1;oe=0;lock=0; if(eoc=0) then next_state=st4; -轉(zhuǎn)換即將結(jié)束,轉(zhuǎn)換至下一狀態(tài); else next_state ale=0;start=0;oe=0;lock=0; if(eoc=1) then next_state=st5; -EOC由0恢復(fù)1,轉(zhuǎn)換結(jié)束; else next_state ale=0;start=0;oe=1;lock=0; next_

溫馨提示

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

評(píng)論

0/150

提交評(píng)論