姚茂群,葉漢能,張立彬
(杭州師范大學(xué) 信息科學(xué)與工程學(xué)院,浙江 杭州 310036)
在FPGA得到廣泛應(yīng)用的情況下,應(yīng)用過程中有時需要確定數(shù)據(jù)之間的具體倍數(shù)關(guān)系,因此很多公司針對自己的芯片開發(fā)了相應(yīng)的除法器IP核.但是這些算法存在一些限制,比如要求除數(shù)是2的指數(shù)冪、運算數(shù)據(jù)為整數(shù)以及精度受到限制[1-2]等.在加、減、乘運算的設(shè)計已實現(xiàn)的情況下,要實現(xiàn)除法運算,可以有2種方案:將除法轉(zhuǎn)換為乘法或采用減法與移位的組合[3].結(jié)合實際電路的情況,該文以二進制數(shù)為例,采用減法與移位的組合,設(shè)計一種通用且任意精度的二進制數(shù)除法器.整個設(shè)計、分析過程均在Altera FPGA EP1C6Q240C8環(huán)境下進行驗證.
以8位無符號數(shù)的除法為例,商根據(jù)所需精度設(shè)計相應(yīng)位數(shù).具體設(shè)計過程如下:
1) 設(shè)計9位數(shù)中間變量C,其高8位的初始值為“00000000”,最低位置入A的最高位數(shù),然后將被除數(shù)A進行一位左移,最低位置入“0”;設(shè)計9位數(shù)中間變量D,將其最高位設(shè)置為“0”,低8位為被除數(shù)B.
2) 在時鐘的上升沿,將C與D進行比較.如果C大于或等于D,則由高到低將商中相應(yīng)的位置“1”,并用C減去D,將其差值重新賦予C;如果C小于D,則由高到低將商中相應(yīng)的位置“0”.
3) 在時鐘下降沿,C左移一位,最低位置入A的最高位;A左移一位,最低位置入“0”.在時鐘上升沿回到2)過程.
以上2)和3)間的循環(huán)次數(shù)取決于需要得到的商的精度.
圖1 除法器模塊圖
該設(shè)計采用EDA的基本思想,分模塊進行,主要包括移位模塊、比較模塊、減法模塊,并將各模塊進行整合,實現(xiàn)完整的除法器電路.各模塊如圖1所示.
2.1 移位模塊
根據(jù)時鐘信號對移位寄存器中的數(shù)據(jù)C進行由低位向高位的移位操作,并將被除數(shù)A的最高位置入寄存器最低位.對被除數(shù)A進行左移時,將其最低位置入“0”.
2.2 比較模塊
根據(jù)時鐘信號對輸入數(shù)據(jù)進行由高位到低位的逐次比較,并將結(jié)果中大于和等于歸為一類,輸出相應(yīng)的比較結(jié)果“1”,將小于歸為一類,輸出相應(yīng)信號“0”.
2.3 減法模塊
根據(jù)比較模塊輸出的信號控制減法模塊的工作情況,從而實現(xiàn)只有在被減數(shù)大于或等于減數(shù)的時候進行運算.設(shè)計中運用將減法轉(zhuǎn)化為加法的思路來設(shè)計適合該除法器的減法器.
該模塊用VHDL描述如下:
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL ;
ENTITY MINUS IS
PORT (
CLK : IN STD_LOGIC ;
INPUTA, INPUTB : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(8 DOWNTO 0)
END;
ARCHITECTURE ONE OF MINUS IS
BEGIN
PROCESS(CLK)
VARIABLE DB : STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
DB := (NOT INPUTB)+1;
設(shè)計意圖: 在前面的構(gòu)建模型環(huán)節(jié)只是簡要地提出種群數(shù)量J型增長的條件,該環(huán)節(jié)以澳大利亞野兔泛濫的實例具體分析原因,歸納出種群數(shù)量J型增長的條件。
IF CLK’EVENT AND CLK=‘1’ THEN
S <= INPUTA + DB ;
END IF;
END PROCESS;
END;
該減法器RTL圖如圖2所示.
圖2 減法器RTL圖
將以上模塊整合,并要求商精確到二進制數(shù)小數(shù)點后面8位,用QuartusⅡ?qū)Τㄆ鬟M行仿真,得到仿真波形如圖3.
圖3 除法器仿真結(jié)果
圖3中A和B對應(yīng)被除數(shù)和除數(shù),S為商,且S高8位為整數(shù)部分,低8位為小數(shù)部分,圖中除數(shù)為“00110011”,被除數(shù)或者除數(shù)的變化將觸發(fā)除法器進行計算.當被除數(shù)是“11110000”時結(jié)果為“100.10110100”;當被除數(shù)是“00001000”時結(jié)果為“0.00101000”.可根據(jù)需要的精確程度來設(shè)置相應(yīng)參數(shù),控制循環(huán)變量和商位數(shù),從而得到相應(yīng)的商.
在已有的一些除法器設(shè)計中,較多采用的是結(jié)果帶余數(shù)的辦法,該設(shè)計是計算結(jié)果精確到小數(shù)的一種方法.由于減法操作中被減數(shù)和減數(shù)可能在最高位同時不為“0”,而且不夠減,針對這種情況在設(shè)計移位寄存器時將其位數(shù)設(shè)計成比被除數(shù)和除數(shù)多一位,保證被除數(shù)在再一次移位時高位非“0”數(shù)據(jù)不會丟失.
設(shè)計過程中,僅涉及移位、比較和減法操作,原理簡單,便于實現(xiàn).采用VHDL語言編寫,通過參數(shù)打包的辦法[4],使得運用時能方便地實現(xiàn)可控精度的除法運算,增加了適用范圍,具有較大的靈活性,便于移植.同時克服了部分除法器僅適用于除數(shù)是2的指數(shù)冪以及運算數(shù)據(jù)為整數(shù)等缺點,擴大了運算范圍,提高了計算精度.
通過EDA的設(shè)計思想,采用VHDL語言對各模塊進行描述,最后調(diào)用這些模塊完成整個除法器的設(shè)計.對其結(jié)構(gòu)和功能進行驗證,結(jié)果表明其電路簡潔、高效.通過控制循環(huán)變量和商的位數(shù),可實現(xiàn)任意精度的除法計算,計算結(jié)果準確.
[1] 胡修林,楊志專,張?zhí)N玉.基于FPGA的快速除法算法設(shè)計與實現(xiàn)[J].自動化技術(shù)與應(yīng)用,2006,25(11):27-29.
[2] 陳玉丹,齊京禮,陳建泗.基于VHDL的8位除法器的實現(xiàn)[J].微計算機信息,2006,22(36):277-278.
[3] 郭松,徐世亮,萬里勇.巧用數(shù)組實現(xiàn)除法的高精度計算[J].計算機與信息技術(shù),2007,36:442.
[4] 雷伏容.VHDL電路設(shè)計[M].北京:清華大學(xué)出版社,2008:145-185.