microblaze之AXI4-Stream to Video Out图像输出调试

目的:xilinx系列图像处理的IP大多是采用的AXI4-Stream流形式的接口,为了发挥这种优势,需要对它的应用做必要的认识。

1,查看数据手册看到这个IP应该按如下方式搭建,于是依葫芦画瓢创建系统。

2,在调试完VTC模块之后,就开始调试stream out模块,我采用了MASTER模式,配置如下:

3,下载程序之后,在电视机上看视频内容还是黑屏,同时用示波器看LOCK信号还是低电平。于是认为需要监控一下stream流信号,于是如下:

4,从信号中只能看到有东西,但是无法知道传输的数据量是否足够。于是手动写了一个计数器,并添加检测信号,如下:

5,从信号可以看到VTC输出的1080P信号是正常的,TPG输出信号流也是正常的,(因为我采用dual pixel模式,所以一行计数点是960),这里Locked还是低电平。这时候有点怀疑人生了。于是将MASTER模式改为slave模式,结果仍然不对。最后终于发现了问题所在:

6,原因就是video-in这个总线虽然连接上了,但是内部的线却是悬空的,并且generate wrapper的时候也不会弹出警告。这个可以通过查看RTL框图来确认确实如我判断的一样,这样以来相当于AXI STREAM数据流并没有送入stream out这个IP。

于是重新连接之后,图像就完全正常了。

总结:

1,如果直接用总线对接总线,如果中途又把里面的信号旁路到别的地方,例如debug监控模块,那么需要对里面的信号单独从新连接一遍,否则默认会悬空,并且不会报错。

2,通过看datasheet发现,一定要注意stream clk和video clk的大小关系,要注意master和slave模式的区别。

3,要正确的配置SDK里面的软核代码,对IP进行适当的配置。否则就算硬件连线正确了,各种初始化,各种使能没有做到位,那么还是无法正常输出。

4,这个IP调试确实花费了我许多时间,里面确实有许多坑,最后附上官网上对这个IP的问题连接:https://forums.xilinx.com/t5/Video-and-Audio/Video-Beginner-Series-8-Debugging-the-AXI4-Stream-to-Video-Out/td-p/866346

 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MicroBlaze处理器系统中使用AXI Stream FIFO需要进行以下步骤: 1. 生成IP核并配置参数:在Vivado中生成AXI Stream FIFO IP核,并根据应用场景配置FIFO的参数,如深度、宽度等。 2. 添加IP核到Block Design中:在Block Design中添加AXI Stream FIFO IP核,并连接到处理器系统的PS端。 3. 在PS端配置AXI Stream FIFO的寄存器:在处理器系统的软件代码中,可以使用Xilinx提供的AXI Stream FIFO驱动程序访问FIFO的寄存器,进行配置和控制。 4. 在PS端实现读写操作:使用AXI Stream FIFO驱动程序的API,可以在处理器系统中实现向FIFO写入数据、从FIFO读取数据等操作。 下面是一个使用AXI Stream FIFO的简单示例代码,其中假设已经正确生成并连接了AXI Stream FIFO IP核: ```c #include "xaxistreamfifo.h" XAxisStreamFifo_Config *ConfigPtr; XAxisStreamFifo FifoInstance; int main() { int Status; u32 Data = 0x12345678; // 初始化AXI Stream FIFO驱动程序 ConfigPtr = XAxisStreamFifo_LookupConfig(XPAR_AXI_FIFO_0_DEVICE_ID); if (ConfigPtr == NULL) { return XST_FAILURE; } Status = XAxisStreamFifo_CfgInitialize(&FifoInstance, ConfigPtr); if (Status != XST_SUCCESS) { return XST_FAILURE; } // 将数据写入FIFO Status = XAxisStreamFifo_Write(&FifoInstance, &Data, sizeof(Data)); if (Status != XST_SUCCESS) { return XST_FAILURE; } // 从FIFO读取数据 Status = XAxisStreamFifo_Read(&FifoInstance, &Data, sizeof(Data)); if (Status != XST_SUCCESS) { return XST_FAILURE; } return 0; } ``` 需要注意的是,以上示例代码仅供参考,具体的实现方式需要根据硬件平台和应用场景进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值