基于USB2.0芯片的H.264解码器芯片设计
发布时间:2008/5/28 0:00:00 访问次数:649
h.264/avc标准具有一系列优于mpeg4和h.263的新特性,在相同的重建图像质量下,h.264比h.263节约50%左右的码率。但是节约码率的代价是增加了算法复杂度。由于仅用软件已经无法实现实时地解码过程。所以必须利用硬件加速,这正是本解码器设计的初衷。
虽然h.264相较同质量的h.263图像,码率节约一半,但是由于本解码器的目标是解决h.264的高清图像(1080i)的解码工作,同时也要适用于普遍的视频外设,所以选用的接口既需要完成高速的码流源文件的传输工作也要易于插拔。而usb接口恰好符合这两个条件。高质量的源码文件数据量较大,对传输接口要求较高。并且在fpga的仿真环境下,usb接口还要担负起向pc上位机回传解码结果的任务。这就要求传输速度至少要保证超越解码速度。和usb1.1接口相比,usb2.0接口的传输更加符合本设计的要求。
经过计算可知,传输接口需要至少30mb/s的传输速率,才能保证对1080i的图像进行解码。
器件选型
使用fpga进行仿真和验证基本已成为ic设计过程中必不可少的环节,尤其对于大规模的设计。本解码器ic的设计使用virtexiifpga作为仿真环境。对于本设计,利用ff1517bga封装的xc2v6000已经充分满足设计要求。在考虑设计成本的前提下,该款fpga是相对高性价比的选择。
cypress公司的ez-usbfx2是一款集成了usb2.0的微处理器,它集成了usb2.0收发器、sie(串行接口引擎)、增强的8051微控制器和可编程的外围接口。fx2的这种优化设计,几乎能达到56mb/s的数据传输率,而usb2.0允许的最大带宽是480mb/s,即60mb/s。该芯片在对传输带宽影响很小的前提下,增加了许多集成的控制功能。gpif和slavefifo模式为外部的fpga、dsp和ata等提供了简单和无缝的连接接口。
系统构架
本设计的主体如图1所示,在fpga的仿真平台中,virtexii包括了解码器主体和fpga的接口模块。usb2.0芯片68013a作为独立部分,负责fpga和pc之间的usb数据传输。fpga片外的sram与dram作为fpga的扩展存储设备,用于存放解码器所需的源码文件,解码后的文件以及解码器中用到的软件程序文件。本设计中,解码器端具备强大的功能,内嵌有一个cpu。可以进行主动识别命令的功能。所以pc端和解码器处于对等的地位。pc端的工作包括发送命令头,发送命令,发送码流,接收回传解码结果等;fpga端的工作包括接收并识别命令头与pc命令,接收并向sram和dram中存储码流,读取sram和dram中的解码结果并且回传给pc端。
usb2.0芯片的工作方式及固件编写
1芯片工作方式的确定
在设计中,存在两个过程涉及到大批量的数据文件传输:pc向下传输源码文件,fpga向上位pc传输解码结果文件。其对usb传输要求最高。如果当传输的源码文件无法适应解码速度时,会导致解码器停顿;如果当回传解码结果滞后时,会造成未被传输的解码结果被覆盖。任何一种情况的出现,都将直接导致解码器工作失败。
在传输要求甚高的情况下,选用ez-usbfx2提供的slavefifo的bulk(批量传输)模式,能很好的满足传输要求。在这种模式下,usb芯片内存单元中划分出6个端点(endpoint),以下简称为ep。ep0和ep1被保留作为芯片配置fifo。ep2、4、6、8可作为用户传输,并且4个ep采用双重fifo(doublefifo)的方式组织构成。
举例来说,如图2所示,usb执行out传输,将ep2端点设成512字节双重fifo。在外部器件看来,usb端只要有1个512字节的fifo为“半满”,就可以继续发送数据。当操作的fifo写“满”时,fx2自动将其转换到外部接口端,排除等候读取;并将usb接口队列中下一个为“空”的fifo转移到usb接口上,供其继续写数据。外部接口端与此类似,只要有1个fifo为“半满”,就可以继续读取数据。当前操作的fifo读“空”时,fx2自动将其转换到usb接口端,排除等候写并将外部接口队列中下一个为“满”的fifo转移到接口上,供外部器件使用。
为双重fifo的工作过程。当一个512字节的fifo满时,fpga可以取出里面的数据,同时pc可以向另一个fifo写入数据(一组实箭头)。当一个512字节的fifo空时,pc可以写入数据。同时fpga可以读取另一个仍然有数据的fifo(一组虚箭头)。
双重ep运作模式
2固件程序设计
在通过编写固件程序初始化usb设备过程中,以下重要的配置寄存器需要设置。
ifconfig;设置usb时钟由外部提供,并且选用slavefifo模式。
epxcfg(x=2,4,6,8);配置4个ep(端点fifo)的模式。
epxfifocfg(x=2,4,6,8);配置4个ep的自动传输模式以及传输位宽。
其他一些寄存器,根据实际的需要可以单独配置。本设计中配置ep2用于传输命令头,ep4用于传输源码文件,ep6用于传输命令,ep8用于传输解码结果文件。
在完成固件程序的设计之后,可以利用fx2自带的controlpanel将固件程序的编译结果下载到68013a的芯片中,或
h.264/avc标准具有一系列优于mpeg4和h.263的新特性,在相同的重建图像质量下,h.264比h.263节约50%左右的码率。但是节约码率的代价是增加了算法复杂度。由于仅用软件已经无法实现实时地解码过程。所以必须利用硬件加速,这正是本解码器设计的初衷。
虽然h.264相较同质量的h.263图像,码率节约一半,但是由于本解码器的目标是解决h.264的高清图像(1080i)的解码工作,同时也要适用于普遍的视频外设,所以选用的接口既需要完成高速的码流源文件的传输工作也要易于插拔。而usb接口恰好符合这两个条件。高质量的源码文件数据量较大,对传输接口要求较高。并且在fpga的仿真环境下,usb接口还要担负起向pc上位机回传解码结果的任务。这就要求传输速度至少要保证超越解码速度。和usb1.1接口相比,usb2.0接口的传输更加符合本设计的要求。
经过计算可知,传输接口需要至少30mb/s的传输速率,才能保证对1080i的图像进行解码。
器件选型
使用fpga进行仿真和验证基本已成为ic设计过程中必不可少的环节,尤其对于大规模的设计。本解码器ic的设计使用virtexiifpga作为仿真环境。对于本设计,利用ff1517bga封装的xc2v6000已经充分满足设计要求。在考虑设计成本的前提下,该款fpga是相对高性价比的选择。
cypress公司的ez-usbfx2是一款集成了usb2.0的微处理器,它集成了usb2.0收发器、sie(串行接口引擎)、增强的8051微控制器和可编程的外围接口。fx2的这种优化设计,几乎能达到56mb/s的数据传输率,而usb2.0允许的最大带宽是480mb/s,即60mb/s。该芯片在对传输带宽影响很小的前提下,增加了许多集成的控制功能。gpif和slavefifo模式为外部的fpga、dsp和ata等提供了简单和无缝的连接接口。
系统构架
本设计的主体如图1所示,在fpga的仿真平台中,virtexii包括了解码器主体和fpga的接口模块。usb2.0芯片68013a作为独立部分,负责fpga和pc之间的usb数据传输。fpga片外的sram与dram作为fpga的扩展存储设备,用于存放解码器所需的源码文件,解码后的文件以及解码器中用到的软件程序文件。本设计中,解码器端具备强大的功能,内嵌有一个cpu。可以进行主动识别命令的功能。所以pc端和解码器处于对等的地位。pc端的工作包括发送命令头,发送命令,发送码流,接收回传解码结果等;fpga端的工作包括接收并识别命令头与pc命令,接收并向sram和dram中存储码流,读取sram和dram中的解码结果并且回传给pc端。
usb2.0芯片的工作方式及固件编写
1芯片工作方式的确定
在设计中,存在两个过程涉及到大批量的数据文件传输:pc向下传输源码文件,fpga向上位pc传输解码结果文件。其对usb传输要求最高。如果当传输的源码文件无法适应解码速度时,会导致解码器停顿;如果当回传解码结果滞后时,会造成未被传输的解码结果被覆盖。任何一种情况的出现,都将直接导致解码器工作失败。
在传输要求甚高的情况下,选用ez-usbfx2提供的slavefifo的bulk(批量传输)模式,能很好的满足传输要求。在这种模式下,usb芯片内存单元中划分出6个端点(endpoint),以下简称为ep。ep0和ep1被保留作为芯片配置fifo。ep2、4、6、8可作为用户传输,并且4个ep采用双重fifo(doublefifo)的方式组织构成。
举例来说,如图2所示,usb执行out传输,将ep2端点设成512字节双重fifo。在外部器件看来,usb端只要有1个512字节的fifo为“半满”,就可以继续发送数据。当操作的fifo写“满”时,fx2自动将其转换到外部接口端,排除等候读取;并将usb接口队列中下一个为“空”的fifo转移到usb接口上,供其继续写数据。外部接口端与此类似,只要有1个fifo为“半满”,就可以继续读取数据。当前操作的fifo读“空”时,fx2自动将其转换到usb接口端,排除等候写并将外部接口队列中下一个为“满”的fifo转移到接口上,供外部器件使用。
为双重fifo的工作过程。当一个512字节的fifo满时,fpga可以取出里面的数据,同时pc可以向另一个fifo写入数据(一组实箭头)。当一个512字节的fifo空时,pc可以写入数据。同时fpga可以读取另一个仍然有数据的fifo(一组虚箭头)。
双重ep运作模式
2固件程序设计
在通过编写固件程序初始化usb设备过程中,以下重要的配置寄存器需要设置。
ifconfig;设置usb时钟由外部提供,并且选用slavefifo模式。
ecfg(x=2,4,6,8);配置4个ep(端点fifo)的模式。
efifocfg(x=2,4,6,8);配置4个ep的自动传输模式以及传输位宽。
其他一些寄存器,根据实际的需要可以单独配置。本设计中配置ep2用于传输命令头,ep4用于传输源码文件,ep6用于传输命令,ep8用于传输解码结果文件。
在完成固件程序的设计之后,可以利用fx2自带的controlpanel将固件程序的编译结果下载到68013a的芯片中,或