版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于fpga的數(shù)字溫度設(shè)計摘要:本設(shè)計有效的克服了傳統(tǒng)的數(shù)字溫度計的缺點,采用eda技術(shù)自上而下的設(shè)計思路,繪制出了具體的邏輯電路,最后又在硬件上通過對其進行調(diào)試和驗證?;趂pga在quartus i i 9. 0sp2軟件下應(yīng)用vhdl語言編寫程序,采用altra公司cyclonel i系列的ep2c8q208芯片進行了計算機仿真,并給出了相應(yīng)的仿真結(jié)果。該電路能夠?qū)崿F(xiàn)很好的測溫功能。關(guān)鍵字:數(shù)字溫度計;eda; fpga; vhdl; quartus i i 9. 0sp2; ep2c8q208the design of digital thermometer based on fpga
2、abstract: this design effectively overcomes the traditional digital thermometers weaknesses and takes a top-down approach to design.draw outa particular logic circuits, and finally pass the circuits to the hardware todebug and verify it.this design is based on fpga using vhdl language towrite progra
3、m in quartus ii software,adopting ep2c8q208 chip of cyclone-iiseries of altra company for computer simulation and at the same timeshowing the corresponding simulation result. this circuit is able to carry outexcellent temperature- measurement function.keywords: digital thermometer; eda; fpga; vhdl;
4、quartus ii; ep2c8q208引言檢測是控制的棊礎(chǔ)和前提,而檢測的精度必須高于控制的精確度,否則無從實現(xiàn) 控制的精度要求。不僅如此,檢測還涉及國計民生各個部門,可以說在所以科學(xué) 技術(shù)領(lǐng)域無時不在進行檢測??茖W(xué)技術(shù)的發(fā)展和檢測技術(shù)的發(fā)展是密切和關(guān)的。 現(xiàn)代化的檢測手段能達(dá)到的精度、靈敏度及測量范圍等,在很大程度上決定了科 學(xué)技術(shù)的發(fā)展水平。同時,科學(xué)技術(shù)的發(fā)展達(dá)到的水平越高,又為檢測技術(shù)、傳感器技術(shù)提供y新的前提手段。fi前溫度計技術(shù)的發(fā)展很快,從原始的玻璃管 溫度計發(fā)展到了現(xiàn)在的熱電阻溫度計、熱電偶溫度計、數(shù)字溫度計、電子溫度計 等等。h前的溫度計中傳感器是它的重要組成部分,它的精
5、度靈敏度基本決定了 溫度計的精度、測量范圍、控制范圍和用途等llj。傳感器應(yīng)用極其廣泛,目前已經(jīng)研制出多種新型傳感器。設(shè)計要求現(xiàn)代社會的標(biāo)志之一就是信息產(chǎn)品的廣泛使用,而且是產(chǎn)品的性能越來越強,復(fù)雜程度越來越高,更新步伐越來越快。支撐信息電子產(chǎn)品高速發(fā)展的基礎(chǔ)就是微電子制造工藝水平的提高和電子產(chǎn)品設(shè)計開發(fā)技術(shù)的發(fā)展。前者以微細(xì)加工技術(shù)為代表,而者的代表就是電子設(shè)計自動化(electronic designautomatic, eda)技術(shù)l5j。本設(shè)計采用的vhdl是一種全方位的硬件描述語言,具有極強的描述能力,能支持系統(tǒng)行為級、寄存器傳輸級和邏輯門級三個不同層次的設(shè)計;支持結(jié)構(gòu)、數(shù)據(jù)流、行為
6、三種描述形式的混合描述、覆蓋面廣、抽象能力強,因此在實際應(yīng)用中越來越廣泛。asic是專用的系統(tǒng)集成電路,是一種帶有邏輯處理的加速處理器。而fpga是特殊的asic芯片,與其他的asic芯片和比,它具有設(shè)計開發(fā)周期短、設(shè)計制造成木低、開發(fā)工具先進、標(biāo)準(zhǔn)產(chǎn)品無需測試、質(zhì)量穩(wěn)定以及可實時在線檢測等優(yōu)點21。溫度的數(shù)字化給人們生產(chǎn)生活帶來y極大的方便。因此,研宂數(shù)字溫度計及其應(yīng)用,有著非?,F(xiàn)實的意義。1.1選題背景木節(jié)將從fpga嵌入式應(yīng)用幵發(fā)技術(shù)與溫度計發(fā)展的客觀實際出發(fā),通過對該技術(shù)發(fā)展?fàn)顩r的了解,以及課題本身的需要,指出研究基于fpga的芯片系統(tǒng)與設(shè)計一一數(shù)字溫度計的設(shè)計與實現(xiàn)的必要性31。1.
7、1.1課題相關(guān)技術(shù)的發(fā)展當(dāng)今電子產(chǎn)品正向功能多元化,體積最小化,功耗最低化的方向發(fā)展。它與傳統(tǒng)的電子產(chǎn)品在設(shè)計上的顯著區(qū)別師大量使用大規(guī)模可編程邏輯器件,使產(chǎn)品的性能提高,體積縮小,功耗降低.同時廣泛運用現(xiàn)代計算機技術(shù),提高產(chǎn)品的自動化程度和競爭力,縮短研發(fā)周期。eda技術(shù)正是為了適應(yīng)現(xiàn)代電子技術(shù)的耍求,吸收眾多學(xué)科最新科技成果而形成的一門新技術(shù)。美國altera公司的可編程邏輯器件釆用全新的結(jié)構(gòu)和先進的技術(shù),加上maxplustt (或最新的quartus)開發(fā)環(huán)境,更具冇高性能,開發(fā)周期短等特點,十分方便進行電子產(chǎn)品的開發(fā)和設(shè)計41。eda技術(shù)以大規(guī)??删幊踢壿嬈骷樵O(shè)計載體,以硬件描述語
8、言為系統(tǒng)邏輯描述 主要表達(dá)方式,以計算機、大規(guī)??删幊踢壿嬈骷拈_發(fā)軟件及實驗開發(fā)系統(tǒng)為 設(shè)計工具,通過有關(guān)的幵發(fā)軟件,自動完成用軟件的方式設(shè)計的電子系統(tǒng)到硬件 系統(tǒng)的邏輯編譯,邏輯化簡,邏輯分割,邏輯映射,編程下載等工作。最終形成集成電子系統(tǒng)或?qū)S眉尚酒囊婚T新技術(shù)51。1.1.2課題研究的必要性新產(chǎn)品、新技術(shù)層出不窮,電子技術(shù)的發(fā)展更是h新月異??梢院敛豢鋸埖恼f, 電子技術(shù)的應(yīng)用無處不在,電子技術(shù)正在不斷地改變我們的生活,改變著我們的 世界。近些年,隨著科技的發(fā)展和社會的進步,人們對溫度計的要求也越來越高, 不管在哪里,人們都想知道此刻的溫度和天氣狀況等一些信息,傳統(tǒng)的溫度計由 于它的局
9、限性以及不方便性,已不能滿足人們的需求。溫度計亟待一次革命, 不管在性能還是在樣式上它都將發(fā)生質(zhì)的變化,于是數(shù)字溫度計的時代悄然來臨了。1.2課題研宄的內(nèi)容本設(shè)計主要研究基于fpga的數(shù)字溫度計設(shè)計,要求溫度采集準(zhǔn)確精確,精確度達(dá)到0. 0625攝氏度,對溫度的采集由4x1矩形鍵盤進行控制。fpga簡介 2.1 fpga 概述fpga是現(xiàn)場可編程門陣列(field programmable gate array)的簡稱,與之相 應(yīng)的cpld是復(fù)雜可編程邏輯器件(complex programmable logic device)的簡 稱,兩者的功能基木相同,只是實現(xiàn)原理略有小同,所以有時可以忽
10、略這兩者的 區(qū)別,統(tǒng)稱為可編程邏輯器件或cpld/pgfa。cpld/pgfa幾乎能完成任何數(shù)字器件的功能,上至高性能cpu,下至簡單的74電路。它如同一張白紙或是一堆積木,工程師可以通過傳統(tǒng)的原理圖輸入或硬件描述語言自由的設(shè)計一個數(shù)字系統(tǒng)。通過軟件仿真可以事先驗證設(shè)計的正確性,在pcb完成以后,利用cpld/fpga的在線修改功能,隨時修改設(shè)計而不必改動硬件電路。使用cpla/fpga開發(fā)數(shù)字電路,可以大大縮短設(shè)計時間,減少pcb面積,提高系統(tǒng)的可靠性。這些優(yōu)點使得cpla/epga技術(shù)在20世紀(jì)90年代以后得到飛速的發(fā)展,同時也大大推動了eda軟件和硬件描述語言hdl的進步l4j。2.2
11、fpga基本結(jié)構(gòu)fpga具冇掩膜可編程門陣列的通用結(jié)構(gòu),它由邏輯功能塊排成陣列,并由可編程的互連資源連接這些邏輯功能塊來實現(xiàn)不同的設(shè)計。epga 一般由3種可編程電路和一個用于存放編程數(shù)據(jù)的靜態(tài)存儲器sram組成。 這3種可編程電路是:可編程邏輯模塊、輸入/輸出模塊(i0b-i/0 block)和 互連資源??删幊踢壿嬆Kclb是實現(xiàn)邏輯功能的基木單元,它們通常規(guī)則的排 列成-個陣列,散布于整個芯片;可編程輸入/輸出模塊(tob)主要完成芯片上 的邏輯與外部封裝腳的接門,它通常排列在芯片的四周;可編程互連資源包括各 種長度的連接線段和一些可編程連接開關(guān),它們將各個clb之間或clb、10b之間
12、以及i0b之間連接起來,構(gòu)成特定功能的電路。clb是fpga的主要組成部分。圖2-1是clb基木結(jié)構(gòu)框圖,它主要由邏輯 函數(shù)發(fā)生器、觸發(fā)器、數(shù)據(jù)選擇器等電路組成。clb中3個邏輯函數(shù)發(fā)生器分別 是g、f和11,相應(yīng)的輸出是g、f和11。g有4個輸入變量gl、g2、g3和g4; f也有4個輸入變量fi、f2、f3和f4。這兩個函數(shù)發(fā)生器是完全獨立的,均可以實現(xiàn)4輸入變量的任意組合邏輯函數(shù)。邏輯函數(shù)發(fā)生器h有3個輸入信號;前兩個是函數(shù)發(fā)生器的輸出g和f,而另一個輸入信號是來自信號變換電路的輸出h1。這個函數(shù)發(fā)生器能實現(xiàn)3輸入變量的各種組合函數(shù)。這3個函數(shù)發(fā)生器結(jié)合起來,可實現(xiàn)多達(dá)9變量的邏輯函數(shù)。
13、clb中有許多不同規(guī)格的數(shù)據(jù)選擇器(四選一、二選一等),通過對clb內(nèi)部 數(shù)據(jù)選擇器的編程,邏輯函數(shù)發(fā)生器g、f和h的輸出可以連接到clb輸出端x 或y,并用來選擇觸發(fā)器的激勵輸入信號、時鐘有效邊沿、時鐘使能信號以及輸 出信號。這些數(shù)據(jù)選擇器的地址控制信號均由編程信息提供,從而實現(xiàn)所需的電路結(jié)構(gòu)。clb中的邏輯函數(shù)發(fā)生器f和g均為杳找表結(jié)構(gòu),其工作原理類似于rom。f和g的輸入等效于rom的地址碼,通過查找rom中的地址表可以得到和應(yīng)的組合邏輯函數(shù)輸出。另一方面,邏輯函數(shù)發(fā)生器f和g還可以作為器件內(nèi)高速ram或小的可讀寫存儲器使用,它由信號變換電路控制。輸入/輸出模塊i0b。i0b提供了器件引
14、腳和內(nèi)部邏輯陣列之間的連接。它主 耍由輸入觸發(fā)器、輸入緩沖器和輸出觸發(fā)/鎖存器、輸出緩沖器組成。每個i0b控制一個引腳,它們可被配罝為輸入、輸出或雙向i/o功能。當(dāng)i0b控制的引腳被定義為輸入時,通過該引腳的輸入信號先送入輸入緩沖器。緩沖器的輸出分成兩路:一路可以直接送到mux,另一路經(jīng)延時幾納秒(或者不延時)送到輸入通路d觸發(fā)器,再送到數(shù)據(jù)選擇器。通過編程給數(shù)據(jù)選擇器不同的控制信息,確定送至clb陣列的ii和12是來自輸入緩沖器,還是來自觸發(fā)器??删幊涕_關(guān)矩輸入輸出模法 互g資源圖2-1 clb基本結(jié)構(gòu)當(dāng)tob控制的引腳被定義為輸出時,clb陣列的輸出信號out也可以冇兩條傳輸途徑:一條是直
15、接經(jīng)mux送至輸出緩沖器,另一條是先存入輸出通路d觸發(fā)器,再送至輸出緩沖器。i0b輸出端配有兩只mos管,它們的柵極均可編程,使mos管導(dǎo)通或截止,分別經(jīng)上拉電阻接通vcc、地線或者不接通,用以改善輸出波形和負(fù)載能力??删幊袒ミB資源tr??删幊袒ミB資源tr可以將fpga內(nèi)部的clb和clb之 間、clb和i0b之間連接起來,構(gòu)成各種具有復(fù)雜功能的系統(tǒng)。ir主要由許多金 屬線段構(gòu)成,這些金屬線段帶有可編程開關(guān),通過自動布線實現(xiàn)各種電路的連接。2.3 fpga系統(tǒng)設(shè)計流程一般說來,一個比較大的完整的項目應(yīng)該采用層次化的描述方法:分為幾個較人 的模塊,定義好各功能模塊之間的接門,然后各個模塊再細(xì)分去
16、具體實現(xiàn),這就 是top down (自頂向下)的設(shè)計方法。目前這種高層次的設(shè)計方法己被廣泛采 用。高層次設(shè)計只是定義系統(tǒng)的行為特征,可以不涉及實現(xiàn)工藝,因此還可以在 廠家綜合庫的支持下,利用綜合優(yōu)化工具將高層次描述轉(zhuǎn)換成針對某種工藝優(yōu)化 的網(wǎng)絡(luò)表,使工藝轉(zhuǎn)化變得輕而易舉。cpld/fpga系統(tǒng)設(shè)計的工作流程如圖2-2所示6。系統(tǒng)劃分圖2-2 cpld/fpga系統(tǒng)設(shè)計流程流程說明:工程師按照“自頂向下”的設(shè)計方法進行系統(tǒng)劃分。輸入vhdl代碼,這是設(shè)計中最為普遍的輸入方式。此外,還可以采用圖形輸入方式(桐圖、狀態(tài)圖等),這種輸入方式具冇直觀、容易理解的優(yōu)點。將以上的設(shè)計輸入編譯成標(biāo)準(zhǔn)的vhd
17、l文件。進行代碼級的功能仿真,主要是檢驗系統(tǒng)功能設(shè)計的止確性。這一步驟適用 于大型設(shè)計,因為對于大型設(shè)計來說,在綜合前對源代碼仿真,就可以大大減少設(shè)計重復(fù)的次數(shù)和時間。一般情況下,這一仿真步驟可略去。利用綜合器對vhdl源代碼進行綜合優(yōu)化處理,生成門級描述的網(wǎng)絡(luò)表文件, 這是將高層次描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。綜合優(yōu)化是針對asic芯片供應(yīng) 商的某一產(chǎn)品系列進行的,所以綜合的過程要在相應(yīng)的廠家綜合庫的支持下冰能完成。利用產(chǎn)生的網(wǎng)絡(luò)表文件進行適配前的時序仿真,仿真過程不涉及具體器件的硬件特性,是較為粗略的。一般的設(shè)計,也可略去這一步驟。利用適配器將綜合后的網(wǎng)絡(luò)表文件針對某一具體的a標(biāo)器件進行邏
18、輯映射操作,包括底層器件配置、邏輯分割、邏輯優(yōu)化和布局布線。在適配完成后,產(chǎn)生多項設(shè)計結(jié)果:(a)適配報告,包括芯片內(nèi)部資源利 用情況,設(shè)計的布爾方程描述情況等;(b)適配后的仿真模型;(c)器件編程 文件。根據(jù)適配后的仿真模型,可以進行適配后時序仿真,因為己經(jīng)得到器件的 實際硬件特性(如時延特性),所以仿真結(jié)果能比較精確的預(yù)期未來芯片的實際 性能。如果仿真結(jié)果達(dá)不到設(shè)計要求,就修改vhdl源代碼或選擇不同速度和品質(zhì)的器件,直至滿足設(shè)計要求l7j。最后將適配器產(chǎn)生的器件編程文件通過編程器或下載電纜載入到目標(biāo)芯片 cpld/fpga 中。2.4 fpga開發(fā)編程原理硬件設(shè)計需要根據(jù)各種性能指標(biāo)、
19、成本、開發(fā)周期等因素,確定最佳的實現(xiàn)方案,畫出系統(tǒng)框圖,選擇芯片,設(shè)計pcb并最終形成樣機。cpld/fpga軟件設(shè)計可分為兩大塊:編程語言和編程工具。編程語言主要冇vhdl 和vcrilog兩種硬件描述語言;編程工具主要是兩大廠家altera和xilinx的集 成綜合 eda 軟件(如 max+plusii、quartusii> foundation、ise)以及第三方 工具(如fpga express、modelsim、synposys svs等)。具體的設(shè)計輸入方式有以下幾種l8j:(1) hdl語言方式。hdl既可以描述底層設(shè)計,也可以描述頂層的設(shè)計,但它不 容易做到較高的工作速
20、度和芯片利用率。用這種方式描述的項a最后所能達(dá)到的性能與設(shè)計人員的水平、經(jīng)驗以及綜合軟件有很大的關(guān)系。(2) 圖形方式??梢苑譃殡娐吩韴D描述,狀態(tài)機描述和波形描述3種形式。有的軟件3種輸入方法都支持,如active-hdl。max+plusii圖形輸入方式只支 持電路原理圖描述和波形描述兩種。電路原理圖方式描述比較直觀和高效,對綜 合軟件的要求不高。一般大都使用成熟的ip核和屮小規(guī)模集成電路所搭成的現(xiàn) 成電路,整體放到一片可編程邏輯器件的內(nèi)部去,所以硬件工作速度和芯片利用 率很高,但是但項目很大的時候,該方法就顯得有些繁瑣;狀態(tài)機描述主要用來 設(shè)計基于狀態(tài)機思想的時序電路19。在圖形的方式下
21、定義好各個工作狀態(tài),然后 在各個狀態(tài)上輸入轉(zhuǎn)換條件以及相應(yīng)的輸入輸出,最后生成hdl語言描述,送去 綜合軟件綜合到可編程邏輯器件的內(nèi)部。由于狀態(tài)機到i1dl語言有一種標(biāo)準(zhǔn)的對 應(yīng)描述方式,所以這種輸入方式最后所能達(dá)到的工作速度和芯片利用率主要取決 于綜合軟件;波形描述方式是基于真值表的一種圖形輸入方式,直接描述輸入與 輸出的波形關(guān)系。這種輸入方式最后所能達(dá)到的工作速度和芯片利用率也是主要取決于綜合軟件101。2.5 ds18b20的性能特點 (1) ds18b20的性能特點:采用單總線專用技術(shù),既可通過串行口線,也可通過其它i/o 口線與微機接口, 無須經(jīng)過其它變換電路,直接輸出被測溫度值(9
22、位二進制數(shù),含符號位), 測溫范圍為-55°c-+125°c,測量分辨率為0. 0625°c,內(nèi)含64位經(jīng)過激光修正 的只讀存儲器rom,適配各種系統(tǒng),用戶可分別設(shè)定各路溫度的上、下限,內(nèi)含寄生電源lllj。(2) ds18b20內(nèi)部結(jié)構(gòu)圖2-3 ds18b20內(nèi)部結(jié)構(gòu)ds18b20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻rom,溫度傳感器,掉電后仍 能保存的溫度報警觸發(fā)器th和tl (存儲在eeprom),高速暫存器。ds18b20的管 腳排vcc dq gndo 64位光刻rom是出廠前被光刻好的,它是該ds18b20的序列號。每一個ds1820包括一個唯一的64
23、位長的序號121。開始8位是產(chǎn)品類型編碼(ds18b20編碼均為10h)。接著的48位是每個器件唯一的序號最后8位是前面56位的crc (循環(huán)冗余校驗)碼。ds18b20中還有用于 存儲測得的溫度值的兩個8位存貯器ram,編號為0號和1號。1號存貯器存放溫 度值的符號如果溫度為負(fù),則1號存貯器8位全為1,否則全為0。0號存貯器 用于存放溫度值的補碼,lsb(最低位)的1表示0.5'c。將存貯器屮的二進制數(shù) 求補再轉(zhuǎn)換成十進制數(shù)并除以2就得到被測溫度值 ds18b20有兩種供電方式即數(shù)據(jù)總線供電方式和外部供電方式采取數(shù)據(jù)總線供 電方式可以節(jié)省一根導(dǎo)線但完成溫度測量的時間較長采取外部供電方
24、式則多用一根導(dǎo)線但測量速度較1設(shè)計過程3.1總體方案設(shè)計3.1.1 fpga 控芾!) ds18b20fpga需要完成ds18b20的初始化、讀取ds18b20的48位id號、啟動ds18b20溫度轉(zhuǎn)換、讀取溫度轉(zhuǎn)化結(jié)果。讀取48位1d號和讀取溫度轉(zhuǎn)換結(jié)果過程中,fpga還要實現(xiàn)crc校驗碼的計算,保證通信數(shù)據(jù)的可靠性ll4j。以上操作反復(fù)進行,可以用狀態(tài)機來實現(xiàn)。狀態(tài)機的各種狀態(tài)如下:reset 1:對ds18b20進行第一次復(fù)位,然后進入等待,等待800 us后,進入下 一狀態(tài)。cmd33:對ds18b20發(fā)出0x33命令,讀取48位id值。get_id:從 ds18b20 中讀取 48
25、位 id 值。reset2:對ds18b20jf行第二次復(fù)位,然后進入delay狀態(tài)等待800 u s后,進 入cmdcc狀態(tài)。cmdcc:向ds18b20發(fā)出忽略rom命令,為進入下一狀態(tài)作準(zhǔn)備。cmd44:向ds18b20發(fā)出啟動溫度轉(zhuǎn)換命令,然后進入等待,900ms后進入下一狀態(tài)。reset3:對ds18b20進行第三次復(fù)位。cmdcc2:向ds18b20發(fā)出忽略rom命令,為了進入下一狀態(tài)作準(zhǔn)備。get.temp:從ds18b20屮讀取溫度測量數(shù)值。delay:等待狀態(tài)。wiute_bit:向ds18b20中寫入數(shù)據(jù)位狀態(tài)。read_bit:從ds18b20讀取數(shù)據(jù)位狀態(tài)。在該狀態(tài)中每
26、讀取1位數(shù)據(jù),同時完 成該據(jù)位的crc校驗計算151。所冇數(shù)據(jù)都讀取后,還要讀取8位crc校驗位。 這8位校驗位也經(jīng)過crc校驗計算,如果通信沒有錯誤,總的crc校驗結(jié)果應(yīng)該是0。這時可將通信正確的數(shù)據(jù)保存到id和temp.data寄存器中。3.2單元電路設(shè)計3.2.1 ds18b20溫度采集在開發(fā)板上的原理<1 7kklui44圖3-1開發(fā)板卜.輸出顯示的按鍵原理圖o oprdsinh *1121iiwx5vcc1.q14?gm>vcc3.3gn3?l(o144圖3-2開發(fā)板上的按鍵實物圖圖3-3發(fā)板上ds18b20實物圖裝調(diào)與測試4. 1 ep2c8q208 fpag 開發(fā)板裝
27、調(diào)圖4-1開發(fā)板實物圖核心系統(tǒng):(1) cyclonell 核心:ep2c8q208:sdram: 64mbit為滿足用戶海量存儲:(為做sopc或者nios ii系統(tǒng)提供足夠的內(nèi)存);(3) flash: 16mbit能滿足大中小型開發(fā),為用戶配置nios的鏡像文件:(4) epcs4配置芯片:(5)提供配置模式:jtag和as。此外配置管腳通過插針引出:(6)核心板的有源時鐘為50mhz):(7)將所有10、avalon總線、配置管腳等都通過3排插針引出,可以充分自由 發(fā)揮,擴展更靈活:(擴展i/o完全考慮了電磁兼容的問題,滿足信號完整性) (8) fpga供電系統(tǒng):外接5v的直流電:4.
28、2外圍i/o資源(1) 6位led發(fā)光二極管(做流水等實驗)(2) 8位led數(shù)碼管(做動態(tài)或靜態(tài)數(shù)碼管顯示實驗,頻率計;秒表(3) 路蜂鳴器(用作發(fā)聲實驗)(4) 4只獨立按鍵(做按鍵控制實驗)(5) i2c 串行 eeprom 24c04 (做 iic 總線實驗)(6) vga接口(做vga實驗)(7) max232專用串口通訊電路(做和其他系統(tǒng)的串u通訊實驗)(8) 1602lcd字符型液晶接口(做字符顯示實驗)(9) 12864lcd圖形液晶接門(做圖形漢字等顯示實驗)(10)雙ps/2鍵盤接口(做ps/2鍵盤實驗)(11) sd卡接口??梢宰x取sd卡的數(shù)據(jù):例如圖片。00000000
29、 ds1302時鐘芯片,11111111 ds18b20溫度傳感器 (14)紅外線接收頭4.3開發(fā)板源程序測試library ieee;use ieee.std logic 1164.all; use ieee.std logic arith.all;use ieee.std_logic_unsigned.all;entity dsl8b20 isport(clk : in std_logic;-原程序可能為 50mhz dq : inout std_logic;- temp一h : out std_logic_vector(7 downto 0);- temp_i : out std_log
30、ic_vector(7 downto 0);led : out std一logic;led2 : out std_logic;led3 : out std_logic;rst: in stdjogic;dataout : out std_logic_vector(7 downto 0); seg : out std_logic_vector(5 downto 0);end dsl8b20;architecture behavioral of dsl8b20 istype state_type is(reset,cmd_cc,write_byte,write_low,write_high,rea
31、d_bit,cmd_44,cmd_be,wait800ms,get_tmp,wait4ms);signal state: state_type:=reset;signal clk_temp : std_logic:=0; signal clklm : std_logic;-分頻后得到的 1m 時鐘signal write一temp : std_iogic_vector(7 downto 0):=n00000000;signal tmp : std_logic_vector( 11 downto 0); signal tmp_bit : stdlogic;signal write_byte_cn
32、t : integer range 0 to 8:=0; signal write_low_cnt : integer range 0 to 2:=0;signal write_high_cnt : integer range 0 to 2:=0; signal read_bit_cnt : integer range 0 to 3:=0;signal get_tmp_cnt : integer range 0 to 13:=0;signal cnt : integer range 0 to 100001:=0;卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜 卜
33、 卜 卜 卜 卜 卜 卜 卜signal cnt2 : integer range 0 to 4000001:=0; signal seg_temp : std_iogic_vector(5 downto 0); signal temp_h : std_logic_vector(7 downto 0); signal temp_l : std_logic_vector(7 downto 0);signal temp : std一logic;signal data一tempo : std_logic_vector( 15 downto 0); signal decimal。: std_logic
34、_vector( 15 downto 0); signal decimall : std_logic_vector( 15 downto 0); signal decimal2 : std_logic_vector( 15 downto 0); signal decimal3 : std_logic_vector( 15 downto 0);signal data一tempi : std_iogic_vector(7 downto 0); signal integero : std_logic_vector(7 downto 0); signal integer 1 : std_logic_v
35、ector(7 downto 0); signal integer2 : std_logic_vector(7 downto 0); signal integer3 : std_logic_vector(7 downto 0); signal integer4 : std_logic_vector(7 downto 0); signal integer5 : stdlogic_vector(7 downto 0); signal integer6 : std_logic_vector(7 downto 0);signal sign : std_logic_vector(7 downto 0);
36、觚2蘑 蘑蘑 蘑 蘑 蘑 蘑 蘑 蘑signal count : integer range 0 to 51:=0;signal write_byte_flag : integer range 0 to 4:=0;beginclkdivider:process (clk,clk_temp) beginif rising_edge(clk) then if (count = 24) thencount <= 0;clk_temp<= not clk_temp; elsecount <= count +1; end if;end if;elk 1 m<=clk_temp;
37、end process;state一transition:process(state,clk 1 m)beginif rising_edge(clk 1 m) thenif(rst=o') thenstate<=reset;elsecase state is when reset=>r 卜 r * w r * w r * w r * w r * w r * w r * w r * w r * wled2<=,0,*1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1* *1*led3<=,01;,二、,二、,二、,二、,二、
38、,二、,二、*'* <'*if (cnt=o and cnt<500) then dq<=,0,;cnt<=cnt+l;state<=reset;elsif (cnt=500 and cnt<510) then dq<=*z'cnt<=cnt+l;state<=reset;elsif (cnt>=510 and cnt<750) then temp<=dq;if(cnt=580) then temp<=dq;if(temp=t) thenled'o*;else led<=,1,;
39、 end if; end if;cnt<=cnt+1;state<=reset;elsif (cnt=750) then cnt<=0;state<=cmd_cc; end if;when cmd_cc=>led2<=*r;led3<=,0,;write_temp<=',11001100h; state<=write_byte; when write一byte=case write一bytecnt is when 0 to 7=>if (write_temp(write_byte_cnt)=,o,) then state<
40、;=write一low;led3<=r;elsestate<=write_high; end if;write一byte一cnt<=write一byte一cnt+1; when 8=>if (write.byte_flag=0) then -第一次寫 oxcc 完畢state<=cmd_44;write一b yte一flag<= 1;elsif (write_b yte_flag= 1) then -寫 0x44 完畢 state<=reset;write_byte_flag<=2;elsif (write_byte_flag=2) then -
41、第二次寫 oxcc 完畢 state<=cmd一be;write byte flag<=3;elsif (write_byte_flag=3) then -寫 oxbe 完畢 state<=get_tmp;write_byte_flag<=0; end if;write_byte_cnt<=0; when others=>state<=reset;end case;when write_low=>led3<=* 1r;case write一lowcnt is when 0=>dq<=,0,;if (cnt=70) then cn
42、t<=0;write low cnt<=1; elsecnt<=cnt+l;end if;when 1 = dq<=,z,;if (cnt=5) then cnt<=0;write_low_cnt<=2;elsecnt<=cnt+1; end if;when 2=>state<=write_byte;write一low一cnt<=0;when others=>write low cnt<=0; end case;when write_high=>case write_high_cnt iswhen 0= dq<
43、=,0,;if (cnt=8) thencnt<=0;write_high_cnt<= 1; elsecnt<=cnt+1; end if;when 1=>dqc.z.;if (cnt=72) then cnt<=0;write_high_cnt<=2;elsecnt<=cnt+1; end if;when 2=>state<=write_byte;write_high_cnt<=0; when others=write_high_cnt<=0;end case; when cmd_44=>write_temp<=n
44、01000100"state<=write_byte;when cmd一be=write_temp<=n 10111110"state<=write_byte; when read_bit=>case read_bit_cnt is when 0=dq<=,0,;if (cnt=4) thenread_bit_cnt<=1;cnt<=0;elsecnt<=cnt+l; end if;when 1=> dq'z*;if (cnt=4) then read bit cnt<=2;cnt<=0;elsecn
45、t<=cnt+1; end if;when 2=>dq<=*z'tmp_bit<=dq; if (cnt=l) then read一bit_cnt<=3;cnt<=0;elsecnt<=cnt+l; end if;when 3=>dq<=,z,;if (cnt=55) then cnt<=0;read bit cnt<=0; state<=get_tmp;elsecnt<=cnt+1; end if;when others=>read bit cnt<=0; end case;when wait8
46、00ms=> if (cnt= 100000) thenstate<=reset;cnt<=0;elsecnt<=cnt+l;state<=wait800ms;end if;when get_tmp=> case get_tmp_cnt iswhen 0 => state<=read_bit;get tmp cnt<=get tmp cnt+1; when 1 to 12= state<=read一bit;tmp(get_tmp_cnt-1 )<=tmp_bit; get一tmp一cnt<=get一tmp一cnt+1;wh
47、en 13=get tmp cnt<=0; state<=wait4ms;end case;when wait4ms: if (cnt>=4000) then -state<=wait4ms;state<=reset;cnt<=0;elsecnt<=cnt+l;state<=wait4ms;end if;when others=state<=reset;ledco1;led2<=,0,;led3<=*or;end case;end if;end if;end process;temp_h<=tmp( 11 downto 8
48、);temp_h(7 downto 4) <= "1111" temp_l<=tmp(7 downto 0);temp_h<=,0,&tmp( 11 downto 5);-temp_k=n0000n&tmp(4 downto 1);process(seg_temp,clk),temp_l,temp_h)begincase tmp(3downto 0)istemp_1(3downto 0) iswhenn0000m=>dataout<="11000000” ;-0when"ooo r=>dataout&l
49、t;="11111001” ;-1whenn0010”=>dataout<=u10100100h ;-2whenn0011n=dataout<=n10110000h ;-3whenn0100h=>dataout<="10011001"-4whenn0101”=>dataout<=n10010010h ;-5whenn0110h=>dataout<=10000010” ;6whennoi ir=>dataout<=n11111000u ;-7if rising_edge( elk ) thenif(s
50、eg_temp="l 11110'.) then-" 1110") then-nl 1110") thenwhenh1000n二when"1001”=>when"1010n=>when”1011”=>whenm1100n=>whenh1101h=when"1110”=>when"uir=>dataout <= dataout <= dataout <= dataout <= dataout <= dataout <= dataout &
51、lt;= dataout <=* 10000000h n10010000h "10001000°ni ooooo ir”11000110”n10100001nu10000110u”10001110"-8 ;-9 ;a ;-b ;-c ;-d ;-ewhen others:elsif(seg_temp=" 111101") case tmp(7 downtowhen n0000h when "000 ln when "0010" when ”0011” when n0100h when ”0101” when
52、n0110h when n0111"when n1000u => when n1001h = when n1010h => when ”1011” = when ”1100n = when ”1101"= when ”1110”= when nllll"=when others=>dataout <= h11000000u;-0 end case;then-h1101h) then-" 11101n) then 4) istemp_l(7 downto 4) is => dataout <= ,11000000n ;
53、-0 => dataout <= ”11111001” ; -1 => dataout <= ”10100100” ; -2 => dataout <= ”10110000” ; -3 => dataout <= "10011001" ; -4 => dataout <= ”10010010n ; -5 => dataout <= m10000010" ; -6 二dataout <= ”11111000n ; -7 dataout <= "10000000"
54、; -8 dataout <= "10010000" ; -9 dataout <= ”10001000” ; -a dataout <= n 100000lln ; -b dataout <= ”11000110" ; -c dataout <= ”10100001” ;-d dataout <= "10000110" ; e dataout <= "10001110” ; -f dataout <= nl 1000000" ;-0 end case;elsif(seg_te
55、mp="111011") then-"1011") then-. 11011.) thencase tmp(11downto 8) istemp_h(3 downto 0)iswhen"0000n =dataout <= "11000000”;-owhen”0001" =dataout <= "11111001";-1whenn0010n => dataout <= u10100100h;-2when”0011” =dataout <= "10110000”;-3w
56、hen”0100" =dataout <= "10011001";-4when"0101” =dataout <= "10010010";-5whenn0110h => dataout <= "10000010”;-6when"olli” = dataout <= "11111000";-7whenn1000"=>dataout<="10000000"-8whennioor=>dataout<="100
57、10000"-9when"1010.=>dataout<="10001000” ;-awhenn1011"二dataout<="10000011h ;bwhen"1100"=>dataout< 二”11000110” ;-cwhen=>dataout<=loioooor ;dwhen"1110”=>dataout<=”10000110” ;ewhenniiir=>dataout<=”10001110"-fwhenothers:dataout
58、<=h11000000"0end case;end if;end if;end process;seg<=seg一temp;process(clklm)beginif rising_edge(clk 1 m) thenif(cnt2<20) thencnt2<=cnt2+1;seg_temp<=nllll 1110"-n 11 non;elsif(cnt2<40 and cnt2=20) thencnt2<=cnt2+l;seg_temp<=m 111101 "-n 1101h;-n 11101"elsif(cnt2<60 and cnt2=40) thencnt2<=cnt2+l;seg_temp<=" 11101 lnn 1011"n 1101;els
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年春季幼兒教師工作計劃(34篇)
- 企業(yè)雇傭勞務(wù)合同范例
- 家具品牌轉(zhuǎn)讓合同范例
- 酒吧家具采購合同范例
- 聘任合同范例
- 退伍軍人找臨時工合同范例
- 購買墓地合同范例
- 酒店住宿付費合同范例
- 外貿(mào)樣品合同范例
- 智能門鎖安裝合同范例
- 壓力管道水壓試驗記錄范文
- 山東電力積分商城系統(tǒng)建設(shè)方案v1.1
- 部編人教版五年級語文上冊期末測試卷含答題卡
- 內(nèi)陸漁政船建設(shè)項目可行性研究報告
- 環(huán)境材料學(xué)教學(xué)課件匯總完整版電子教案全書整套課件幻燈片(最新)
- 建設(shè)項目全過程跟蹤審計表格
- 企業(yè)員工上下班交通安全培訓(xùn)(簡詳共2份)
- T∕ZSQX 008-2020 建設(shè)工程全過程質(zhì)量行為導(dǎo)則
- 業(yè)務(wù)員手冊內(nèi)容
- pH值的測定方法
- 輸出軸的機械加工工藝規(guī)程及夾具設(shè)計
評論
0/150
提交評論