改進(jìn)溢出判斷電路的設(shè)計(jì)與仿真研究
摘 要: 傳統(tǒng)數(shù)字芯片電路中,固定字長(zhǎng)有符號(hào)數(shù)的加法或減法運(yùn)算的溢出判斷需要等到加法/減法運(yùn)算結(jié)束之后才能進(jìn)行。以四位有符號(hào)數(shù)加法/減法運(yùn)算溢出判斷邏輯為例提出一種改進(jìn)的設(shè)計(jì)方式,能夠在加法/減法運(yùn)算結(jié)束之前對(duì)操作數(shù)進(jìn)行判斷,從而決定是否有溢出現(xiàn)象的發(fā)生。仿真發(fā)現(xiàn),改進(jìn)后的電路無(wú)論在規(guī)模上還是在運(yùn)算速度上都有很大改善。
關(guān)鍵詞: 改進(jìn);溢出判斷;電路設(shè)計(jì);仿真
溢出現(xiàn)象的判斷是固定字長(zhǎng)有符號(hào)加法運(yùn)算中必須要進(jìn)行的操作,傳統(tǒng)溢出現(xiàn)象的判斷要等到加法運(yùn)算結(jié)果產(chǎn)生以后才能進(jìn)行,本文電路設(shè)計(jì)能夠在加法運(yùn)算開(kāi)始之前通過(guò)對(duì)操作數(shù)的判斷而進(jìn)行溢出預(yù)判,從而減少了整個(gè)加法/減法運(yùn)算的時(shí)間。
溢出現(xiàn)象有可能出現(xiàn)在有符號(hào)數(shù)的加法或減法運(yùn)算中,在進(jìn)行固定字長(zhǎng)的有符號(hào)數(shù)加法或減法運(yùn)算時(shí),如果出現(xiàn)以下四種情況:正數(shù)與正數(shù)相加得到負(fù)數(shù)、正數(shù)減負(fù)數(shù)得到負(fù)數(shù)、負(fù)數(shù)減正數(shù)得到正數(shù)、負(fù)數(shù)加負(fù)數(shù)得到正數(shù),則認(rèn)為有溢出現(xiàn)象產(chǎn)生。
1 傳統(tǒng)溢出判斷電路的設(shè)計(jì)[1]
傳統(tǒng)溢出判斷電路的設(shè)計(jì)是建立在加法或減法運(yùn)算已經(jīng)產(chǎn)生結(jié)果的基礎(chǔ)上,如果用Overflag表示當(dāng)前的運(yùn)算方式,當(dāng)Overflag取值為“1”時(shí)表示的是進(jìn)行有符號(hào)數(shù)的加法或減法運(yùn)算,當(dāng)Overflag取值為“0”時(shí)表示的是進(jìn)行無(wú)符號(hào)數(shù)的加法或減法運(yùn)算。用Adder表示當(dāng)前的運(yùn)算方式是加法或者減法運(yùn)算。當(dāng)Adder取值為“1”時(shí)表示進(jìn)行加法運(yùn)算,當(dāng)Adder取值為“0”時(shí)表示進(jìn)行減法運(yùn)算。用A[3]、B[3]和R[3]分別表示兩個(gè)操作數(shù)和加減法運(yùn)算結(jié)果的最高位即符號(hào)位。用Overflow表示溢出結(jié)果,如果Overflow取值為“1”則表示產(chǎn)生了溢出;如果Overflow取值為“0”則表示沒(méi)有產(chǎn)生溢出。如果利用Carry-Lookahead Adder[2]算法來(lái)產(chǎn)生R[3],則結(jié)合對(duì)溢出產(chǎn)生條件的分析,可以得到溢出判斷電路圖如圖1所示。
2 具有預(yù)判功能的改進(jìn)溢出判斷電路的設(shè)計(jì)
具有預(yù)判功能的溢出判斷電路設(shè)計(jì)的原理是將Carry-Lookahead Adder[2]的算法與傳統(tǒng)溢出邏輯判斷邏輯算法相結(jié)合。如果將可能產(chǎn)生溢出的四種運(yùn)算都轉(zhuǎn)換為加法運(yùn)算,則在有可能產(chǎn)生溢出的四種運(yùn)算情況下只要數(shù)值位向符號(hào)位產(chǎn)生進(jìn)位或者符號(hào)位本身相加產(chǎn)生進(jìn)位就可以判斷有溢出產(chǎn)生。因此在電路實(shí)現(xiàn)上需要有兩部分功能塊,一部分是判斷當(dāng)前的運(yùn)算是否為可能產(chǎn)生溢出的四種運(yùn)算,將這部分功能塊稱(chēng)為初步判斷功能塊;另一部分是判斷數(shù)值位的最高位有無(wú)向符號(hào)位產(chǎn)生進(jìn)位或符號(hào)位本身相加有無(wú)進(jìn)位產(chǎn)生,將這部分功能塊稱(chēng)為進(jìn)位判斷功能塊。最后需要將兩部分功能塊結(jié)合在一起成為完整的溢出預(yù)判電路。
2.2 進(jìn)位判斷功能塊[2]
在對(duì)溢出現(xiàn)象進(jìn)行分析的過(guò)程中發(fā)現(xiàn),可能產(chǎn)生溢出的四種情況的運(yùn)算最后都可以轉(zhuǎn)換為加法運(yùn)算,具體分析如下:
正數(shù)與正數(shù)相加,原本就是加法運(yùn)算,所以毋須進(jìn)行轉(zhuǎn)換。
正數(shù)減負(fù)數(shù)相當(dāng)于正數(shù)與同負(fù)數(shù)有相同絕對(duì)取值的正數(shù)進(jìn)行相加。即只要將被減數(shù)轉(zhuǎn)換成與其本身有相同絕對(duì)取值的正數(shù)即可。
負(fù)數(shù)減正數(shù)相當(dāng)于負(fù)數(shù)與同正數(shù)有相同絕對(duì)取值的負(fù)數(shù)進(jìn)行相加。即只要將被減數(shù)轉(zhuǎn)換成與其本身有相同絕對(duì)取值的負(fù)數(shù)即可。
負(fù)數(shù)加負(fù)數(shù)本身就是加法運(yùn)算,毋須進(jìn)行轉(zhuǎn)換。
假設(shè)A為加法或減法運(yùn)算中的第一個(gè)操作數(shù)(被加數(shù)或被減數(shù)),B為第二個(gè)操作數(shù)(加數(shù)或減數(shù)),由以上分析可以發(fā)現(xiàn),A不需要做任何變換,而B(niǎo)要根據(jù)需要進(jìn)行變換,變換后的數(shù)字用D進(jìn)行表示。對(duì)B進(jìn)行變換的算法為:首先判斷條件“A[3]=0且B[3]=1且Adder=0”或“A[3]=1且B[3]=0且Adder=0”是否成立,如果條件成立,則D的值等于對(duì)B做減1運(yùn)算后再取反的數(shù)值,否則D=B。
操作數(shù)B做了變換后,A與B的運(yùn)算就轉(zhuǎn)換成A與D的加法運(yùn)算,運(yùn)算結(jié)果用R表示。通過(guò)前面的分析可以發(fā)現(xiàn)在可能產(chǎn)生溢出的四種運(yùn)算情況下(即:正數(shù)與正數(shù)相加、負(fù)數(shù)與負(fù)數(shù)相加、正數(shù)與負(fù)數(shù)相減、負(fù)數(shù)與正數(shù)相減),只要A與D的加法運(yùn)算的結(jié)果中符號(hào)位的符號(hào)與操作數(shù)符號(hào)相反就標(biāo)志著產(chǎn)生了溢出。用Ci+1表示第i位向第i+1位產(chǎn)生的進(jìn)位,則C3=1或C4=1且C3 和C4不能同時(shí)為1時(shí)標(biāo)志著溢出的產(chǎn)生。
通過(guò)對(duì)Carry-Lookahead Adder[2-3]的分析可以發(fā)現(xiàn)進(jìn)位的產(chǎn)生不必等到加法運(yùn)算結(jié)束,即:
完整的電路圖如圖3所示。
通過(guò)比較圖3與圖1的電路結(jié)構(gòu)發(fā)現(xiàn),改進(jìn)的溢出判斷邏輯電路圖在結(jié)構(gòu)上要精簡(jiǎn)許多。
2.4 邏輯驗(yàn)證
電路的功能驗(yàn)證利用TSPICE實(shí)現(xiàn),仿真得到的波形如圖4所示。在仿真波形圖中,從上至下信號(hào)名依次為Overflag,Adder,A[3],A[2],A[1],A[0],B[3],B[2],B[1],B[0]和Overflow。通過(guò)分析仿真波形圖中輸入的A、B、Adder、Overflag共17組驗(yàn)證數(shù)據(jù)與輸出信號(hào)Overflow的關(guān)系可以證明該電路能夠正確判斷溢出的產(chǎn)生情況。