精华内容
下载资源
问答
  • Zynq

    千次阅读 2020-01-10 15:13:34
    Zynq的学习(一)基本架构 一,简介部分 Zynq是由两个主要部分组成的:一个是由双核 ARM CortexA9 构成的处理系统 (PS),另一个是等价于一片 FPGA 的可编程逻辑 (PL)。它还具有集成的存储器、各种外设和高速...

    Zynq的学习(一)基本架构

    一,简介部分

    Zynq是由两个主要部分组成的: 一个是由双核 ARM CortexA9 构成的处理系统 (PS),另一个是等价于一片 FPGA 的可编程逻辑 (PL)。它还具有集成的存储器、各种外设和高速通信接口。这个架构实现了工业标准的 AXI 接口,在芯片的两个部分之间实现了高带宽、低延迟的连接。
    PL 部分用来实现高速逻辑、算术和数据流子系统是很理想的,而 PS 支持软件程序或操作系统,具有固定的架构,承载了处理器和系统存储区。 这就意味着任何被设计的系统的整个功能可以恰当地在硬件和软件之间做出划分。PL 和 PS 之间的链接采用了工业标准的高级可扩展接口(Advanced eXtensible Interface,AXI)连接方式。这两部分可以单独使用,也可以合起来用,而且实际上供电电路被设计成独立给每个部分供电,这样 PS 或 PL 部分不被使用的话就可以被断电。Zynq基本架构

    二,处理器系统部分(PS)

    作为处理器系统的基础,所有的芯片都包含了一颗双核 ARM Cortex-A9 处理器。 这是一颗 “ 硬 ” 处理器 —— 它是芯片上专用而且优化过的硅片元件。Xilinx 的MicroBlaze这样的“软” 处理器,是由可编程逻辑部分的单元组合而成的。也就是说,一个软处理器的实现和部署在 FPGA 的逻辑结构里的任何其他 IP 核是等价的。一般来说,软处理器的优势是处理器实例的数量和精确实现是灵活的。从另一方面来说,硬处理器可以获得相对较高的性能,Zynq 的 ARM 处理器正是如此。
    Zynq 的处理器系统里并非只有 ARM 处理器,还有一组相关的处理资源,形成了一个应用处理器单元 (Application Processing Unit,APU) ,另外还有扩展外设接口、cache 存储器、存储器接口、互联接口和时钟发生电路 。下图是 PS 部分架构框图,其中高亮的部分就是 APU。
    PS部分功能图

    2.1应用处理单元(APU)

    APU 主要是由两个 ARM 处理核组成的:最高工作频率1GHz;
    一个 NEONTM 媒体处理引擎(Media Processing Engine,MPE)和浮点单元 (Floating Point Unit,FPU);
    一个内存管理单元 (MemoryManagement Unit,MMU);在虚拟地址和物理地址之间做翻译;
    一个一级 cache 存储器(分为指令和数据两个部分)APU 里还有一个二级 cache 存储器;高速缓冲,在CPU与内存储器之间;
    片上存储器 (On Chip Memory,OCM);
    一致性控制单元 (Snoop Control Unit,SCU);在ARM和二级cache,OCM之间形成桥连接;
    应用处理单元框图

    2.2处理器系统外部接口

    Zynq PS 实现了众多接口,既有 PS 和 PL 之间的,也有 PS 和外部部件之间的。
    (1)PS和外部接口之间的通信
    PS 和外部接口之间的通信主要是通过复用的输入 / 输出( Multiplexed Input/Output,MIO)实现的,它提供了可以做灵活配置的 54 个引脚,这表明外部设备和引脚之间的映射是可以按需定义的。
    IO外设接口列表

    三,可编程逻辑部分(PL)

    Zynq 架构的第二个主要部分是可编程逻辑。这是基于 Artix®-7 和 Kintex®-7的 FPGA 组件的。

    3.1逻辑部分

    PL 主要是由通用 FPGA 逻辑部分组成的,这个 FPGA 是由逻辑片(slice)和可配置逻辑块 (Configurable Logic Block,CLB)组成的,另外还有用于接口的输入/输出块 (Input/ Output Block,IOB)
    逻辑部分和它的组成单元
    • 可配置逻辑块 (CLB) — CLB 是逻辑单元的小规模、普通编组,在 PL 中排列为一个二维阵列,通过可编程互联连接到其他类似的资源。每个 CLB 里包含两个逻辑片(slicem或slicel),并且紧邻一个开关矩阵。
    • 片 (Slice) — CLB 里的一个子单元,里面有实现组合和时序逻辑电路的资源。Zynq 的片是由 4 个查找表、8 个触发器和其他一些逻辑所组成的。
    • 查找表 (Lookup Table,LUT) — 一个灵活的资源,可以实现: 1.至多 6个输入的逻辑函数; 2.一小片只读存储器 (ROM); 3.一小片随机访问存储器 (RAM);4.一个移位寄存器。LUT 可以按需组合起来形成更大的逻辑函数、存储器或移位寄存器。
    • 触发器(Flip-flop,FF) — 一个实现 1 位寄存的时序电路,带有复位功能。FF 的一种用处是实现锁存。
    • 开关矩阵 (Switch Matrix) — 每个 CLB 旁都有一个开关矩阵,实现灵活的布线功能来1.连接 CLB 内的单元;2.把一个 CLB 与 PL 内的其他资源连接起来。
    一个CLB的组成
    • 进位逻辑 (Carry Logic) — 算术电路需要在相邻的片之间传递信号,这就是通过进位逻辑来实现的。进位逻辑把布线和复用器组成链条来连接一个垂直列上的片。
    • 输入 / 输出块 (Input/Output Blocks,IOB) — IOB 实现了 PL 逻辑资源之
    间的对接,并且提供物理设备 “ 焊盘 ” 来连接外部电路。每个 IOB 可以处理一位的输入或输出信号。IOB 通常位于芯片的周边。
    尽管逻辑部分的内部结构知识对于设计者是有用的,但是大多数情况下并不需要专门地指定这些资源 ——Xilinx 工具会自动根据设计来安排所需的 LUT、 FF、IOB 等,然后做好相应的映射。但我还是觉得对底层的电路结构有一个清楚的认识,对以后的学习会有很大的帮助。

    3.2特殊资源:DSP48E1和块RAM

    除了通用的部分,还有两个特殊用途的部件:满足密集存储需要的块 RAM 和用于高速算术的 DSP48E1 片。这两个资源都按列排列集成在逻辑阵列中,嵌入在逻辑部分中,而且往往彼此靠近 (因为密集计算和在内存中存储数据往往是紧密联系的运算)。
    每个块 RAM 可以存储最多 36KB 的信息,并且可以被配置为一个 36KB 的 RAM 或两个独立的 18KB RAM。默认的字宽是 18 位,这样的配置下每个 RAM 含有 2048 个存储单元2Kx18位。RAM 还可以被 “ 重塑 ” 来包含更多更小的单元(比如 4096 个单元 x9 位,或 8192x位),或是另外做成更少更长的单元(如 1024 单元 x36 位,512x72 位) 。把两个或多个块 RAM 组合起来可以形成更大的存储容量。它们可实现 RAM、ROM 和先入先出 (First In First Out,FIFO)缓冲器,同时还支持纠错编码 (Error Correction Coding,ECC)块 RAM 往往还能用芯片所支持的最高时钟频率来工作。
    分布式 RAM (Distributed RAM) ,这是用逻辑部分里的 LUT 来搭建的。用分布式 RAM 实现小存储器往往是有优势的,既是因为资源利用率,也是因为这样的布局更灵活 (分布式存储可以靠近与之相互作用的部件,这样也就能有更快的时序性能) 。
    在这里插入图片描述
    (2)DSP48E1
    逻辑部分里的 LUT 可以用来实现任意长度的算术运算,但是最合适的是做短字长的算术运算 (长字长的算术电路会在逻辑片中占据较大的空间,这样的布局和布线因素会使得时钟频率是次优的)。 DSP48E1是专门用于实现对长字长信号的高速算术运算的逻辑片。这些都是专用的硅片资源,并且在逻辑单元内主要包含了预加法器/减法器乘法器和后加法器/减法器。
    在这里插入图片描述

    四,处理器系统与可编程逻辑的接口

    Zynq 的表现不仅仅依赖于它的两个组成部分 PS 和 PL 的特性,还在于能把两者协同起来形成完整、集成的系统的能力。这其中起关键作用的,是一组高度定制的 AXI 互联和接口用来在两个部分之间形成桥梁。

    4.1AXI标准

    AXI 表示的是高级可扩展接口 (Advanced eXtensible Interface)AXI 总线可以灵活使用,而且一般情况下是用来在一个嵌入式系统中连接处理器和其他 IP 核的。实际上有三类 AXI4,每一类代表了一种不同的总线协议,下面会有总结。对于一个特定的连接选择哪个 AXI 总线协议是基于那个连接所需的特性的。
    • AXI4 — 用于存储映射链接,它支持最高的性能:通过一簇高达 256 个数据字 (或 “ 数据拍 (data beats)”)的数据传输来给定一个地址。
    • AXI4-Lite — 一种简化了的链接,只支持每次连接传输一个数据(非批量) 。AXI4-Lite也是存储映射的:这种协议下每次传输一个地址和单个数据。
    • AXI4-Stream — 用于高速流数据,支持批量传输无限大小的数据。没有地址机制,这种总线类型最适合源和目的地之间的直接数据流 (非存储器映射)

    4.2AXI互联接口

    在 PS 和 PL 之间的主要连接是通过一组 9 个 AXI 接口,每个接口有多个通道组成。这些形成了 PS 内部的互联以及与 PL 的连接。
    • 互联(Interconnect) — 互联实际上是一个开关,管理并直接传递所连接的AXI 接口之间的通信。在 PS 内有几个互联, 其中有些还直接连接到 PL ,而另一些是只用于内部连接的。这些互联之间的连接也是用 AXI 接口所构成的。
    • 接口 (Interface) — 用于在系统内的主机和从机之间传递数据、地址和握手信号的点对点连接。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    • 通用 AXI(General Purpose AXI) — 一条 32 位数据总线,适合 PL 和 PS 之间的中低速通信。接口是透传的不带缓冲。总共有四个通用接口:两个 PS 做主机,另两个 PL 做主机。在PS-PL Configuration中的GP Master/Slave AXI Interface中可以启用该接口
    • 加速器一致性端口(Accelerator Coherency Port) — 在 PL 和 APU 内的 SCU之间的单个异步连接,总线宽度为 64 位。这个端口用来实现 APU cache 和 PL的单元之间的一致性。PL 是做主机的。ACP接口允许对PL主机进行低延迟访问,带有可选的coherency和L1、L2缓存。从系统角度来看,ACP接口具有与APU CPU类似的连通性,因此ACP可以直接在APU块争取资源。在PS-PL Configuration中的ACP Slave AXI Interface中可以启用该接口
    • 高性能端口(High Performance Ports) — 四个高性能 AXI 接口,带有 FIFO缓冲来提供 “ 批量 ” 读写操作,并支持 PL 和 PS 中的存储器单元的高速率通信。数据宽度是 32 或 64 位,在所有四个接口中 PL 都是做主机的。4个AXI_HP接口为PL总线主程序提供了到DDR和OCM内存的高带宽数据通道,每个接口有两个用于读写通信的FIFO缓冲区。内存互连的PL将高速AXI_HP端口布线到两个DDR内存端口或OCM。AXI_HP接口也可以用作AXI_FIFO接口,利用其缓冲能力。简而言之,这种接口为PL主机和PS内存(DDR或OCM)之间提供了一种高吞吐量数据通道。在PS-PL Configuration中的HP Slave AXI Interface中可以启用这些接口。
    在这里插入图片描述

    展开全文
  • 1,Zynq-7000白皮书, 2,ZedBoard板载资料 3,MicroZed板载资料 4,Zynq SoC ZC702 评估套件资料 5,Zynq SoC ZC706 评估套件资料 6,设计实例 7,学习笔记 8,X-fest 最新资料包 9,Xilinx AXI4总线资料 10,...
  • ZYNQ_Study:在Zynq中下载
  • 1,Zynq-7000白皮书, 2,ZedBoard板载资料 3,MicroZed板载资料 4,Zynq SoC ZC702 评估套件资料 5,Zynq SoC ZC706 评估套件资料 6,设计实例 7,学习笔记 8,X-fest 最新资料包 9,Xilinx AXI4总线资料 10,...
  • 1,Zynq-7000白皮书, 2,ZedBoard板载资料 3,MicroZed板载资料 4,Zynq SoC ZC702 评估套件资料 5,Zynq SoC ZC706 评估套件资料 6,设计实例 7,学习笔记 8,X-fest 最新资料包 9,Xilinx AXI4总线资料 10,...
  • 1,Zynq-7000白皮书, 2,ZedBoard板载资料 3,MicroZed板载资料 4,Zynq SoC ZC702 评估套件资料 5,Zynq SoC ZC706 评估套件资料 6,设计实例 7,学习笔记 8,X-fest 最新资料包 9,Xilinx AXI4总线资料 10,...
  • 1,Zynq-7000白皮书, 2,ZedBoard板载资料 3,MicroZed板载资料 4,Zynq SoC ZC702 评估套件资料 5,Zynq SoC ZC706 评估套件资料 6,设计实例 7,学习笔记 8,X-fest 最新资料包 9,Xilinx AXI4总线资料 10,...
  • 1,Zynq-7000白皮书, 2,ZedBoard板载资料 3,MicroZed板载资料 4,Zynq SoC ZC702 评估套件资料 5,Zynq SoC ZC706 评估套件资料 6,设计实例 7,学习笔记 8,X-fest 最新资料包 9,Xilinx AXI4总线资料 10,...
  • 1,Zynq-7000白皮书, 2,ZedBoard板载资料 3,MicroZed板载资料 4,Zynq SoC ZC702 评估套件资料 5,Zynq SoC ZC706 评估套件资料 6,设计实例 7,学习笔记 8,X-fest 最新资料包 9,Xilinx AXI4总线资料 10,...
  • 2. FPGAs,ZynqZynq MPSoC!...2.1 技术时间线2.2 Zynq-7000 SoC2.2.1 Zynq架构特征Zynq PS部分Zynq PL部分Zynq PS与PL部分接口2.2.2 Zynq器件2.3 Xilinx Zynq MPSoC2.3.1 Zynq MPSoC发布2.3.2 Zynq MPSoC架构...

    2. FPGAs,Zynq 和 Zynq MPSoC!


    Zynq MPSoC是Zynq-7000 SoC(之后简称Zynq)的进化版本。Zynq是赛灵思发布的集成PL(FPGA)和PS设计的最早的一代产品。如图2.1所示,在相对较高层次对比了三种器件。Zynq MPSoC的PS部分比Zynq的PS部分面积更大,也更复杂。本章,将介绍这三种器件的特点.
    在这里插入图片描述

    2.1 技术时间线

    进一步介绍之前,需要指出这三种产品都有各自的优势,在选择时,并不是越贵越好,而是最适合我们设计的选择才是最好的选择。这三种产品都有自己在成本,性能等方面最好的平衡,这使其可适用于不同的任务和应用。在这里插入图片描述
    因为大多数读者比较熟悉Zynq,因此我们从它开始介绍,以方便后面我们将Zynq MPSoC与其进行对比。因为FPGA 是所有SoC产品的PL部分,因此,我们稍后再做介绍。

    2.2 Zynq-7000 SoC

    Zynq-7000 SoC是Xilinx发布的第一款SoC器件。集成了基于FPGA的PL部分和基于Arm的PS部分。这里只对其做简单介绍。更详细介绍可参考[The Zynq Book](http://www.zynqbook.com/)该书已出中文版。

    2.2.1 Zynq架构特征

    从高层次的角度去看,Zynq架构包含PS和PL两部分以及之间的互连线。如图2.3所示。互联遵循AXI标准,AXI标准是Arm开发的片上通信技术标准。在这里插入图片描述
    将PS和PL集成到一起一方面能够为运行嵌入式系统中的基于软件的部分提供专用的优化的资源(我的理解是适合运行于处理器的部分),另一方面能够发挥FPGA的优势(尤其时其并行性和可配置能力)。AXI接口来连接这两个不放呢,AXI是专为SoC应用优化的一个接口标准。
    图2.3中并不是按尺寸比例画的,对于不同的Zynq器件,他们有相同的PS架构,但是PL部分的尺寸不同。而对于Zynq和Zynq MPSoC,其PS和PL部分都是不同的。

    Zynq PS部分

    如图2.3的蓝色部分,是一个应用级的处理器以及相关元件。如下所示:

    • 应用处理单元Application Processor Unit (APU) -这部分包括一个双核 Arm Cortex-A9处理器,以及256KB的片上缓存。
    • 互连线和存储接口 -用来进行PL和PS通信以及与各自的片外存储单元通信
    • I/O外设 -一系列集成的外设接口,包括一些常用的标准例如 USB,UART,SPI,I2C等

    Zynq的PS部分包含两个处理核,这使得设计人员可以在两个核上运行相同操作系统,或者每个核运行一个不同的操作系统。后面我们会对比Zynq核Zynq MPSoC的PS架构,并说明新器件增加的一些功能,实际上,Zynq MPSoC具有6个处理核。

    最近(应该是2019年),一个轻量级的Zynq版本,Zynq-7000S发布,该版本PS只包含一个Cortex-A9的处理器。

    Zynq PL部分

    Zynq的PL部分是基于Xilinx的FPGA器件的,其PL部分所对应的器件性能决定PL性能,包括Xilinx的Artix-7,Kintex-7以及Virtex-7系列器件。像这些FPGA一样,其PL部分包含DSP48x slices(高速计算资源),Block RAMs,高速收发器件,以及集成的通信模块。以及通用逻辑。2.4.3节对现代FPGA的这些模块进行进一步介绍。

    Zynq PS与PL部分接口

    Zynq的PL和PS部分有9个接口,包括4个“通用目的接口”,四个“高性能”接口,以及1个用来PS中APU和PL通信的“加速一致性”接口。

    2.2.2 Zynq器件

    表2.1对Zynq-7000系列器件的关键特征和参数进行了对比(注意这里并没有给出单核的Zynq-7000S系列对比,可查看Zynq-7000 SoC Data Sheet: Overview文档)。
    对于列出Zynq-7000系列器件,除了支持的最大时钟频率其PS部分是没有区别的。而其PL部分与其所基于的FPGA型号相似,例如基于Artix-7的PL部分与Artix-7资源类似。不同型号的PL部分在DSP slices,Block RAM以及输入输出资源上有所区别。
    在这里插入图片描述

    2.3 Xilinx Zynq MPSoC

    Zynq MPSoC是Zynq的进阶版本,其PS部分更加复杂,PL部分也由Xilinx7系列升级到UltraScale+ FPGA架构,对于大多数Zynq MPSoC器件,其PL部分的资源和面积要比Zynq系列要多。

    2.3.1 Zynq MPSoC发布

    Zynq MPSoC是在Zynq发布四年之后的2015年发布的。在这四年期间,Zynq在应用于了很多领域,因此诞生了"FPGA+processor"的需求。
    Zynq MPSoC提供了加强版的PS以及更多资源和面积的PL.包含不同子系列以满足不同应用的需求,其不同主要体现在PS资源上。三个子系列分别由两个大写字母表示,分别为CG系列,EG系列以及EV系列,这两个字母的意思如表2.2所示。
    在这里插入图片描述
    Zynq MPSoC并不是Zynq的替代品,只是以相同的形式提供了一个扩展增强的解决方案。Zynq对于更适用相对来说低消耗和稍微简单的系统。

    2.3.2 Zynq MPSoC架构及其特点

    Zynq MPSoC的三个子系列PS和PL部分资源如表2.4,在后面几章本书会详细介绍这些特点。
    在这里插入图片描述
    Zynq MPSoC架构的另外一个重要特点是其电源管理能力。该器件被分为四个电源区域,可以被单独控制,这意味着可以给闲置部分断电(power down),提高电源效率。 另外,Zynq MPSoC架构的安全方面也得到了进一步加强。
    额外需要强调的是, Zynq MPSoC架构PL部分所采用的UltraScale+ FPGA架构(2.4.3节讨论)相对于Zynq所采用的7系列也有很大增强。两个非常重要的特征是其包含了UltraRAM以及DSP由DSP48E1发展为DSP48E2。
    该器件系列的PL部分对于不同型号资源也不同,表2.3给出了最少和最多资源的情况,与Zynq的PL部分(表2.1)相比,Zynq MPSoC具有更多的资源,适合开发对PL资源要求更高的加速应用。
    在这里插入图片描述

    2.4 FPGA

    FPGA是以上两种器件PL部分的基础,也是最早出现的器件。因此我们对其发展进行回顾,接着介绍一些应用,最后介绍现代FPGA技术的架构和特征。

    2.4.1 什么是FPGA

    (FPGA介绍资料较多这不再赘述及翻译)

    2.4.2 FPGA发展

    Xilinx的FPGA架构从最开始的只有64个触发器和3输入查找表(LUT实现逻辑功能)。随着FPGA技术的发展,其面积不断增大,逻辑资源不断增加。其架构也在发展,,功耗不断降低,越来越能够用于更高的频率。而且大量的专用资源例如高速存储器,计算模块,时钟和互联也在不断发展。
    从FPGA的规模来看,用“逻辑单元(logic cells)”来度量逻辑密度,我们从稍微抽象的较低层次考虑体系结构之间的差异。图2.4.张图总结了FPGA在“逻辑单元”方面的发展。以5年为一个时间节点展示了过去15年来发展。并将其与第一块FPGA(1985年发布)对比,可以看到,如今的FPGA即使相对于过去10年的发展已经相当大,更不用是更早期的FPGA。可以看到,第一块FPGA在图中左侧只能用一个点来表示。另外,今年,也有一些比较先进但相对低端的设备可供需求不高的开发者选择。大框中的小框代表该系列较低端的器件。
    在这里插入图片描述
    仅从逻辑单元方面对比,表2.5给出了XC2064和如今最先进的器件Virtex UltraScale+ VU13P的对比。这还不包括近年来不断发展的架构等更先进特征的发展。
    在这里插入图片描述
    Xilinx基础的FPGA结构仍然是一个二维的数字逻辑元件阵列,以CLB分组。每一个CLB包含少量的触发器(flip-flop)和查找表(LUT),其中LUT用来实现布尔逻辑函数,小块存储器以及移位寄存器。从更底层面看,CLB的组成随着时间在不断发展,现代的CLB比早期的CLB含有更更多的逻辑资源。我们保留了这个术语,CLB仍然是将可编程互连线(programmable interconnects)和开关矩阵(switch matrices)连接到一起。当然这种连接技术也有了很大提高。在图2.5中,可以看到CLB的阵列结构的一个图示,开关矩阵和可编程互连线可在图2.5底部看到。
    随着应用要求的发展,FPGA架构也在不断发展,更大的存储单元(从Bock RAM 到最近的 Ultra RAM)提供了更大密度更高速度的存储能力,例如更大的存储使得能够在器件中存储视频数据。在2000年左右集成了乘法器,之后又集成了算术处理模块(DSP48x slices)能够进行乘法,加减法以及其他的逻辑计算。当然,DSP这些年来也有了很大的发展。
    随着FPGA技术越来越多的应用于基础通信设施,数据中心,高性能云计算,支持包含高速串口的IP块价值越来越大。
    如表2.6所示,除了更大的面积,最新的FPGA包含更加专用的资源和功能。
    在这里插入图片描述
    下一节我们继续讨论UltraScale+ FPGAs的更多的细节。

    现代FPGA架构:UltraScale+

    现代的FPGA架构本质上也是一个器件的二维阵列。从某种意义上与早期的器件类似。其特点正如之前强调的时含有更丰富的资源,器件面积更大。
    图2.5时UltraScale+ FPGA资源的一个图示,从较高的一个抽象层次来看,该图可认为由竖直方向的一块块区域组成。大部分区域属于通用目的逻辑(general purpose logic)。例如由查找表和触发器组成的CLB。还有一部分区域是Ultra RAM存储块以及DSP58x计算单元,排列在单或双列,组成较窄的竖直条纹区域。
    在这里插入图片描述
    在接口方面,输入/输出块被排列在bank(不好翻译)中,并在主要资源阵列中形成列。 输入输出块(IOB)支持各种接口标准。 另外的连接是以高速串行收发器的形式提供的,这些收发器通常位于FPGA边缘的四组。 在这些基础上,提供了专用块来支持选定的通信标准(见表2.6)。 在FPGA结构中还存在用于配置、时钟管理和系统监控的额外资源。

    DSP功能

    数字信号处理(DSP)的大部分操作都是定点数乘法和加法操作。常见的DSP任务,如有限脉冲响应(FIR)滤波和快速傅里叶变换(FFT)的计算,主要操作是加法/减法、乘法和采样延迟(sample delays)。 在Xilinx FPGA中,这些操作主要由DSP48x slice完成。这个slice的简化框图如图2.6所示,该图显示了其算法操作和字长(wordlengths),省略了一些附加功能。例如延迟元件,信号路径以及多路复用器等。为了实现FIR或者FFT,可以将DSP48E2 slices级联到一起(不需要消耗FPGA资源)。例如需要实现一个比单独DSP slice字长更长的加法器——比如实现一个96位的加法器——可以将多个DSP48E2组合到一起。
    除了计算功能外,DSP48E2 slice还可用于桶形移位寄存器、模式检测(pattern detection)以及其他逻辑操作。更多关于DSP48E2的完整信息,包括与之前的DSP48Ex相比的改进细节.可以查看文档:UltraScale Architecture DSP Slice: User Guide
    在这里插入图片描述

    存储支持

    FPGA中的存储器可以由CLB资源组成,由CLB组成的的存储资源经常被用来存储少量数据。 对于较大的存储,可以用Block RAM(能够存储36Kb,或分为两个18Kb的存储器),在UltraScale器件中,集成了具有更大存储能力的Ultra RAM(每个288Kb)。 更大的存储器可以通过组合Block RAM 或者Ultra RAM实现。
    Block RAM和Ultra RAM是作为FPGA上的专用物理block实现的,而不是由通用的更底层的逻辑元件组成的。它们支持高性能操作,能够以设备支持的最大时钟频率运行。Ultra RAM在不用时可以单独断电。关于Ultra RAM的更多细节参考文档:UltraRAM: Breakthrough Embedded Memory Integration on UltraScale+ Devices。
    图2.7给出了FPGA上四种可用的存储资源。在这里插入图片描述
    随着器件面积的增加,尤其是Ultra RAM的引入,片上存储能力不断增强,这使得可以减少甚至消灭对片外存储的依赖。这使得我们减少了额外的系统消耗,接口努力(effort),能耗以及延迟和性能限制。图2.7的每一种存储都有各自的特征,在不同的任务中可以选择合适的。取决于采用的设计方法,设计人员能够选择特定的存储资源或者直接让综合工具去选择。

    2.5 对比和讨论:FPGA,Zynq和Zynq MPSoC

    这一节总结了FPGA,Zynq和Zynq MPSoC的不同特点,包括其架构、功耗、性能以及他们在嵌入式系统实现时的特点。

    2.5.1 架构

    (本小节大部分内容前面都已经提到过这里只给出一个结论性表格,更详细的总结可参考原书)在这里插入图片描述

    2.5.2 功耗和性能

    多年来,在降低电力消耗的同时,在提高性能(即。 最大处理频率,或“速度”)。从1985年发布的Xilinx FPGA到2011年7系列器件,能耗(每个逻辑单元测量)减少了1000倍以上。同时,性能增加了大约100倍。我们下面对这些器件进行一个简单的比较。

    功耗

    (参考原书)

    性能

    计算性能通常用最大处理频率来度量。 为了比较性能,表2.8比较了PS和PL元件的最大时钟频率。
    在这里插入图片描述
    总之,FPGA和SoC设备的功耗是密切相关的,因为所有的SoC都包括一个与FPGA有效相同的PL区域。 与Zynq和Zynq MPSoC相比,Zynq MPSoC器件的中的功耗(每个逻辑单元)较低,整体性能较高,这是由于UltraScale+ FPGA体系结构的各种优化所致。 在PS方面,Zynq MPSoC体系结构更加复杂,提供了更高的性能,还包括了电源管理等附加特征。

    2.5.3 嵌入式系统实现

    (参考原书)

    2.5.4 应用

    (参考原书)

    2.6 总结

    (参考原书)

    参考文献:
    L. H. Crockett, D. Northcote, C. Ramsay, F. D. Robinson and R. W. Stewart, Exploring Zynq MPSoC: With PYNQ
    and Machine Learning Applications, First Edition, Strathclyde Academic Media, 2019.
    原文链接:https://www.zynq-mpsoc-book.com/wp-content/uploads/2019/04/MPSoC_ebook_web_v1.0.pdf
    在这里插入图片描述

    展开全文
  • zynq data sheet

    2018-04-23 11:49:21
    zynq data sheet zynq data sheet zynq data sheet zynq data sheet
  • Zynq profiling

    2020-12-25 17:00:52
    <div><p>Adding initial implementation of HAL level profiling functions for Zynq platforms in the shim.</p><p>该提问来源于开源项目:Xilinx/XRT</p></div>
  • zynq开发板教程

    2017-09-07 10:50:48
    黑金开发板zynq手把手教程,黑金开发板zynq手把手教程,黑金开发板zynq手把手教程,黑金开发板zynq手把手教程,黑金开发板zynq手把手教程,黑金开发板zynq手把手教程,黑金开发板zynq手把手教程,黑金开发板zynq...
  • Zynq support

    2020-12-29 18:53:30
    <div><ul><li>initial Zynq support</li><li>it does not support interrupts</li></ul>该提问来源于开源项目:Xilinx/XRT</p></div>
  • 黑金zynq教程

    2018-08-06 23:50:19
    黑金zynq入门教程,ALINX黑金Zynq7000开収平台 配套教程第二部
  • OpenCL on ZYNQ

    2020-05-20 11:03:02
    对于想使用opencl 开发ZYNQ的朋友来说绝对是非常不错的!
  • Zynq中断学习

    2020-08-30 15:20:53
    Zynq的PS是基于ARM架构,使用两个ARM Cortex A9处理器和GIC pl390中断控制器。
  • Zynq 英文电子原版

    2020-12-29 10:32:42
    Zynq 英文电子原版
  • ZYNQ封装手册

    2018-02-04 17:31:13
    ZYNQ芯片的封装手册,主要描述了ZYNQ的各层次芯片的封装信息。
  • Xilinx zynq zynqMP SD EMMC

    千次阅读 2018-07-23 18:49:37
    参考 mmcblk0: error -110 transferring data, sector 266312, nr 240, cmd response 0x900, card status 0xb00 Linux Kernel 4.9, emmc ... AR# 69995 2017.1-2017.4 Zynq UltraScale+ MPSoC: Linux mmcb...

    作者

    QQ群:852283276
    微信:arm80x86
    微信公众号:青儿创客基地
    B站:主页 https://space.bilibili.com/208826118

    参考

    mmcblk0: error -110 transferring data, sector 266312, nr 240, cmd response 0x900, card status 0xb00
    Linux Kernel 4.9, emmc issue

    官网:

    面向 Zynq-7000 SoC、eMMC 的设计咨询 - JEDEC 标准版 4.41 所需的输入保持时间为 3 纳秒
    2015.3 SDK Zynq-7000 eMMC fails reading EXT_CSD reg to check for high speed mode support

    AR# 69995 2017.1-2017.4 Zynq UltraScale+ MPSoC: Linux mmcblk0 error -110 sending stop command, original cmd response 0x900, card status 0xe00 when using Swissbit SD card
    AR# 67157 Zynq UltraScale+ MPSoC: eMMC Programming Solutions
    AR# 71019 Zynq UltraScale+ MPSoC: eMMC Booting Checklist
    AR# 65463 Zynq UltraScale+ MPSoC - What devices are supported for configuration?
    AR# 71825 Zynq UltraScale+ MPSoC SD / eMMC clock has falling edge skew at 200 MHz (SDR104)
    AR# 65676 Zynq UltraScale+ MPSoC, SDIO - SDIO Receiver Auto Tuning Fails In SD104/eMMC 200 Modes
    AR# 69332 2017.1 Zynq UltraScale+ MPSoC:U-boot 需要一个补丁在 HS200 下运行 eMMC
    AR# 69368 2017.1-2018.1 Zynq UltraScale+ MPSoC: How to slow down eMMC from HS200 to High Speed (HS) in FSBL, u-boot and Linux
    AR# 69780 2016.4-2017.4 Zynq UltraScale+ MPSoC: PetaLinux does not correctly override the U-boot environment variables to set SD boot when both eMMC(SDIO0) and SD(SDIO1) are enabled in design
    AR# 69978 Zynq UltraScale+ MPSoC: How to enable UHS (SD 3.0) support for ZCU102 and ZCU106 evaluation board PetaLinux BSPs
    Kernel Boot Failing on Zynq in U-Boot
    SD controller

    Zynq SD boot

    使用MIO40~MIO45,
    397

    让设备树决定emmc的设备号

    添加如下代码,

    struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
    {
    	int err;
    	struct mmc_host *host;
    	int aliasesid;/*add by zhuce*/
    ...
    	aliasesid = of_alias_get_id(dev->of_node, "mmc");
    	if (aliasesid>= 0) {
    		host->index = aliasesid;
    	}
    ...
    }
    

    此时mmc的设备号变了,但是块设备的标号还是没变,先扫描到的为mmcblk0,所以只要在设备树里把要先发现的mmc放到前面就可以保证它的mmc的设备号和块设备号都是0。

    zu emmc降频到HS模式

    发现ftp上传大文件到emmc内核会卡死,尝试降频到HS模式,在linux下只需要修改设备树,uboot和fsbl下降频比较复杂,参考AR69368。

    &sdhci0 {
      no-1-8-v;
    };
    

    降频后还是卡死,但是有改善,可以上传400MB文件,上传1GB文件还是卡死。

    root@zynqmp:~# [   58.230411] random: crng init done
    [  104.514173] init[1]: undefined instruction: pc=0000000000401bd0
    [  104.520513] Code: 3e0ffadc 0749bf19 3e4db43a b0d3e231 (56ade825) 
    [  104.526538] klogd[2051]: undefined instruction: pc=0000007f907a5160
    [  104.527989] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
    [  104.527989] 
    [  104.527995] CPU: 0 PID: 1 Comm: init Tainted: G           O    4.14.0-fdk-1.0.0-20181120.1856 #20
    [  104.527996] Hardware name: xlnx,zynqmp (DT)
    [  104.527998] Call trace:
    [  104.528010] [<ffffff8008088ae8>] dump_backtrace+0x0/0x360
    [  104.528014] [<ffffff8008088e5c>] show_stack+0x14/0x20
    [  104.528019] [<ffffff80089d0320>] dump_stack+0x9c/0xbc
    [  104.528024] [<ffffff800809af98>] panic+0x11c/0x274
    [  104.528029] [<ffffff800809e1a8>] complete_and_exit+0x0/0x20
    [  104.528032] [<ffffff800809ee70>] do_group_exit+0x38/0xa8
    [  104.528037] [<ffffff80080a9108>] get_signal+0x130/0x470
    [  104.528041] [<ffffff8008087df8>] do_signal+0x68/0x650
    [  104.528045] [<ffffff80080887c0>] do_notify_resume+0xc0/0xf0
    [  104.528048] Exception stack(0xffffff800803bec0 to 0xffffff800803c000)
    [  104.528051] bec0: 0000007ffd8b6810 0000000000000000 0000000000000000 0000000000000000
    [  104.528055] bee0: 0000007ffd8b6380 0000000000000000 0000000000000000 0000000000006028
    [  104.528058] bf00: 0000000000000048 003b9aca00000000 00000000fff0334c 000000000001ac10
    [  104.528061] bf20: 0000000000000018 00000003e8000000 00066ff2d7593574 0000182c9dd79931
    [  104.528064] bf40: 0000000000418258 0000007fb589b938 0000000000000874 0000000000418678
    [  104.528067] bf60: 0000000000418640 0000000000418308 0000000000406688 0000000000000000
    [  104.528070] bf80: 0000000000406000 0000000000406000 0000000000406000 00000000ffffff9d
    [  104.528073] bfa0: 0000000000000000 0000007ffd8b6790 0000000000405a58 0000007ffd8b6790
    [  104.528077] bfc0: 0000000000401bd0 0000000060000000 000000000000000b 00000000ffffffff
    [  104.528079] bfe0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    [  104.528083] [<ffffff80080836c0>] work_pending+0x8/0x10
    [  104.528087] SMP: stopping secondary CPUs
    [  104.532762] Kernel Offset: disabled
    [  104.532764] CPU features: 0x002004
    [  104.532766] Memory Limit: none
    [  104.707664] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
    [  104.707664] 
    

    ftp截图,这个问题在zynq平台没有出现过。
    在这里插入图片描述
    开启UHS模式,更新FSBL,project-spec/meta-user/recipes-bsp/fsbl/fsbl_%.bbappend

    YAML_COMPILER_FLAGS_append = " -DUHS_MODE_ENABLE"
    

    设备树,

    & sdhci1 {
        /delete-property/ no-1-8-v;
    };
    

    不识别SD卡

    SD卡识别不到都是因为更换了hdf没有更新fsbl的原因,但看了fsbl的源代码,没有相关代码,所以应该是hw project的系统初始化中的相关代码,更改后识别到ZC706 SD卡,

    mmc0: new high speed SDHC card at address 59b4
    mmcblk0: mmc0:59b4 SDU1  14.8 GiB 
     mmcblk0: p1 p2 p3
    

    uboot sdhci_set_clock: Internal clock never stabilised

    uboot下打印sdhci_set_clock: Internal clock never stabilised.
    FPGA使用了SD1,uboot中为SD0

    uboot sdhci_send_command: MMC: 0 busy timeout increasing to: 200 ms.

    uboot下访问emmc失败

    zynq-uboot> mmcinfo
    sdhci_send_command: MMC: 0 busy timeout increasing to: 200 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 400 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 800 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 1600 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 3200 ms.
    sdhci_send_command: MMC: 0 busy timeout.
    

    SD采用MIO,时钟50MHz,更新fsbl,正确显示,SD采用EMIO,则必须添加约束,

    zynq-uboot> mmcinfo
    Device: zynq_sdhci
    Manufacturer ID: 45
    OEM: 100
    Name: DG400 
    Tran Speed: 52000000
    Rd Block Len: 512
    MMC version 4.0
    High Capacity: Yes
    Capacity: 7.3 GiB
    Bus Width: 4-bit
    Erase Group Size: 512 KiB
    

    uboot 2015.04 petalinux2015.2.1 ext4write报错

    Bytes transferred = 3652736 (37bc80 hex)
    Device: zynq_sdhci
    Manufacturer ID: 45
    OEM: 100
    Name: DG400 
    Tran Speed: 52000000
    Rd Block Len: 512
    MMC version 4.0
    High Capacity: Yes
    Capacity: 7.3 GiB
    Bus Width: 4-bit
    Erase Group Size: 512 KiB
    File System is consistent
    sdhci_send_command: MMC: 0 busy timeout increasing to: 200 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 400 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 800 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 1600 ms.
    sdhci_send_command: MMC: 0 busy timeout increasing to: 3200 ms.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    Error in getting the block group descriptor table
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext2fs_devread() read error **
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    sdhci_send_command: MMC: 0 busy timeout.
    sdhci_send_command: MMC: 0 busy timeout.
     ** ext4fs_devread read error - block
    sdhci_send_command: MMC: 0 busy timeout.
    error in File System init
    ** Error ext4fs_write() **
    ** Unable to write file /boot/uImage **
    

    更改u-boot,

    /*add_sdhci(host, 52000000, 52000000 >> 9);*/
    add_sdhci(host, CONFIG_ZYNQ_SDHCI_WORK_FREQ, CONFIG_ZYNQ_SDHCI_WORK_FREQ >> 9);
    

    linux3.19 petalinux2015.2.1 内核正常启动

    Driver 'mmcblk' needs updating - please use bus_type methods
    sdhci: Secure Digital Host Controller Interface driver
    sdhci: Copyright(c) Pierre Ossman
    sdhci-pltfm: SDHCI platform and OF driver helper
    sdhci-arasan e0100000.sdhci: No vmmc regulator found
    sdhci-arasan e0100000.sdhci: No vqmmc regulator found
    mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
    ...
    mmc0: new high speed MMC card at address 0001
    mmcblk0: mmc0:0001 DG4008 7.28 GiB 
    mmcblk0boot0: mmc0:0001 DG4008 partition 1 4.00 MiB
    mmcblk0boot1: mmc0:0001 DG4008 partition 2 4.00 MiB
    mmcblk0rpmb: mmc0:0001 DG4008 partition 3 4.00 MiB
     mmcblk0: p1
    EXT4-fs (mmcblk0p1): warning: mounting fs with errors, running e2fsck is recommended
    EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
    VFS: Mounted root (ext4 filesystem) on device 179:1.
    

    petalinux2015.2.1 内核启动报错mmcblk0rpmb无法访问

    报错mmcblk0rpmb无法访问,原因待定位,

    mmc0: new high speed MMC card at address 0001
    mmcblk0: mmc0:0001 DG4008 7.28 GiB 
    mmcblk0boot0: mmc0:0001 DG4008 partition 1 4.00 MiB
    mmcblk0boot1: mmc0:0001 DG4008 partition 2 4.00 MiB
    mmcblk0rpmb: mmc0:0001 DG4008 partition 3 4.00 MiB
     mmcblk0: p1
    EXT4-fs (ram0): mounted filesystem with ordered data mode. Opts: (null)
    VFS: Mounted root (ext4 filesystem) on device 1:0.
    devtmpfs: mounted
    Freeing unused kernel memory: 224K (40686000 - 406be000)
    INIT: version 2.88 booting
    mount: mounting devtmpfs on /dev failed: Device or resource busy
    EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    blk_update_request: I/O error, dev mmcblk0rpmb, sector 0
    FAT-fs (mmcblk0rpmb): unable to read boot sector
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    blk_update_request: I/O error, dev mmcblk0rpmb, sector 0
    FAT-fs (mmcblk0rpmb): unable to read boot sector
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900
    blk_update_request: I/O error, dev mmcblk0rpmb, sector 0
    FAT-fs (mmcblk0rpmb): unable to read boot sector
    mount: mounting /dev/mmcblk0rpmb on /run/media/mmcblk0rpmb failed: Invalid argument
    mount: mounting /dev/mmcblk0boot0 on /run/media/mmcblk0boot0 failed: Invalid argument
    mount: mounting /dev/mmcblk0boot1 on /run/media/mmcblk0boot1 failed: Invalid argument
    sh: /sys/block/mmcblk0/mmcblk0p1: unknown operand
    mount: mounting /dev/mmcblk0 on /run/media/mmcblk0 failed: Device or resource busy
    EXT4-fs (ram0): re-mounted. Opts: data=ordered
    

    用不到该分区,所以修改mdev的脚本,屏蔽这个分区,

    #!/bin/sh
    MDEV_AUTOMOUNT=y
    MDEV_AUTOMOUNT_ROOT=/run/media
    [ -f /etc/default/mdev ] && . /etc/default/mdev
    if [ "${MDEV_AUTOMOUNT}" = "n" ] ; then
    	exit 0
    fi
    
    case "$ACTION" in
    	add|"")
    		ACTION="add"
    		exit 0
    		# check if already mounted
    		if grep -q "^/dev/${MDEV} " /proc/mounts ; then
    			# Already mounted
    			exit 0
    		fi
    		DEVBASE=`expr substr $MDEV 1 3`
    		if [ "${DEVBASE}" == "mmc" ] ; then
    			DEVBASE=`expr substr $MDEV 1 7`
    			DEVLEN=`expr length "$MDEV"`
    			if [ $DEVLEN -gt 9 ]; then
    				exit 0
    			fi
    		fi
    		# check for "please don't mount it" file
    		if [ -f "/dev/nomount.${DEVBASE}" ] ; then
    			# blocked
    			exit 0
    		fi
    		# check for full-disk partition
    		if [ "${DEVBASE}" == "${MDEV}" ] ; then
    			if [ -d "/sys/block/${DEVBASE}/${DEVBASE}*1" ] ; then
    				# Partition detected, just quit
    				exit 0
    			fi
    			if [ -d "/sys/block/${DEVBASE}/${DEVBASE}p1" ] ; then
    				# Partition detected, just quit
    				exit 0
    			fi
    			if [ -d "/sys/block/${DEVBASE}/${DEVBASE}1" ] ; then
    				# Partition detected, just quit
    				exit 0
    			fi
    			if [ ! -f "/sys/block/${DEVBASE}/size" ] ; then
    				# No size at all
    				exit 0
    			fi
    			if [ `cat /sys/block/${DEVBASE}/size` == 0 ] ; then
    				# empty device, bail out
    				exit 0
    			fi
    		fi
    		# first allow fstab to determine the mountpoint
    		if ! mount /dev/$MDEV > /dev/null 2>&1
    		then
    			if [ ! -d ${MDEV_AUTOMOUNT_ROOT} ]; then
    				mkdir ${MDEV_AUTOMOUNT_ROOT}
    			fi
    			MOUNTPOINT="${MDEV_AUTOMOUNT_ROOT}/$MDEV"
    			mkdir "$MOUNTPOINT"
    			mount -t auto /dev/$MDEV "$MOUNTPOINT"
    		fi
    		;;
    	remove)
    		MOUNTPOINT=`grep "^/dev/$MDEV\s" /proc/mounts | cut -d' ' -f 2`
    		if [ ! -z "$MOUNTPOINT" ]
    		then
    			umount "$MOUNTPOINT"
    			rmdir "$MOUNTPOINT"
    		else
    			umount /dev/$MDEV
    		fi
    		;;
    	*)
    		# Unexpected keyword
    		exit 1
    		;;
    esac
    

    linux3.19 petalinux2015.2.1 内核启动报错

    原因定位为uboot MAPSZ配置错误。

    Driver 'mmcblk' needs updating - please use bus_type methods
    sdhci: Secure Digital Host Controller Interface driver
    sdhci: Copyright(c) Pierre Ossman
    sdhci-pltfm: SDHCI platform and OF driver helper
    sdhci-arasan e0100000.sdhci: No vmmc regulator found
    sdhci-arasan e0100000.sdhci: No vqmmc regulator found
    mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
    ...
    mmc0: new high speed MMC card at address 0001
    Unable to handle kernel NULL pointer dereference at virtual address 00000220
    pgd = 40004000
    [00000220] *pgd=00000000
    Internal error: Oops - BUG: 805 [#1] PREEMPT SMP ARM
    Modules linked in:
    CPU: 0 PID: 6 Comm: kworker/u4:0 Not tainted 3.19.0-1.0.0 #35
    Hardware name: Xilinx Zynq Platform
    Workqueue: kmmcd mmc_rescan
    task: 7f02f080 ti: 7f062000 task.ti: 7f062000
    PC is at mmc_blk_alloc_req+0x194/0x358
    LR is at try_to_wake_up+0x270/0x288
    pc : [<403aec68>]    lr : [<4003d570>]    psr: 60000113
    sp : 7f063dc0  ip : 7f763ad0  fp : 406fc67c
    r10: 7f2b3008  r9 : 7f26dc08  r8 : 00000000
    r7 : 00000000  r6 : 00000000  r5 : 7f2b3000  r4 : 7f26dc00
    r3 : 00000000  r2 : 404f5bf0  r1 : 60000113  r0 : 00000000
    Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
    Control: 18c5387d  Table: 0000404a  DAC: 00000015
    Process kworker/u4:0 (pid: 6, stack limit = 0x7f062238)
    Stack: (0x7f063dc0 to 0x7f064000)
    3dc0: 00000000 401d5cd0 00e90e80 00000000 000008f5 7f2b3008 4072c35c 4027aec4
    3de0: 00000001 00000001 7f2b3000 4072c338 00000000 403af864 00000000 00000000
    3e00: 00000001 7f0f6998 6ea4f538 40606009 6ea4f308 00000001 406fc324 4072c338
    3e20: 00000000 40107fa0 7f2b3008 7f2b3008 4072c35c 4027aec4 406fc67c 00000001
    3e40: 406fc324 4072c338 00000000 4027ad84 00000000 7f2b3008 4027aec4 7f2b3808
    3e60: 00000000 40279764 7f2ab970 7f0cd4b8 7f2b3008 406fc27c 7f2b303c 4027acb8
    3e80: 7f2b3008 406fc27c 7f2b3008 4027a428 7f2b3008 7f2b3010 00000000 40278cd8
    3ea0: 7f2b3008 40611891 00000000 7f2b3ad8 7f2b3000 7f2b3008 405d58aa 00061a80
    3ec0: 404f561c 00000000 7f02d860 403a5d94 405d58aa 405d58aa 4061193f 00000001
    3ee0: 7f2b3800 00000000 00000000 403a85e0 7f2b3800 40ff8080 00000000 7f2b3a2c
    3f00: 7f2b3800 403a562c 7f028880 7f2b3a2c 7f02d800 00000000 7f0a8d00 40032288
    3f20: 7f028880 7f2b3a2c 00000088 7f028880 7f02d800 7f028898 406c2100 7f02d814
    3f40: 7f02d994 4003273c 7f029680 00000000 7f028880 400325b4 00000000 00000000
    3f60: 00000000 40035fc8 c1572f63 00000000 0a30e91e 7f028880 00000000 00000000
    3f80: 7f063f80 7f063f80 00000000 00000000 7f063f90 7f063f90 7f063fac 7f029680
    3fa0: 40035ef0 00000000 00000000 4000dd40 00000000 00000000 00000000 00000000
    3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 e0068ce0 14278861
    [<403aec68>] (mmc_blk_alloc_req) from [<403af864>] (mmc_blk_probe+0x7c/0x2a0)
    [<403af864>] (mmc_blk_probe) from [<4027ad84>] (driver_probe_device+0x8c/0x1cc)
    [<4027ad84>] (driver_probe_device) from [<40279764>] (bus_for_each_drv+0x84/0x94)
    [<40279764>] (bus_for_each_drv) from [<4027acb8>] (device_attach+0x64/0x88)
    [<4027acb8>] (device_attach) from [<4027a428>] (bus_probe_device+0x28/0x80)
    [<4027a428>] (bus_probe_device) from [<40278cd8>] (device_add+0x3bc/0x4c8)
    [<40278cd8>] (device_add) from [<403a5d94>] (mmc_add_card+0x19c/0x20c)
    [<403a5d94>] (mmc_add_card) from [<403a85e0>] (mmc_attach_mmc+0xb0/0x128)
    [<403a85e0>] (mmc_attach_mmc) from [<403a562c>] (mmc_rescan+0x264/0x2b4)
    [<403a562c>] (mmc_rescan) from [<40032288>] (process_one_work+0x13c/0x21c)
    [<40032288>] (process_one_work) from [<4003273c>] (worker_thread+0x188/0x288)
    [<4003273c>] (worker_thread) from [<40035fc8>] (kthread+0xd8/0xec)
    [<40035fc8>] (kthread) from [<4000dd40>] (ret_from_fork+0x14/0x34)
    Code: e0060693 e5826004 e59f21b8 e5943004 (e5832220) 
    ---[ end trace 834c0d842203f8e0 ]---
    Unable to handle kernel paging request at virtual address ffffffec
    pgd = 40004000
    [ffffffec] *pgd=3ff7e821, *pte=00000000, *ppte=00000000
    Internal error: Oops - BUG: 17 [#2] PREEMPT SMP ARM
    Modules linked in:
    CPU: 0 PID: 6 Comm: kworker/u4:0 Tainted: G      D        3.19.0-1.0.0 #35
    Hardware name: Xilinx Zynq Platform
    task: 7f02f080 ti: 7f062000 task.ti: 7f062000
    PC is at kthread_data+0x4/0xc
    LR is at wq_worker_sleeping+0xc/0x9c
    pc : [<4003644c>]    lr : [<40032b08>]    psr: 00000193
    sp : 7f063af8  ip : 7f02f0c8  fp : 7f063b84
    r10: 406c8fc0  r9 : 00000000  r8 : 7f02f314
    r7 : 406be600  r6 : 7f062000  r5 : 7f02f080  r4 : 00000000
    r3 : 00000000  r2 : 7f75a600  r1 : 00000000  r0 : 7f02f080
    Flags: nzcv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
    Control: 18c5387d  Table: 0000404a  DAC: 00000015
    Process kworker/u4:0 (pid: 6, stack limit = 0x7f062238)
    Stack: (0x7f063af8 to 0x7f064000)
    3ae0:                                                       7f75a600 404a7ef4
    3b00: 0000001a 00000013 00000004 00000008 7f02f0f0 7f063b00 7f030040 7f030544
    3b20: 7f02f290 7f02f080 00000001 4003458c 7f75abc0 40058450 7f02f080 406bd248
    3b40: 00000000 7f030040 7f030544 40021c2c 00000005 00000000 00000000 00000001
    3b60: 7f062000 7f02f080 7f06396c 7f02a9c0 7f063b98 00000001 7f02f290 403aec68
    3b80: 7f063be3 400223f0 7f063be3 4004ee90 405ce445 7f063bb4 7f063b98 7f063b98
    3ba0: 00000002 40704684 0000000b 403aec6a 00000000 7f063c12 406cc99c 403aec68
    3bc0: 7f063be3 40011004 7f062238 0000000b 00000000 00000008 60000113 00000000
    3be0: 65000000 30363030 20333936 32383565 34303036 39356520 62313266 35652038
    3c00: 30333439 28203430 33383565 30323232 40002029 7f063c34 00000000 00000220
    3c20: 00000805 7f063d78 00000000 7f02f080 00000000 00000805 406fc67c 404a55b4
    3c40: 7f063d78 40019970 04208060 ffff8b49 00000000 406c2100 406c2080 00000009
    3c60: 7f063d88 00000000 00000000 406bdab4 00000012 7f002400 00000010 404c8fbc
    3c80: 7f063d88 40023a3c 7f112b00 7f112b00 00000000 00000000 ffffffff 406cfa80
    3ca0: 7f063cfc 4003ba14 401dbdb0 00000113 00000000 00000805 406cd7cc 00000220
    3cc0: 7f063d78 00000000 7f26dc08 7f2b3008 406fc67c 4000847c 00000000 7f02f080
    3ce0: 406be600 40040fb8 7f763600 00000000 00000000 7f763600 7f763600 7f112ef4
    3d00: 406be600 00000000 00000001 7f763600 7f063d24 4003a210 00000d13 7f112b00
    3d20: 7f063d4c 4003a270 00000d13 7f112b00 7f763600 7f112ef4 406be600 00000000
    3d40: 00000001 406c8fc0 7f063d7c 4003d3b0 00000000 60000113 7f063d58 7f26dc08
    3d60: 00000000 403aec68 60000113 ffffffff 7f063dac 40011698 00000000 60000113
    3d80: 404f5bf0 00000000 7f26dc00 7f2b3000 00000000 00000000 00000000 7f26dc08
    3da0: 7f2b3008 406fc67c 7f763ad0 7f063dc0 4003d570 403aec68 60000113 ffffffff
    3dc0: 00000000 401d5cd0 00e90e80 00000000 000008f5 7f2b3008 4072c35c 4027aec4
    3de0: 00000001 00000001 7f2b3000 4072c338 00000000 403af864 00000000 00000000
    3e00: 00000001 7f0f6998 6ea4f538 40606009 6ea4f308 00000001 406fc324 4072c338
    3e20: 00000000 40107fa0 7f2b3008 7f2b3008 4072c35c 4027aec4 406fc67c 00000001
    3e40: 406fc324 4072c338 00000000 4027ad84 00000000 7f2b3008 4027aec4 7f2b3808
    3e60: 00000000 40279764 7f2ab970 7f0cd4b8 7f2b3008 406fc27c 7f2b303c 4027acb8
    3e80: 7f2b3008 406fc27c 7f2b3008 4027a428 7f2b3008 7f2b3010 00000000 40278cd8
    3ea0: 7f2b3008 40611891 00000000 7f2b3ad8 7f2b3000 7f2b3008 405d58aa 00061a80
    3ec0: 404f561c 00000000 7f02d860 403a5d94 405d58aa 405d58aa 4061193f 00000001
    3ee0: 7f2b3800 00000000 00000000 403a85e0 7f2b3800 40ff8080 00000000 7f2b3a2c
    3f00: 7f2b3800 403a562c 7f028880 7f2b3a2c 7f02d800 00000000 7f0a8d00 40032288
    3f20: 7f028880 7f2b3a2c 00000088 7f028880 7f02d800 7f028898 406c2100 7f02d814
    3f40: 7f02d994 4003273c 7f029680 00000000 7f028880 400325b4 00000000 00000000
    3f60: 00000000 40035fc8 c1572f63 00000000 0a30e91e 7f028880 00000000 00000000
    3f80: 7f063f80 7f063f80 00000001 00010001 7f063f90 7f063f90 7f063fac 7f029680
    3fa0: 40035ef0 00000000 00000000 4000dd40 00000000 00000000 00000000 00000000
    3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 e0068ce0 14278861
    [<4003644c>] (kthread_data) from [<40032b08>] (wq_worker_sleeping+0xc/0x9c)
    [<40032b08>] (wq_worker_sleeping) from [<404a7ef4>] (__schedule+0xf4/0x448)
    [<404a7ef4>] (__schedule) from [<400223f0>] (do_exit+0x79c/0x7cc)
    [<400223f0>] (do_exit) from [<40011004>] (die+0x2ac/0x3a4)
    [<40011004>] (die) from [<404a55b4>] (__do_kernel_fault.part.11+0x54/0x74)
    [<404a55b4>] (__do_kernel_fault.part.11) from [<40019970>] (do_page_fault+0x320/0x370)
    [<40019970>] (do_page_fault) from [<4000847c>] (do_DataAbort+0x34/0x98)
    [<4000847c>] (do_DataAbort) from [<40011698>] (__dabt_svc+0x38/0x60)
    Exception stack(0x7f063d78 to 0x7f063dc0)
    3d60:                                                       00000000 60000113
    3d80: 404f5bf0 00000000 7f26dc00 7f2b3000 00000000 00000000 00000000 7f26dc08
    3da0: 7f2b3008 406fc67c 7f763ad0 7f063dc0 4003d570 403aec68 60000113 ffffffff
    [<40011698>] (__dabt_svc) from [<403aec68>] (mmc_blk_alloc_req+0x194/0x358)
    [<403aec68>] (mmc_blk_alloc_req) from [<403af864>] (mmc_blk_probe+0x7c/0x2a0)
    [<403af864>] (mmc_blk_probe) from [<4027ad84>] (driver_probe_device+0x8c/0x1cc)
    [<4027ad84>] (driver_probe_device) from [<40279764>] (bus_for_each_drv+0x84/0x94)
    [<40279764>] (bus_for_each_drv) from [<4027acb8>] (device_attach+0x64/0x88)
    [<4027acb8>] (device_attach) from [<4027a428>] (bus_probe_device+0x28/0x80)
    [<4027a428>] (bus_probe_device) from [<40278cd8>] (device_add+0x3bc/0x4c8)
    [<40278cd8>] (device_add) from [<403a5d94>] (mmc_add_card+0x19c/0x20c)
    [<403a5d94>] (mmc_add_card) from [<403a85e0>] (mmc_attach_mmc+0xb0/0x128)
    [<403a85e0>] (mmc_attach_mmc) from [<403a562c>] (mmc_rescan+0x264/0x2b4)
    [<403a562c>] (mmc_rescan) from [<40032288>] (process_one_work+0x13c/0x21c)
    [<40032288>] (process_one_work) from [<4003273c>] (worker_thread+0x188/0x288)
    [<4003273c>] (worker_thread) from [<40035fc8>] (kthread+0xd8/0xec)
    [<40035fc8>] (kthread) from [<4000dd40>] (ret_from_fork+0x14/0x34)
    Code: e513001c e7e00150 e12fff1e e5903268 (e5130014) 
    ---[ end trace 834c0d842203f8e1 ]---
    Fixing recursive fault but reboot is needed!
    
    展开全文
  • ZYNQ开发入门

    2019-02-25 10:59:24
    本实验将指导大家使用Vivado 集成设计环境创建本书的第一个Zynq设计。这里,我们使用跑马灯这个入门实验来向大家介绍Vivado IDE的IP Integrator环境,并在Zedboard上实现这个简单的Zynq嵌入式系统。之后,我们将会...
  • Zynq-7000&ZynqMP;启动配置和启动文件,讲述了Zynq-7000&ZynqMP;的一些基本配置和简单应用方法。
  • 学了zynq一段时间,一上来的时候就被zynq的GPIO唬住了,实在没搞清楚zynq的GPIO怎么回事,一会这样,一会那样,才慢慢发现zynq至少有3种GPIO可以调用。难怪我觉得每篇介绍GPIO的博客说的有一些不一样呢。我们先看有...
  • Zynq初识

    2019-11-22 21:59:07
    本文内容学习自正点原子的Zynq教学视频:正点原子ZYNQ教学视频-B站 1.Zynq是什么? 我们先从SoC说起 SoC(System-on-Chip):片上系统 就是把原有的处理器(Processor),存储器(Memory),时钟(Clock),接口...

    本文内容学习自正点原子的Zynq教学视频正点原子ZYNQ教学视频-B站

    1.Zynq是什么?

    我们先从SoC说起

    SoC(System-on-Chip):片上系统 就是把原有的处理器(Processor),存储器(Memory),时钟(Clock),接口(Interface)等等资源从原来的焊接在一块PCB(Printed Circuit Board)板上的系统变成一块ASIC(Application Specific Integrated Circuit )专用集成电路也就是芯片。

    优点:体积更小。

    缺点:需要集成到的一块ASIC上,流片成本高且逻辑功能不能修改。

    SoPC(System-on-Programmable-Chip): 可编程片上系统   一般是基于FPGA,用FPGA实现各个功能模块实现片上系统。

    优点:相比基于ASIC的SoC更为灵活,可以随意修改。

    缺点:FPGA内部资源有限,实现SoC时资源会很限制,并且搭建的处理器速度不会很快。比如:FPGA内部的PLL和Memory资源都是非常有限的。

    APSoC(ALL-Programmable-SoC): 全可编程片上系统   全可编程意味着软件可编程(基于ARM的处理器),硬件也可编程(基于FPGA)。说白了就是把FPGA和一块基于ARM的处理器搞到一块芯片上去,这点其实也很好想到。当时我们做电赛练习时就非常想让单片机和FPGA结合起来用,这样既可以利用FPGA并行运算的速度也可以利用单片机做控制和一些其他功能的灵活性。

    优点:具有一个真正的硬核处理器ARM,性能好,可以直接运行一个Linux系统。FPGA做并行处理和定制功能,ARM进行控制和操控。

    所以

    Zynq-7000系列就是Xilinx公司推出的一款基于双ARM Cortex-A9处理器和自己家FPGA的APSoC。

     

    2.Zynq的架构

    Zynq实际上就3个部分

    1.PS(Processing System):处理系统   核心是ARM Cortex-A9处理器,但不仅仅只有处理器而已。PS才是Zynq的核心

    2.PL(Programmable Logic): 可编程逻辑  显而易见这部分就是一块FPGA。

    3.AXI(Advanced eXtensible Interface)高级可扩展接口:一种高性能、高带宽、低延迟的片内总线协议。用于PL和PS部分的通信。它是ARM公司AMBA(Advanced Microcontroller Bus Architecture)协议的一部分。

    因为PL部分没啥可介绍的,它就是一块儿FPGA所以主要介绍PS和AXI总线。

    PS(Processing System)

    这种图让我一眼看过去真是一脸懵逼,我的理解简单来说就是两块ARM Cortex-A9 CPU 作为核心再弄一些总线、时钟什么乱七八糟的。

    红线圈出的部分就是PS的核心部分APU(Application Processor Unit) 。

    重点是这张图的下方是PS与PL的连接部分。下面从APU开始一点点稍微了解一下PS里面都有什么


    //随便写写反正我觉得了不了解这些应该对于工程实践无关痛痒,但是害怕后面开发的时候遇到什么问题,还是稍微了解一下


    APU(Application Processor Unit)

    FPU(Float Point Unit)浮点运算单元:专用于浮点运算的处理器。

    NENO engine:单指令多数据处理  比如:视频图像处理,可以将很多像素点同时并行处理。并行数据处理加速。

    MMU(Memory Management Unit) 内存管理单元:物理地址到虚拟地址的映射。

    Cache 高速缓冲存储器:CPU和RAM之间的缓冲存储器。1级Cache   I-Cache指令,D-Cache数据。2级Cache两个CPU通用

    OCM(On Chip Memory)  片上存储器:实际上是块儿SRAM。

    SCU(Snoop Controller)一致性控制单元:实现CPU到2级Cache和OCM的访问控制。

    DMA(Direct Memory Access) 直接内存存取:直接将存储器中的数据互相传递而不需要经过CPU

    GIC(Generic Interrupt Controller)通用中断控制器

    APU之外

    Central Interconnect:用于连接各个模块,做通信的管理

    I/O Peripherals:连接到MIO(Multiplex IO)使SOC与外界通信,可以配置MIO的接口接到不同的I/O Peripherals的接口上去


    与PL连接但不属于AXI的接口

    EMIO(Extend MIO):如果PS的54个MIO不够用了,就可以使用EMIO。EMIO是连接到PL部分的,可以通过PL再与外设相连,也可以直接连接PL内部自己写的模块。

    X-ADC:PS连接PL里面的硬核ADC接口。

    DMA sync:PL和PS实现DMA传输的接口。

    IRQ(Interrupt ReQuest)中断请求:PL向PS终端请求的接口,连接到PS的GIC。

    Config ASE/SHA:PS配置PL的接口,因为PS才是核心,Zynq也是PS先启动再启动的PL。

    AXI(Advanced eXtensible Interface)

    GP(General Purpose Interfaces):PS和PL的通用接口。M(Master)代表PS为通信主机(通信发起人),S(Slave)代表PS为通信从机。

    ACP Interface:PL连接到SCU部分。PL到PS的2级Cache和OCM的低延时访问。实现使PL类似CUP到Cache的访问。PL为通信主机。

    HP (High Performance Interface):高性能接口,高速大量数据传输。它上面的蓝色方块是一些FIFO(First In First Out)用作数据缓冲。

    这里也是PL为通信主机。实际上是PL直接访问PS部分的Memory。

     

     

     

     

    展开全文
  • ZynqCan调试

    2019-01-22 09:26:47
    适用于zynq7020的can调试,将库移植和软件移植可以测试can是否正常
  • ZYNQ系列

    2019-10-01 08:24:00
    赛灵思公司(Xilinx)推出的行业第一个可扩展处理平台Zynq系列。旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。 中文名ZYNQ系列开发商赛灵思公司用途嵌入式应用...
  • zynq7000 cdma

    2018-11-28 13:17:36
    zynq平台CDMA示例, 主要是关于OCM的操作, * helloworld.c: simple test application
  • ZYNQ开发教程

    2019-01-26 13:52:23
    本文档主要描述zynq芯片在vivado中的开发的一些案例,详细的描述了这些案例的开发流程,适合初学者观看学习
  • Xilinx zynq zynqmp GPIO

    千次阅读 2018-10-29 20:36:02
    zynq GPIO从906开始,这和内核中的宏定义相关, GPIO不工作 vivado勾选MIO EMIO,重新生成FSBL,不需要改设备树,驱动代码表明,设备树的改动,驱动并没有去读取那些字段,GPIO无法工作,是因为更换了hdf没有更新...
  • zynq芯片资料

    2018-07-18 11:16:19
    zynq-7000-的芯片资料,主要是说了该开发板的基本结构,以及FPGA

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,809
精华内容 3,523
热门标签
关键字:

zynq