OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4814|回复: 0

使用FPGA进行嵌入式设计:开发过程

[复制链接]

42

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2020-4-23
在线时间
22 小时
发表于 2021-5-18 16:37:51 | 显示全部楼层 |阅读模式
FPGA开发过程
尽管FPGA被广泛用于各种不同的应用领域,但有可能确定一套广泛适用于任何FPGA开发项目的开发步骤。本节按在项目中通常发生的顺序讨论了通常的FPGA开发步骤。
定义系统要求
开发新系统或开始对现有系统进行重大升级时,第一步是要对系统应该做的事情有一个清晰而详细的了解。需求定义过程始于对系统预期功能,操作模式和关键功能的一般描述。这些信息应以清晰明确的语言写出,并与参与开发工作成功与否的各方共享。共享系统要求的目的是在各方之间就描述的完整性和正确性达成共识。
要求说明必须充实,以包括系统性能要求水平的规范,例如输入信号的采样率和执行器输出命令的更新率。其他详细信息,例如物理尺寸限制,最小电池寿命和可忍受的环境温度范围,将指导设计过程。通常,必须制定一套全面的规范,以描述所有被认为与整体系统成功相关的系统参数的最低性能阈值。
在满足所有规定规格的任何设计解决方案必须是适当的解决方案的范围内,整套系统要求必须是完整的。如果发现出于某种不相关的原因而满足所有规范的设计被认为是不可接受的,则表示无法完全陈述系统要求。
例如,如果确定技术上合适的解决方案生产起来过于昂贵,那么问题的根源很可能是在需求开发过程中未能完全定义成本控制约束。
在定义并同意了顶级系统要求之后,通常需要将整个系统配置划分为子系统的集合,每个子系统具有统一的目的以及其自己的一组描述性要求和技术规范。在实时嵌入式系统体系结构中,数字处理能力很可能被表示为具有相应需求集合的子系统。
将功能分配给FPGA
如果系统体系结构中对数字处理的要求超出了微控制器和微处理器的能力,而微控制器和微处理器的能力本来就适合在系统中使用,则可以考虑在设计中加入FPGA。一些系统架构,特别是那些受益于执行并行操作的高速数字硬件的系统架构,是FPGA实现的自然选择。其他系统架构可能能够在传统的数字处理中获得足够的性能,但是可能会有宝贵的机会利用FPGA实现在计划的生命周期内提供的灵活性和可扩展性,从而可以对未来的系统进行重大升级。
在决定将FPGA纳入设计之后,下一步就是将整个系统数字处理要求的各个部分分配给FPGA器件。这通常包括FPGA输入和输出信号的规范,输入和输出的更新速率,以及FPGA必须与之交互的组件(包括ADC和RAM器件等)的标识。
识别所需的FPGA功能
定义了要由FPGA执行的功能,并了解到FPGA必须支持的其他设备的接口后,就可以开发出候选FPGA设备必须提供的功能列表。
一些FPGA系列是为低成本,复杂程度较低的应用而设计的,因此提供了有限的资源来实现数字逻辑。这些设备可能由电池供电,仅需要被动冷却。其他功能更强大的FPGA系列支持大规模的全功能数字设计,旨在以最高性能运行,并且可能需要连续的主动散热。
与嵌入式应用程序相关的系统要求将指导为该应用程序选择合适的FPGA系列。此时,由于尚未完全定义FPGA实现的资源要求,因此可能无法确定首选系列中的特定FPGA模型。但是,根据经验,有可能识别出少量适合设计的FPGA模型。
除了用于数字电路实现的FPGA资源外,许多FPGA模型还包括可能对系统设计很重要的其他功能。例如,内置ADC可能有助于最小化系统零件数。所需的和所需的FPGA功能列表将有助于进一步缩小为系统选择合适的FPGA器件的范围。
实施FPGA设计
在确定了候选FPGA模型之后,并掌握了分配给FPGA的功能的详细定义,是时候开始实施FPGA设计了。通常,这将涉及FPGA开发工具套件的使用,并且通常主要包括以该项目的首选语言开发HDL代码。
如果合适,FPGA的实现可以从顶层FPGA设计的框图表示开始。必要时,可以将以HDL或C / C ++开发的组件合并到模块设计中,以完成整个系统的实现。
或者,直接在HDL中开发整个系统设计也是很常见的。对于熟悉该语言并充分了解所使用的FPGA模型的功能和约束的开发人员而言,这可能会导致资源效率最高和性能最高的设计结果。
随着对初始设计的详细说明,FPGA开发将分阶段进行,直到产生FPGA器件的编程文件为止。对于大型项目,通常会多次迭代这些阶段,并在每次通过步骤时仅开发整个设计的一小部分。以下各节介绍了这些阶段。
设计输入
设计进入阶段是系统开发人员使用HDL代码,框图和/或C / C ++代码定义系统功能的阶段。代码和其他工件(例如框图)以抽象的方式定义了系统的逻辑功能。换句话说,设计工件定义了逻辑电路,但没有定义如何与系统的其余部分集成。
I / O规划
FPGA I / O计划是识别分配给特定I / O功能的引脚,并将任何设备功能(例如I / O信号标准)与每个信号相关联的过程。作为I / O计划过程的一部分,考虑诸如I / O引脚在物理设备封装上的位置等问题可能很重要。此步骤对于最小化高速信号的印刷电路板走线长度以及避免强迫电路信号走线彼此不必要地交叉非常重要。
I / O信号要求的定义是FPGA开发过程中的一种约束形式。其他主要约束类别包括确定FPGA解决方案性能的时序要求。FPGA综合过程使用HDL代码和项目约束条件来开发功能上正确的FPGA解决方案,以满足所有已定义的约束条件。如果该工具不能满足所有约束条件,则合成将失败。
合成
综合将源代码转换为称为网表的电路设计。网表表示从目标FPGA模型的资源构建的电路。网表表示电路的逻辑或原理图版本。它没有定义如何在物理FPGA器件中实现电路。这将在下一步中发生。
放置和路线
地方过程需要在网表和为它们分配到所选择的FPGA内的特定逻辑元件限定的FPGA资源。生成的资源放置必须满足任何限制这些元素分配的约束,包括I / O约束和时序约束。
在放置过程中为逻辑元素分配了物理位置之后,在布线过程中会配置逻辑元素之间的一组连接。路由实现了逻辑元件之间的所有连接,并使电路能够按照HDL代码中的描述运行。放置和布线操作完成后,将完全确定FPGA的配置。
比特流生成
FPGA开发过程的最后一步是生成比特流文件。为了获得最高的性能,大多数现代的FPGA器件都使用静态RAMSRAM)在内部存储其配置。
您可以将FPGA配置SRAM视为一个非常大的移位寄存器,其中可能包含数百万个位。该移位寄存器的内容完全指定了FPGA器件配置和操作的所有方面。在FPGA开发期间产生的比特流文件表示移位寄存器的设置,这些设置使器件执行HDL和约束条件指定的预期功能。就传统的软件开发过程而言,比特流文件类似于链接器生成的可执行程序。
SRAM易失,并且每次断开设备电源时都会丢失其内容。实时嵌入式系统架构必须提供一种在每次加电时将比特流文件加载到FPGA中的方法。通常,在每个开机周期内,从位于设备内的闪存中或从与设备连接的外部源(例如PC)中加载位流。
完成FPGA位流的编译后,下一步是测试实现以验证其是否正确运行。此步骤与传统软件构建过程结束时所需的测试没有什么不同。
测试实施
FPGA开发易受传统软件开发工作困扰的所有错误类型的影响。在FPGA开发期间,您可能会收到许多与错误语法有关的错误消息,尝试使用当前无法访问的资源以及许多其他类型的违规信息。与任何编程工作一样,您将需要确定每个错误的来源并解决问题。
即使在FPGA应用程序成功完成所有阶段直至生成比特流之后,也无法保证设计会按预期执行。为了在合理的时间表上成功完成设计,在开发的每个阶段进行适当的测试绝对至关重要。
测试的第一阶段应彻底行使HDL代码的行为,以证明其按预期执行。本章末尾的示例项目将演示如何使用Vivado工具套件对设计中的HDL逻辑进行全面测试。
生成比特流后,就无法替代在最终系统配置中实现的FPGA全面测试。此测试必须彻底行使FPGA的所有功能和模式,包括其对超出范围和错误条件的响应。
在设计,开发和测试过程的每个步骤中,项目人员必须始终注意实现可能在不太可能或罕见的情况下容易受到不当行为影响的系统功能的可能性。此类问题的发生可能表示很难复制的错误,并且可能永远损害嵌入式系统设计和生产该系统的组织的认知。如果您出色地进行测试,则可以大幅度降低这种结果的可能性。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 18:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表