一个图像处理算法需要像素之间的行列同步或帧同步,这个时候就必须要缓存部分图像或者整幅图像。软件处理中一般放在内存中,在FPGA中可选择放在FPGA内部或外部。
-
帧缓存
【存储器】一般FPGA的片外存储器有静态存储器(SRAM)和动态存储器(DDR)两类。静态存储器读写时序简单,便于频繁、随机访问。动态存储器存取速度慢,但是带宽大。
【帧缓存控制电路】[采用动态存储器]包含读地址发生器、写地址发生器及读写控制时序。 [采用动态存储器]可以采用FPGA厂家提供的IP核实现外部的存储器驱动,只需要提供读写需求信号。 -
行缓存【代码待补充】
【存储器】片内RAM块或FIFO。
【行缓存控制电路】[采用RAM]需要设计写入地址产生电路和读出地址产生电路,地址就是输入行的列地址。[采用FIFO]顺序写入与读出即可。
【工作状态】应处于流状态:缓存的打出时刻应该刚好在缓存装载完毕,也就是拉高输出图像行数据有效信号。这个时刻的输入数据流和输出数据流正好完成对齐。 -
利用行缓存实现图像行列对齐【代码待补充】
将行缓存连接成菊花链式:第一个行缓存的写入时刻是输入数据din的有效时刻,其他的行缓存写入时刻发生在上一个行缓存的读出时刻。 -
异步缓存
【应用场合】一些视频输出、视频输入以及与外部的异步接口场合,特点是读取速率小于写入速度。用一个异步FIFO即可实现。
【注意点】异步缓冲基本原则是防止缓存上溢(缓存上溢发生在试图将新数据加载到缓存中时,但是缓存已经满了,无法再容纳更多的数据)和下溢(缓存下溢则是指当试图从缓存中读取数据时,但发现所需的数据并不存在于缓存中):增加FIFO深度可以有效解决溢出问题。 -
增加存储器带宽
存储器带宽直接影响了系统的数据吞吐量、计算性能、响应时间和能源效率,而外部存储器通常由于成本限制往往只能存放一张完整的图像,存储器带宽限制了帧缓存的帧数和存取速率。
[增加存储器数量]:每个存储器都有独立的地址和数据总线,独立并行地和FPGA进行数据交互;
[增加存储器字宽]:相当于存储器被划分为多个分区,这些分区共享地址线,有各自的数据线。复杂的部分在于将多个像素进行合并写入寻西湖器,并在读取后将像素数据从总线上解出。//存储器带宽决定了系统能够同时读取和写入存储器的数据量;存储器字宽是指存储器中每个存储单元能够同时读取或写入的数据位数。较宽的存储器字宽可以在每个存储器访问周期内传输更多的数据。带宽是由字宽、时钟速率、传输通道数量、传输效率共同决定。
[使用多端口存储器]:单个存储器提供了多个存取接口,即多个地址线和数据线,多端口能够同时提供读写功能,但存在访问冲突的风险。使用时可以采用存储器地址分区,多端口可以同时访问不同的地址分区。
[提高时钟速率]将存储器以一个与系统其他部分更高的速度运行,可以允许在一个系统时钟内对存储器进行两次或多次访问。eg.DDR存储器,能在时钟的上升沿和下降沿各传送一次数据。//“多阶段”设计:当数据每隔几个时钟进入到流水线处理时,整个设计都能以较高的时钟速率运行。时钟周期的数目或阶段与像素时钟有关(?),多阶段设计不仅增加了带宽,且在不同阶段重复使用硬件而减少了计算硬件。