版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章芯片基础FPGA设计与应用案例教程.2026本章概要本章简要介绍了可编程逻辑器件的发展过程,以GAL的典型结构说明可编程逻辑器件从实现组合逻辑到实现时序逻辑在电路上的改变,并对FPGA的可编程特性加以解释,以Altera和Xilinx芯片为代表对FPGA芯片结构进行说明,为后续的FPGA开发设计做准备。FPGA发展历史01Part1FPGA发展历史1.1FPGA的诞生数字逻辑是使用离散的数字信号来表示和处理信息的一种方式。数字逻辑电路的发展始于二十世纪三十到四十年代。乔治布尔的布尔代数和克劳德香农的开关电路理论为数字逻辑电路的发展奠定了重要的理论基础。二极管和三极管的发明为数字逻辑电路的实现提供了硬件可能。到了二十世纪五六十年代,随着集成电路技术的发展,数字逻辑电路得以进一步微型化。在计算机硬件、通信设备和工业控制系统等领域得到了广泛应用。1FPGA发展历史1.1FPGA的诞生随着数字逻辑器件在各个行业中的广泛应用,市场对这类器件的功能多样性和结构复杂性的需求日益增长。除了标准化的通用电路外,各种定制化、具有特殊功能的数字芯片需求也日益显现。然而,传统的ASIC(Application-SpecificIntegratedCircuit,专用集成电路)设计流程由于其较长的开发周期和高昂的成本,往往难以快速响应市场变化和满足特定应用需求。在这种背景下,PLD(ProgrammableLogicDevice,可编程逻辑器件)凭借其独特的优势,成为了解决这一难题的理想选择。与ASIC不同,PLD有现成的芯片“半成品”,它可以在设计完成后直接进行编程。又因为不需要昂贵的制造和测试过程,PLD的开发成本也较低。这使得PLD成为一种灵活且高效的解决方案,适用于需要频繁修改或定制逻辑功能的应用场景。1FPGA发展历史1.1FPGA的诞生可编程逻辑器件的发展经历了PROM(ProgrammableRead-OnlyMemory,可编程只读存储器)PLA(ProgrammableLogicArray,可编程逻辑阵列)PAL(ProgrammableArrayLogic,可编程阵列逻辑)GAL(GeneralProgrammableArrayLogic,通用可编程阵列逻辑)CPLD(ComplexProgrammableLogicDevice,复杂PLD)FPGA(Field-ProgrammableGateArray,现场可编程门阵列)1FPGA发展历史1.1FPGA的诞生在发展初期,PLD在功能实现和灵活性方面存在一定的局限性,主要体现在逻辑门资源有限和一次性编程特性的限制。早期PLD电路包括PROM、PLA和PAL均由与阵列和或阵列构成,借助“积之和”的形式实现各种组合逻辑,它们之间的差异仅仅体现在是采用可编程与阵列还是可编程或阵列来实现相应的逻辑功能。1FPGA发展历史1.1FPGA的诞生为了更好地设计数字逻辑,GAL在电路上做了改进,增加了OLMC(OutputLogicMacroCell,输出逻辑宏单元)结构,在编程工艺上也使用了电可擦写,从而使器件具备可重复编程特性。以GAL16V8为例。1FPGA发展历史1.1FPGA的诞生GAL16V8有8个OLMC,可以通过内部结构实现多种逻辑功能和不同的输出电路结构,体现了PLD器件的通用性。OLMC内部结构如图1-2所示,每个OLMC的结构相同,包含四个多路选择器、一个D触发器和一些门电路,提供以下作用:提供时序电路需要的寄存器或触发器提供多种形式的输入/输出方式提供内部信号反馈,控制输出逻辑极性分配控制信号,如寄存器的时钟和复位信号,三态门的输出使能信号1FPGA发展历史1.1FPGA的诞生根据多路选择器的选择不同,OLMC可变化为四种不同的工作模式,使电路逻辑设计更为灵活。尤其是使用到D触发器的寄存器输出模式,打破了以往PLD只能进行组合逻辑运算的局限,也为后来发展为CPLD、FPGA等更复杂的可编程逻辑器件奠定了基础。1FPGA发展历史1.1FPGA的诞生GAL的逻辑门和触发器数量较少,可以用于时序逻辑设计,但是灵活性不足,主要适用于一些简单的逻辑控制和小规模的数字电路设计。对于复杂的通信协议处理、高速数据采集与处理等系统,GAL无法满足需求。之后FPGA应运而生。采用门阵列形式的FPGA具有更复杂的结构,包括大量的查找表(LUT)、触发器、I/O块以及丰富的互联资源,这些特性使得FPGA能够实现高度复杂的逻辑功能,能高速地处理数据。1FPGA发展历史1.2FPGA的发展在20世纪80年代,随着数字电路和集成电路技术的飞速发展,工程师们逐渐意识到传统的功能固化的集成电路难以满足不断变化的设计需求。在这种背景下,Xilinx公司于1985年推出了世界上第一款商用FPGA——XC2064。1FPGA发展历史1.2FPGA的发展紧随其后,Altera公司于1992年推出了其第一款FPGA——FLEX®8000。几年后Altera又分别推出了带有集成锁相环(PLL)和嵌入式模块RAM的芯片——FLEX10k。Lattice半导体公司在1989年推出了pLSI/ispLSI系列产品。1FPGA发展历史1.2FPGA的发展随着工艺技术的不断进步,FPGA的集成度和性能得到了显著提升。逻辑资源从最初的数千门发展到数百万门甚至更高,工作频率也从几十MHz提高到了GHz级别。由于FPGA结构变得越来越复杂,针对FPGA进行优化设计的自动综合、布局和布线的EDA工具出现成为必然,使用这些工具进行FPGA设计,逐渐成为FPGA开发的主流方法。各大FPGA厂商纷纷开发了配套的开发环境,如Xilinx公司的ISE和Vivado、Altera公司的QuartusII系列等,这些工具提供了从代码编写、仿真到板级调试的全流程支持,极大提高了设计效率和准确性。1FPGA发展历史1.2FPGA的发展最初的FPGA主要用于简单的数字逻辑设计,但随着技术的不断进步,FPGA的功能越来越强大。现代FPGA不仅支持复杂的数字逻辑设计,在引入了嵌入式处理器(如ARMCortex)、高速收发器(SERDES)等硬核IP之后,还能处理高速数据传输和信号处理任务,如高速串行通信、处理音视频和图像等。1FPGA发展历史1.2FPGA的发展大约2017年开始,FPGA进入了新纪元,其核心聚焦于数据加速领域,这要归因于大数据、人工智能等技术的蓬勃发展,对数据处理的效率提出了严格要求。FPGA凭借其可重构特性与并行计算能力,能根据特定的数据任务进行灵活配置,优化算法执行流程,实现高效的数据处理加速。现在的FPGA已经成为计算引擎,在微软Azure和亚马逊WebServices等应用的数据中心得到了大批量的部署。1FPGA发展历史1.2FPGA的发展随着技术的发展,FPGA的市场格局也经历了巨大变革。2015年12月英特尔(Intel)斥资167亿美元收购了Altera公司,计划将FPGA集成到CPU芯片中,结合FPGA配置灵活且实时性强的优势,更好地打造高性能处理器。2022年AMD正式官宣完成了对Xilinx公司的收购,将主处理器和协处理器进行更好的协作,借助Xilinx在自适应高性能运算方面的软硬件综合实力,使AMD在云计算、边缘计算和智能设备市场更具竞争力。1FPGA发展历史1.3什么是FPGAFPGA,全称是现场可编程门阵列(Field-ProgrammableGateArray),是一种可以通过编程来进行现场配置的半导体设备,具有集成度高、编程灵活、适配性强的特点。图1-4为2019年4月Intel公司推出的最新一代10纳米FPGA。理解FPGA,可以从现场可编程和门阵列结构两方面着手。1FPGA发展历史1.3什么是FPGAFPGA是一种超大规模集成电路,逻辑资源动辄以百万计,例如Xilinx的ZynqUltraScale+MPSoC系列可以提供高达500万个逻辑单元。这些逻辑单元就像室一个个“小积木”,通过对逻辑单元的配置和连接,就能够替代大量逻辑门和存储配件组合的功能,实现用户所需的数字电路设计。2019年,英特尔发布全球最大容量的Stratix10GX10MFPGA,它拥有1020万个逻辑单元,集成了433亿个晶体管。1FPGA发展历史1.3什么是FPGAFPGA是一种现场可编程器件。现场可编程特性是芯片的功能逻辑可以通过编程来改变或配置。用户可以在不更改芯片外部连接的情况下,通过编程来调整电路的参数、功能或行为。可以编程的器件有很多种类,大多都是在软件层面进行更新或升级,其硬件从出厂开始已经完成电路结构的固化和封装。比如单片机,主要通过编写代码控制内部硬件资源的使用与否,必须在预先设定好的硬件架构基础上进行软件设计。而FPGA的现场可编程特性体现在使用硬件描述语言可以通过多个层级的描述对电路进行编程,用户能够自由定义芯片内部的逻辑单元、连线方式等,在芯片搭建私人定制的数字电路。同样是进行代码编程,单片机的可编程特性体现在软件层面,FPGA的可编程特性体现在硬件层面,是用软件改变硬件的典型代表。1FPGA发展历史1.3什么是FPGAFPGA芯片结构脱胎于门阵列母片。门阵列母片是一种“半成品”集成电路,把每个门单元做成标准化的版图形状,在一块芯片上排列成阵列形式,在行、列之间留有布线通道。输入输出电路分布在芯片四周,电源线和地线一般呈网状分枝遍布芯片,根据用户的功能需求选择合适的门单元连接生成完整电路。使用这种半定制的设计方法可以设计出不同功能的电路。1FPGA发展历史1.3什么是FPGAFPGA的阵列排布形式与门阵列母片类似,但是FPGA将母片中功能单一、结构简单的门单元、输入输出和布线通道发展成为海量的可编程的逻辑单元、可编程的互连资源以及可编程的I/O单元,极大丰富了内部电路。正因为如此,FPGA才能实现数字逻辑的灵活配置,与各种电路搭配连接,广泛应用于复杂电路的原型设计,被誉为“万能”芯片。第1章芯片基础FPGA设计与应用案例教程.2026FPGA芯片结构02Part2FPGA芯片结构2.1FPGA的可编程特性FPGA强大的现场可编程能力来源于其灵活的可编程结构,这些结构使得FPGA能够在不改变硬件本身的情况下,通过重新配置来适应不同的应用需求。FPGA器件的可编程结构主要包括三部分:可编程逻辑宏单元、可编程I/O单元和可编程互连。可编程逻辑宏单元:FPGA的核心部分,负责执行用户定义的逻辑功能。逻辑宏单元由多个查找表(LUT)和触发器组成。每个查找表可以配置成不同的逻辑功能,而触发器则用于存储状态信息。这种设计使得FPGA能够实现复杂的逻辑运算和时序控制。可编程I/O单元:即可编程输入输出单元。I/O单元位于FPGA芯片的四周,负责与外部电路进行数据交换。它们支持多种电气标准和接口协议,如LVTTL、LVCMOS等,确保FPGA可以与各种类型的设备无缝连接。123可编程互连:主要是一系列快速互连、长线资源和可编程开关矩阵。FPGA内部有丰富的可编程连线资源,通过配置这些资源,用户可以自定义逻辑宏单元之间的连接方式以及I/O单元与逻辑宏单元之间的连接路径。2FPGA芯片结构可编程架构2FPGA芯片结构查找表结构FPGA中实现逻辑的微小电路结构称为LUT(Look-UpTable,查找表),它的工作原理是预先计算出逻辑函数的真值表并存储在电路中,把输入信号组合作为地址来查找存储的结果以完成逻辑运算。可以说,LUT本质上就是一个RAM。如果有n个输入信号,LUT就包含2n个条目,当输入信号进入LUT时,用作地址信号对LUT内部预存的内容进行寻址,从而实现相应的逻辑函数。2FPGA芯片结构查找表结构目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16×1的RAM,可存储任意一个4输入组合逻辑函数的真值表。因为它实现函数的方式与传统逻辑电路有本质区别,是通过查表的方式实现。2FPGA芯片结构查找表结构逻辑与门实现查找表(LUT)实现
四个逻辑输入输出端四位地址输入地址单元存储内容00000000000001000010……0……011111111112FPGA芯片结构查找表结构FPGA中的每个查找表(LUT)后面通常会有一个触发器,用于存储状态信息。例如,一个5输入的LUT后面会有一个触发器,而一个6输入的LUT后面则有两个触发器。这种结构使FPGA能够实现时序逻辑电路。单个LUT输入数量有限,将多个LUT连接起来,可以实现更复杂的多输入的逻辑函数。LUT的规模越大,能实现的函数复杂度就越高,但同时也会增加资源占用和功耗。LUT通常基于SRAM(StaticRandom-AccessMemory,静态随机存取存储器)工艺实现的。SRAM是一种易失性存储器,数据读取和写入速度相对较快。在结构上,LUT可以看做多个SRAM存储单元组成的阵列,如4输入的LUT需要16个SRAM存储单元。SRAM存储单元的地址线连接到LUT的输入端口,当输入信号到来时,这个信号就可以当做地址方位SRAM。2FPGA芯片结构查找表结构目前大部分FPGA都是基于SRAM工艺,所以芯片在掉电后信息就会丢失,需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作。这个配置时间很短,不会影响系统正常工作。SRAM高速存取的特性使得基于SRAM的LUT能够实现快速的查找和响应,非常适合用于实现复杂的组合逻辑功能。2FPGA芯片结构反熔丝结构与基于SRAM的FPGA不同,反熔丝是一种一次性可编程技术,用于在FPGA中永久地配置逻辑功能和I/O连接。反熔丝FPGA不需要每次上电时重新加载配置数据。反熔丝结构通过物理改变器件内部的连接状态来实现编程。在未编程状态下,反熔丝处于高阻抗状态,相当于开路。当需要对FPGA进行编程时,通过施加特定的电压脉冲,使得选定的反熔丝发生击穿,形成低阻抗路径,如图1-7所示。2FPGA芯片结构反熔丝结构反熔丝结构的FPGA因其非易失性、高安全性、抗辐射能力和低功耗等独特优势,在高可靠、高保密性的军用和航空航天领域得到广泛应用。Actel和QuickLogic公司是全世界主要的反熔丝和相关的软件开发工具供应商,其中Actel公司在开发基于反熔丝开发单元的FPGA方面处于领先地位。2FPGA芯片结构反熔丝结构ActelFPGA采用多路开关来实现数字逻辑。(a)组合逻辑模块(b)时序逻辑模块2FPGA芯片结构反熔丝结构例1.1某反熔丝FPGA的可编程逻辑宏单元由三个2路输入的多路开关和一个2输入或门组成,如图1-9所示。该宏单元共有8个输入和一个输出,可实现逻辑函数如何用这个反熔丝FPGA实现全加器的和输出。2FPGA芯片结构反熔丝结构分析:设全加器的两个加数为A和B,进位输入为Cn-1,和输出为S,进位输出为Cn。表1-3全加器的真值表输入输出ABCn-1SCn00000001100101001101100101010111001111112FPGA芯片结构反熔丝结构经过化简可得,S的逻辑表达式为S=(A⊕B)⊕Cn-1把输出S的表达式展开为与宏单元固有的逻辑表达式相对照可知宏单元各个输入端口的信号值可以是W=A,X=~A,S1=B,Y=~B,Z=B,S2=A,S3=Cn-1,S4=0.2FPGA芯片结构2.2AlteraFPGA芯片结构Altera公司生产的FPGA有多个系列,以最早推出的芯片FLEX10K为例,主要有LAB(LogicArrayBlock,逻辑阵列块)EAB(EmbeddedArrayBlock,嵌入式阵列块)IOE(Input/OutputElement,输入输出单元)快速互连2FPGA芯片结构逻辑阵列块(LAB)逻辑阵列块LAB指在FPGA芯片中间排成阵列形式的逻辑块,每个LAB包含8个LE(LogicElement,逻辑单元)和一些局部互连,有专属于本地的局部连线和控制连线。8个LE可以独立工作,也可以联合工作。2FPGA芯片结构逻辑单元LE逻辑单元LE是用于实现可编程逻辑的最小单元,每个LE中含有一个四输入查找表LUT、一个可编程寄存器、进位链、级联链和一些多路选择器。2FPGA芯片结构逻辑单元LELE中的可编程寄存器可以配置为D、T、JK、RS触发器,触发器上的时钟、清零和预置控制信号可以由全局信号、通用I/O引脚或任何内部逻辑驱动。有了可编程寄存器,LE就可以实现时序逻辑。实现组合逻辑时,LUT的输出结果可以走寄存器旁路绕过寄存器,直接驱动LE的两种输出,即通往快速通道的互连和通往LAB的本地互连。又或者由LUT驱动一个输出,寄存器驱动另一个输出,以提高LE利用率,这种功能称为寄存器打包。2FPGA芯片结构正常模式LE可以按下面四种模式运作:
运算模式加/减计数模式可清零计数模式每种模式下使用的LE资源不同,适应不同的设计需求。2FPGA芯片结构正常模式2FPGA芯片结构嵌入式阵列块EAB从芯片结构图可以看到,每一行LAB中间夹着一个嵌入式阵列块EAB,整个芯片中包含若干个EAB。EAB是一个灵活的RAM块,既可以实现常见的数字逻辑,也能作为内部存储器实现存储功能。2FPGA芯片结构嵌入式阵列块EABEAB中丰富的寄存器和多路选择器等资源可以实现各种复杂的组合逻辑和时序逻辑模块,比如构建多位的算术运算单元,实现加法、减法、乘法等运算;实现编码器、译码器等逻辑,在数字系统重承担信号的编解码工作;或者构建状态机对数字系统的流程和状态进行精确控制等。当FPGA需要存储空间时,将EAB用作RAM块比FPGA小型分布式RAM块阵列更有优势。分布式RAM块随着RAM大小的增加会产生不太可预测的延迟,也容易出现路由问题,因为必须连接小块RAM以形成更大的RAM块。相比之下,EAB可用于实现大型专用RAM块,以消除这些时序和路由问题。2FPGA芯片结构嵌入式阵列块EABEAB用作RAM时可以灵活配置成多种不同类型和大小的存储单元,以256×8,512×4,1024×2或2048×1的模式进行存储。2FPGA芯片结构嵌入式阵列块EAB它也可以当做ROM(只读存储器)使用,在设计阶段将不允许改变的数据或程序烧录进去,比如存储数字系统的启动引导程序、字符编码查找表等,为系统的稳定运行和快速数据查找提供支持。2FPGA芯片结构进位链和级联链LE之间的进位链提供了非常快的向前进位功能。进位信号通过进位链从低位LE进入高位LE,并且同时送入LE和进位链的下一部分。这个功能允许FLEX10K架构有效地实现任意宽度的高速计数器、加法器和比较器。使用级联链,FLEX10K架构可以实现多扇入的功能。有了级联链,可以把大的函数分成几个部分计算,相邻的LUT用来并行计算,由级联链把中间结果串联起来。级联链可以使用逻辑AND或逻辑OR(通过德摩根定律的反转)来连接相邻LE的输出。2FPGA芯片结构I/O单元分布在芯片最外圈的是可编程I/O单元IOE。IOE包含一个双向I/O缓冲区和一个寄存器,该寄存器既可以用作需要快速设置时间的外部数据的输入寄存器,也可以用作需要快速时钟输出性能的数据的输出寄存器。2FPGA芯片结构2.3XlinxFPGA芯片结构XC4000系列芯片结构示意图大量分布在器件四周的IOB和居于中间的CLB。IOB(Input/OutputBlock,I/O块)是可编程输入输出,CLB(ConfigurableLogicBlock,可配置逻辑块)是Xilinx公司对可编程逻辑宏单元的命名。2FPGA芯片结构可配置逻辑块CLB可配置逻辑块CLB的结构它通过两个函数发生器F’和G’(输入分别为F1-F4和G1-G4)提供函数实现的无限可能,大部分组合逻辑函数只需要四个或少于四个的输入,因此函数发生器F’和G’能够以查找表LUT的方式独立实现任意定义的四输入布尔函数。2FPGA芯片结构可配置逻辑块CLB除此之外,CLB还有第三个函数发生器H’。H’有三个输入,其中两个可以接收F’和G’的输出,另一个输入源于外部CLB。因此,基于这样的电路结构可以在单个CLB内实现最多9个变量的函数,比如奇偶校验或者对两组四输入进行扩展比较。2FPGA芯片结构可配置逻辑块CLB整个CLB共有13个输入和4个输出,为函数发生器和存储单元提供通道,将信息传输到CLB之外的可编程互连资源中。函数发生器的输出F'或H'可以连接到X输出,G'或H'可以连接到Y输出,所有函数发生器的输出都可以通过寄存器连接到YQ或XQ输出。2FPGA芯片结构一个5变量的任意函数CLB可用于实现以下功能:一个不超过4变量的任意函数、一个不超过另外4个变量的任意函数和一个不超过3个另外变量的任意函数
4变量的任意函数以及一些6变量函数一些多达9个变量的函数。2FPGA芯片结构开关矩阵XC4000系列芯片里,所有内部连接都由具有可编程开关点和开关矩阵的金属段组成,以实现所需的布线。芯片通过结构化、有层次的布线资源矩阵实现高效的自动布线。在CLB的行和列之间有丰富的布线资源,水平的单长线、双长线与垂直的单长线、双长线相交,相交处组成开关矩阵(ProgrammableSwitchMatrix,PSM)2FPGA芯片结构开关矩阵水平和垂直的单长和双长线路在一个称为可编程开关矩阵(PSM)的交叉点相交。每个开关矩阵由可编程导通晶体管组成,用于在线路之间建立连接。类似地,双长信号可以被路由到可编程开关矩阵其他三个边上的任意或所有双长线路。2FPGA芯片结构开关矩阵单长线路提供最大的互连灵活性,并在相邻块之间提供快速布线。每个CLB有八条垂直和八条水平单长度线。这些线在每两行CLB或每两列CLB之间的相交处形成开关矩阵。每个开关矩阵由若干可编程开关晶体管组成,用以建立线与线之间的连接。单长线、双长线的连接可以有多种连接方式,图1-18开关矩阵内部的连接示意图。2FPGA芯片结构开关矩阵单长度线路在通过开关矩阵时会产生延迟。因此,它们不适合长距离路由信号,通常用于在局部区域内传导信号;双长线路由金属段网格组成,每个金属段的长度是单长线路的两倍。2FPGA芯片结构输入/输出块(IOB)用户可配置的输入/输出块(IOB)提供外部封装引脚和内部逻辑之间的接口。每个IOB控制一个封装引脚,并可以配置为输入、输出或双向信号。标记为I1和I2的两条路径是IOB的输入信号,输入还可以连接到输入寄存器,这个输入寄存器可以编程为边缘触发触发器或电平敏感锁存器。输出信号可以选择在IOB内是否反转,并且可以直接传递到焊盘或存储在边缘触发触发器中。在IOB中高电平有效的三态信号可用于将输出缓冲器置于高阻抗状态,实现三态输出或者双向I/O。通过编程,输出信号OUT和输出三态信号T可以反转。2FPGA芯片结构输入/输出块(IOB)第1章芯片基础FPGA设计与应用案例教程.2026FPGA的应用03Part3FPGA的应用通信领域在5G基站建设中,FPGA大力推动了大规模MIMO、波束成形与网络切片等前沿技术的落地,为5G的高速发展奠定坚实基础。无线电接入网里,FPGA对信号进行精准调制解调以及编码解码等处理,极大优化了无线频谱利用率。有线通信方面,光纤传输系统中FPGA深度参与数据串并转换、成帧解帧以及错误检测纠正等工作,全力保障数据的高速稳定传输;在网络设备层面,交换机和路由器中的FPGA能高效负责数据包快速转发、路由表动态更新与QoS控制等事务,显著提升网络整体性能与灵活性。卫星通信领域,FPGA在卫星载荷部分承担信号处理、数据压缩与图像识别等重任,助力提高卫星数据处理能力与通信效率;地面终端方面,支持高速数据传输以及信号接收处理,切实保障卫星通信的质量和可靠性。物联网通信中,FPGA对大量传感器数据进行实时采集、处理与传输,实现智能化监控管理;在边缘计算场景,于靠近数据源处进行数据处理,减少延迟与带宽需求,提升物联网系统性能。3FPGA的应用通信领域相较于通用处理器,FPGA在执行特定通信任务时能更优地控制功耗,在移动通信与卫星通信等对功耗敏感的应用中优势突出。3FPGA的应用图像与视频处理在视频编解码方面,FPGA既可实现高效的视频压缩算法,也能迅速解码各种格式的视频流,确保视频播放的流畅性和高质量。在视频图像分析领域,FPGA可用于目标检测、跟踪、识别等任务。在医疗影像处理中,FPGA能够对医学图像进行快速分析和处理,辅助医生进行诊断和治疗。在图像增强方面,FPGA可以通过算法优化和硬件加速,对图像进行去噪、对比度增强、色彩调整等处理,提高图像质量。3FPGA的应用图像与视频处理FPGA在视频图像处理的不同子领域中也发挥着重要作用。在机器视觉领域,FPGA可用于生产线上的产品质量检测、机器人视觉导航等。它能够快速处理摄像头采集的图像数据,实现对产品的精确检测和分类,提高生产效率和质量。在影视特效制作中,FPGA能够用于实时特效渲染和合成。传统的特效制作往往需要在后期进行大量的计算和渲染,而使用FPGA可以实现实时的特效处理,为影视创作带来更多的可能性和创意空间。3FPGA的应用图像与视频处理在虚拟现实和增强现实领域,FPGA能够快速处理大量的图像和视频数据,实现虚拟场景的实时渲染和交互,为用户提供更加沉浸式的体验。在无人驾驶技术中,FPGA可用于处理车载摄像头采集的图像和视频数据,实现对道路环境、行人、车辆等的实时感知和识别,为无人驾驶的安全性和可靠性提供保障。3FPGA的应用数据中心和云计算随着现代科技的迅猛发展和大数据时代的推动,云数据中心已成为众多企业的核心基础设施。然而,伴随数据处理需求的不断增长,传统硬件架构在性能、功耗和灵活性方面面临诸多挑战,FPGA以其强大的并行处理能力而著称,这使得它在数据中心中成为理想的高性能计算(HPC)加速器。对于需要大量数据处理和复杂计算任务的应用,如科学模拟、金融建模和机器学习,FPGA能够显著加速这些计算过程。通过将计算任务卸载到FPGA上,CPU得以解放出来处理其他任务,从而提高整个系统的效率。相较于GPU,FPGA用于数据中心的核心优势在于微量延迟。像Bing网站执行搜索排序这样的任务,要尽可能快地返回搜索结果,就需要尽可能降低每一步的延迟。3FPGA的应用数据中心和云计算如果使用GPU来加速,要想充分利用GPU的计算能力,一次性输入到加速器中的数据量就不能太小,这样一来,延迟将高达毫秒量级。使用FPGA来加速的话,FPGA作为一块PCIe加速卡只需要微秒级的PCIe延迟。未来Intel通过QPI(IntelQuickPathInterconnect,快速通道互联)架构连接Xeon微处理器和FPGA,CPU和FPGA之间的延迟更可以降到100纳秒以下。因此,FPGA成为数据中心开发DPU(DataProcessingUnit,数据处理器)的热门技术,3FPGA的应用数据中心和云计算DPU是以数据处理为核心的新一代,主要用于数据中心的网络、存储和安全等功能的卸载,强调的是数据的高效处理和传输。这个概念最早在2016年由硅谷创业公司Fungible提出,2020年10月,英伟达并购Mellanox之后重新定义了DPU并成为主流。目前,DPU和GPU一起构成新型计算的三大支柱。3FPGA的应用数据中心和云计算当前业界DPU的实现技术方案主要分为两种——FPGA和ASIC/SoC(systemofchip,系统级芯片)。FPGA的可编程性极高,能够根据具体的DPU功能需求进行灵活的配置和快速的迭代开发,更好地适应不断变化的应用场景和算法变化,而不像ASIC一旦定型难以修改。FPGA可以实现硬件级别的并行计算,多个处理单元同时工作,极大地提高了数据处理的吞吐量和速度,对于对实时性要求高的DPU任务非常适用。FPGA在功耗和开发周期方面的优势,也使得越来越多芯片设计厂商开始选择FPGA。第2章FPGA开发工具本章概要本章详细介绍了FPGA(现场可编程门阵列)的开发流程及其所需的工具链。首先概述了FPGA的基本架构和开发流程,包括需求分析、设计输入、综合、实现、仿真验证以及下载调试等关键步骤。然后重点介绍了FPGA开发中常用的硬件平台(如Intel和Xilinx的芯片)以及集成开发环境(如Quartus和Vivado)。通过具体的实例演示讲解了如何使用Quartus和Vivado进行FPGA设计。FPGA开发流程01Part1FPGA开发流程FPGA的基本开发流程包括设计输入、分析综合、布局布线、时序分析和仿真等步骤1FPGA开发流程设计输入设计输入是FPGA开发的第一步。设计输入形式多样,可以通过硬件描述语言(HDL),如Verilog或VHDL编写代码,也可以采用原理图编辑或使用预定义的IP核来实现特定逻辑功能。如果采用硬件描述语言,可以在开发软件的特定文件格式或模板下编辑,也可以在通用的文本编辑器里事先编辑好,再复制到软件编辑器里进行电路设计。1FPGA开发流程分析&综合(Analysis&Sythesis)分析是对设计输入的规范性进行初步检查,例如对硬件描述语言(HDL)代码进行语法和语义检查,包括检查代码中的拼写错误、语法错误以及变量和信号的正确使用等。通过这一步骤,可以确保代码的基本正确性,避免在后续的综合过程中出现不必要的错误。1FPGA开发流程分析&综合(Analysis&Sythesis)综合是将设计输入翻译成门级网表的过程。网表(netlist)是一种描述电子电路中各元件及其相互连接关系的文本文件,包含了电路的所有逻辑元件(如与门、或门、非门、触发器等)以及它们之间的连接信息。1FPGA开发流程分析&综合(Analysis&Sythesis)在图的节点inst2上打开右键菜单,选择LocateNode命令,可以把这个节点直接定位到设计文件、芯片规划和引脚规划等多个资源文件,便于后续的设计步骤进行核查。1FPGA开发流程分析&综合(Analysis&Sythesis)综合后的门级网表文件通过汇编(Assembler)转换成FPGA配置文件(如位流文件或SOF文件)1FPGA开发流程布局布线(Place&Route)布局布线决定了网表中的逻辑单元在FPGA芯片上的物理分布以及它们之间的连接方式。布局是将综合后网表中的各类逻辑单元,诸如触发器、查找表等,精准地分配到FPGA芯片上特定物理位置的过程。这一过程中逻辑单元的功能特性是首要考量因素,比如触发器常用于数据存储与时序控制,查找表则主要实现逻辑函数,布局时需依据其功能特性,让它们在芯片上各安其位,以实现高效协作。同时,FPGA芯片的资源分布也是重要考量,芯片内部不同区域有着不同的资源配置,如可编程逻辑块、布线资源等,布局需充分利用这些资源,避免局部资源过度集中或闲置。1FPGA开发流程布局布线(Place&Route)布线是在布局完成之后,根据布局文件中的逻辑单元位置信息,运用特定算法及规则,借助电子设计自动化(EDA)工具来构建实际连接路径。这些连接路径犹如FPGA的“神经网络”,确保各个逻辑单元间能够准确无误地传递信号。1FPGA开发流程布局布线(Place&Route)布线过程需遵循诸如线长限制、信号完整性要求、布线层数限制等诸多约束条件。例如,高速信号的布线需严格控制线长,以避免信号反射和延迟;而对于一些敏感信号,还需与其他信号保持一定间距,防止串扰。此外,由于FPGA芯片资源有限,布线资源的合理分配和优化显得尤为重要,需在满足设计功能的前提下,尽可能提高布线效率与质量。布线过程需要优化连接路径的长度和质量,以减少信号传输延迟和功耗及经常会遇到资源冲突、连接拥塞等问题,因此,布线工具通常会采用一些优化算法,良好的布局布线策略可以显著提高设计的性能,减少信号延迟和功耗。1FPGA开发流程布局布线(Place&Route)布线完成后,会生成一个包含所有连接路径信息的布线文件,这个文件将用于生成最终的FPGA配置文件。1FPGA开发流程时序分析时序分析是评估FPGA设计是否能够在时钟信号下稳定工作的关键,通常按照以下步骤进行。首先建立设计模型,将整个FPGA设计以合适的形式呈现,包含逻辑单元、连接关系以及时钟信号等关键信息,为后续分析奠定基础。接着,定义时序约束,明确时钟信号的频率、占空比、相位等参数,同时针对不同信号路径设置最大延迟、最小延迟等限制,确保设计符合预期的时序要求。然后进行时序计算,依据设计模型和时序约束,利用专业工具计算各个信号路径的传播延迟、建立时间和保持时间等关键时序参数。通过精确计算,确定电路中各个信号的传输时间和延迟情况。最后是分析时序报告,开发工具生成的时序报告详细记录每条信号路径的时序状况,要据此识别出时序违规的路径,如建立时间或保持时间不满足要求等问题,进而针对性地优化逻辑设计,修复潜在问题,确保FPGA设计能在时钟信号下稳定工作。1FPGA开发流程仿真测试仿真测试是FPGA开发流程中至关重要的环节,它贯穿于整个设计周期的始终,是确保设计正确性和可靠性的关键步骤。根据验证环境和实施方式的不同,主要分为软件仿真和硬件测试两大类,它们各自具有独特的特点和适用场景,共同构成了完整的FPGA验证体系。1FPGA开发流程仿真测试软件仿真是FPGA设计初期的主要验证手段,它通过专门的仿真工具(如ModelSim、VCS等)在计算机上模拟硬件电路的行为。这种仿真方式具有成本低、灵活性高、调试方便等显著优势。1FPGA开发流程仿真测试硬件测试则是在设计后期进行的重要验证手段,它需要借助专门的硬件仿真设备,如FPGA原型验证平台或硬件仿真器。与软件仿真相比,硬件测试能够提供更接近实际运行环境的验证条件,特别是在时序验证方面具有明显优势。硬件测试可以准确反映设计的时序特性,包括时钟树延迟、布线延迟等物理特性,这对于高速设计和时序关键路径的验证尤为重要。此外,硬件测试还可以进行系统级验证,将FPGA设计与实际外围电路或系统环境相结合,验证整个系统的功能和性能。1FPGA开发流程仿真测试FPGA开发流程三个阶段。第一个阶段是设计输入,其核心在于源文件的创建与优化,包括硬件描述语言(HDL)代码、原理图以及其他设计文件的编写与修改,确保设计的功能性和逻辑正确性;第二个阶段是软件仿真,重点在于利用各种仿真工具和方法,在软件层面对设计文件进行功能验证和时序分析,以确保设计在逻辑上的正确性和可靠性;第三个阶段是硬件仿真,也称为板级验证,这一阶段的核心任务是将设计文件转换为位流编程文件,并烧录到FPGA芯片中,通过实际硬件平台进行功能验证和性能测试,确保设计在实际环境中的可行性和稳定性。第2章FPGA开发工具FPGA主流芯片与选型02Part2FPGA主流芯片与选型FPGA使用软件的方法设计硬件,FPGA开发的各个阶段都与硬件芯片相关。在学习设计之前,应该对FPGA芯片有一定的认识,从芯片型号了解芯片中和设计、制造相关的资源,便于进行芯片选型。2FPGA主流芯片与选型2.1IntelFPGA芯片型号IntelFPGA产品主要分为Agilex系列、Stratix系列、Arria系列、MAX系列、Cyclone系列:Agilex系列——采用英特尔7或10纳米SuperFin技术制造,内置ARM核的SOC芯片,面向带宽密集型和计算密集型应用,主要有Agilex9、7、5、3系列。Stratix系列——目前主要使用的是采用14纳米三栅极技术的Stratix10,适用于高端应用。Arria系列——提供给中端市场使用,主要有Arria10和ArriaV系列。MAX系列——MAX是非易失性的CPLD产品,主要有MAX10和MAXV,能够降低功耗,实现更低的系统总成本。Cyclone系列——以低功耗、低成本芯片为主,包括CycloneIV、CycloneV和Cyclone10,性价比高。2FPGA主流芯片与选型2.1IntelFPGA芯片型号IntelFPGA芯片型号由系列标识、(系列)成员代码、封装、温度和速度等级等必要说明和硬核、收发器、规格等各项附加说明组成。2FPGA主流芯片与选型2.1IntelFPGA芯片型号芯片5CGXBC3B6F23C7N型号组成2FPGA主流芯片与选型2.1IntelFPGA芯片型号因芯片种类繁多,不同的芯片系列里芯片型号各个组成部分使用的符号、对应的数值不尽相同。要掌握芯片资源的准确信息,需要查阅目标芯片对应的用户手册。2FPGA主流芯片与选型2.2AMDFPGA芯片型号AMD公司的FPGA产品主要有Spartan系列、Artix系列、Kintex系列和Virtex系列:Spartan系列——入门级到中端产品系列,以高性价比著称,非常适合成本敏感型设计。该系列FPGA提供了丰富的逻辑资源和I/O接口,能够满足各种嵌入式系统、消费电子和工业自动化等领域的应用需求。同时,Spartan系列还具有良好的可编程性和灵活性,使得设计者可以根据具体需求快速定制和优化系统。Artix系列——中端产品系列,采用先进的16nm工艺,结合了出色的性能和成本效益。该系列FPGA配备了高达16Gb/s的高级协议收发器,非常适合机器视觉、网络、物联网和边缘市场中的低功耗应用。Artix系列不仅提供了强大的信号处理能力和高速数据传输能力,还优化了功耗管理,使得系统在保持高性能的同时能够降低能耗。2FPGA主流芯片与选型2.2AMDFPGA芯片型号Kintex系列——中高端产品系列,集成了高性能逻辑、大容量存储器和高速收发器。该系列FPGA适用于数据包处理、无线通信、数据中心和航空航天等领域的应用。Kintex系列提供了高性能的DSP计算单元和丰富的I/O资源,能够满足复杂算法处理和高速数据传输的需求。同时,该系列还具有良好的可扩展性和可靠性,使得设计者可以根据具体应用场景灵活配置系统。Virtex系列——高端产品系列,代表了AMDFPGA技术的巅峰之作。该系列FPGA具有高密度、高性能I/O和高级布线结构,主要面向高性能计算和大数据流处理的应用。Virtex系列提供了极致的逻辑密度、大容量存储器和高速串行连接能力,使得系统能够处理大规模数据运算和高速数据传输任务。同时,该系列还采用了先进的封装技术和散热设计,确保了系统的稳定性和可靠性。2FPGA主流芯片与选型2.2AMDFPGA芯片型号AMDFPGA芯片型号由系列标识、(系列)成员代码、封装、温度和速度等级等必要说明和硬核、收发器、规格等各项附加说明组成。2FPGA主流芯片与选型2.3FPGA芯片选型使用FPGA进行数字逻辑设计,芯片选型是一个复杂的过程,涉及多个方面的考量。选型前,需明确应用需求,包括数据处理速度、功耗限制和接口要求等,同时多掌握一些FPGA芯片的基本信息,以便进行统筹规划。2FPGA主流芯片与选型2.3FPGA芯片选型从设计方面考虑,重要的是芯片资源和性能。对于需要高性能计算和大量数据处理的项目,应选择具有丰富逻辑资源和高速处理能力的FPGA芯片。而对于对成本敏感且性能要求不高的项目,则可以选择资源适中、性价比高的芯片。设计需要考虑主要指标有逻辑单元数量、引脚、专有功能模块、工作环境等。FPGA通过逻辑单元实现所设计的数字逻辑电路,逻辑单元数的重要性毋庸多言。通常会基于类似项目的资源使用情况进行估算,也可以结合已有的芯片进行评估,在满足设计要求的前提下,预留20-30%的逻辑单元,以应对设计变更和优化。再根据估算的逻辑单元数,查找满足需求的FPGA型号。2FPGA主流芯片与选型2.3FPGA芯片选型引脚方面,需确保满足FPGA连接外部器件的所有需求,数量上要有冗余,并考虑引脚的驱动能力和工作频率与设计的匹配性。专有模块包括DSP模块、RAM、ROM、PLL(锁相环)等等,恰当使用可以帮助简化FPGA设计流程,加速项目进度。工作环境主要是从设计的产品属于商业级、工业级还是军工级或者航天级来区分,有各自不同的温度范围。从制造方面需要考虑封装、电源与功耗等。不同的封装类型具有不同的引脚数量、间距和电气特性,需要根据项目的PCB设计和制造工艺来选择合适的封装类型。功耗和散热也是需要考虑的因素。如果系统对散热有需求,应考虑低功耗的FPGA芯片,不仅有助于降低系统的能耗,还能减少散热设计的难度和成本,确保在高负载工作下能够保持稳定的性能输出。2FPGA主流芯片与选型2.3FPGA芯片选型成本也是一个重要因素,很多情况下它可能是首要因素。不过在系统设计中,成本不单指芯片的购买价格,还要把开发成本、维护成本等也计算在内,往往需要和其他评估因素结合起来考虑。第2章FPGA开发工具Intel开发软件Quartus03Part3Intel开发软件Quartus3.1QuartusPrime下载安装登录Inte官网www.找到下载中心3Intel开发软件Quartus3.1QuartusPrime下载安装软件包类型主要有三种,分别是Pro(专业版)、Standard(标准版)和Lite(精简版)3Intel开发软件Quartus3.1QuartusPrime下载安装QuartusPrime是一个集成开发环境,有两种下载方式。以QuartusPrimeLite版本为例,可以选择完整下载(MultipleDownload)和单独下载(InvidualFiles)。3Intel开发软件Quartus3.1QuartusPrime下载安装(a)仅下载软件平台QuartusPrimeLite单独下载方式3Intel开发软件Quartus3.1QuartusPrime下载安装(b)支持的芯片库QuartusPrimeLite单独下载方式3Intel开发软件Quartus3.2QuartusPrime的主菜单启动QuartusPrime软件,软件用户界面上方显示软件版本、主菜单和常用快捷工具,下方是窗口区。3Intel开发软件Quartus3.2QuartusPrime的主菜单主菜单从左到右依次是File(文件)、Edit(编辑)、View(视图)、Project(工程)、Assignments(分配)、Processing(处理)、Tools(工具)、Window(窗口)和Help(帮助)菜单。3Intel开发软件QuartusFile(文件)File(文件)菜单包含工程和文件的新建、打开、关闭、保存等操作指令第一组指令兼顾工程和文件第二组指令只面向工程3Intel开发软件QuartusView(视图)菜单View(视图)菜单可以对工具窗口进行打开和关闭的独立设置3Intel开发软件QuartusProjectNavigator(工程导航)NodeFinder(节点查找)01TclConsole(Tcl控制台)02Messages(消息)03Status(状态)04ChangeManager(变更管理)05Tasks(任务)06IPCatalog(IP核目录)07图2-11File菜单083Intel开发软件QuartusProjectNavigator窗口ProjectNavigator窗口展示工程所有的层级、文件、设计单元和IP单元,可以在各个页面切换。3Intel开发软件QuartusTasks窗口Tasks窗口展示工程任务的进程。包括分析&综合、适配(布局布线)、汇编、时序分析等环节。3Intel开发软件QuartusMessages消息(Messages)窗口主要有三种信息标志:ShowErrorMessages(红色字体)ShowCriticalWarningMessages(蓝色字体)ShowWarningMessages(蓝色字体)3Intel开发软件QuartusMessages此外,消息窗口还会显示一类带标记的系统信息(绿色字体)。3Intel开发软件QuartusAssignments(分配)菜单Assignments(分配)菜单主要完成芯片的选择与设置、引脚的分配等,是FPGA开发从代码编写走向硬件实现的过程中必不可少的一环。3Intel开发软件QuartusAssignments(分配)菜单Device用于指定目标芯片,事先没有指定或者需要更改目标芯片的时候在这里进行设置。在例2.1和例2.3中有专门说明。Settings用于指定工程中EDA工具、编译、仿真、时序分析和IP等多个开发环节的相关设置,如图2-17所示。PinPlanner用于进行引脚分配。在例4.6中有专门说明。3Intel开发软件QuartusProcessing(处理)Processing(处理)执行Quartus中的各种快速流程,其中最常用的是StartCompilation。Quartus软件把开发流程中的分析综合、布局布线和汇编和时序分析等步骤全部整合在一起,当设计文件编辑完毕,使用StartCompilation指令进行一键式编译。3Intel开发软件QuartusTools(工具)Tools菜单则主要处理与仿真和硬件有关的内容:RunSimulationTool:调用仿真工具进行RTL/GateLevel仿真。NetlistsViewers:查看网表。Progammer编程器:将编程文件烧写至FPGA芯片。第3章硬件描述语言VerilogHDL本章概要本章介绍使用硬件描述语言VerilogHDL设计电路的编程方法,首先说明Verilog编程的基本框架结构,接着介绍Verilog的语言要素和基本语法规则,尤其是硬件描述语言中区别于其他高级语言的、能体现电路特色的语句,最后结合模块化程序设计的思想对FPGA设计常用的三种抽象级别不同、风格迥异的描述方式及运用方法进行了详细说明。硬件描述语言简介01Part1硬件描述语言简介1.1硬件描述语言的诞生硬件描述语言(HardwareDescribeLanguage,HDL)产生于20世纪80年代,顾名思义,它是一种用高级编程语言形式对电路硬件进行描述以生成或测试硬件电路的语言。硬件描述语言运用于电子设计领域,极大地促进了EDA的发展,对电路进行设计和验证的工作效率得到显著提高。1硬件描述语言简介1.1硬件描述语言的诞生硬件描述语言改变了电路设计的传统范式,可以在更高的抽象层次上描述电路的行为和结构。对于具有成千上万逻辑门的大规模逻辑电路,硬件描述语言允许设计师以接近自然语言的方式描述电路的逻辑行为,这种设计方式不仅更加精确和高效,而且易于修改和复用,能够更快速地迭代和优化设计。硬件描述语言还支持参数化设计,可以通过调整参数来快速生成不同的电路配置,极大地提高了设计的灵活性和可扩展性。这种高级别的抽象和自动化的设计流程,使得电路设计和验证变得更加快速和可靠。1硬件描述语言简介1.1硬件描述语言的诞生使用硬件描述语言设计,可以使设计和制造过程相对独立。芯片制造商可以根据市场的需求和自身的工艺优势,选择最合适的工艺技术来实现设计的电路,进一步促使芯片制造商有更大动力去研发更先进的工艺技术以提高芯片的竞争力。同时,为了满足硬件描述语言的编译、综合、布局布线的需求,以及功能和时序的验证等,开发出了一系列专业EDA工具,如Synopsys的综合工具,Cadence的布局布线工具,Mentor的仿真工具等。这些工具与硬件描述语言紧密结合,为设计师提供了便捷、高效的开发环境。1硬件描述语言简介1.2硬件描述语言的发展在40多年的发展过程中,硬件描述语言出现过上百种,有些是昙花一现,有些是近年来伴随着SOPC芯片的出现应运而生,比如SystemVerilog、SystemC等系统级语言。而长期保持主流、应用最为广泛的硬件描述语言有VHDL和VerilogHDL两种,他们被IEEE认定为标准语言。1硬件描述语言简介1.2硬件描述语言的发展VHDL是VeryHighSpeedHardwareDescriptionLanguage的缩写,意思是超高速硬件描述语言,由美国国防部于1982年推出。VHDL在1987年被IEEE认定为标准硬件描述语言,推出IEEE1076标准。后于1993年进行了修订,因此VHDL有87版和93版两个版本在使用中。1硬件描述语言简介1.2硬件描述语言的发展VerilogHDL是1983年由美国GDA(GatewayDesignAutomation)公司开发的硬件描述语言,适用于电子系统设计的所有阶段,支持硬件设计的开发、验证、综合和测试。VerilogHDL在1995年正式成为IEEE标准(1364-1995)。1硬件描述语言简介1.2硬件描述语言的发展VHDL程序一般由库(LIBRARY)、实体(ENTITY)、结构体(ARCHITECTURE)三部分组成。库用来声明需要使用的库和程序包实体用来描述电路器件的信号端口等外部情况结构体负责描述电路器件的内部逻辑功能VerilogHDL虽然也需要描述同样的内容,但是没有VHDL那么繁复的格式要求,风格更为灵活。1硬件描述语言简介1.2硬件描述语言的发展以半加器设计为例,两种硬件编程语言的代码比较。VHDL代码:libraryIEEE;//库useIEEE.STD_LOGIC_1164.ALL;entityHalfAdderis//实体port(A:inSTD_LOGIC;B:inSTD_LOGIC;S:outSTD_LOGIC;C:outSTD_LOGIC);endHalfAdder;architectureBehavioralofHalfAdderis//结构体beginS<=AxorB;C<=AandB;endBehavioral;VerilogHDL代码:moduleHalfAdder(inputA,inputB,outputS,outputC);
assignS=A^B;assignC=A&B;endmodule1硬件描述语言简介1.2硬件描述语言的发展从硬件描述语言的共性来说,VHDL和VerilogHDL都可以实现门级、RTL级和行为级这三个层次上的电路描述,既能够抽象表示电路的行为,也能够具体描述电路的结构,都具有电路仿真与验证机制以保证设计的正确性。但VHDL的描述风格严谨,语言特点让它更适合行为级描述。而VerilogHDL的语言包含大量RTL和门电路级别描述,更贴近电路。它类似C语言的语法结构和关键字,对有软件编程背景的人来说较为容易上手。第3章硬件描述语言VerilogHDL模块与端口02Part2模块与端口2.1模块结构VerilogHDL语言中的模块是构建数字系统的基本单位,描述某个电路块的功能或内部结构以及该电路与其他电路进行通信的外部端口。2模块与端口2.1模块结构模块提供了一种结构化和层次化的方法来描述硬件电路。每个模块就像是一个封装好的电路单元,具有明确的输入和输出接口,所以每个模块是独立的,同一个模块可以在不同的设计项目中重复使用。2模块与端口2.1模块结构VerilogHDL的模块结构电路描述门级描述数据流描述(RTL级)行为级描述module模块名(端口列表);变量声明任务和函数(可选)endmodule参数(可选)端口声明2模块与端口模块框架module和endmodule这两个关键字表明了模块的开始和结束,共同组合成模块的框架。模块的先后顺序不影响它们的执行顺序。moduleA……endmodulemoduleB……endmodule2模块与端口模块框架即使模块有层级关系,模块B的电路是模块A电路的一部分,模块代码也不能写成嵌套形式。错误写法:moduleA……
moduleB
……
endmodule……endmodule一个程序文件里有多个模块,通过module-endmodule组合可以明确区分出各个模块。2模块与端口模块第一行1模块的第一行首先写出关键字module,后面紧跟模块名和端口列表,最后以分号(;)结束。2模块名是自定义的标识符,帮助模块定位。3端口列表写在模块名后面的()里,有两种书写方式。仅列出电路模块所有输入端口和输出端口的名称把完整的端口声明写在()里。2模块与端口声明模块里的声明主要包含端口声明和变量声明。端口声明是对电路外部接口在类型、名称、位宽等特性的定义。如果模块第一行的()里仅列出了端口名称,那么在第一行下面要写出所有端口的声明语句。变量声明是对电路内部变量进行类型、名称、位宽等特性的定义,遵循“定义后使用”的原则,只有经过声明的变量才能在模块主体中用于描述电路,并且在不同的描述风格中必须使用相应类型的变量。2模块与端口电路描述电路描述是VerilogHDL模块的主体,体现电路的结构或行为。Verilog允许使用门级描述、数据流描述和行为级描述等不同抽象级别的描述方式。2模块与端口可选部分参数是用来定义常量的标识符,在编译时为模块提供可配置的常数值,从而灵活地实现模块的复用。任务主要用来在测试平台中进行数据显示或者辅助时序逻辑控制。函数是用于实现从输入到输出的映射关系的结构,仅有一个返回值,常用于实现复杂的计算或数据转换。2模块与端口例3.1使用VerilogHDL语言描述一个上升沿D触发器。moduledff(q,clk,data);outputq;inputclk,data;regq;always@(posedgeclk)q=data;endmodule电路描述(行为级描述)端口声明变量声明模块名dff2模块与端口例3.2使用VerilogHDL语言描述一个SR锁存器。2模块与端口2.2端口端口是VerilogHDL模块与外部环境之间的通道,代表着电路对外的接口。端口声明的基本格式如下:端口类型[端口宽度]端口名;2模块与端口端口类型其中,inout声明的双向端口兼具输入端口和输出端口的功能。关键字端口类型input输入端口output输出端口inout
双向端口VerilogHDL端口类型说明2模块与端口端口宽度端口的宽度可以是1位,也可以是多位,默认是1位端口。矢量端口必须注明位数(宽度),位数写在[]里,可以按照两种方式声明:[LSB:MSB]或者[MSB:LSB]其中LSB(LeastSignificantBit)为最低有效位,MSB(MostSignificantBit)为最高有效位。如:inputclk;//1位输入端口output[7:0]bcd;//8位输出端口,左边是最高位2模块与端口端口宽度宽度超过1位的端口,在端口列表处也只需要写出端口名,不需要写宽度,如:moduledb(clk,bcd);//bcd在端口列表只写端口名inputclk;output[7:0]bcd;2模块与端口端口声明的两种写法端口列表和端口声明可以分开,也可以合并。分开时模块第一行的端口列表里只写端口名称,详细信息写在端口声明语句里,每条语句用分号表示结束。只有类型相同且位宽相同的端口才可以写在同一条语句里。合并的情况是把端口声明搬入端口列表,同时把每条语句结尾的分号(;)改为逗号(,)。如例3.1可以写成moduledff(outputregq,inputclk,data);always@(posedgeclk)q=data;endmodule例3.2可以写成moduleSR_latch(outputQ,Qbar,inputSbar,Rbar);nandn1(Q,Sbar,Qbar);nandn2(Qbar,Rbar,Q);endmodule2模块与端口端口声明的两种写法modulefull_adder(sum,c_out,a,b,c_in);outputsum,c_out;inputa,b,c_in;
……//电路描述endmodule2模块与端口端口声明的两种写法例3.3根据图3-2所示的元件符号,写出全加器模块的基本框架和端口声明。第3章硬件描述语言VerilogHDL数值与变量03Part3数值与变量关键字关键字是在程序中起到指定用途的字符组合以下是部分VerilogHDL常用关键字的说明。module和endmodule用于定义模块的开始和结束input和output用于定义I/O端口always用于描述电路的逻辑行为assign用于连续赋值begin和end用于将多条语句组合在一起case和endcase用于实现多路选择结构wire和reg用于声明变量类型for用于迭代和循环if和else用于条件语句integer用于定义数据类型3数值与变量关键字VerilogHDL的关键字全部采用小写字母,详见附录1。3数值与变量标识符VerilogHDL代码中的标识符用于表示模块名称、端口名称、实体名称、变量名称等。VerilogHDL的标识符是任意大小写字母、数字、$符号和_(下划线)符号的组合,但是第一个字符必须是字母或者下划线。区分大小写。以下是合法的标识符:counterSYS_CLKsys_clk_ADD_T1231$ad其中SYS_CLK和sys_clk因为大小写字母的区别,认定为两个不同的标识符。以下是不合法的标识符:58ant_CLK*well19790207?wew3数值与变量标识符为了保持代码的一致性和可读性,建议在使用标识符时遵循一定的规范。例如,不建议在标识符中使用大小写混合,普通内部信号建议全部小写,并且信号命名最好能体现信号的含义,使其简洁、清晰、易懂。3数值与变量注释为增加代码的可读性,VerilogHDL支持两种注释方式:①注释单行文本,使用//(双斜杠)符号,VerilogHDL忽略从此处到本行末尾的内容。这种方式常用于说明文字或备注较短的情况。②注释多行文本,使用/*……*/符号,编译时将忽略其中注释的内容。这种方式适用于代码的辅助说明较为复杂需要占用多行的情况。3数值与变量注释以下是两个常见的单行注释,用于解释一条程序语句。a=b&&c;//a是b和c相与的结果setStartPosition(nX,nY);//设置起始坐标以下是一个常见的多行注释,使用/*……*/符号。/*ProjectDescription:Theprojectisstartedfrom2024/1/1,willbefinishedinJune.*/3数值与变量注释注释符不仅用于程序语句和程序块的说明,也常用于对整个程序的信息发布,下面是一个常见的程序开头说明,使用//符号。//************************************************//创建日期:2024-01-01//开发者:王明//项目名称:XXX//************************************************多行文本的注释不允许进行嵌套,在/*……*/符号里又出现/*……*/是非法注释。如/*Thisis/*anillegal*/comment*/就是一个非法注释的例子。3数值与变量数字格式为了便于阅读或计算,VerilogHDL程序中允许使用多种形式的数值,基本的数字格式为:<位数>’<进制格式><数值>其中,<位数>是指该数值转换为二进制形式的位数,进制是数值的表现形式,与<数值>相一致进制格式进制进制格式有效值二进制Borb0,1,x,X,z,Z,?,_八进制Ooro0~7,x,X,z,Z,?,_十进制Dord0~9,_十六进制HorH0~9,a~f,A~F,x,X,z,Z,?,_3数值与变量数字格式没有标明进制格式的,默认为十进制,如1234。所有数值必须符合进制格式的有效范围,否则视为无效。VerilogHDL数值可以指定位数,也可以不指定位数。不指定位数时,<位数>位置的数据省略,默认为32位。如:‘hc3
//8位,十六进制数,默认为32位
‘o21
//6位,八进制数,默认为32位常见的数值表现为:4’b1111//4位,二进制数12’habc//12位,十六进制数16’d255//16位,十进制数3数值与变量四值逻辑根据IEEE1364标准,VerilogHDL语言运用四值逻辑,即用四种逻辑状态表示数据的状态:0、1、X和Z。0:逻辑0或条件为假1:逻辑1或条件为真X:未知态或不定态Z:高阻抗态3数值与变量信号强度信号强度及其属性按照从强到弱的排列顺序:strong:驱动pull:驱动large:存储weak:驱动medium:存储small:存储highz:高阻态强弱3数值与变量字符X和Z字符X和x代表未知状态,字符Z和z代表高阻状态。不区分大小写。当X和Z出现在数值末尾时,代表了后面的所有位数。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生日活动促销策划方案(3篇)
- 高层互动活动方案策划(3篇)
- 妊娠期急性胰腺炎的病因快速检测与诊断
- 8.2 《联合国》同步练习 统编版高中政治选择性必修一当代国际政治与经济
- 妊娠合并马凡综合征的医患沟通技巧
- 妊娠合并血液透析患者的子代代谢性疾病风险
- 妊娠合并脂肪酸氧化缺陷的胎盘代谢研究
- 乐队合作营销方案(3篇)
- 回转支承营销方案(3篇)
- 巴西足球营销方案(3篇)
- 2026年江苏海事职业技术学院教师招聘考试备考题库及答案解析
- 2026宁夏中卫工业园区管理委员会招聘安全监管人员6人备考题库附答案详解(完整版)
- 2026北京昌平区事业单位考试真题
- 2026北京海淀高三一模语文(含答案)
- 【招考】2025年下半年北京海淀区事业单位公开招聘笔试历年典型考题及考点剖析附带答案详解
- 2026湖北恩施州消防救援局政府专职消防员招聘38人考试参考题库及答案解析
- 建设目标责任制度
- 萤石矿采选工程初步设计
- 路灯安装安全文明施工方案
- 未来五年干燥花行业跨境出海战略分析研究报告
- YY/T 0573.2-2025一次性使用无菌注射器第2部分:动力驱动注射泵用注射器
评论
0/150
提交评论