tag 标签: Zynq

相关帖子
相关博文
  • 热度 8
    2023-3-3 16:36
    1276 次阅读|
    0 个评论
    随着农业生产模式和视觉技术的发展,农业采摘机器人的应用已逐渐成为了智慧农业的新趋势,通过机器视觉技术对农作物进行自动检测和识别已成为采摘机器人设计的关键技术之一,这决定了机器人的采摘效果和农场的经济效率。目前市面上最常见的是基于单片机开发的自动采摘机器人,但是随着人工智能的快速发展,通过建立神经网络基于大量图像数据训练的识别方法成为新一代智慧农业发展必不可缺的硬性条件。 智慧农业-图片来源 于网络 升级农业生产机器人,主控芯片该如何选择呢?FPGA实时高速采集功能,搭配ARM端高性能处理系统 ,必然是机器人构建自动识别采摘系统最优解决方案。Xilinx公司的Zynq 7000 系列的芯片作为控制器,既可以完成机器视觉算法,又可以实现对机器人的控制程序。此外,FPGA特有的并行处理能力可同时对多个目标进行识别采摘,提高了采摘效率;在此期间,可以通过优化算法和训练学习图像数据,对果实好坏进行分拣。 农产品识别系统的工作流程可分为以下几个步骤: (1)摄像头采集图像,将图像信息通过串口发送到FPGA,预处理图像数据。 (2)调用ZYNQ芯片的识别算法程序包,识别农产品的种类,成熟度,大小等相关信息。 (3)通过网络、多媒体接口把相应农产品信息显示在触摸屏和云端,实时监控画面并记录采摘信息。 (4)在通过FPGA和软件的协调下,对图像中水果坐标信息进行计算,控制电机运转机械臂对成熟果实进行采摘操作。 基于Zyn q 7000系列FPGA农业生产识别系统流程框架图 随着农业升级硬件需求的不断增加,米尔电子基于Xilinx Zynq 7000系列7Z010/7Z020处理器,设计了一款简单易开发的单板Z-turn Board,大容量存储设计,支持系统长期数据存储;拥有丰富的接口,摄像头接口,HDMI显示接口,LCD 接口,可连接高清触摸屏幕,显示各类数据信息,实现就地监控和农作物实时管理;拥有千兆网口和CAN,PMOD,丰富的I/O等数据通讯接口,可轻松应对各类场景下的多种功能需求。并且该单板支持PYNQ设计平台,设计人员可以通过Python语言和库,利用Zynq中融合可编程逻辑和微处理器的优势来快速构建更强大的嵌入式系统。 米尔基于Xilinx -7Z01 0/20-V2单板 附基于Xilinx -7Z010/20处理的MYS-7Z010/20-V2单板资料: SOC : Xilinx Zynq-7010/20 高性能双核ARM Cortex-A9处理系统(PS),FPGA架构:可编程逻辑单元 XC7Z010(28K,约43万逻辑门 )XC7Z020(85K,约1.3M逻辑门)。 系统内存 : 1GB DDR3 SDRAM(512MB*2) 存储 : QSPI 默认16MB,TF CARD槽(支持外部启动) 网络 : 一路千兆网口 视频 : HDMI接口 USB : USB HOST*2 JTAG : 1路PS/PL复用 JTAG接口(进行编程调试下载) 供电 :5V/0.5A 为了开发的多样性,米尔还为Z-turn Board设计出专属Z-turn IO Cape,扩展了Z-turn 的普通IO,ADC,LCD,摄像头接口等,能搭配更多的外设模组共同使用。大大扩展了开发场景。 Z-turn+Z-turn IO Cape
  • 热度 18
    2021-7-1 11:12
    4513 次阅读|
    0 个评论
    疫情的爆发,导致众多半导体工厂产线运作能力下降,甚至是停工停产,从而造成处理器的产能下降,进一步加剧“缺芯潮”,而伴随着产品性能的提升,对处理器的性能要求也越来越高,单一核心处理器已无法满足,异构多核处理器逐渐成为工业市场新宠。随着异构多核逐步成为行业主流架构,作为行业霸主的xilinx,其推出的 ZYNQ系列处理器出货量出现剧增情况,不少嵌入式厂商也纷纷闻声而来,例如创龙科技给出的官方报告,Zynq-7010/7020核心板在2021年上半年出货量就远超2020年一整年,达到了接近200%。 据了解,目前嵌入式行业还是比较吃香的,特别是专注工业级别领域。创龙科技SOM-TLZ7x大家在平时工业环境下开发应用,这一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板,处理器集成PS端双核ARM Cortex-A9 + PL端Artix-7架构28nm可编程逻辑资源,通过工业级B2B连接器引出千兆网口、USB、CAN、UART等通信接口,可通过PS端加载PL端程序,且PS端和PL端可独立开发。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,满足各种工业应用环境。 面对日益剧增的缺芯潮,只有进一步满足部分客户降成本需求,才能在这一时代潮流下站稳脚跟。对此,邮票孔版本的Zynq-7010/7020核心板也可以成为一大开发好助手。 很多朋友都谈起想要低成本ARM+FPGA方案,但是又难以满足工业级别开发环境应用,在开发技术上也遇到不少问题,对此我也更推荐大家找那些售后服务更好的嵌入式厂商,下面给大家推荐两款低成本的ARM+FPGA核心板,可以做一体式解决方案,价格还算可以,让项目快速选型。大家做个参考,有想要更详细的资料可以下方留言,我发给大家评估。在缺芯潮下,此两款工业核心板相关芯片有大量库存,核心板库存充足,项目顺利量产以及大批量供应。 TI AM437x + Xilinx Spartan-6和TI OMAP-L138 + Xilinx Spartan-6 FPGA这两款异构多核工业级核心板是不错选择。第一个核心板内部AM437x与Spartan-6通过GPMC、I2C通信总线连接。通过工业级B2B连接器引出LCD、CAMERA、GPMC、CAN等接口;第二款核心板内部OMAP-L138与Spartan-6通过uPP、EMIFA、I2C通信总线连接,并通过工业级B2B连接器引出网口、EMIFA、SATA、USB、LCD等接口。
  • 热度 22
    2021-4-5 15:16
    4562 次阅读|
    0 个评论
    Xilinx推出低功耗-小容量-小封装ZYNQ Ultrascale+ MPSoC,特别适合用于ZYNQ-7000升级换代
    作者:Hello,panda Xilinx 推出低功耗 - 小容量 - 小封装 ZYNQ Ultrascale+ MPSoC, 特别适合用于 ZYNQ-7000 升级换代 前段时间看到 Xilinx 发布了新的差异化 ZYNQ Ultrascale+ MPSoC ZU1 和 Artix Ultrascale+ FPGA ,熊猫君趁着国家假日有点时间,随便瞎聊一下。本次发布的新产品均采用 16nm 的工艺,可选封装有 0.5mm 焊盘间距紧凑型的 InFo ,最小封装尺寸只有 16mm*9.5mm ,这种封装类型可以缩短信号互联,有利于提高信号完整性。据 Xilinx 介绍,由于采用了台积电 16nm 工艺,相对之前版本的 ZU2 器件,静态功耗可以降低 50% ,可编程逻辑相对动态功耗可下降 40% 。因此,这个系列产品是小尺寸、低功耗、高性能应用产品的福音。 熊猫君在下面列一个比较详细的表,简单对比一下 ZYNQ-7000 系列和 ZYNQ Ultrascale+ MPSoC ZU1 的性能和资源比较。 备注:( 1 ) ZU1 系列器件均最高支持 -2 速率等级;( 2 )仅 C784 封装的器件 PS 端支持 64bit DDR4 ,其它封装均只能支持 32bit ;( 3 ) ZU1 系列器件均可支持 2.5Gbps MIPI 直接接入(使用 Vivado2019.2 及以上版本)。 从图中可以看出, ZU1 实际上逻辑量和 ZYNQ-7020 是相当,但是性能几乎翻倍;并且 ARM 处理器的性能 ZU1 是 ZYNQ-7000 的 4~8 倍,还有实时处理性能较高的 Cortex-R5F 双核,因此,一些对 ARM 处理性能要求较高的场合,这应该算是一个较为完美的解决方案,可以直接从 ZYNQ-7000 进行升级,逻辑性能和 ARM 处理性能都有大幅提升,应用面和灵活度更高; 从图中可以看出, ZU1 最高支持 64bit 的 DDR4-2400 (小封装的位宽只有 32bit 且速率有所降低),相对 ZYNQ-7000 只能支持 32bit 的 DDR3-1066 而言,带宽有了较大的提升,这对大吞吐量的视频图像处理而言,无疑优势很大。且 ZU1EG 还可以支持 Mali-400 的 GPU ,虽然只是入门级的,但是通用场合的刷屏还是够了的,比如手持式示波器、手持式超声仪、汽车高级影音娱乐系统等。 从图中可以看出, ZU1 支持 USB3.0 、 PCIe2.0 、 SATA3.1 和 DP1.2 等高速通信、存储和显示接口,这在 ZYNQ-7000 系列里面是没有的,这也是 ZYNQ-7000 系列器件的一大短板,对高速接口的支持不足; ZU1 全部用硬核支持,大大减少逻辑开发的复杂度,在工业信号和图像采集、工业控制卡、高端采集和存储设备应用上应该可以玩儿得风声水起了。 从图中可以看出, ZU1 系列器件最小封装尺寸只有 9.5mm*15mm ,也就是说只有 ZYNQ-7020 CLG400 封装尺寸的一半,再配套一片 32bit 的 LPDDR4( 或 MCP) 和小尺寸的 Flash ,使用内置电感的小封装电源方案,整个板子可以做得很紧凑,对一些尺寸敏感的应用,如无人机视觉处理和图传系统、无人机控制系统、小型工业机器人、小型工业图像识别系统前端等应用,有较高的性能 / 面积比指标和效能比指标。 从 ZYNQ Ultrascale+ MPSoC 的数据手册中可以看到,其 HP IO 可以直接支持低电压 SLVS MIPI 电平输出,通过优化了的 IP 核可以支持到 2.5Gbps/Lane 的速率,这算是对 ZYNQ-7000 器件的一个补齐,因为 ZYNQ-7000 不可直接支持 MIPI 信号的输入,在一些 Camera 应用中显得十分的难受,同时呢,熊猫君还是希望有一款低端 ZU+ 器件可以支持 Video Codec ,可以性能不那么高,在一些常规应用中有编解码的支持是很有必要的,能够拓展一大片的应用覆盖面。 最后,大家关注的一个重点就是成本问题,这颗芯片卖多少钱,当然,这颗料要到 2021 年的 Q3 季度才会量产,据 Xilinx 方面吹风说,价格应该和 ZYNQ-7020 差不多或稍微贵几个 $, 不会贵太多;面向的主要对象也是对 ZYNQ 的升级或是以前一些 ZYNQ 干起来吃力或不够干活,通过使用 ZU1 可以轻松的给干了且不增加多少成本。就这样,最后使用一张 Xilinx 官微的图片聊做结尾。 最后,熊猫君欢迎大家一起讨论、分享技术问题和技术方案, QQ 群的微信公众号的二维码贴在下面了,大家可以放心扫描加入,共同进步。
  • 热度 3
    2020-1-12 23:29
    5188 次阅读|
    1 个评论
    Zynq高速串行CMOS接口的设计与实现
    Zynq 高速串行 CMOS 接口的设计与实现 作者: hello,panda 现在 CMOS 传感器的分辨率越来越大,对应的,对数据传输接口的要求也越来越高。根据熊猫君有限的实现和调试经验,基本上遇到了: ①多通道 HiSPi 接口:主要是 Aptina (现已经被安森美收购),常用的有 1080P60 的 AR0331 ( 3.1M ), 3664 × 2748P15 的 MT9J003 , 3984 × 2712P80 (开窗输出最高可达 1200fps )的 AR1011 等; ②多通道 LVDS 接口:主要有索尼系列、安森美的 Python 系列、国产如长光辰芯和德国 viimagic 系列等,至少熊猫君用过的 IMX172/IMX122/IMX185/ IMX236 、安森美 Python 全系列和 VII9222 等都是 LVDS 输出; ③ MIPI 接口:多用于手机,一些监控用的 CMOS 如 Sony IMX185 、 OV14810 等也带; ④ CCIR656 :一般低分辨率的会带 CCIR656 接口,也有一些厂家的高分摄像头也带,比如 OV14810 ; ⑤并行接口:较早设计的 CMOS 许多都是直接并口输出,比如 Aptina 的 MT9M031 、 MT9J003 都带有并口输出; 熊猫君在这里想讨论的是前三种接口的实现,它们是业界应用最广泛而且对 FPGA 资源有着共性要求。 无论是 HiSPi 、 LVDS 还是 MIPI ,其核心思想就是要实现将高速串行信号恢复成并行数据。这将会用到 Xilinx FPGA IOB 上的一个重要的资源—— ISERDES 。 实现串行信号的并行化,光有 ISERDES 还不行,还需要用到 IO BANK 上的延时模块 IDELAYCTRL 和 IOB 上的 IODELAYE 以及相关的相位训练算法。 1 Xilinx 的 IO 资源 本节对用到的 IO 资源作简要的介绍。 1.1 IDELAYCTRL 资源 在电压、温度等因素变化时,可能会影响到系统的时序,此时 IDELAYCTRL 模块就可以连续补偿时钟域内所有个体的 delay taps (IDELAY/ODELAY) 。如果使用了 IOB 上的 IDELAY 或 ODELAY 资源,那么就必须使用 IDELAYCTRL 资源。请注意,整个 IO BANK 里面只有一个 IDELAYCTRL 。 IDELAYCTRL 很重要的一个输入项就是参考时钟 REFCLK ,补偿时钟域内所有模块的时序参考,这个时钟必须由 BUFG 或 BUFH 驱动。 REFCLK 必须保证在 FIDELAYCTRL_REF+IDELAYCTRL_REF_PRECISION ( MHz ) ppm 才能保证 IDELAY/ODELAY 的延时分辨率: ( TIDELAYRESOLUTION=1/(32 x 2 x FREF )) 1.2 IDELAYE2 逻辑 IDELAYE2 逻辑是一个 31 抽头的循环延时补偿模块,对输入的信号进行指定分辨率的延时, FPGA 可以直接访问。 Tap 延时分辨率由 IDELAYCTRL 的参考时钟提供持续补偿。图( 1 )是 IDELAYE2 接口示意图,表( 1 )是对这些接口的描述,表( 2 )是对逻辑参数的描述。 ( 1 ) IDELAYE2 接口示意图。 表( 1 ) IDELAYE2 接口描述 端口名 方向 位宽 描述 C I 1 当使用 VARIABLE, VAR_LOAD 或 VAR_LOAD_PIPE 模式下的时钟输入,必须是由 BUFG 或 BUFR 驱动,当使用 SelectIO 资源时,必须和它的时钟源相同。 REGRST I 1 复位 pipeline 寄存器,仅在 VAR_LOAD_PIPE 模式下有效 LD I 1 VARIABLE 模式:加载预编程值; VAR_LOAD 模式:加载 CNTVALUEIN 值; VAR_LOAD_PIPE 模式:加载当前 pipeline 寄存器的值。 INC I 1 INC/DEC 增加,减少的 Tap 数 CE I 1 使能 INC 和 DEC 功能,只在 VARIABLE, VAR_LOAD 或 VAR_LOAD_PIPE 模式下有效;当 CE 保持为高的时候,每一个 C 周期都增加或减少一个 TIDELAYRESOLUTION 的时延。 CINVCTRL I 1 动态翻转 C 的极性,当使用该功能时,需禁止 IDELAY control 引脚 2 个 cycle 。 CNTVALUEIN I 5 来自 FPGA 逻辑的动态 Tap 值 IDATAIN I 1 来自 IBUF 的数据输入,输出可驱动 FPGA 逻辑、 ILOGICE 和 ISERDESE DATAIN I 1 来自 FPGA 逻辑的数据输入,输出不可驱动 IOB LDPIPEEN I 1 使能 pipeline 寄存器加载数据 DATAOUT O 1 延时输出的数据 CNTVALUEOUT O 5 Tap 值输出,用于 FPGA 监测 表( 2 ) IDELAYE2 逻辑参数描述 参数名 值域 默认值 描述 IDELAY_TYPE String: FIXED, VARIABLE, VAR_LOAD 或 VAR_LOAD_PIPE FIXED 定义延时类型 DELAY_SRC String: IDATAIN, DATAIN IDATAIN 选择延时源 IDELAY_VALUE Integer: 0 to 31 0 固定延时值和其他模式的初值 HIGH_PERFORMANCE_MODE Boolean: FALSE 或 TRUE TRUE 为 TRUE 的时候减少输出 jitter ,否则减少功耗 SIGNAL_PATTERN String:DATA, CLOCK DATA 指定时序分析工具按时钟还是数据路径进行分析 REFCLK_FREQUENCY Real: 190 to 210 或 290 to 310 200 设置静态时序分析的 Tap 值 CINVCTRL_SEL Boolean: FALSE or TRUE FALSE 设置是否动态转换 C 的极性 PIPE_SEL Boolean: FALSE or TRUE FALSE 选择是否使用 Pipline 模式 以下以 VAR_LOAD 模式为例说明延时的时序动作,如图( 2 )所示。 图( 2 )延时时序动作模型 a ) Clock Event 0 : 在 LD 有效前, CNTVALUEOUT 输出为未知值; b ) Clock Event 1 : 在 C 的上升沿采样到 LD 有效,此时 DATAOUT 延时 CNTVALUEIN 指定的延时 Taps ,改变 tap Setting 到 Tap2 , CNTVALUEOUT 更新到新的 Tap 值; c ) Clock Event 2 : INC 和 CE 有效,此时指定了增量操作, Tap 值加 1 , DATAOUT 输出从 Tap2 更新到 Tap3 , CNTVALUEOUT 更新到新的 Tap 值; d ) Clock Event 3 LD 有效, DATAOUT 输出延时更新到 Tap10 , CNTVALUEOUT 更新到新的 Tap 值。 1.3 ISERDESE2 逻辑 输入串转并逻辑可以看做是 OSERDESE2 的逆过程,在 SDR 模式下可支持 2- 、 3- 、 4- 、 5- 、 6- 和 7- 的串并转换,在 DDR 模式下可支持 2- 、 4- 、 6- 、 8- 的串并转换,级联 DDR 模式下还可扩展到 10- 和 14- 。每一个 ISERDESE2 包括: a )专门的串并转换器; b ) Bitslip 子模块用于源同步接口; c )专用的可支持 strobe-based 的存储接口。 图( 3 )是 ISERDESE2 的结构示意图。表( 3 )是 ISERDESE2 接口描述,表( 4 )示 ISERDESE2 的参数描述。 图( 3 ) ISERDESE2 结构示意图 表( 3 ) ISERDESE2 端口名 方向 位宽 描述 Q O 8 并行寄存器数据输出,最先进入的串行数据出现在 Q8 O O 1 组合数据输出, DDLY 或 D 未通过寄存器直接输出。 SHIFTOUT1 O 1 级联输出,连接到 IOB 或 Slave 的 SHIFTIN1 SHIFTOUT2 O 1 级联输出,连接到 IOB 或 Slave 的 SHIFTIN2 D I 1 来自 IOB 的串行数据输入 DDLY I 1 来自 IDELAYE2 的串行数据输入 CLK I 1 高速时钟输入,用于采样高速串行数据流 CLKB I 1 第二高速时钟输入,仅用于 MEMORY_QDR 模式 CE1, CE2 I 1/1 时钟输入使能, NUM_CE=1 时, CE2 不使用;当 NUM_CE=2 时, CE1 使能 ISERDESE2 的前 1/2 的 CLKDIV 周期, CE2 使能 ISERDESE2 的后 1/2 的 CLKDIV 周期 RST I 1 高有效复位 CLKDIV I 1 分频时钟输入,用于同步并行数据输出和控制信号 OCLK I 1 高速时钟输入,用于高速存储器,只有在 INTERFACE_TYPE 为 MEMORY 时才有效 OCLKB I 1 反相的高速数据输入,用于高速存储器,只有在 INTERFACE_TYPE 为 MEMORY 时才有效 BITSLIP I 1 BitSlip 调节脉冲 SHIFTIN1 I 1 级联模式下连接到 Master 的 SHIFTOUT1 SHIFTIN2 I 1 级联模式下连接到 Master 的 SHIFTOUT2 OFB I 1 反馈输入, OLOGICE 或 OSERDESE 的输出反馈 DYNCLKDIVSEL I 1 动态选择 CLKDIV 的相位使能位 DYNCLKSEL I 1 动态选择 CLK/CLKB 的相位使能位 表( 4 ) ISERDESE2 的参数描述 参数名 阈值 默认值 描述 DATA_RATE String: SDRor DDR DDR 定义输入的数据类型 DATA_WIDTH DDR : 4,6,8,10,14 SDR : 2,3,4,5,6,7,8 4 定义转换位宽 DYN_CLKDIV_INV_EN Boolean: TRUE 或 FALSE FALSE 为真时使能 DYNCLKDIVSEL 反相和禁止 CLKDIV 的 HDL 反相 DYN_CLK_INV_EN Boolean: TRUE 或 FALSE FALSE 为真时使能 DYNCLKDIVSEL 反相和禁止 CLK/CLKB 的 HDL 反相 INTERFACE_TYPE String: MEMORY, MEMORY_DDR3, MEMORY_QDR, OVERSAMPLE 或 NETWORKING MEMORY 选择 ISERDESE2 的工作模型 NUM_CE Integer: 1 或 2 2 定义使用时钟使能信号的个数 OFB_USED Boolean: TRUE 或 FALSE FALSE 定义是否使用 OFB 功能 SERDES_MODE String: MASTER 或 SLAVE MASTER 定义主从模式 INIT_Q1~Q4 Binary: 0 或 1 0 设置采样寄存器的初始值 SRVAL_Q1~Q4 Binary: 0 或 1 1 设置采样寄存器的复位值 (1) 时钟方案 CLK 和 CLK_DIV 必须是严格对齐的时钟,虽然允许使用 BUFIO/BUFR ,但任然有可能存在相位问题。图( 5 )时采用 BUFIO/BUFR 的方案。 图( 5 )采用 BUFIO/BUFR 的时钟方案 一般的,根据接口类型的差异,时钟必须满足以下的约束: ① networking interface a ) CLK → BUFIO ; CLKDIV → BUFR ; b ) CLK → MMCM/PLL ; CLKDIV →和 CLK 相同的 MMCM/PLL 的 CLKOUT 的输出,使用 MMCM 时 CLK 和 CLKDIV 必须使用相同的驱动 BUF ; c ) CLK → BUFG ; CLKDIV → BUFG 。 ② MEMORY Interface Type a ) CLK → BUFIO, OCLK → BUFIO ,或 CLKDIV → BUFR ; b ) CLK → MMCM 或 PLL, OCLK → MMCM, 或 CLKDIV 由同一个 MMCM/PLL 的 CLKOUT 驱动; c ) CLK → BUFG , CLKDIV →不同的 BUFG 。 OCLK 和 CLKDIV 的输入相位必须是严格对齐的, CLK 和 OCLK 之间不要求相位关系。 From CLK to OCLK 的时钟域必须进行补偿。 其他接口类型的时钟方案参考文档 UG471 。 (2) BitSlip 子模块 BitSlip 用于调整并行寄存器输出串行数据的位置。在 SDR 模式下,每一个 BitSlip 脉冲让输出 pattern 的数据左移 1bit ;在 DDR 模式下,第一个 BitSlip 右移 1bit ,第二个 BitSlip 左移 3bit ,依次进行,移动规律如图( 6 )所示。 BitSlip 一定是和 CLKDIV 同步的一个脉冲。 图( 6 ) BitSlip 训练移位规律 在上面所介绍的资源中, IDELAYE2 是动态相位对其训练的神器, ISERDESE2 实现串并转换,其 Bitslip 功能是实现并行化数据对齐的关键。 2 LVDS 高速接口实现实例 因为 MIPI 接口有其完整的物理层协议,因此不在这里讲具体实现,本文以 Sony 的 IMX122 CMOS 为例,聊一聊高速 LVDS ( HiSPi 类似,只是电平标准有一点区别)接口在 Xilinx 7 系列 FPGA 和 Zynq SoC 上的实现。 2.1 需求分析 以 Sony IMX122 CMOS 为例,配置在 1080P 分辨率可输出 30fps 。 CMOS 在初始化完成后输出两通道稳定的 LVDS 数据, LVDS 接收模块在收到配置完成信号后开始工作。因此,这个 LVDS 接收模块需要实现: ① CMOS 工作在 Slave 模式下,向 CMOS 发出参考时钟( INCK )、行同步( XHS )、帧同步( XVS )信号; ② 接收 LVDS 数据并将它恢复成为指定的图像数据格式; ③ 提供测试信息接口。 2.2 IMX122 CMOS 输出特性 本小节简介 IMX122 CMOS 的一些特性。 2.2.1 同步时序要求 在 Slave 模式下需要向 CMOS 提供周期稳定的 XHS 和 XVS 信号,两者的时序要求如图 7 所示。在产生同步时序时需要注意以下要点: ① XVS 和 XHS 必须是稳定的周期性信号; ② XVS 和 XHS 信号的低电平保持时间为 4~100 个 INCK ; ③ XHS 可以和 XVS 同时拉低,也可延时一个时钟周期拉低。 图 7 Slave 模式下同步时序 2.2.2 输出数据率 在串行 SDR LVDS 模式下以 12bit 模式输出,数据率为 891Mbps ,每个通道的数据率为 445.5Mbps 。 2.2.3 Sync Code 格式 在串行输出模式下, CMOS 通过输出固定的 Sync Code 来指示图像的有效帧、行信息,接收器需通过查找这些 Sync Code 来恢复图像。 IMX122 可提供两种模式的 Sync Code ,这里配置为 Sync Code1 ,其具体定义如图 8 所示。 图 8 IMX122 Sync Code 定义 2.2.4 输出图像组织形式 IMX122 在 1080P 读出模式下,输入参考时钟 INCK 是 37.125MHz 。一帧图像输出固定为 1125 行,每行 1100 INCK ( 29.63 μ s ),有效输出为 1984 × 1105 。图像输出的时序如图 9 所示,图 10 是输出数据编码规则。 图 9 IMX122 LVDS 模式输出时序 图 10 IMX122 12-bit 2 通道输出编码格式 2.3 设计思路和模块结构 Slave 模式下工作的 CMOS 在 XVS 和 XHS 的同步下按照固定时序稳定输出 LVDS 图像数据。 LVDS 串行数据按照一定的方式进行编码,接收模块应先将串行数据解码恢复成为并行数据,再根据数据的排列方式格式化输出。因此,整个模块可以划分为时序同步、 LVDS 接收解码(串转并)和数据格式化输出三个部分。整个 LVDS 接收模块的结构如图 11 所示。 图 11 LVDS 接收模块顶层图 ① CMOS 输入参考时钟( INCK )为 37.125MHz ; ② CMOS 输出 LVDS 数据为 445.5MHz SDR 型; ③ 时序发生器由 74.25MHz 发生 30fps 的 XVS 、 XHS 信号; ④ LVDS 数据接收解码模块将数据恢复为 8bit@55.6875MHz 并行格式( DATA ); ⑤ 格式化输出模块通过搜索同步头的状态确定是否发出 bit_slip, 并根据 CMOS 的数据格式和同步信号格式化输出 12bit@74.25MHz 像素数据( PIX_DATA ); ⑥ IDELAYCTRL 以 Ref_clk 为基准对整个 IO BANK 进行输入延时控制。 2.3.1 时序同步 同步时序由内部 74.25MHz 计数产生。按照图 7 所示时序即可。 2.3.2 LVDS 接收解码 LVDS 接收的主要工作是将串行的数据转为并行数据并进行自动相位调节 , 移位寄存器抽头调整( Bitslip )。 Xilinx Artix7 系列 FPGA 提供串转并模块 ISERDES 和 IO 延时模块 IODELAYE2 , ISERDES 性能可在 415Mb/s~1200Mb/s 之间, IODELAYE2 的延时参考时钟可以是 200MHz ( 1tap ≈ 78ps )或 300MHz ( 1tap ≈ 52ps )。 ( 1 ) Artix7 FPGA 时钟特性 在 Artix7 系列器件里, MMCM 可驱动 BUFIO 、 BUFR 、 BUFH 和 BUFG , PLL 只能驱动 BUFH 和 BUFG 。 ZYNQ-7020 采用 Artix7 Speed-1 器件,时钟网络的最高性能如下表 5 所示。 表 5 Artix7 Speed-1 器件时钟性能 FPGA BUFG BUFH BUFR BUFIO Artix7 Speed-1 464MHz 464MHz 315MHz 600MHz ( 2 ) LVDS 接收时钟选择 ① LVDS 解码串行参考时钟选择 从表 1 可以知道,采用 BUFG 最高时钟性能为 464MHz 。 IMX122 1080P 串行模式下两通道 LVDS 每通道的输出数据率为 445.5Mbps ( SDR ) , 接近 BUFG 的极限值,因此这里作一个变通处理, 使用 222.75MHz 时钟按照 DDR 方式对串行数据进行采样。 ② IODELAYE2 延时参考时钟选择 延时参考时钟选择的原则是在 LVDS 数据时钟周期内,可调节的 Tap 数尽量的多。 IMX122 输出的数据周期为 2.245ns ,调节一个周期采用 200MHz 参考时钟需要 28taps ,采用 300MHz 参考时钟需要 43 个 Taps ,而 IODELAYE2 的调节 Tap 数为 0~31 ,故只能 选择 200MHz 的参考时钟 。 ( 3 ) LVDS 数据接收模块时钟 因 CMOS IMX122 不输出 LVDS bit 时钟, FPGA 使用内部时钟来接收解码 LVDS 数据。如图 12 所示,与 LVDS 相关的时钟由同一个 MMCM 产生以保证其相位的一致性。其中: ① 37.125MHz ,为 CMOS 工作参考时钟; ② 55.6875MHz ,提供给 IODELAYE2.C 、 ISERDES2.CLKDIV 、补偿状态机及解码后的字节数据参考时钟; ③ 74.25MHz ,产生 30fps 的 CMOS 同步参考时序和 12bit 像素参考时钟; ④ 222.75MHz ,以 DDR 模式接收的 DDR 位参考时钟; 图 12 LVDS 数据接收模块结构 IMX122 输出两路 LVDS 数据,每个通道的接收逻辑相同,对每一通道而言,数据流路径如下: a)LVDS 差分对通过 IBUFDS_DIFF_OUT, 得到位数据(记为 Master )及与其反相的数据(记为 Slave ); b)Master 和 Slave 分别进入各自的 IODELAYE2 和 ISERDES2 得到各自的并行数据送到补偿算法状态机进行动态相位调整并反馈各自的延时值到 IODELAYE2 。根据 IMX122 的 LVDS 编码特点, ISERDES2 按照 1:8 作串并转换最为合适; c) 数据格式化输出模块根据查找 Sync Code 的情况调整 bitslip ; d) 补偿模块根据数据调整的情况输出解码后的 8-bit 并行数据。 2.3.3 动态相位补偿 动态相位补偿原理如下: ① 初始化时, Master 数据延时假定设为数据眼图的中间位置, Slave 和 Master 的延时相隔半个数据周期。 ② 在 Master 和 Slave 的数据不全为零或不全为壹时启动动态相位补偿算法。相位补偿的基本原理是:如果 Master 和 Slave 采样到的数据相同,则说明采样太靠后,延时减少一个 Tap (如图 13 );如果 Master 和 Slave 采样到的数据不同,则说明采样点太靠前,延时增加一个 Tap( 如图 13 ) 。 图 13 采样点延时示意图 ③如果延时 Tap 值为最小或最大位置时,则交换 Master 和 Slave 的的参考关系,同时输出数据作相应调整; 2.3.4 数据格式化输出 该模块的工作是将收到的串转并数据的基础上搜索 Sync Code 、并组织成 12-bit 的像素数据按照给定时序格式化输出。 ( 1 ) Sync Code 搜索 Sync Code 搜索采用的策略是,逻辑在不停的查找在一帧数据里是否存在图 3-2 所示的的特定数据,如果这些同步码都能找到,则表示接收逻辑串转并的输出位顺序正常,不再需要 bitslip ;若没有找到全部的同步码,则在下一帧开始的时候( XVS 上升沿)给出一个 bitslip 脉冲调整输出,直到找到完整的 Sync Code 。 两路 LVDS 通道分别单独进行 Sync Code 搜索, 若 32 次 bitslip 后任然没有找到 Sync Code ,则报告 CMOS 输出错误 。 ( 2 )格式化输出 格式化输出模块完成将 CMOS 输出的数据解码成 12-bit Pixel 数据并按照视频格式时序输出,结构如图 14 所示。 图 14 格式化输出逻辑结构 对格式化输出的详细实现过程这里不赘述。 2.3.5 接收模块顶层文件描述 IMX122-LVDS 接收模块由 4 个文件构成,分别是 imx122_lvds_rev_v1_0 、 lvds_data_rx 、 rev_data_format_v1_0 和 imx122_slvsyn_timing_v1_0 构成,它们的层析结构如图 15 所示。 图 15 LVDS 接收模块文件结构 注 1 :蓝色的 imx122_slvsyn_timing_v1_0 不属于 LVDS 接收内容,但 CMOS 在 SLAVE 模式下必须由它提供同步信号后才能正常输出。 注 2 :以上基于 IMX112 的代码可关注微信公众号回复 “ CMOS 解串源码” 免费获取,欢迎加入 QQ 群 300148644 或 关注微信公众号讨论交流。 注 3 :楼主有少量自用评估板可提供验证,扫描下方二维码即可获取。
  • 热度 2
    2019-10-10 11:01
    3365 次阅读|
    1 个评论
    MPSOC学习之HELLO WORLD
    XILINX 新一代 SOC,Zynq UltraScale+ MPSOC 系列性能强悍无比,相比ZYNQ 7000系列每瓦性能提升5倍,作为一名电子发烧友,都想体验一把这高性能的MPSOC开发板。现在用米尔MPSOC开发板来一个hello world。MPSOC学习之HELLO WORLD,分享给大家。 米尔MPSOC开发板采用Zynq UltraScale+ MPSOC系列处理器设计(具体型号XCZU3EG-1SFVC784,未来可选用XCZU2CG,XCZU3CG.XCZU4EV,XCZU5EV) ,且单芯片融合4核心Cortex-A53(Up to 1.5GHZ),2核心Cortex-R5, GPU和154KLE的FPGA(包含DSP模块)。配备4GB DDR4(64bit ,2400MHZ), 4GB eMMC,128MB QSPI flash 且板载千兆以太网/USB PHY的情况下仍将尺寸控制在62*50mm。米尔MPSOC开发板非常适合人工智能,工业控制,嵌入式视觉,ADAS,算法加速,云计算,有线/无线通信等广泛领域。米尔的板子向来追求做工精致,这款新推出的MPSOC开发板也是如此: 下面是MPSOC之HELLO WORLD学习笔记: 开发环境:vivado 2017.4,开发板型号:米尔MYD-CZU3EG, 主芯片XCZU3EG-1SFVC784。(这个系列板子还有4EV,5EV等版本,手里的3EG版本不支持SFP,因此板上相应接口(白色部分)是空贴的。) Step1 新建vivado工程 New Project, 点击Next进入下一步,填写工程名和选择工程保存路径,点击Next。继续往下,按照截图的配置选择开发板型号为 xczu3eg-sfvc784-1-e ,点击Next,点击Finish。新建的vivado工程,如下图所示 tep2 新建Block Design 点击导航栏的Create Block Design,出现Create Block Design对话框。这里可以自己填写名称,我这里直接用默认的名称,点击OK。新建的Block设计区如下图: Step3 调用ZYNQ IP核并配置 点击Add IP,在导航栏输入ZYNQ,然后双击ZYNQ UltraScale+MPSoC。添加的ZYNQ核,如下图所示: 双击ZYNQ IP核导入配置文件 Apply Configuration 添加配置文件 导入 hello_world.tcl配置文件,点击OK 点击OK,完成ZYNQ 核配置。 Step4 综合 Generate Output Products 点击Generate Step 5 生成顶层文件 Create HDL Wrapper 点击OK,完成生成顶层文件步骤。 Step6 生成bit文件 点击快捷工具栏上的Generate Bitstream 连续点击OK,bit生成成功,点击Cancel关闭对话框。 Step7 导出硬件配置文件 Export Hardware 勾选Include bitstream,点击OK Step8 打开SDK Launch SDK,点击OK Step9 新建fsbl Application Project,添加工程名fsbl,点击Next 选择Zynq MP FSBL,点击Finis Step10 新建hello_world工程 Application Project。填写工程名 hello_world, 点击Next 选择Hello_World模板,点击Finish Step11 生成BOOT.bin文件 Create Boot Image,点击Create Image。生成的BOOT.bin文件,如下图所示,然后将这个生成的BOOT.bin文件拷贝到SD卡上 MPSOC开发板模式设置,这里我们设置为SD卡启动模式 MPSOC开发板连接12V电源、连接uart串口、插入SD卡 MPSOC开发板上电运行 串口打印输出 Hello World 好啦,用MPSOC上输出HELLO WORLD已经完成。其实也不难,关键是要多看开发手册、光盘资料,在配置细节上留意(因为篇幅太长,这里缩减了许多步骤图片)。另外,有不明白的地方可以找米尔技术支持。
相关资源