如何使用内部逻辑分析仪来验证通用边缘图像处理应用程序
扫描二维码
随时随地手机看文章
Versal AI Edge系列提供了一系列功能强大的系统级芯片(SoC)设备,专门针对边缘应用进行了优化,特别是涉及人工智能和机器学习的应用。
这些设备结合了多种处理元素,包括Arm Cortex-A72应用处理器、实时Cortex-R5F处理器、可编程逻辑和专用AI引擎。所有这些组件都通过高带宽、低延迟的片上网络(NoC)相互连接,从而实现高效的数据移动和跨异构计算结构的紧密集成。
利用人工智能和机器学习的众多边缘应用之一是视频流检测和分类。这些系统通常使用卷积神经网络(cnn)在边缘执行局部推理。这种类型的应用非常适合在Versal AI Edge设备上实现,该设备结合了AI引擎、高带宽片上网络(NoC)、可编程逻辑和应用处理器,以实现高性能、低延迟的解决方案。
在开发和部署高级应用程序和机器学习模型之前,必须建立一个强大的图像处理管道。该管道通常与MIPI相机接口,并执行诸如去马赛克、色彩空间转换和基本图像增强或预处理功能等操作。这些步骤确保捕获的图像数据适合进一步的处理和推理。
在许多开发工作流程中,一个关键的早期里程碑是演示可靠的硬件和摄像机接口。这包括验证图像处理管道是否按预期工作,MIPI相机是否可以正确配置,以及是否接收到有效的图像流。在集成高级AI或应用程序逻辑之前,通过确保I/O分配、时钟策略和图像处理流的正确实现,及早确认这些元素可以降低开发风险。
这个坚实的基础使得在项目的其余部分中更快地迭代和更自信地进展。
在这个项目中,我们将探索创建一个通用AI边缘图像处理平台,目标是Alinx VD100开发板,它具有两个四通道MIPI输入和一个LVDS LCD显示输出。通用AI Edge设备可以使用免许可的Vivado标准版进行开发,使该平台可用于原型设计和开发。
整个的调试
虽然在Versal上调试应用程序与在7系列、UltraScale和UltraScale+设备上调试非常相似,而且我们可以使用Chipscope,但需要注意一些重要的区别。
最重要的变化在于调试集线器的连接方式。在7系列、UltraScale和UltraScale+设备中,调试集线器通过JTAG边界扫描接口连接到设计中插入的调试内核。这个调试中心在实现流的优化阶段自动插入。
相反,对于Versal,调试集线器通过CIPS(配置、初始化和电源管理系统)块的AXI4主接口连接到调试内核。此外,与前几代调试内核使用专有接口不同,Versal调试内核使用标准的AXI4-Stream接口,与平台的现代化互连体系结构保持一致。
因此,必须在设计中提供CIPS块,以促进到调试集线器的axis4主连接。根据设计上下文,调试集线器插入可以是自动的,也可以是手动的。对于包含DFX(动态功能交换)的设计,必须手动插入调试集线器。
另一个关键的区别是轴流ILA的使用。在Versal中,该IP核将标准ILA和系统ILA功能集成到单个块中。此外,用户现在可以选择用于存储捕获数据的内存类型(BRAM或uram),从而在捕获深度和资源使用方面提供更大的灵活性。
调试方法
在调试应用程序时,我们需要采用逻辑方法。因此,在使用System ILA或ILA时,我们应该理解FPGA设计是一个迭代过程,如果我们从逻辑上解决问题,这是最成功的。
最好的方法是:
•把问题分解成更小的部分
•通过减少变量和变化来简化
•做一个预测,然后验证结果
•在设计周期的早期计划如何以及在哪里进行调试
插装方法
当在实际设计中使用集成逻辑分析仪(ILA)时,重要的是要有策略地使用仪器来平衡调试可见性和FPGA资源使用。
ILAs消耗逻辑和块RAM,这在已经接近容量的设备中成为一个关键问题。
捕获深度和被监测信号的宽度直接影响BRAM的使用——更宽的探针和更长的捕获窗口会迅速耗尽可用内存。
在早期的版本中,遵循上面概述的方法,重点关注关键控制信号、重置线和状态或错误指示器,因为这些通常提供对系统行为的直接洞察,并帮助在调试周期的早期识别问题。
系统内的关键AXI总线,特别是那些与Versal的片上网络(NoC)和处理系统接口的总线,也应该考虑用于仪表。这些接口是PL、NoC和PS之间的关键数据路径,可能会暴露系统集成和数据移动中的微妙问题
虽然这些宽总线是资源密集型的,但它们承载着可编程逻辑和处理系统之间的基本流量,并且可以揭示数据处理和系统集成中的微妙问题。
从精心选择的控制、复位、状态/错误和这些关键AXI接口的混合开始,在适当的捕获深度提供了对系统级行为的有价值的可见性,同时为迭代调试改进保留了空间。
Vivado设计
为了创建一个能够接收、处理和显示来自传感器的图像的图像处理管道,我们必须设计一个在控制、接口和处理系统(CIPS)控制下运行的复杂系统。
图像帧通过一系列IP块捕获和处理,而应用软件、DDR存储器访问以及CIPS和可编程逻辑之间的通信都通过片上网络(NoC)进行。
这种高性能互连确保了整个系统的高效数据移动。该设计的总体架构如下图所示。
像素将作为10位原始数据从传感器接收,每个时钟周期处理4个像素。当数据在管道中移动时,它被转换为RGB格式,从而产生120位宽(4像素× 3通道× 10位)的AXI4-Stream接口。这种宽数据路径确保了整个图像管道的高吞吐量和低延迟。
虽然设计中使用的确切IP块取决于应用程序的具体要求,但核心管道通常包括传感器接口、去马赛克、色彩空间转换、图像增强和视频定时控制模块,以及AXI流互连和控制逻辑。
为了帮助我确保设计正确运行,我将在图像处理管道中插入几个ila。
•ILA_LCD_LVDS -这将帮助我监控LCD / LVDS接口,确保其错误和状态信号可以很容易地观察到。
•视频ILA -使用四个通道来监控处理管道中的AXIS视频。它观察MIPI输出、Demosaic、子集转换器和VDMA输出。这允许我们在管道的任何阶段监控视频,无论是进入和走出VDMA。
•内存ILA—通过NoC监视进出DDR的AXI4流量,这允许我检查DDR的数据写入和写入是否正确。
•输出ILA -这监视AXI流到视频输出状态,以确保我们可以看到它的状态和错误条件。
•控制、接口和处理系统(CIPS)配置处理系统(PS),管理平台初始化,并提供对基本外设的访问。
•片上网络(NoC)通过为互连结构提供入口和出口点,促进了高带宽数据的移动,并且还集成了DDR存储器控制器,用于访问外部存储器。
•SmartConnect -提供连接到IP块上的axis - lite寄存器接口,使处理系统能够控制和配置。
•MIPI CSI-2 RX子系统-实现4通道MIPI CSI-2接口,每通道运行1000 Mbps,实现从兼容相机传感器高速图像数据捕获。
•Demosaic -将原始拜耳模式像素数据转换为完整的RGB像素,从传感器输入重建每个像素的颜色信息。
•AXI子集转换器-将40位像素数据(通常每个RGB通道10位)转换为24位像素格式(每个通道8位),保持每个时钟周期4个像素的吞吐量。
•VDMA(视频直接内存访问)——桥接了AXI4- stream和AXI4内存映射接口,通过NoC在DDR内存中存储和检索视频帧,并支持处理阶段之间的高效缓冲。
•AXI4-Stream to Video Out—将AXI4-Stream视频流转换为标准视频输出格式,生成必要的同步信号,如HSync、VSync和视频定时,以驱动显示接口。
•视频时序控制器(VTC) -生成所需的视频时序信号,如HSync, VSync和活动视频指示器,并与AXI4-Stream to Video Out块同步,以确保正确的显示时序。
•LCD LVDS接口-将标准并行视频输出转换为串行VESA LVDS流格式,适用于驱动具有所需时序和信号特性的基于LVDS的LCD面板。
•高级IO向导-配置通用设备中的XPIO序列化LCD LVDS输出数据,使视频信号高速传输到符合LVDS VESA标准的显示器。
为了确保我们能够验证和调试图像处理管道的操作,我们在设计中添加了几个集成逻辑分析仪(ILAs)。这些ila提供关键内部信号的实时可视性,并能够监测以下要素:
•ILA_LCD_LVDS -监控LCD_LVDS块的状态输出,以验证正确的序列化和数据传输到LCD面板。
•Video_ILA -监控视频处理管道中的关键点,包括RAW视频输出、Demosaic块的RGB输出、AXI子集转换器的24位输出和VDMA的视频流输出。这样可以在每个阶段验证像素数据转换。
•Memory_ILA—监视通过NoC进出DDR内存的AXI4事务,提供对内存访问模式、带宽利用率和数据移动中的潜在瓶颈的可见性。
•Output_ILA—监视AXI4-Stream到Video Out IP的状态信号,包括同步有效性、数据启用和视频时序校准,确保正确切换到显示接口。
这为我们提供了在整个图像处理管道中观察静态go/no-go状态信号和高带宽数据传输的能力。
完成的设计如下所示,可以使用本项目附带的TCL脚本重新创建。
为了生成比特流,我们当然需要定义XDC I/O约束,它为所有外部接口指定物理引脚位置和电气标准。这些I/O位置定义如下:
应用软件
应用软件将使用Vitis统一软件平台开发。该应用程序负责执行以下关键任务:
?使用Alinx提供的初始化文件配置摄像机。
•设置视频定时控制器(VTC)以生成720p分辨率的适当定时信号。
•配置Demosaic IP以实现正确的颜色重建。
•通过GPIO控制信号使能摄像头。
•将VDMA配置为在DDR内存和视频管道之间读写图像帧,利用NoC进行高速数据访问。
•完整的软件应用程序可以在我的GitHub上参考和重用。
伊拉验证
当软件运行时,我们可以使用ILAs来验证图像处理管道是否按预期运行。这些集成电路在系统优化和调试中也起着关键作用。
在Vivado硬件管理器中,ILA将被重新映射为一个数值。映射如下图所示:
•ILA1 -记忆ILA。
•ILA2 -输出ILA。
•Ila3 - LCD液晶显示器。
•ILA4 -视频ILA。
验证的第一步是监视axis4 - stream to Video Out块的状态信号。该IP提供指示器,显示AXI流和视频定时信号是否正确同步。如果输入的视频时间不匹配或不稳定,块将无法锁定,从而阻止视频输出。
此外,由于该块包括一个内部FIFO,我们可以通过ILA观察其溢出和下流状态信号。这些信号在诊断性能问题(如数据饥饿或管道中的反压)时特别有价值,并有助于指导内存带宽或缓冲策略的改进。
观察作为输出ILA的ILA1上的信号,我们可以看到包含视频的AXI流被视频时序控制器生成的时序信号锁定。如果AXI流没有同步,例如,它是一个不同的格式,AXI流到视频输出块将无法锁定。
验证过程的下一步是检查LCD LVDS输出。此阶段提供关键状态指示灯,用于确认内部时钟是否被锁定以及接口是否允许向显示器传输下游数据。监控这些信号有助于确保序列化视频流正确生成并传输到LCD面板,并可以快速突出与时钟或链路启用相关的问题。
在验证图像处理路径本身时,首先要检查的是MIPI CSI-2 RX子系统的视频输出。在这个阶段,我们应该观察到每个时钟4像素的10位原始输出。如果相机配置或MIPI接口有问题,通常会出现这种情况——要么是没有视频输出,要么是视频格式出乎意料。验证此输出有助于确认相机已正确初始化,并且MIPI链路已正确建立。
MIPI CSI-2 RX子系统的输出输入Demosaic模块,该模块将10位原始拜耳像素数据转换为30位RGB格式,每个颜色通道(红、绿、蓝)有10位。由于管道继续以每个时钟4像素的速度运行,因此Demosaic块的最终AXI4-Stream输出为120位宽(4像素× 30位),在提供完全重构的颜色数据的同时保持高吞吐量。
液晶显示器需要24位RGB像素,每个颜色通道8位。为了满足这一要求,AXI子集转换器将像素深度从每像素30位减少到24位。当系统继续以每个时钟4像素的速度运行时,转换器的输出变为96位宽(4像素× 24位),与下游视频输出路径所期望的格式一致。
最后,在写入路径上,我们可以观察到AXI4事务将处理过的视频帧写入DDR内存。这些传输由VDMA发起,VDMA将AXI4- stream视频管道连接到AXI4内存映射接口,从而通过NoC实现帧数据的高效存储。监视此活动可确保将帧缓冲区正确地写入内存以供后续读取和显示。
读取路径从VDMA通过NoC发出AXI4读取事务开始,以便从DDR内存检索视频帧。这些事务将存储的帧数据移回axis4 - stream域中,在那里它可以通过管道的其余部分流向显示。观察这些AXI4读取可以确认内存访问正常工作,并且正在与视频输出时间同步获取帧。
图像处理管道的最后一个元素是来自VDMA的AXI4-Stream输出,它每个时钟提供一个像素。该流被送入AXI4-Stream to Video Out IP块,在那里它与视频定时信号同步并准备显示。这种切换标志着从基于内存的缓冲到实时视频输出的过渡,完成了图像管道。
通过观察所有这些ila,我们获得了对图像处理管道内部操作的宝贵见解,使我们能够调查和查明可能出现的任何问题。通常,这些问题可以追溯到软件配置错误或单个IP块上的错误配置设置,这在早期的开发和集成阶段是可以预料到的。
当然,对正确系统操作的最直接和最直观的确认是看到屏幕上显示的实时图像,但是当事情没有按计划进行时,ILAs提供了所需的更深入的可视性。
总结
在这个项目中,我们探索了如何在Versal AI Edge设备上构建一个简单的图像处理管道并验证其功能。在继续开发应用程序及其算法的高级方面时,建立这个基础管道可以显著降低技术风险。
通过利用集成逻辑分析仪(ILAs),我们能够观察和验证设计中的关键点,确保每个阶段的行为都符合预期。这种实时可见性使我们能够快速有效地识别在集成或开发过程中可能出现的任何问题的根本原因,从而导致更顺畅、更可靠的开发过程。
ChipScope及其集成逻辑分析仪是开发人员可以快速轻松地调试应用程序的重要元素。
本文编译自hackster.io