除法運(yùn)算過程如下:
(1) 取被除數(shù)的高幾位數(shù)據(jù),位寬和除數(shù)相同(實(shí)例中是 3bit 數(shù)據(jù))。
(2) 將被除數(shù)高位數(shù)據(jù)與除數(shù)作比較,如果前者不小于后者,則可得到對應(yīng)位的商為 1,兩者做差得到第一步的余數(shù);否則得到對應(yīng)的商為 0,將前者直接作為余數(shù)。
(3) 將上一步中的余數(shù)與被除數(shù)剩余最高位 1bit 數(shù)據(jù)拼接成新的數(shù)據(jù),然后再和除數(shù)做比較??梢缘玫叫碌纳毯陀鄶?shù)。
(4) 重復(fù)過程 (3),直到被除數(shù)最低位數(shù)據(jù)也參與計(jì)算。
需要說明的是,商的位寬應(yīng)該與被除數(shù)保持一致,因?yàn)槌龜?shù)有可能為1。所以上述手動計(jì)算除法的實(shí)例中,第一步做比較時(shí),應(yīng)該取數(shù)字 27 最高位 1 (3’b001) 與 3’b101 做比較。 根據(jù)此計(jì)算過程,設(shè)計(jì)位寬可配置的流水線式除法器,流水延遲周期個數(shù)與被除數(shù)位寬一致。
除法器設(shè)計(jì)
單步運(yùn)算設(shè)計(jì)
單步除法計(jì)算時(shí),單步被除數(shù)位寬(信號 dividend)需比原始除數(shù)(信號 divisor)位寬多 1bit 才不至于溢出。
為了便于流水,輸出端需要有寄存器來存儲原始的除數(shù)(信號 divisor 和 divisor_kp)和被除數(shù)信息(信號 dividend_ci 和 dividend_kp)。
單步的運(yùn)算結(jié)果就是得到新的 1bit 商數(shù)據(jù)(信號 merchant)和余數(shù)(信號 remainder)。
為了得到最后的除法結(jié)果,新的 1bit 商數(shù)據(jù)(信號 merchant)還需要與上一周期的商結(jié)果(merchant_ci)進(jìn)行移位累加。
單步運(yùn)算單元設(shè)計(jì)如下(文件名 divider_cell.v):