eda課程設計數(shù)字電壓表的設計_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  電子課程設計</b></p><p><b>  —數(shù)字電壓表的設計</b></p><p><b>  目錄</b></p><p>  目錄……………………………………………………1</p><p>  一、前言…………………………………………

2、……2</p><p>  二、設計任務與要求……………………………………6</p><p>  三、總體框圖……………………………………………6</p><p>  四、選擇器件……………………………………………8</p><p>  五、模塊功能…………………………………………11</p><p>  六、總體設計

3、電路圖…………………………………20</p><p><b>  七、總結</b></p><p>  1,心得……………………………………………22</p><p>  2,展望……………………………………………22</p><p>  3,致謝……………………………………………23</p><p&

4、gt;  八,參考文獻…………………………………………23</p><p><b>  一、前言</b></p><p><b>  課題研究的背景</b></p><p>  隨著信息技術獲得了突飛猛進的發(fā)展,信息技術滲透了我們生活的幾乎全部領域,改變著人類的生存狀態(tài)和思維模式。而我們的課題所涉及的電子設計自動化(EDA

5、)技術就是在這種時代背景下產(chǎn)生的,并影響巨大。FPGA是新型的可編程邏輯器件,與傳統(tǒng) ASIC 相比,具有設計開發(fā)周期短、設計制造成本低、開發(fā)工具先進 等優(yōu)點,特別適合于產(chǎn)品的樣品開發(fā)和小批量生產(chǎn)。傳統(tǒng)的數(shù)字電壓表多以單片機為控制核心,芯片集成度不高,系統(tǒng)連線復雜,難以小型化,尤其在產(chǎn)品需求發(fā)生變化時,不得不重新布版、調試,增加了投資風險和成本。而采用 FPGA 進行產(chǎn)品開發(fā),可以靈活地進行模塊配置,大大縮短了開發(fā)周期,也有利于數(shù)字電壓

6、表向小型化、集成化的方向發(fā)展。 隨著電子技術的發(fā)展,當前數(shù)字電子系統(tǒng)的設計正朝著速度快、容量大、體積小、重量輕的方向發(fā)展。推動該潮流發(fā)展的引擎就是日趨進步和完善的ASIC設計技術。目前數(shù)字系統(tǒng)的設計可以直接面向用戶需求,根據(jù)系統(tǒng)的行為和功能的要求,自上而下的完成相應的描述、綜合、優(yōu)化、仿真與驗證,直接生成器件。上述設計過程除了系統(tǒng)行為和功能描述以外,其余所有的設計幾乎都可以用計算機來自動完成,也就說做到了電子設</p>&

7、lt;p>  伴隨著集成電路(IC)技術的發(fā)展,電子設計自動化(EDA)逐漸成為重要的設計手段,己經(jīng)廣泛應用于模擬與數(shù)子電路系統(tǒng)等許多領域。目前電子技術的發(fā)展主要體現(xiàn)在EDA領域,數(shù)字系統(tǒng)的設計正朝著速度快、容量大、體積小、重量輕的方向發(fā)展。電子設計自動化是近幾年迅速發(fā)展起來的將計算機軟件、硬件、微電子技術交叉運用的現(xiàn)代電子設計學科。其中EDA設計語言中的VHDL語言是一種快速的電路設計工具,功能涵蓋了電路描述、電路合成、電路仿真

8、等三大電路設計工作。本電壓表的電路設計正是用VHDL語言完成的。此次設計主要應用的軟件是美國ALTERA公司自行設計的Quartus II。</p><p>  FPGA設計具有以下優(yōu)點:</p><p>  (1)硬件設計軟件化</p><p>  這是FPGA開發(fā)的最大優(yōu)勢。傳統(tǒng)硬件電路設計先要進行功能設計,然后進行電路板級設計并做稱電路板后進行調試,如果電路中

9、有什么錯誤,整個電路板都將作廢,這是很不經(jīng)濟的。FPGA的開發(fā)在功能層面上可以完全脫離硬件而在EDA軟件上做軟仿真。當功能確定無誤后可以進行硬件電路板的設計。最后將設計好的,由EDA軟件生成的燒寫文件下載到配置設備中去,進行在線調試,如果這時的結果與要求不一致,可以立即更改設計軟件,并再次燒寫到配置芯片中而不必改動外接硬件電路。</p><p>  (2)高度集成化,高工作頻率</p><p&

10、gt;  一般的FPGA內部都集成有上百萬的邏輯門,可以在其內部規(guī)劃出多個與傳統(tǒng)小規(guī)模集成器件功能相當?shù)哪K。這樣將多個傳統(tǒng)器件集成在同一芯片內部的方法不但可以改進電路板的規(guī)模,還可以減少PCB布線的工作。由于各個模塊都是集成在FPGA芯片內部,這就很大程度地解決了信號的干擾問題,使得FPGA的工作頻率可以大幅度的提高。另外,一般的FPGA內部都有PLL倍頻的時鐘,這進一步解決了電磁干擾和電磁兼容問題。</p><p

11、><b>  (3)支持多種接口</b></p><p>  FPGA芯片可支持多種標準的接口電平,可通過EDA開發(fā)工具來選定采用什么樣的接口標準,包括常用的TTL和差分輸入等。這便于后端各種不同接口電路的匹配。</p><p><b>  FPGA設計流程</b></p><p>  可編程邏輯器件的設計是利用ED

12、A開發(fā)軟件和編程土具對器件開發(fā)的過程。它包括設計準備、設計輸入、功能仿真、設計處理、時序仿真和器件編程及測試等七個步驟。</p><p><b>  1.設計準備</b></p><p>  在系統(tǒng)設計之前,首先要進行方案論證、系統(tǒng)設計和器件選擇等準備工作。</p><p>  一般采用自上而下的設計方法,也可采用傳統(tǒng)的自下而上的設計方法。&l

13、t;/p><p><b>  2.設計輸入</b></p><p>  設計輸入將所設計的系統(tǒng)或電路以開發(fā)軟件要求的某種形式表示出來,并送入計算機的過程稱為設計輸入。設計輸入通常有以下集中形式:</p><p><b>  1)原理圖輸入方式</b></p><p>  2)硬件描述語言輸入方式<

14、/p><p><b>  3)波形輸入方式</b></p><p><b>  3.功能仿真</b></p><p>  功能仿真也叫做前仿真。用戶所設計的電路必須在編譯之前進行邏輯功能驗證,此時的仿真沒有延時信息,對于初步的功能檢測非常方便。仿真中如發(fā)現(xiàn)錯誤,則返回設計輸入中修改邏輯設計。</p><p&

15、gt;<b>  4.設計處理</b></p><p>  設計處理是器件設計中的核心環(huán)節(jié)。在設計處理過程中,編譯軟件將對設計輸入文件進行邏輯化簡、綜合優(yōu)化和適配,最后產(chǎn)生編程用的編程文件。主要有: 1) 語法檢查和設計規(guī)則檢查</p><p><b>  2)邏輯優(yōu)化和綜合</b></p><p><b

16、>  3)適配和分割</b></p><p><b>  4)布局和布線</b></p><p><b>  5.時序仿真</b></p><p>  時序仿真又稱后仿真或延時仿真。由于不同器件的內部延時不一樣,不同的布局布線方案也給延時造成不同的影響,因此在設計處理以后,對系統(tǒng)和各模塊進行時序仿真,分析

17、其時序關系,估計設計的性能,以及檢查和消除竟爭冒險等是非常有必要的。</p><p><b>  6.器件編程測試</b></p><p>  時序仿真完成后,軟件就可產(chǎn)生供器件編程使用的數(shù)據(jù)文件。</p><p><b>  VHDL語言描述</b></p><p>  硬件描述語言(hardwa

18、re description language,HDL)是電子系統(tǒng)硬件行為描述,結構描述,數(shù)據(jù)流描述的語言.目前,利用硬件描述語言可以進行數(shù)字電子系統(tǒng)的設計.隨著研究的深入,利用硬件描述語言進行模擬電子系統(tǒng)設計或混合電</p><p>  子系統(tǒng)設計也正在探索中。</p><p>  國外硬件描述語言種類很多,有的從Pascal發(fā)展而來,也有一些從C語言發(fā)展而來.有些HDL成為IEEE標準

19、,但大部分是企業(yè)標準.VHDL來源于美國軍方,其他的硬件描述語言則多來源于民間公司.可謂百家爭鳴,百花齊放.這些不同的語言傳播到國內,同樣也引起了不同的影響.在我國比較有影響的有兩種硬件描述語言:VHDL語言和Verilog HDL語言.這兩種語言已成為IEEE標準語言。</p><p>  VHDL語言的設計流程</p><p>  采用VHDL語言設計硬件電路系統(tǒng)的設計流程一般可以分為

20、以下幾個步驟。①硬件電路系統(tǒng)設計要求的定義。②編寫描述硬件電路系統(tǒng)功能的VHDL語言程序。③VHDL語言程序的模擬。④VHDL語言的綜合、優(yōu)化和布局布線。⑤布局布線后的設計模擬。⑥器件的編程。設計人員在從事硬件電路系統(tǒng)的合計過程中,編寫VHDL語言程序之前必須對硬件電路系統(tǒng)的設計目的和設計要求有一個非常明確的認識才行。</p><p>  Quartus II開發(fā)平臺簡介 </p><p&g

21、t;  Quartus II是Altera提供的FPGA/CPLD開發(fā)集成環(huán)境,Altera是世界最大可編程邏輯器件供應商之一。Quartus II在21世紀初推出,是Altera前一代FPGA/CPLD集成開發(fā)環(huán)境MAX+plus II的更新?lián)Q代產(chǎn)品,其界面友好,使用便捷。在Quartus II上可以完成設計輸入、HDL綜合、布線布局(適配)、仿真和下載和硬件測試等流程,它提供了一種與結構無關的設計環(huán)境,使設計者能方便地進行設計輸入、

22、快速處理和器件編程。</p><p>  本次所設計的電壓表的測量范圍是0~5V,精度為0.01V。此電壓表的設計特點為:通過軟件編程下載到硬件實現(xiàn),設計周期短,開發(fā)效率高。</p><p>  關鍵字:電子設計自動化(EDA);FPGA;VHDL;A/D;數(shù)字電壓表。</p><p><b>  二、設計任務與要求</b></p>

23、<p>  要求利用FPGA控制模塊數(shù)轉換器對外部輸入的模擬信號進行采樣,獲取當前電壓值,并在數(shù)碼管上顯示。</p><p>  傳統(tǒng)的數(shù)字電壓表設計通常以大規(guī)模ASIC(專用集成電路)為核心器件,輔以少量中規(guī)模集成電路及顯示器件構成。ASIC完成從模擬量的輸入到數(shù)字量的輸出,是數(shù)字電壓表的心臟,這種電壓表的設計簡單、精確度高,但是這種設計方法由于采用了ASIC器件使得的它欠缺靈活性,其系統(tǒng)功能固定

24、,難以更新擴展,。后來發(fā)展起來的微處理器(單片機)控制通用A/D轉換器件的數(shù)字電壓表的設計的靈活性有所提高,系統(tǒng)功能的擴展性變得簡單,但是由于微處理機的引腳數(shù)量有限,其控制轉換速度和靈活性還是不能滿足日益發(fā)展的電子工業(yè)的需求。而應以EDA技術及FPGA,其集成度高、速度快、性能十分可靠、用戶可自由編程且編程語言通俗易懂、系統(tǒng)工程擴展非常方便。采用FPGA芯片控制通用A/D轉換器可是速度、靈活性大大優(yōu)于微處理器和通用A/D轉換器構成的數(shù)字

25、電壓表。</p><p>  a,能夠實現(xiàn)一個通道的采樣控制;</p><p>  b,產(chǎn)生ADC0809工作所需的各種控制信號;</p><p>  c,計算轉換后的數(shù)字電壓信號,并以BCD碼方式表示。</p><p><b>  總體框圖</b></p><p><b>  方案一:

26、</b></p><p>  本利用ADC0809作為電壓采樣端口,F(xiàn)PGA作為系統(tǒng)的核心器件,用LED進行數(shù)碼顯示,把讀取的8位二進制數(shù)據(jù)轉換成便利于輸出3位十進制BCD碼送給數(shù)碼管。</p><p>  采用FPGA芯片作為系統(tǒng)的核心器件,負責ADC0809的A/D轉換的啟動、地址鎖存、輸入通道的選擇、數(shù)據(jù)的讀取。同時,把讀取的8位二進制數(shù)據(jù)轉換成便于輸出3位十進制的BCD

27、碼送給數(shù)碼管,以顯示當前測量電壓值。這些工作由ADC0809轉換控制模塊、數(shù)據(jù)轉換模塊、譯碼模塊完成。</p><p><b>  圖1</b></p><p><b>  圖2</b></p><p><b>  方案二:</b></p><p>  基于VHDL語言的系統(tǒng)設

28、計是采用自頂向下的設計方法,將系統(tǒng)劃分為多個功能模塊,然后再逐個實現(xiàn)各個模塊的功能,最終把他們組合在一起,形成一個大的系統(tǒng)。</p><p>  本系統(tǒng)共分為6個模塊,分別為時鐘分頻(div_f)、數(shù)據(jù)采集控制(cs_control)、數(shù)據(jù)串轉并(chuan2bing)、顯示數(shù)值計算(data_calculate)、數(shù)碼管掃描(led_select)、顯示譯碼(led_translate)。</p>

29、<p>  在設計中,主要采用分模塊的方式,先實現(xiàn)各個模塊,然后組成整個系統(tǒng)。主要分為如下幾個模塊:時鐘分頻(div_f)、數(shù)據(jù)采集控制(cs_control)、數(shù)據(jù)串轉并(chuan2bing)、顯示數(shù)值計算(data_calculate)、數(shù)碼管掃描(led_select)、顯示譯碼(led_translate)。其中時鐘分頻主要用計數(shù)器實現(xiàn),采樣數(shù)據(jù)暫存于一寄存器。利用TLC549就可以采集外部模擬電壓的大小并轉換成數(shù)

30、字信號,通過串行輸入到控制器,經(jīng)過控制器對數(shù)據(jù)處理如計算成實際電壓、保留三位小數(shù),再經(jīng)過控制器設計的數(shù)碼管控制模塊控制四個數(shù)碼管顯示處理過后的數(shù)據(jù),就實現(xiàn)了將外部電壓值顯示在數(shù)碼管的功能,這樣就實現(xiàn)了數(shù)字電壓表的顯示。</p><p>  這里我們采用方案一。</p><p><b>  四、選擇器件</b></p><p>  (1)A/D轉

31、換器ADC0809控制電路</p><p><b>  編程說明</b></p><p>  利用ADC0809作為電壓采樣端口,F(xiàn)PGA作為系統(tǒng)的核心器件,用LED進行數(shù)碼顯示,把讀取的8位二進制數(shù)據(jù)轉換成便于輸出3位十進制BCD碼送給數(shù)碼管。</p><p>  由FPGA設計的ASIC芯片:</p><p>  一

32、方面產(chǎn)生ADC0809的控制信號,控制ADC0809實現(xiàn)0~5v的模擬電壓到8位數(shù)字量DB0~DB7的變換;</p><p>  另一方面將讀入的數(shù)字量轉化成電壓工程值,并轉換為3位BCD碼的七段數(shù)字顯示字符碼送到LED數(shù)碼管進行顯示。</p><p>  FPGA構成的ASIC芯片中包括三部分電路:</p><p>  用有限狀態(tài)機設計的A/D轉換控制電路;<

33、;/p><p>  將8位數(shù)字量DB0~DB7轉換為3位BCD碼的電壓值的轉換電路;</p><p>  3位LED顯示器的譯碼顯示電路。</p><p>  所用芯片ADC0809的技術資料:</p><p>  工作電壓:+5v,即VCC=+5v。采用逐次逼近的方法實現(xiàn)A/D轉換。</p><p>  2, 模擬輸入電

34、壓范圍:0~+5v。</p><p>  3, 分辨率:8位。</p><p>  轉換時間:100us。</p><p>  轉換誤差:±1LSB。</p><p>  參考電壓:2.5v。</p><p>  圖3,ADC0809控制器的狀態(tài)轉換圖</p><p><b&g

35、t;  圖4</b></p><p>  外部特性(引腳功能)   ADC0809芯片有28條引腳,采用雙列直插式封裝,如圖13.23所示。下面說明各引腳功能。 IN0~IN7:8路模擬量輸入端。2-1~2-8:8位數(shù)字量輸出端。ADDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路ALE:地址鎖存允許信號,輸入,高電平有效。 START: A/D轉換啟動脈沖輸入端,輸

36、入一個正脈沖(至少100ns寬)使其啟動(脈沖上升沿使0809復位,下降沿啟動A/D轉換)。 EOC: A/D轉換結束信號,輸出,當A/D轉換結束時,此端輸出一個高電平(轉換期間一直為低電平)。 OE:數(shù)據(jù)輸出允許信號,輸入,高電平有效。當A/D轉換結束時,此端輸入一個高電平,才能打開輸出三態(tài)門,輸出數(shù)字量。CLK:時鐘脈沖輸入端。要求時鐘頻率不高于640KHZ。 REF(+)、REF(-):基準電壓。 Vcc:電源,單一+5

37、V。 GND:地。</p><p>  ADC0809芯片的控制方法及轉換過程:</p><p>  控制ADC0809動作的信號有:ALE,START,OE,EOC。</p><p>  ADC0809的動作大致分為5個步驟區(qū)間:S0,S1,S2,S3,S4。每個步驟區(qū)間的動作方式如下:</p><p>  步驟S0:對ADC0809進行

38、復位操作;</p><p>  步驟S1:由FPGA發(fā)出信號要求ADC0809進行A/D轉換;</p><p>  步驟S2:轉換后,轉換完畢后的EOC將高電位降到低電位,而轉換時間>100us;</p><p>  步驟S3:轉換結束,有FPGA發(fā)出讀命令;</p><p>  步驟S4:有FPGA讀取DB0~DB7上的數(shù)字轉換資料,

39、并鎖存數(shù)據(jù)。</p><p>  (2)將采樣數(shù)字量轉換成3位BCD碼</p><p><b>  編程說明</b></p><p>  8位數(shù)字量BD0~BD7如何變成3位BCD碼?用FPGA實現(xiàn)乘除法是很耗資源的,因而,下面采用查表方法求取BD0~BD7與模擬輸入電壓0~5v的對應關系。</p><p>  編一個

40、查表程序,對上述電壓進行BCD編碼,然后根據(jù)對應的4位BCD碼相加的結果決定是否進位,從而得到待處理數(shù)據(jù)的BCD碼。例如:從AD0809上取得的數(shù)據(jù)位“11011110”,“1101”對應的電壓值位4.16v,其對應的BCD編碼為“010000010110”,“1110”對應的電壓值為0.28v,其對應的BCD編碼為“000000101000”。低4位相加為“1110”,大于9,加6將其調整為BCD碼,其值為0100,并且向前有一進位。

41、四位相加的結果為0011,由于低位有進位,因此最終結果為0100,。高四位的結果為0100.三位合計值為4.44v,與4.16+0.28的結果一樣。</p><p>  表中將8位數(shù)字量分為高4位HB和低4位LB,這樣每個4位碼的編程都是從0000~1111的16組碼,由于5V被8位二進制碼最大值除得到的結果是0.02v,即數(shù)字量每增大1對應模擬電壓增大0.02v。</p><p>  表

42、中ADC0809采樣的參考電壓值是2.56v。</p><p><b>  圖5</b></p><p>  2, 從表中得到的模擬電壓值必須用BCD碼表示才能便于用LED數(shù)碼管顯示。</p><p>  例如,ADC0809的DB0~DB7是89H(10001001B),高4位HB是1000,低4位LB是1001,表中查詢到高四位1000對應

43、的2.56v,寫成BCD碼是0010,0101,0110;低四位1001對應的是0.18v,寫成BCD碼是0000,0001,1000.其和是2.74v,求的BCD碼的運算如下:</p><p>  HB 0010 0101 0110</p><p>  LB 0000 0001 1000</p><p>  +進位

44、 1 0110</p><p>  結果 0010 0111 0100</p><p> ?。?)譯碼,顯示電路</p><p><b>  編程說明</b></p><p>  譯碼、顯示電路可以采用動態(tài)掃描顯示和靜態(tài)顯示兩種方法。這里采用動態(tài)顯示。</p

45、><p>  動態(tài)顯示的字位更新采用一個計數(shù)器頻率約為125Hz的信號輪流接通各位數(shù)碼管的位線,并對顯示字符進行掃描,應保證顯示不閃爍。</p><p>  (4)EP1C12Q240C8</p><p>  FPGA EP1C12Q240C8開發(fā)板是基于FPGA的硬件描述語言EDA和軟內核嵌入式系統(tǒng)的SOPC開發(fā)平臺。系統(tǒng)采用多層PCB板設計,完善的電源和時鐘設計,性

46、能穩(wěn)定可靠、結構緊湊美觀。系統(tǒng)采用主流FPGA構建平臺,片內資源豐富,板載器件多、周邊接口多、可擴展性強。優(yōu)化設計使系統(tǒng)調試方便,配置容易。配備豐富的例程有利于FPGA和SOPC的學習、快速入門與提高。FPGA/SOPC開發(fā)平臺是電子、信息類專業(yè)學生學習FPGA和SOPC的理想良師益友,是各大專院校教學科研的良好工具,也可用于科研機構研發(fā)特色新產(chǎn)品。</p><p><b>  五、功能模塊</b

47、></p><p>  1,ADC0809(ad)</p><p>  功能:利用ADC0809作為電壓采樣端口,進行A/D轉換。</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic

48、_unsigned.all;</p><p>  entity ad is</p><p>  port(clk:in std_logic;</p><p>  eoc:in std_logic;</p><p>  datain:in std_logic_vector(7 downto 0);</p><p>  d

49、ataout:out std_logic_vector(7 downto 0); </p><p>  oe:out std_logic;</p><p>  ale:out std_logic;</p><p>  start:out std_logic;</p><p>  add:out std_logic_vector(2 downt

50、o 0));</p><p><b>  end ad;</b></p><p>  architecture one of ad is</p><p>  type states is(st0,st1,st2,st3,st4);</p><p>  signal current_state,next_state:sta

51、tes:=st0;</p><p>  signal temp:std_logic_vector(7 downto 0);</p><p>  signal lock:std_logic;</p><p><b>  begin</b></p><p>  add<="001";</p&g

52、t;<p>  dataout<=temp;</p><p>  process(current_state,eoc)</p><p><b>  begin</b></p><p>  case current_state is</p><p>  when st0=>ale<='

53、;0';start<='0';oe<='0';lock<='0';</p><p>  next_state<=st1;</p><p>  when st1=>ale<='1';start<='1';oe<='0';lock<=&#

54、39;0';</p><p>  next_state<=st2;</p><p>  when st2=>ale<='0';start<='0';oe<='0';lock<='0';</p><p>  if (eoc='1')then ne

55、xt_state<=st3;</p><p>  else next_state<=st2;</p><p><b>  end if;</b></p><p>  when st3=>ale<='0';start<='0';oe<='1';lock<=&

56、#39;1';</p><p>  next_state<=st4;</p><p>  when st4=>ale<='0';start<='0';oe<='1';lock<='1';</p><p>  next_state<=st0;</p&

57、gt;<p><b>  end case;</b></p><p>  end process;</p><p>  process(clk)</p><p><b>  begin</b></p><p>  if(clk 'event and clk='1'

58、;) then current_state<=next_state;</p><p><b>  end if;</b></p><p>  end process;</p><p>  process(lock)</p><p><b>  begin</b></p><

59、p>  if lock='1' and lock 'event then temp<=datain;</p><p><b>  end if;</b></p><p>  end process;</p><p>  end architecture one;</p><p><

60、;b>  其生成項目符號:</b></p><p><b>  圖6</b></p><p>  該模塊時序仿真圖如下:</p><p><b>  圖7</b></p><p><b>  如圖:</b></p><p>  Data

61、in、EOC、CLK:輸入端</p><p>  Dataut、OE、ALE、START、ADD:輸出端</p><p>  當輸入時鐘信號時,八位數(shù)字量在EOC有高電位變?yōu)榈碗娢粫r,標志著A/D轉換結束。</p><p>  Dataprocess</p><p>  功能:將采樣數(shù)字量轉換成3位BCD碼。</p><p

62、>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity dataprocess is</p><p>  port(b_datain:in std_logic_v

63、ector(7 downto 0);</p><p>  b_dataout:out std_logic_vector(11 downto 0));</p><p>  end dataprocess;</p><p>  architecture one of dataprocess is</p><p>  signal middata:

64、std_logic_vector(7 downto 0);</p><p>  signal vdata:std_logic_vector(11 downto 0);</p><p>  signal hdata:std_logic_vector(11 downto 0);</p><p>  signal ldata:std_logic_vector(11 dow

65、nto 0);</p><p>  signal c0:std_logic;</p><p>  signal c1:std_logic;</p><p>  signal c2:std_logic;</p><p><b>  begin</b></p><p>  middata<=b_

66、datain;</p><p>  hdata<="010010000000"when middata(7 downto 4)="1111"else</p><p>  "010001001000"when middata(7 downto 4)="1110"else</p><p&g

67、t;  "010000010110"when middata(7 downto 4)="1101"else</p><p>  "001110000100"when middata(7 downto 4)="1100"else</p><p>  "001101010010"when mid

68、data(7 downto 4)="1011"else</p><p>  "001100100000"when middata(7 downto 4)="1010"else</p><p>  "001010001000"when middata(7 downto 4)="1001"els

69、e</p><p>  "001001010110"when middata(7 downto 4)="1000"else</p><p>  "001000100100"when middata(7 downto 4)="0111"else</p><p>  "000110

70、010010"when middata(7 downto 4)="0110"else</p><p>  "000101100000"when middata(7 downto 4)="0101"else</p><p>  "000100101000"when middata(7 downto 4)

71、="0100"else</p><p>  "000010010110"when middata(7 downto 4)="0011"else</p><p>  "000001100100"when middata(7 downto 4)="0010"else</p><

72、;p>  "000000110010"when middata(7 downto 4)="0001"else</p><p>  "000000000000";</p><p>  ldata<="000000110000"when middata(3 downto 0)="1111&qu

73、ot;else</p><p>  "000000101000"when middata(3 downto 0)="1110"else</p><p>  "000000100100"when middata(3 downto 0)="1101"else</p><p>  "

74、000000100100"when middata(3 downto 0)="1100"else</p><p>  "000000100010"when middata(3 downto 0)="1011"else</p><p>  "000000100000"when middata(3 dow

75、nto 0)="1010"else</p><p>  "000000011000"when middata(3 downto 0)="1001"else</p><p>  "000000010110"when middata(3 downto 0)="1000"else</p>

76、;<p>  "000000010100"when middata(3 downto 0)="0111"else</p><p>  "000000010010"when middata(3 downto 0)="0110"else</p><p>  "000000010000&quo

77、t;when middata(3 downto 0)="0101"else</p><p>  "000000001000"when middata(3 downto 0)="0100"else</p><p>  "000000000110"when middata(3 downto 0)="001

78、1"else</p><p>  "000000000100"when middata(3 downto 0)="0010"else</p><p>  "000000000010"when middata(3 downto 0)="0001"else</p><p>  &q

79、uot;000000000000";</p><p>  c0<='1' when hdata(3 downto 0)+ldata(3 downto 0)>"01001" else '0';</p><p>  c1<='1' when hdata(7 downto 4)+ldata(7 dow

80、nto 4)>"01001" else '0';</p><p>  c2<='1' when hdata(11 downto 8)+ldata(11 downto 8)>"01001" else '0';</p><p>  vdata(3 downto 0)<=hdata(3

81、 downto 0)+ldata(3 downto 0)+"0110" when c0='1' else</p><p>  hdata(3 downto 0)+ldata(3 downto 0);</p><p>  vdata(7 downto 4)<=hdata(7 downto 4)+ldata(7 downto 4)+"0111

82、" when c1='1' and c0='1' else</p><p>  hdata(7 downto 4)+ldata(7 downto 4)+"0110" when c1='1' and c0='0'</p><p>  else hdata(7 downto 4)+ldata(7 do

83、wnto 4)+"0001" when c1='0' and c0='1'</p><p>  else hdata(7 downto 4)+ldata(7 downto 4);</p><p>  vdata(11 downto 8)<=hdata(11 downto 8)+ldata(11 downto 8)+"011

84、1" when c2='1' and c1='1' else</p><p>  hdata(11 downto 8)+ldata(11 downto 8)+"0110" when c2='1' and c1='0'</p><p>  else hdata(11 downto 8)+ldata(

85、11 downto 8)+"0001" when c2='0' and c1='1'</p><p>  else hdata(11 downto 8)+ldata(11 downto 8);</p><p>  b_dataout<=vdata;</p><p>  end architecture one

86、;</p><p><b>  其生成項目符號:</b></p><p><b>  圖8</b></p><p>  該模塊時序仿真圖如下:</p><p><b>  圖9</b></p><p><b>  如圖:</b>&l

87、t;/p><p>  B_Datain:輸入, B_Dataout:輸出。</p><p>  將8位數(shù)字量轉化為3位BCD碼</p><p>  圖中Datain“11011110”,“1101”對應的電壓值位4.16v,其對應的BCD編碼為“010000010110”,“1110”對應的電壓值為0.28v,其對應的BCD編碼為“000000101000”。低4位相

88、加為“1110”,大于9,加6將其調整為BCD碼,其值為0100,并且向前有一進位。四位相加的結果為0011,由于低位有進位,因此最終結果為0100,。高四位的結果為0100.三位合計值為4.44v,與4.16+0.28的結果一樣。</p><p>  Leddisplay</p><p>  功能:用LED進行數(shù)碼顯示。</p><p>  library iee

89、e;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity leddisplay is</p><p

90、>  port(bcdcode:in std_logic_vector(11 downto 0);</p><p>  ck:in std_logic;</p><p>  led_dp:out std_logic;</p><p>  seg:out std_logic_vector(6 downto 0);</p><p>  se

91、l:out std_logic_vector(1 downto 0));</p><p>  end leddisplay;</p><p>  architecture one of leddisplay is</p><p>  signal num:std_logic_vector(3 downto 0);</p><p>  sign

92、al count:std_logic_vector(1 downto 0);</p><p><b>  begin</b></p><p>  process(ck)</p><p><b>  begin</b></p><p>  if ck 'event and ck='1&

93、#39; then count<=count+1;</p><p><b>  end if;</b></p><p>  end process;</p><p>  sel<=count;</p><p>  num<=bcdcode(3 downto 0) when count=0 else<

94、;/p><p>  bcdcode(7 downto 4) when count=1 else</p><p>  bcdcode(11 downto 8) when count=2 else</p><p><b>  "0000";</b></p><p>  led_dp<='1

95、9; when count=2 else '0';</p><p>  seg<="0111111" when num =0 else</p><p>  "0000110" when num =1 else</p><p>  "1011011" when num =2 else&l

96、t;/p><p>  "1001111" when num =3 else</p><p>  "1100110" when num =4 else</p><p>  "1101101" when num =5 else</p><p>  "1111101" wh

97、en num =6 else</p><p>  "0000111" when num =7 else</p><p>  "1111111" when num =8 else</p><p>  "1101111" when num =9 else</p><p>  "

98、1110111" when num =10 else</p><p>  "1111100" when num =11 else</p><p>  "0111001" when num =12 else</p><p>  "1011110" when num =13 else</p>

99、;<p>  "1111001" when num =14 else</p><p>  "1110001" when num =15 else</p><p>  "0000000";</p><p><b>  end one;</b></p><

100、p><b>  其生成項目符號為:</b></p><p><b>  圖10</b></p><p>  該模塊時序仿真圖如下:</p><p><b>  圖11</b></p><p><b>  如圖:</b></p><

101、p>  Bcdcode、CK:輸入</p><p>  Led_dp、seg、sel:輸出</p><p>  輸出隨輸入發(fā)生相應的變化</p><p>  4,Decoder2_to_4_t</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.al

102、l;</p><p>  entity decoder2_to_4_t is</p><p>  port(sel:in std_logic_vector(1 downto 0);</p><p>  sel00,sel01,sel10,sel11:out std_logic);</p><p>  end entity decoder2_t

103、o_4_t;</p><p>  architecture dec of decoder2_to_4_t is</p><p><b>  begin</b></p><p>  process(sel)</p><p><b>  begin</b></p><p>  c

104、ase sel is</p><p>  when"00"=>sel00<='1';sel01<='0';sel10<='0';sel11<='0';</p><p>  when"01"=>sel00<='0';sel01<

105、;='1';sel10<='0';sel11<='0';</p><p>  when"10"=>sel00<='0';sel01<='0';sel10<='1';sel11<='0';</p><p>  when&

106、quot;11"=>sel00<='0';sel01<='0';sel10<='0';sel11<='1';</p><p>  when others=>null;</p><p><b>  end case;</b></p><p&g

107、t;  end process;</p><p>  end architecture dec;</p><p><b>  其生成項目符號:</b></p><p><b>  圖12</b></p><p>  該模塊時序仿真圖如下:</p><p><b> 

108、 圖13</b></p><p><b>  Sel:輸入</b></p><p>  Sel00,Sel01,Sel10Sel11:輸出</p><p>  如圖所示,輸出Sel00,Sel01,Sel10Sel11隨輸入Sel發(fā)生相應的變化。</p><p><b>  5,Div</b&

109、gt;</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity div is</p><p>  PORT(clk : INst

110、d_logic;</p><p>  clk_div: OUT std_logic);</p><p><b>  END div;</b></p><p>  ARCHITECTURE a OF div IS</p><p>  SIGNAL fre_N : integer range 0 to 100000;&l

111、t;/p><p>  SIGNAL clk_tmp: std_logic;</p><p><b>  BEGIN</b></p><p>  clk_div <= clk_tmp;</p><p>  process(clk)</p><p><b>  begin</b>

112、;</p><p>  if rising_edge(clk) then</p><p>  if fre_N >= 99999 then</p><p>  fre_N <= 0;</p><p>  clk_tmp <= not clk_tmp;</p><p><b>  else&l

113、t;/b></p><p>  fre_N <= fre_N + 1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  EN

114、D a;</b></p><p><b>  其生成項目為:</b></p><p><b>  圖14</b></p><p>  該模塊時序仿真圖如下:</p><p><b>  圖15</b></p><p><b>  C

115、LK:輸入</b></p><p>  CLK_DIV:輸出</p><p>  將CLK進行時鐘分頻如圖所示。</p><p><b>  6,Div1</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all

116、;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity div1 is</p><p>  PORT(clk : INstd_logic;</p><p>  clk_div: OUT std_logic);</p><p><b> 

117、 END div1;</b></p><p>  ARCHITECTURE a OF div1 IS</p><p>  SIGNAL fre_N : integer range 0 to 20000000;</p><p>  SIGNAL clk_tmp: std_logic;</p><p><b>  BEGIN

118、</b></p><p>  clk_div <= clk_tmp;</p><p>  process(clk)</p><p><b>  begin</b></p><p>  if rising_edge(clk) then</p><p>  if fre_N >

119、= 19999999 then</p><p>  fre_N <= 0;</p><p>  clk_tmp <= not clk_tmp;</p><p><b>  else</b></p><p>  fre_N <= fre_N + 1;</p><p><b&g

120、t;  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  END a;</b></p><p><b>  其生成項目為:</b></p><p&

121、gt;<b>  圖16</b></p><p>  該模塊時序仿真圖如下:</p><p><b>  圖17</b></p><p><b>  CLK:輸入</b></p><p>  CLK_DIV:輸出</p><p>  將輸入信號CLK進行

122、時鐘分頻如圖所示。</p><p><b>  總體設計電路圖</b></p><p><b>  管腳分配: </b></p><p><b>  圖18</b></p><p><b>  硬件連接及測試:</b></p><p&g

123、t;  創(chuàng)建完模塊后,再新建一個頂層.bdf文件,在新的窗口單擊按鈕 ,可以看到library庫里多了六個元件(如電路圖所示):</p><p><b>  圖19</b></p><p><b>  圖20</b></p><p>  如圖所示,圖中共有6個模塊,分別是:</p><p>  AD

124、,Dataprocess,Leddisplay,Decoder_2_to_4_t,Div,Div1</p><p>  再按以下步驟進行硬件測試</p><p><b>  A,VGA接口連接</b></p><p>  B,用連線將電路板上接口正確連接</p><p>  C,在選對設備和文件之后,將實驗箱和顯示器電源

125、打開,執(zhí)行下載命令,把程序下載到FPGA器件中。扭動ADC0809模塊的變阻器,就可以在對應數(shù)碼管上看 到顯示值的變化,變化比較連續(xù)、平滑,總體效果比較不錯,設計成功。</p><p><b>  七、總結</b></p><p><b>  心得:</b></p><p>  經(jīng)過兩周的課程設計,在老師的輔導下,查閱了相

126、關資料,寫出了與課題有關的文獻綜述,翻譯了英文資料。對課題內容有了更深一步的了解。在VHDL硬件描述語言下,設計了該數(shù)字式電壓表。并進行了硬件設計,以及在Quartus編譯平臺上仿真得出結果,驗證了系統(tǒng)的可行性。由測試結果,可看出該儀表測量范圍較寬,測量精度較高,能夠滿足物理實驗中電量的測量要求。經(jīng)實際使用證明,系統(tǒng)運行穩(wěn)定、操作方便。 </p><p>  通過對課題的研究,加深了我對數(shù)字電壓表一般設計原理的理

127、解,同時也讓我初步了解了從算法到系統(tǒng)設計的整個過程。在課題研究的過程中,我總結出在進行系統(tǒng)設計之前應該仔細分析考慮可能遇到的各種問題的細節(jié)以減少出錯的機率,更要注重在實踐中總結經(jīng)驗。 </p><p><b>  展望:</b></p><p>  本系統(tǒng)是用FPGA實現(xiàn)的數(shù)字電壓表。隨著EDA技術的廣泛應用,F(xiàn)PGA已成為現(xiàn)代數(shù)字系統(tǒng)設計的主要手段,在QUARTU

128、S II環(huán)境下采用VHDL語言實現(xiàn)了數(shù)據(jù)采集、轉換及顯示。 </p><p>  數(shù)字電壓表是大學物理教學和實驗中的重要儀表,其數(shù)字化是指將連續(xù)的模擬電壓量轉換成不連續(xù)、離散的數(shù)字量并加以顯示。傳統(tǒng)的實驗用模擬電壓表功能單一、精度低、體積大,且存在讀數(shù)時的視差,長時間連續(xù)使用易引起視覺疲勞,使用中存在諸多不便。而目前數(shù)字萬用表的內部核心多是模/數(shù)轉換器,其精度很大程度上限制了整個表的準確度,可靠性較差。本文采用性

129、能優(yōu)越的8位A/D轉換器對模擬電壓采樣,以一片高性能FPGA芯片為控制核心,分別在軟件和硬件上實現(xiàn)了諸多功能,對電壓信號的轉換結果進行準確實時的運算處理并送出顯示。 </p><p>  采用現(xiàn)場可編程門陣列即FPGA為系統(tǒng)核心,是當今電子產(chǎn)品設計的熱門發(fā)展方向。系統(tǒng)最大限度地將所有器件集成在FPGA芯片上。體積大大減小、降低了功耗、集成度高,可靠性高,較好地實現(xiàn)了電壓的精準測量。而且邏輯單元控制靈活、適用范圍極

溫馨提示

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

評論

0/150

提交評論