率。
【附圖說(shuō)明】
[0014] 圖1基于進(jìn)位保留加法器的基數(shù)-16定點(diǎn)除法器流水站示意圖; 圖2基于進(jìn)位保留加法器的基數(shù)-16定點(diǎn)除法器執(zhí)行流程圖; 圖3檢測(cè)-移位模塊組內(nèi)檢測(cè)電路實(shí)現(xiàn)示意圖; 圖4檢測(cè)-移位模塊組間檢測(cè)電路實(shí)現(xiàn)示意圖; 圖5商和部分余數(shù)產(chǎn)生邏輯結(jié)構(gòu)示意圖; 圖6商取值邏輯電路示意圖; 圖7商實(shí)時(shí)轉(zhuǎn)換邏輯結(jié)構(gòu)示意圖; 圖8余數(shù)調(diào)整邏輯結(jié)構(gòu)示意圖; 圖9商調(diào)整邏輯結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0015] 以64位數(shù)據(jù)為例: 一種基于進(jìn)位保留加法器的基數(shù)-16定點(diǎn)除法器,包括檢測(cè)-移位模塊,商循環(huán)產(chǎn)生模 塊,商轉(zhuǎn)換模塊,商/余數(shù)調(diào)整模塊,執(zhí)行控制模塊; 檢測(cè)-移位模塊,接受除數(shù)d和被除數(shù),將64位數(shù)據(jù)分成4組,每組16位,在運(yùn)算之前 要對(duì)除數(shù)d和被除數(shù)進(jìn)行規(guī)整,即對(duì)數(shù)據(jù)進(jìn)行檢測(cè)和向左移位,使得被除數(shù)和除數(shù)最高有 效位對(duì)齊,消除不必要的符號(hào)位;規(guī)整后的除數(shù)為d '; 檢測(cè)-移位模塊包含符號(hào)判斷器,取反發(fā)生器,求前導(dǎo)1數(shù)據(jù)選擇器,移位器; 符號(hào)判斷器及取反發(fā)生器,用于接收除數(shù)與被除數(shù)的符號(hào),若判斷數(shù)據(jù)為正,則將數(shù)據(jù) 通過(guò)取反發(fā)生器,將其變成負(fù)數(shù)進(jìn)行運(yùn)算; 求前導(dǎo)1數(shù)據(jù)選擇器,接收除數(shù)與被除數(shù)經(jīng)過(guò)符號(hào)判斷器取反后的數(shù)據(jù),然后進(jìn)行選 擇操作,得到操作數(shù)的前導(dǎo)"1"個(gè)數(shù)并用變量表示; 移位器,用于接收數(shù)據(jù)選擇器輸出的" 1"的個(gè)數(shù)變量,即是操作數(shù)需要左移的位數(shù)。
[0016] 商循環(huán)產(chǎn)生模塊,接收通過(guò)檢測(cè)-移位模塊規(guī)整后的數(shù)據(jù),用于循環(huán)操作,循環(huán)迭 代產(chǎn)生冗余數(shù)據(jù),一周期執(zhí)行四次加減法,完成一次迭代后得到部分余數(shù)和四位商值; 商循環(huán)產(chǎn)生模塊包含普通加法器,商選擇電路,除數(shù)選擇電路,進(jìn)位保留加法器,移位 器; 普通加法器,用于接收被除數(shù)和除數(shù),進(jìn)行求和操作并輸出結(jié)果,初始的被除數(shù)值為規(guī) 整后的被除數(shù),初始的除數(shù)值為全零; 商選擇電路,用于接收加法器輸出的數(shù)據(jù),通過(guò)RNS除法器算法商選擇規(guī)則,對(duì)商進(jìn)行 選擇操作,并輸出商值q (_1,〇,1); 除數(shù)選擇器,用于接收商選擇電路輸出的q值,根據(jù)商值選擇除數(shù)為0-或-cT并輸 出; 進(jìn)位保留加法器,用于接收被除數(shù)和除數(shù),還有除數(shù)選擇器所選擇的除數(shù),相加后產(chǎn)生 新的被除數(shù)和除數(shù);其中初始的被除數(shù)為規(guī)整后的被除數(shù),初始的除數(shù)為全零; 移位器,用于接收進(jìn)位保留加法器所輸出的被除數(shù)和除數(shù),進(jìn)行左移操作。與檢測(cè)-移 位模塊可以共用移位器。
[0017] 商轉(zhuǎn)換模塊,接收商循環(huán)產(chǎn)生模塊所產(chǎn)生的冗余形式商值,采用進(jìn)位保留格式轉(zhuǎn) 換成標(biāo)準(zhǔn)二進(jìn)制補(bǔ)碼形式; 商轉(zhuǎn)換模塊包含數(shù)據(jù)選擇器,商實(shí)時(shí)轉(zhuǎn)換電路,商的部分選擇電路,商值寄存器q_ switch_M^P q_switch_N ; 數(shù)據(jù)選擇器,通過(guò)接收檢測(cè)-移位模塊輸出的轉(zhuǎn)換有效信號(hào),選擇商值初始值或者商 值寄存器q_switch_M和q_switch_N保存的值; 商實(shí)時(shí)轉(zhuǎn)換電路,用于接收數(shù)據(jù)選擇器輸出的值,通過(guò)RNS算法的實(shí)時(shí)轉(zhuǎn)換規(guī)則,將冗 余形式的商轉(zhuǎn)換成標(biāo)準(zhǔn)二進(jìn)制補(bǔ)碼形式; 商的部分選擇電路,通過(guò)接收?qǐng)?zhí)行控制模塊輸出的控制信號(hào),按照RNS算法的商選擇 規(guī)則進(jìn)行選擇; 商值寄存器q_switch_M* 于保存商選擇邏輯產(chǎn)生的值,作為下一次迭 代操作的輸入數(shù)據(jù)。
[0018] 商/余數(shù)調(diào)整模塊,接收被除數(shù)、除數(shù)和余數(shù)的符號(hào)位,根據(jù)RNS算法對(duì)商結(jié)果和 余數(shù)結(jié)果進(jìn)行符號(hào)的同號(hào)調(diào)整,并調(diào)整商; 商/余數(shù)調(diào)整模塊,如果余數(shù)與被除數(shù)異號(hào),通過(guò)加上或減去規(guī)整后除數(shù)cT使它們變 為同號(hào),否則直接輸出;如果余數(shù)調(diào)整周期中將余數(shù)加上cT,商減去1 ;如果余數(shù)調(diào)整周期 中將余數(shù)減去0-,商加1 ;如果余數(shù)沒(méi)有調(diào)整,商不調(diào)整,所得結(jié)果就是最終商值。
[0019] 執(zhí)行控制模塊,負(fù)責(zé)對(duì)商循環(huán)產(chǎn)生模塊,商轉(zhuǎn)換模塊,商/余數(shù)調(diào)整模塊的執(zhí)行控 制,接收檢測(cè)-移位模塊中被除數(shù)和除數(shù)移動(dòng)的位數(shù)η和m,執(zhí)行m-n+1邏輯,實(shí)現(xiàn)運(yùn)算后右 移相應(yīng)位數(shù),結(jié)果放入計(jì)數(shù)器中,記錄循環(huán)執(zhí)行次數(shù)。
[0020] 利用上述除法器,結(jié)合附圖對(duì)其運(yùn)算處理方法進(jìn)一步說(shuō)明: 如圖1所示,第一站被除數(shù)規(guī)整;第二站除數(shù)規(guī)整;第三站商和部分余數(shù)產(chǎn)生邏輯;第 四站商/余數(shù)數(shù)據(jù)格式轉(zhuǎn)換;第五站商調(diào)整/余數(shù)移位;第六站余數(shù)調(diào)整。
[0021] 執(zhí)行步驟流程如圖2所示,首先通過(guò)檢測(cè)-移位模塊,判斷被除數(shù)和除數(shù)的符號(hào) 位,若輸入的數(shù)據(jù)為正,則各位取反,若為負(fù)數(shù)則保持不變,然后對(duì)數(shù)據(jù)進(jìn)行規(guī)整化操作;進(jìn) 入商循環(huán)產(chǎn)生模塊,將規(guī)整后的被除數(shù)s以及進(jìn)位c的高三位相加,根據(jù)相加結(jié)果和商取值 規(guī)則選取商值,商選好后按照商余數(shù)取值規(guī)則求部分余數(shù),開(kāi)始進(jìn)入循環(huán)求商操作;通過(guò)商 轉(zhuǎn)換模塊將冗余形式表示的商轉(zhuǎn)化成二進(jìn)制補(bǔ)碼形式;最后通過(guò)商調(diào)整模塊和余數(shù)調(diào)整模 塊輸出商值和余數(shù)。
[0022] 如圖3和圖4所示,檢測(cè)-移位過(guò)程分兩級(jí)完成,將64位數(shù)據(jù)分成4組,每 組16位。第一級(jí)是16位組內(nèi)檢測(cè),計(jì)算從最高位開(kāi)始有幾位連續(xù)"1"用m[3:0]表示, 產(chǎn)生四組輸出,其中data[15:0]組的檢測(cè)電路如圖3所示,大概有5級(jí)二選一邏輯的 延時(shí)。第二級(jí)是組間檢測(cè),檢測(cè)每組數(shù)據(jù)是否全"1",每組一個(gè)輸出共4個(gè)輸出,其中 data[15:0]組的全"1"檢測(cè)電路如圖4所示,然后用這兩組檢測(cè)結(jié)果計(jì)算出整個(gè)64位 數(shù)據(jù)前導(dǎo)"1"的個(gè)數(shù)并用amount[6:0]表示,amount[6:0]就是操作數(shù)需要左移的位數(shù)。 計(jì)算前導(dǎo)"1"個(gè)數(shù)的方法是:依次判斷每組是否為全"1",首先第一組data[63:48]若不 是全 '' 1 " 則 amount [6:0] = {3 ' b000,m_3 [3:0]},其中 m_3 是組內(nèi)檢測(cè)邏輯 data [63:48] 組的輸出,否則接著判斷第二組data[47:32],依次類推。檢測(cè)到第二組時(shí)的結(jié)果是 amount[6:0] = {3' b001,m_2[3:0]},第三組是 amount[6:0] = {3' b010,m_l [3:0]},第四組是 amount[6:0] = {3' bOll,m_0[3:0]} 〇
[0023] 邏輯結(jié)構(gòu)如圖5所示,商和部分余數(shù)產(chǎn)生時(shí)一次部分余數(shù)的基本過(guò)程:其中w表示 余數(shù),q為商值。當(dāng)2·? ω確定后,將它的s與c高三位相加,根據(jù)得到的結(jié)果和商取值規(guī)則 求出商值,然后根據(jù)公式'計(jì)算下一輪部分余數(shù)。取商值和計(jì)算下一 輪部分余數(shù)是并行執(zhí)行的,一個(gè)執(zhí)行周期串行四次這樣的中間運(yùn)算,就構(gòu)成了基數(shù)-16 RNS 除法器的核心部分一一商和部分余數(shù)產(chǎn)生邏輯。
[0024] 首先接收規(guī)整后的數(shù)據(jù),當(dāng)2*W[j]確定以后,將它的進(jìn)位部分2c與和部分2s的高 三位相加,根據(jù)得到的結(jié)果和商取值規(guī)則求出商值:當(dāng)2 ·&/= -3/2即"10. 1"時(shí),2 ·? ?] 一定在卜3/2,0)范圍內(nèi),若d' >0則q = -1反之q = 1;當(dāng)2.w[j/ = -1即"11.0" 時(shí),2 · w[j]-定在[_1,0)范圍內(nèi),若d ^ >0則q = -1反之q = 1 ;當(dāng)2 · w [」/ = -1/2即 "11. 1"時(shí),2 -定在[-1/2,1/2)范圍內(nèi),此時(shí)取q = 0。同樣當(dāng)結(jié)果為"00. 0"、"00. 1"、 "01. 0"時(shí),若d ' >0則q = 1反之q = -1。通過(guò)公式Wm= 2 · Ww · d '計(jì)算下 一輪部分余數(shù)。一個(gè)周期執(zhí)行四次這樣中間運(yùn)算操作,這樣就需要在一個(gè)周期內(nèi)增加四組 3-2保留進(jìn)位加法器。
[0025] 如圖6所示,商選擇需要根據(jù)最高位和d '的符號(hào)來(lái)確定商值。根據(jù)RNS算法商 取值規(guī)則:如果三位都為"1",商值就取〇,由于不會(huì)出現(xiàn)"011"情況,所以只需要判斷后兩 位即可。除去取0的情況后,當(dāng)>0時(shí),如果最尚位為"1"商取值就是-1;如果最尚位為 "0",商取值就是1;當(dāng)0-〈0時(shí),商取值情況同大于零時(shí)相反,如果最高位為"1"商取值就 是1;為"〇",商取值就是-1,這樣只需要根據(jù)最高位和d'的符號(hào)就可以確定商值。本發(fā)明 中對(duì)硬件結(jié)構(gòu)進(jìn)行了優(yōu)化:輸入信號(hào)為8與(3高三位相加的結(jié)果(1^丨2、1