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