計算器的設(shè)計_第1頁
計算器的設(shè)計_第2頁
計算器的設(shè)計_第3頁
計算器的設(shè)計_第4頁
計算器的設(shè)計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄第一章緒論21.1 課題來源及意義21.2 國內(nèi)外發(fā)展狀況2第二章VHDL語言42.1 VHDL語言42.2 VHDL語言的特點42.3 VHDL語言設(shè)計實體的基本結(jié)構(gòu)52.4 VHDL語言的實體52.5 VHDL語言的結(jié)構(gòu)體62.6 VHDL程序設(shè)計約定7第三章基于EDA技術(shù)的計算器的設(shè)計83.1 計算器的設(shè)計思路83.2 系統(tǒng)組成框圖83.3計算部分的設(shè)計和實現(xiàn)93.3.1 加法器的設(shè)計93.3.2 減法器的設(shè)計123.3.3 乘法器的設(shè)計143.3.4 除法器的設(shè)計163.4 計算器輸入部分的設(shè)計和實現(xiàn)213.5 計算器顯示部分的設(shè)計和實現(xiàn)243.6位二進制數(shù)轉(zhuǎn)換成個位、十位、百位

2、的模塊263.7計算器的綜合設(shè)計293.7.1 整體的程序設(shè)計293.7.2 計算器的仿真波形31結(jié) 論37謝 辭38參 考 文 獻39第一章 緒論1.1 課題來源及意義 在當今以數(shù)字化和網(wǎng)絡(luò)化為特征的信息技術(shù)革命大潮中,電子技術(shù)獲得了飛速發(fā)展,現(xiàn)代電子產(chǎn)品滲透了社會的各個領(lǐng)域?,F(xiàn)代電子產(chǎn)品的性能進一步提高,功能越來越復(fù)雜,集成化智能化的復(fù)雜程度越來越高,更新?lián)Q代的節(jié)奏越來越快,開發(fā)風(fēng)險也越來越大,而且正向著功能多樣化、體積小型化、功耗最低化的趨勢發(fā)展。所有這些,都給電子系統(tǒng)設(shè)計者帶來了前所未有的壓力,面對這種壓力,唯一的出路就是熟練掌握EDA技術(shù),并獲得了其有力的支持。EDA的出現(xiàn),極大地提

3、高了電路設(shè)計的效率和可靠性,減輕了設(shè)計者的勞動強度,EDA是電子產(chǎn)品開發(fā)研制的動力和加速器,是現(xiàn)代電子設(shè)計的核心。現(xiàn)在生活中計算器的應(yīng)用基本上可以說是無處不在,小到做買賣的商人的加減乘除的簡易計算器,還有學(xué)生群體中使用能夠進行復(fù)雜運算的多功能計算器??芍^是和生活息息相關(guān)。EDA的設(shè)計觀念是按照自頂 向下的設(shè)計方法,對整個系統(tǒng)進行方案設(shè)計和功能劃分,系統(tǒng)的關(guān)鍵電路用一片或幾片專用集成 電路(ASIC)實現(xiàn),然后采用硬件描述語言(VHDL)完成系統(tǒng)行為級設(shè)計,最后通過綜合器和適配 器生成最終的目標器件。用EDA 來設(shè)計計算器,分別做加減乘除的底層文件、存儲文件、顯示文件以及輸入文件。然后對其進行整

4、合,層次分明,可以分別對底層文件進行測試,和傳統(tǒng)計算器的設(shè)計相比,在測試方面有很大的優(yōu)勢。在EDA技術(shù)蓬勃的發(fā)展下,本次畢業(yè)設(shè)計選了EDA技術(shù)關(guān)于計算器的設(shè)計,不僅僅在原來EDA基礎(chǔ)編程的情況下,進行更深一步的研究,為了以后從事EDA方面的研究,有更深層次應(yīng)用,所以通過EDA對計算器的設(shè)計,對EDA技術(shù)的語言程序、運用電路圖設(shè)計方法、以及各種不同底層程序的編輯對Quartus II軟件的運用更為自如。1.2 國內(nèi)外發(fā)展狀況回顧近30年電子設(shè)計技術(shù)的發(fā)展歷程,可將EDA技術(shù)1分為三個階段。 (1) 七十年代為CAD階段,這一階段人們開始用計算機輔助進行IC版圖編輯和PCB布局布 線,取代了手工操

5、作,產(chǎn)生了計算機輔助設(shè)計的概念。 (2)八十年代為CAE階段,與CAD相比,除了純粹的圖形繪制功能外,又增加了電路功能設(shè) 計和結(jié)構(gòu)設(shè)計,并且通過電氣連接網(wǎng)絡(luò)表將兩者結(jié)合在一起,以實現(xiàn)工程設(shè)計,這就是計算機輔助 工程的概念。CAE的主要功能是:原理圖輸入,邏輯仿真,電路分析,自動布局布線,PCB后分 析。 (3)九十年代為ESDA階段。盡管CAD/CAE技術(shù)取得了巨大的成功,但并沒有把人從繁重的 設(shè)計工作中徹底解放出來。在整個設(shè)計過程中,自動化和智能化程度還不高,各種EDA軟件界面千 差萬別,學(xué)習(xí)使用困難,并且互不兼容,直接影響到設(shè)計環(huán)節(jié)間的銜接?;谝陨喜蛔悖藗冮_始 追求貫徹整個設(shè)計過程的自

6、動化,這就是ESDA即電子系統(tǒng)設(shè)計自動化。 從目前的EDA技術(shù)來看,其發(fā)展趨勢是政府重視、使用普及、應(yīng)用文泛、工具多樣、軟件功能強大。中國EDA市場已漸趨成熟,不過大部分設(shè)計工程師面向的是PC主板和小型ASIC領(lǐng)域,僅有小部分(約11%)的設(shè)計人員工發(fā)復(fù)雜的片上系統(tǒng)器件。為了與臺灣和美國的設(shè)計工程師形成更有力的競爭,中國的設(shè)計隊伍有必要購入一些最新的EDA技術(shù)。在信息通信領(lǐng)域,要優(yōu)先發(fā)展高速寬帶信息網(wǎng)、深亞微米集成電路、新型元器件、計算機及軟件技術(shù)、第三代移動通信技術(shù)、信息管理、信息安全技術(shù),積極開拓以數(shù)字技術(shù)、網(wǎng)絡(luò)技術(shù)為基礎(chǔ)的新一代信息產(chǎn)品,發(fā)展新興產(chǎn)業(yè),培育新的經(jīng)濟增長點。要大力推進制造業(yè)

7、信息化,積極開展計算機輔助設(shè)計(CAD)、計算機輔助工程(CAE)、計算機輔助工藝(CAPP)、計算機機輔助制造(CAM)、產(chǎn)品數(shù)據(jù)管理(PDM)、制造資源計劃(MRPII)及企業(yè)資源管理(ERP)等。有條件的企業(yè)可開展“網(wǎng)絡(luò)制造”,便于合作設(shè)計、合作制造,參與國內(nèi)和國際競爭。開展“數(shù)控化”工程和“數(shù)字化”工程。自動化儀表的技術(shù)發(fā)展趨勢的測試技術(shù)、控制技術(shù)與計算機技術(shù)、通信技術(shù)進一步融合,形成測量、控制、通信與計算機(M3C)結(jié)構(gòu)。在ASIC和PLD設(shè)計方面,向超高速、高密度、低功耗、低電壓方向發(fā)展。外設(shè)技術(shù)與EDA工程相結(jié)合的市場前景看好,如組合超大屏幕的相關(guān)連接,多屏幕技術(shù)也有所發(fā)展。中國

8、自1995年以來加速開發(fā)半導(dǎo)體產(chǎn)業(yè),先后建立了幾所設(shè)計中心,推動系列設(shè)計活動以應(yīng)對亞太地區(qū)其它EDA市場的競爭。在EDA軟件開發(fā)方面,目前主要集中在美國。但各國也正在努力開發(fā)相應(yīng)的工具。日本、韓國都有ASIC設(shè)計工具,但不對外開放 。中國華大集成電路設(shè)計中心,也提供IC設(shè)計軟件,但性能不是很強。相信在不久的將來會有更多更好的設(shè)計工具有各地開花并結(jié)果。據(jù)最新統(tǒng)計顯示,中國和印度正在成為電子設(shè)計自動化領(lǐng)域發(fā)展最快的兩個市場,年復(fù)合增長率分別達到了50%和30%。EDA技術(shù)發(fā)展迅猛,完全可以用日新月異來描述。EDA技術(shù)的應(yīng)用廣泛,現(xiàn)在已涉及到各行各業(yè)。EDA水平不斷提高,設(shè)計工具趨于完美的地步。ED

9、A市場日趨成熟,但我國的研發(fā)水平沿很有限,需迎頭趕上。第二章 VHDL語言2.1VHDL語言VHDL語言全稱是“超高速集成電路硬件描述語言(Very High Speed Intergated Circuit Hardwre Description Lnguage)”,它是隨著集成電路系統(tǒng)化和高度集成化的發(fā)展而逐步發(fā)展起來的,是一種用于數(shù)字系統(tǒng)的設(shè)計和測試的硬件描述語言。對于小規(guī)模的數(shù)字集成電路,通??梢杂脗鹘y(tǒng)的設(shè)計輸入方法(如原理圖輸入)來完成,并進行模擬仿真。但純原理圖輸入方式對于大型、復(fù)雜的系統(tǒng),由于種種條件和環(huán)境的制約,其工作效率低,而且容易出錯,暴露出多種弊端。在信息技術(shù)高速發(fā)展的今

10、天,對集成電路提出了高集成度、系統(tǒng)化、微尺寸、微功耗的要求,因此,高密度可編程邏輯器件和VHDL便應(yīng)運而生。2.2 VHDL語言的特點VHDL語言作為一種標準的硬件描述語言,具有結(jié)構(gòu)嚴謹、描述能力強的特點2,支持從系統(tǒng)級到邏輯門級電路所有層次的設(shè)計,適合于復(fù)雜邏輯電路和系統(tǒng)的設(shè)計。作為一種高級硬件描述語言,VHDL語言有如下特點。(1)與其他的硬件描述語言相比,VHDL具有更強的行為描述能力。強大的行為描述能力是避開具體的器件結(jié)構(gòu)、從邏輯行為上描述和設(shè)計大規(guī)模電子系統(tǒng)的重要保證。(2)VHDL具有豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期,就能檢查系統(tǒng)的功能可行性,隨時可對系統(tǒng)進行仿真

11、模擬,使設(shè)計者對整個工程的結(jié)構(gòu)和功能的可行性做出判斷。(3)用VHDL完成一個確定的設(shè)計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動把VHDL描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表(根據(jù)不同的實現(xiàn)芯片)3。這種方式突破了門級設(shè)計的瓶頸,極大地減少了電路設(shè)計的時間和可能發(fā)生地錯誤,降低了開發(fā)成本。利用EDA工具的邏輯優(yōu)化功能,可以自動地把一個綜合后的設(shè)計變成一個更小、更高速的電路系統(tǒng)。反過來,設(shè)計者還可以容易地從綜合和優(yōu)化的電路中獲得設(shè)計信息,返回去更新修改VHDL設(shè)計描述,使之更加完善。(4)VHDL對設(shè)計的描述具有相對獨立性。設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必顧及最終設(shè)計的目標器件是什么,而進行獨立的設(shè)計。

12、正因為VHDL得硬件描述與具體的工藝技術(shù)和硬件結(jié)構(gòu)無關(guān),所以VHDL設(shè)計程序的硬件實現(xiàn)目標器件有廣闊的選擇范圍。(5)由于VHDL具有類屬描述語句和子程序調(diào)用等功能,對于完成的設(shè)計,在不改變源程序的條件下,只需改變類屬參量或函數(shù),就能輕而易舉地改變設(shè)計的規(guī)模和結(jié)構(gòu)4。(6)VHDL本身的生命周期長。因為VHDL得硬件描述與工藝無關(guān),不會因工藝變化而使描述過時。而與工藝技術(shù)有關(guān)的參數(shù)可通過VHDL提供的屬性加以描述,當生產(chǎn)工藝改變時,只需要修改相應(yīng)程序中的屬性參數(shù)即可。2.3 VHDL語言設(shè)計實體的基本結(jié)構(gòu)VHDL語言是一種強數(shù)據(jù)類型語言,它有三種數(shù)據(jù)對象,即常數(shù)、信號和變量,每一種數(shù)據(jù)對象都要

13、指定數(shù)據(jù)類型。VHDL的數(shù)據(jù)類型豐富5,既有數(shù)值數(shù)據(jù)類型和邏輯數(shù)據(jù)類型,又有位型和位向量型。既支持預(yù)定義的數(shù)據(jù)類型,又支持自定義的數(shù)據(jù)類型。這樣就給硬件描述帶來較大的自由度,使設(shè)計人員能夠方便地使用VHDL創(chuàng)建高層次的系統(tǒng)模型。VHDL語言將所設(shè)計的電路系統(tǒng)均看作一個設(shè)計實體,它可以是任意復(fù)雜的系統(tǒng),也可以是一塊電路板、一個芯片、一個電路單元甚至一個門電路。如果將一個系統(tǒng)自上而下分層,劃分模塊,則各層的設(shè)計模塊都可以作為一個設(shè)計實體。不論是簡單的數(shù)字電路,還是復(fù)雜的數(shù)字系統(tǒng),其基本構(gòu)成是一致的,它們都是由實體說明(Entity)和結(jié)構(gòu)體(Architecture)兩個最基本的部分組成。實體說明

14、部分用來描述該模塊或系統(tǒng)的接口信息,包括端口的數(shù)目、方向和類型,其作用相當于傳統(tǒng)設(shè)計方法中所使用的元件符號。結(jié)構(gòu)體部分則描述該模塊的內(nèi)部電路,對應(yīng)于原理圖、邏輯方程6和模塊的輸入/輸出特性。兩者相結(jié)合就可以組成VHDL設(shè)計文件。一個設(shè)計試題可以包括一個或多個結(jié)構(gòu)體,用于描述其邏輯結(jié)構(gòu)和邏輯功能。2.4 VHDL語言的實體實體說明語句的格式如下:ENITTY 實體名ISPORT(端口表);END ENTITY 實體名;實體說明是VHDL程序設(shè)計中最基本的組成部分,主要用來描述設(shè)計實體7的外部接口信號,定義設(shè)計單元的輸入/輸出端口,是設(shè)計實體對外的一個通信界面,為可視部分。但它并不描述設(shè)計的具體功

15、能。端口名是賦予每個外部引腳的名稱,通常用一個或幾個英文字母,或者用英文字母加數(shù)字命名。端口模式(或端口方向)用來定義外部引腳的信號方向。在端口說明中,共有五種模式,分別為IN(輸入端口)、OUT(輸出端口)、INOUT(雙向端口)、BUFFER(緩沖端口)和LINKAGE(鏈接端口)。2.5 VHDL語言的結(jié)構(gòu)體結(jié)構(gòu)體8是設(shè)計實體的核心,它具有指明了設(shè)計實體的行為、元件及內(nèi)部連接關(guān)系。如果將實體說明看成一個元件或電路的外部符號,則結(jié)構(gòu)體就是這個元件或電路的內(nèi)部原理圖。通過結(jié)構(gòu)體構(gòu)造設(shè)計實體的硬件結(jié)構(gòu)、元件之間的連接,實現(xiàn)數(shù)據(jù)傳輸和變換,完成設(shè)計實體功能的具體實施。結(jié)構(gòu)體的格式如下:ARCHI

16、TECTURE 結(jié)構(gòu)體名 OF 實體名 IS 結(jié)構(gòu)體說明語句;BEGIN 功能描述語句;END ARCHITECTURE 結(jié)構(gòu)體名;結(jié)構(gòu)體名是給予結(jié)構(gòu)體的名稱,它是該結(jié)構(gòu)體唯一的名字,位于引導(dǎo)語句和OF語句之間。OF后面緊隨實體名,表明該結(jié)構(gòu)體隸屬于哪個實體,并用IS來結(jié)束結(jié)構(gòu)體的命名。結(jié)構(gòu)體名原則上可以是任意合法的標識符,但為了便于程序的閱讀,通常都是根據(jù)該結(jié)構(gòu)體所采用的描述方式對其命名,如Behavior(行為描述)、Dataflow(數(shù)據(jù)流描述)、Structure(結(jié)構(gòu)描述)等。結(jié)構(gòu)體說明語句位于ARCHITCTURE和BEGIN之間,用于定義結(jié)構(gòu)體中所用的數(shù)據(jù)對象和子程序,并對所引用

17、的元件加以說明,即對結(jié)構(gòu)體的功能描述語句中所用到的信號(SIGNAL)、類型(TAPY)、常數(shù)(CONSTANT)、元件(COMPONENT)、函數(shù)(FUNCTION)和過程(PROCEDURE)等加以說明和定義,但不能定義變量。應(yīng)當注意,這些定義只能用于這個結(jié)構(gòu)體中,如果要將這些定義用于其他實體或結(jié)構(gòu)體,則需要將其作為程序包處理。2.6 VHDL程序設(shè)計約定為了便于程序的閱讀,此設(shè)計對VHDL程序設(shè)計特作如下約定:(1)語句結(jié)構(gòu)描述中方括號“ ”內(nèi)的內(nèi)容為可選內(nèi)容。(2)對于VHDL的編譯器和綜合器來說,程序文字的大小寫是不加區(qū)分的。本文中,VHDL中使用的關(guān)鍵詞用大寫,對于由用戶自己定義的

18、名稱等用小寫。(3)程序中的注釋使用橫線“”,橫線“”后的文字都不參加編譯和綜合。(4)為了便于程序的閱讀與調(diào)試,書寫和輸入程序時,使用層次縮進格式,同一層次的對齊,低層次的描述較高層次的描述縮進兩個字符。(5)考慮到MAX+PLUS要求源程序文件的名字與實體名必須一致,因此為了使同一個VHDL源程序文件能適應(yīng)各個EDA開發(fā)軟件上的使用要求,各個源程序文件的命名均與其實體名一致。第三章 基于EDA技術(shù)的計算器的設(shè)計3.1 計算器的設(shè)計思路將計算器分為四個部分:計算部分、存儲部分、顯示部分和輸入部分。合理設(shè)計這四部分將有利于資源的合理應(yīng)用。其中計算部分分為加減乘除法器,分別設(shè)計底層程序。顯示部分

19、為設(shè)計一個四位二進制數(shù)與七段譯碼相互轉(zhuǎn)換的程序。輸入部分為設(shè)計有0到9數(shù)字按鍵與加減乘除運算符號,以及等于號及清零鍵。3.2 系統(tǒng)組成框圖數(shù)字按鍵存儲部分顯示第一個數(shù)字顯示第二個數(shù)字運算符計算部分運算符或等號鍵運算結(jié)果顯示圖3-13.3計算部分的設(shè)計和實現(xiàn)計算部分就是運算的過程,此設(shè)計中主要包含的運算有加減乘除法。3.3.1 加法器的設(shè)計先構(gòu)思一下加法器的流程圖,如圖3-2所示。根據(jù)流程圖,可以確定一個加法器要有被加數(shù)、加數(shù)和進位位的輸入端口。故設(shè)a端口為被加數(shù),b端口為加數(shù),ci為輸入進位。此加法器還有兩個輸出端口,分別是加法運算的最終結(jié)果輸出和進位位的輸出,故設(shè)s為結(jié)果的輸出端口,co為進

20、位的輸出端口。被加數(shù)輸出進位位輸入進位位加數(shù)相加運算的最終結(jié)果輸出圖3-2 加法器的流程圖根據(jù)流程圖可以看出,當輸入被加數(shù)與加數(shù)后,兩個8位二進制數(shù)開始相加,之后,再與輸入進位位相加,這樣得到的最終結(jié)果就是加法器加法運算的最終結(jié)果。加法器9是基于EDA的計算器的設(shè)計中的基本邏輯器件,這里設(shè)計的8位二進制數(shù)的加法器,它是屬于多位加法器的范疇的。多位加法器按其進位方式的不同可以分為兩類:串行進位加法器和并行進位進位加法器。串行進位加法器是將多個一位全加級聯(lián),低位全加器的進位輸出送給相鄰高位全加器作為進位輸入,以此構(gòu)成多位加法器。這種設(shè)計思路簡單明了且占用資源少,但運算速度較慢。并行進位方式則是在各

21、位的加法環(huán)節(jié)之外,另外設(shè)有進位產(chǎn)生邏輯電路,各位的進位輸入信號同時產(chǎn)生,從而各位可以同時完成全加運算,輸出最后結(jié)果。并行進位方式具有較快的運算速度,但是相對于串行進位方式來說,卻往往占用更多的資源。尤其是當運算位數(shù)增加的時候,相同位數(shù)的并行進位和串行進位加法器的資源占用差距也越來越大。因此,常常需要設(shè)計者在運算速度和資源占用量之間做出折中平衡。實踐證明,4位二進制并行進位加法器和串行級聯(lián)加法器占用的資源幾乎相同。因此,可以用兩個4位二進制并行加法器級聯(lián)以構(gòu)成8位二進制加法器,這是一種較為合理的選擇。4位二進制并行進位加法器的源程序ADDER4B.VHD如下:LIBRARY IEEE; 庫以上這

22、部分是設(shè)計中的全加器的VHDL語言的第一部分庫。一種用來存放預(yù)先已設(shè)計好的程序包10、數(shù)據(jù)集合體、元件的倉庫。庫存放的信息供用戶進行VHDL設(shè)計時調(diào)用,以提高設(shè)計效率。USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;以上這些是此加法器所要調(diào)用的程序包,是VHDL語言的第二部分。用VHDL語言編寫的共享文件11,定義了在設(shè)計結(jié)構(gòu)體和實體說明中將要使用的常數(shù)、數(shù)據(jù)類型、子程序和設(shè)計好的電路單元等。ENTITY ADDER4B IS 4位二進制數(shù)的加法器的實體 PORT(ci:IN STD_LOGIC; 進位位的輸入端口 a:I

23、N STD_LOGIC_VECTOR(3 DOWNTO 0); 一個4位二進制數(shù)的輸入端口(被加數(shù)) b:IN STD_LOGIC_VECTOR(3 DOWNTO 0); 一個4位二進制數(shù)的輸入端口(加數(shù)) s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); 加法運算的結(jié)果輸出端口 co:OUT STD_LOGIC 進位位的輸出端口 );END ADDER4B;這部分是此加法器的VHDL語言的第三部分實體說明。定義電路單元的輸入、輸出引腳信號。程序的實體名稱可任意取名12(這里我取的是ADDER4B),但必須與VHDL程序的文件名稱相同(保存時的文件名)。實體說明以標示符E

24、NTITY開始,以END結(jié)束。ARCHITECTURE behave OF ADDER4B IS 4位二進制數(shù)的加法器的結(jié)構(gòu)體SIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0); 類似于在芯片15內(nèi)部定義的一個數(shù)據(jù)SIGNAL aa,bb:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN aa=0 & a; 拓展位數(shù),使其成為最高位 bb=0 & b; SINT=aa+bb+ci; 相加 s=SINT(3 DOWNTO 0); coci,a=a(3 DOWNTO 0),b=b(3 DOWNTO 0),s=s(3 DOWNTO 0),co=CAR

25、RY_OUT); U2:ADDER4B PORT MAP(ci=CARRY_OUT,a=a(7 DOWNTO 4),b=b(7 DOWNTO 4),s=s(7 DOWNTO 4),co=co);調(diào)用兩個4位二進制數(shù)加法的模塊。引腳分布圖如下圖3-3所示:圖3-3 8位加法器電路的引腳分布圖仿真波形圖(圖3-4):圖3-4 8位加法器的仿真波形從以上仿真波形中可以作出總結(jié)(“0”為低電平,“1”為高電平):若a為“8”,b為“9”時,a+b=“17”,這時的ci為高電平,所以在此基礎(chǔ)之上還要再加“1”,得到s=“18”,這時最終的結(jié)果。因為最高位沒有進位,所以co為“0”即為低電平。3.3.2

26、減法器的設(shè)計首先設(shè)計一個兩個4位二進制數(shù)的減法器。根據(jù)以下圖3-5的4位全減器的流程圖可以看出,此減法器共需要兩個輸入端口和一個輸出端口。減法器的設(shè)計可以引用加法器,即通過對減數(shù)的求補16,再與被減數(shù)相加得到最終的 ,所以還要增設(shè)一個進位位輸入端口和進位位的輸出端口。所以可以設(shè)a端口為被減數(shù),b端口為減數(shù),ci為輸入借位位,s為結(jié)果的輸出端口,co為借位的輸出端口。減法器的運算過程中首先要引用加法器(上面的加法器的程序中很詳細地介紹了加法器的設(shè)計,故減法器中加法器的描述部分在這里就省略了)。被減數(shù)減數(shù)求補4位全加器減法的運算結(jié)果顯示輸入進位求反對進位位求反進位位輸出結(jié)果圖3-5 4位全減器的流

27、程圖減法器的部分VHDL語言描述:BEGINbtem(3 DOWNTO 0)=NOT b(3 DOWNTO 0); 先把減數(shù)求反ctem(0)=NOT ci; 輸入進位也求反,從而對減數(shù)求補碼g1:FOR i IN 0 TO 3 GENERATE 連用四位全加器17add:adder PORT MAP(a(i),btem(i),ctem(i),stem(i),ctem(i+1);END GENERATE;s(3 downto 0)=stem(3 downto 0); 把中間變量所得到的值賦給s,因為s是減法器運算出來的結(jié)果的輸出端口,通過s把計算結(jié)果輸出co=NOT ctem(4); 求反輸出

28、進位END behave;然后將4位全減器級聯(lián)起來,就可得到兩個8位二進制數(shù)的減法器。圖3-5是其原理圖:圖3-6 減法器的原理圖減法器的仿真波形:圖3-7 減法器的仿真波形圖從以上仿真波形圖3-7中可以作出總結(jié)(“0”為低電平,“1”為高電平):兩個數(shù)做減法,采用的是4位4位一減,若a為“00111000”,b為“00100010”時,首先將它們各自的低4位先做運算,先將b的第四位求補,之后與a的第四位相加后得到第四位的運算結(jié)果“0110”,最高位有進位,但輸出時取反就 為“0”,再用同樣的方法計算出高四位的運算結(jié)果,得“0001”,之后還得加上一個低4位向高4位的進位“0”,所以最終結(jié)果s

29、為“00010110”。3.3.3 乘法器的設(shè)計乘法器是數(shù)字系統(tǒng)中的基本邏輯器件,在很多應(yīng)用中都會出現(xiàn)如各種濾波器的設(shè)計、矩陣的運算等。這里設(shè)計的是一個44的乘法器。根據(jù)乘法器的原理,可以繪出其流程圖(圖3-8),從流程圖中又可以看出可設(shè)a端口為被乘數(shù)(一個4位二進制數(shù)),b端口為乘數(shù)(一個4位二進制數(shù)),y為乘法運算的結(jié)果的輸出端口。被乘數(shù)乘數(shù)乘數(shù)的最低位每位二進制數(shù)相與得到4次結(jié)果位對齊乘數(shù)從最低位左移一位二進制數(shù)相加最終結(jié)果3次圖3-8 乘法器的流程圖乘法器的部分VHDL語言描述:ENTITY mul IS PORT (a,b : IN STD_LOGIC_VECTOR(3 DOWNTO

30、 0); 被乘數(shù)與乘數(shù)的輸入y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) 乘積的輸出端口);END mul;ARCHITECTURE arch OF mul ISBEGINy(7 DOWNTO 0) = a(3 DOWNTO 0)*b(3 DOWNTO 0); y=abEND arch;乘法器的引腳圖:圖3-9 乘法器的引腳圖從乘法器的引腳圖中也可以看出,乘法器有兩個輸入引腳,分別來輸入乘數(shù)和被乘數(shù),一個用來輸出運算結(jié)果的輸出端口,在封裝好的乘法器的器件中,就是來實現(xiàn)乘法運算的算法的。乘法器的仿真波形:圖3-10 乘法器的仿真波形從乘法器的仿真圖3-10中可以看出,

31、y的輸出就是a與b的相乘后的結(jié)果。例如:若a為“0001”,b為“0010”,則根據(jù)左移原理可得出最終結(jié)果s,為“00000010”。結(jié)果完全正確。這里也可以證實兩個4位二進制數(shù)的乘積為一個8位二進制數(shù)。3.3.4 除法器的設(shè)計整個除法器是基于連減和移位操作的,連減實際上就是基于數(shù)學(xué)上除法的基本原理。例如,ab=c余數(shù)是d,就等價于ac個b后得到d而且d 開始狀態(tài)IF str=1THEN 啟動信號為高電平的時候有效 state=one; 進入第一次移位狀態(tài) atem(3 DOWNTO 0)=a(7 DOWNTO 4); 把被除數(shù)的高4位放到減法器的被減數(shù)端口 btem(3 DOWNTO 0)=

32、b(3 DOWNTO 0); 把除數(shù)放到減法器的減數(shù)端口 ain(7 DOWNTO 0)=a(7 DOWNTO 0); 寄存被除數(shù) bin(3 DOWNTO 0) 第一次移位 IF cotem=0THEN state=error; 進入溢出出錯狀態(tài) ELSE ain(3 downto 1)=ain(2 downto 0); ain(0)=not cotem; 在最低位接受該位商值 atem(3 downto 0)=ain(6 downto 3); 除數(shù)寄存器高4位輸入到減法器,作為被減數(shù) state 第二次移位 IF n=2 THEN state=three; 進入第三次移位狀態(tài) n:=0;

33、ELSE state=two; n:=n+1; END IF; IF cotem=1THEN atem(3 DOWNTO 1)=stem(2 DOWNTO 0); ELSE atem(3 DOWNTO 1)=atem(2 DOWNTO 0); END IF; ain(3 DOWNTO 1)=ain(2 DOWNTO 0); ain(0)=ain(3); atem(0) 第三次移位 s(3 DOWNTO 1)=ain(2 DOWNTO 0); s(0)=NOT cotem; IF cotem=0THEN y(3 DOWNTO 0)=atem(3 DOWNTO 0); ELSE y(3 DOWNT

34、O 0)=atem(3 DOWNTO 0); END IF; atem(3 DOWNTO 0)=0; btem(3 DOWNTO 0)=0; state 溢出狀態(tài) state=start; 回到開始狀態(tài) atem(3 DOWNTO 0)=0; btem(3 DOWNTO 0)=0;END CASE;END IF;END PROCESS p2;citem=0; 借位位輸入端為0U1:suber PORT MAP(atem,btem,citem,stem,cotem);END behave;除法器的引腳圖:圖3-12 除法器的引腳圖除法器的仿真波形圖之一:圖3-13 除法器的仿真波形之一除法器的仿

35、真波形圖之二:圖3-14 除法器的仿真波形之二在以上兩幅除法器的仿真圖中,我舉了好多的例子的除法運算。在啟動信號為低電平的時候,整個除法器清零。在啟動信號str為高電平時,除法器開始了運算。仿真圖3.12是整除的運算,沒有余數(shù)。如在02H1H的除法運算中,得到的商為2H,余數(shù)為0H,說明02H能被1H整除。在仿真圖3.13中也舉了不能被整除的除法。如04H8,商為0H,余數(shù)4H。3.4 計算器輸入部分的設(shè)計和實現(xiàn)計算器輸入部分的設(shè)計最要是按鍵譯碼電路的設(shè)計和實現(xiàn)。流程圖如圖3-12所示:reset=1=0清零無按鍵動作按鍵顯示所按下的鍵對應(yīng)的數(shù)字(第一個按鍵對應(yīng)的是0的顯示,以此類推,到按下第

36、十個鍵的時候?qū)?yīng)的是9)有按鍵動作clk時鐘脈沖圖3-15 數(shù)字按鍵譯碼電路的流程圖下面的程序是數(shù)字按鍵譯碼電路的VHDL語言描述。在該程序中,可以設(shè)reset是異步復(fù)位信號的輸入端口,inclk是時鐘信號的輸入端口,innum端口用來表示輸入的按鍵向量,outnum端口用來表示輸入的按鍵動作對應(yīng)的輸出數(shù)字,outflag端口用來輸出是否有按鍵動作。數(shù)字按鍵譯碼電路的部分VHDL語言描述:BEGIN PROCESS(inclk,reset) BEGIN IF reset=1THEN 異步復(fù)位信號為高電平的時候 outnumoutnum=0000;outflagoutnum=0001;outfl

37、agoutnum=0010;outflagoutnum=0011;outflagoutnum=0100;outflagoutnum=0101;outflagoutnum=0110;outflagoutnum=0111;outflagoutnum=1000;outflagoutnum=1001;outflagoutnum=outnum;outflag=0; 不按鍵時保持 數(shù)字按鍵譯碼電路的引腳圖圖:圖3-16 數(shù)字按鍵譯碼電路的引腳圖從下圖3-17數(shù)字按鍵譯碼電路的仿真波形中可以看到要得到的結(jié)果,也證實了程序的正確性,如輸入按鍵為“0000010000”時,所對應(yīng)的是第五個按鍵為高電平,所以應(yīng)該

38、顯示數(shù)字再看輸出端口輸出的數(shù)字確實為4,所以此程序正確。其實,這個程序主要實現(xiàn)的是按下什么就輸出什么。一共有十個位,初始值都為低電平“0”,當按下哪個位時哪個位上的電平就跳為高電平(有且僅有一個為高電平),這時就有相應(yīng)的輸出。那十個位分別對應(yīng)的是09這十個數(shù)字,所以當?shù)谝粋€位(從左往右位數(shù)依次增高)為高電平時顯示0,第十個位上位高電平時,相應(yīng)的顯示為9。如果按下的鍵是加號、減號、乘號、減號或者是等于號時,也是不顯示的,所以此程序稱為數(shù)字按鍵譯碼電路。圖3-17 數(shù)字按鍵譯碼電路的仿真波形3.5 計算器顯示部分的設(shè)計和實現(xiàn)計算器顯示部分的設(shè)計和實現(xiàn),實際上就是7段譯碼器的設(shè)計和實現(xiàn),其VHDL語

39、言描述如下所示。在這段程序中,indata是輸入4位二進制數(shù)的端口,outdata是輸出7位譯碼的端口,用WITH語句來實現(xiàn)譯碼。7段譯碼器的部分VHDL語言描述BEGINWITH indata SELECToutdata=1111110WHEN0000, 0的顯示,十六進制數(shù)顯示為7E 0110000WHEN0001, 1的顯示,十六進制數(shù)顯示為30 1101101WHEN0010, 2的顯示,十六進制數(shù)顯示為6D 1111001WHEN0011, 3的顯示,十六進制數(shù)顯示為79 0110011WHEN0100, 4的顯示,十六進制數(shù)顯示為33 1011011WHEN0101, 5的顯示,十

40、六進制數(shù)顯示為5B 1011111WHEN0110, 6的顯示,十六進制數(shù)顯示為5F 1110000WHEN0111, 7的顯示,十六進制數(shù)顯示為70 1111111WHEN1000, 8的顯示,十六進制數(shù)顯示為7E 1111011WHEN1001, 9的顯示,十六進制數(shù)顯示為7B 0000000WHEN OTHERS; 其它的輸入按鍵均不顯示7段譯碼器的引腳圖:圖3-18 7段譯碼器的引腳圖7段譯碼器的仿真波形:圖3-19 7段譯碼器的仿真波形輸入什么數(shù),就對應(yīng)地輸出什么數(shù)。利用7段譯碼管來顯示。7段譯碼管的基本結(jié)構(gòu):agbefcd圖3-20 7段譯碼管的基本結(jié)構(gòu)從以上結(jié)構(gòu)圖3-19中可以看

41、出,十六進制數(shù)7E的二進制數(shù)為1111110,也就是說a、b、c、d、e、f的顯示管亮起來(“1為燈亮”,“0”為燈不亮),而g顯示不亮,即所得數(shù)字在數(shù)碼管(7段譯碼管)上的顯示就是0。以此類推,“0110000”顯示的是1,“1101101”顯示的是2,“1111001”顯示的是3,“0110011”顯示的是4,“1011011”顯示的是5,“1011111”顯示的是6,“1110000”顯示的是7,“1111111”顯示的是8,“1111011”顯示的是9。3.6位二進制數(shù)轉(zhuǎn)換成個位、十位、百位的模塊這個設(shè)計中,使用一個8位二進制寄存器來存放運算結(jié)果,因此要將它們顯示出來,就得將8位二進制

42、數(shù)轉(zhuǎn)換成個位、十位和百位。流程圖如下:清零位(c)c=1c=0全部清零取數(shù)產(chǎn)生個位上的數(shù)產(chǎn)生十位上的數(shù)產(chǎn)生百位上的數(shù)做相應(yīng)地減法圖3-21 8位二進制數(shù)轉(zhuǎn)換成個位、十位、百位的模塊的流程圖這里使用一個有限狀態(tài)機來將8位二進制數(shù)轉(zhuǎn)換成各位數(shù),每一位數(shù)位都使用一個4位二進制數(shù)寄存器,百位使用view1,十位使用view2,個位使用view3,00001001分別代表十進制數(shù)的09。狀態(tài)機有4個狀態(tài),即:取數(shù)狀態(tài)、產(chǎn)生百位數(shù)狀態(tài)、產(chǎn)生十位數(shù)狀態(tài)和產(chǎn)生個位數(shù)狀態(tài)。以下程序是8位二進制數(shù)轉(zhuǎn)換成個位、十位、百位的過程作為一個進程的VHDL語言描述。8位二進制數(shù)轉(zhuǎn)換成個位、十位、百位的進程:BEGIN IF c=1THEN view1=0000; view2=0000; view3=0000; viewstep ktemp=keep; viewstep IF ktemp=11001000THEN 如果ktemp大于200 view1=0010;ktemp=01100100THEN 如果ktemp大于100 view1=0001;ktemp=ktemp-01100100;百位為1,ktemp100 ELSE view1=0000; 百位為0 END IF; view

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論