摘? 要: 給出一種流水線與陣列處理相結(jié)合的VLSI系統(tǒng)結(jié)構(gòu),以實(shí)現(xiàn)非定長(zhǎng)" title="定長(zhǎng)">定長(zhǎng)碼的高速實(shí)時(shí)拼接與存儲(chǔ)。該結(jié)構(gòu)不但并行處理能力強(qiáng),能夠在每個(gè)時(shí)鐘周期內(nèi)拼接一個(gè)非定長(zhǎng)碼,并且復(fù)雜度低,僅需10000門單元電路即可實(shí)現(xiàn),。利用ACTEL公司的現(xiàn)場(chǎng)可編程門陣列實(shí)現(xiàn)該功能,驗(yàn)證結(jié)果表明,所研制的專用芯片工作頻率大于70MHz,、功耗低于130mW、性能穩(wěn)定可靠,具有良好的工程應(yīng)用前景,。?
關(guān)鍵詞: 非定長(zhǎng)碼? 并行處理? 實(shí)時(shí)? 大規(guī)模集成電路? 系統(tǒng)結(jié)構(gòu)? 現(xiàn)場(chǎng)可編程門陣列?
?
在數(shù)字圖像,、視頻、語(yǔ)音等數(shù)據(jù)壓縮應(yīng)用中,經(jīng)常使用熵編碼" title="熵編碼">熵編碼,例如Huffman編碼,、RICE編碼,、算術(shù)編碼等。而這些二進(jìn)制的編碼數(shù)據(jù)在表示中僅有若干位(即碼字長(zhǎng)度)有效數(shù)字(碼字),這就要求去除冗余字位,把碼字按其長(zhǎng)度依次連接,形成緊湊的定長(zhǎng)字,經(jīng)緩存后按恒定碼速率輸出,。?
1 碼字拼接功能描述?
圖1為數(shù)字圖像壓縮流程示意圖,。數(shù)據(jù)經(jīng)壓縮與熵編碼后,碼字長(zhǎng)度不定,最短的碼字只有1位,最長(zhǎng)的碼字需用16位表示,這些碼字包含在位寬為16的輸出數(shù)據(jù)中,如圖2所示。?
?
?
?
M[15:0]為熵編碼輸出數(shù)據(jù),M[15:n]中存放碼字,其中n等于15,、14,、13....2、1,、0,。由于每個(gè)輸出數(shù)據(jù)中僅有碼字長(zhǎng)度個(gè)有效字位,這就要求去除熵編碼輸出數(shù)據(jù)中的冗余字位M[n-1:0],把這些有效的不定長(zhǎng)的碼字M[15:n]拼接湊整,形成定長(zhǎng)字。如兩個(gè)碼字A和B長(zhǎng)度分別為10和6,用熵編碼輸出數(shù)據(jù)M1[15:6]和M2[15:10]表示,這兩個(gè)碼字的拼接結(jié)果為Q[15:0],則Q[15:6]存儲(chǔ)M1[15:6],Q[5:0] 存儲(chǔ)M2[15:10],即兩個(gè)碼字A,、B拼接湊整為一個(gè)定長(zhǎng)字Q[15:0],如圖3所示,。?
?
?
碼字拼接器就是為完成這一功能而設(shè)計(jì)的,它去除了原數(shù)據(jù)中的冗余信息,從而減少數(shù)據(jù)量,節(jié)省存儲(chǔ)空間,、降低對(duì)傳輸信道的帶寬要求。在實(shí)際應(yīng)用中,壓縮與熵編碼功能單元(如圖1所示)在每個(gè)時(shí)鐘周期輸出一個(gè)熵編碼數(shù)據(jù),為保證實(shí)時(shí)性,要求碼字拼接器能于每個(gè)時(shí)鐘周期內(nèi)完成一次拼接操作,并且每湊足16位,輸出定長(zhǎng)字,。以上功能的VerilogHDL行為描述如下(該描述不可綜合):?
??? module Connector(clock, code, codelength, dataout); //碼字拼接器模塊?
??? input clock; ?????????????? //時(shí)鐘?
??? input [15:0] code; ???? //碼字?
??? input [4:0]? codelength; ?? //碼長(zhǎng)?
??? output [15:0] dataout; //定長(zhǎng)字?
??? reg [4:0] counter;?
??? reg [31:0] tempdata;?
??? initial? ?????????????????? //初始化?
??????? begin?
??????????? counter = 0;?
??????? end?
??? always @(posedge clock) ??? //clock 上升沿?
??????? begin?
??????????? tempdata[(31-counter):(31-counter-15)]=code[15:0]; //緩存碼字?
??????????? counter=counter+codelength; //累計(jì)碼長(zhǎng)?
??????????? if(counter>=16)//如果累計(jì)碼長(zhǎng)大于等于16?
??????????????? begin?
??????????????????? dataout[15:0]=tempdata[31:16];//輸出一個(gè)定長(zhǎng)字?
??????????????????? tempdata[31:16]=tempdata[15:0];?//低16位移動(dòng)到高16位?
??????????????????? counter=counter-16;//累計(jì)碼長(zhǎng)減16?
??????????? end;?
??????? end;?
??? endmodule?
2 VLSI體系結(jié)構(gòu)?
上述功能映射到VLSI結(jié)構(gòu),如圖4所示,。該碼字拼接器采用并行陣列式結(jié)構(gòu),以流水線方式工作,能夠連續(xù)不斷地在每一個(gè)時(shí)鐘周期內(nèi)完成1到16之間的任意碼長(zhǎng)的碼字的拼接湊整,每湊足16位輸出定長(zhǎng)字。
?
?
圖4中陣列A與陣列B中D觸發(fā)器與十六選一多路" title="多路">多路選擇器對(duì)的結(jié)構(gòu)如圖5所示,。?
?
?
圖4和圖5中,位寬為5的累加器" title="累加器">累加器模塊是五位累加器,對(duì)碼長(zhǎng)求和,其輸出由累加和譯碼器譯碼,生成D觸發(fā)器與十六選一多路選擇器的鎖存" title="鎖存">鎖存信號(hào)Ln和選擇信號(hào)Seln[0:3],。當(dāng)累加結(jié)果大于等于16時(shí),多路選擇器輸出陣列A或B中的定長(zhǎng)字。?
陣列A和B各由16對(duì)圖5所示的D觸發(fā)器與十六選一多路選擇器對(duì)構(gòu)成,D觸發(fā)器暫存碼字某一特定位,。累加和譯碼器模塊對(duì)累加器的輸出進(jìn)行譯碼,其輸出接到陣列A和B中32個(gè)十六選一多路選擇器的選擇信號(hào)端,、D觸發(fā)器的鎖存信號(hào)端以及多路選擇器的選擇信號(hào)端。?
多路選擇器模塊由16個(gè)二選一的多路選擇器構(gòu)成,。當(dāng)累加器中的碼長(zhǎng)和大于等于16時(shí),該多路選擇器輸出陣列A或B中的定長(zhǎng)字,。?
該VLSI結(jié)構(gòu)工作原理為:時(shí)鐘發(fā)生有效跳變,累加器讀入碼長(zhǎng),并與原有數(shù)據(jù)累加。若累加器第五位由“0”跳變?yōu)椤?”,則多路選擇器將在下個(gè)周期輸出陣列A的定長(zhǎng)字;由“1”跳變?yōu)椤?”,則輸出陣列B的定長(zhǎng)字;若沒(méi)有跳變,不產(chǎn)生輸出,陣列A,、B讀入碼字,。累加器中原有數(shù)據(jù)由累加和譯碼器譯碼,產(chǎn)生陣列A、B中相應(yīng)D觸發(fā)器的鎖存信號(hào)Ln和十六選一多路選擇器的選擇信號(hào)Seln[0:3],這兩個(gè)信號(hào)把碼字的全部16位存入D觸發(fā)器,為下一個(gè)周期作好數(shù)據(jù)準(zhǔn)備,。?
由此可見(jiàn),對(duì)5位累加器的輸出進(jìn)行解釋的累加和譯碼器,是整個(gè)電路的控制核心,。它有5位輸入,160位輸出,其中32位輸出L0~L31,控制D觸發(fā)器的鎖存;其它128位Sel0[0:3]~Sel31[0:3]控制32個(gè)十六選一多路選擇器。其功能的實(shí)現(xiàn)方法如下:當(dāng)累加器為C時(shí),說(shuō)明陣列A與B的前C位D[31:31-C+1]已是有效碼字,當(dāng)連接下個(gè)碼字時(shí),這些位的鎖存信號(hào)為無(wú)效態(tài),其它位允許鎖存;此時(shí)第C+1個(gè)十六選一多路選擇器輸出當(dāng)前碼字最高位,存儲(chǔ)在第C+1個(gè)D觸發(fā)器中,第C+2個(gè)十六選一多路選擇器輸出碼字次高位,存儲(chǔ)在第C+2個(gè)D觸發(fā)器中,余下以此類推,全部碼字存儲(chǔ)在在16個(gè)D觸發(fā)器內(nèi),。當(dāng)累加器大于等于16時(shí)(即最高位由0到1跳變),說(shuō)明陣列A內(nèi)已經(jīng)拼接湊整了一個(gè)16位定長(zhǎng)字,此時(shí)多路選擇器輸出該值,。當(dāng)累加器再次小于16時(shí)(即最高位由1到0跳變。注釋:累加器只有5位,當(dāng)C加碼長(zhǎng)大于31時(shí),C的實(shí)際值將小于16),此時(shí)表明陣列B內(nèi)已經(jīng)拼接湊整一個(gè)16位定長(zhǎng)字,多路選擇器輸出該值,。?
第0個(gè)十六選一多路選擇器選擇信號(hào)Sel0[3:0]的VHDL描述如下[1]:?
??? case(C)?? ?
??? Sel0 <= ″1111″ when ″00000″, ?
??????????? ″1110″ when ″00001″,?
??????????? ″1101″ when ″00010″, ?
??????????? ″1100″ when ″00011″,?
??????????? ″1011″ when ″00100″,?
??????????? ″1010″ when ″00101″, ?
??????????? ″1001″ when ″00110″,?
??????????? ″1000″ when ″00111″,?
??????????? ″0111″ when ″01000″, ?
??????????? ″0110″ when ″01001″,?
??????????? ″0101″ when ″01010″,?
??????????? ″0100″ when ″01011″, ?
??????????? ″0011″ when ″01100″,?
??????????? ″0010″ when ″01101″,?
??????????? ″0001″ when ″01110″,?
??????????? ″0000″ when ″01111″,?
??????????? ″----″? when others;?
第0個(gè)D觸發(fā)器的鎖存信號(hào)L0的VHDL描述:?
with C select?
??? L0? <= '1' when ″00000″ | ″00001″ |″00010″|″00011″|″00100″|″00101″|″00110″|″00111″|″01000″| ″01001″ |″01010″|″01011″|″01100″|″01101″|″01110″|″01111″,?
'0' when others;?
其它1到31的十六選一多路選擇器與D觸發(fā)器對(duì)的控制信號(hào)的描述與以上類似,在此不一一列出,。?
3 基于FPGA的物理實(shí)現(xiàn)?
選用ACTEL公司的eX256TQ100-STD FPGA[2]器件實(shí)現(xiàn)上述的VLSI結(jié)構(gòu),研制成非定長(zhǎng)碼高速實(shí)時(shí)拼接專用集成電路[3],設(shè)計(jì)結(jié)果如表1。 ?
?
?
使用ModelSim仿真器,對(duì)非定長(zhǎng)碼高速實(shí)時(shí)拼接專用集成電路進(jìn)行帶延時(shí)的后仿真,仿真驗(yàn)證結(jié)果如表2,。?
?
?
本文提出的VLSI結(jié)構(gòu),適合圖像壓縮、視頻編碼等應(yīng)用中非定長(zhǎng)碼的高速實(shí)時(shí)拼接,其結(jié)構(gòu)復(fù)雜度低,并行處理能力強(qiáng),。以ACTEL公司eX256 TQ100-STD FPGA實(shí)現(xiàn)該VLSI結(jié)構(gòu)的專用集成電路,性能穩(wěn)定可靠,、工作頻率高、功耗低,、具有良好的工程應(yīng)用前景,。?
參考文獻(xiàn)?
1 程子敬,周孝寬. 基于FPGA的緊湊位編碼器設(shè)計(jì). IC集成電路應(yīng)用,1999(3)2~4?
2 FPGA Data Book. Actel Corporation, 2001.?
3 程子敬,姜洪旭.高速低功耗FPGA設(shè)計(jì)技術(shù).電子產(chǎn)品世界,2001(8,A版):37~38