林誼東,陳乃金,2
(1.安徽工程大學(xué)電氣工程學(xué)院,安徽蕪湖 241000;2.安徽工程大學(xué) 計算機(jī)與信息學(xué)院,安徽蕪湖 241000)
隨著計算機(jī)技術(shù)的不斷發(fā)展,該領(lǐng)域?qū)μ幚砥餍阅艿囊笠苍絹碓礁?可重構(gòu)計算系統(tǒng)因自身結(jié)構(gòu)及性能等特點(diǎn)已被應(yīng)用在較多領(lǐng)域.該系統(tǒng)功能由配置字來決定,這使得其在處理不同的算法和運(yùn)算時具有靈活性;而獨(dú)特的處理器結(jié)構(gòu)設(shè)計通過算法將運(yùn)算參數(shù)映射到可重構(gòu)系統(tǒng)中進(jìn)一步加速.在面對密集運(yùn)算時,可重構(gòu)系統(tǒng)的性能尤為突出,相比較通用處理器避免了處理器在復(fù)雜運(yùn)行過程中性能的損失同時也彌補(bǔ)了專用集成電路計算模式不可再塑、高成本、高時耗等問題.由于作為一種新型的計算系統(tǒng)其性能與設(shè)計結(jié)構(gòu)、配置信息、映射算法等都有緊密聯(lián)系,因些在面對不同領(lǐng)域的不同運(yùn)算需求時可重構(gòu)計算系統(tǒng)都需要對整體的架構(gòu)、配置、算法進(jìn)行靈活的調(diào)整以獲得在處理特定運(yùn)算時有更高的性能.
粗粒度可重構(gòu)系統(tǒng)具有高的計算性能和低的功耗消耗,已在各個領(lǐng)域內(nèi)被廣泛運(yùn)用[1],近年來相關(guān)典型研究闡述如下:文獻(xiàn)[2]提出一種多目標(biāo)優(yōu)化映射算法,與層貪婪映射算法相比,平均執(zhí)行總周期降低了8.4%和5.3%,與分裂壓縮內(nèi)核映射算法相比,降低執(zhí)行周期20.6%和21.0%.文獻(xiàn)[3]針對粗粒度單元陣列流水映射問題,設(shè)計三種行流水陣列通用的流水映射算法,與多目標(biāo)優(yōu)化映射算法相比該算法消耗總時延平均節(jié)省了4.0%(RCA4*4)和4.3%(RCA8*8). 文獻(xiàn)[4]提出一種基于深度優(yōu)先貪婪搜索劃分算法,與現(xiàn)有的簇劃分,簇層次敏感兩種劃分算法相比,顯著的改善了硬件任務(wù)的劃分成果,且運(yùn)行開銷沒有明顯增加.文獻(xiàn)[5]基于粗粒度行并行可重構(gòu)架構(gòu),提出一種行列剪枝映射算法,與放置路由算法相比執(zhí)行時間減少了15.7%(RCA4*4)和29.8%(RCA5*5),從而驗(yàn)證映射算法有效性.文獻(xiàn)[6]針對FPGA實(shí)現(xiàn)網(wǎng)絡(luò)功能提出了一種可重構(gòu)流水線模型,該模型實(shí)現(xiàn)了多種網(wǎng)絡(luò)功能,提高資源利用率.文獻(xiàn)[7]提出一種基于大整數(shù)乘法(Schonhage-Strassen,SSA)的768 Kbit大整數(shù)乘法器硬件架構(gòu),實(shí)現(xiàn)運(yùn)算時間比CPU平臺上的運(yùn)算大約有8倍的加速.文獻(xiàn)[8]提出一種運(yùn)算精度與運(yùn)算器數(shù)量可配置的并行浮點(diǎn)向量乘法運(yùn)算單元,提高了FPGA資源利用率與運(yùn)算吞吐率,同時具有高度的可移植性與通用性.文獻(xiàn)[9]提出一種適合于FPGA的低功耗多路選擇器設(shè)計方法,與傳統(tǒng)多結(jié)構(gòu)多路選擇器相比,在保證其他性能的前提下,功耗降低約28.97%.文獻(xiàn)[10]設(shè)計了基于多層次FPGA的主從式非易失性NVM(non-volatile memory)控制器,并完成適用于該架構(gòu)的硬件原型設(shè)計,實(shí)現(xiàn)了測試同類型多片NVM協(xié)同工作,也對混合NVM存儲管理方案驗(yàn)證.文獻(xiàn)[11]提出一種開源處理器綜合實(shí)現(xiàn)方法.
然而上述文獻(xiàn)均沒有對網(wǎng)格型粗粒度可重構(gòu)計算體系結(jié)構(gòu)(grid coarse grained reconfigurable architecture,GCGRA)模塊部件仿真,針對這個問題,本文進(jìn)行了研究,具體表述為對全加器、乘法器的動態(tài)功耗、結(jié)溫、I/O等參數(shù)進(jìn)行了綜合分析和比較.
圖1 網(wǎng)格型粗粒度可重構(gòu)計算系統(tǒng)[1,5]Fig.1 Grid type coarse grained reconfigurable computing system[1,5]
這個架構(gòu)是一種二維網(wǎng)格型可重構(gòu)4*4架構(gòu),該體系結(jié)構(gòu)由一塊數(shù)據(jù)存儲器模塊(Date Memory )、一塊指令存儲模塊和16塊PE組成,這樣的分布為了優(yōu)化數(shù)據(jù)和指令在運(yùn)算時執(zhí)行的同步性.這三者的組成也是PEA(Process Element Array),每一個PE都相當(dāng)于一個cpu可以進(jìn)行獨(dú)立的運(yùn)算,邊角的4個PE只可以和其相鄰的2個PE相互連通,因此這4個PE是度維2的,邊上出去度維2的PE剩下的8個PE度維3,而中間4個PE度維4.這是架構(gòu)中PE的連接特點(diǎn).其中每個PE內(nèi)部都會有一個ALU (Arithmetic Logic Unit)其進(jìn)一步展開可以完成加、減、乘、移位、多路選擇等運(yùn)算.本文正是針對其運(yùn)算中的加和乘展開設(shè)計研究.
對于乘法器已有的乘法思想進(jìn)一步進(jìn)行設(shè)計和測試驗(yàn)證.首先在要有一個乘法器設(shè)計思路,再進(jìn)行代碼程序設(shè)計進(jìn)而生成原理圖實(shí)現(xiàn)其乘法的功能,最后再對所設(shè)計的乘法器進(jìn)行仿真波形驗(yàn)證,驗(yàn)證完成后對其進(jìn)行綜合執(zhí)行得到性能參數(shù),再對參數(shù)評估分析.
3.1.1 乘法器設(shè)計思路 乘法器設(shè)計思路下所述:
(1)初始乘法部分積為0,若被乘數(shù)和乘數(shù)的位數(shù)為4,則部分積初始化為00000000;
(2)對乘數(shù)的各位由高位到低位依次讀??;
(3)若乘數(shù)讀取時某位為1,則將部分積整體左移后加上被乘數(shù);
(4)若乘數(shù)讀取時某位為0,則將部分積整體左移;
(5)乘數(shù)最高位到最低位全部完成,形成最終的積.
3.1.2 乘法器原理圖設(shè)計及生成 采用Verilog HDL作為設(shè)計語言,乘法器模塊化互連原理圖設(shè)計代碼如下所述:
(1)module變量初始化:被乘數(shù)a、乘數(shù)b 、子積m,最終積mout,開始信號s_start、數(shù)據(jù)錄入信號s_in、時鐘clk、運(yùn)算終止信號run_flag.
設(shè)定子積:對子積設(shè)定一位結(jié)束信號位賦值1,用于運(yùn)算周期結(jié)束后觸發(fā)運(yùn)算終止信號run_flag,這里4*4 則m<=000010000,并對其他變量賦初始值:
always@( negedge s_start) //當(dāng)s_start為0時將m清0,做計算前準(zhǔn)備工作
begin
m <= 9'b0_0001_0000;//1作為結(jié)束標(biāo)記
run_flag<=1; //運(yùn)行標(biāo)志,1為允許運(yùn)行
a<=din; //將乘數(shù)放到寄存器
end
(3)設(shè)定運(yùn)算規(guī)則:乘數(shù)最高位開始,若為1將子積左移后加被乘數(shù),若為0只左移:always@( posedge clk)//每個時鐘周期進(jìn)行一次移位累加,位移累加運(yùn)算
begin
if(run_flag==1) //只有運(yùn)行運(yùn)行時才執(zhí)行下面操作
begin
if(b[3]==1)//從乘數(shù)的最高位開始判斷
begin
m<=(m<<1)+a;//若為1子積先左移1位,再加被乘數(shù)
end
else
begin
m=m<<1; //若為0子積左移1位
end
b=b<<1; //找乘數(shù)的下一位
end
end
(4)運(yùn)算左移子積次數(shù)觸發(fā)運(yùn)行標(biāo)志:run_flag=m[9] 運(yùn)算終止
(5)輸出最終結(jié)果:assign mout=m[7:0]
(6)endmodule
由上6條代碼生成的原理圖如圖2所述:
圖2 4位*4位無符號乘法運(yùn)算的原理圖Fig.2 Schematic diagram of 4-bit * 4-bit unsigned multiplication operation
這個乘法器的組成是:1、2、5是D觸發(fā)器,4、15、16是多位D觸發(fā)器,其中4、15是帶使能端的D觸發(fā)器,3、7是左移寄存器,10是一位加法器,6、9、11、12、13、14是多路選擇器.
3.1.3 乘法器測試波形驗(yàn)證
圖3 4位*4位無符號乘法運(yùn)算的測試波形Fig.3 Test waveform of 4-bit * 4-bit unsigned multiplication operation
a、b分別為4位的被乘數(shù)和乘數(shù),s_start為運(yùn)算開始信號,s_in為將乘數(shù)放入寄存器中的開始信號,clk為運(yùn)算時鐘,mout為最終的積,run_flag為計算終止信號.由測試波形可得:被乘數(shù)為1011,乘數(shù)為1101,最終積為10001111.運(yùn)算結(jié)果是完全正確的,運(yùn)算過程符合設(shè)計的思路.
全加器的設(shè)計思想是由一位全加器不同的數(shù)量來構(gòu)建自己所需要的全加器位數(shù).來進(jìn)一步優(yōu)化設(shè)計用軟件代碼實(shí)現(xiàn)其電路圖的生成,再進(jìn)行仿真波形驗(yàn)證,確定設(shè)計沒有錯誤后,對其綜合執(zhí)行得到性能參數(shù)來和乘法器的參數(shù)進(jìn)行對比、評估.
3.2.1 全加器設(shè)計思路 全加器4位加4位無符號運(yùn)算設(shè)計思路情況說明如下:
(1)一位全加器包括被加數(shù)、加數(shù)、低位進(jìn)位、本位、進(jìn)位;
(2)將四個一位全加器組合,用每個全加器中的被加數(shù)和加數(shù)位分表代表二個四位二進(jìn)制數(shù);
(3)低位全加器的進(jìn)位作高位全加器的低位進(jìn)位,最低位全加器的低位進(jìn)位置0;
(4)每一位全加器的本文作為最終結(jié)果的本位,最后一位全加器的進(jìn)位作為溢出位;
(5)4個全加器中4個本位作為最終結(jié)果低4位,最高位進(jìn)位最為結(jié)果的第5位.
圖4 4位+4位無符號全加器運(yùn)算的原理圖Fig.4 Schematic diagram of 4 bit +4 bit unsigned full adder operation
3.2.2 全加器代碼設(shè)計及原理圖生成 全加器4位加4位無符號運(yùn)算的的代碼設(shè)計與文獻(xiàn)[12]類似,限于文章篇幅不在累述,生成的原理圖如圖4所述.
1由圖可得4個1位全加器中的被加數(shù)和加數(shù)組分別合成一個4位的被加數(shù)和一個4位的加數(shù).Add1是最低位,Add4是最高位.最低位的低位進(jìn)位CIn默認(rèn)為0,最高位的進(jìn)位COut作為最終結(jié)果的最高位.低位的進(jìn)位COut都與高一位的低位進(jìn)位CIn相連接,而本位作為最終的結(jié)果依次排列.
3.2.3 全加器測試波形驗(yàn)證 my_a、my_b分別為4位的被加數(shù)和加數(shù),my_cin為最低位的進(jìn)位,始終默認(rèn)為0.my_sum是最終和的前4位,my_cout是最高位的進(jìn)位也是最終和的第5位,clk為運(yùn)算時鐘.由測試波形可得:被加數(shù)為0011,加數(shù)為0001,最終和為00100.運(yùn)算結(jié)果是完全正確的,運(yùn)算過程符合設(shè)計的思路.
對這些加法器進(jìn)行測試、綜合、執(zhí)行.得到動態(tài)功耗、溫度、LUT、IO等關(guān)鍵參數(shù)對比如下:Verilog HDL實(shí)驗(yàn)仿真采用軟件仿真環(huán)境是Vivado2015,所用的仿真芯片是tbfg676-1,動態(tài)功耗部分精確到小數(shù)點(diǎn)后三位.表中提取了四個關(guān)關(guān)鍵參數(shù):硅片上溫度、動態(tài)功耗、使用LUT(look up tale)個數(shù)、IO口個數(shù),進(jìn)行分析評估.
通過圖表中數(shù)據(jù)得到的FPGA芯片結(jié)溫(junction temperature)將其繪制成折線圖的形式進(jìn)一步評估:
由圖1可得:全加器2位增加到4位、4位增加到8位、8位增加到16位、16位增加到32位溫度分別提高了2.5℃、9.1℃、6℃、21.3℃.可見隨著位數(shù)的增加FPGA芯片結(jié)溫是遞增的并且成近似指數(shù)形態(tài)增加,所以在設(shè)計全加器時要考慮數(shù)據(jù)位數(shù)的寬度.
乘法器的硅片上隨著2位到32位的增加,硅片上溫度總體呈增加趨勢,但是幅度波動的比較小最低溫度25.4℃,最高溫度26.5℃.這是源于對乘法器改進(jìn)的設(shè)計,使得乘法器的運(yùn)行過程中只添加了運(yùn)算的位數(shù)而運(yùn)算時內(nèi)部的結(jié)構(gòu)變化不大.
由圖5可得:加法器的動態(tài)功耗在2位到4位之間增加的1.315w和十六位的三十二位增加的11.228w,呈單調(diào)遞增,近似于等比例函數(shù).總體增長幅度在下降.說明隨著位數(shù)的增加加法器的效能在提高.但是設(shè)計使用時要考慮到加法器溫度、運(yùn)算器、信號延遲的極限值不能盲目的提高位數(shù)增加效能.
圖5 4位+4位無符號加法運(yùn)算的測試波形Fig.5 Test waveform of 4-bit + 4-bit unsigned addition operation
而乘法器,二位增加到四位和十六位增加到三十二位所增加的功耗分別是0.017w和0.339增加的幅度整體呈指數(shù)增長.但是從數(shù)值上可以看到功耗改變的數(shù)值明顯低于加法器.因?yàn)槠鋬?nèi)部的架構(gòu)和計算原理不同于加法器這也是本乘法器設(shè)計的優(yōu)點(diǎn).
從圖6和圖7可得:隨著位數(shù)的增加,加法器和乘法器所占用的LUT和IO口整體都是增加趨勢.IO口個數(shù)上加法器呈現(xiàn)出高于乘法器的增長速度,而LUT的增長速度二者趨向于一致.這也是動態(tài)消耗中加法器的功耗呈現(xiàn)出高于乘法器的原因所在.后期再設(shè)計中需要針對這些參數(shù)加以改進(jìn)才能更好的提高系統(tǒng)效能.
圖6 2位到32位全加器和乘法器的結(jié)溫消耗情況說明Fig.6 Description of junction temperature consumption of 2-bit to 32-bit full adder and multiplier圖7 2位到32位全加器和乘法器的動態(tài)消耗情況說明Fig.7 Description of dynamic consumption of 2-bit to 32-bit full adder and multiplier
圖8 4位全加器與4位乘法器需 要Slice LUT個數(shù)的比較Fig.8 4 bit full adder and 4 bit multiplier need to compare the number of Slice luts
由圖8可得:全加器在2位時所使用的LUT要比乘法器多2個.但是隨著位數(shù)的增加二者使用情況趨于一致.沒有較大的波動,因此在這個參數(shù)的使用情況上分析在2位到4位時乘法器對LUT的使用要略高于全加器,而在4位到16位時全加器使用LUT的個數(shù)要略高于乘法器,16位到32位時使用情況基本一致.
從數(shù)據(jù)的整體情況上來看全加器和乘法器對LUT的使用情況在4位和16位時分別有二個節(jié)點(diǎn),前后對有一定的影響.但是總體上來看二者的使用情況大體一致.因此這項(xiàng)參數(shù)在兩種運(yùn)算器中的影響要小于其他參數(shù),在以后的組合設(shè)計中可以略微考慮到二者LUT的使用情況.
圖9 4位全加器與4位乘法器需要 I/O個數(shù)的比較Fig.9 4 bit full adder and 4 bit multiplier need I/O number comparison
由圖9可得:從2位增加到4位、4位增加到8位的過程中乘法器的I/O增長個數(shù)為2、16而全加器的增長個數(shù)為6、18.但是8位增加到16位、16位增加到32位的過程中乘法器的I/O增長個數(shù)為32、64而全加器的增長個數(shù)為18、48.
I/O個數(shù)增加意味著功耗的增加,由此可以發(fā)現(xiàn)乘法器提高到8位之前效能是要高于全加器的,而在8位之后乘法器隨著位數(shù)的增加依然是2倍式的增加,全加器明顯低于乘法器的增長,也就是在8位以后全加器的效能要高于全加器,我們在后期設(shè)計組合中可以考慮到二者的效能最高點(diǎn)進(jìn)行組合運(yùn)算的設(shè)計,所以說將能耗參的研究意義重大.
本文對二維網(wǎng)格型粗粒度可重構(gòu)計算系統(tǒng)的架構(gòu)簡單的介紹,對其中ALU展開的全加器、乘法器深入設(shè)計并進(jìn)行仿真波形測試,并綜合執(zhí)行后對得到的動態(tài)功耗、結(jié)溫、查找表、IO個數(shù)進(jìn)一步比較數(shù)據(jù)得出功耗規(guī)律,為提高運(yùn)算單元的效率提供重要參考.但是本文在系統(tǒng)部件的仿真設(shè)計上還有進(jìn)一步完整設(shè)計和組合設(shè)計的完善空間.