FPGA(現(xiàn)場可編程門陣列)技術(shù)的理論研究和實際應(yīng)用正越來越受到人們的重視。FPGA 技術(shù)常常使一些原來比較難解決的技術(shù)瓶頸得以輕松實現(xiàn),從而使產(chǎn)品的開發(fā)周期大為縮短,性能價格比大幅提高。運算器作為計算機(jī)的加工處理部件,是CPU(中央處理器)的重要組成部分。作為典型的PC機(jī)一般都至少具有一個定點運算器。在586 之前的機(jī)型中,由于當(dāng)時硬件條件和工藝的限制,浮點運算器一般以協(xié)處理器的形式出現(xiàn)。進(jìn)入20 世紀(jì)90 年代后,隨著工藝水平的提高,一個芯片上集成度不斷提高,如今浮點運算所要求的一些硬件已可以集成到CPU 中,因此,作為浮點運算器的代表的協(xié)處理器也逐漸被集成度很高的CPU 中的一部分所代替。
浮點運算
定點運算器主要是用于實現(xiàn)對定點整數(shù)和定點小數(shù)的算術(shù)運算、對邏輯數(shù)據(jù)的邏輯運算以及對主存的地址計算等。
浮點數(shù)比定點數(shù)的表述范圍寬,有效精度高,更適合于科學(xué)計算與工程計算。浮點運算可分為兩類:非規(guī)格化和規(guī)格化浮點運算。非規(guī)格化浮點運算,不要求操作數(shù)是規(guī)格化數(shù),對運算結(jié)果也不要求規(guī)格化處理。而規(guī)格化浮點運算只能對規(guī)格化的浮點數(shù)進(jìn)行操作,并且要求對運算結(jié)果加以規(guī)格化處理。由于規(guī)格化浮點數(shù)具有惟一的表示形式,而且在計算機(jī)中尾數(shù)能獲得最大的有效數(shù)字,所以在一般的計算機(jī)中一般選用規(guī)格化浮點運算。
浮點加、減運算
浮點加減法運算規(guī)則
設(shè)有兩個浮點數(shù)x 和y,分別為
其中Ex 和Ey 分別為數(shù)x 和y 的階碼,Mx 和My 分別是數(shù)x 和y 的尾數(shù)。
兩浮點數(shù)進(jìn)行加減的運算規(guī)則是
浮點加減法運算步驟
完成兩個浮點數(shù)加法或減法運算,需要以下幾個步驟完成。
(1) 對階:兩浮點數(shù)進(jìn)行加減,必須使它們的階碼相等,這個過程稱為對階。對階的第1 步是求階差:
對階的規(guī)則是小階向大階看齊,即使階碼小的尾數(shù)向右移位,每右移一位階碼加1,直至兩數(shù)的階碼相等( E=0)為
止。右移的位數(shù)等于階差| E|。當(dāng)然尾數(shù)右移也會發(fā)生數(shù)碼丟失,但這時丟失的僅僅是尾數(shù)的低位部分,誤差較小,而且
可以通過舍入方法來控制誤差。
(2)求和或求差:按定點加減的規(guī)則求兩尾數(shù)的和或差。這個過程中所使用運算邏輯單元與定點運算邏輯單元類似。
(3)規(guī)格化:求和之后得到的數(shù)可能不是規(guī)格化的數(shù),為了增加有效數(shù)字的位數(shù),提高運算精度,必須將求和的結(jié)果規(guī)
格化。
當(dāng)尾數(shù)用二進(jìn)制表示時,浮點規(guī)格化的定義是尾數(shù)M 應(yīng)滿足:
(4)溢出判斷:在進(jìn)行運算時,可能出現(xiàn)階碼溢出的情況。當(dāng)階碼超出上限時,稱為階碼上溢,它表示浮點數(shù)的絕對值超出表述范圍。當(dāng)階碼小于下限時,稱為階碼下溢,它表示浮點數(shù)的絕對值已在浮點數(shù)表示的分辨率之下。通常階碼上溢時要進(jìn)行相應(yīng)的處理,階碼下溢時要當(dāng)作機(jī)械零處理。
浮點乘、除運算
浮點乘除法運算規(guī)則
兩浮點數(shù)乘法的運算規(guī)則是
即兩浮點數(shù)相乘,其乘積的階碼為相乘兩數(shù)的階碼之和,其乘積的尾數(shù)為相乘兩數(shù)尾數(shù)之積。
兩浮點數(shù)除法的運算規(guī)則是
即兩浮點數(shù)相除,商的階碼為被除數(shù)的階碼減去除數(shù)的階碼所得到的差,尾數(shù)為被除數(shù)的尾數(shù)除以除數(shù)的尾數(shù)所得
的商。
浮點乘除法運算步驟
兩個浮點數(shù)乘除運算步驟為: 完成兩浮點數(shù)階碼的加減運算,并判斷結(jié)果是否溢出; 完成兩浮點數(shù)尾數(shù)的乘除運
算; 根據(jù)結(jié)果的階碼判斷溢出,如果上溢則置溢出標(biāo)志。
浮點運算器的設(shè)計與實現(xiàn)
硬件平臺
浮點運算器的設(shè)計與實現(xiàn)都是在開發(fā)的多功能EDA 實驗臺上完成的。該EDA 實驗臺采用FPGA-XC4010EPC84、
62256CPLD 和其它外圍芯片(例如74LS244,74LS275)組成。XILINX 公司XC4000 系列是高容量、高成本的FPGA,能夠進(jìn)行無限次重新編程,配合公司的相應(yīng)軟件FOUNDATION 3.1,用戶可以設(shè)計和調(diào)試出具有相當(dāng)功能的控制邏輯。根據(jù)不同的要求,規(guī)劃不同控制邏輯,通過把控制邏輯下載到FPGA 芯片中構(gòu)成自己的硬件平臺。
基于VHDL 語言方式
VHDL 語言具有極強(qiáng)的描述覆蓋能力,在使用VHDL 語言實現(xiàn)的過程中,我們采用自頂向下的方法來實現(xiàn)浮點運算
器。步驟如下:
(1)分析系統(tǒng)的內(nèi)部結(jié)構(gòu)并進(jìn)行系統(tǒng)劃分,確定各個模塊的功能和接口。
在設(shè)計中,根據(jù)浮點運算器的功能,將其劃分為時序產(chǎn)生模塊、浮點數(shù)輸入模塊、浮點運算模塊和結(jié)果輸出模塊4 個模
塊來實現(xiàn)。浮點運算器邏輯框圖如圖1 所示。
將這4 個模塊組合成頂層設(shè)計float_alu,該頂層設(shè)計的端口定義分別為
(2)根據(jù)浮點運算器各模塊的功能,分別編寫程序,輸入VHDL 代碼,并將其編譯成標(biāo)準(zhǔn)的VHDL 文件。
時序產(chǎn)生模塊:該模塊功能是對系統(tǒng)時鐘進(jìn)行分頻產(chǎn)生相應(yīng)的時鐘信號。本模塊中使用計數(shù)器級連的方法實現(xiàn)分頻。
浮點數(shù)輸入模塊:開關(guān)sel_1 和sel_2 為輸入數(shù)據(jù)的觸發(fā)信號。多功能EDA 實驗臺上其余開關(guān)對應(yīng)于8 位尾數(shù)和4 位階碼輸入。當(dāng)sel_1 開關(guān)按下,即sel_1=‘1’時,輸入開關(guān)中的數(shù)據(jù)作為第1 組輸入數(shù)的8 位尾數(shù)和4 位階碼;當(dāng)sel_2 開關(guān)按
下,即sel_2=‘1’時,輸入開關(guān)中的數(shù)據(jù)作為第2 組輸入數(shù)的8位尾數(shù)和4 位階碼。在該模塊中用進(jìn)程process (sel_1)和process(sel_2)來實現(xiàn)。
浮點運算模塊:該模塊主要完成各種浮點運算,是整個系統(tǒng)的核心部分。根據(jù)輸入功能選擇按鍵,在start_clk 信號上升
沿的觸發(fā)下,對輸入的兩組浮點數(shù)進(jìn)行運算。浮點運算模塊的流程圖如圖2 所示。規(guī)格化浮點數(shù)加減運算流程圖如圖3
所示,規(guī)格化浮點數(shù)乘除運算流程圖如圖4 所示。
結(jié)果輸出模塊:該模塊的功能是將浮點運算的結(jié)果輸出至多功能EDA 實驗臺相應(yīng)的發(fā)光二極管,以供觀測。
(3)VHDL 源代碼進(jìn)行綜合優(yōu)化處理。經(jīng)過上述分析后,用VHDL 語言對各個模塊進(jìn)行描述和實現(xiàn),最后對VHDL 源
代碼進(jìn)行綜合優(yōu)化處理。
(4)仿真與配置。設(shè)計的正確性可以通過仿真來驗證。圖5 是浮點減法的時序仿真圖。圖5 中的信號定義如表1 所
示。其它各種運算的時序仿真方法相同,在此不再描述。
綜合優(yōu)化處理后的VHDL程序經(jīng)仿真正確后再將生成的位流(bit)文件配置到到FPGA 的邏輯單元陣列,以定義器件
內(nèi)的邏輯功能塊和其互連的功能。
(5)下載驗證。將步驟(4)得到的器件編程文件下載到目標(biāo)芯片中,進(jìn)行硬件的測試。浮點運算的結(jié)果顯示在多功能
EDA實驗臺相應(yīng)的發(fā)光二極管上,通過觀測,可以證實所設(shè)計的浮點運算器是正確的。
基于原理圖方式
采用原理圖方式設(shè)計一個浮點運算器,首先必須分析出運算器的組成,然后使用基本的邏輯門和觸發(fā)器來實現(xiàn)。
根據(jù)前面的分析可知,浮點四則運算比起定點運算來要復(fù)雜一些。在浮點運算中,階碼和尾數(shù)是分別進(jìn)行運算的,并
且都是定點數(shù)(階碼為定點整數(shù),尾數(shù)為定點小數(shù))。因此,可以說,浮點運算器是定點運算器的擴(kuò)充和強(qiáng)化。一般浮點運算器都至少具有兩個定點數(shù)邏輯運算單元,一個用于階碼的比較和運算,另一個用于尾數(shù)的運算。從運算器結(jié)構(gòu)來講,不但要有尾數(shù)運算器,而且還要有階碼運算器。階碼運算器用來求階差、修改階碼等操作,一般只進(jìn)行加減運算。而尾數(shù)部件不但有加法器用以求和,還應(yīng)有左移和右移線路,以實現(xiàn)對尾數(shù)的操作。
我們設(shè)計的浮點運算器以尾數(shù)為8 位,階碼為4 位的浮點數(shù)為例,根據(jù)實驗開發(fā)平臺資源,其組成如圖6 所示。
由于XILINX 公司FOUNDATION 3.1 軟件本身提供的器件相當(dāng)豐富,小到邏輯門,大到全加器,類型豐富,所以我們開
發(fā)軟件選用XILINX 公司的FOUNDATION 3.1。在FOUNDATION3.1 原理圖編輯環(huán)境中設(shè)計出如圖5 所示浮點運算器的
具體原理電路,規(guī)定器件的輸入/輸出,并定義好相應(yīng)的網(wǎng)絡(luò)名稱和總線名稱。在整個浮點運算器的設(shè)計過程中,核心部
件是加法器、移位寄存器和計數(shù)器。
計數(shù)器選擇Foundation3.1 的標(biāo)準(zhǔn)庫中CB4CLED(4-Bit Loadable Cascadable Bidirectional Binary Counter with Clock Enable and Asynchronous Clear)。移位寄存器選擇Foundation3.1的標(biāo)準(zhǔn)庫中SR8CLED(8-Bit Shift Register with Clock Enable and Asynchronous Clear)。
計數(shù)器開始工作后,根據(jù)相應(yīng)的計數(shù)器輸出信號,分別對移位寄存器進(jìn)行操作。當(dāng)功能選擇的是加法或減法時,對階的結(jié)果是為了移位,在實現(xiàn)過程中,我們假定為浮點數(shù)1大于浮點數(shù)2,則對浮點數(shù)2 的尾數(shù)進(jìn)行右移。當(dāng)計數(shù)器中的階碼差減為0 時,表示右移結(jié)束,接下去便是兩浮點數(shù)的尾數(shù)相加或相減。當(dāng)功能選擇的是乘法或除法時,計數(shù)器的初始值是字長的值,在這里是8。開始計數(shù)過程前,乘法累計器被清零。計數(shù)開始后,乘法累加器、乘數(shù)寄存器和被乘數(shù)寄存器分別根據(jù)前面所說的定點數(shù)相乘所規(guī)定的操作進(jìn)行運作。當(dāng)計數(shù)器計數(shù)結(jié)束后,乘法結(jié)果分別存放于乘法累加器(高8 位)和乘數(shù)寄存器中。
當(dāng)尾數(shù)計算和階碼計算都結(jié)束后,分別把結(jié)果的階碼、尾數(shù)和溢出標(biāo)志送往EDA 實驗臺上的發(fā)光二極管。
與其它電路不同,浮點運算器在實現(xiàn)過程中必須注意時序問題。時序仿真是考慮了各個門的時延,設(shè)計出相應(yīng)的邏輯。經(jīng)過仿真和測試,其方法同VHDL 語言方式,確認(rèn)相應(yīng)的邏輯正確無誤后,生成BIT 流文件,經(jīng)下載板下載到實驗系統(tǒng)上。
結(jié)論
在計算機(jī)應(yīng)用、儀器儀表等領(lǐng)域的電子系統(tǒng)設(shè)計中,F(xiàn)PGA 技術(shù)的含量正以驚人的速度增加。浮點運算器是現(xiàn)代計算機(jī)中一個重要組成部分,利用FPGA 技術(shù),能方便靈活地設(shè)計出浮點運算器。
評論
查看更多