2D-DCT的FPGA实现

时间:2013-02-28来源:网络

由于FPGA中硬件乘法器资源有限,直接应用乘法会消耗大量的资源。本方案中使用分布式算法[4]来实现乘法,它是一种适合FPGA的乘加运算,与传统算法实现乘加运算的区别在于,执行部分积运算的先后顺序不一样。分布式算法在实现乘加功能时,首先将各输入数据的每一对应位产生的部分积预先进行相加,形成相应的部分积,然后再对各个部分积累加形成最终结果;而传统算法是所有乘积已经产生之后再相加完成乘加运算的。与传统算法相比,分布式算法可极大地减少硬件电路的规模,提高电路的执行速度。分布式乘法器结构如图5所示。

其中Cn为常系数。这种乘法器不仅能够有效地减少硬件资源,而且在增加输出端口时能够减小数据传输所带来的延迟和布局布线面积[5]. 2.3行列转换模块本文使用同步动态随机存储器(SDRAM)来存储第一次1D-DCT的中间结果及数据的行列转换。由于SDRAM与系统时钟同步,因此避免了不必要的等待周期,减少了数据存储时间。SDRAM的核心结构由多个内存单元组成,这些内存单元又分成由行和列组成的二维阵列。2D-DCT变换首先是对8×8数据块的每一行数据进行1D-DCT变换,然后将结果放入SDRAM中,每一行的结果就占SDRAM中的一行内存。SDRAM通过采用地址线行列复用技术读取其储存的内容,访问这些内存时,在地址线上依次给出行地址和列地址[6],读出SDRAM中的每一列数据,再重新送入1D-DCT模块中进行1D-DCT变换,这样就完成了整个2D-DCT的变换。

3仿真结果

整个设计采用Verilog HDL语言进行编程,使用Xilinx公司的Spartan3E系列FPGA(XC3S500E)实现,时钟晶振为50 MHz,SDRAM容量为512 MB,位宽为16 bit,同步时钟能达到100 MHz.使用的编程软件是ISE,仿真软件是ModelSim.图6是用ModelSim仿真软件仿真出来的2D-DCT的仿真结果及执行结果。其中,din是8 bit数据输入端口,dout是经变换后12 bit数据输出端口。由执行结果可以看出,从输入端口输入的64个数据在经过2D-DCT变换后,所得到的结果与期望值一致。

本文提出了分布式算法和行列分解法相结合的方案来实现2D-DCT,该方案不仅能够减少硬件资源的使用,提高资源的利用率,并能提高运算速度,能够满足数字图像和视频压缩的实时性要求。在查找表中所使用的值取的精度不够高,所以存在一定的误差,但这种误差不会引起人眼视觉上的差别,是允许存在的。因此,该方案可作为用FPGA来进行数字图像和视频压缩中的一部分。

1 2 3

关键词: D-DCT FPGA

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版