




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