首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
基于SOPC的视频编解码IP核的设计
来源:本站整理  作者:佚名  2011-08-22 14:31:21



  引言

    SOPC是ALTEra公司提出的片上可编程系统解决方案,它将CPU、存储器、I/O接口、DSP模块以及锁相环的系统设计所必需的模块集成到一块FPGA上,构成一个可编程的片上系统,使设计的电路在其规模、可靠性、体积、功耗、功能、上市周期、开发周期、产品维护以及硬件升级等多方面实现最优化[1]。

  目前在Altera SOPC">SOPC Builder下集成了包括UART、SPI、Ethernet、SDRAM、Flash、DMA 等控制器的IP核。此外,用户也可以根据系统的需要自己设计或者购买第三方厂商的IP核,通过Avalon总线像搭积木一样方便地将其捆绑在系统上。IP 核是经过功能验证的知识产权核,使用IP 核有以下优势:(1)提高设计性能;(2)降低产品开发成本;(3)缩短设计周期;(4)设计灵活性强;(5)仿真方便;(6) OpenCore Plus 支持无风险应用。

  当然本论文所说的IP 核功能没有那么丰富,实际上就是一个功能验证正确的用户逻辑,和商业应用的IP 核还有一定的差距。本文的主要工作就是通过硬件描述语言描述了视频信号的采集,分配,存储以及色度空间的转换等逻辑,并且验证了功能的正确性。

  1.视频编解码Camera_show原理嵌入式摄像控制系统除了必要的电源电路以外,还要包括存储电路、通信电路和下载电路等,所有的设备均与Avalon总线连接,这里主要介绍用户逻辑接口Camera_show,它完成了模拟视频数据转化成数字视频数据并在VGA上显示的功能,主要包括模拟视频信号的采集、分配(串并转换电路完成)、存储(存储控制逻辑和片上RAM完成)和色度空间转换。具体的功能框图如图1所示。

  图1 用户逻辑Camera_show的原理框图2.视频编解码IP 核Camera_Show设计视频编解码IP 核主要完成的功能包含视频信号的采集、分配、存储以及色度空间的转换。模拟视频信号经过ADV7181B 后变成了符合ITU-R656 的YUV 数字信号,但是要对YUV 信号进行处理必须将这三路信号分开并行处理,所以需要采集分配这三路信号,这是2.1 的IP核需要实现的功能;由于模拟视频信号是隔行扫描的,但是CRT 显示器是逐行扫描,如果不加处理那么必然会导致行错开,所以需要将数据进行存储,通过控制实现隔行变逐行,这是2.2 的IP 核需要实现的功能;最后经过处理的YUV 三路数字信号,需要完成色度空间的转换变成RGB 信号,这是2.3 的IP 核需要实现的功能。

  2.1 YUV 信号的采集、分配[2]

  在嵌入式摄像控制系统中,ADV7181主要承担着模拟摄像头的视频数据进行解码的任务,将CVBS的等模拟信号转化成ITU-R656标准的YUV信号。图2给出了ADV7181的功能框图。

1.jpg

图2 ADV7181功能框图

由图可以看到,对于输入的CVBS 等模拟信号经过ADV7181B芯片转换后输出YUV 信号,行同步信号HS, 帧同步信号VS。这些就是需要的数字视频信号,也就解决了数字视频源的问题。图2 给出了YUV 信号的组成排列方式,“FF,00,00”作为AV 信号的开始,所以需要构造一个检测电路。注意到SAV 和EAV 均是FF , 00 , 00 开头但是XY 的值不一样。根据芯片资料,XY[4]表示的是V ,即有用信号与空白信号的分界点,如果V=0则表示的是SAV,否则是EAV 。XY[6]是场信号的区分标志。0 是奇场,1 是偶场。

模拟信号的一行是1716 个CLOCK ,有用信号是1440 个CLOCK ,在信号采集和分配的过程中,仅需对有用信号进行采集,所以利用检测到SAV 作为一个标志,启动信号的分配过程是非常有必要的。

由于YUV 信号在模拟信号中是交织着的,所以需要一个信号选择电路。YUV 一共是三路信号,设计一个计数器进行选择,计数是O和2时,是UV信号,计数是1 和3 时是Y 信号,完成的实际上是串行信号转并行信号的过程。以上过程可以用图3的原理框图来表示。

1.jpg

图3 YUV信号的采集、分配原理图

在硬件描述语言中,完成上述过程还是比较简单的。例如检测电路,只要描述一个移位寄存器就可以了,具体代码如下:
wire Y_check=((R3==8'hff)&&(R2==8'h00)&&(R1==8'h00))?1:0;
always@(posedge CLOCK)
begin
RR1=TD_D; RR2=Rl; RR3=R2;
end
always@(negedge CLOCK)
begin
Rl=RR1; R2=RR2; R3=RR3;
end

其中的wire 变量Y_check 就是当检测到FF,00,00的时候就为1的标志。根据上文所述,区分SAV 和EAV 是根据XY[4]来决定,区分奇偶场是根据XY[7]来区分,所以只有随后的信号是SAV 的时候,信号分配电路才有效,所以需要描述一段逻辑来判断,代码如下:
reg START,FiELD;
always@(posedge CLOCK)begin
if(Y_check==1)
begin
START=~TD_D[4];
Field=TD_D[6];
end
end

START信号就是开始信号采集、分配的标志,只有当TD_D=0 也就是START= 1时信号分配电路才会工作。串转并电路代码如下:
reg [1:0] COUNTER;
always@(posedge CLOCK)begin
if (!START)
COUNTER=0;
else COUNTER = COUNTER + 1;
end
reg YPix_clock;
always@(posedge CLOCK) begin
case(COUNTER)
0 : begin Cbb=TD_D;YPix_clock=0;end
1 : begin YY =TD_D;CCr =Crr;CCb=Cbb;YPix_clock=1;end
2 : begin Crr=TD_D;YPix_clock=0;end
3 : begin YY=TD_D;CCr=Crr;CCb=Cbb;YPix_clock=1;end
endcase
end

以上代码完成了图3的功能,输入的信号名为TD_D,输出的三路信号是Cbb , YY , Crr。注意到还有个YPix_clock,实际上是27M 的2 分频,这个时钟非常有用,在下面将详细阐述。 {{分页}}

2.2 YUV 信号的存储

要将视频信号隔行变逐行,有2 种解决方法:

第1种:将一帧的数据存储下来,根据奇偶场的不同(区分可以根据XY[7]),在写周期的时候,因为奇场的行之间有偶场的信号,所以写数据的时候需要跳地址写,根据行同步信号(或者SAV也可以)来区分行,换行的时候地址要加额外的720(用来存放夹杂在奇场信号中的偶场信号),直到出现偶场信号(也就是XY[6]=1)地址切换为初始基地址加720,其余的同奇行的处理方法,具体的地址分配表参照图4。

1.jpg

图 4 地址分配表

在读周期只需要按照顺序读出就可以了,需要注意的是写时钟是13.5M,读时钟是27M,而且对于Y、U、V信号要进行分别存储。

第2种:将一行的数据存储下来,因为1716 个时钟周期刚好等于VGA 两行的时间,所以在这段时间里可以将7加个有效视频信号读取2遍,以奇行的信号去取代偶行的信号,达到隔行变逐行的目的。在实现上只要是两个RAM块进行乒乓操作就可以了,具体在后文阐述。

比较两种实现方法,方法1的优点在于图像没有失真,即奇偶行信号依旧相间在一起,方法2 却不能做到这一点,而且方法1 也可以通过乒乓方式提高运行的速度,但是由于读写时钟的不同步,每个存储空间应当读2遍。方法2也是读2遍,但是是每行读2遍,方法1是一帧数据读2遍。

[1] [2] [3] [4]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:116,625.00000 毫秒