FPGA中同步FIFO的使用小结
FPGA中的FIFO,分为同步FIFO,异步FIFO和双向FIFO。同步FIFO一般用于数据的缓存,异步FIFO一般用于跨时钟域的同步上。在这里只讨论同步FIFO的使用。 由于课题中要用FPGA做图像处理,生成3*3的模板。首先我们来分析图像数据的传输方式,线阵CCD1209D为2048个有效像元,经AD采样,每行有2048个图像数据,以串行数据流的形式来传输的,一个时钟周期传输一个像素数据。图像在交由算法模块处理之前要将得到的串行数据变成并行数据,3*3模板就是一个串并转换模块,串行数据经过此模块后变为并行输出。在图像处理算法中的实现过程若选用3*3模板,该滑动窗在某一个时刻读取图像的某个像素和其相邻像素,经过相关的处理后,用处理结果取代模板中间位置的像素值并传送到下一个模块。之后,每校正完一个像素,模板将不断右移或换行,直到将一幅灰度图像的数据阵列中的所有像素全部处理完。为了使窗中的3行3列共9个像素能够在一个时刻同时输出,便于之后的图像处理算法模块进行流水线处理,在3*3模板的硬件设计中,将采用两个FIFO存储器linebuffer1和linebuffer2。其中FIFO地址宽度为图像宽度,这样每个FIFO正好可以存储一行图像数据。模板生成模块的设计框图如下图所示:
这里我们要用到FPGA中的同步FIFO去做linebuffer。选用Verilog HDL语言。
下面介绍使用Quartus II 9.0中的宏模块生成FIFO的过程: 第一步,选megafunctions -> lmp_fifo –> storage ->
然后点OK,
接着,选Verilog语言,点下一步