0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何实现FPGA的可重复性设计

FPGA设计论坛 来源:未知 2023-02-09 03:05 次阅读

HDL 设计
具有非常高的资源利用率和频率要求的设计要获得可重复的结果是一件最具挑战性的事情,但是它们也是最需要可重复结果的设计。获得可重复结果的第一步是良好的设计实现(RTL)。已经有几篇关于这个主题的论文,但本文有一些重点和一般建议。

HDL 修改
通常,HDL 修改是解决时序问题的最佳方法。如果两条不同的路径需要相同的资源(逻辑组件或布线)来满足时序要求,那么其中一条路径将失败。如果修改 HDL 以使时序更容易满足,那么这将不是问题。

良好的层次边界
遵循良好的分层边界设计有助于逻辑整合,这有助于在进行设计更改时保持可重复的结果。需要遵循的几条规则包括:

将需要优化、实现和验证的逻辑放在同一个层次结构中
寄存模块的输入和输出,这包括了模块内的时序路径
将需要打包到更大 FPGA 资源(例如 Block RAMDSP)中的所有逻辑保持在同一层次结构中
逻辑级数
LUT 逻辑级别过多的设计很难获得可重复的结果。通常,问题不是 LUT 延迟,而是 LUT 之间的布线延迟。这在设计的高性能领域极为重要。以下是太多逻辑级别的一些常见来源:

大型的 if/else 结构
大型 case结构 — 适当使用“full_case”和“parallel_case”Verilog 指令来优化逻辑较少的 case 语句,这通常可以减少逻辑级数
多路复用器/解码器——大型多路复用器/解码器会造成路由拥塞,从而导致不可重复的结果。多级寄存多路复用器/解码器路径可以帮助解决此问题
加法器——使用加法器链而不是加法器树。加法器链提高了性能,同时降低了设备利用率和功耗。(但是,它们确实在设计中引入了延迟。)
有关编码最佳实现的更多信息,请参阅 WP231, HDL Coding Practices to Accelerate Design Performance

复位和其他控制信号
复位的选择会影响设计的性能、面积和功耗。上电时电路初始化不需要全局复位,但全局复位会对设计中可使用的资源类型产生重大影响。例如:

如果 HDL 中存在全局复位,则无法推断移位寄存器 (SRL)。一个移位寄存器与十个寄存器相比,会产生更多可重复的结果。
DSP 和 Block RAM 寄存器仅包含同步复位。如果代码中使用了异步复位,这些寄存器就不能使用,强制使用CLB寄存器。如果将寄存器打包到 DSP 和/或块 RAM 中,则相同的结果更易于维护。
在通用逻辑上使用同步复位可能会降低逻辑级数。slice里的寄存器可以有异步或同步复位。如果设计使用同步复位,则同步设置可供组合逻辑使用。这可以减少一级逻辑级数
控制集由一组独特的时钟、时钟使能、设置、复位组成,在分布式 RAM 的情况下,还包括写使能信号。控制集信息很重要,因为寄存器必须共享相同的控制集才能打包在同一SLICE中。这会影响SLICE利用率,产生可重复的结果问题。
有关复位的更多信息,请参阅 WP272, Get Smart About Reset: Think Local, Not Global

有关控制集的更多信息,请参阅 WP309,Targeting and Retargeting Guide for Spartan-6 FPGA

了解 FPGA 资源
了解可用的 FPGA 资源以及何时如何使用它们非常重要。通常,有综合指令来定义应该使用哪些资源。

Block RAM — 最适合深存储器要求。
分布式 RAM — 适用于宽总线,尤其是在高速数据由区域时钟提供时钟的情况下。
RAM 控制信号 — 块 RAM 和分布式 RAM 都可能存在控制信号扇出较大的问题。复制控制信号并使用布局规划技术将具有相同信号的模块保持在一起有助于保持可重复的结果。
移位寄存器——SRL 可以降低设计的利用率,这有助于实现可重复性。有几个性能问题需要牢记:
SRL 的时钟输出比 FF 的时钟输出慢;因此,使用 FF 作为移位寄存器的最后一级是有用的。大多数综合工具会自动执行此操作,但如果涉及移位寄存器的路径存在问题,最好确认最后一级是寄存器。
在 SRL 前面有一个 FF 为布局器提供了更多选择来满足时序要求,从而保持结果。同样,大多数综合工具会自动执行此操作,但如果涉及移位寄存器的路径存在问题,最好确认第一阶段是寄存器。
寄存器 — FPGA 有许多寄存器,使流水线成为提高性能的有用技术。在多个流水线触发器上禁用 SRL 推断非常重要。
有关 Block RAM 的更多信息,请参见 WP231, HDL Coding Practices to Accelerate Design Performance

有关移位寄存器的更多信息,请参见 WP271, Saving Costs with the SRL16E

时钟域问题
必须正确约束跨不相关时钟域的路径。来自同一源时钟(例如 DCM)的时钟由工具自动关联。PERIOD 约束也可以关联外部时钟。

未在设备内部创建的不相关时钟需要特别考虑。默认情况下,这些时钟不受工具限制。如果有特殊的时序考虑,则需要使用 FROM:TO 约束来正确约束路径。DATAPATHONLY 关键字告诉工具不要在方程式中包含时钟偏差。

有关详细信息,请参阅中的“异步时钟域”部分UG625, Constraints Guide,或WP257, What Are PERIOD Constraints?

确保不发生竞争条件也很重要。当从一个时钟域跨越到另一个时钟域时,可以使用 FIFO。如果条件不允许,则应仅对一个控制信号进行双同步,并且该控制信号应在接收时钟域中用于接收其他信号。

高扇出信号
通常,高扇出信号可能是设计中的门控因素。尽管大多数综合工具都有扇出控制,但建议在 HDL 中复制这些信号以获得更多可重复的结果。这需要与指令相结合,以确保合成工具不会删除重复项。如果高扇出信号在顶层逻辑中,一种方法是复制该信号,然后用单独的信号驱动每个顶层模块。

如果综合工具扇出控制没有给出期望的结果,并且修改 HDL 不合适,那么在 MAP 中使用寄存器复制以及最大扇出约束通常会比综合做出更好的寄存器复制选择。有关详细信息,请参阅 MAX_FANOUT UG625, Constraints Guide。

信号名称
作为一般调试问题,如果信号名称在跨层次结构时保持不变,则更容易跟踪问题路径。如果名称不断更改,则很难在时序报告和其他调试输出中跟踪。将信号方向放在所有模块或实体的端口定义上也很有帮助。

综合优化
综合对可重复的结果有很大的影响。如果综合输出的网表不是最优的,那么实现工具就不可能有理想的条件。可以使用多种综合技术来帮助改进实现结果:

运行综合时使用时序约束。在综合期间过度约束是很常见的,然后放宽Vivado工具中的时序约束。这使得综合工具更加工作,减轻了实现工具的负担。
使用综合工具的时序报告。如果一条路径在综合和实现中的时序失败,修改 HDL 或综合选项以满足综合后的时序。这可以节省实施运行期间的时间。
在实施工具中获得可重复结果的最佳方法是综合过程中的可重复结果。大多数综合工具支持自下而上的流程,为顶层设计和每个较低层模块提供单独的综合项目。用户可以根据 HDL 变化控制更新哪个网表。
大多数综合工具都有增量流程。
布局
布局规划将组件的放置锁定到特定位置或范围。这减少了放置的可变性,增加了设计的可重复性。更好的性能几乎总是可以通过布局规划和/或使用位置约束来获得。也就是说,糟糕的布局或糟糕的位置限制可能会导致无法满足时序要求。布局在某种程度上是一门艺术,需要对工具和设计有深入的了解。符合时序的实现结果可用作创建良好布局的指南。有几个不同的布局层级:

Pinout Selection
Area Group Floorplanning
Locating Core Blocks
Locating the Entire Module
Locating the Critical Path
引脚选择
如果主要根据电路板要求选择引脚,FPGA 实现工具可能很难保持可重复的结果。以下建议有助于实现可重复性:

注意数据流向。例如,数据可以从中心 I/O 传输到侧 I/O。
将所有与总线相关的管脚保持在 FPGA 的同一区域,以限制控制信号的布线距离。
I/O 总线控制信号应放置在地址和数据总线附近。
要一起优化的信号需要放在一起。
如果电路板布线是更重要的因素,那么I/O 上的流水线寄存器可以通过更少的引脚来帮助 FPGA 布线。
区域组布局
区域组布局规划很容易做到,但它经常被误用,造成糟糕的布局规划,产生的问题反而多于解决的问题。良好布局的一些一般准则包括:

保持所有区域组的利用率相似。例如,不要一个利用率在 60%,另一个则在 99%。
不要使用重叠区域组。一个例外是,如果两个不同的区域组有一些逻辑元素需要放在一起,则可以接受一两行或两列 CLB 的重叠。然后,用户负责确保有足够的资源用于两个区域组约束。如果设计中有两个不同的逻辑部分需要位于同一物理位置,请将这两个逻辑部分放入同一区域组。
一级嵌套通常是可以接受的。如果较大区域组的一小部分需要位于狭窄区域中,这可能是必要的。
布局只是设计的关键部分。
连接到固定资源(例如,I/O、收发器处理器块)的逻辑可能会受益于布局。
使用良好实现运行的结果作为确定布局或时序问题的指南。PlanAhead 软件和时序分析器等工具可以帮助可视化解决问题。
尽量减少用于每个全局时钟的区域数量以及每个区域中的时钟数量(区域和全局),这通常很有帮助。如果要向时钟区域添加更多逻辑,请不要过度约束并应该相应计划。当一个时钟区域中的所有时钟都被使用时,很难找到一个有效的布局。使用 PlanAhead 软件的捕捉时钟区域的能力可以使布局规划更容易。对于具有 10 多个全局时钟的 Virtex FPGA 设计,当前实现中使用的时钟区域位于 .map 报告文件中。UCF 约束也包含在此文件中。
有关区域组布局规划的更多信息,请参阅UG632, PlanAhead User Guide 和UG633, Floorplanning Methodology Guide。

Locating Core Blocks
通常,定位核心组件,例如 BRAM、FIFO、DSP、DCM 和全局时钟资源有助于实现可重复性。最好通过查看良好的布局并使用设计知识来验证这些是处于良好的位置来完成。在定位这些BRAM、FIFO 和 DSP 组件时,应考虑控制信号和数据流向(总线对齐)。在 .map 报告文件中可以找到用于定位现有设计的时钟区域的约束。保持相同的时钟区域可防止布局器更改时钟区域划分,这可能会改变设计的布局规划。使用 reportgen -clock_regions design.ncd 创建报告。

定位整个模块
PlanAhead 软件能够锁定关键模块上的所有布局信息。下次运行时,布局相同,但不保存布线信息。有关 PlanAhead 软件中位置约束的更多信息,请参见 UG632,PlanAhead User Guide.

定位关键路径
如果锁定整个模块是多余的,则可以在 PlanAhead 软件中锁定关键路径。这种技术应该以非常有限的方式使用。如果存在导致大多数问题的特定路径,则最好通过更改 HDL 来解决时序问题。如果这是不可能的,有限使用定位特定时序路径可能会有所帮助。

实现选项
实现工具中的几个选项提高了可重复性。以下是一些有助于保持可重复结果的一般准则:

使用分区的设计保留是保留实现的最佳方法,但它并不适合所有设计,而且它确实有 HDL 设计要求。
SmartGuide 技术是保持可重复结果的另一种选择。这最适用于没有推动绝对最大 QoR 或利用率的设计。
如果设计保留或 SmartGuide 技术不适合设计,则使用 SmartXplorer 或 PlanAhead 软件策略来保持时序。
对于具有高 QoR 要求的设计,有高级实现选项可帮助保持时序。
管理利用率是保持可重复结果的关键。
在整个设计阶段保持相同的软件版本有助于实现可重复的结果
设计保留
设计保留流程使用分区。这是保证可重复结果的唯一方法。设计保留的主要目标是实现一致的模块性能,以减少时序收敛阶段的时间量。它还要求用户对遵循良好的设计实践做出最大的承诺。

分区保留先前已实现的设计的未更改部分。如果分区的网表未更改,则实现工具使用“复制粘贴”过程来保证保留该分区的实现数据。通过保留实现结果,分区可以在不影响设计的保留部分的情况下实现设计的修改部分。在 12.1 和未来版本中,PlanAhead 软件和命令行工具支持设计保留。

有关设计保留的更多信息,请参阅 WP362,Repeatable Results with Design Preservation,以及 UG748,Hierarchical Design Methodology Guide.

SmartGuide 技术
SmartGuide 技术在运行实现时使用之前的实现结果作为起点。SmartGuide 技术的主要目标是减少运行时间。可以移动引导布局和/或布线,以便对设计进行布线或满足时序要求。SmartGuide 技术最适用于不试图突破 QoR 或利用率限制的设计。

在以前版本的工具中,有一个精确指南和一个杠杆指南。通常,精确的指导方法会导致设计无法路由。如果需要精确保存,则建议的流程是设计保存。杠杆式指南已被 SmartGuide 技术取代。

经常有人问是否应该使用 SmartGuide 技术或分区。答案取决于设计师在设计流程中的位置。在进行小的设计更改时,应在设计周期结束时使用 SmartGuide 技术。使用此流程,很容易看出提议的更改是否适用于设计。分区需要更大的承诺来遵循良好的设计层次结构规则。应在何时决定使用分区的设计保存流程开始组织HDL。此规则的一个例外是当设计已经遵循分区的分层规则时。

有关详细信息,请参阅设计注意事项章节 UG626, Synthesis and Simulation Design Guide。

SmartXplorer
SmartXplorer 和 PlanAhead 软件是有助于实现时序收敛的工具。这两种工具都运行不同的实现选项集,以找到最适合设计的方案。然后可以使用这些结果来查看哪些布局往往具有更好的时序结果。然后可以使用这些布局结果来创建良好的区域组布局规划。不同的结果也可能指向设计问题。如果同一路径在所有运行中都失败,则更改 HDL 以消除时序问题是有益的。

SmartXplorer(Variability Passes)和 PlanAhead 软件的另一个很好的用途是使用不同的成本表运行多个实施。成本表会影响设计的初始布局。通常,不同的起点允许处于满足时序边缘的设计满足时序。运行前十个成本表通常就足够了。一旦找到一个好的成本表,它通常可以用于多次设计迭代。当它不再工作时,用户需要搜索一个新的。SmartXplorer 还支持 XST 综合的不同选项。应该使用这种方法找到用户设计的最佳综合选项。

有关这两种工具的详细信息,请参阅 WP287, Timing Closure Exploration Tools with SmartXplorer and PlanAhead Tools.

高级实施选项
在设计之初,建议对 MAP 和 PAR 使用默认的尝试。一开始使用过多的高级选项会隐藏时序问题,而修改 HDL 可以最好地解决这个问题。当设备利用率增加时,工具越来越难以收敛到符合时序的解决方案。如果使用默认选项,则可以使用更高工作量的选项来获得设计流程后期的最后几皮秒时序,从而保持时序结果。有关实施选项的更多信息,请参见 UG628,Command Line Tools User Guide.

管理利用率
LUTS/FFS 利用率低 (<25%) 或 LUTS/FFS 利用率高 (>75%) 的设计可能难以一致地布局和布线。对于利用率高的设计,请查看slice控制集、复位(FPGA 通常不需要同步复位/设置)、逻辑使用率高于预期的模块(在 PlanAhead 中很容易完成),或者是否正在发生 SRL/DSP48 推理。

高利用率的另一面是低利用率。对于所有组件类型的利用率为 25% 或更少的设计,低利用率算法会生效并保持组件紧密放置。但是,如果 I/O 利用率超过 25%,则实施工具可以分散设计,以便将逻辑保持在 I/O 附近。仔细放置 I/O 和使用区域组可以最大限度地减少此问题。

软件版本
尽量在时序收敛阶段使用同一版本的综合软件。因为不同版本的软件可能对时序收敛的算法并不一致。

结论
有很多种方法来实现设计的可重复性。最好的方法是保持合理高效的HDL设计准则,且通过修改HDL的方式来对时序收敛。如果这种方法无法实现可重复性,则可以通过使用综合、实现、布局策略来实现。设计保留使用分区来保证数据流。SmartXplorer是一种使用之前实现结果的技术。如果一个设计的资源使用率非常高且有很高的质量要求,那么最好的方法可能是通过 PlanAhead 或者SmartXplorer软件以设定不同的布局和实现选项来实现单一的扁平化设计。






扫描二维码获取

更多精彩

FPGA设计论坛




欢迎关注至芯科技

至芯官网:www.zxopen.com

至芯科技技术论坛:www.fpgaw.com

至芯科技淘宝网址:

https://zxopen.taobao.com

至芯科技FPGA初级课程(B站):

https://space.bilibili.com/521850676

至芯科技FPGA在线课程(腾讯课堂):

https://zxopenbj.ke.qq.com/

至芯科技-FPGA 交流群(QQ):282124839

更多资料下载欢迎注册http://www.fpgaw.com





扫码加微信回复加群

邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!




点个在看你最好看





原文标题:如何实现FPGA的可重复性设计

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1604

    文章

    21340

    浏览量

    594112

原文标题:如何实现FPGA的可重复性设计

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA与ARM的本质区别

    包括可配置逻辑模块、输入输出模块和内部连线等部分,允许用户通过软件进行配置和编程来完成特定功能。这种特性使得FPGA具有高性能和实时性,以及高度的灵活性和重复性。而ARM则是一种基于RISC架构
    发表于 04-28 09:00

    FPGA与ARM的本质区别是什么?

    包括可配置逻辑模块、输入输出模块和内部连线等部分,允许用户通过软件进行配置和编程来完成特定功能。这种特性使得FPGA具有高性能和实时性,以及高度的灵活性和重复性。而ARM则是一种基于RISC架构
    发表于 04-28 08:56

    传感器技术参数常见规格与指标

    传感器的重复性是指,在相同条件下同方向重复多次测量时,测量结果之间的差异。又称重复误差、再现误差等。重复性误差越小,重复性越好,传感器的稳定
    发表于 03-20 14:05 187次阅读
    传感器技术参数常见规格与指标

    伺服编码器分辨率越高越快吗

    “可重复性“是指在外部状态不变的情况下,重现相同结果的能力。某些情况下,“可重复性”可能比精度更加重要。这是因为,如果系统具有可重复性,那么可以通过补偿取消掉误差。
    的头像 发表于 03-18 17:26 469次阅读
    伺服编码器分辨率越高越快吗

    PySnooper:替代print的重复性工作

    麻烦。 现在,有了PySnooper,您并不需要配置那么复杂的Debug工具,就能够完成对整个代码的分析。它能告诉您哪些代码正在运行,以及局部变量的值是什么。 其实,PySnooper 就是替代了一行一行print的重复性工作,给你的代码一个pysnooper装饰器,它能自动识别到语句和变量
    的头像 发表于 10-30 10:41 206次阅读

    自适应微带相控阵天线建模模块设计

    基于matlab结合matlab-feko-APIs接口函数库可以实现对FEKO的二次开发,在CADfeko上实现复杂结构+重复性结构问题的快速仿真建模,其可以兼顾CADFEKO的直观性和简易性以及
    的头像 发表于 10-19 09:48 319次阅读
    自适应微带相控阵天线建模模块设计

    GPGPU和NPU技术路线对比

    FPGA是一种半定制芯片,对芯片硬件层可以灵活编译。但是缺点也比较明显,当处理的任务重复性不强、逻辑较为复杂时,FPGA效率就会比较差。
    发表于 09-26 14:20 2722次阅读
    GPGPU和NPU技术路线对比

    贴片机的贴装头重复地返回设定位置的能力

    重复是描述贴片机的贴装头重复地返回某一设定位置的能力,有时也称可重复性。它反映了贴片头多次到达一个贴装位置时偏差之间的敛散程度,相当于测量学中的精密度概念。但是如前面贴装提到的一样,贴片机的特性和工作机理更接近数控机床。
    发表于 09-15 15:06 172次阅读
    贴片机的贴装头<b class='flag-5'>重复</b>地返回设定位置的能力

    直驱电机选型与应用指南(三)

    12、准确性和可重复性间隙和刚性也有助于机构的定位精度和可重复性。精度是衡量偏离理想状况的指标。例如,如果命令机器移动90度,它是否正好移动90.000度?或者如果你从外部测量,它是否只移动
    的头像 发表于 09-10 08:09 431次阅读
    直驱电机选型与应用指南(三)

    计量标准的重复性考核要求

    在进行重复性测量时,相同的测量程序,相同的观测者,使用相同的仪器,以及相同地点等要求一般均能得到满足而不会有任何问题。关键是如何理解“在相同的条件下”以及“在短时间内重复测量”这两条要求。
    的头像 发表于 07-19 15:52 919次阅读
    计量标准的<b class='flag-5'>重复性</b>考核要求

    人工智能的普及是否会影响我们就业

    人工智能的普及对就业市场有潜在的影响。虽然人工智能技术可以提高生产效率、自动化重复性任务和创造新的就业机会,但它也可能替代某些工作岗位。 一方面,人工智能可以通过自动化和智能化技术来执行重复性和机械
    的头像 发表于 07-07 16:30 650次阅读
    人工智能的普及是否会影响我们就业

    您的公差范围有多宽?

    您有时需要注意传感器的哪个部分很重要。例如,在4/20mA DAC(数模转换器)中,ADC(模数转换器)作为诊断,重要的是DAC的可重复性还是ADC(模数转换器)的可重复性。我会让你自己弄清楚的。
    的头像 发表于 06-28 11:14 234次阅读
    您的公差范围有多宽?

    在Verilog中利用函数将重复性的行为级设计进行提取

    在 Verilog 中,可以利用任务(关键字为 task)或函数(关键字为 function),将重复性的行为级设计进行提取,并在多个地方调用,来避免重复代码的多次编写,使代码更加的简洁、易懂。
    的头像 发表于 06-02 11:39 890次阅读
    在Verilog中利用函数将<b class='flag-5'>重复性</b>的行为级设计进行提取

    用Verilog函数实现一个数据大小端转换的功能

    在 Verilog 中,可以利用任务(关键字为 task)或函数(关键字为 function),将重复性的行为级设计进行提取,并在多个地方调用,来避免重复代码的多次编写,使代码更加的简洁、易懂。
    的头像 发表于 06-01 16:31 1049次阅读
    用Verilog函数<b class='flag-5'>实现</b>一个数据大小端转换的功能