基于FPGA的計算器設計_第1頁
基于FPGA的計算器設計_第2頁
基于FPGA的計算器設計_第3頁
基于FPGA的計算器設計_第4頁
基于FPGA的計算器設計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選文檔爭辯生課程論文課程名稱 FPGA及片上系統SOPC應用授課學期 學年 第 一 學期學院 X 專 業 C 學號 C1 姓名 C 任課老師 C 論文題目基于FPGA的計算器設計交稿日期 2014年01月09日 成果 X基于FPGA的計算器設計爭辯生:XX 指導老師:XX摘要 本文介紹了一個簡潔計算器的設計,基于硬件描述語言VHDL接受了現場可編程規律器件FPGA進行設計,并在Altera公司的Quartus 軟件上實現仿真。系統由鍵控模塊、運算、存儲模塊和譯碼顯示模塊四個部分組成,計算部分為加法器、減法器、乘法器和除法器,存儲部分需要3個存儲器來實現:內部累加器(acc)、輸入寄存器(re

2、g)以及結果暫存器(ans)。顯示部分由四個七段譯碼管組成,分別來顯示輸入數字,輸入部分接受外接鍵盤,外部的8個按鍵他們能以單鍵和組合鍵的形式完成09999之內的 加、減、乘、除、符號變換、存儲數據和讀取數據等七種功能運算其結構簡潔,易于實現。 關鍵詞:FPGA;VHDL;計算器;設計The design of calculator based on FPGAGraduate Student: Dongdong Fan Supervisor: Shuxiang SongAbstract This article describes the design of a simple calculat

3、or, the design uses Field Programmable Gate Array FPGA based on VHDL hardware description language to design and Altera's Quartus in software for emulation. This system is componented by the key control module, computing, storage and decoding display module of the four parts, the computing part

4、include adder, subtractor, multiplier and divider,Storage part needs three memory to help achieved: internal accumulator (acc), input register (reg) as well as the results of registers (ans). Display part is made up four decoder of 7 sections, respectively to show the number of input. The 8 keys the

5、y can by single combined key forms to be completed addition, multiplication, division arithmetic operator and symbol transform,stored data and read seven function of operation within 0 to 9999 numbers.its structure is simple and easy to implement.Key words:FPGA; VHDL; calclute ; design名目摘要I名目II第1章 引

6、言11.1 課程設計的目的與意義11.2 國內外進呈現狀1第2章FPGA技術及硬件描述語言22.1 EDA技術及其進展22.2 FPGA技術22.3硬件描述語言VHDL3第3章 系統總體設計43.1 計算器的計算部分43.2 計算器的存儲部分43.3 計算器的顯示部分53.4 計算器的輸入部分6第4章 計算器的VHDL設計74.1加法器的設計與仿真74.2減法器的設計與仿真84.3乘法器的設計與仿真94.4 除法器的設計與仿真10第5章 結束語11參考文獻:11第1章 引言1.1 課程設計的目的與意義在人類學會交易的時候,計算也隨之產生,而算盤作為計算最有用的工具存在了幾千年。算盤亦稱珠算,是

7、中國人民制造的一種計算工具,素有“中國計算機”之稱。算盤產生于漢代之前,是由古代的“籌算”演化而來的,珠算一詞,最早見于漢末三國時代徐岳撰數術記遺,書中有“珠算,控帶四時,經緯三才”的記述。明清時期,算盤的應用已很廣泛,關于算盤制造規格,后來消滅的各種規格的算盤,都是在此基礎上進展起來的。算盤構造簡潔,便于把握,使用便利,成為計算理財不行缺少的工具??墒请S著人類文明的進步和科學技術的不斷進展。算盤已經越來越不能滿足一些高強度、高難度、高速度的簡單計算。這時,一種新的電子產品問世了,它就是電子計算器。電子計算器的創造是跨時代的,它比算盤計算的速度要快幾百幾千倍,計算的結果要比算盤更精確,操作的方

8、法要更便利,更簡潔易學,計算的范圍更廣,并且小巧、輕松。它已經成為人們日常生活中不行缺少的一種計算工具,為我們的生活供應了很大的便利。而隨著計算機的普及,越來越多人在使用計算機,越來越多的工作離不開計算機,可以說計算機已經成為現代社會中不行或缺的工具,而電子計算器功能也以軟件的形式進入計算機的軟件世界,這不僅給人們帶來了更大的便利,更為人們引入了更快的計算速度和更強大的運算功能。1.2 國內外進呈現狀(1)國外狀況在國外,電子計算器在集成電路創造后,只用短短幾年時間就完成了技術飛躍,經過激烈的市場競爭,現在的計算器技術己經相當成熟。計算器已漸漸地脫離原來的“幫助計算工具”的功能定位,正向著多功

9、能化、可編程化方向進展,在各個領域都得到了廣泛的應用。用計算器不僅可以實現各種各樣簡單的數學計算還可以用來編制、運行程序,甚至解方程組,圖形計算器還可以進行圖形處理。計算器內置的軟件允許用戶進行類似于對計算機的文件和名目管理等操作,允許用戶對圖形界面進行定制,同時各種新技術也被應用到計算器里使計算器功能越來越強大。可以說,計算器就是一個“微微型”的計算機。(2)國內狀況國內也有廠商利用計算器芯片開發新的產品,但對計算器技術的爭辯、計算器芯片的設計還處于起步階段。計算器的主要功能還是在于“計算”,不妨稱之為“低檔計算器”。即便是對這種計算器,很多廠商也只從事計算器的組裝、銷售業務。一些IC設計公

10、司、芯片供應商也開頭爭辯計算器技術。第2章FPGA技術及硬件描述語言2.1 EDA技術及其進展1.使電子設計成果以自主學問產權的方式得以明確表達和確認成為可能;2.在仿真和設計兩方面支持標準硬件描述語言的功能強大的EDA軟件不斷推出;3.電子技術全方位納入EDA領域;4.EDA使得電子領域各學科的界限更加模糊,更加互為包涵;5.Soc高效低成本設計技術的成熟。2.2 FPGA技術(1)FPGA技術的進呈現狀FPGA是英文Field Programmable Gate Array的縮寫,即現場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步進展的產物。它是作為專用集成電路(

11、ASIC)領域中的一種半定制電路而消滅的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。FPGA芯片叫板微處理器,假如沒有微處理器,電腦會怎樣?答案令人驚異- 它的處理速度比常規電腦更快,而且快出很多倍!盡管FPGA芯片的時鐘頻率要低于奔騰處理器,但是由于FPGA芯片可并行處理各種不同的運算,所以可完成很多簡單的任務。例如網頁顯示,全球天氣建摸及基因組合核對等,而且處理速度比奔騰處理器或數字信號處理器快得多。在通用計算方面,FPGA仍舊不敵Intel的處理器。對于那些只需要進行重復單任務操作的機器而言,使用FPGA芯片明顯是大材小用。與FPGA對應的還有DSP處理器,DSP

12、處理器速度雖然很快,并對很多DSP應用來說很有用,但仍有一些應用要求性能再進一步提升,而FPGA供應了更高的性能。FPGA可以生成一個定制硬件設計,從而把握規律能夠在硬件中實現,不必再利用精確的時鐘周期來實現把握功能。目前的FPGA設計一般接受Top-down(自頂向下)的設計方法。先將系統劃分為各個功能子模塊,在系統級層次上進行行為描述,再對這些子模塊進一步進行行為描述。 圖2.1 應用FPGA開發流程2.3硬件描述語言VHDL硬件描述語言是EDA技術的重要組成部分,VHDL是作為電子設計主流硬件的描述語言。VHDL語言具有很強的電路描述和建模力量,能從多個層次對數字系統進行建模和描述,從而

13、大大簡化了硬件設計任務,提高了設計效率和牢靠性。 自頂向下的設計流程:圖2.2基于VHDL的自頂向下設計方法第3章 系統總體設計系統總體設計框圖如圖1.3所示。此設計由計算部分、存儲部分、顯示部分和輸入部分組成。圖3.1計算器的系統組成框圖3.1 計算器的計算部分完成09999之內的數,9999的二進制表示為10011100001111,在這一部分中,可以將每一個數均表示成16位二進制數統一進行運算,各個計算數之間的計算可以直接使用VHDL語言中的運算符來實現。但在顯示時,必需將個位、十位、百位,千位分開顯示,設計時使用比較的方法來實現計算器的功能要求。3.2 計算器的存儲部分存儲部分需要3個

14、存儲器來實現:內部累加器(acc)、輸入寄存器(reg)以及結果暫存器(ans)。在存放數字時,將數字放入acc或者reg里面,當第一次按下數字鍵時,表示該數字是個位。當其次次按下數字鍵時,表示這次輸入的是個位,是十位,上一次輸入的所以要把第一次輸入的數字乘以10,再加上其次次輸入的數字,來得到最終輸入的數字。當第三次按下數字鍵時,要將第一次輸入的數字乘以100,再加上其次次輸入的數字乘以10,再加上其次次輸入的數字,來得到最終輸入的數字。當第四次按下數字鍵時,要將第一次輸入的數字乘以1000,再加上其次次輸入的數字乘以100,再加上第三次輸入的數字乘以10,再加上第四次輸入的數字,來得到最終

15、輸入的數字。當進行第一次計算時,第一個數字存放在acc里面。按下運算符以后,其次個數字放在reg里面。當再按下運算符號或者等號時,第一次計算的結果將存放在ans里面,同時reg清零,等待下一個數字的輸入。進行其次次運算時,將ans里面的結果與reg里面新輸入的數字進行運算,再將運算結果存放在ans里面,直到最終按下等號按鍵的時候,顯示最終的運算結果。3.3 計算器的顯示部分顯示部分是系統的輸出部分,用于顯示按鍵值及計算結果,由于數字系統的數據運算都是二進制的,而輸出表達式都是BCD碼,為了滿足BCD碼的譯碼顯示,最便利的方法就是利用譯碼程序在FPGA中實現。本文接受的是共陰極七段數碼管,顯示數

16、字時需要將對應管腳置為高電平,輸出時,從左到右,按從高到低位的挨次依次接g、f、e、d、c、b、a。七段譯碼器的基本結構如圖3.2所示。圖3.2 七段譯碼器的結構其VHDL語言描述如下所示。在這段程序中,indata是輸入4位二進制數的端口,outdata是輸出7位譯碼的端口,用WITH語句來實現譯碼。WITH indata SELECToutdata<="1111110"WHEN"0000", -顯示0 "0110000"WHEN"0001", -顯示1 "1101101"WHEN&qu

17、ot;0010", -顯示2 "1111001"WHEN"0011", "0110011"WHEN"0100", "1011011"WHEN"0101", "1011111"WHEN"0110", "1110000"WHEN"0111", "1111111"WHEN"1000", "1101111"WHEN"1001&

18、quot;, -顯示9 "0000000"WHEN OTHERS; -其它的輸入按鍵均不顯示。計算器顯示部分的設計和實現,實際上就是七段譯碼器的設計和實現,四個七段譯碼器分別顯示的是個位、十位、百位、千位。輸入第一個數字后至再一次按下數字按鍵輸入其次個數字前,三個七段譯碼器顯示的都是第一個數字。當開頭輸入其次個數字的時候顯示其次個數字,再次按下運算按鍵到輸入第三個數字前,顯示的是前兩個數字的運算結果,以此類推,當最終按下等號鍵的時候,顯示最終的運算結果。3.4 計算器的輸入部分計算器輸入部分的設計最主要的是按鍵譯碼電路的設計和實現。計算器的輸入部分是由外部的8個按鍵他們能以

19、單鍵和組合鍵的形式完成09十個數字按鍵、加減乘除四則運算的運算符按鍵、一個等號按鍵和一個清零按。設計所要做的是對按鍵信息進行譯碼,使其在計算器內部可以使用。數字按鍵譯碼電路的主體部分VHDL語言描述如下。PROCESS(inclk,reset) BEGIN IF reset='1'THEN outnum<="0000" ELSIF inclk'EVENT AND inclk='1'THEN CASE innum IS WHEN"00000001"=>outnum<="0000"

20、outflag<='1' -按下第一個鍵表示輸入0 WHEN"00000010"=>outnum<="0001"outflag<='1' -按下其次個鍵表示輸入0 WHEN"00000100"=>outnum<="0010"outflag<='1'-以下類似 WHEN"00001000"=>outnum<="0011"outflag<='1' WHEN&

21、quot;00010000"=>outnum<="0100"outflag<='1' WHEN"00100000"=>outnum<="0101"outflag<='1' WHEN"01000000"=>outnum<="0110"outflag<='1' WHEN"10000000"=>outnum<="0111"outflag&l

22、t;='1' WHEN"10000001"=>outnum<="1000"outflag<='1' WHEN"10000010"=>outnum<="1001"outflag<='1' WHEN OTHERS=>outnum<=outnum;outflag<='0' -不按鍵時保持 END CASE; END IF; END PROCESS;在本次設計的程序中,設reset是異步復位信號的輸入端口,

23、inclk是時鐘信號的輸入端口,innum端口用來表示輸入的按鍵向量,outnum端口用來表示輸入的按鍵動作對應的輸出數字,outflag端口用來輸出是否有按鍵動作,它主要實現的是按下什么就輸出什么。一共有千、百、十、個位,初始值都為低電平“0”,當按下哪個位時哪個位上的電平就跳為高電平(有且僅有一個為高電平),這時就有相應的輸出。那千、百、十、個位分別對應的是09這十個數字,所以當第一個位(從左往右位數依次增高)為高電平常顯示0,第千個位上位高電平常,相應的顯示為9。假如按下的鍵是加號、減號、乘號、除號或者是等于號時,也是不顯示的,所以也可以稱作數字按鍵譯碼電路。第4章 計算器的VHDL設計

24、4.1加法器的設計與仿真 全加器是組合規律電路中最常見也最有用的一種,考慮低位進位的加法運算就是全加運算,實現全加運算的電路稱為全加器。設計16位的全加器思路格外簡潔且清楚,第一種方法就是先設計一個半加器和一個或門,然后兩個半加器合并成一個一位的全加器,最終用16個一位的全加器組合成為一個16位的全加器;其次種方法就是先設計一個一位的全加器,然后在用16個串聯或并聯就組成了一個16位的全加器,而本次設計接受接受的4.1一位全加器的級聯原理圖程序如附錄中加法程序,經Quartus 編譯后建立.vwf,設置被加數a為十進制數9999(可設置09999內的任意數字),設置加數b99999仿真后所得結

25、果如圖4.2所示。9999+999919998,仿真結果正確,可知此加法器設計有效。圖4.2 加法器仿真9999+9999199984.2減法器的設計與仿真設計一個16位二進制數的減法器,利用二進制的減法原理,減法變加法多次調用一位全加器一位全減器的原理框圖如圖4.3所示。由圖可以看出,此減法器共需要兩個輸入端口和一個輸出端口。減法器的設計可以引用加法器,即通過對減數的求補,再與被減數相加得到最終的結果,所以需要增設一個進位位輸入端口和進位位的輸出端口。圖4.3 一位全減器的原理框圖可以設a端口為被減數,b端口為減數,ci為輸入借位位,s為結果的輸出端口,co為借位的輸出端口。此減法器可以進行

26、位數擴展,每增加一位需要多引用一個加法器,程序如附錄中減法程序,經Quartus 編譯后建立.vmf文件,設置被減數a為十進制數1999(可設置09999內的任意數字),設置減數b為999,仿真后所得結果如圖4.4所示。1999-9991000,仿真結果正確,可知此減法器設計有效。圖4.4 減法器仿真1999-99910004.3乘法器的設計與仿真乘法器是數字系統中的基本規律器件,在很多應用中都會消滅如各種濾波器的設計、矩陣的運算等。這里設計的是一個16×16的乘法器。依據乘法器的原理,可以繪出其原理框圖如圖4.5所示。圖4.5 乘法器的原理框圖可設a端口為被乘數(一個16位二進制數

27、),b端口為乘數(一個16位二進制數),y為乘法運算的結果的輸出端口。乘法器模塊圖如附錄中所示。程序如附錄中乘法程序,經Quartus 編譯后建立.vmf文件,設置被乘數a為十進制數9999,設置乘數b為1000,仿真后所得結果如圖4.6所示。9999*10009999000,仿真結果正確,可知此乘法器設計有效。圖4.6 乘法器仿真 9999*100099990004.4 除法器的設計與仿真另類 除法器的算法可分為兩類:基于減法操作和基于乘法操作的算法?;诔朔ǖ某ò殉闯墒浅朔ǖ哪孢\算。如下面的式子所示: A =B×Q+R對于16位無符號被除數a,先將a轉換成高16位是0,低1

28、6位是a的數tempa。在每個周期開頭時tempa向左移動一位,最終一位補零,然后推斷temp a的高16位是否大于等于除數b,如是則tempa的高16位減去b并且加I,得到的新值仍賦給tempa;如不是直接進入下一步。上面的移位、比較、減法(減法視狀況而定)要進行16次,經過16個周期后,運算結束,所得到的tempa的高16位為余數,低16位為商。將移位、比較和相減放在同一個循環中,去除了不必要的延時,增加了設計的牢靠性。對于32位有符號數的除法,算法與上面類似,只是需要推斷商和余數是正數還是負數。當youWU為1時進行有符號數運算,否則進行無符號數運算。圖4.7 除法器的原理框圖設a端口為

29、被除數,b端口為除數,s端口為商,y端口為余數,程序如附件中除法程序,經Quartus 編譯后建立.vmf文件,設置被除數為十進制數9088除數為90,仿真所得結果如圖4.8所示。計算得到9088÷9010088,仿真結果正確,由此可知此除法器設計有效。圖4.8 除法器仿真 9088÷9010088第5章 結束語課程設計是本學期最終一次將自己所學理論與實際相結合的機會,通過這次比較完整的基于FPGA的計算器的設計,我自己的理論與實踐相結合的力量有了大幅度的提升。在溫習了所學專業學問的基礎上,同時通過查閱專業書籍、相關文獻資來解決實際工程問題,這熬煉了我的綜合運用各項學問和資

30、源的力量。我接受的是分模塊的設計方法,各個模塊的設計我都是隨著設計的不斷深化而不斷生疏并學會應用的。由于以前沒有經常使用VHDL語言,在編程過程中難免會與到反復調試自己也看不出的問題,幸好有試驗室同學的解答,在此表示感謝!而且通過對整體的掌控,對局部的取舍,以及對細節的斟酌處理,都使我的實際動手閱歷得到了極大的豐富,由于程序編寫與處理是一項格外繁瑣格外令人頭疼的工作,完成了這些,也使我的意志、抗壓力量及耐力都得到了不同程度的提升。這一次的設計讓我積累很多的解決實際問題的閱歷,如加法器,除法器有多種方法描述,使我的頭腦更加機敏,這必定會讓我在將來的學習、工作中表現出更高的應變力量,更強的溝通力和

31、理解力。通過這次的設計,我對FPGA技術、VHDL語言以及Quartus 的使用都有了深化的了解。雖然設計中內容較多,過程繁瑣但這也造就了我豐富的收獲。從未知道的原理,不肯定就難,關鍵是要動手去做,模塊化設計,各個擊破解決,信任下一次做其它設計時我會做的更好。參考文獻:1朱正偉.技術及應用.M.北京:清華高校出版社,2005.2王彥.基于FPGA的工程設計與應用M.西安:西安電子科技高校出版社,2007.3黃智偉.FPGA系統設計與實踐M.北京:電子工業出版社,2005.3江思敏.VHDL數字電路及系統設計M.北京:機械工業出版社,2006.5盧毅,賴杰.VHDL與數字電路設計M.北京:北京科

32、學出版社,2001.6潘松,黃繼業.EDA技術有用教程M.其次版.北京:科學出版社,2005.7徐志軍,徐光輝.CPLD/FPGA的開發與應用M.北京:電子工業出版社,2002.8陳育人.8 位計算器的指令系統與硬件結構J.微電子技術,2000,28(3).9朱衛華,鄭留平可任意設置計算精度的整數除法器的設計J國外電子測量技術。2008, 27(2):1618附 錄1. 1位全加器源程序f_adder.vhd如下:LIBRARY IEEE;-半加器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGI

33、C_UNSIGNED.ALL;ENTITY h_adder ISPORT (a,b:IN STD_LOGIC; so,co:OUT STD_LOGIC);END ENTITY h_adder;ARCHITECTURE behave OF h_adder ISBEGIN so<=a XOR b;co<=a AND b;END behave;-*LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;-或門規律USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY or2a ISP

34、ORT (a,b:IN STD_LOGIC; c:OUT STD_LOGIC);END ENTITY or2a;ARCHITECTURE one OF or2a ISBEGIN c<=a OR b;END one;-*LIBRARY IEEE;-1位全加器頂層設計USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY f_adder ISPORT (ain,bin,cin:IN STD_LOGIC; sumf,coutf:OUT STD_LOGIC);E

35、ND ENTITY f_adder;ARCHITECTURE fd1 OF f_adder ISCOMPONENT h_adderPORT (a,b:IN STD_LOGIC; so,co:OUT STD_LOGIC);END COMPONENT;COMPONENT or2a PORT (a,b:IN STD_LOGIC; c:OUT STD_LOGIC);END COMPONENT;SIGNAL d,e,f:STD_LOGIC;BEGINu1:h_adder PORT MAP(a=>ain,b=>bin,co=>d,so=>e);u2:h_adder PORT MAP

36、(a=>e,b=>cin,co=>f,so=>sumf);u3:or2a PORT MAP(a=>d,b=>f,c=>coutf);END ARCHITECTURE fd1;2 . 16位位減法器的源程序suber.vhd如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY suber IS -減法器PORT (a,b:IN STD_LOGIC_VECTOR(15 DOWNTO 0);

37、 ci:IN STD_LOGIC; s:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); co:OUT STD_LOGIC);END ENTITY suber;ARCHITECTURE fd3 OF suber ISCOMPONENT f_adder IS -調用一位全加器(在工程中已經添加)PORT (ain,bin,cin:IN STD_LOGIC; sumf,coutf:OUT STD_LOGIC);END COMPONENT;SIGNAL btem:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL ctem:STD_LOGIC_VECTOR(

38、16 DOWNTO 0);SIGNAL stem:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINbtem(15 DOWNTO 0)<=NOT b(15 DOWNTO 0);ctem(0)<=NOT ci;gl:FOR i IN 0 TO 15 GENERATE-loop add:f_adder PORT MAP(a(i),btem(i),ctem(i),stem(i),ctem(i+1);END GENERATE gl;-loop; s(15 DOWNTO 0)<=stem(15 DOWNTO 0); co<=NOT ctem(16);END f

39、d3;3. 16位乘法器源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mul ISPORT (a,b:IN STD_LOGIC_VECTOR(15 DOWNTO 0); y:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ENTITY mul;ARCHITECTURE fd4 OF mul ISBEGINy(31 DOWNTO 0)<=a(15 DOWNTO 0)*b(15 DOWN

40、TO 0);END fd4;4. 16位除法器源程序diver.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.NUMERIC_STD.ALL;ENTITY diver ISPORT (a,b:IN STD_LOGIC_VECTOR(15 DOWNTO 0);-此信號為1進行有符號數運算否則是無符號數相除 youwu:IN STD_LOGIC;- s,y:OUT STD_LOGIC_VECTOR(15 DOWNTO

41、 0);END ENTITY diver;ARCHITECTURE fd5 OF diver ISSIGNAL tempa,tempb:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL fuhao,sign,d:STD_LOGIC; BEGINd<=(a(15) XOR b(15) AND youwu;-有符號數相除時商的符號sign<=a(15) AND youwu;-被除數為負數時余數取負值PROCESS(a,b,youwu)BEGINIF youwu='1' THEN-將有符號數轉為無符號數IF a(15)='1' TH

42、EN tempa<=NOT a+1; ELSEtempa<=a;END IF;IF b(15)='1' THEN tempb<=NOT b+1; ELSEtempb<=b;END IF;ELSE-無符號數不作變化tempa<=a;tempb<=b;END IF;END PROCESS;PROCESS(tempa,tempb,fuhao,sign,d)VARIABLE n:INTEGER;VARIABLE temp_a,temp_b:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINtemp_a:="0000000

43、000000000"&tempa;temp_b:=tempb&"0000000000000000"n:=0;WHILE(n<16) LOOP-16次操作temp_a:=temp_a(30 DOWNTO 0)&"0"n:=n+1;IF temp_a(31 DOWNTO 16)>=tempb THENtemp_a:=temp_a-temp_b+1;END IF;END LOOP;IF d='1' THEN-商為負數時用補碼表示 temp_a(15 DOWNTO 0):=(NOT temp_a(15

44、 DOWNTO 0)+1;END IF;IF sign='1' THEN-余數為負數時用補碼表示 temp_a(31 DOWNTO 16):=(NOT temp_b(31 DOWNTO 16)+1;END IF;S<=temp_a(15 DOWNTO 0); y<=temp_a(31 DOWNTO 16);END PROCESS;END ARCHITECTURE fd5;5. 7段譯碼器的VHDL語言描述:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.ST

45、D_LOGIC_UNSIGNED.ALL;ENTITY numdecoder IS PORT(reset:IN STD_LOGIC; inclk:IN STD_LOGIC; innum:STD_LOGIC_VECTOR(7 DOWNTO 0); outnum:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); outflag:OUT STD_LOGIC); END;ARCHITECTURE behave OF numdecoder ISBEGIN PROCESS(inclk,reset) BEGIN IF reset='1'THEN outnum<=

46、"0000" ELSIF inclk'EVENT AND inclk='1'THEN CASE innum IS WHEN"00000001"=>outnum<="0000"outflag<='1' -按下第一個鍵表示輸入0 WHEN"00000010"=>outnum<="0001"outflag<='1' -以下類似 WHEN"00000100"=>outnum<=&q

47、uot;0010"outflag<='1' WHEN"00001000"=>outnum<="0011"outflag<='1' WHEN"00010000"=>outnum<="0100"outflag<='1' WHEN"00100000"=>outnum<="0101"outflag<='1' WHEN"01000000&quo

48、t;=>outnum<="0110"outflag<='1' WHEN"10000000"=>outnum<="0111"outflag<='1' WHEN"10000001"=>outnum<="1000"outflag<='1' WHEN"10000010"=>outnum<="1001"outflag<='1' WH

49、EN OTHERS=>outnum<=outnum;outflag<='0' -不按鍵時保持 END CASE; END IF; END PROCESS;END behave;6. 16位二進制數二進制轉換成千位、百位、個位以送至譯碼器vdecode.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY vdecode IS-7段譯碼譯碼器做顯示 PORT(indata:IN STD_LOG

50、IC_VECTOR(3 DOWNTO 0); outdata:OUT STD_LOGIC_VECTOR(0 TO 6) );END ENTITY vdecode;ARCHITECTURE behave OF vdecode ISBEGINWITH indata SELECToutdata<="1111110"WHEN"0000", -顯示0 "0110000"WHEN"0001", -顯示1 "1101101"WHEN"0010", -顯示2 "1111001

51、"WHEN"0011", "0110011"WHEN"0100", "1011011"WHEN"0101", "1011111"WHEN"0110", "1110000"WHEN"0111", "1111111"WHEN"1000", "1101111"WHEN"1001", -顯示9 "0000000"WH

52、EN OTHERS;END ARCHITECTURE behave ;-*ctrview:PROCESS(c,clk)-二進制轉換成千位、百位、個位以送至譯碼器BEGIN IF c='1'THEN view1<="0000" view2<="0000" view3<="0000"view4<="0000" viewstep<=takenum; ELSIF clk'EVENT AND clk='1'THEN CASE viewstep IS WHE

53、N takenum=> ktemp<=keep; WHEN thousand=> -產生千位數字 IF ktemp>="0010001100101000"THEN view1<="1001"ktemp<=ktemp-"0010001100101000" ELSIF ktemp>="0001111101000000"THEN view1<="1000"ktemp<=ktemp-"0001111101000000" ELSIF

54、 ktemp>="0001101101011000"THEN view1<="0111"ktemp<=ktemp-"0001101101011000" ELSIF ktemp>="0001011101110000"THEN view1<="0110"ktemp<=ktemp-"0001011101110000" ELSIF ktemp>="0001001110001000"THEN view1<="

55、0101"ktemp<=ktemp-"0001001110001000" ELSIF ktemp>="0000111110100000"THEN view1<="0100"ktemp<=ktemp-"0000111110100000" ELSIF ktemp>="0000101110111000"THEN view1<="0011"ktemp<=ktemp-"0000101110111000" ELSIF

56、 ktemp>="0000011111010000"THEN view1<="0010"ktemp<=ktemp-"0000011111010000" ELSIF ktemp>="0000001111101000"THEN view1<="0001"ktemp<=ktemp-"0000001111101000" ELSE view1<="0000" END IF; viewstep<=hundred;-產生百

57、位數字 WHEN hundred=> IF ktemp>="0000001110000100"THEN view2<="1001"ktemp<=ktemp-"0000001110000100" ELSIF ktemp>="0000001100100000"THEN view2<="1000"ktemp<=ktemp-"0000001100100000" ELSIF ktemp>="0000001010111100&qu

58、ot;THEN view2<="0111"ktemp<=ktemp-"0000001010111100" ELSIF ktemp>="0000001001011000"THEN view2<="0110"ktemp<=ktemp-"0000001001011000" ELSIF ktemp>="0000000111110100"THEN view2<="0101"ktemp<=ktemp-"0000

59、000111110100" ELSIF ktemp>="0000000110010000"THEN view2<="0100"ktemp<=ktemp-"0000000110010000" ELSIF ktemp>="0000000000011110"THEN view2<="0011"ktemp<=ktemp-"0000000000011110" IF ktemp>="11001000"THEN view2&

溫馨提示

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

評論

0/150

提交評論