本發(fā)明屬于集成電路設(shè)計(jì)中的運(yùn)算部件設(shè)計(jì)領(lǐng)域,尤其涉及一種基于不恢復(fù)余數(shù)的多功能定點(diǎn)除法器。
背景技術(shù):基本的運(yùn)算包括加、減、乘與除四種,以硬件分別為加/減法器、乘法器、除法器來(lái)實(shí)現(xiàn)其運(yùn)算。一般來(lái)說(shuō),加/減法器運(yùn)行運(yùn)算步驟為1~4運(yùn)算步驟,乘法器運(yùn)行的運(yùn)算步驟為2~8個(gè),而除法操作則為8個(gè)運(yùn)算步驟到60個(gè)運(yùn)算步驟不等,甚至更多。除法一般用得較少,優(yōu)先級(jí)常常被設(shè)置成較低,但是研究表明,如果忽視除法操作的實(shí)現(xiàn),在某些應(yīng)用中會(huì)造成顯著的性能降低。實(shí)現(xiàn)除法的復(fù)雜度高于加減乘法,其中一種原因是可以供選擇的除法算法以及硬件實(shí)現(xiàn)方式上較多,而具體設(shè)計(jì)一個(gè)除法器,則應(yīng)該根據(jù)處理器的定位及其需要來(lái)定。RNS(RedundantNumberSystem)是指數(shù)的冗余表示形式,冗余是指用于表示每一位的數(shù)值的個(gè)數(shù)大于數(shù)值的基數(shù)。對(duì)一般非冗余數(shù)值表示方式來(lái)說(shuō),數(shù)值個(gè)數(shù)是等于基數(shù)的。就比如表示一個(gè)十進(jìn)制數(shù),用的數(shù)值為0~9十個(gè)數(shù),即數(shù)值個(gè)數(shù)是與基數(shù)十同樣多的。而用三個(gè)數(shù)值表示一個(gè)二進(jìn)制數(shù),即是一種冗余表示法。例如,用三數(shù)值1、0、1(表示-1)來(lái)表示二進(jìn)制,那么011也可以表示為101,即表示數(shù)值為100-001=011。冗余表示法對(duì)同一個(gè)數(shù)可以有不同的表示形式,但是值是一樣的。如圖1,以二進(jìn)制B=2即基2為例子的除法過(guò)程示意,每次上的新商位為log2B=1位,對(duì)于恢復(fù)余數(shù)算法,過(guò)程基本與手算相類似。每次都預(yù)備新商位為1,以除數(shù)為減數(shù),若計(jì)算得的部分余數(shù)為負(fù)數(shù),丟棄計(jì)算所得的部分余數(shù),恢復(fù)減法前的被加數(shù)為部分余數(shù),即部分余數(shù)不允許為負(fù)數(shù),新商位改為上0。不恢復(fù)余數(shù)與恢復(fù)余數(shù)算法的主要區(qū)別便在于,部分余數(shù)允許為負(fù)數(shù),即不需要恢復(fù)加減運(yùn)算前的數(shù)據(jù),但多了一個(gè)做加法運(yùn)算的可能性。這種算法是針對(duì)恢復(fù)余數(shù)算法的不足而改進(jìn)的一種算法,恢復(fù)余數(shù)算法類似于普通的余數(shù)算法,以二進(jìn)制基2除法為例,若上商為1時(shí),減去除數(shù)后結(jié)果為負(fù)數(shù),則恢復(fù)原數(shù),并改上商為0。而不恢復(fù)余數(shù)法避免了這個(gè)問(wèn)題,并不需要把減法過(guò)后的結(jié)果恢復(fù)成減法前的結(jié)果。而若減法結(jié)果為負(fù),則商為1(表示-1)。只是需要一個(gè)轉(zhuǎn)換表示形式的過(guò)程,但是設(shè)計(jì)的轉(zhuǎn)換過(guò)程是很簡(jiǎn)便并是實(shí)時(shí)的,即并沒(méi)有給電路帶來(lái)較多的復(fù)雜性。不恢復(fù)余數(shù)算法的結(jié)果需要調(diào)整,原因在于:1、按照整數(shù)除法的數(shù)學(xué)定義,得到的余數(shù)需要與被除數(shù)同號(hào)。算法的商選取不能保證這一點(diǎn),若余數(shù)結(jié)果有不同,則需加上或減去除數(shù),相應(yīng)的商也需要加上或減1。2、被除數(shù)需要先變?yōu)檎龜?shù)再進(jìn)行除法運(yùn)算,所以最后需要對(duì)商及余數(shù)的符號(hào)進(jìn)行調(diào)整。3、由以上原因,商格式轉(zhuǎn)換造成的末位補(bǔ)1和由于余數(shù)調(diào)整造成的減1,商還需要另外的調(diào)整。也就是說(shuō),一般還需要進(jìn)行三個(gè)處理步驟,余數(shù)調(diào)整,余數(shù)符號(hào)調(diào)整和商調(diào)整。
技術(shù)實(shí)現(xiàn)要素:為解決上述問(wèn)題,本發(fā)明提出了一種不恢復(fù)余數(shù)的除法器,使得能夠進(jìn)行無(wú)符號(hào)或有符號(hào)定點(diǎn)除法運(yùn)算,以支持余數(shù)修正和商修正,并能夠在固定的周期數(shù)目、固定的指令排列運(yùn)算步驟后得出正確結(jié)果,還能夠在運(yùn)算過(guò)程中隨時(shí)讀取中間計(jì)算結(jié)果,并且保證運(yùn)算正確性。本發(fā)明公開(kāi)的一種不恢復(fù)余數(shù)的除法器,其包括:數(shù)據(jù)預(yù)處理模塊,其用于對(duì)外部輸入數(shù)據(jù)做預(yù)處理,并輸出值數(shù)據(jù)運(yùn)算模塊;數(shù)據(jù)運(yùn)算模塊,其用于根據(jù)外部輸入數(shù)據(jù)做不恢復(fù)余數(shù)除法中的加減迭代運(yùn)算,得到部分余數(shù)結(jié)果和部分商結(jié)果,并在余數(shù)修正階段與商修正階段對(duì)所述部分余數(shù)結(jié)果和部分商結(jié)果進(jìn)行修正,然后輸出余數(shù)結(jié)果、修正后的余數(shù)結(jié)果、商結(jié)果和修整后的商結(jié)果;數(shù)據(jù)輸出模塊,其用于根據(jù)控制模塊輸出的控制信號(hào)選擇余數(shù)結(jié)果與修正后的余數(shù)結(jié)果之一和商結(jié)果與修正后的商結(jié)果之一輸出;控制模塊,其用于輸出控制信號(hào),以控制其他模塊進(jìn)行相應(yīng)的數(shù)據(jù)處理和數(shù)據(jù)輸出。本發(fā)明提出的上述除法器在固定運(yùn)算步驟可完成一個(gè)Nbit的除法運(yùn)算,在數(shù)個(gè)運(yùn)算步驟內(nèi)按照一定的操作序列與一定的循環(huán)次數(shù)重復(fù)使用該模塊運(yùn)算,最后得出Nbit的定點(diǎn)數(shù)據(jù)商與余數(shù)運(yùn)算結(jié)果。本發(fā)明公開(kāi)的上述除法器是一種基于傳統(tǒng)的RNS算法的改進(jìn)型除法器裝置,RNS算法在基本的除法算法上引入了中間數(shù)據(jù)(部分余數(shù))的冗余表示形式,硬件邏輯對(duì)冗余形式數(shù)據(jù)的處理速度遠(yuǎn)遠(yuǎn)高于對(duì)一般非冗余形式數(shù)據(jù)的處理速度,RNS算法的速度較傳統(tǒng)基本算法有較大的提升,在RNS算法此基礎(chǔ)上,本發(fā)明更進(jìn)一步的改進(jìn)可直接計(jì)算有符號(hào)或無(wú)符號(hào)補(bǔ)碼形式的數(shù)據(jù)除法,節(jié)省了數(shù)據(jù)預(yù)先轉(zhuǎn)換和數(shù)據(jù)結(jié)果符號(hào)糾正過(guò)程,這樣也大大節(jié)省了計(jì)算時(shí)間。在功能上,本發(fā)明可以較小的代價(jià)自行對(duì)數(shù)據(jù)計(jì)算結(jié)果進(jìn)行糾正,即把糾正邏輯融入除法模塊中。所以,該除法器具有能夠計(jì)算有無(wú)符號(hào)定點(diǎn)數(shù)的除法功能,并且能夠進(jìn)行修正余數(shù)與修正商處理,且都能在一次運(yùn)算步驟內(nèi)完成,能夠在固定周期后得出無(wú)誤差正確結(jié)果,還能夠在運(yùn)算過(guò)程中隨時(shí)讀取中間計(jì)算結(jié)果。從上述技術(shù)方案可以看出,本發(fā)明具有以下有益效果:在較少步驟內(nèi)完成N位定點(diǎn)除法計(jì)算。對(duì)輸入的除數(shù)與被除數(shù)的符號(hào)無(wú)限制。對(duì)輸入的除數(shù)與被除數(shù)是否為有無(wú)符號(hào)類型無(wú)限制??蛇M(jìn)行余數(shù)與商的修正??稍谌我膺\(yùn)算步驟讀取除法器的中間結(jié)果值。不需要對(duì)被除數(shù)的符號(hào)修正做預(yù)處理,傳統(tǒng)都需要把被除數(shù)先處理成正數(shù)再進(jìn)行計(jì)算,使得修正階段也減少了一個(gè)符號(hào)修正運(yùn)算步驟。附圖說(shuō)明圖1是現(xiàn)有技術(shù)中二進(jìn)制B=2即基2為例的除法過(guò)程示意圖。圖2是根據(jù)本發(fā)明第一優(yōu)選實(shí)施例的不恢復(fù)余數(shù)除法器的結(jié)構(gòu)示意圖。圖3是根據(jù)本發(fā)明另一優(yōu)選實(shí)施例的不恢復(fù)余數(shù)除法器的結(jié)構(gòu)示意圖。圖4是本發(fā)明中不恢復(fù)余數(shù)除法器結(jié)果寄存器主要部分的數(shù)據(jù)組成與數(shù)據(jù)流示意圖。具體實(shí)施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。本發(fā)明公開(kāi)了一種不恢復(fù)余數(shù)的除法器。圖2所示為本發(fā)明一優(yōu)選實(shí)施例中不恢復(fù)余數(shù)的除法器結(jié)構(gòu)示意圖。如圖2所示,該除法器包括四大部分,即數(shù)據(jù)預(yù)處理邏輯101、數(shù)據(jù)運(yùn)算器102、數(shù)據(jù)輸出邏輯103以及控制邏輯104。本發(fā)明公開(kāi)的上述不恢復(fù)余數(shù)的除法器在功能上可進(jìn)行有無(wú)符號(hào)除法運(yùn)算,并且融合了不恢復(fù)的加減運(yùn)算,余數(shù)修正運(yùn)算與商修正運(yùn)算。該除法器首先需要對(duì)指令進(jìn)行譯碼,通過(guò)譯碼得到操作類型再對(duì)輸入數(shù)據(jù)進(jìn)行選取和預(yù)處理,然后對(duì)選取或處理后的數(shù)據(jù)進(jìn)行對(duì)應(yīng)運(yùn)算,該除法器采取了內(nèi)部并行運(yùn)算機(jī)制,即可同時(shí)對(duì)多個(gè)數(shù)據(jù)進(jìn)行內(nèi)部處理,這也使得輸出需要經(jīng)過(guò)結(jié)果選擇。對(duì)于一個(gè)除法運(yùn)算指令,該除法器按照一定的操作序列與一定的循環(huán)次數(shù)重復(fù)使用該除法器的內(nèi)部模塊進(jìn)行運(yùn)算,最后得出N位的定點(diǎn)數(shù)據(jù)商與余數(shù)運(yùn)算結(jié)果。其中,一系列的操作序列包括:DIVS運(yùn)算操作,即針對(duì)輸入的數(shù)據(jù)進(jìn)行有符號(hào)與無(wú)符號(hào)數(shù)據(jù)類型以及正負(fù)性辨別等而進(jìn)行的預(yù)處理操作,此階段除法器主要工作是從外部輸入除數(shù)與被除數(shù)數(shù)據(jù),并計(jì)算出帶符號(hào)位的新商位,以及計(jì)算出從2至B-1倍除數(shù)的數(shù)據(jù)結(jié)果;DIVQ運(yùn)算操作,其為除法運(yùn)算中的基本迭代運(yùn)算操作,即以不恢復(fù)余數(shù)方法為主體的操作,此階段除法器的主要工作是從內(nèi)部輸入中間結(jié)果數(shù)據(jù)進(jìn)行計(jì)算,并計(jì)算出不帶符號(hào)位的新商位;MDIVR運(yùn)算操作,其對(duì)DIVQ迭代運(yùn)算后的結(jié)果進(jìn)行余數(shù)正誤性的辨別及其修正;MDIVQ運(yùn)算操作,其對(duì)DIVQ迭代運(yùn)算后的結(jié)果進(jìn)行商正誤性的辨別及其修正;RDIV操作,其對(duì)運(yùn)算結(jié)果進(jìn)行讀取操作。當(dāng)除法器做DIVS運(yùn)算操作時(shí),除法器對(duì)外部數(shù)據(jù)進(jìn)行采樣,同時(shí)判斷計(jì)算的數(shù)據(jù)類型并開(kāi)始處理,對(duì)于無(wú)符號(hào)和有符號(hào)數(shù)據(jù)的除法運(yùn)算在此操作的內(nèi)部處理有所不同。當(dāng)除法器做DIVQ運(yùn)算時(shí),除法器進(jìn)行內(nèi)部循環(huán)計(jì)算,對(duì)于有符號(hào)和無(wú)符號(hào)數(shù)據(jù)的除法運(yùn)算的處理一樣。當(dāng)除法器做MDIVR運(yùn)算時(shí),則根據(jù)是否需要做余數(shù)調(diào)整的控制信號(hào)做調(diào)整。當(dāng)除法器做MDIVQ運(yùn)算時(shí),則根據(jù)是否需要做商結(jié)果調(diào)整的控制信號(hào)做調(diào)整。下面根據(jù)除法器的各個(gè)模塊詳細(xì)介紹除法器的內(nèi)部結(jié)構(gòu)及其操作。(一)數(shù)據(jù)預(yù)處理邏輯101如圖2所述,所述數(shù)據(jù)預(yù)處理邏輯101包括輸入數(shù)處理模塊和多路選通器,所述輸入數(shù)處理模塊用于接收輸入數(shù)據(jù),所述輸入數(shù)據(jù)包括外部輸入數(shù)據(jù)和內(nèi)部循環(huán)輸出數(shù)據(jù),所述多路選通器用于從控制邏輯104接收控制指令,所述控制指令包括選通DIVS、DIVQ、MDIVR和MDIVQ通道的控制指令。在DIVS運(yùn)算操作階段,外部指令通過(guò)控制邏輯的譯碼后產(chǎn)生輸入使能信號(hào),以控制輸入數(shù)處理模塊接收到的輸入數(shù)據(jù)為外部輸入數(shù)據(jù),所述外部輸入數(shù)據(jù)包括除數(shù)與被除數(shù),其將被除數(shù)符號(hào)擴(kuò)展為2N+log2B或更多位的數(shù)據(jù)以便內(nèi)部計(jì)算需要,如圖4,其中N+log2B作為被加數(shù)提供給數(shù)據(jù)運(yùn)算模塊102,低N-1位即被除數(shù)的低N-1位將輸入至數(shù)據(jù)輸出模塊103的結(jié)果寄存器中。并將除數(shù)擴(kuò)展為N+log2B位,其中N為輸入數(shù)據(jù)的位寬,其符號(hào)擴(kuò)展與所述被除數(shù)的數(shù)據(jù)類型及其符號(hào)性質(zhì)相關(guān),若為有符號(hào)運(yùn)算,則為符號(hào)擴(kuò)展,否則為0擴(kuò)展(視為正數(shù));之后,所述多路選通器將擴(kuò)展后的被除數(shù)的之前所述的N+log2B位和N+log2B位的除數(shù)輸出到數(shù)據(jù)運(yùn)算模塊102。同時(shí)將把數(shù)據(jù)運(yùn)算模塊102其他各個(gè)運(yùn)算模塊中計(jì)算所得的各個(gè)倍除數(shù)的數(shù)據(jù)也通過(guò)數(shù)據(jù)輸出模塊103放入相應(yīng)的寄存器中,以便以后的操作使用。在DIVQ運(yùn)算操作階段,所述輸入數(shù)處理模塊接收的輸入數(shù)據(jù)為內(nèi)部循環(huán)輸出數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)如圖4中的結(jié)果寄存器,主要為log2B+N位部分余數(shù),被除數(shù)剩余位以及部分商位,輸入還包括寄存的各個(gè)倍數(shù)的除數(shù)數(shù)據(jù),AQ位等等,所述AQ位用來(lái)表示所選取的部分余數(shù)結(jié)果是否與除數(shù)同號(hào)。即為DIVS運(yùn)算操作階段數(shù)據(jù)輸出模塊103的輸出結(jié)果;該內(nèi)部循環(huán)輸出數(shù)據(jù)包括2N+log2B位的預(yù)處理輸出數(shù)據(jù)以及N+log2B位的各個(gè)倍數(shù)的除數(shù)數(shù)據(jù)。所述多路選通器根據(jù)控制邏輯104的控制信號(hào)將所述預(yù)處理輸出數(shù)據(jù)中的高N+log2B位,即如圖4中前一次操作作為被加數(shù)的N+log2B位數(shù)據(jù)和N+log2B位除數(shù)選通輸出至數(shù)據(jù)運(yùn)算模塊102,其中2倍至B-1倍除數(shù)數(shù)據(jù)不需要通過(guò)選通便可直接送入數(shù)據(jù)運(yùn)算模塊102的第2至第B-1個(gè)運(yùn)算器中。因?yàn)樵谛拚鄶?shù)MDIVR或修正商MDIVQ階段時(shí)候,運(yùn)用到的第一個(gè)運(yùn)算模塊被加數(shù)可能是不同的;該階段多路選通器還將接收到的所述內(nèi)部循環(huán)輸出數(shù)據(jù)直接輸出至數(shù)據(jù)輸出模塊103,用于在數(shù)據(jù)輸出模塊103做選通輸出使用。在MDIVR運(yùn)算操作階段,所述輸入數(shù)處理模塊接收的輸入數(shù)據(jù)也為內(nèi)部循環(huán)輸出數(shù)據(jù),即DIVQ運(yùn)算操作階段數(shù)據(jù)輸出模塊103的輸出結(jié)果,如圖4,DIVQ階段最后一次循環(huán),該輸出結(jié)果為包含待修正余數(shù)計(jì)算結(jié)果和待修正商計(jì)算結(jié)果的2N+log2B位的中間計(jì)算結(jié)果,其中高N+log2B位為待修正余數(shù)計(jì)算結(jié)果,低N位為待修正商計(jì)算結(jié)果。所述輸入數(shù)據(jù)處理模塊提取所述2N+log2B位的中間計(jì)算結(jié)果的高N+log2B位進(jìn)行邏輯右移位操作,得到帶符號(hào)擴(kuò)展的N+log2B位數(shù)據(jù),此N+log2B位數(shù)據(jù)即為需要修正的部分余數(shù);所述多路選通器將所述進(jìn)行了移位操作的N+log2B位部分余數(shù)數(shù)據(jù)和N+log2B位的除數(shù)選通輸出到數(shù)據(jù)運(yùn)算模塊102中;該階段多路選通器還將接收到的所述內(nèi)部循環(huán)輸出數(shù)據(jù)直接輸出至數(shù)據(jù)輸出模塊103。在MDIVQ運(yùn)算操作階段,所述輸入數(shù)處理模塊接收的輸入數(shù)據(jù)依舊為內(nèi)部循環(huán)輸出數(shù)據(jù),即在MDIVR運(yùn)算操作階段直接輸出至數(shù)據(jù)輸出模塊103的所述內(nèi)部循環(huán)輸出數(shù)據(jù),如圖4,即在DIVQ階段的最后一次循環(huán)中的低N位部分商,此N位部分商即為待修正商,在上一階段MDIVR階段不需要使用,即直接送至輸出端保持給此階段MDIVQ使用。此階段所接受到的內(nèi)部循環(huán)數(shù)據(jù)為MDIVR操作階段所得到的結(jié)果,其中包含N+log2B位已經(jīng)修正完成的余數(shù)數(shù)據(jù),以及在MDIVR階段保持的低N位待修正的部分商。所述輸入數(shù)處理模塊對(duì)所接收的輸入數(shù)據(jù)的低N位即部分商結(jié)果進(jìn)行符號(hào)位擴(kuò)展成為N+log2B位,該低N位即待修正的商計(jì)算結(jié)果,然后通過(guò)多路選通器選通后,將該經(jīng)過(guò)符號(hào)位擴(kuò)展的N+log2B位數(shù)據(jù)和N+log2B位除數(shù)輸出至所述數(shù)據(jù)運(yùn)算模塊102中。(二)數(shù)據(jù)運(yùn)算模塊102所述數(shù)據(jù)運(yùn)算模塊102用于對(duì)經(jīng)過(guò)數(shù)據(jù)預(yù)處理邏輯101處理后的數(shù)據(jù)進(jìn)行相應(yīng)運(yùn)算,該模塊包括數(shù)個(gè)運(yùn)算器以便并行計(jì)算,運(yùn)算器的數(shù)量可根據(jù)需要在設(shè)計(jì)中進(jìn)行配置,根據(jù)計(jì)算并行性要求可增減運(yùn)算模塊,若設(shè)計(jì)是基B(B為2的次冪整數(shù))的除法器,則運(yùn)算模塊需要B-1個(gè),那么計(jì)算步驟中DIVQ運(yùn)算則需要N/log2B(N為被除數(shù)位寬,每次計(jì)算出log2B位新商,結(jié)果向上取整數(shù))次運(yùn)算。其主要運(yùn)算功能為加減運(yùn)算與移位,由控制邏輯104產(chǎn)生的控制信號(hào)進(jìn)行控制。每個(gè)運(yùn)算器中主要包括加法器、移位器和數(shù)據(jù)校驗(yàn)器。所述加法器模塊是運(yùn)算器的主要部件,用于從數(shù)據(jù)預(yù)處理邏輯模塊101接收兩個(gè)N+log2B位的數(shù)據(jù),以及從控制模塊104接收加減控制信號(hào),用于加或減運(yùn)算,其中從數(shù)據(jù)預(yù)處理模塊101接收的N+log2B位除數(shù)作為加數(shù)或減數(shù),而另外一個(gè)N+log2B位作為被加數(shù)或被減數(shù),其輸出一個(gè)N+log2B+1位的結(jié)果,將其B-1個(gè)輸出結(jié)果送入數(shù)據(jù)輸出模塊103;所述數(shù)據(jù)校驗(yàn)器模塊主要功能是為了驗(yàn)證輸入數(shù)據(jù)的相加減是否等于預(yù)期的特定值的邏輯,比加法器延時(shí)大大減小;其在MDIVR運(yùn)算操作階段,用于快速校驗(yàn)輸入的兩個(gè)N+log2B位數(shù)據(jù),即所述進(jìn)行了移位操作的N+log2B位部分余數(shù)數(shù)據(jù)和N+log2B位的除數(shù)相加或相減的結(jié)果是否為0,并將判斷結(jié)果提供給控制模塊104以判斷余數(shù)修正使能信號(hào)是否開(kāi)啟,若兩個(gè)N+log2B位的輸入數(shù)據(jù)相加或相減結(jié)果為0,則說(shuō)明余數(shù)結(jié)果為1倍或者-1倍除數(shù),需要對(duì)余數(shù)進(jìn)行修正,因此控制模塊104輸出的修正使能信號(hào)為1,即需要修正,也就是選通修正后的結(jié)果輸出,若不為0,則需要進(jìn)一步的邏輯運(yùn)算,即控制邏輯104根據(jù)其它的信號(hào)做進(jìn)一步判斷。所述移位器則通過(guò)對(duì)除數(shù)的移位達(dá)到快速翻倍,即在DIVS階段需要利用各個(gè)運(yùn)算部件進(jìn)行計(jì)算從1至B-1倍除數(shù)的值,移位可達(dá)到快速生成結(jié)果的效果。在DIVS階段,此階段的目的主要有兩個(gè),一是做第一次加減迭代運(yùn)算,即在做有符號(hào)除法時(shí),計(jì)算得到商的符號(hào)位,在做無(wú)符號(hào)除法時(shí),得到商結(jié)果的最高位,二是計(jì)算出2倍至B-1倍除數(shù)結(jié)果。如圖1中,傳統(tǒng)的除法計(jì)算,每次加減迭代便得出部分余數(shù),而部分余數(shù)的需要有收斂要求,即其結(jié)果需要大于等于0,并小于除數(shù)。而本設(shè)計(jì)所用的是不恢復(fù)余數(shù)算法,便可以容忍其部分余數(shù)可以為負(fù)數(shù),即要求其絕對(duì)值需要小于除數(shù)。第一次迭代加減運(yùn)算,即把被除數(shù)的最高1位符號(hào)擴(kuò)展為N+log2B位與從N位擴(kuò)展至N+log2B位的除數(shù)做加減迭代運(yùn)算,其結(jié)果也必符合收斂條件(除數(shù)不能為0)。而還需要計(jì)算出2倍至B-1倍除數(shù)結(jié)果的原因是,因?yàn)槭腔鵅的除法器,如圖1,每次在部分余數(shù)后添的位數(shù)為log2B位(被除數(shù)的后續(xù)log2B位,之后的描述可能為左移log2B位),根據(jù)之前的收斂條件,所得到的部分余數(shù)絕對(duì)值小于一倍除數(shù),那么在增添了log2B位尾數(shù)后,其值的范圍在-(B-1)倍至B-1倍除數(shù)之間,依舊以為了得到符合收斂性質(zhì)的部分余數(shù),那么需要將已添加log2B位尾數(shù)的部分余數(shù)與1倍至B-1倍除數(shù)相加減(此操作在DIVQ階段完成),若上次得到的部分余數(shù)為負(fù)數(shù),即其值的范圍為-(B-1)倍至0之間,則做加法,否則做減法。在B-1個(gè)運(yùn)算結(jié)果中,必然會(huì)存在一個(gè)符合收斂條件的部分余數(shù)結(jié)果。有一個(gè)特性,符合收斂條件的部分余數(shù)計(jì)算結(jié)果雖然是N+log2B位寬,但實(shí)際有效位還是低N位(因?yàn)槠浣^對(duì)值小于N位的除數(shù)),這就在下次加減迭代運(yùn)算時(shí)候在后邊新添log2B位尾數(shù)給予了信息保留的保障,即新添尾數(shù)并丟棄高log2B位重新組成N+log2B位的迭代被加數(shù)的數(shù)據(jù)信息沒(méi)有丟失。2倍至B-1倍除數(shù)結(jié)果的計(jì)算使用第2至第B-1個(gè)運(yùn)算模塊計(jì)算而得,若B=2,則不需要計(jì)算更多倍的除數(shù)。數(shù)據(jù)運(yùn)算模塊102中B-1個(gè)運(yùn)算模塊其中的第一個(gè)運(yùn)算模塊需要對(duì)數(shù)據(jù)預(yù)處理模塊101所提供的加數(shù)與被加數(shù)做第一次迭代加減運(yùn)算,同時(shí)數(shù)據(jù)運(yùn)算模塊102中其他B-2個(gè)運(yùn)算模塊中的加法器還需要與移位器一同計(jì)算出2倍至B-1倍除數(shù)的結(jié)果,送至循環(huán)寄存器保存,以后便可重復(fù)利用,即在DIVQ階段的加減迭代過(guò)程中,各個(gè)倍數(shù)除數(shù)的結(jié)果便作為在DIVQ階段各個(gè)運(yùn)算模塊的加減運(yùn)算的加數(shù)。在DIVQ階段,在此階段主要是做一種操作,即做加減迭代運(yùn)算,如圖1傳統(tǒng)的除法計(jì)算中,部分余數(shù)在新添低位數(shù)據(jù)后與除數(shù)做迭代運(yùn)算,如此反復(fù)多次,直到最后一位被除數(shù)被添入計(jì)算。本設(shè)計(jì)為每次新添log2B位數(shù)據(jù),并可能做加或減運(yùn)算。每次做加減迭代,新添尾數(shù)后的部分余數(shù)都需要與1倍至B-1倍各個(gè)倍數(shù)的除數(shù)數(shù)據(jù)相加減,得出這一階段的部分余數(shù),以提供下一次DIVQ的加減迭代運(yùn)算。與不同倍數(shù)除數(shù)相加減,目的是為了得出一個(gè)符合收斂性的加減結(jié)果,在眾多運(yùn)算器的加減運(yùn)算中,一般會(huì)存在兩個(gè)結(jié)果符合收斂條件,一個(gè)大于0,一個(gè)小于0。并且相差一倍除數(shù),即若是做減法所得,如果是與X倍除數(shù)相減得出的中間結(jié)果為正,并符合收斂條件,那么與X+1倍除數(shù)相減得出的中間結(jié)果則為負(fù),可能也符合收斂條件。那么此時(shí)與小于X倍除數(shù)相減的結(jié)果必都為正數(shù),與大于X倍除數(shù)相減的必都為負(fù)數(shù)。所以可以僅僅從B-1個(gè)計(jì)算結(jié)果的符號(hào)判斷出結(jié)果符合收斂性的加減結(jié)果必在符號(hào)不同的相鄰兩加減運(yùn)算中。通過(guò)符號(hào)判斷,可以鎖定出兩個(gè)符合收斂性的結(jié)果。而因?yàn)榕袛喾?hào)是根據(jù)最高位判斷,那么數(shù)據(jù)0可判斷為正數(shù),符合收斂條件,那么此時(shí)便只有一個(gè)結(jié)果數(shù)據(jù)符合收斂性。所以我們選取那兩個(gè)符合收斂性結(jié)果符號(hào)為正的數(shù)據(jù)作為部分余數(shù)。而此時(shí)是與X倍除數(shù)做的加減迭代結(jié)果,那么同時(shí)也可得到新商位便是X,用log2B位寬數(shù)據(jù)表示。若B=2,即基2的除法器,那么其運(yùn)算器只有B-1=1個(gè),那么就只有一個(gè)結(jié)果,而此結(jié)果必收斂,因?yàn)?,假定上一周期的部分余?shù)符合收斂性質(zhì),即有絕對(duì)值小于一倍除數(shù),在新添一位數(shù)據(jù)后,即左移一位后,其值的絕對(duì)值小于2倍除數(shù)。若為正數(shù),則加減迭代的時(shí)候與除數(shù)做減法,若為負(fù)數(shù),則與除數(shù)做加法,這樣便可以保證結(jié)果的收斂性質(zhì)。數(shù)據(jù)運(yùn)算模塊102計(jì)算由預(yù)處理模塊101所提供的加數(shù)與被加數(shù)做加減運(yùn)算所用,各個(gè)運(yùn)算模塊中被加數(shù)應(yīng)該為預(yù)處理模塊101提供的N+log2B位寬的被加數(shù),即都為上次循環(huán)所得的部分余數(shù)在低位新添log2B位數(shù)據(jù)而得,如圖4的DIVQ階段第一次循環(huán)部分所示。原高log2B位已摒棄,新添位如圖1中部分余數(shù)新添的位,此設(shè)計(jì)新添的位寬為log2B位,是被除數(shù)的后續(xù)log2B位數(shù)據(jù)。而加數(shù)應(yīng)該為在DIVS計(jì)算所得并保存的1倍至B-1倍除數(shù)的數(shù)據(jù),其位寬也都符號(hào)擴(kuò)展為N+log2B位,總之該數(shù)據(jù)運(yùn)算模塊102做的計(jì)算便是,其B-1個(gè)運(yùn)算模塊分別將部分余數(shù)與1倍至B-1倍除數(shù)做加減運(yùn)算,并將此所得的B-1個(gè)位寬為N+log2B+1加減結(jié)果發(fā)送給數(shù)據(jù)輸出模塊103,輸出多出的一位是加法器的進(jìn)位,數(shù)據(jù)輸出模塊103會(huì)如上述,將通過(guò)判斷各個(gè)結(jié)果的符號(hào)來(lái)選取相應(yīng)的收斂結(jié)果作為部分余數(shù),同時(shí)得出此部分余數(shù)結(jié)果所對(duì)應(yīng)的除數(shù)倍數(shù)X,作為新商位。DIVQ循環(huán)多次,直到被除數(shù)的各個(gè)位都添完畢??赡軙?huì)出現(xiàn)在最后一次迭代的時(shí)候部分余數(shù)新添的位不夠log2B位,但設(shè)計(jì)的被除數(shù)位寬一旦確定,最后一次所需要添加的位寬便可確定,最后一次部分余數(shù)添加數(shù)據(jù)在后邊補(bǔ)0至log2B位即可。在MDIVR階段,與MDIVQ階段,便是做修正運(yùn)算,運(yùn)算器對(duì)預(yù)處理模塊101提供的待修正的余數(shù)與商及其修正量進(jìn)行加減運(yùn)算。在MDIVR階段,調(diào)整余數(shù),當(dāng)B=2時(shí)候,其部分余數(shù)結(jié)果可能為負(fù)數(shù)與正數(shù),除法的要求便是除數(shù)的余數(shù)結(jié)果需要與被除數(shù)相同,所以可能需要有所調(diào)整,而僅需要做一次加減一倍除數(shù)的運(yùn)算便可,做加或減通過(guò)控制邏輯104控制。即部分余數(shù)是符合收斂條件的,若部分余數(shù)為正數(shù),則需要將其變更為負(fù)數(shù),除數(shù)為正時(shí)做減法,除數(shù)為負(fù)時(shí)做加法;若部分余數(shù)為負(fù)數(shù)則反之。若有調(diào)整,因?yàn)榧?減了一倍除數(shù),那么商需要做相應(yīng)的調(diào)整加1或減1。當(dāng)B>2時(shí)候(B為2的指數(shù)倍),每次做加減迭代運(yùn)算時(shí)的部分余數(shù)新添的位為log2B位,那么便會(huì)出現(xiàn)最后一次DIVQ操作時(shí)候可能不足log2B位情況,采用的是在后面填補(bǔ)0的做法。那么便會(huì)使得余數(shù)結(jié)果存在誤差。現(xiàn)來(lái)計(jì)算誤差及其修補(bǔ)方式,假設(shè)需要填補(bǔ)G位0(G<log2B,為固定的常數(shù)),那么最后一次的部分余數(shù)其實(shí)應(yīng)該為log2B+N-G位,設(shè)此數(shù)為S,S便為應(yīng)當(dāng)?shù)募訙p迭代部分余數(shù),真實(shí)余數(shù)為R,此次新商位為Q,除數(shù)為D,Q的位寬應(yīng)為log2B-G位,即與最后剩的被除數(shù)位一致。那么有S=Q·D+R。而實(shí)際是在最后多填補(bǔ)了G位0,設(shè)實(shí)際的部分余數(shù)為S′,新商為Q′。其中S′={S,G′b0}(花括號(hào)為位拼接運(yùn)算,表示在S后邊添G位二進(jìn)制0),那么便是有S′={S,G′b0}={Q,G′b0}·D+{R,G′b0}假若{R,G′b0}=x·D+R′,R′是符合收斂條件的一個(gè)數(shù)。那么就有S′={Q,G′b0}·D+x·D+R′={Q,x}·D+R′令Q′={Q,x},那么就有S′=Q′·D+R′。也就是說(shuō)實(shí)際得出的新商位為Q′,實(shí)際得出的余數(shù)為R′。而可通過(guò)關(guān)系式{R,G′b0}=x·D+R′還原真實(shí)余數(shù)的值,x為實(shí)際新商Q′的低G位。而x·D(x∈[1,B-1))已經(jīng)計(jì)算出,還原真實(shí)R只需要直接做加減后移位即可,在考慮余數(shù)結(jié)果與被除數(shù)的符號(hào)需要相同問(wèn)題,由于部分余數(shù)選擇的都為正數(shù),那么做符號(hào)調(diào)整便是減去1倍除數(shù),那么修正運(yùn)算便是x·D+R`-{1,G′b0}·D=-({1,G′b0-x})·D+R`其中{1,G′b0}-x的值也屬于[1,B-1),由于G不大,計(jì)算{1,G′b0}-x的值可用簡(jiǎn)單的邏輯即可完成,最后只需要在1倍至B-1倍除數(shù)的運(yùn)算部件中選擇相應(yīng)倍數(shù)的結(jié)果輸出即可。而MDIVQ運(yùn)算則調(diào)整商運(yùn)算,在B=2時(shí)候,修正余數(shù)只做加減一倍除數(shù)運(yùn)算,調(diào)整商值只需要調(diào)整加減1便可。而在B>2時(shí)候(B為2的指數(shù)倍),雖然最后調(diào)整是用x倍的余數(shù)做加減調(diào)整,但此x位是超出原有位數(shù)的x位,猶如小數(shù)點(diǎn)后的數(shù),本設(shè)計(jì)做的是整數(shù)除法,故對(duì)商的影響并沒(méi)有達(dá)到x的數(shù)值差。所以在考慮到余數(shù)符號(hào)修正的情況,商的調(diào)整仍然是只需要調(diào)整加減1便可。因?yàn)樵谟鄶?shù)修正階段是加或減去除數(shù),那么多加的或多減的則必須把它反映在商上,例如8/3=3余下-1,這個(gè)結(jié)果貌似也對(duì),修正必須對(duì)此余數(shù)加一倍除數(shù)3,那么余數(shù)應(yīng)該為-1+3=2,同時(shí),因?yàn)榧恿艘槐兜挠鄶?shù),商也需要減掉1,即商為3-1=2,那么修正后結(jié)果便是8/3=2余2。設(shè)計(jì)到x,這可用例子8/3=2.5余0.5表示。余數(shù)調(diào)整會(huì)精確到此小數(shù)點(diǎn)后。即會(huì)做如此調(diào)整0.5+0.5*3=2,而在商調(diào)整階段只會(huì)把2.5看作是2(無(wú)視小數(shù)點(diǎn)后數(shù)字),而通過(guò)判斷是否對(duì)2做調(diào)整,而此例子會(huì)判斷不做調(diào)整。即結(jié)果會(huì)是2。(三)數(shù)據(jù)輸出模塊103數(shù)據(jù)輸出模塊103用于對(duì)數(shù)據(jù)運(yùn)算模塊所得的各個(gè)通路的數(shù)據(jù)進(jìn)行選擇輸出,其包括商位計(jì)算模塊、運(yùn)算結(jié)果后處理模塊以及多路輸出選通器。所述商位計(jì)算模塊用于計(jì)算該循環(huán)所上的商位,同時(shí)也計(jì)算AQ標(biāo)識(shí)位,AQ標(biāo)識(shí)位作為內(nèi)部輸出提供給控制邏輯104,以用于后續(xù)循環(huán)的控制信號(hào)的生成,包括下一次循環(huán)運(yùn)算器中的加減控制信號(hào)等。所述商位計(jì)算模塊僅在DIVS和DIVQ階段執(zhí)行商位計(jì)算,在DIVS操作階段,從整個(gè)除法器模塊的功能看,如果是做有符號(hào)除法,那么此階段便是需要得出一個(gè)商結(jié)果的符號(hào)位,如果做無(wú)符號(hào)除法,那便是做第一次加減迭代運(yùn)算,2至B-1倍除數(shù)數(shù)據(jù)在此階段計(jì)算得出,需要等到下一循環(huán)即DIVQ階段才使用,即此處加減迭代運(yùn)算只能用一倍的除數(shù)做加減運(yùn)算,也就是與最高一位的被除數(shù)位進(jìn)行加減迭代運(yùn)算。那么此階段的商位計(jì)算模塊的功能便是,在做有符號(hào)運(yùn)算時(shí),計(jì)算出商的符號(hào)位及其AQ,在做無(wú)符號(hào)運(yùn)算時(shí),計(jì)算出商的最高一位及其AQ。在計(jì)算除法時(shí),商的符號(hào)是由除數(shù)與被除數(shù)決定的,即除數(shù)與被除數(shù)的符號(hào)相同則商符號(hào)為正,否則為負(fù)。故計(jì)算此一位寬的符號(hào)位只需要除數(shù)符號(hào)位、被除數(shù)符號(hào)位以及數(shù)據(jù)類型標(biāo)識(shí)位(判斷是否做有符號(hào)運(yùn)算)一同計(jì)算可得。若為計(jì)算無(wú)符號(hào)運(yùn)算時(shí)候,因?yàn)閿?shù)據(jù)運(yùn)算模塊102是根據(jù)收斂性原則(即要求加減迭代后的部分余數(shù)絕對(duì)值需要小于除數(shù))對(duì)被加數(shù)做加減運(yùn)算,此時(shí)為第一次做加減迭代運(yùn)算,被加數(shù)為被除數(shù)的最高位,如圖4的DIVQ階段所示,之后的DIVQ運(yùn)算的被加數(shù)都由為前一次循環(huán)的部分余數(shù)結(jié)果而得。在此DIVS階段,如圖4的DIVS階段所示,僅利用被除數(shù)的最高位計(jì)算,那么此階段的新商位也為一位寬。由于是做無(wú)符號(hào)運(yùn)算,那么除數(shù)與被除數(shù)都為正數(shù),此時(shí)根據(jù)收斂要求需要在數(shù)據(jù)運(yùn)算模塊102中做減法迭代,如果是所得是負(fù)數(shù),那么說(shuō)明不夠減,新商位上1′b0,如果所得的是正數(shù),那么說(shuō)明夠減,新商位上1′b1。所以在DIVS階段,做無(wú)符號(hào)運(yùn)算時(shí),商位計(jì)算模塊上的新商位需要根據(jù)數(shù)據(jù)運(yùn)算模塊102中加減迭代結(jié)果的符號(hào)位以及數(shù)據(jù)類型標(biāo)識(shí)位(判斷是否做有符號(hào)運(yùn)算)邏輯計(jì)算而得。在DIVQ階段,設(shè)計(jì)的是基B的除法器,每一次上的新商位是log2B位寬。在經(jīng)過(guò)DIVS階段計(jì)算后,保存了1倍至B-1倍除數(shù)的數(shù)據(jù)結(jié)果,在經(jīng)過(guò)數(shù)據(jù)運(yùn)算部件102中的B-1個(gè)運(yùn)算模塊計(jì)算后,便會(huì)得到B-1個(gè)結(jié)果,如前所述,此商位計(jì)算模塊將會(huì)根據(jù)各個(gè)計(jì)算結(jié)果的符號(hào)來(lái)判別所上的新商位。例如,如果運(yùn)算模塊減法過(guò)后,與X倍除數(shù)數(shù)據(jù)加減迭代的結(jié)果為正,而與X+1倍除數(shù)數(shù)據(jù)加減迭代的結(jié)果為負(fù)數(shù),那么,我們便選取X值為新商值,其加減迭代結(jié)果便選取為此循環(huán)的部分余數(shù)結(jié)果,這正好與傳統(tǒng)手算除法的計(jì)算方式相類似。故商位計(jì)算通過(guò)數(shù)據(jù)運(yùn)算部件102輸入的B-1個(gè)計(jì)算結(jié)果的符號(hào)位來(lái)判斷所需要上的新商位。如果B=2,那么只有一個(gè)計(jì)算結(jié)果,同樣的道理,如果結(jié)果為正,說(shuō)明夠減/加,那么新商位為1′b1,否則上1′b0。所述運(yùn)算結(jié)果后處理模塊則是對(duì)數(shù)據(jù)運(yùn)算模塊102輸出的結(jié)果進(jìn)行再處理,其接受來(lái)自控制邏輯104的控制指令,包括DIVS,DIVQ,MDIVR,MDIVQ運(yùn)算操作控制指令,以及商運(yùn)算模塊的新商位。如圖4所示,每一階段的輸出寄存器的數(shù)據(jù)結(jié)構(gòu)的是不同的,運(yùn)算后處理主要是調(diào)整輸出的數(shù)據(jù)結(jié)構(gòu),提供給選通器直接選通至輸出寄存器。在DIVS運(yùn)算操作階段,所述運(yùn)算結(jié)果后處理模塊接收到數(shù)據(jù)運(yùn)算模塊102輸出的N+log2B+1位加/減運(yùn)算結(jié)果和數(shù)據(jù)預(yù)處理模塊101擴(kuò)展后的2N+log2B位被除數(shù)以及商位計(jì)算模塊1位新商位后,從高位至低位將N+log2B+1位的運(yùn)算結(jié)果的低N+log2B位、剩余的N-1位被除數(shù)(最高一位已被用于符號(hào)計(jì)算或加減迭代)與1位新商位拼接而成新的2N+log2B位數(shù)據(jù),提供給多路選通器。在DIVQ運(yùn)算操作階段,所述運(yùn)算后處理模塊的操作過(guò)程與DIVS階段相似,但是新的商位中不包含符號(hào)位。所述運(yùn)算結(jié)果后處理模塊接收到數(shù)據(jù)運(yùn)算模塊102輸出的N+log2B+1位加/減運(yùn)算結(jié)果和內(nèi)部循環(huán)的2N+log2B位數(shù)據(jù)(即部分余數(shù),部分商以及待運(yùn)算的被除數(shù)位)以及商位計(jì)算模塊得到的log2B位新商位后,從高位至低位將N+log2B+1位的運(yùn)算結(jié)果的低N+log2B位、剩余的被除數(shù)的低N-x·log2B-1位與1+(x-1)·log2B位部分商及其log2B位新商位拼接而成新的2N+log2B位數(shù)據(jù),提供給數(shù)據(jù)輸出模塊103的多路選通器,選擇相應(yīng)的結(jié)果給輸出寄存器,以提供給下一循環(huán)時(shí)使用。其中x表示的是循環(huán)中第幾次做DIVQ運(yùn)算,每次DIVQ運(yùn)算過(guò)后,剩余的被除數(shù)位都將減少log2B位,部分商位都將增加log2B位。在MDIVR階段,由于需要根據(jù)控制邏輯104輸出的余數(shù)修正使能控制信號(hào)進(jìn)行余數(shù)修正或者不進(jìn)行余數(shù)修正兩種可能,因此所述運(yùn)算后處理模塊需要準(zhǔn)備兩種數(shù)據(jù),即DIVQ階段的運(yùn)算結(jié)果中部分余數(shù)和對(duì)其進(jìn)行了余數(shù)修正的結(jié)果數(shù)據(jù);其中,由于N位的部分商結(jié)果或部分商結(jié)果不需要修改,因此數(shù)據(jù)輸出模塊102輸出的低N位不變,依然是DIVQ運(yùn)算操作階段輸出的初步運(yùn)算結(jié)果中的低N位,而其高N+log2B位的輸出需要根據(jù)余數(shù)修正控制信號(hào)選擇DIVQ運(yùn)算操作階段得到的運(yùn)算結(jié)果的N+log2B位部分余數(shù)或者該MDIVR運(yùn)算操作階段數(shù)據(jù)運(yùn)算模塊102中運(yùn)算器的加法器得到的加/減運(yùn)算結(jié)果??偟恼f(shuō)來(lái)就是提供給選通器兩個(gè)數(shù)據(jù),即修正的余數(shù)與未修正的余數(shù),如若不需要修正,則選通經(jīng)過(guò)數(shù)據(jù)預(yù)處理模塊101輸入的部分余數(shù),即如圖4的DIVQ最后一次循環(huán)所得的部分余數(shù),如若需要修正,則選擇此MDIVR階段經(jīng)過(guò)數(shù)據(jù)運(yùn)算模塊102修正后的數(shù)據(jù)結(jié)果。因此,所述數(shù)據(jù)后處理模塊向多路選通器提供DIVQ運(yùn)算操作階段得到的高N+log2B位部分余數(shù)進(jìn)行算術(shù)移位后的N+log2B位數(shù)據(jù)和從數(shù)據(jù)運(yùn)算模塊102得到的N+log2B位的加/減運(yùn)算結(jié)果兩種結(jié)果數(shù)據(jù)。在MDIVQ操作階段,由于需要根據(jù)控制邏輯104輸出的商修正使能信號(hào)進(jìn)行商數(shù)據(jù)修正或不進(jìn)行商數(shù)據(jù)修正兩種可能,因此也需要準(zhǔn)備兩種數(shù)據(jù)。N+log2B位的部分余數(shù)已經(jīng)在MDIVR階段進(jìn)行了修正,而低N位的部分商需要準(zhǔn)備MDIVQ運(yùn)算操作階段中數(shù)據(jù)運(yùn)算模塊102進(jìn)行了修正后的數(shù)據(jù)以及MDIVQ運(yùn)算操作階段前未進(jìn)行修正的數(shù)據(jù),即DIVQ運(yùn)算操作階段得到的商結(jié)果。也就是說(shuō),此模塊為多路選通器模塊分別在各個(gè)操作階段準(zhǔn)備了多個(gè)的輸出數(shù)據(jù)以供選通。所述多路選通輸出模塊則是對(duì)運(yùn)算數(shù)據(jù)進(jìn)行選通輸出,其接受的是運(yùn)算結(jié)果后處理模塊的輸出數(shù)據(jù),并根據(jù)操作指令碼的控制,協(xié)同數(shù)據(jù)類型標(biāo)識(shí)位、余數(shù)調(diào)整使能信號(hào)、商調(diào)整使能信號(hào)對(duì)結(jié)果進(jìn)行選通輸出。因?yàn)椴煌牟僮鞑襟E需要選通不同的輸出路徑,所以需要操作指令碼的參與控制;而數(shù)據(jù)類型標(biāo)識(shí)位主要是用來(lái)判斷特殊數(shù)據(jù)的輸出選通,比如遇到除數(shù)為0的時(shí)候,可能根據(jù)數(shù)據(jù)類型的不同會(huì)輸出不同的數(shù)據(jù)標(biāo)志;余數(shù)與商調(diào)整使能信號(hào)便是在MDIVR,MDIVQ階段選擇輸出使用。其輸出至一個(gè)中間結(jié)果寄存器,此寄存器容納一個(gè)2N+log2B位的中間結(jié)果數(shù)據(jù)(如圖4所示寄存器),一個(gè)AQ標(biāo)志位,在DIVS階段外部輸入的除數(shù)及數(shù)據(jù)類型標(biāo)志信號(hào)位等。在DIVS操作階段,多路選通輸出模塊便根據(jù)此操作階段對(duì)應(yīng)的外部指令經(jīng)過(guò)控制邏輯模塊104譯碼后的控制選通信號(hào)進(jìn)行選通此DIVS階段的通路輸出,此輸出結(jié)果是由數(shù)據(jù)后處理模塊提供一個(gè)2N+log2B位的預(yù)數(shù)據(jù)處理結(jié)果及其由商位計(jì)算模塊提供的一個(gè)AQ控制位,AQ標(biāo)志的選通還需要結(jié)合數(shù)據(jù)類型標(biāo)志信號(hào),2N+log2B位的輸出結(jié)果如圖4所示,數(shù)據(jù)構(gòu)成為,高N+log2B位為第一次加減迭代的結(jié)果N+log2B+1位的低N+log2B位,其次為N-1位的剩余被除數(shù)位,最后一位為新商位。多路選通輸出模塊的輸出結(jié)果為內(nèi)部循環(huán)輸出,提供給下一操作階段即DIVQ操作階段使用。在DIVQ操作階段,在此階段便根據(jù)此操作階段對(duì)應(yīng)的外部指令經(jīng)過(guò)控制邏輯模塊104譯碼后的控制選通信號(hào)進(jìn)行選通此DIVQ階段的通路輸出,在此階段輸出的結(jié)果如圖4的DIVQ階段所示,在此階段的最后一次循環(huán)輸出結(jié)果是由數(shù)據(jù)后處理模塊提供一個(gè)2N+log2B位的待修正數(shù)據(jù)結(jié)果及其由商位計(jì)算模塊提供的一個(gè)AQ控制位,AQ標(biāo)志的選通還需要結(jié)合數(shù)據(jù)類型標(biāo)志信號(hào),其中所述待修正數(shù)據(jù)結(jié)果包含待修正部分余數(shù)結(jié)果和待修正部分商結(jié)果。所述多路選通器的輸出結(jié)果為內(nèi)部循環(huán)輸出,提供給下一DIVQ操作階段使用,MDIVR不需要此AQ標(biāo)志位。在MDIVR操作階段,多路選通器不僅僅需要根據(jù)外部操作指令譯碼后的選通控制邏輯來(lái)選通MDIVR操作階段時(shí)的數(shù)據(jù)通路,還需要在余數(shù)修正控制信號(hào)的控制下,進(jìn)一步對(duì)數(shù)據(jù)進(jìn)行是否需要輸出修改后數(shù)據(jù)的選通。如果不需要余數(shù)修正,則選通輸出DIVQ運(yùn)算操作階段得到的部分商結(jié)果和經(jīng)過(guò)數(shù)據(jù)后處理模塊算術(shù)移位后的余數(shù)結(jié)果,否則選通輸出DIVQ運(yùn)算操作階段得到的N位部分商結(jié)果和來(lái)自數(shù)據(jù)運(yùn)算模塊102的N+1位加/減運(yùn)算結(jié)果,修改前后的結(jié)果都由數(shù)據(jù)后處理模塊提供,且不需要再計(jì)算AQ標(biāo)志位。在MDIVQ操作階段,多路選通器不僅僅需要選通的是MDIVQ操作階段時(shí)的數(shù)據(jù)通路,還需要在商修正控制信號(hào)的控制下進(jìn)一步對(duì)輸出數(shù)據(jù)進(jìn)行選通,如果不需要商修正,則選通輸出MDIVR運(yùn)算操作階段得到的部分商結(jié)果和余數(shù)結(jié)果,否則選通輸出MDIVQ運(yùn)算操作階段通過(guò)運(yùn)算器修正后得到的N+log2B位商結(jié)果和來(lái)自數(shù)據(jù)運(yùn)算模塊102的N位加/減運(yùn)算結(jié)果,兩個(gè)結(jié)果都由數(shù)據(jù)后處理模塊直接提供。在RDIV操作階段,外部直接可讀取結(jié)果寄存器,輸出的是2N位的數(shù)據(jù)結(jié)果,此2N位結(jié)果便是MDIVQ階段后2N+log2B位數(shù)據(jù)結(jié)果的低2N位,其中高N位為余數(shù),低N位為商結(jié)果。總之,數(shù)據(jù)輸出模塊103選擇多條通路的數(shù)據(jù)進(jìn)行輸出,或供給下一次迭代循環(huán)使用,同時(shí)輸出一定的控制信號(hào)給控制邏輯104,用于下一次循環(huán)的控制信號(hào)生成,或向外部輸出除法計(jì)算結(jié)果。外部端口在每一次迭代都可以從該模塊讀取中間結(jié)果,在除法計(jì)算結(jié)束后讀取的數(shù)據(jù)便是除法最終的商與余數(shù)結(jié)果。(四)控制邏輯模塊104控制邏輯模塊104用于生成各個(gè)模塊在數(shù)據(jù)循環(huán)中的控制信號(hào)。該控制邏輯模塊104包括指令譯碼邏輯模塊、數(shù)據(jù)選通邏輯模塊、加減操作邏輯模塊、余數(shù)修正邏輯模塊和商修正邏輯模塊。所述指令譯碼邏輯是指對(duì)外部輸入的指令進(jìn)行譯碼,即對(duì)外部輸入的DIVS,DIVQ,MDIVR,MDIVQ和RDIV五種操作指令譯碼成相對(duì)應(yīng)的控制選通信號(hào),以便對(duì)內(nèi)部操作進(jìn)行控制,比如對(duì)數(shù)據(jù)預(yù)處理模塊101控制為僅在DIVS操作時(shí)接受外部數(shù)據(jù),對(duì)數(shù)據(jù)輸出模塊103僅在RDIV讀指令時(shí)候?qū)ν廨敵鰯?shù)據(jù)等。所述數(shù)據(jù)選通邏輯模塊用于根據(jù)外部指令以及內(nèi)部循環(huán)提供中間結(jié)果的符號(hào)、除數(shù)符號(hào)、數(shù)據(jù)類型標(biāo)志信號(hào)等計(jì)算得到相應(yīng)的選通信號(hào),用于各個(gè)模塊中需要數(shù)據(jù)輸入數(shù)據(jù)輸出的選通控制。所述加減操作邏輯模塊是在外部指令操作碼的控制下,結(jié)合數(shù)據(jù)類型、以及上一階段所得的AQ標(biāo)志位、中間結(jié)果符號(hào)及其除數(shù)符號(hào)等計(jì)算得到加/減運(yùn)算控制信號(hào),以用于控制數(shù)據(jù)運(yùn)算模塊102中的加法器的加減操作。所述余數(shù)修正邏輯模塊用于在MDIVR操作階段,結(jié)合數(shù)據(jù)類型標(biāo)志位、除數(shù)符號(hào)、某些數(shù)據(jù)是否全0標(biāo)志、部分余數(shù)部分商符號(hào)等計(jì)算得到余數(shù)修正使能信號(hào),用于在MDIVR余數(shù)修正階段控制數(shù)據(jù)輸出模塊103是否輸出對(duì)余數(shù)進(jìn)行修正后的結(jié)果。所述商修正邏輯模塊用于在MDIVQ階段,結(jié)合除數(shù)符號(hào)、部分商符號(hào)、某些數(shù)據(jù)是否全0標(biāo)志等計(jì)算得到商修正控制信號(hào),用于在MDIVQ商修正階段控制是否輸出對(duì)商進(jìn)行修正后的結(jié)果。所述指令譯碼邏輯,是通過(guò)對(duì)外部五條DIVS,DIVQ,MDIVR,MDIVQ及RDIV操作指令進(jìn)行的譯碼以便對(duì)除法器內(nèi)部各個(gè)模塊能夠識(shí)別出相應(yīng)的操作階段并接受控制的一個(gè)控制邏輯。以及對(duì)此五條指令的識(shí)別并對(duì)整個(gè)模塊的運(yùn)行使能,即只有在此五條指令輸入時(shí)候,除法器才運(yùn)作。在DIVS階段,此階段除法器主要工作是從外部輸入除數(shù)與被除數(shù)數(shù)據(jù),并計(jì)算出帶符號(hào)位的新商位。那么對(duì)外部指令譯碼的結(jié)果包含對(duì)外部數(shù)據(jù)讀使能信號(hào),即譯碼后信號(hào)將控制數(shù)據(jù)預(yù)處理模塊101接收的數(shù)據(jù)為外部的除數(shù)、被除數(shù)、數(shù)據(jù)類型標(biāo)志位等數(shù)據(jù)。同時(shí)譯碼結(jié)果也將傳遞給數(shù)據(jù)選通邏輯,以指示其當(dāng)前循環(huán)為DIVS操作階段,提供在DIVS階段數(shù)據(jù)選通判斷信號(hào)。在DIVQ階段,此階段除法器的主要工作是從內(nèi)部輸入中間結(jié)果數(shù)據(jù)進(jìn)行計(jì)算,并計(jì)算出不帶符號(hào)位的新商位。那么指令譯碼結(jié)果包含對(duì)內(nèi)部循環(huán)數(shù)據(jù)讀使能,即譯碼信號(hào)將控制數(shù)據(jù)預(yù)處理模塊101接收的數(shù)據(jù)為內(nèi)部的部分余數(shù)、部分商、寄存的除數(shù)和寄存的數(shù)據(jù)類型標(biāo)志位等數(shù)據(jù)。同時(shí)譯碼結(jié)果也將傳遞給數(shù)據(jù)選通邏輯,以指示其當(dāng)前循環(huán)的操作階段,提供選通數(shù)據(jù)判斷信號(hào)。在MDIVR,MDIVQ操作階段,對(duì)外部指令進(jìn)行譯碼,與前兩操作一樣包括選通內(nèi)部循環(huán)數(shù)據(jù)使能,還提供給數(shù)據(jù)選通邏輯判斷信號(hào),指示在MDIVR,MDIVQ選擇的數(shù)據(jù)通路。在RDIV階段,此階段的主要工作便是向外部輸出結(jié)果數(shù)據(jù),即該指令譯碼模塊通過(guò)對(duì)RDIV指令的譯碼把結(jié)果的對(duì)外輸出使能信號(hào)置高??傊?,此指令譯碼邏輯包括三個(gè)功能,1)根據(jù)外部指令控制整個(gè)除法器模塊的工作與否;2)控制每個(gè)操作指令階段的輸入數(shù)據(jù)源及其輸出數(shù)據(jù)去向的選??;3)提供譯碼信號(hào)給控制邏輯模塊104中數(shù)據(jù)選通邏輯以便除法器內(nèi)部各個(gè)多路選通模塊對(duì)數(shù)據(jù)通路做數(shù)據(jù)選通。所述數(shù)據(jù)選通邏輯,便是通過(guò)指令譯碼邏輯對(duì)外部指令譯碼后的信號(hào),結(jié)合數(shù)據(jù)類型標(biāo)志位,及其余數(shù)修正邏輯、商修正邏輯的修正使能信號(hào)而得出的在數(shù)據(jù)預(yù)處理模塊101及其數(shù)據(jù)輸出模塊103中的多路選通控制信號(hào)。由于本除法器結(jié)合了DIVS,DIVQ,MDIVR,MDIVQ四種對(duì)數(shù)據(jù)進(jìn)行操作的步驟,即在數(shù)據(jù)通路上便會(huì)存在四種路徑,數(shù)據(jù)選通邏輯接收到了譯碼邏輯后的信號(hào)便是用來(lái)選通各個(gè)指令所對(duì)應(yīng)的數(shù)據(jù)通路。而接收到的余數(shù)修正使能信號(hào)與商修正使能信號(hào),用于在余數(shù)修正階段(即MDIVR操作)與商修正階段(即MDIVQ)選通相應(yīng)的數(shù)據(jù)以提供相應(yīng)的指令路徑(MDIVS或MDIVQ數(shù)據(jù)路徑)輸出。在DIVS操作階段,控制數(shù)據(jù)預(yù)處理模塊101的多路選通器選通從外部輸入的數(shù)據(jù)經(jīng)過(guò)輸入數(shù)處理模塊處理后的數(shù)據(jù),數(shù)據(jù)處理模塊提供給多路選通模塊中主要有4條數(shù)據(jù)路徑,分別對(duì)應(yīng)4種指令操作的數(shù)據(jù)通路,數(shù)據(jù)選通邏輯從指令譯碼邏輯接受到譯碼后的信號(hào),通過(guò)譯碼信號(hào)翻譯成相應(yīng)的數(shù)據(jù)通路選通信號(hào)提供給此多路選通,以選通相應(yīng)指令對(duì)應(yīng)的數(shù)據(jù)通路。如果除法器所處理的數(shù)據(jù)類型不同,那么在同一操作階段下,輸入數(shù)據(jù)通路的數(shù)據(jù)也是不盡相同的。所以在選擇相應(yīng)的指令通路之前(選擇4條通路之一前)根據(jù)數(shù)據(jù)類型信號(hào)來(lái)選擇相應(yīng)的數(shù)據(jù)進(jìn)入指令通路中。計(jì)算結(jié)果通路也有著4條指令通路,則通過(guò)對(duì)數(shù)據(jù)輸出模塊103中的多路選通模塊進(jìn)行控制選通DIVS數(shù)據(jù)通路輸出。在DIVQ階段,控制數(shù)據(jù)預(yù)處理模塊101的多路選通器選通從內(nèi)部輸入的數(shù)據(jù)經(jīng)過(guò)輸入數(shù)處理模塊處理后的數(shù)據(jù),大體與DIVS操作階段的處理選通方式相同,選擇控制選通DIVQ階段相應(yīng)的數(shù)據(jù)選通至DIVQ通路,再送至數(shù)據(jù)運(yùn)算模塊。計(jì)算結(jié)果則通過(guò)對(duì)數(shù)據(jù)輸出模塊103中的多路選通模塊進(jìn)行控制選通DIVQ數(shù)據(jù)通路輸出。在MDIVR指令操作階段,對(duì)于控制數(shù)據(jù)預(yù)處理模塊101的多路選通器選通的選通方式基本與DIVS,DIVQ階段的相同,都是通過(guò)處理外部指令譯碼后的信號(hào)在數(shù)據(jù)類型標(biāo)志信號(hào)下選擇相應(yīng)的數(shù)據(jù)給MDIVR通路并選通使能MDIVR指令通路,將數(shù)據(jù)傳送給數(shù)據(jù)運(yùn)算模塊102。對(duì)于控制數(shù)據(jù)輸出模塊103中多路選通模塊的選通,也是通過(guò)指令譯碼邏輯后的信號(hào)產(chǎn)生相應(yīng)的控制信號(hào)使得多路選通器選擇MDIVR通路輸出。但是還需要通過(guò)余數(shù)修正使能信號(hào)來(lái)判定是否需要將修改后的數(shù)據(jù)選通至MDIVR通路輸出。在MDIVQ操作階段,對(duì)于控制數(shù)據(jù)預(yù)處理模塊101的多路選通器選通的選通方式是通過(guò)處理外部指令譯碼后的信號(hào)下選擇相應(yīng)的數(shù)據(jù)給MDIVQ通路并選通使能MDIVQ指令通路,將數(shù)據(jù)傳送給數(shù)據(jù)運(yùn)算模塊102。對(duì)于控制數(shù)據(jù)輸出模塊103中多路選通模塊的選通,也是通過(guò)指令譯碼邏輯后的信號(hào)產(chǎn)生相應(yīng)的控制信號(hào)使得多路選通器選擇MDIVQ通路輸出。但是還需要通過(guò)商修正使能信號(hào)來(lái)判定是否需要將修改后的數(shù)據(jù)選通至MDIVQ通路輸出。所述加減操作邏輯,接受的信號(hào)為指令譯碼邏輯輸出的譯碼信號(hào)、數(shù)據(jù)類型標(biāo)識(shí)信號(hào),上一次循環(huán)得出的AQ標(biāo)識(shí)位、部分余數(shù)符號(hào)以及除數(shù)符號(hào)。經(jīng)過(guò)處理后輸出一位寬的加法器運(yùn)算加/減的控制信號(hào)至數(shù)據(jù)運(yùn)算模塊102中。在DIVS操作階段,加減操作邏輯根據(jù)譯碼邏輯的結(jié)果判斷為DIVS操作階段,便輸出減法操作信號(hào)至數(shù)據(jù)運(yùn)算模塊102中,此階段加法器必須是做減法操作。在DIVQ操作階段,加減操作邏輯根據(jù)譯碼邏輯的結(jié)果判斷為DIVQ操作階段,但是做加法/減法還需要由上一次操作階段產(chǎn)生的AQ標(biāo)志位決定,因?yàn)樾枰_(dá)到部分余數(shù)結(jié)果收斂的效果,即相減之后的部分余數(shù)結(jié)果需要在-x*|除數(shù)|~x*|除數(shù)|之間(x為正整數(shù),在基B的除法器中,x不大于B)。在MDIVR階段,此階段是修正余數(shù)階段,加法器做的運(yùn)算為修正余數(shù)的運(yùn)算。此階段的控制信號(hào)在該加減操作邏輯根據(jù)譯碼邏輯的結(jié)果判斷為MDIVS操作階段,并且根據(jù)數(shù)據(jù)類型標(biāo)志位所顯示的數(shù)據(jù)類型來(lái)判斷加/減。如果是做有符號(hào)除法,那么計(jì)算所得的加減運(yùn)算控制位為部分余數(shù)的符號(hào)與除數(shù)符號(hào)的同或所得的結(jié)果,因?yàn)槌ㄆ饕笥鄶?shù)的結(jié)果需要與被除數(shù)的符號(hào)相同,若需要修正,即需要使得余數(shù)易號(hào),若余數(shù)與除數(shù)同號(hào)則余數(shù)結(jié)果需要選擇與x*除數(shù)相減的結(jié)果,其中x≤B-1通過(guò)數(shù)據(jù)運(yùn)算器中與各個(gè)倍數(shù)的除數(shù)相加減結(jié)果的符號(hào)來(lái)判斷,目的是為得到|余數(shù)|<|除數(shù)|,并且余數(shù)符號(hào)等于被除數(shù)符號(hào),否則相加。如果是做無(wú)符號(hào)除法,那么只做加法修正運(yùn)算。在MDIVQ階段,此階段為修正商運(yùn)算階段,加法器做的運(yùn)算為修正商的運(yùn)算。此階段加法器做的為減法運(yùn)算。因?yàn)樵谡{(diào)整余數(shù)階段可能余數(shù)結(jié)果多加了一個(gè)或多減了一個(gè)除數(shù),所以需要在商調(diào)整階段需要加上或減去log2B。根據(jù)邏輯推導(dǎo),無(wú)論何種情況最后調(diào)整只需要做減法,因?yàn)樵贛DIVR調(diào)整階段減法的減數(shù)是帶符號(hào)的原除數(shù),而不是絕對(duì)值后的除數(shù)。所述余數(shù)修正邏輯,此邏輯只在MDIVR階段有效,是用來(lái)輸出一個(gè)余數(shù)調(diào)整使能信號(hào)以控制除法器模塊在MDIVR階段是否需要對(duì)余數(shù)做調(diào)整。對(duì)于除法器,余數(shù)需要滿足其符號(hào)與被除數(shù)相同,有不恢復(fù)余數(shù)算法的性質(zhì),并且容忍了除數(shù)與被除數(shù)都帶符號(hào)運(yùn)算(即不需要都裝換為正數(shù)),所得余數(shù)結(jié)果會(huì)可能會(huì)相差一個(gè)或多個(gè)除數(shù)倍數(shù)之差(視設(shè)計(jì)的除法器基數(shù)而定),故需要修正。關(guān)于從余數(shù)結(jié)果符號(hào)位方面考慮的修正,需要分兩種情況考慮,即處理的數(shù)據(jù)為有符號(hào)數(shù)據(jù)和無(wú)符號(hào)數(shù)據(jù),其判斷方式有所不同。表1示出了除法器做有符號(hào)除法時(shí)候的真值表,判斷初步的余數(shù)結(jié)果的符號(hào)是否與被除數(shù)符號(hào)位相同。表2示出了除法器做的是無(wú)符號(hào)除法時(shí)的真值表,需要根據(jù)被除數(shù)符號(hào),余數(shù)符號(hào)與除數(shù)符號(hào)判斷。但是由于無(wú)符號(hào)運(yùn)算除數(shù)與被除數(shù)都為正數(shù),那么便僅僅根據(jù)余數(shù)符號(hào)判斷是否需要修正即可。表1表2以上兩個(gè)情況是從余數(shù)符號(hào)角度出發(fā)考慮修正與否,最后做出正確的余數(shù)結(jié)果還需要考慮一些特殊情況數(shù)據(jù)的修正。首先,即整除情況,整除情況余數(shù)必為0,若僅僅根據(jù)符號(hào)判斷修正與否,則將會(huì)把0結(jié)果視為正數(shù),可能會(huì)導(dǎo)致誤判。即無(wú)論是做有符號(hào)或是無(wú)符號(hào)運(yùn)算,初步余數(shù)結(jié)果為0時(shí),便不需要調(diào)整余數(shù)結(jié)果。其次,若初步商結(jié)果為0(未經(jīng)過(guò)調(diào)整的商結(jié)果),出現(xiàn)此情況應(yīng)該為被除數(shù)比除數(shù)小,導(dǎo)致每一次上的商位為全0,且最后一次DIVQ運(yùn)算依舊為減法。初步余數(shù)結(jié)果則為負(fù)。這種情況在做有符號(hào)除法是沒(méi)有問(wèn)題的,但是在做無(wú)符號(hào)除法時(shí)候,就必須要把余數(shù)修正為正數(shù)。即若在此階段商結(jié)果為0,則在做無(wú)符號(hào)除法時(shí)候便需要做修正。最后,由于不恢復(fù)余數(shù)法對(duì)部分余數(shù)的收斂要求,在MDIVR前的DIVQ階段,即求得初步余數(shù)的時(shí)候,可能會(huì)判斷余數(shù)為0時(shí)為正數(shù)(最高位符號(hào)位為0,代表正數(shù)),便做相應(yīng)的收斂加/減使其為負(fù)數(shù)。即余數(shù)結(jié)果可能為-log2B*|除數(shù)|,而除法性質(zhì)是規(guī)定余數(shù)絕對(duì)值必須小于除數(shù)絕對(duì)值。那么便還需要一個(gè)控制判斷,即在MDIVR階段,若計(jì)算修正后的余數(shù)為0,那么,無(wú)論其他條件如何,便仍需要修正??偟膩?lái)說(shuō),余數(shù)修正邏輯不僅僅是通過(guò)部分商符號(hào)、部分余數(shù)符號(hào)、除數(shù)符號(hào)、及其數(shù)據(jù)類型標(biāo)志信號(hào)來(lái)判斷而得,還利用了部分余數(shù)是否為0及其未經(jīng)過(guò)修正的部分商是否為0來(lái)判斷。所述商修正邏輯,此邏輯只在MDIVQ階段有效,是用來(lái)輸出一個(gè)商調(diào)整使能信號(hào)以控制除法器模塊在MDIVQ階段是否需要對(duì)商做調(diào)整。表3示出了修正商的真值表,其通過(guò)判斷商的符號(hào)、除數(shù)符號(hào)、余數(shù)是否為0標(biāo)志(修正后的)來(lái)計(jì)算是否需要修正商。不恢復(fù)余數(shù)算法會(huì)導(dǎo)致商的結(jié)果相差一個(gè)x(x≤log2B整數(shù)),即需要相加或相減x修正,x的判斷通過(guò)余數(shù)修正時(shí)候修正的是多少倍除數(shù)來(lái)判定。同時(shí),在余數(shù)修正階段,如果有對(duì)余數(shù)有修正,那么便需要相減一個(gè)x(無(wú)論是有無(wú)符號(hào)運(yùn)算)。綜合分析,最后的商調(diào)整只需要減x或者不變。表3被除數(shù)符號(hào)除數(shù)符號(hào)余數(shù)是否全0是否需要修正000(否)0001(是)0010101111000101111011110首先,當(dāng)商與除數(shù)符號(hào)不同時(shí)需要調(diào)整,其次,當(dāng)除數(shù)為負(fù)數(shù),修正后的余數(shù)為0時(shí)候需要調(diào)整商,最后,商為負(fù)數(shù),修正后的余數(shù)不為0時(shí)需要調(diào)整商。對(duì)該除法運(yùn)算整體模塊的運(yùn)行控制,不僅需要外部指令控制邏輯,還需要內(nèi)部迭代的數(shù)據(jù)控制,每一次迭代計(jì)算都需要根據(jù)上一次的計(jì)算結(jié)果進(jìn)行控制,而且也由于輸入的數(shù)據(jù)一般只保留至上一操作步驟,即僅利用上一次的計(jì)算結(jié)果用于判斷本次的運(yùn)算。在邏輯結(jié)構(gòu)的設(shè)計(jì)上是一個(gè)難點(diǎn),如對(duì)計(jì)算加法器中加減信號(hào),不僅僅可能需要數(shù)據(jù)類型信號(hào)位與除數(shù)的符號(hào)位,還需要前次操作的中間結(jié)果商的符號(hào)位,以及所新計(jì)算的商位。同樣還需要計(jì)算余數(shù)與商調(diào)整階段的調(diào)整使能,這都需要外部輸入與上一階段的數(shù)據(jù)輸出作為邏輯判斷。圖2示出了本發(fā)明另一優(yōu)選實(shí)施例中不恢復(fù)余數(shù)除法器的結(jié)構(gòu)圖。圖2中的除法器實(shí)現(xiàn)的是16bit定點(diǎn)基2的除法器,此時(shí)log2B=1。如圖2所示,該除法器包括:數(shù)據(jù)預(yù)處理邏輯模塊201,數(shù)據(jù)運(yùn)算器模塊202,數(shù)據(jù)輸出選擇邏輯203及控制器模塊204。分別對(duì)應(yīng)圖1中數(shù)據(jù)預(yù)處理模塊101,數(shù)據(jù)運(yùn)算模塊102,數(shù)據(jù)輸出模塊103及控制邏輯模塊104。計(jì)算一個(gè)完整的16bit除16bit定點(diǎn)數(shù)據(jù)基2的除法,需要20個(gè)操作步驟。首先是1個(gè)DIVS操作步驟,然后16(N=16,B=2,N/log2B=16)個(gè)DIVQ操作步驟。然后是修正階段,需要1個(gè)MDIVR操作步驟和一個(gè)MDIVQ操作步驟。最后在讀取除法結(jié)果階段,需要一個(gè)RDIV操作步驟。如表4所示,以有符號(hào)定點(diǎn)數(shù)據(jù)-37除以6為例子。十進(jìn)制-37的十六進(jìn)制補(bǔ)碼表示為16h′ffdb,二進(jìn)制補(bǔ)碼表示為16b′1111111111011011;十進(jìn)制6的十六進(jìn)制補(bǔ)碼表示為16h′0006,二進(jìn)制補(bǔ)碼表示為16b′0000000000001010。外部端口除數(shù)與被除數(shù)是16位寬,計(jì)算的是有符號(hào)除法,輸入控制信號(hào)設(shè)置為有符號(hào)數(shù)據(jù)除法。表4OptionHigh17bitsLow16bitsAQinputxffdb0DIVS1ffffffb70DIVQ-F0000bff6f0E0000bfedf0D0000bfdbf0C0000bfb7f0B0000bf6ff0A0000bedff090000bdbff080000bb7ff070000b6fff060000adfff0500009bfff04000077fff0300002ffff121fff9fffe111fffffffc000000bfff91MDIVR1fffffff90MDIVQ1fffffffa0首先進(jìn)行DIVS運(yùn)算步驟,數(shù)據(jù)預(yù)處理模塊201在接收到控制器對(duì)指令譯碼后信號(hào),于是從外部讀取數(shù)據(jù),為兩個(gè)16位的除數(shù)與被除數(shù),16位被除數(shù)擴(kuò)展為33位數(shù)據(jù),被除數(shù)符號(hào)位是1,故擴(kuò)展高17位為全1,即把被除數(shù)從16′hffb7擴(kuò)展為33′h1ffffffb7。如果是無(wú)符號(hào)除法,則符號(hào)擴(kuò)展全為0。除數(shù)符號(hào)擴(kuò)展為17位數(shù)據(jù)17′h00006。并與接收到的外部的數(shù)據(jù)標(biāo)志位保存至循環(huán)寄存器中。高17位數(shù)據(jù)17′h1ffff在控制邏輯的選通控制下,輸出至數(shù)據(jù)運(yùn)算模塊202的加法器中作為被加數(shù),低16位直接發(fā)送至數(shù)據(jù)輸出邏輯203。由于是有符號(hào)運(yùn)算,高17位與0做相減運(yùn)算(此例子設(shè)置為做有符號(hào)數(shù)據(jù)時(shí)應(yīng)該為0,故此處為0,若為無(wú)符號(hào)運(yùn)算則為1*除數(shù)),結(jié)果輸出至數(shù)據(jù)輸出邏輯203模塊。數(shù)據(jù)輸出選擇邏輯203模塊將從數(shù)據(jù)運(yùn)算模塊202接收到的運(yùn)算結(jié)果作為高17位,從數(shù)據(jù)預(yù)處理模塊201接收到的數(shù)據(jù)為低16位,同時(shí)計(jì)算出新的商位,那么輸出則需要向左移1位,最高位擯棄,最低位置入新商位,此新商位為符號(hào)位,-37/6正確的商結(jié)果應(yīng)該為-6,故此位應(yīng)該上的是符號(hào)位1,如表4所示,DIVS操作對(duì)應(yīng)的數(shù)據(jù)最低位為1。同時(shí)計(jì)算出AQ,以提供下一操作控制所用。然后進(jìn)行DIVQ運(yùn)算,數(shù)據(jù)預(yù)處理模塊201在運(yùn)算器204的譯碼控制下選擇從內(nèi)部讀取數(shù)據(jù),即上次內(nèi)部循環(huán)的輸出結(jié)果,進(jìn)行第一次DIVQ運(yùn)算操作時(shí),內(nèi)部循環(huán)的輸出結(jié)果為DIVS運(yùn)算操作的輸出結(jié)果,而之后均是前一次DIVQ運(yùn)算操作的輸出結(jié)果。其在控制器204選通控制多路選通器的選通下,將所述上次內(nèi)部循環(huán)的輸出結(jié)果的高17位部分余數(shù)輸出給數(shù)據(jù)運(yùn)算器202作為被加數(shù),另外將擴(kuò)展后的除數(shù)作為加數(shù)傳送給數(shù)據(jù)運(yùn)算器202,同時(shí),將上次內(nèi)部循環(huán)的33位數(shù)據(jù)通過(guò)控制器204的指令譯碼邏輯控制輸入提供給選擇邏輯模塊203,其中包括高17位的部分余數(shù)與低16位的部分商。運(yùn)算模塊202在接收到相應(yīng)的數(shù)據(jù)后,在運(yùn)算器的加法器中,根據(jù)控制邏輯模塊204輸出的加減控制信號(hào)進(jìn)行相應(yīng)的加減操作,其中所述加減控制信號(hào)是根據(jù)上一次循環(huán)所得的控制信號(hào)AQ等計(jì)算得到的,其加減操作得到的17位加減操作結(jié)果輸出給數(shù)據(jù)輸出選擇邏輯203。數(shù)據(jù)輸出選擇邏輯203將從運(yùn)算模塊202接收到的17位加減運(yùn)算結(jié)果的低16位作為輸出的高16位,將數(shù)據(jù)預(yù)處理模塊提供的上次循環(huán)得到的部分商作為輸出的次低16位,將數(shù)據(jù)輸出選擇邏輯203中商計(jì)算模塊計(jì)算得到的新的商作為輸出的最低1位。本次循環(huán)的運(yùn)算輸出,其中高17位為本次循環(huán)得到的部分余數(shù)結(jié)果,低16位為本次循環(huán)得到的部分商結(jié)果。此DIVQ操作需要循環(huán)進(jìn)行16次,便可得初步運(yùn)算結(jié)果。結(jié)果還可能仍需要修正。然后是MDIVR操作,即修正余數(shù)操作,在數(shù)據(jù)預(yù)處理邏輯模塊201中,接收的是內(nèi)部循環(huán)數(shù)據(jù),即DIVQ運(yùn)算操作得到的初步運(yùn)算結(jié)果,數(shù)據(jù)預(yù)處理邏輯模塊201根據(jù)控制器204選通內(nèi)部循環(huán)數(shù)據(jù)的高17位部分余數(shù)位作為數(shù)據(jù)運(yùn)算器模塊202中加法器的被加數(shù),并選通經(jīng)過(guò)符號(hào)擴(kuò)展后的除數(shù)作為加數(shù)輸出至數(shù)據(jù)運(yùn)算模塊202中。所述33位內(nèi)部循環(huán)數(shù)據(jù)輸出至數(shù)據(jù)輸出選擇邏輯模塊203。數(shù)據(jù)運(yùn)算模塊202在運(yùn)算器中對(duì)接收到的數(shù)據(jù)進(jìn)行修正運(yùn)算,即在控制器204輸出的加減控制信號(hào)的控制下,將內(nèi)部循環(huán)數(shù)據(jù)的高17位和經(jīng)過(guò)符號(hào)擴(kuò)展后的除數(shù)相加減得到修正后的余數(shù),并將修正后的余數(shù)結(jié)果發(fā)送給數(shù)據(jù)輸出選擇邏輯模塊203,同時(shí)也發(fā)送加減結(jié)果是否為全0的信號(hào)給控制器204的余數(shù)修正邏輯模塊用來(lái)判別是否需要輸出修正后的結(jié)果。數(shù)據(jù)輸出選擇邏輯模塊203中在控制器204選通控制邏輯信號(hào)控制下選擇MDIVR數(shù)據(jù)通路輸出數(shù)據(jù),即輸出DIVQ運(yùn)算操作得到的初步運(yùn)算結(jié)果中的部分商和部分余數(shù)結(jié)果,或者輸出DIVQ運(yùn)算操作得到的初步運(yùn)算結(jié)果中的部分商和該MDIVR運(yùn)算操作過(guò)程中運(yùn)算模塊202得到的修正后的部分余數(shù)結(jié)果,具體輸出兩者中的哪一個(gè),還需要結(jié)合控制器204的余數(shù)修正邏輯的修正使能信號(hào)判斷;再次是MDIVQ操作,即修正商操作,數(shù)據(jù)預(yù)處理邏輯模塊201接收內(nèi)部循環(huán)數(shù)據(jù),即MDIVR運(yùn)算操作得到的33位運(yùn)算結(jié)果,其選通低16位部分商位經(jīng)過(guò)符號(hào)擴(kuò)展為17位后輸出至運(yùn)算模塊202中加法器作為被加數(shù),而加數(shù)為log2B=1,而運(yùn)算器中加減法控制信號(hào)為常數(shù)0,即做減法。運(yùn)算模塊202進(jìn)行相減運(yùn)算后,將所得的結(jié)果作為修正后的部分商提供給數(shù)據(jù)輸出選擇邏輯模塊203。數(shù)據(jù)輸出選擇邏輯模塊203的多路選通器在控制器204的選通控制邏輯信號(hào)的控制下選通適合的結(jié)果數(shù)據(jù)進(jìn)行輸出,即輸出MDIVR運(yùn)算操作得到的初步運(yùn)算結(jié)果中的部分商和修正后余數(shù)結(jié)果,或者輸出MDIVR運(yùn)算操作得到的初步運(yùn)算結(jié)果中的修正后余數(shù)和該MDIVQ運(yùn)算操作過(guò)程中運(yùn)算模塊202得到的修正后的商結(jié)果,具體輸出兩者中的哪一個(gè),還需要結(jié)合控制器204的商修正邏輯的修正使能信號(hào)判斷。該實(shí)施例中,在MDIVR操作后,商為負(fù)數(shù),修正后的余數(shù)不為0,故需要調(diào)整商,即減1操作。商便為正確的修正結(jié)果,即在MDIVQ操作后便得到了最后的除法正確結(jié)果。最后是RDIV操作,此操作是讀取最后的除法結(jié)果操作,此時(shí),在控制邏輯對(duì)RDIIV指令譯碼后除法器輸出使能為高,即結(jié)果數(shù)據(jù)可進(jìn)行對(duì)外部的輸出32位數(shù)據(jù)結(jié)果,高16位為余數(shù),低16位為商,當(dāng)然也可在之前步驟中做此操作,那便是讀出的是中間計(jì)算結(jié)果。以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。