设计与仿真打开FPGA的子图像提取大门

2014-06-16 10:23 来源:电子信息网 作者:娣雾儿

RAM 块共有1024 个单元,每个单元为16 位的宽度,可存放最近的16 行图像数据。对比图2 和图3,可以发现,RAM 块的地址编号相当于线阵CCD 图像的某一行像素的位置,某个RAM单元的位D15 ~ D0 对应某一列的最近16 个像素,相当于对线阵图像转置后再存放到RAM 块中。对RAM 缓冲区进行写操作时,由于线阵CCD 图像的数据是按行逐位输入的,每个CCD_CLK 时钟上升沿出现时,仅需更新RAM 缓冲区中当前像素对应的比特,因此在逻辑上是根据图像按行写入RAM 区的。在FPGA器件中,可设计一个状态机来实现“图像转置缓冲区”的读写操作,如图4所示。

仿真3

子图像提取模块输出的子图像有256 个像素,在FPGA 内部通过寄存器暂存上一个输出的子图像;当更新RAM 区的某个像素时,把16X16 的滑动窗口向右移动一列像素的位置,把滑动窗口内的数据作为输出,就可以得到新的子图像。

2 设计仿真

在本文的设计仿真中,由于用到图像文件的解析和图像显示,因此借助MATLAB 和Modelsim 软件,通过文件读写的方式实现的联合仿真,可使仿真处理更加便捷和直观。其中,MATLAB 用来把图像文件转换为输入的像素,以及显示输出的子图像;Modelsim 用来仿真和验证FPGA 设计是否正确。

本文使用MATLAB 和Modelsim 进行联合仿真,主要有以下三个步骤。第一步,在MATLAB 中编写m 文件,读取bmp 位图文件并把像素数据写入文件datain.txt 中,作为ModelSim仿真的输入激励信号。第二步,在ModelSim 中,用VHDL 编写Testbench 测试文件,读取datain.txt 文件,产生与CCD_CLK 同步的像素信号;编写DO 文件进行自动化仿真,再把仿真输出的子图像数据保存在dataout.txt 文件中。第三步,在MATLAB 中编写m 文件,解析dataout.txt 文件,依次显示为16×16 的黑白图片序列,确定仿真结果是否正确。本设计仿真输入的图像及输出的子图像序列,如图5 所示。从仿真结果可知,设计方法是正确的,仿真结果符合设计功能的要求。

仿真4

3 总结

线阵CCD图像传感器进行产品检测时,连续高速地输出子图像序列是相当的重要环节,基于FPGA实现子图像序列的提取和输出有多种不同的设计方法,采用图像转向缓冲区和状态机的方式,实现系统要求的子图像提取和输出功能,使用MATLABatlab和ModelSim仿真工具软件对设计进行联合仿真,其具有FPGA资源占用少、结构简单、高速处理,及便捷和直观等特点,对其他类似FPGA设计项目有很好的参考作用。

< 1 2 
FPGA 仿真

相关阅读

暂无数据

一周热门