tag 标签: fpga

相关博文
  • 2025-4-5 18:46
    60 次阅读|
    0 个评论
    基于IMX287或者IMX273的工业相机开发
    一、摄像头子板简单介绍 摄像头IMX273和IMX287是两个非常相似的SENSOR,均为全局快门和Sub-Lvds接口。这两种摄像头可以共用一块PCB设计(PCB设计的是8LANE数据差分线),根据需要焊接不同的SENSOR就行。摄像头电路板如下: 两个芯片的差异主要如下: 1、分辨率不同。IMX287的分辨率为728*544,有效像素为0.4M;IMX273的分辨率是1456*1088,有效像素为1.58M; 2、帧率不同。IMX287的帧率为52FPS,IMX273的帧率为276FPS; 3、数据传输通道数不同。IMX287的LANE数量为4,IMX273的LANE数量为8; 4、供电电压种类完全相同,共需要三种电压,1.2V、1.8V和3.3V。其中1.8V是接口电路相关电压。 二、Sub-Lvds接口物理电平介绍 1、关于供电电压。Sub-LVDS接口的供电电压通常为1.8V,前面摄像头子板上的1.8V就是供接口电路的电压。FPGA电路板上的BANK34连接到摄像头,BANK34的供电电压也为1.8V。LVDS接口的供电电压一般为5V。 2、关于共模电压。Sub-LVDS的共模电压0.9 V,而LVDS的共模电压为1.25V。 3、关于差分摆幅。Sub-LVDS有更低的差分摆幅150 mV(1.5mA恒流驱动100R),相比LVDS的350 mV(3.5mA恒流驱动100R)。 基于以上的分析,结合ARTIX7的数据手册,A7的FPGA是可以解码出Sub-LVDS信号的。摄像头子板和FPGA开发板相连的图片如下: 三、关于I2C信号 1、IMX287既支持SPI配置,也支持I2C配置,摄像头子板设计时选择的是I2C信号。I2C的设备地址是0x6C/0x6D,寄存器地址是双字节,寄存器的值是单字节。电路板上预留了I2C的两个测试点,方便逻辑分析仪抓取I2C信号。I2C的MASTER既可以用USB3芯片,也可以用FPGA芯片来实现。因为刚开始对IMX273进行I2C读写,可以简单的用USB3芯片的控制传输指令来实现。只有基本的I2C读写成功之后,然后才能一次性写进几十条的I2C配置指令,摄像头才进入指定的正常工作状态,最后才是用FPGA解码。 2、先设定读回寄存器3000位置的值,查手册了解这个寄存器是摄像头启停的控制寄存器,最低位有效,IMX273上电后默认状态是待机状态(默认最低位是1)。寄存器3000具体含义如下: 3、用逻辑分析仪监测I2C总线上的数据如下, 可见读回的值是01,完全正确,验证了硬件电路板是没有问题的。 以上是第一步,读回寄存器地址3000的上电默认值。第二步是向3000写入新值,再读回。自定义USB3的控制传输指令为B0,寄存器地址通过wValue输入,寄存器的值通过wIndex输入,单字节,wIndex低字节有效操作如下: 4、一次性写入I2C配置参数。单个I2C指令测试成功后,FPGA程序需要一次性写入50多条I2C指令,摄像头才能工作在指定的格式下,如外部输入给IMX273的晶振时钟频率是54M的,还是74.25M的;数据LANE数量是4LANE的还是8LANE的;像素点格式是8位的还是10的。我是用FPGA程序实现I2C MASTER的,或者可以用USB3下发I2C指令的。摄像头正常工作后,可以简单用示波器测量一下摄像头电路板上的XHS和XVS行场信号,确认摄像头工作在需要的状态中。 四、基于FPGA的Sub-Lvds解码程序 1、可以直接用SelectIO IP来解码,具体如下: 我也是参考了XILINX的 文档XAPP582的P10,结论是:When the FPGA is used as a receiver of SubLVDS, LVDS_25 or DIFF_HSTL_II_18 can be used as a receiver with a 100Ω parallel termination on the board。当然电平标准不是唯一的。 2、摄像头信号经过SelectIO IP,还要经过BITSLIP的操作,然后可以监测到真正的行头行尾等同步码。关于同步码,可以参考IMX273芯片的数据手册,如下: 每一行开始的有效数据有同步码SAV(Start of ActiveVideo),每一行有效数据结束的有同步码EAV(End of ActiveVideo)。相应的,每一行的无效数据也有SAV和EAV(场消隐)。这四种同步码如下: 同步码共有4上,如果简单的按一个像素点8bit的话,这4个同步码分别是FF 00 00 80、FF 00 00 9D、FF 00 00 AB和FF 00 00 B6。这4种同步码前3个字节都相同,都是FF 00 00,仅是第4个字节不同。同步码的FF和00,不同于图像的有效数据(有效值是01到FE)。同步码和行有效信号XHS的关系如下: 3、ILA中的同步码。同步码很好监测,添加到ILA中就可以,如下是行开始的同步码FF 00 00 80, 如下是行结束的同步码FF 00 00 9D, 接下一回分解。 良子USB,20250405 专注USB3.0、FPGA、PCIE、定制UVC摄像头 VX:15940187710
  • 热度 3
    2024-12-27 10:26
    379 次阅读|
    0 个评论
    发明阶段(20世纪80年代至90年代) 起源:当时ASIC设计成本高,周期长,流片失败率高,业界需要一种通用的半导体器件进行流片前测试和验证,可编程逻辑器件就此产生。 诞生:1980年,Xilinx公司成立。1985年,Ross Freeman制造了第一片PFGA芯片XC2064,采用4输入,1输出的LUT和FF结合的基本逻辑单元。 发展阶段(1992年至1999年) 容量提升:FPGA容量不断上涨,芯片面积逐渐增大,为架构穿心提供空间,复杂功能可以实现。 布线问题凸显:缩着芯片复杂度增加,片上资源的互连复杂性取代了逻辑结构的复杂性,成为需要优先解决问题。 设计工具兴起:出现了针对FPGA进行优化设计的自动综合,布局和布线的EDA工具,逐渐成为FPGA开发的主流方法。 累积阶段(21世纪至今) 向可编程片上系统转变:FPGA从单纯的可编程门阵列,逐步转变为拥有复杂功能的可编程片上系统,很多专用的逻辑单元被添加到FPGA器件中,如AI引擎,可变精度的DSP等针对AI应用开发的IP核也被固化到FPGA中。 工艺与性能提升:随着芯片制造工艺的不断进步,FPGA的集成度,性能和速度不断提高,功耗不断降低,门数量从最初的1200个可利用门发展到数百万门甚至更高。 应用领域拓展:FPGA在通信、数字信号处理、视频图像处理、高速接口设计、人工智能、IC设计等领域得到了广泛应用,并在云计算、航空航天,国防、汽车、电信等行业持续拓展。
  • 热度 3
    2024-12-6 15:53
    797 次阅读|
    0 个评论
    学习如何在 MYIR 的 ZU3EG FPGA 开发板上部署 Tiny YOLO v4,对比 FPGA、GPU、CPU 的性能,助力 AIoT 边缘计算应用。(文末有彩蛋) 一、 为什么选择 FPGA:应对 7nm 制程与 AI 限制 在全球半导体制程限制和高端 GPU 受限的大环境下,FPGA 成为了中国企业发展的重要路径之一。它可支持灵活的 AIoT 应用,其灵活性与可编程性使其可以在国内成熟的 28nm 工艺甚至更低节点的制程下实现高效的硬件加速。 米尔的 ZU3EG 开发板凭借其可重构架构为 AI 和计算密集型任务提供了支持,同时避免了 7nm 工艺对国产芯片设计的制约。通过在 ZU3EG 上部署 Tiny YOLO V4,我们可以为智能家居、智慧城市等 AIoT 应用提供高效的解决方案。 CPU GPU FPGA 架构对比 二、 了解 Tiny YOLO 模型及其适用性 YOLO(You Only Look Once)是一种实时物体检测模型,它通过一次性扫描整个图像,实现高效的对象识别。 而其简化版 Tiny YOLO V4 更适合嵌入式设备,具有较少的层数和参数。其轻量化特性更适合在资源受限的设备上运行,尤其在低功耗、实时检测的边缘计算设备中表现出色。 相比传统 GPU,FPGA 能在小面积和低功耗下实现类似的推理性能,非常契合 AIoT 应用。像米尔 ZU3EG 这样的 FPGA 开发板,通过底板和丰富接口的载板设计,非常适合高效的嵌入式低功耗数据处理。 Yolo V4 网络结构图 Tiny Yolo V4 网络结构图 (通过优化网络结构和参数,保持较高检测精度的同时,降低模型的计算量和内存占用) 三、 获取数据集和模型 可下载开源训练集或预训练模型。为了确保兼容性,建议将模型转换为 ONNX 格式,以便后续能在 FPGA 上完成优化。 1. 下载 Tiny YOLO V4 模型 :从 Darknet 的 GitHub 仓库 获取 Tiny YOLO 的预训练权重,或者在 COCO 等数据集上自行训练模型。自定义的模型适用于特定应用场景(如车辆检测、人脸检测等)。 2. 数据准备 :若要自定义模型,可使用LabelImg等工具对数据集进行标注,将数据转为 YOLO 格式。之后,可将 YOLO 格式转换为 ONNX 格式,以便兼容 FPGA 优化工具链。 Tiny YOLO 在 Darknet 上训练的截图 四、 通过 Vivado HLS 为 FPGA 准备模型 要将模型部署到 FPGA,需要将神经网络操作转换为硬件级描述。使用 Xilinx 的 Vitis HLS(高级综合)可以将 Tiny YOLO v4 的 C++ 模型代码的转化为 Verilog RTL(寄存器传输级)代码,从而将模型从软件世界带入硬件实现。 详细步骤 : 1. 模型层映射和优化 : 将 YOLO 的每一层(如卷积层、池化层)映射为硬件友好的 C/C++ 结构。例如,将卷积映射为乘累加(MAC)数组,通过流水线实现并行化。 2. 算子加速与指令优化 : 流水线(Pipelining) :利用流水线来处理多项操作并行,减少延迟。 循环展开(Loop Unrolling) :展开循环,以每周期处理更多数据,尤其在卷积操作中有效。 设置 DATAFLOW 指令,使层间独立处理。 3. 量化与位宽调整 : 将激活值和权重量化为定点精度(例如 INT8),而非浮点数。这在维持准确度的同时显著降低计算量,尤其适合 FPGA 的固定点运算支持。 Tiny YOLO 模型在 Vivado HLS 中的层层转化流程图 五、 使用 Vivado 综合与部署 Verilog 到 米尔的ZU3EGFPGA开发板 当 HLS 生成的 RTL 代码准备就绪后,可以使用 Vivado 将模型部署到 FPGA。 1. Vivado 中的设置 : 将 HLS 输出的 RTL 文件导入 Vivado。 在 Vivado 中创建模块设计,包括连接AXI 接口与 ZU3EG 的 ARM 核连接。 2. I/O 约束与时序 : 定义 FPGA 的 I/O 引脚约束,以匹配 ZU3EG 板的特定管脚配置。配置时钟约束以满足合适的数据速率(如视频数据 100-200 MHz)。 进行时序分析,确保延迟和响应速度达到实时要求。 3. 生成比特流并下载到 ZU3EG : 生成的比特流可以直接通过 JTAG 或以太网接口下载到 ZU3EG。 将 Tiny YOLO 处理模块连接到 米尔ZU3EG开发板 的外设和接口 六、 在 FPGA 上测试并运行推理 现在 Tiny YOLO 已部署,可以验证其实时对象检测性能。 1. 数据采集 : 通过连接的相机模块捕捉图像或视频帧,或者使用存储的测试视频。 使用ZU3EG 的 ARM 核上的OpenCV对帧进行预处理,再将它们传入 FPGA 预处理后进行推理。 2. 后处理与显示 : 模型检测对象后,输出边框和类别标签。使用 OpenCV 将边框映射回原始帧,并在每个检测到的对象周围显示类别和置信度。 3. 性能测试 : 测量帧速率(FPS)和检测准确度。微调量化位宽或数据流参数,以优化实时需求。 Tiny YOLO 模型在 ZU3EG 上显示检测结果的实时输出,视频帧中标注了检测到的对象 七、 性能优化与调试技巧 为提高性能,可以进行以下调整: 内存访问 :设计数据存储方式,最大限度利用缓存并减少数据传输,降低内存瓶颈。 降低延迟 :重新评估关键路径延迟。若延迟过高,调整 Vitis HLS 中的流水线深度,并验证层间的数据依赖性。 量化改进 :尝试 INT8 量化。Xilinx 的 Vitis AI 可帮助微调量化参数,以平衡准确性与速度。 不同优化配置对资源使用的影响 米尔MYC-CZU3EG/4EV/5EV-V2核心板及开发板 在MYIR 的 ZU3EG 开发平台上提供了一种高效的解决方案。利用 FPGA 独特的灵活性和低功耗优势,助力未来 AIoT 设备的普及和智能升级。 关注米尔电子公众号,后台回复FPGA,获取完整Tiny Yolo V4教程。
  • 热度 1
    2024-11-1 16:38
    488 次阅读|
    0 个评论
    1.引言 随着网络视频平台的发展,用户对于4K高清画质的需求日益增长。然而,许多用户发现,即使购买了视频平台的会员,观看4K内容时画质却不如预期,有时甚至还会出现模糊、卡顿的情况。这种现象背后涉及到视频编码、网络带宽、和视频传输的诸多因素。 近期“影视飓风”发布的视频《清晰度不如4年前!视频变糊是你的错觉吗?》因讨论视频平台降低码率和改变编码格式以压缩视频画质,影响了内容表达。 4K视频清晰度下降的一个主要原因是平台为了节省带宽而压缩视频流,有时导致比特率降低,无法发挥4K分辨率的全部潜力。 在这种背景下,如何 高效地压缩和传输4K视频成为了一个关键技术难题 。本文将探讨如何通过 米尔电子的ZU4EV MPSoC平台, 接入真4k 60UHD-SDI视频源后,使用VCU进行高效H.265编解码,再通过 SGMII万兆以太网 实现 网络推流,以确保高质量4K视频的流畅传输。 2.视频质量下降的原因与优化方法 1) 带宽瓶颈 :在用户数量增加的情况下,服务器和网络的带宽常常无法满足4K视频流的需求。 2) 压缩算法不足 :传统的视频压缩技术在高分辨率内容上表现不佳,容易导致画面模糊。 3) 视频流传输的优化 在推流过程中,网络带宽和视频压缩效率直接决定了视频播放的清晰度与流畅度。为了确保4K视频在万兆以太网上的高效传输,本设计采用以下优化措施: 合理的码率控制 :在保证视频清晰度的前提下,调整H.265编码的目标码率,避免过低的码率影响视频质量或过高的码率导致带宽浪费或。通过CBR或VBR模式可以根据网络情况动态调整码率。 低延时模式 :VCU支持低延时编码模式,确保视频在压缩和传输过程中保持尽可能低的延迟,提升用户的观看体验。 网络传输协议选择 :根据应用场景选择合适的传输协议。对于实时性要求较高的场景,可选择UDP传输,而对于数据可靠性要求较高的场景,则推荐使用TCP协议。 3.MPSoC与VCU架构在4K UHD音视频广播领域的优势 1. 高性能与低功耗的结合 :Zynq UltraScale+ MPSoC采用了16nm FinFET工艺,集成了多核处理器和可编程逻辑,能够在提高性能的同时降低功耗,这对于音视频广播领域来说至关重要,因为它可以在保证高清晰度视频传输的同时,减少能源消耗。 2. 实时压缩与解压缩能力 :集成的VCU支持H.264/AVC和H.265/HEVC标准,能够实现高达4K UHD分辨率的视频的实时压缩和解压缩。这意味着在广播应用中,可以利用VCU进行高效的视频编码,减少存储空间和带宽的需求,同时保持视频质量。 3. 多视频流处理能力 :VCU能够同时处理多达八个不同的视频流,这对于需要同时广播多个视频源的4K UHD广播应用来说非常有用。这种多任务处理能力使得MPSoC成为多媒体中心和视频服务器的理想选择。 4. 灵活性和可扩展性 :MPSoC的可编程逻辑(PL)提供了任意到任意高速视频/音频接口的灵活性,可以为多媒体管道带来定制图像及视频处理功能的差异化效果。这种可编程性使得系统能够适应不断变化的音视频广播需求。 5. 专用硬件加速 :MPSoC提供了专用的处理引擎,如基于ARM Cortex A53的APU、Mali图形处理单元等,这些专用硬件能够加速图形和视频处理任务,提高系统的整体性能。 6. 支持多种视频格式 :VCU支持高达4:2:2 10位UHD-4K的视频格式,适合专业和高端消费级的制作与后期制作解决方案。这种广泛的格式支持使得MPSoC可以应用于各种不同的音视频广播场景。 7. 集成的多媒体框架支持 :MPSoC结合常见的多媒体框架GStreamer,可以开发硬件加速型多媒体应用。这种集成支持简化了开发过程,使得开发者能够快速实现复杂的音视频处理任务。 8. 优化的功耗管理 :Zynq UltraScale+ MPSoC将处理引擎、硬件编解码器等组件放置在具有独立电轨的不同电源域中,这种配置可用于为整个系统设计优化功耗管理方案,进一步降低系统功耗。 9. 高速互联外设 :MPSoC提供高速互联外设,如集成式DisplayPort接口模块,支持高达6 Gb/s的工作速率,这有助于处理来自PS或PL的实时音视频流,进一步降低系统BOM成本。 10. 支持新一代地面数字电视广播技术 :随着超高清电视时代的到来,MPSoC与VCU架构能够支持新一代地面数字电视广播技术,如DVB-T2、ATSC 3.0和DTMB-A等,这些技术支持更高的视频质量和新的广播应用模式。 综上所述,MPSoC与VCU架构在4K UHD音视频广播领域提供了高性能、低功耗、实时压缩解压缩、多视频流处理、灵活性、硬件加速、广泛格式支持、多媒体框架集成、优化的功耗管理和高速互联外设等多重优势,使其成为该领域理想的解决方案。 4.系统架构概述 在本设计中,我们使用Zynq UltraScale+ MPSoC平台(具体型号为MYIR XCZU4EV),通过FPGA实现对SDI视频的H265压缩,并通过SGMII接口推送到万兆以太网上。系统架构主要包括以下几个部分: 1. 视频输入 :输入源可以是SDI摄像机、SDI信号发生器或通过HDMI转SDI设备从电脑接入的HDMI信号。视频信号通过TI公司的LMH1219芯片做均衡处理,并将单端信号转换为差分信号后输入FPGA。 2. SDI视频解码 :FPGA中的UHD-SDI GT IP核用于SDI视频的解串,并将视频信号转换为AXI4-Stream格式供后续处理。通过SMPTE UHD-SDI RX SUBSYSTEM IP核,SDI视频被解码为RGB格式。 3. 视频帧缓存与处理 :解码后的视频信号存储在PS侧的DDR4中,通过Xilinx提供的Video Frame Buffer Write IP核实现。在这一阶段,可以对视频帧进行颜色转换、缩放等处理。 4. H.265视频压缩 :使用Zynq UltraScale+ VCU IP核对存储的RGB视频帧进行H.265编码压缩。VCU支持YUV420格式的视频,编码分辨率最高可达到4K@60fps。 5. SGMII万兆以太网传输 :经过H.265压缩后的视频流通过SGMII接口推送至万兆以太网。通过PetaLinux系统,利用TCP/UDP协议将压缩后的码流传输到PC或服务器端,用户可以通过VLC播放器等软件实时播放接收到的H.265码流。 5.工程设计主要流程 1. SDI输入 :通过LMH1219进行信号均衡,SDI信号转换为AXI4-Stream格式。 通过HDMI转SDI盒子,通过12G UHD-SDI输出4K 60FPS视频给FPGA,用户也可以使用SDI 工业相机; 2. 视频解码 :UHD-SDI GT IP核完成视频解串,SMPTE UHD-SDI RX SUBSYSTEM IP核将视频解码为RGB信号。 3. 视频缓存 :使用Video Frame Buffer Write IP核将视频写入DDR4。 用户可以选择在这里做出customer ISP,例如图像缩放,拼接 4. 视频压缩 :通过Zynq UltraScale+ VCU IP核对视频进行H265压缩。 5. 网络传输 :通过SGMII万兆以太网接口,将压缩后的H265视频流通过UDP协议推送至PC端,使用VLC播放器播放。 6.结论 在视频内容不断向4K发展的大背景下, 通过Zynq UltraScale+ MPSoC平台,基于VCU实现的SGMII万兆以太网视频压缩推流方案,不仅能够高效地压缩和传输4K视频,还可以确保较低的延迟和高质量的图像输出。该方案适用于视频监控、医疗影像、工业自动化等对高分辨率视频有需求的应用场景。 对于希望在网络视频平台上获得更好观看体验的用户来说,视频平台和服务提供商则需要在视频编码、网络传输等方面进行优化,以满足用户对于4K视频的画质需求。 7.互动环节 在SGMII网兆以太网推流到PC端,因为是万兆网,CPU无法负担这里的高速吞吐率,这里我们需要用到网络卸载,米尔电子的MYC-J7A100T双芯设计核心板可通过SFP采集SGMII万兆以太网数据后,PC通过PCIE读取视频源,实现万兆网口数据包卸载,我们会在后续系列文章中做出分享基于米尔MYC-J7A100TSFP采集后PCIE XDMA中断读取。
相关资源