目录

1. 认识FPGA

什么是FPGA

FPGA的编程过程

 2. 认识ARM

什么是ARM

ARM与FPGA的区别

ARM与Linux

3. 认识ZYNQ

ZYNQ与FPGA的区别

ZYNQ的"ARM"和"FPGA"

关于PL

关于PS

4. 学习用板载资源

5. 总结


1. 认识FPGA

  • 什么是FPGA

        FPGA是一种集成电路,它可以在制造后由客户或设计者根据需要配置电路功能 。FPGA的内部由可编程逻辑、专用功能块和可编程互连组成。FPGA的结构可以根据不同的厂商和型号有所差异,但一般包括以下几种主要元素:

  • 可配置逻辑块(CLB):是FPGA的基本单元,可以实现任意的逻辑功能。每个CLB由一些查找表(LUT)、触发器、多路复用器等组成;
  • 数字信号处理(DSP)块:是FPGA的专用功能块之一,可以高效地实现数字信号处理的功能,如滤波、乘法、累加等;
  • 收发器(Transceiver):是FPGA的专用功能块之一,可以实现高速的串行数据的发送和接收,支持多种协议和标准;
  • 块随机存取存储器(BRAM):是FPGA的专用功能块之一,可以提供片上的存储空间,支持多种访问模式和配置方式;
  • 可编程互连:是FPGA的重要组成部分,可以实现不同的CLB和功能块之间的连接和通信,支持多种拓扑结构和路由算法;

FPGA的应用领域非常广泛,主要包括以下几类:

  • 通信和网络:FPGA可以实现高速的数据传输和处理功能,支持多种通信协议和标准,如5GWiFiEthernet等;
  • 数据中心和云计算:FPGA可以实现高效的数据加密和压缩功能,支持多种云服务和平台,如AWSAzure等;
  • 人工智能和机器学习:FPGA可以实现高性能的神经网络和深度学习功能,支持多种模型和算法,如CNNRNN等;
  • 嵌入式系统和物联网:FPGA可以实现低功耗的智能控制和传感功能,支持多种嵌入式操作系统和物联网协议,如LinuxMQTT等;
  • 数字信号处理和图像处理:FPGA可以实现高精度的信号采集和分析功能,支持多种信号处理和图像处理算法,如FFTDCTOpenCV等;
  • 工业控制和汽车电子:FPGA可以实现高可靠的工业控制和汽车电子功能,支持多种工业总线和汽车标准,如CANFlexRay等;

        学习FPGA可以提高自己的硬件设计能力和创新能力,可以实现自己的想法和算法,可以解决实际的问题和挑战,可以参与到前沿的技术和项目中; 

  • FPGA的编程过程

        FPGA编程通过使用硬件描述语言(HDL)或其他工具来定义和配置FPGA上的逻辑电路。FPGA编程的主要步骤包括:

  • 硬件架构设计:确定FPGA的输入输出接口,时钟频率,资源利用率等;
  • 设计:使用HDL(如VHDLVerilog)或其他工具(如MATLABSimulink)来描述硬件逻辑,实现算法功能;
  • 验证:使用仿真或测试平台来检查设计是否符合预期,是否存在错误或缺陷;
  • 综合:将HDL代码转换为适合FPGA的逻辑门电路,优化性能和资源消耗;
  • 集成:将设计与FPGA的固有资源(如引脚,时钟,ADC等)以及外部设备(如内存,传感器等)进行连接和配置;
  • 实现:将综合后的逻辑门电路映射到FPGA的物理资源上,并进行布局和布线,生成可以下载到FPGA的比特流文件;
  • 实验测试和调试:将比特流文件下载到FPGA上,并使用真实或测试输入来运行和观察结果,发现并解决问题;

 2. 认识ARM

  • 什么是ARM

        ARMAcorn RISC Machine)是一家英国的半导体公司,它设计和授权处理器IP,提供了多种性能、功耗和成本需求的处理器。ARM的处理器包括:                   

  • Cortex-A系列:面向性能密集型系统的应用处理器内核;
  • Cortex-R系列:面向实时应用的高性能内核;
  • Cortex-M系列:面向各类嵌入式应用的微控制器内核;
  • Neoverse:满足大型互联网HPC高性能计算应用需求的高性能内核;
  • Ethos:专门用于加速人工智能机器学习的神经处理器内核;
  • SecurCore:基于Cortex-M3核的高安全性微控制器内核;

        ARM的处理器广泛应用于智能手机、平板电脑、物联网设备、云计算、汽车电子、嵌入式系统等领域;

  • ARM与FPGA的区别

        ARM与FPGA的区别主要有以下几点:

  • ARM的功能主要是执行软件指令,实现数据处理、事务管理、界面显示、应用程序等功能,它可以运行多种操作系统和开发环境,也可以调用多种现成的硬件资源;
  • FPGA的功能主要是实现硬件逻辑,实现数据加速、并行处理、信号处理、图像处理等功能,它可以根据不同的需求和设计来配置电路功能,也可以通过添加软核或硬核来实现处理器功能;
  • ARM和FPGA的功能可以相互补充,也可以相互竞争,取决于具体的应用场景和性能要求。一般来说,ARM更适合控制类的应用,而FPGA更适合计算类的应用;
  • ARM与Linux

        Linux是一种开源的操作系统,可以根据不同的需求和环境来定制和优化,具有灵活性高、兼容性强、稳定性好等特点,适用于多种应用场景,如嵌入式系统、物联网设备、数据中心等。在ARM上运行Linux可以充分利用ARM的处理能力和节能特性,可以提高系统的性能和效率,可以降低系统的成本和功耗,可以增加系统的功能和可扩展性;

        在ARM上运行的Linux系统有很多种,例如:

  • Arch Linux ARM:基于Arch Linux的分支,提供了一个轻量级、灵活、可定制的Linux系统,支持多种ARM设备;
  • Debian ARM:基于Debian的分支,提供了一个稳定、成熟、兼容的Linux系统,支持多种ARM设备;
  • Armbian:基于Debian或Ubuntu的分支,专门为ARM开发板定制的Linux系统,提供了优化的性能和稳定性;
  • Linux Mint Debian Edition (LMDE):基于Debian Testing的分支,提供了一个友好、美观、功能丰富的Linux系统,支持多种ARM设备;
  • Manjaro ARM:基于Manjaro的分支,提供了一个快速、现代、易用的Linux系统,支持多种ARM设备;
  • Ubuntu Server ARM:基于Ubuntu Server的分支,提供了一个适用于云计算和边缘计算的Linux系统,支持多种ARM服务器设备;

3. 认识ZYNQ

  • ZYNQ与FPGA的区别

        ZYNQzynq-7000 All Programmable SoC)是Xilinx推出的新一代全新可编程片上系统,在传统FPGA芯片的基础上集成了1-2个ARM处理器,同时具备了软件可编程和硬件可编程的特性,将ARM的控制能力和FPGA的计算性能完美结合,提供无与伦比的系统性能、灵活性和可扩展性;

        ZYNQ与FPGA的区别主要有以下几点:

  • ZYNQ相比FPGA,具有更强的处理能力和灵活性,可以利用ARM处理器实现复杂的软件功能和控制逻辑,也可以利用可编程逻辑实现硬件加速和算法优化;
  • FPGA相比ZYNQ,具有更高的自由度和定制性,可以根据不同的需求和设计来配置电路功能,也可以通过添加软核或硬核来实现处理器功能;

        除此之外,ZYNQ内部ARM部分和FPGA部分的完美结合,是普通FPGA无法做到的;

  • ZYNQ的"ARM"和"FPGA"

        ZYNQ具备ARM Cortex-A9内核和28nm Artix 7 FPGA结构,在ZYNQ片内被称为PS和PL:

  • PSProcessing System)是指处理系统,它包括双核ARM Cortex-A9处理器和一系列的片上外设,如内存控制器、DMA控制器、USB控制器、以太网控制器等;
  • PLProgrammable Logic)是指可编程逻辑,它包括基于Artix-7或Kintex-7的可编程逻辑单元,如可配置逻辑块、DSP块、BRAM块等;
  • ZYNQ的PS和PL之间通过多种AXI接口进行连接和通信,可以实现软硬件协同设计,提高系统的性能和灵活性;

        PL和PS虽是ZYNQ片内的两个主要部分,但二者既可以协同工作,又可以独立工作;

  • 关于PL

        了解PL首先要了解什么是PLD,早期生产的数字集成电路逻辑功能都是固定不变的。要想改变它的逻辑功能,就必须改变内部各单元电路之间的连接,而这种连接在集成电路制作过程中已经固定下来了。

        为了提高灵活性,出现了允许用户自行修改内部连接的集成电路:可编程逻辑器件PLD(Programmable Logic Device)

  • PLD内部的电路结构可以通过写入编程数据来设置;
  • 写入PLD的编程数据还可以擦除重写;

        FPGA是一种PLD,除FPGA(现场可编程门阵列)外,CPLD(复杂可编程逻辑器件)也属于PLD,二者的本质区别是:

  • CPLD:基于“乘积项”的与或逻辑阵列;
  • FPGA:基于“查找表”(LUT,Look UP Table)的CLB阵列;

        PL与FPGA的结构相同

图1 FPGA架构

        FPGA的架构是指FPGA内部的组成和连接方式,它决定了FPGA的功能和性能。根据图1,FPGA的基本架构包括以下几个部分:

  • 可编程IO单元(I/O):这些物理端口将数据输入和输出FPGA,可以根据不同的信号标准和电压水平进行配置;
  • 可编程逻辑单元(LC):这些是执行逻辑运算的基本单元,通常由查找表(LUT)、触发器(FF)和多路复用器等组成。LUT可以存储任意的逻辑函数,FF可以存储LUT的结果。不同的FPGA有不同数量和类型的输入的LUT,如输入LUT、输入LUT等;
  • 布线资源:这些是将各种元件彼此连接的导线和开关,可以实现不同的信号路径。布线资源的数量和质量影响了FPGA的逻辑密度和时序性能。
  • 嵌入式块式 RAM(BRAM):这些是用于存储数据的内存模块,可以配置为不同的位宽和深度,也可以级联成更大的内存空间。BRAM可以提供高速、低功耗、低延迟的数据访问。
  • 数字时钟管理模块(CMT):这些是用于产生、分配和调整时钟信号的模块,包括相位锁定环(PLL)、延迟锁定环(DLL)、时钟缓冲器等。CMT可以提供多种频率和相位的时钟信号,实现时钟域之间的转换和同步。
  • 内嵌专用硬核:这些是用于实现特定功能的硬件模块,如乘法器、累加器、DSP切片、PCI Express接口等。内嵌专用硬核可以提高FPGA的计算能力和接口兼容性,降低逻辑资源和功耗的消耗。
  • 底层内嵌功能单元:这些是用于实现一些底层功能的单元,如配置逻辑、JTAG接口、电源管理等。底层内嵌功能单元可以保证FPGA的正常工作和可靠性。

        ZYNQ系列的PL结构如图2所示,可以与FPGA的结构进行对照;

 图2 ZYNQ的PL结构

        ZYNQ7010和7020都使用了Artix-7的结构,可以看到,除了基本的结构,ZYNQ系列的PL还具备了如GTX transceiver和PCIE等独特结构,但ZYNQ7010和7020不包含这些结构;

  • 关于PS

PL与PS在片内的结构如图3所示,可以看到两个结构基本是分开的

 图3 PL和PS的片内结构

PS最重要的部分是图3中的应用处理单元APU(Application Processing Unit),如图4所示

 图4 APU结构

        可以看到,APU内部不仅有Cortex-A9内核,还包含了FPU浮点运算单元,NEON SIMD (Single Instruction Multiple Data 单指令多重数据) 指令集,MMU存储管理单元,一级cache(I代表指令cache,D代表数据cache),窥探控制单元SCU(Snoop Controller),私有看门狗AWDT,定时器TIMER,二级cache(双核公用),片上内存OCM,中断控制器GIC,直接存储器访问DMA等;

        PS内部APU外部,结合图片分析,就可以理解APU与外部的连接方式,比较重要的是Central interconnect模块,负责控制APU与各模块之间的连接,除控制通信接口,还包含了对动态存储器访问(DDR3)和静态存储器(QSPI Flash)访问;

        PS连接外部,结合图片分析,PS与PL的连接,GP接口(General-Purpose Port),HP接口(High-Performance Ports)和ACP(Accelerator Coherency Port)都属于AXI片内通信协议,图5描述了GP接口和ACP的结构

图5 GP接口的结构 

        由图5看出,ACP用于访问SCU实现PL和PS二级cache与SRAM的高速存取,GP接口用于通用的PL和PS通信,并且区分M(Master)和S(Slave)通信机制,HP接口用于高速通信,并且通信自带FIFO,连接在存储仲裁器(memory interconnect),可用于访问DDR3,适合大量数据流传输;

接口名称 接口描述 主设备 从设备
M_AXI_GP0 通用接口(AXI_GP) PS PL
M_AXI_GP1 PS PL
S_AXI_GP1 通用接口(AXI_GP) PL PS
S_AXI_GP1 PL PS
M_AXI_ACP ACP 缓存(cache)一致性传输 PL PS
M_AXI_HP1 带有读写FIFO的高速接口(需要注意HP有时被称为AXI FIFO interface[AXI FIFO接口],或者AFIs) PL PS
M_AXI_HP1 PL PS
S_AXI_HP1 PL PS
S_AXI_HP1 PL PS

        AXI是高级微控制器总线架构(AMBA3.0/4.0)的一部分,全称高级扩展接口(Advanced Extensible Interface),ZYNQ使用的是AMBA4.0标准中的AXI-4,分为memory map,stream和lite三种,如图6所示;

图6  AMBA与AXI 

        除了AXI接口之外,还包含了IO拓展EMIO,XADC(来自PL硬核),DMA,IRQ,AEX/SHA配置(此配置用于PS配置PL的启动,代表了PS和PL不是完全独立的,ZYNQ整个设计是以ARM处理器为中心的,PS端的ARM内核可以独立于PL端运行,值得注意的是,虽然PL端也可以独立于PS端运行,但是PL的配置是由PS端完成的,所以不能采用传统的固化FLASH的方式固化PL端程序)等连接;


4. 学习用板载资源

  1. 主芯片 ZYNQxc7z010  677M(-1) 28k Programmable Logic Cells
  2. 512MB DDR3   (4Gbit)
  3. TF卡槽(可负责TF启动)
  4. 128Mbit(16MB)QSPI FLASH(可负责启动)
  5. 一路EEPROM 2KB (PS)
  6. 两路 LED 灯(PL)
  7. 两个按键   (PL) +一个控制系统POR复位的按键
  8. 一路UART(PS)
  9. 一路板载XILINX 下载器 JTAG
  10. 一路USB   可作USB SLAVE 或USB HOST
  11. 引出 68路GPIO 
  12. 千兆以太网(PL)
  13. HDMI 输出接口 支持1080P 60hz
  14. 1.47寸 彩色LCD 显示屏  172X320 (PL)
  15. 50M有源晶振(PL)

5. 总结

        笔记对应课程:

        图片来自正点原子课程PPT,笔记中有自己理解的内容,如有错误,欢迎指正

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐