非定長(zhǎng)碼高速實(shí)時(shí)拼接專用集成電路的研制
在數(shù)字圖像、視頻、語(yǔ)音等數(shù)據(jù)壓縮應(yīng)用中,經(jīng)常使用熵編碼,例如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;
endmodeule
2 VLSI體系結(jié)構(gòu)
上述功能映射到VLSI結(jié)構(gòu),如圖4所示。該碼字拼接器采用并行陣列式結(jié)構(gòu),以流水線方式工作,能夠連接不斷地在每一個(gè)時(shí)鐘周期內(nèi)完成1到16之間的任意碼長(zhǎng)的碼字的拼接湊整,每湊足16位輸出定長(zhǎng)字。
??? 圖4中陣列A與陣列B中D觸發(fā)器與十六選一多路選擇器對(duì)的結(jié)構(gòu)如圖5所示。??? 多路選擇器模塊由16個(gè)二選一的多路選擇器構(gòu)成。當(dāng)累加器中的碼長(zhǎng)和大于等于16時(shí),該多路選擇器輸出陣列A或B中的定長(zhǎng)字。??? 由此可見,對(duì)5位累加器的輸出進(jìn)行解釋的累加和譯碼器,是整個(gè)電路的控制核心。它有5位輸入,160位輸出,其中32位輸出L0~L31,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í)(即最高位由A到0跳變。注釋:累加器只有5位,當(dāng)C加碼長(zhǎng)大于31時(shí),C的實(shí)際值將小于16),此時(shí)表明陣列B內(nèi)已經(jīng)拼接湊整一個(gè)16位定長(zhǎng)字,多路選擇器輸出該值。
圖4和圖5中,位寬為5的累加器模塊是五位累加器,對(duì)碼長(zhǎng)求和,其輸出由累加和譯碼器譯碼,生成D觸發(fā)器與十六選一多路選擇器的鎖存信號(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)端。
?
該VLSI結(jié)構(gòu)工作原理為:時(shí)鐘發(fā)生有效跳變,累加器讀入碼長(zhǎng),并與原有數(shù)據(jù)累加。若累加器第五位由“0”跳變?yōu)椤?”,則多路選擇器將在下個(gè)周期輸出陣列A的定長(zhǎng)字;由“1”跳變?yōu)椤?”,則輸出陣列B的定長(zhǎng)字;若沒有跳變;不產(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)備。
?
第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描述:
whit 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的十六進(jìn)一多路選擇器與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。
表1 FPGA實(shí)現(xiàn)結(jié)果
?
資??? 源 | 總數(shù)(個(gè)) | 使用(個(gè)) | 占用率(%) |
時(shí)序單元 組合單元 系統(tǒng)門數(shù) I/O引腳 全局時(shí)鐘 硬線時(shí)鐘 |
256 512 12,000 81 2 1 |
78 505 9108 42 1 1 |
30.47 98.63 75.91 51.85 50 100 |
?
使用ModelSim仿真器,對(duì)非定長(zhǎng)碼高速實(shí)時(shí)拼接專用集成電路進(jìn)行帶延時(shí)的后仿真,仿真驗(yàn)證結(jié)果如表2。
表2 非定長(zhǎng)碼高速實(shí)時(shí)拼接專用集成電路驗(yàn)證結(jié)果
?
工作環(huán)境 | 電壓2.3V溫度70℃ | 電壓2.5V溫度20℃ | 電壓2.7V溫度0℃ |
芯片速度 | 71MHz | 80MHz | 86MHz |
功?? 耗 | 110mW | 120mW | 128mW |
?
本文提出的VLSI結(jié)構(gòu),適合圖像壓縮、視頻編碼等應(yīng)用中非定長(zhǎng)碼的高速實(shí)時(shí)拼接,其結(jié)構(gòu)復(fù)雜度低,并行處理能力器。以ACTEL公司eX256 TQ100-STD FPGA實(shí)現(xiàn)該VLSI結(jié)構(gòu)的專用集成電路,性能穩(wěn)定可靠、工作頻率高、功耗低、具有良好的工程應(yīng)用前景。
評(píng)論
查看更多