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

 

### MicroBlazeAXI4-Stream FIFO 的配置与编程 #### 配置 AXI Stream FIFO 为了使输出路径正常工作,AXI Stream FIFO 必须断言 `TREADY` 信号。这可以通过在 MicroBlaze 上运行的软件来完成配置[^1]。 对于 AXI Stream FIFO 来说,其接口特性决定了它适用于高速流传输数据场景。具体来说,写入端作为 AXI-stream 从接口而读取端则充当 AXI-stream 主接口的角色[^2]。 当涉及到具体的硬件描述语言(HDL)层面时,在 Vivado 或其他 FPGA 开发环境中创建项目之后,应当通过 IP Integrator 添加 AXI Stream FIFO 组件并将其连接至相应的模块上。随后利用 Tcl 脚本或者图形界面调整参数设定如深度等属性以适应实际应用场景的需求。 ```tcl set_property CONFIG.Fifo_Depth {1024} [get_ips axi_stream_fifo_0] ``` #### 编程 AXI Stream FIFO 针对基于 MicroBlaze 处理器的操作而言,通常会采用 C/C++ 程序来进行控制逻辑编写: 1. 初始化阶段需确保正确加载驱动程序以及初始化必要的外设资源; 2. 数据发送过程中要遵循 AXI 协议规定的数据包格式构建有效载荷并通过特定函数调用来触发传输动作;接收方同样依据接收到的信息按照既定规则解析处理。 3. 对于错误检测机制部分,则可以考虑加入超时判断等功能增强系统的鲁棒性和可靠性。 下面给出一段简化后的伪代码示例用于说明上述过程中的某些要点: ```c #include "xaxistreamfifo.h" XAxiStreamFifo Fifo; // Initialization routine for the AXI Stream FIFO. void init_axi_stream_fifo() { XAxiStreamFifo_Config *Config; Config = XAxiStreamFifo_LookupConfig(XPAR_AXISTREAM_FIFO_0_DEVICE_ID); if (!Config) { // Handle error... } XAxiStreamFifo_CfgInitialize(&Fifo, Config, XPAR_AXISTREAM_FIFO_0_BASEADDR); } // Function to send data through the AXI Stream FIFO. void send_data(const uint8_t* buffer, size_t length) { while (length--) { XAxiStreamFifo_WriteByte(&Fifo, *buffer++); } } ``` 以上仅展示了基础框架下的实现方式,更复杂的应用可能还需要深入研究官方文档获取更多细节指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值