AXI4-Stream时序——视频时序与AXI4-Stream之间的关系

时间:2024-04-01 10:03:57

 

写在前边的话:

如果你能搜到此篇文章,我就默认你对AXI4-Stream有了一个大致的了解(至少知道此协议不包含任何地址映射,仅仅是一串数据流)。
本文是基于video in IP的对视频信号转AXI4-Stream信号的验证。因为博主现在不用OV5640/OV7725等之类的传感器了,因此抄无可抄,必须自己探究一下这个IP的输入时序是怎样的。
只有理解了输入和输出的时序是怎样的,我们才能应用这个IP得心应手,才能不被这类IP所吓到(请注意,是这类!!)。

正文开始:

Video-in IP长下边这样(独立模式:即视频像素时钟和AXI4协议的时钟不是同一个时钟;常规模式:视频像素时钟和AXI4协议的时钟为同一个时钟)。

AXI4-Stream时序——视频时序与AXI4-Stream之间的关系
独立模式(independent)
AXI4-Stream时序——视频时序与AXI4-Stream之间的关系
常规模式(common)

那么什么样的视频输入时序能与vio_io_in所接受的时序一致呢?特此我做了个小实验。我们最常见的视频时序无非包含四种信号:clk,vsync(高电平有效),hsync(高电平有效),data[23:0](RGB888格式)。请忽略掉Xilinx手册中所给的hblank和vblank, 因为一般我们见到的视频时序是vsync/hsync,或者是vsync/href格式的,hblank/vblank不常见。下边给出vsync/hsync格式的时序图(上中下分别为:data/hsync时序,data/vsync时序,vsync/hsync时序):

AXI4-Stream时序——视频时序与AXI4-Stream之间的关系

 按照上述时序分别接入到video in IP的输入端口。为了专门测试用的,因此我没有创建bd(block design),而是直接在source文件中添加了一个IP,这个IP有给出的.v文件,我们可以在顶层文件中用HDL(verilog)例化它(常规模式):

AXI4-Stream时序——视频时序与AXI4-Stream之间的关系

而在激励文件中,vbalnk/hblank一直保持低电平,另外像有效信号,使能信号,复位信号等该拉高就拉高,该拉低就拉低。下边给出verilog仿真的波形。

图1:当VSYNC和HSYNC都为高电平时是传输的有效数据,并且blank信号全部都为低电平。

AXI4-Stream时序——视频时序与AXI4-Stream之间的关系

图2:hsync和data的时序,同时要注意vsync和hsync不能同时拉高否则后边的AXI4-Stream中的tuser信号会出错。

AXI4-Stream时序——视频时序与AXI4-Stream之间的关系

图3:转换后的AXI4-Stream信号,不难发现tuser信号的周期似乎与帧频一致,tlast信号的周期似乎与行同步信号一致。

AXI4-Stream时序——视频时序与AXI4-Stream之间的关系

图4:在这个图中不难发现:tuser信号与每帧图片的第1个像素,而tlast信号与每行信号的最后一个像素信号对应(后边延长的高电平是无效信号,可以对应一下tvaild信号)。

AXI4-Stream时序——视频时序与AXI4-Stream之间的关系

 

结论:我们用最常规的视频信号就能通过video in IP转换为AXI4-Stream信号,这样我们就能完全知道video in的用法了。同时我们还学习AXI4-Stream的时序了(希望这篇文章能帮你省去阅读那些啰里啰嗦的DS,UG或AP)。