2026/3/12 14:39:39
网站建设
项目流程
做网站推广优化,网上书店网网站建设,邢台视频推广,wordpress andriod1.4 FPGA应用领域
目前FPGA虽然还受制于较高的开发门槛以及器件本身昂贵的价格#xff0c;并从应用的普及率上来看和ARM、DSP还是有一定的差距#xff0c;但是在非常多的应用场合#xff0c;工程师们还是要别无选择地使用它。FPGA所固有的灵活性和并行性是其他芯片所不具备…1.4 FPGA应用领域目前FPGA虽然还受制于较高的开发门槛以及器件本身昂贵的价格并从应用的普及率上来看和ARM、DSP还是有一定的差距但是在非常多的应用场合工程师们还是要别无选择地使用它。FPGA所固有的灵活性和并行性是其他芯片所不具备的所以它的应用领域涵盖得很广。从技术角度来看主要是有以下需求的应用场合如图1-8所示·逻辑粘合如一些嵌入式处理常常需要地址或外设扩展CPLD器件尤其适合。已经少有项目会选择一颗FPGA器件专门用于逻辑粘合的应用但是在已经使用的FPGA器件中顺便做些逻辑粘合的工作倒是非常普遍。·实时控制如液晶屏或电机等设备的驱动控制此类应用也以CPLD或低端FPGA为主。·高速信号采集和处理如高速AD前端或图像前端的采集和预处理近年来持续升温的机器视觉应用也几乎无一例外地使用了FPGA器件。·协议实现如更新较快的各种有线和无线通信标准、广播视频及其编解码算法、各种加密算法等使用FPGA比ASIC更有竞争力。·各种原型验证系统由于工艺的提升流片成本也不断攀升而在流片前使用FPGA做前期的验证已成为非常流行的做法。·片上系统如Altera公司的Soc FPGA和Xilinx公司的Zynq这类FPGA器件既有成熟的ARM硬核处理器又有丰富的FPGA资源大有单芯片一统天下的架势。当然了若从具体的应用领域来看FPGA在电信、无线通信、有线通信、消费电子产品、视频和图像处理、车载、航空航天和国防、ASIC原型开发、测试测量、存储、数据安全、医疗电子、高性能计算以及各种定制设计中都有涉猎。总而言之FPGA所诞生并发展的时代是一个好时代与生俱来的一些特性也注定了它将会在这个时代的大舞台上大放光彩。1.5 FPGA开发流程如图1-9所示。这个流程图是一个相对比较高等级的FPGA开发流程从项目提上议程开始设计者需要进行FPGA功能的需求分析然后进行模块的划分比较复杂和庞大的设计则会通过模块划分把工作交给一个团队的多人协作完成。各个模块的具体任务和功能划分完毕通常各个模块间的通信和接口方式也同时被确定则可以着手进行详细设计包括代码输入、综合优化、实现映射和布局布线。为了保证设计达到预期要求各种设计的约束输入以及仿真验证也穿插其间。在EDA工具上验证无误后则可以生成下载配置文件烧录到实际器件中进行板级的调试工作。从图1-9中的箭头示意不难看出设计的迭代性是FPGA开发过程中的一个重要特点这就要求设计者从一开始就要非常认真细致否则后续的很多工作量可能就是不断返工。当然了对于没有实际工程经验的初学者而言这个流程图可能不是那么容易理解。不过没有关系我们会简化这个过程从实际操作角度以一个比较简化的顺序的方式来理解这个流程。如图1-10所示从大的方面来看FPGA开发流程不过是三个阶段第一个阶段是概念阶段或者也可以称之为架构阶段这个阶段的任务是项目前期的立项准备如需求的定义和分析、各个设计模块的划分第二个阶段是设计实现阶段这个阶段包括编写RTL代码、并对其进行初步的功能验证、逻辑综合和布局布线、时序验证这一阶段是详细设计阶段第三个阶段是FPGA器件实现除了器件烧录和板级调试外其实这个阶段也应该包括第二个阶段的布局布线和时序验证因为这两个步骤都是和FPGA器件紧密相关的。我们这么粗略的三个阶段划分并没有把FPGA整个设计流程完全的孤立开来恰恰相反从我们的阶段划分中我们也看到FPGA设计的各个环节是紧密衔接、相互影响的。第2章 FPGA板级电路设计本章导读本书所论及的所有实践工程将基于一套由多个电路板组成的FPGA开发平台这套开发平台既有以Altera Cyclone IV FPGA为基础的核心板也有诸如AD/DA、UART、USB2.0、CMOS摄像头、AV解码器、工业液晶屏接口、触摸屏接口、VGA接口、HDMI接口等外设为主的子板。本章将对基于FPGA的最小系统的各个设计要素进行讨论同时也会对我们将要使用的这套开发平台的各个电路板进行简要的介绍同时也会穿插着对电路设计的要点进行论述。2.1 FPGA板级电路设计五要素和纯粹基于PC的各种软件编程不同FPGA器件的学习仅靠一台PC是不够的。对于任何一个学习者而言能够拥有一块板载FPGA器件的电路板平台是非常必要的。当然了前期的开发调试肯定还是离不开PC的。和基于PC的软件编程如在Visual C工具上实现C/C语言的编程在各种网络编程工具上实现.net/java语言的编程相同的是可编程器件的开发也有专用的语言目前主流的语言是Verilog和VHDL和专用的开发工具如Xilinx公司的开发工具ISE/VivadoAltera公司的开发工具Quartus II以及其他的第三方工具。不同点也显而易见PC的软件编程由于最终就是实现在PC本地或者网络上那么它就不需要开发者配备额外的设备而基于FPGA器件的开发其最终的功能是需要实现在特定的FPGA器件内部的因此开发者势必需要首先具备载有FPGA器件的一块电路板。除此以外还需要具备一条用于连接PC和可编程器件的用于传输配置数据流的连接线我们通常称此连接线为“下载线”。如图2-1所示对于任何一个FPGA开发者而言一条下载线和一块板载FPGA器件的电路板应该说是最基本的硬件配备了。电路板的作用不言而喻我们设计的目的便是希望通过对板载的FPGA器件编程以控制电路板上的其他外设按照我们既定的功能运转而下载线是起到连接PC和电路板的作用它将协助开发人员将已经在PC的软件工具上预先设计好的功能配置数据流固化到电路板的FPGA器件中可用于前期的开发、调试以及产品化后的升级。既然需要一块板载FPGA器件的电路板那么这块电路板该如何设计呢如图2-2和图2-3所示分别为Xilinx公司最新的Zynq Soc FPGA开发板和Altera公司最新的Cyclone V Soc FPGA开发板。乍一看整齐有序且美观大方丰富的外设资源恐怕大伙都要垂涎三尺了而要咱们初学者也DIY一个那真叫“比骆驼穿过针的眼还难”。别心慌先抛开电路板各种各样复杂的外设功能我们可以先探讨一下单纯实现一片FPGA器件的核心电路即能让FPGA工作起来的最基本且元器件最少的电路是如何设计的。相比于其他嵌入式系统芯片的电路设计单纯的FPGA核心电路其实还算是非常简单的。根据过往的设计经验笔者简单地将FPGA核心电路归纳为五部分电源电路、时钟电路、复位电路、配置电路和外设电路我们姑且称之为五要素。下面我们将逐一探讨各个要素在FPGA器件的运行中扮演的角色及其常规电路的设计方式。2.1.1 能量供应——电源电路自然界的任何生物体都需要有能量的供应人需要吃饭喝水、花草树木需要阳光雨露、鸟兽虫鱼也都有可食之物。人工智能也是如此炉灶需要煤气、汽车需要加油、亮灯需要供电……小小的芯片工作起来也离不开能量的供给。FPGA器件需要有电源电压的能量供应才能工作。尤其对于规模较大的器件其功耗也相对较高其供电系统的好坏将直接影响到整个开发系统的稳定性。所以设计出高效率、高性能的FPGA供电系统具有极其重要的意义。不同的FPGA器件、不同的应用方式会有不同的电压电流的需求。如图2-4所示简单归纳可以将FPGA器件的电压需求分为三类核心电压、I/O电压和辅助电压。核心电压是FPGA内部各种逻辑电路正常工作运行所需要的基本电压该电压用于保证FPGA器件本身的工作。通常选定某一款FPGA器件其核心电压一般也都是一个固定值不会因为电路的不同应用而改变。核心电压值可以从官方提供的器件手册中找到。I/O电压顾名思义便是FPGA的I/O引脚工作所需的参考电压。在引脚排布上FPGA与ASIC最大的不同便是FPGA所有的可用信号引脚基本都可以作为普通I/O使用其电平值的高低完全由器件内部的逻辑决定。当然了它的高低电平标准也受限于所供给的I/O电压。任何一片FPGA器件它的I/O引脚通常会根据排布位置分为多个bank。同一个bank内的所有I/O引脚所供给的I/O电压是共用的可以给不同的bank提供不同的I/O电压它们彼此是不连通的。因此不同bank的不同I/O电压为FPGA器件的不同接口应用提供了灵活性。这里举一个例子Cyclone III系列器件的某些bank支持LVDS差分电平标准此时器件手册会要求设计者给用于LVDS差分应用的bank的I/O电压供1.5V电压这就不同于一般的LVTTL或LVCOMS的3.3V供电需求。而一旦这些用于LVDS传输的I/O bank电压供给为1.5V那么它就不能作为3.3V或其他电平值标准传输使用了。除了前面提到的核心电压和I/O电压FPGA器件工作所需的其他电压我们通常都称为辅助电压。例如FPGA器件下载配置所需的电压当然了这里的辅助电压值可能与核心电压值或I/O电压值是一致的。很多FPGA的PLL功能块的供电会有特殊要求也可以认为是辅助电压。由于PLL本身是模拟电路而FPGA其他部分的电路基本是数字电路因此PLL的输入电源电压也很有讲究需要专门的电容电路做滤波处理而它的电压值一般和I/O电压值不同。目前比较常见的供电解决方案主要是LDO稳压器、DC/DC芯片或电源模块。LDO稳压器为电流输出要求不高的应用提供了简单廉价的解决方案而基于DC/DC芯片的解决方案能够保证较高的电源转换效率散热容易一些输出电流也更大是大规模FPGA器件的最佳选择而电源模块简单实用并且能够有更稳定的性能只不过价格通常比较昂贵在成本要求不敏感的情况下是FPGA电源设计的一种最为简单快捷的解决方案。总而言之对于电源方案的选择以及电源电路的设计一定要事先做好前期的准备工作如以下几点是必须考虑的·器件需要供给几档电压压值分别是多少·不同电压档的最大电流要求是多少·不同电压档是否有上电顺序要求大部分的FPGA器件是没有此项要求的·电源去耦电容该如何分配和排布·电源电压是否需要设计特殊的去耦电路关于设计者需要确定的各种电气参数以及电源设计的各种注意事项其实在器件厂商提供的器件手册handbook、应用笔记application notes或是白皮书white paper中一般都会给出参考设计。所以设计者若希望能够较好地完成FPGA器件的电源电路设计事先阅读大量的官方文档是必须的。说到电源也不能不提一下地端GND电路的设计FPGA器件的地信号通常是和电压配对的。一般应用中统一共地连接是没有问题的但也需要注意特殊应用中是否有隔离要求。FPGA器件的引脚引出的地信号之间通常是导通的当然也不能排除有例外的情况。如果漏接个别地信号器件通常也能正常工作但是笔者也遇到过一些特殊的状况如Altera的Cyclone III器件底部的中央有个接地焊盘如果设计中忽略了这个接地信号那么FPGA很可能就不干活了因为这个地信号是连接FPGA内部的很多中间信号的地端它并不和FPGA的其他地信号直接导通。因此在设计中也一定要留意地信号的连接电源电路的任何细小疏忽都有可能导致器件的罢工。2.1.2 心脏跳动——时钟电路人体拥有非常奇妙的循环系统而心脏是这个循环系统的发动机它向全身各部位供应血液。如图2-5所示心脏有四个空腔上面两个叫心房atrium下面两个叫心室ventric1e。右心房收纳全身的静脉血通过右心室从肺动脉泵出此时肺动脉中流的是静脉血通过肺中的气体交换变成含氧丰富的动脉血由肺静脉送至左心房再通过左心室的主动脉泵向全身各个组织器官以满足其正常生理活动的需要。这便是人体无时无刻不在进行着的心跳过程。了解了心脏之于人体内部循环系统的作用反观时钟信号之于FPGA器件其实也有着异曲同工之妙。伴随着每一次的心跳过程都有血液的运转和流动同样的伴随着每一个时钟脉冲的产生也都有数字信号的输入和输出。对于在FPGA器件内实现的任何时序逻辑应用失去了时钟信号便意味着信号的传输将处于停滞状态。时钟信号的重要性可见一斑。如图2-6所示理想的时钟模型是一个占空比为50%且周期固定的方波。Tclk为一个时钟周期T1为高脉冲宽度T2为低脉冲宽度TclkT1T2。一般情况下FPGA器件内部的逻辑会在每个时钟周期的上升沿执行一次数据的输入和输出处理而在两个时钟上升沿的空闲时间里则可以用于执行各种各样复杂的处理。而一个比较耗时的复杂运算过程往往无法在一个时钟周期内切割成几个耗时较小的运算然后在数个时钟上升沿后输出最终的运算结果。时钟信号的引入不仅让所有的数字运算过程变成“可量化”的而且也能够将各种不相关的操作过程同步到一个节拍上协同工作。FPGA器件的时钟信号源一般来自外部我们通常使用晶体振荡器简称晶振产生时钟信号。当然了一些规模较大的FPGA器件内部都会有可以对时钟信号进行倍频或分频的专用时钟管理模块如PLL或DLL。由于FPGA器件内部使用的时钟信号往往不只是供给单个寄存器使用因为在实际应用中成百上千甚至更多的寄存器很可能共用一个时钟源那么从时钟源到不同寄存器间的延时也可能存在较大偏差我们通常称为时钟网络延时而我们知道这个时间差过大是很要命的。因此FPGA器件内部设计了一些称之为“全局时钟网络”的走线池。通过这种专用时钟网络走线同一时钟到达不同寄存器的时间差可以被控制到很小的范围内。而我们又如何能保证输入的时钟信号能够走“全局时钟网络”呢有多种方式对于外部输入的时钟信号只要将晶振产生的时钟信号连接到“全局时钟专用引脚”上而对于FPGA内部的高扇出控制信号通常工具软件会自动识别此类信号将其默认连接到“全局时钟网络”上而设计者若是不放心也可通过编译报告进行查看甚至可以手动添加这类信号。关于时钟电路的设计和选型有如下几个基本事项需要考虑·系统运行的时钟频率是多少可能有多个时钟·是否有内部的时钟管理单元可用通常是有它的输入频率范围是多少需要查看器件手册进行确认·尽可能选择专用的时钟输入引脚。·时钟走线尽可能短有条件最好做包地处理确保外部输入时钟信号干净、稳定。