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