版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選文檔爭辯生課程論文課程名稱 FPGA及片上系統(tǒng)SOPC應用授課學期 學年 第 一 學期學院 X 專 業(yè) C 學號 C1 姓名 C 任課老師 C 論文題目基于FPGA的計算器設(shè)計交稿日期 2014年01月09日 成果 X基于FPGA的計算器設(shè)計爭辯生:XX 指導老師:XX摘要 本文介紹了一個簡潔計算器的設(shè)計,基于硬件描述語言VHDL接受了現(xiàn)場可編程規(guī)律器件FPGA進行設(shè)計,并在Altera公司的Quartus 軟件上實現(xiàn)仿真。系統(tǒng)由鍵控模塊、運算、存儲模塊和譯碼顯示模塊四個部分組成,計算部分為加法器、減法器、乘法器和除法器,存儲部分需要3個存儲器來實現(xiàn):內(nèi)部累加器(acc)、輸入寄存器(re
2、g)以及結(jié)果暫存器(ans)。顯示部分由四個七段譯碼管組成,分別來顯示輸入數(shù)字,輸入部分接受外接鍵盤,外部的8個按鍵他們能以單鍵和組合鍵的形式完成09999之內(nèi)的 加、減、乘、除、符號變換、存儲數(shù)據(jù)和讀取數(shù)據(jù)等七種功能運算其結(jié)構(gòu)簡潔,易于實現(xiàn)。 關(guān)鍵詞:FPGA;VHDL;計算器;設(shè)計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 課程設(shè)計的目的與意義11.2 國內(nèi)外進呈現(xiàn)狀1第2章FPGA技術(shù)及硬件描述語言22.1 EDA技術(shù)及其進展22.2 FPGA技術(shù)22.3硬件描述語言VHDL3第3章 系統(tǒng)總體設(shè)計43.1 計算器的計算部分43.2 計算器的存儲部分43.3 計算器的顯示部分53.4 計算器的輸入部分6第4章 計算器的VHDL設(shè)計74.1加法器的設(shè)計與仿真74.2減法器的設(shè)計與仿真84.3乘法器的設(shè)計與仿真94.4 除法器的設(shè)計與仿真10第5章 結(jié)束語11參考文獻:11第1章 引言1.1 課程設(shè)計的目的與意義在人類學會交易的時候,計算也隨之產(chǎn)生,而算盤作為計算最有用的工具存在了幾千年。算盤亦稱珠算,是
7、中國人民制造的一種計算工具,素有“中國計算機”之稱。算盤產(chǎn)生于漢代之前,是由古代的“籌算”演化而來的,珠算一詞,最早見于漢末三國時代徐岳撰數(shù)術(shù)記遺,書中有“珠算,控帶四時,經(jīng)緯三才”的記述。明清時期,算盤的應用已很廣泛,關(guān)于算盤制造規(guī)格,后來消滅的各種規(guī)格的算盤,都是在此基礎(chǔ)上進展起來的。算盤構(gòu)造簡潔,便于把握,使用便利,成為計算理財不行缺少的工具。可是隨著人類文明的進步和科學技術(shù)的不斷進展。算盤已經(jīng)越來越不能滿足一些高強度、高難度、高速度的簡單計算。這時,一種新的電子產(chǎn)品問世了,它就是電子計算器。電子計算器的創(chuàng)造是跨時代的,它比算盤計算的速度要快幾百幾千倍,計算的結(jié)果要比算盤更精確,操作的方
8、法要更便利,更簡潔易學,計算的范圍更廣,并且小巧、輕松。它已經(jīng)成為人們?nèi)粘I钪胁恍腥鄙俚囊环N計算工具,為我們的生活供應了很大的便利。而隨著計算機的普及,越來越多人在使用計算機,越來越多的工作離不開計算機,可以說計算機已經(jīng)成為現(xiàn)代社會中不行或缺的工具,而電子計算器功能也以軟件的形式進入計算機的軟件世界,這不僅給人們帶來了更大的便利,更為人們引入了更快的計算速度和更強大的運算功能。1.2 國內(nèi)外進呈現(xiàn)狀(1)國外狀況在國外,電子計算器在集成電路創(chuàng)造后,只用短短幾年時間就完成了技術(shù)飛躍,經(jīng)過激烈的市場競爭,現(xiàn)在的計算器技術(shù)己經(jīng)相當成熟。計算器已漸漸地脫離原來的“幫助計算工具”的功能定位,正向著多功
9、能化、可編程化方向進展,在各個領(lǐng)域都得到了廣泛的應用。用計算器不僅可以實現(xiàn)各種各樣簡單的數(shù)學計算還可以用來編制、運行程序,甚至解方程組,圖形計算器還可以進行圖形處理。計算器內(nèi)置的軟件允許用戶進行類似于對計算機的文件和名目管理等操作,允許用戶對圖形界面進行定制,同時各種新技術(shù)也被應用到計算器里使計算器功能越來越強大??梢哉f,計算器就是一個“微微型”的計算機。(2)國內(nèi)狀況國內(nèi)也有廠商利用計算器芯片開發(fā)新的產(chǎn)品,但對計算器技術(shù)的爭辯、計算器芯片的設(shè)計還處于起步階段。計算器的主要功能還是在于“計算”,不妨稱之為“低檔計算器”。即便是對這種計算器,很多廠商也只從事計算器的組裝、銷售業(yè)務。一些IC設(shè)計公
10、司、芯片供應商也開頭爭辯計算器技術(shù)。第2章FPGA技術(shù)及硬件描述語言2.1 EDA技術(shù)及其進展1.使電子設(shè)計成果以自主學問產(chǎn)權(quán)的方式得以明確表達和確認成為可能;2.在仿真和設(shè)計兩方面支持標準硬件描述語言的功能強大的EDA軟件不斷推出;3.電子技術(shù)全方位納入EDA領(lǐng)域;4.EDA使得電子領(lǐng)域各學科的界限更加模糊,更加互為包涵;5.Soc高效低成本設(shè)計技術(shù)的成熟。2.2 FPGA技術(shù)(1)FPGA技術(shù)的進呈現(xiàn)狀FPGA是英文Field Programmable Gate Array的縮寫,即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進一步進展的產(chǎn)物。它是作為專用集成電路(
11、ASIC)領(lǐng)域中的一種半定制電路而消滅的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。FPGA芯片叫板微處理器,假如沒有微處理器,電腦會怎樣?答案令人驚異- 它的處理速度比常規(guī)電腦更快,而且快出很多倍!盡管FPGA芯片的時鐘頻率要低于奔騰處理器,但是由于FPGA芯片可并行處理各種不同的運算,所以可完成很多簡單的任務。例如網(wǎng)頁顯示,全球天氣建摸及基因組合核對等,而且處理速度比奔騰處理器或數(shù)字信號處理器快得多。在通用計算方面,F(xiàn)PGA仍舊不敵Intel的處理器。對于那些只需要進行重復單任務操作的機器而言,使用FPGA芯片明顯是大材小用。與FPGA對應的還有DSP處理器,DSP
12、處理器速度雖然很快,并對很多DSP應用來說很有用,但仍有一些應用要求性能再進一步提升,而FPGA供應了更高的性能。FPGA可以生成一個定制硬件設(shè)計,從而把握規(guī)律能夠在硬件中實現(xiàn),不必再利用精確的時鐘周期來實現(xiàn)把握功能。目前的FPGA設(shè)計一般接受Top-down(自頂向下)的設(shè)計方法。先將系統(tǒng)劃分為各個功能子模塊,在系統(tǒng)級層次上進行行為描述,再對這些子模塊進一步進行行為描述。 圖2.1 應用FPGA開發(fā)流程2.3硬件描述語言VHDL硬件描述語言是EDA技術(shù)的重要組成部分,VHDL是作為電子設(shè)計主流硬件的描述語言。VHDL語言具有很強的電路描述和建模力量,能從多個層次對數(shù)字系統(tǒng)進行建模和描述,從而
13、大大簡化了硬件設(shè)計任務,提高了設(shè)計效率和牢靠性。 自頂向下的設(shè)計流程:圖2.2基于VHDL的自頂向下設(shè)計方法第3章 系統(tǒng)總體設(shè)計系統(tǒng)總體設(shè)計框圖如圖1.3所示。此設(shè)計由計算部分、存儲部分、顯示部分和輸入部分組成。圖3.1計算器的系統(tǒng)組成框圖3.1 計算器的計算部分完成09999之內(nèi)的數(shù),9999的二進制表示為10011100001111,在這一部分中,可以將每一個數(shù)均表示成16位二進制數(shù)統(tǒng)一進行運算,各個計算數(shù)之間的計算可以直接使用VHDL語言中的運算符來實現(xiàn)。但在顯示時,必需將個位、十位、百位,千位分開顯示,設(shè)計時使用比較的方法來實現(xiàn)計算器的功能要求。3.2 計算器的存儲部分存儲部分需要3個
14、存儲器來實現(xiàn):內(nèi)部累加器(acc)、輸入寄存器(reg)以及結(jié)果暫存器(ans)。在存放數(shù)字時,將數(shù)字放入acc或者reg里面,當?shù)谝淮伟聪聰?shù)字鍵時,表示該數(shù)字是個位。當其次次按下數(shù)字鍵時,表示這次輸入的是個位,是十位,上一次輸入的所以要把第一次輸入的數(shù)字乘以10,再加上其次次輸入的數(shù)字,來得到最終輸入的數(shù)字。當?shù)谌伟聪聰?shù)字鍵時,要將第一次輸入的數(shù)字乘以100,再加上其次次輸入的數(shù)字乘以10,再加上其次次輸入的數(shù)字,來得到最終輸入的數(shù)字。當?shù)谒拇伟聪聰?shù)字鍵時,要將第一次輸入的數(shù)字乘以1000,再加上其次次輸入的數(shù)字乘以100,再加上第三次輸入的數(shù)字乘以10,再加上第四次輸入的數(shù)字,來得到最終
15、輸入的數(shù)字。當進行第一次計算時,第一個數(shù)字存放在acc里面。按下運算符以后,其次個數(shù)字放在reg里面。當再按下運算符號或者等號時,第一次計算的結(jié)果將存放在ans里面,同時reg清零,等待下一個數(shù)字的輸入。進行其次次運算時,將ans里面的結(jié)果與reg里面新輸入的數(shù)字進行運算,再將運算結(jié)果存放在ans里面,直到最終按下等號按鍵的時候,顯示最終的運算結(jié)果。3.3 計算器的顯示部分顯示部分是系統(tǒng)的輸出部分,用于顯示按鍵值及計算結(jié)果,由于數(shù)字系統(tǒng)的數(shù)據(jù)運算都是二進制的,而輸出表達式都是BCD碼,為了滿足BCD碼的譯碼顯示,最便利的方法就是利用譯碼程序在FPGA中實現(xiàn)。本文接受的是共陰極七段數(shù)碼管,顯示數(shù)
16、字時需要將對應管腳置為高電平,輸出時,從左到右,按從高到低位的挨次依次接g、f、e、d、c、b、a。七段譯碼器的基本結(jié)構(gòu)如圖3.2所示。圖3.2 七段譯碼器的結(jié)構(gòu)其VHDL語言描述如下所示。在這段程序中,indata是輸入4位二進制數(shù)的端口,outdata是輸出7位譯碼的端口,用WITH語句來實現(xiàn)譯碼。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; -其它的輸入按鍵均不顯示。計算器顯示部分的設(shè)計和實現(xiàn),實際上就是七段譯碼器的設(shè)計和實現(xiàn),四個七段譯碼器分別顯示的是個位、十位、百位、千位。輸入第一個數(shù)字后至再一次按下數(shù)字按鍵輸入其次個數(shù)字前,三個七段譯碼器顯示的都是第一個數(shù)字。當開頭輸入其次個數(shù)字的時候顯示其次個數(shù)字,再次按下運算按鍵到輸入第三個數(shù)字前,顯示的是前兩個數(shù)字的運算結(jié)果,以此類推,當最終按下等號鍵的時候,顯示最終的運算結(jié)果。3.4 計算器的輸入部分計算器輸入部分的設(shè)計最主要的是按鍵譯碼電路的設(shè)計和實現(xiàn)。計算器的輸入部分是由外部的8個按鍵他們能以
19、單鍵和組合鍵的形式完成09十個數(shù)字按鍵、加減乘除四則運算的運算符按鍵、一個等號按鍵和一個清零按。設(shè)計所要做的是對按鍵信息進行譯碼,使其在計算器內(nèi)部可以使用。數(shù)字按鍵譯碼電路的主體部分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;在本次設(shè)計的程序中,設(shè)reset是異步復位信號的輸入端口,
23、inclk是時鐘信號的輸入端口,innum端口用來表示輸入的按鍵向量,outnum端口用來表示輸入的按鍵動作對應的輸出數(shù)字,outflag端口用來輸出是否有按鍵動作,它主要實現(xiàn)的是按下什么就輸出什么。一共有千、百、十、個位,初始值都為低電平“0”,當按下哪個位時哪個位上的電平就跳為高電平(有且僅有一個為高電平),這時就有相應的輸出。那千、百、十、個位分別對應的是09這十個數(shù)字,所以當?shù)谝粋€位(從左往右位數(shù)依次增高)為高電平常顯示0,第千個位上位高電平常,相應的顯示為9。假如按下的鍵是加號、減號、乘號、除號或者是等于號時,也是不顯示的,所以也可以稱作數(shù)字按鍵譯碼電路。第4章 計算器的VHDL設(shè)計
24、4.1加法器的設(shè)計與仿真 全加器是組合規(guī)律電路中最常見也最有用的一種,考慮低位進位的加法運算就是全加運算,實現(xiàn)全加運算的電路稱為全加器。設(shè)計16位的全加器思路格外簡潔且清楚,第一種方法就是先設(shè)計一個半加器和一個或門,然后兩個半加器合并成一個一位的全加器,最終用16個一位的全加器組合成為一個16位的全加器;其次種方法就是先設(shè)計一個一位的全加器,然后在用16個串聯(lián)或并聯(lián)就組成了一個16位的全加器,而本次設(shè)計接受接受的4.1一位全加器的級聯(lián)原理圖程序如附錄中加法程序,經(jīng)Quartus 編譯后建立.vwf,設(shè)置被加數(shù)a為十進制數(shù)9999(可設(shè)置09999內(nèi)的任意數(shù)字),設(shè)置加數(shù)b99999仿真后所得結(jié)
25、果如圖4.2所示。9999+999919998,仿真結(jié)果正確,可知此加法器設(shè)計有效。圖4.2 加法器仿真9999+9999199984.2減法器的設(shè)計與仿真設(shè)計一個16位二進制數(shù)的減法器,利用二進制的減法原理,減法變加法多次調(diào)用一位全加器一位全減器的原理框圖如圖4.3所示。由圖可以看出,此減法器共需要兩個輸入端口和一個輸出端口。減法器的設(shè)計可以引用加法器,即通過對減數(shù)的求補,再與被減數(shù)相加得到最終的結(jié)果,所以需要增設(shè)一個進位位輸入端口和進位位的輸出端口。圖4.3 一位全減器的原理框圖可以設(shè)a端口為被減數(shù),b端口為減數(shù),ci為輸入借位位,s為結(jié)果的輸出端口,co為借位的輸出端口。此減法器可以進行
26、位數(shù)擴展,每增加一位需要多引用一個加法器,程序如附錄中減法程序,經(jīng)Quartus 編譯后建立.vmf文件,設(shè)置被減數(shù)a為十進制數(shù)1999(可設(shè)置09999內(nèi)的任意數(shù)字),設(shè)置減數(shù)b為999,仿真后所得結(jié)果如圖4.4所示。1999-9991000,仿真結(jié)果正確,可知此減法器設(shè)計有效。圖4.4 減法器仿真1999-99910004.3乘法器的設(shè)計與仿真乘法器是數(shù)字系統(tǒng)中的基本規(guī)律器件,在很多應用中都會消滅如各種濾波器的設(shè)計、矩陣的運算等。這里設(shè)計的是一個16×16的乘法器。依據(jù)乘法器的原理,可以繪出其原理框圖如圖4.5所示。圖4.5 乘法器的原理框圖可設(shè)a端口為被乘數(shù)(一個16位二進制數(shù)
27、),b端口為乘數(shù)(一個16位二進制數(shù)),y為乘法運算的結(jié)果的輸出端口。乘法器模塊圖如附錄中所示。程序如附錄中乘法程序,經(jīng)Quartus 編譯后建立.vmf文件,設(shè)置被乘數(shù)a為十進制數(shù)9999,設(shè)置乘數(shù)b為1000,仿真后所得結(jié)果如圖4.6所示。9999*10009999000,仿真結(jié)果正確,可知此乘法器設(shè)計有效。圖4.6 乘法器仿真 9999*100099990004.4 除法器的設(shè)計與仿真另類 除法器的算法可分為兩類:基于減法操作和基于乘法操作的算法。基于乘法的除法把除法看成是乘法的逆運算。如下面的式子所示: A =B×Q+R對于16位無符號被除數(shù)a,先將a轉(zhuǎn)換成高16位是0,低1
28、6位是a的數(shù)tempa。在每個周期開頭時tempa向左移動一位,最終一位補零,然后推斷temp a的高16位是否大于等于除數(shù)b,如是則tempa的高16位減去b并且加I,得到的新值仍賦給tempa;如不是直接進入下一步。上面的移位、比較、減法(減法視狀況而定)要進行16次,經(jīng)過16個周期后,運算結(jié)束,所得到的tempa的高16位為余數(shù),低16位為商。將移位、比較和相減放在同一個循環(huán)中,去除了不必要的延時,增加了設(shè)計的牢靠性。對于32位有符號數(shù)的除法,算法與上面類似,只是需要推斷商和余數(shù)是正數(shù)還是負數(shù)。當youWU為1時進行有符號數(shù)運算,否則進行無符號數(shù)運算。圖4.7 除法器的原理框圖設(shè)a端口為
29、被除數(shù),b端口為除數(shù),s端口為商,y端口為余數(shù),程序如附件中除法程序,經(jīng)Quartus 編譯后建立.vmf文件,設(shè)置被除數(shù)為十進制數(shù)9088除數(shù)為90,仿真所得結(jié)果如圖4.8所示。計算得到9088÷9010088,仿真結(jié)果正確,由此可知此除法器設(shè)計有效。圖4.8 除法器仿真 9088÷9010088第5章 結(jié)束語課程設(shè)計是本學期最終一次將自己所學理論與實際相結(jié)合的機會,通過這次比較完整的基于FPGA的計算器的設(shè)計,我自己的理論與實踐相結(jié)合的力量有了大幅度的提升。在溫習了所學專業(yè)學問的基礎(chǔ)上,同時通過查閱專業(yè)書籍、相關(guān)文獻資來解決實際工程問題,這熬煉了我的綜合運用各項學問和資
30、源的力量。我接受的是分模塊的設(shè)計方法,各個模塊的設(shè)計我都是隨著設(shè)計的不斷深化而不斷生疏并學會應用的。由于以前沒有經(jīng)常使用VHDL語言,在編程過程中難免會與到反復調(diào)試自己也看不出的問題,幸好有試驗室同學的解答,在此表示感謝!而且通過對整體的掌控,對局部的取舍,以及對細節(jié)的斟酌處理,都使我的實際動手閱歷得到了極大的豐富,由于程序編寫與處理是一項格外繁瑣格外令人頭疼的工作,完成了這些,也使我的意志、抗壓力量及耐力都得到了不同程度的提升。這一次的設(shè)計讓我積累很多的解決實際問題的閱歷,如加法器,除法器有多種方法描述,使我的頭腦更加機敏,這必定會讓我在將來的學習、工作中表現(xiàn)出更高的應變力量,更強的溝通力和
31、理解力。通過這次的設(shè)計,我對FPGA技術(shù)、VHDL語言以及Quartus 的使用都有了深化的了解。雖然設(shè)計中內(nèi)容較多,過程繁瑣但這也造就了我豐富的收獲。從未知道的原理,不肯定就難,關(guān)鍵是要動手去做,模塊化設(shè)計,各個擊破解決,信任下一次做其它設(shè)計時我會做的更好。參考文獻:1朱正偉.技術(shù)及應用.M.北京:清華高校出版社,2005.2王彥.基于FPGA的工程設(shè)計與應用M.西安:西安電子科技高校出版社,2007.3黃智偉.FPGA系統(tǒng)設(shè)計與實踐M.北京:電子工業(yè)出版社,2005.3江思敏.VHDL數(shù)字電路及系統(tǒng)設(shè)計M.北京:機械工業(yè)出版社,2006.5盧毅,賴杰.VHDL與數(shù)字電路設(shè)計M.北京:北京科
32、學出版社,2001.6潘松,黃繼業(yè).EDA技術(shù)有用教程M.其次版.北京:科學出版社,2005.7徐志軍,徐光輝.CPLD/FPGA的開發(fā)與應用M.北京:電子工業(yè)出版社,2002.8陳育人.8 位計算器的指令系統(tǒng)與硬件結(jié)構(gòu)J.微電子技術(shù),2000,28(3).9朱衛(wèi)華,鄭留平可任意設(shè)置計算精度的整數(shù)除法器的設(shè)計J國外電子測量技術(shù)。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;-或門規(guī)律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位全加器頂層設(shè)計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 -調(diào)用一位全加器(在工程中已經(jīng)添加)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進行有符號數(shù)運算否則是無符號數(shù)相除 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;-有符號數(shù)相除時商的符號sign<=a(15) AND youwu;-被除數(shù)為負數(shù)時余數(shù)取負值PROCESS(a,b,youwu)BEGINIF youwu='1' THEN-將有符號數(shù)轉(zhuǎn)為無符號數(shù)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-無符號數(shù)不作變化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-商為負數(shù)時用補碼表示 temp_a(15 DOWNTO 0):=(NOT temp_a(15
44、 DOWNTO 0)+1;END IF;IF sign='1' THEN-余數(shù)為負數(shù)時用補碼表示 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位二進制數(shù)二進制轉(zhuǎn)換成千位、百位、個位以送至譯碼器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)-二進制轉(zhuǎn)換成千位、百位、個位以送至譯碼器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=> -產(chǎn)生千位數(shù)字 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;-產(chǎn)生百
57、位數(shù)字 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版木材采購合同與木材質(zhì)量保證協(xié)議4篇
- 2025年度門樓安全門采購與安裝合同4篇
- 招投標與合同管理中的2025年度合規(guī)性審查3篇
- 二零二五年度人力資源派遣中介委托合同3篇
- 2025年有機農(nóng)業(yè)專用農(nóng)藥農(nóng)膜供應合同范本4篇
- 二零二五版龍門吊拆除與專業(yè)運輸及安裝調(diào)試服務合同4篇
- 2025年度綠色生態(tài)農(nóng)業(yè)承包合同范本
- 二零二五年度按揭房屋買賣合同稅費計算指南3篇
- 2025年度模特經(jīng)紀公司模特簽約合同范本4篇
- 2025年度交通設(shè)施建設(shè)履約擔保合同模板2篇
- GB/T 45120-2024道路車輛48 V供電電壓電氣要求及試驗
- 2025年中核財務有限責任公司招聘筆試參考題庫含答案解析
- 春節(jié)文化常識單選題100道及答案
- 華中師大一附中2024-2025學年度上學期高三年級第二次考試數(shù)學試題(含解析)
- 12123交管學法減分考試題及答案
- 2025年寒假實踐特色作業(yè)設(shè)計模板
- 《數(shù)據(jù)采集技術(shù)》課件-XPath 解析庫
- 財務報銷流程培訓課程
- 成人腦室外引流護理-中華護理學會團體 標準
- 24年追覓在線測評28題及答案
- 春節(jié)慰問困難職工方案春節(jié)慰問困難職工活動
評論
0/150
提交評論