FPGA 双通道视频接口实战应用
1 摘要
图像拼接及视频显示在医疗、军工以及汽车影像行业都有广泛的应用。视频采集及视频处理,在FPGA领域是典型设计。本文主要针对视频处理设计基础的处理框架,同时把握HDMI、VGA等最基础的接口时序,为后续视频拼接、图像处理提供基础。本设计主要涉及DDR、HDMI接口时序、AXI总线等知识。当然后续处理还包括了视频缩放,字符OSD等。在设计之初多通道视频采集,主要需要考虑视频带宽以及SDRAM带宽处理速度。
2 视频信号接口时序
视频信号时序接口可以参考VESA_VGA时序标准。时序接口主要包括行同步信号、场同步信号。显示器扫描方式分为逐行扫描,逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,在回到屏幕的左边下一行的起始位置,在这期间进行消隐,每行结束时,用行同步信号进行同步,当扫描完所有的行,形成一帧,用场同步信号进行场同步,并扫描回到屏幕左上方,同时进行场消隐,开始下一帧。简单的理解,即行同步统计了一行包括前沿、消隐等总像素个数。场同步统计了一帧视频图像包含多少行图像数据。
3 具体设计
1 、HDMI视频信号通过两个LINEBUFFER乒乓流水操作。ARB仲裁控制AXI SDRAM与LINEBUFFER之间数据交互。视频信号一直采集进入BUFFER中,一个BUFFER作为外部写入操作同时另外一个BUFFER作为SDRAM数据的读取,乒乓操作提高了数据流读写效率。采用四颗SDRAM颗粒组成一个大的缓存区间,对于视频采集视频输出的框架,同样SDRAM可以采用乒乓机制环入环出。
2、乒乓处理
具体步骤如下:
1、在第一个缓冲周期,输入数据流写入数据缓冲模块Memory0,写完后进入第二个缓冲周期。
2、在第二个缓冲周期,输入数据流写入数据缓冲模块Memory1,同时将数据缓冲模块Memory0中的数据读出。
3、在第三个缓冲周期,输入数据流再次写入数据缓冲模块Memory0,同时将数据缓冲模块Memory1中的数据读出。
3、仿真结果
AXI4 是一种 READY,VALID 握手通信机制。当主从模块进行数据通信前,根据操作对各所用到的数据、地址通道进行握手。传输发送方必须等到传输接受者的READY信号后,发送方将数据与VALID信号同时发送给接收者。简单理解主从双方进行数据通信前,有一个握手的过程。数据传输发送方产生 VLAID 信号来指明何时数据或控制信息有效。从目地接收者产生READY信号来指明已经准备好接受数据或控制信息。传输发生在VALID和 READY信号同时为高时有效。由于仲裁模块代码比较多,这里给出了模块的基本信号及接口定义。
module ARB_2_AXI4 #
(
parameter APP_DATA_WIDTH = 512
)
(
XRST ,
CLK ,
// Arbiter interface
MEMW_REQ ,
MEMW_ADR ,
MEMW_CYC ,
MEMW_ACK ,
MEMW_WRVLD ,
MEMW_WRDAT ,
MEMW_WBE ,
MEMR_REQ ,
MEMR_ADR ,
MEMR_CYC ,
MEMR_ACK ,
MEMR_RDVLD ,
MEMR_RDDAT ,
MEMR_DATAEND ,
// Slave Interface Write Address Ports
AXI_AWID ,
AXI_AWADDR ,
AXI_AWLEN ,
AXI_AWSIZE ,
AXI_AWBURST ,
AXI_AWLOCK ,
AXI_AWCACHE ,
AXI_AWPROT ,
AXI_AWQOS ,
AXI_AWVALID ,
AXI_AWREADY ,
//Slave Interface Write Data Ports
AXI_WDATA ,
AXI_WSTRB ,
AXI_WLAST ,
AXI_WVALID ,
AXI_WREADY ,
//Slave Interface Write Response Ports
AXI_BID ,
AXI_BRESP ,
AXI_BVALID ,
AXI_BREADY ,
//Slave Interface Read Address Ports
AXI_ARID ,
AXI_ARADDR ,
AXI_ARLEN ,
AXI_ARSIZE ,
AXI_ARBURST ,
AXI_ARLOCK ,
AXI_ARCACHE ,
AXI_ARPROT ,
AXI_ARQOS ,
AXI_ARVALID ,
AXI_ARREADY ,
//Slave Interface Read Data Ports
AXI_RID ,
AXI_RDATA ,
AXI_RRESP ,
AXI_RLAST ,
AXI_RVALID ,
AXI_RREADY
);
//---------------------------------------------------------------------
// Defination of Port Signals
//---------------------------------------------------------------------
input XRST ;
input CLK ;
// Arbiter IF
input MEMW_REQ ; // (i) memory requeset
input [ 31:0] MEMW_ADR ; // (i) address
input [ 9:0] MEMW_CYC ; // (i) cycle
output MEMW_ACK ; // (o) ACK
output MEMW_WRVLD ; // (o) write valid
input [(APP_DATA_WIDTH - 1):0] MEMW_WRDAT ; // (i) write data
input [(APP_DATA_WIDTH/8-1):0] MEMW_WBE ; // (i) write data byte enable
;
input MEMR_REQ ; // (i) memory requeset
input [ 31:0] MEMR_ADR ; // (i) address
input [ 9:0] MEMR_CYC ; // (i) cycle
output MEMR_ACK ; // (o) ACK
output MEMR_RDVLD ; // (o) read valid
output [(APP_DATA_WIDTH - 1):0] MEMR_RDDAT ; // (o) read data
output MEMR_DATAEND ; // (o) data transform end
// Slave Interface Write Address Ports
output [ 3:0] AXI_AWID ;
output [31:0] AXI_AWADDR ;
output [ 7:0] AXI_AWLEN ;
output [ 2:0] AXI_AWSIZE ;
output [ 1:0] AXI_AWBURST ;
output AXI_AWLOCK ;
output [ 3:0] AXI_AWCACHE ;
output [ 2:0] AXI_AWPROT ;
output [ 3:0] AXI_AWQOS ;
output AXI_AWVALID ;
input AXI_AWREADY ;
//Slave Interface Write Data Ports
output [(APP_DATA_WIDTH - 1):0] AXI_WDATA ;
output [(APP_DATA_WIDTH/8-1):0] AXI_WSTRB ;
output AXI_WLAST ;
output AXI_WVALID ;
input AXI_WREADY ;
//Slave Interface Write Response Ports
input [ 3:0] AXI_BID ;
input [ 1:0] AXI_BRESP ;
input AXI_BVALID ;
output AXI_BREADY ;
//Slave Interface Read Address Ports
output [ 3:0] AXI_ARID ;
output [31:0] AXI_ARADDR ;
output [ 7:0] AXI_ARLEN ;
output [ 2:0] AXI_ARSIZE ;
output [ 1:0] AXI_ARBURST ;
output AXI_ARLOCK ;
output [ 3:0] AXI_ARCACHE ;
output [ 2:0] AXI_ARPROT ;
output [ 3:0] AXI_ARQOS ;
output AXI_ARVALID ;
input AXI_ARREADY ;
//Slave Interface Read Data Ports
input [ 3:0] AXI_RID ;
input [(APP_DATA_WIDTH - 1):0] AXI_RDATA ;
input [ 1:0] AXI_RRESP ;
input AXI_RLAST ;
input AXI_RVALID ;
output AXI_RREADY ;
从仿真结果看DDR初始化完成大概需要在55us左右才能完成,本次采用彩条进行试验,从仿真结果看视频输入数据和axi写入数据一致。
为了验证DDR读写是否正确,ARB_AXI仲裁时序是否正确我们可以进行环出试验,从仿真结果分析,输入HDMI彩条数据数据和输出的HDMI彩条数据一致,基于AXI的DDR模型数据存储输出正确。
4 总结
开发不易珍惜每一分原创和劳动成果,同时注意平时开发过程中的经验积累总结。该工程已经在现有的工程项目中得到了应用和验证。如需要了解详细的设计可以联系 QQ:309967512