非定长码高速实时拼接专用集成电路的研制
摘要:给出一种流水线与阵列处理相结合的VLSI系统结构,以实现非定长码的高速定时拼接与存储。该结构不但并行处理能力强,能够在每个时钟周期内拼接一个非定长码,并且复杂度低,仅需10000门单元电路即可实现。利用ACTEL公司的现场可编程门阵列实现该功能,验证结构表明,所研制的专用芯片工作频率大于70MHz、功耗低于130mW、性能稳定可靠,具有良好的工程应用前景。
关键词:非定长码 并行处理 实时 大规模集成电路 系统结构 现场可编程门阵列
在数字图像、视频、语音等数据压缩应用中,经常使用熵编码,例如Huffman编码、RICE编码、算术编码等。而这些二进制的编码数据在表示中仅有若干位(即码字长度)有效数字(码字),这就要求去除冗余字位,把码字按其长度依次连接,形成紧凑的定长字,经缓存后按恒定码速率输出。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1 码字拼接功能描述
图1为数字图像压缩流程示意图。数据经压缩与熵编码后,码字长度不定,最短的码字只有1位,最长的码字需用16位表示,这些码字包含在位宽为16的输出数据中,如图2所示。
M[15:0]为熵编码输出数据,M[15:n]中存放码字,其中n等于15、14、13....2、1、0。由于每个输出数据中仅有码字长度个有效字位,这就要求去除熵编码输出数据中的冗余字位M[n-1:0],把这些有效的不定长的码字M[15:n]拼接凑整,形成定长字。如两个码字A和B长度分别为10和6,用熵编码输出数据M1[15:6]和M2[15:10]表示,这两个码字的拼接结果为Q[15:0],则Q[15:6]存储M1[15:6],Q[5:0]存储M2[15:10],即两个码字A、B拼接凑整为一个定长字Q[15:0],如图3所示。
码字拼接器就是为完成这一功能而设计的,它去除了原数据中的冗余信息,从而减少数据量,节省存储空间、降低对传输信道的带宽要求。在实际应用中,压缩与熵编码功能单元(如图1所示)在每个时钟周期输出一个熵编码数据,为保证实时性,要求码字拼接器能于每个时钟周期内完成一次拼接操作,并且每凑足16位,输出定长字。以上功能的VerilogHDL行为描述如下(该描述不可综合):
module Connector (clock,code,codelength,dataout);//码字拼接器模块
input clock; //时钟
input [15:0] code; //码字
input [4:0] codelength; //码长
output [15:0] dataout; //定长字
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;//累计码长
if(counter>=16)//如果累计码长大于等于16
begin
dataout[15:0]=tempdata[31:16];
//输出一个定长字
tempdata[31:16]=tempdata[15:0];
//低16位移动到高16位
counter=counter-16; //累计码长减16
end;
end;
endmodeule
2 VLSI体系结构
上述功能映射到VLSI结构,如图4所示。该码字拼接器采用并行阵列式结构,以流水线方式工作,能够连接不断地在每一个时钟周期内完成1到16之间的任意码长的码字的拼接凑整,每凑足16位输出定长字。
javascript:window.open(this.src);" style="cursor:pointer;"/>
图4中阵列A与阵列B中D触发器与十六选一多路选择器对的结构如图5所示。
图4和图5中,位宽为5的累加器模块是五位累加器,对码长求和,其输出由累加和译码器译码,生成D触发器与十六选一多路选择器的锁存信号Ln和选择信号Seln[0:3]。当累加结果大于等于16时,多路选择输出阵列A或B中的定长字。
阵列A和B各由16对图5所示的D触发器与十六选一多路选择器对构成,D触发器暂存码字某一特定位。累加和译码器模块对累加器的输出进行译码,其输出接到阵列A和B中32个十六选一多路选择器的选择信号端、D触发器的锁存信号端以及多路选择器的选择信号端。
javascript:window.open(this.src);" style="cursor:pointer;"/>
多路选择器模块由16个二选一的多路选择器构成。当累加器中的码长和大于等于16时,该多路选择器输出阵列A或B中的定长字。
该VLSI结构工作原理为:时钟发生有效跳变,累加器读入码长,并与原有数据累加。若累加器第五位由“0”跳变为“1”,则多路选择器将在下个周期输出阵列A的定长字;由“1”跳变为“0”,则输出阵列B的定长字;若没有跳变;不产生输出,阵列A、B读入码字。累加器中原有数据由累加和译码器译码,产生阵列A、B中相应D触发器的锁存信号Ln和十六选一多路选择器的选择信号Seln[0:3],这两个信号把码字的全部16位存入D触发器,为下一个周期作好数据准备。
javascript:window.open(this.src);" style="cursor:pointer;"/>
由此可见,对5位累加器的输出进行解释的累加和译码器,是整个电路的控制核心。它有5位输入,160位输出,其中32位输出L0~L31,160位输出,其中32位输出L0~L31,控制D触发器的锁存;其它128位Sel0[0:3] ~Sel31[0:3]控制32个十六选一多路选择器。其功能的实现方法如下:当累加器为C时,说明阵列A与B的前C位D[31:31-C+1]已是有效码字,当连接下个码字时,这些位的锁存信号为无效态,其它位允许锁存;此时第C+1个十六选一多路选择器输出当前码字最高位,存储在第C+1个D触发器中,第C+2个十六选一多路选择器输出码字次高位,存储在第C+2个D触发器中,余下以此类推,全部码字存储在在16个D触发器内。当累加器大于等于16时(即最高位由0到1跳变),说明阵列A内已经拼接凑整了一个16位定长字,此时多路选择器输出该值。当累加器再次小于16时(即最高位由A到0跳变。注释:累加器只有5位,当C加码长大于31时,C的实际值将小于16),此时表明阵列B内已经拼接凑整一个16位定长字,多路选择器输出该值。
第0个十六选一多路选择器选择信号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个D触发器的锁存信号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的十六进一多路选择器与D触发器对的控制信号的描述与以上类似,在此不一一列出。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 基于FPGA的物理实现
选用ACTEL公司的eX256TQ100-STD FPGA[2]器件实现上述的VLSI结构,研制成非定长码高速实时拼接专用集成电路[3],设计结果如表1。
表1 FPGA实现结果
资 源 | 总数(个) | 使用(个) | 占用率(%) |
时序单元 组合单元 系统门数 I/O引脚 全局时钟 硬线时钟 | 256 512 12,000 81 2 1 | 78 505 9108 42 1 1 | 30.47 98.63 75.91 51.85 50 100 |
使用ModelSim仿真器,对非定长码高速实时拼接专用集成电路进行带延时的后仿真,仿真验证结果如表2。
表2 非定长码高速实时拼接专用集成电路验证结果
工作环境 | 电压2.3V温度70℃ | 电压2.5V温度20℃ | 电压2.7V温度0℃ |
芯片速度 | 71MHz | 80MHz | 86MHz |
功 耗 | 110mW | 120mW | 128mW |
本文提出的VLSI结构,适合图像压缩、视频编码等应用中非定长码的高速实时拼接,其结构复杂度低,并行处理能力器。以ACTEL公司eX256 TQ100-STD FPGA实现该VLSI结构的专用集成电路,性能稳定可靠、工作频率高、功耗低、具有良好的工程应用前景。