新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 基于FPGA的ARM图像缩放器的实现

基于FPGA的ARM图像缩放器的实现

作者:时间:2013-04-26来源:网络收藏

3 内部模块工作原理

3.1输入时序控制模块与输出时序控制模块

输入时序控制模块是根据输入视频信号的同步信号和时序要求,确保有效的数据能够顺利写入FIFO进行缓存。例如当模块接收到场同步信号时,FIFO进入即将写入的状态,当模块接收到使能信号时, FIFO开始写入数据,这样能确保写入FIFO的数据是从完整1帧的起始开始写入。

输出时序控制模块的功能是产生输出所必需的同步信号、场同步信号和行同步信号,以保证输出图像的数据与时序一致,从而使图像可以正确地显示在显示器上。

输入输出时序控制模块,按照计数器的方法进行设计[2]。例如VGA信号的1帧图像的总像素要求为800×525,其中有效像素为640×480。对于行扫描来说可设置1~96像素时钟计数为行同步信号,97~144像素时钟计数为行消隐后肩,145~784像素时钟计数为图像有效像素显示,685~800像素时钟计数为行消隐前肩。完成一行后,计数器置0,等待新的行同步信号到来再重新计数。在图像有效像素时钟内,让写入FIFO使能信号处于有效状态,而其余时间使能信号处于无效状态,这样可保证有效图像数据能准确写入FIFO进行缓存,并等待下一步的处理。

3.2 图像缩放器模块

如图3所示,图像缩放器模块主要完成对输入图像数据源进行分辨率的缩放。根据设计,输入的图像数据为VGA 640×480格式,输出的图像数据为XGA 1024×768格式。由于输入图像数据与输出图像数据在完整1帧中的每一行像素点和每一列的数量上之比都为5:8,因此可考虑对输入的VGA信号作5:8的放大。先对数据在水平方向上进行插值放大,然后再进行垂直方向上的放大,设计中水平方向和垂直方向的插值放大均使用分级双线性插值算法。

图3 图像缩放器模块框图

3.2.1分级双线性插值 [3]

在双线性插值算法中,插值点的值根据其相邻的4个已知点计算得出,如图4所示。

图4 双线性插值算法原理图

已知a、b、c、d为输入图像内的相邻的4个点,其灰度值表示为f(x)。待插像素f点映射到原图像后的坐标值小数部分为[m,n]。计算f点灰度值的过程如式(1)~式(3)所示:

f[g]=f[a]+m(f(b)-f(a)) (1)

f[h]=f[c]+m(f(d)-f(c)) (2)

f[f]=f[g]+m(f(h)-f(g))

=(1-m)(1-n)f(a)+m(1-n)f(b)+(1-m)nf(c)+mnf(d) (3)

分级双线性插值使用的4个源图像像素点都是待插值点的直接邻点。插值的计算过程如下:

g(x)=(f(a)(m×N)+f(b)×(1-m)N)/N

其中,m与1-m分别是a点与b点的权值。因为是做5:8的转换,这里取C=N=8, 将原来为5个像素点的长度区间划分为8个区间,每个区间都有m×N与(1-m)N这一对权值组成的整数对。每个区间内部的待插值点都与该区间左边界取同样的值。8个区间的权值对应于(8,0)、(7,1)、(6,2)、(5,3)(4,4)、(3,5)、(2,6)和(1,7)。在确定好了点位置后,以查找表的方式写入权值与位置之间的关系,最后可根据内插点与临近点的相对位置查找对应系数,并通过计算得出各像素点的灰阶值。

3.2.2具体插值过程

3.2.2.1水平插值

将双线性插值分解为水平和垂直方向进行,由于是把原图像作5:8的放大,所以根据分级双线性插值,把原水平方向的5个像素点采用分8级双线性插值送入水平插值器。水平插值器由计数器与使能信号同时控制,每间隔5个时钟,水平插值器使能端置于计算插值状态,把进入的5个值进行一次插值变成新的8个像素点,之后再间隔5个时钟,将新的值进入插值器进行插值,直到把1行640个像素点插值为1行1 024个像素点。

3.2.2.2 垂直插值

垂直插值器完成垂直方向5:8的转换,即5行数据变为8行数据的转换,插值过程是按垂直方向对原来的5行数据采用分8级双线性插值,变换为新的8行数据。

完成水平插值的数据流水线型通过FIFO1与FIFO2模块,期间将FIFO1与FIFO2的值送入垂直插值器进行插值,完成垂直插值后的数据送入FIFO3与FIFO4模块,输出顺序排列在先的送入FIFO3,而另外一行数据进入FIFO4。FIFO3与FIFO4之间的数据也是流水线型进入到DDR2 SDRAM模块中,整个过程通过使用状态机对垂直插值进行控制,使经过垂直插值后的数据能以正确的顺序完成插值,并且送入DDR2 SDRAM模块。把对原5行数据经过水平和垂直插值变为8行数据的时间作为一个周期,直到完成整1帧VGA格式图像到1帧XGA图像的放大。

3.3 DDR2 SDRAM控制器模块

控制器模块的具体作用为:当SCALER完成图像数据处理后,把图像数据送进DDR2中储存,在确保DDR2中存储有2帧完整图像时,DDR2的读出端才开始读取,从第一帧图像地址读取图像数据,然后据根据时序控制从DDR2输出。当读完第一帧后,继续读取第二帧,此时第三帧继续写入原第一帧地址,之后的读取写入都按此过程进行。

由于DDR2 SDRAM不能同时写入和读出,所以需要DDR2 SDRAM控制器加以控制。可根据连接到DDR2 SDRAM模块写入端和读出端的FIFO内部已存数据数量进行读写控制。写入端前的FIFO即为图3的FIFO3。连接到DDR2读出端的FIFO为图3的FIFO2,它与输出时序控制模块共同完成最终所需XGA图像的输出。DDR2 SDRAM每次操作指令时,以1行数据为单位,即接受1次读命令,则读出1行数据;同样,接受1次写入命令,则写入1行数据,此1行数据同时为XGA格式的1行(1 024个像素点数据)。

fpga相关文章:fpga是什么


锁相环相关文章:锁相环原理


关键词: FPGA ARM 图像

评论


相关推荐

技术专区

关闭