金天星 閔嘯
(中國(guó)船舶重工集團(tuán)公司第七二三研究所 江蘇省揚(yáng)州市 225011)
電子計(jì)算器已經(jīng)變成現(xiàn)代人生活中不可缺少的工具,給人們的工作和生活帶來諸多便利。隨著人們對(duì)計(jì)算功能的要求越來越高,各種新型的技術(shù)也逐漸運(yùn)用到計(jì)算器運(yùn)算領(lǐng)域,當(dāng)前,基于FPGA的運(yùn)算系統(tǒng)應(yīng)用較為廣泛,在傳統(tǒng)的運(yùn)算技術(shù)上進(jìn)行了優(yōu)化,其計(jì)算時(shí)間更快,并且能處理更大量級(jí)的運(yùn)算,它不僅給人們帶來了很大的便利,還為現(xiàn)代人提供了更迅捷的計(jì)算速度,具有非常強(qiáng)大的運(yùn)算功能。
系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。此設(shè)計(jì)由計(jì)算部分、存儲(chǔ)部分、顯示部分和輸入部分組成。
首先,該系統(tǒng)計(jì)算部分所采用是8 位或4 位二進(jìn)制的計(jì)算方式,這也是目前應(yīng)用較為廣泛的一種計(jì)算方式,其計(jì)算語言為VHDl 語言,通過VHDl 語言中的運(yùn)算符就能將各個(gè)數(shù)字之間的運(yùn)算銜接起來。然而,在計(jì)算器的顯示過程中,百位、十位、個(gè)位等必須都是分開顯示的,這就需要用到比較的方法去實(shí)現(xiàn)。當(dāng)然,采用VHDl語言進(jìn)行計(jì)算時(shí)只能處理以2 位除數(shù)的冪的除法,而不能處理除數(shù)是其它數(shù)字的運(yùn)算,此時(shí)就要求另外設(shè)計(jì)一個(gè)除法器來完成除法運(yùn)算,這個(gè)除法器所采用的是左移運(yùn)算和減法運(yùn)算等程序。
我們都知道計(jì)算器的存儲(chǔ)部分是非常的重要的,它主要有三個(gè)存儲(chǔ)器去實(shí)現(xiàn)它的計(jì)算的功能,包括:結(jié)果暫存器(ans)、輸入寄存器(reg)和內(nèi)部累加器(acc)等。通常,將輸在存放在輸入寄存器或內(nèi)部累加器中,第一次按下數(shù)字按鍵就能直接顯示個(gè)位,第二次按下數(shù)字按鍵時(shí)就表示此時(shí)輸入的是個(gè)位,而上一次輸入的十位,因此,第一次輸入的數(shù)字就必須乘以10,并與第二次輸入的數(shù)字進(jìn)行相加,得到的就是計(jì)算結(jié)果。同理,第三次按下數(shù)字按鍵時(shí),就要將第一次輸入的數(shù)字要乘以100,并與第二次輸入的數(shù)字乘以10 以及第一次輸入的數(shù)字進(jìn)行相加,得到最后的計(jì)算結(jié)果。
我們都知道計(jì)算出來的結(jié)果,一定要顯示在屏幕上,我們用的屏幕是Fede 的屏幕,這種屏幕功能是非常的強(qiáng)大的,能夠更好的顯示圖形和數(shù)字符號(hào)。該運(yùn)算系統(tǒng)采用的是二進(jìn)制運(yùn)算方式,用BCD 碼來詮釋輸出表達(dá)方式,因此,可以在FPGA 中運(yùn)用譯碼程序來實(shí)現(xiàn)。該系統(tǒng)選用共陽極七段譯碼管,當(dāng)需要顯示數(shù)字時(shí)對(duì)應(yīng)的管腳將切換到低電平,在輸出的過程中,按照從左到右、從高到低的順序,依次為g、f、e、d、c、b、a,其結(jié)構(gòu)圖如圖2。
通過查閱大量的數(shù)據(jù)我們編寫出相關(guān)的代碼,并且能夠更好的去實(shí)現(xiàn)功能。為了設(shè)計(jì)出計(jì)算器中的顯示功能,所采用的的七段譯碼器,同時(shí)運(yùn)用3 個(gè)七段譯碼器,依次顯示出百位、十位、個(gè)位。當(dāng)把第1 個(gè)數(shù)字輸進(jìn)去后,在按下第2 個(gè)數(shù)字之前,此時(shí)三個(gè)七段譯碼器都直接將第1 個(gè)數(shù)字顯示出來。當(dāng)輸入完第2 個(gè)數(shù)字后,則會(huì)直接將第2 個(gè)數(shù)字顯示出,然后,在按下第3 個(gè)數(shù)字之前,直接將前面兩個(gè)數(shù)字的運(yùn)算結(jié)果顯示出來,以此類推,最后按下等號(hào)鍵,其最終的運(yùn)算結(jié)果就快速顯示。
圖1:計(jì)算器的系統(tǒng)組成框圖
圖2:七段譯碼器的結(jié)構(gòu)
在生活中接觸計(jì)算器的次數(shù)較多,都知道計(jì)算器上的數(shù)字的一般都是都是10 個(gè)數(shù)字,通過這十個(gè)數(shù)字不斷的加減乘除,都可以計(jì)算出想要的結(jié)果,并顯示到計(jì)算器的顯示屏上。
在這次設(shè)計(jì)中,程序是非常的重要的,而設(shè)計(jì)科學(xué)的、合理的按鍵譯碼電路是計(jì)算器輸入部分的關(guān)鍵流程。其中,計(jì)算器的輸入部分包括0-9 等10 個(gè)數(shù)字符號(hào)、加減乘除等4 個(gè)運(yùn)算符號(hào)、1 個(gè)清零鍵、1 個(gè)等號(hào)鍵等。因此,就要求對(duì)每個(gè)按鍵進(jìn)行不同譯碼,保證按鍵數(shù)字的準(zhǔn)確性。
圖3:加法器仿真16+176=192
圖4:四位全減器的原理框圖
圖5:乘法器的原理框圖
本文設(shè)計(jì)的加法器運(yùn)算程序是多位加法器,能夠根據(jù)不同的進(jìn)位方式劃分成兩種類型,即并行進(jìn)位加法器和串行進(jìn)位加法器。其中,串行進(jìn)位加法器運(yùn)行原理為把多個(gè)一位全加器級(jí)聯(lián),低位全加器的進(jìn)位輸出送給相鄰高位全加器作為進(jìn)位輸入。顯而易見,該設(shè)計(jì)方式所需要的資源更少,并且思路非常簡(jiǎn)明,然而運(yùn)算的速度并不快。并行進(jìn)位方式的運(yùn)行原理為基于各位的加法程序的基礎(chǔ)上,添加進(jìn)位發(fā)生的邏輯電路,各位的進(jìn)位輸入信號(hào)都是同時(shí)出現(xiàn),這就可以保證各位能一起進(jìn)行全加加算,并顯示出計(jì)算結(jié)果。這種運(yùn)算方式需要的資源較多,運(yùn)算速度是非??斓?。特別在處理運(yùn)算位數(shù)增加的過程中,相比于串行進(jìn)位加法器,并行進(jìn)位加法器占用的資源更大。所以,在設(shè)計(jì)加法器時(shí),必要要全面對(duì)比資源占用量和運(yùn)算速度,盡可能地實(shí)現(xiàn)設(shè)計(jì)平衡。根據(jù)相關(guān)資料可知,在采用4位二進(jìn)制的方式進(jìn)行運(yùn)算時(shí),二者資源占用量基本一致。所以,就能夠?qū)蓚€(gè)4 位二進(jìn)制并行加法器級(jí)聯(lián)從而從此一個(gè)8 位二進(jìn)制加法器。
接下來,需要去詳細(xì)的分析這個(gè)程序的運(yùn)行過程,并通過仿真評(píng)定其準(zhǔn)確性和合理性。加數(shù)和被加數(shù)進(jìn)行相加,并且個(gè)位和十位、百位都是相對(duì)應(yīng)的,相加之后進(jìn)行四舍五入的方法總結(jié)出來的結(jié)果,并且把結(jié)果顯示到屏幕上去,這樣更加的直觀而和真實(shí)的地了解加法的計(jì)算結(jié)果。如圖3所示,能夠更好的讓我們分析十六進(jìn)制和八進(jìn)制的區(qū)別,能輕易分辨出二者是如何進(jìn)行運(yùn)算的,通過這種形式能夠讓我們通過仿真的方式進(jìn)行分析和驗(yàn)證,最重要的是可以得出正確的仿真結(jié)果,也就表明設(shè)計(jì)出的加法運(yùn)算器非常的成功。
上文我們已經(jīng)介紹了加法的運(yùn)算器的運(yùn)行的原理。接下來我們就介紹減法的運(yùn)算器的原理,其實(shí)加法的運(yùn)算器的原理和減法運(yùn)算器的原理都是相通的,它們都是一樣的,都是通過數(shù)字與數(shù)字進(jìn)行相減,個(gè)位和個(gè)位相減、十位和十位相減、千位和千位相減,直接將運(yùn)算的結(jié)果顯示出來,具體的流程圖、原理圖,如圖4所示。
乘法的運(yùn)算器是非常難以解決的,所需要的步驟也是非常多的,通過移位的方式去實(shí)現(xiàn)相關(guān)的運(yùn)算。在數(shù)字系統(tǒng)中,乘法器屬于基本的邏輯器件,并且在應(yīng)用過程中會(huì)發(fā)生不同類型的濾波器的設(shè)計(jì)、矩陣的運(yùn)算等。本文所設(shè)計(jì)的乘法器程序是4×4,最終得出了乘法運(yùn)算器的原理的框圖如5 所示。
除法運(yùn)算器實(shí)在移位和連減的基礎(chǔ)上完成的,而連減實(shí)際上也是基于數(shù)學(xué)上除法的基本原理。由于運(yùn)算方式采用的是二進(jìn)制,就能夠進(jìn)行移位操作。該計(jì)算器所采用的除法器運(yùn)用了一個(gè)可以控制移位的控制器,再加上由全加器組成的4 位減法器。當(dāng)做完減法,需要再次判斷是否夠減,也就是判斷有沒有發(fā)生錯(cuò)位,如果不夠減,需要將被減數(shù)進(jìn)行恢復(fù),移一位再減。
本次研究是采用FPGA(現(xiàn)場(chǎng)可編程邏輯器件)來設(shè)計(jì)查表式運(yùn)算器的,所采用的的語言包括VHDL,并進(jìn)行編程程序,最后也運(yùn)用Quartus Ⅱ軟件進(jìn)行仿真。雖然運(yùn)算器的功能不強(qiáng),只是簡(jiǎn)單的運(yùn)算功能,但采用諸多編程技術(shù),經(jīng)過經(jīng)過外接鍵盤輸入、LED數(shù)碼顯示來達(dá)到和完成運(yùn)算目標(biāo)。