文档内容:循环存储器的编写,每一行的像素输入进行存储,再依据目标像素所在行进行相应的读取。工程中会开辟一定空间的RAM用于存储,但是以一个循环的顺序去读写换
时间节点:2014/12/20~2014/12/22
一、 循环RAM
循环RAM即为一个循环读写的存储模块,数据填充满存储区间之后再从头接写入覆盖原有的存储空间。
文档HD2AV_F3A中我们知道会在某一特定时刻进行读取操作,而且需要同时读取4行的数据,而视频的数据又是持续写入的,所以我们至少需要5个RAM来组成一个循环的RAM。这样实现一个RAM写入数据的同时4个RAM读出数据。在C语言中实现存储空间的切换可以通过指针来较为方便的实现,可是FPGA中就有其特殊性,例如一个单口RAM,只含有写使能信号、数据输入输出、地址线与时钟。这个时候就需要根据外接的输入变量来进行相应的特殊操作,输入变量包括HD2AV_F3A中提到的读使能等信号,具体的关于它的实现会在第四章的文档中讲述,本文档只讲述存储策略。
二、视频信号处理的行存储策略
视频信号一行一行的,一个像素一个像素的传输,设定五个RAM作为LineBuf。第一行存入LineBuf0、第二行存入LineBuf1….第六行覆盖存入LineBuf0。写入的操作每个周期都在进行着,而读取操作则要视外界的读使能信号而定,因为只有产生了目标信号行,有计算需求了,才会进行读的操作,而且是一次性的读出4个LineBuf里面的像素值。相应的示意图如下所示:
AdvanceWrite变量控制着写入数据在不同LineBuf之间切换,AdvanceRead控制着数据什么时候读出,即右侧的红色线条,当AdvanceRead有效的时候,读取4个LineBuf中的数据,当下一次AdvanceRead有效时,读取另外4个LineBuf的数据。
在上一个文档中的分数倍采样率变换中会产生读使能信号AdvanceWrite以及写使能信号AdvanceRead,具体关于如何通过这两个使能信号实现目的数据计算所需的4个源数据YCbCr_ReadData0/1/2/3会在第四章节中讲述。