草庐IT

【读书笔记】高级FPGA设计之面积结构设计

Linest-5 2023-04-20 原文

目录

面积结构设计

折叠流水线

基于控制的逻辑复用

资源共享

复位对面积的影响

无复位的资源

无置位的资源

无同步复位的资源

复位 RAM

利用置位/复位触发器引脚

总结


面积结构设计

本篇讨论数字设计的三个主要物理特性的第二个:面积。并分析在FPGA中结构的面积优化方法。

针对面积的优化是尽可能复用逻辑资源,以速度为代价。为此经常要求一个递归的数据流,其中一级的输出反馈到输人端进行类似的处理,这可以是简单的环路,随着算法自然地流动,或者逻辑复用可能是复杂的,并要求专门的控制。这节描述这两种技术,也根据性能损失描述必要的结论。

介绍以下内容:

  • 在计算的不同级中为复用逻辑资源折叠流水线
  • 当不存在自然的流程时控制对逻辑复用的管理
  • 在不同的功能操作中共享逻辑资源
  • 复位对面积优化的影响:
  1. 缺少复位能力对FPGA资源的影响。
  2. 缺少置位能力对FPGA资源的影响。
  3. 缺少异步复位能力对FPGA资源的影响。
  4. RAM复位的影响。
  5. 为逻辑实现优化利用置位/复位引脚。

折叠流水线

折叠流水线的设计方法和流水线设计恰好相反,流水线的设计思想是以面积换速度,而折叠流水线的思想是以速度换面积。

折叠流水线可以优化在流水线级复制逻辑的流水线设计的面积。

举个例子:

两个8位宽的数相乘,如果直接用*进行相乘运算,这样可以在一个时钟周期得到结果,但是在这一个时钟周期逻辑链拉的特别场,在之前可以用流水线设计的思想对其进行流水设计,但是需要花费大量的中间寄存器资源,这里考虑折叠流水线,假设乘数分别为A和B,在计算时,每个时钟周期根据B的每一位对A进行移位相加,这样计算两个8位宽的乘法需要8个时钟周期,但是却减小了资源的使用,在这个设计中,只需要少量的寄存器和一个加法器即可。

优点:

  • 减少逻辑资源的使用,减小面积
  • 减小两寄存器之间的逻辑延时,优化了时序

缺点:

  • 减低了计算速度,计算单个结果需要花费多个时钟周期

基于控制的逻辑复用

共享逻辑资源有时要求专门的控制电路来决定哪些元件是到特定结构的输入。前一节描述了简单地对每个寄存器的位移位的乘法器,其中每个寄存器总是专用于运行加法器的特定输人。它有一个天然的数据流,使其本身适合逻辑复用。在其他应用中,常常对资源的输人有更复杂的变化,为了复用逻辑,某些控制可能是必须的。

当共享逻辑比控制逻辑更大时,控制可以直接用来逻辑复用。

为了确定这个变化,可以要求一个状态机作为附加的输人加到逻辑。

上面的说法理解起来很费解,说人话就是当连续做某种运算时,每次完成后会有标志信号产生,这个标志信号作为控制下次运算的起始控制信号就可以逻辑复用。

举个例子:

在进行三个乘法运算并相加,X=A*B+C*D+E*F,可以定义一个乘法IP进行调用,每次乘法运算完成后会有 done 信号指示运算完成,这是下一个乘法运算可以以这个done信号作为起始信号开始进行下一个乘法运算,以此类推,下一个乘法运算也可以这么操作,这样在控制信号上就使用了同一个 done 信号,也就是上面所谓的控制的逻辑复用。

资源共享

当利用术语资源共享时,不是指由FPGA的布局和布线工具执行的低层次优化,而是指高层次的结构资源共享,其中不同的资源在横跨不同的功能范围内共享。只要有功能块可以在设计的其他部分或者甚至在不同的模块利用,就可以利用这类资源共享。

举个例子:

比如在不同模块都需要使用计数器,A模块需要计数器为8位宽的,B模块需要计数器为16位宽的,这时可以只定义一个位宽为16的计数器,其中计数器的[7:0]作为模块A的计数器,整个计数器可以作为模块B的计数器。这样可以减小定义计数器的资源消耗,达到资源共享的目的。

复位对面积的影响

不正确的复位策略会导致浪费过多资源。

下面的几节描述许多不同的情况,其中复位在速度/面积特性中可以起重要的作用以及如何进行相应的优化。

无复位的资源

使用了同步复位和没有使用复位的设计综合出的资源消耗结果差别很大,含有复位会消耗更多资源,但是在一般的设计当中,复位设计是必不可少的。

无置位的资源

下面是使用置位的代码得到的资源消耗和复位设计相比较。

 

可以看出置位所消耗的逻辑资源远远大于复位消耗的资源,因此在设计中非必要不设计置位。

无同步复位的资源

下面是使用了异步复位的设计方法和同步复位作比较。

 

可以看出异步复位所消耗的逻辑资源远远大于同步复位消耗的资源,异步复位和同步复位有各自的优缺点,但是一般建议使用异步复位。

复位 RAM

在许多FPGA内置的RAM资源中有复位的资源,但是类似于上一节中描述的DSP资源,常常只有同步复位是有效的。企图对RAM模块实现异步复位可能是面积优化的大变动,因为除了较小的RAM资源之外,没有更小的元件可以最佳地构造RAM, 综合工具也不能轻易地添加几个门到输出端来仿真这个功能。

复位RAM通常是欠佳的设计实践,特别当复位还是异步的。

在上面的代码中,再一次只考虑的变化是复位的类型,同步与异步。例如,在Xilinx的Virtex-4器件中块RAM元件只有同步复位,所以采用同步复位,综合工具能够用单个块RAM实现这个代码,如图2-9所示。

但是,当用异步复位实现上面代码例子表示的相同RAM,综合工具将被迫使用较小的DRAM模块来产生相应尺寸的RAM模块,附加译码逻辑来产生合适尺寸的RAM,附加逻辑来实现异步复位,如图所示。最后实现的差别是惊人的,见表2-4。

利用置位/复位触发器引脚

大多数FPGA厂商有各种触发器元件在任何给定的器件中可用,并给定特定的逻辑功能,综合工具常常可以利用置位和复位引脚来实现逻辑形式,减少查找表的负荷。例如,考虑图2-11,在这个案例中,综合工具可能选择利用触发器的置位引脚实现逻辑,如图1-12所示。这样去除了门,增加了数据通道的速度。另外,考虑图2-13中所示形式的逻辑功能,把输入信号加到触发器的复位引脚,就可以将与门去除,如图2-14所示。

 利用置位/复位可能阻止一些组合逻辑的优化。

这里iDat3输人获得类似于有关触发器上复位引脚的特权。因此,逻辑功能可以如图2-17所示被实现。

在这个电路中有3个逻辑操作(取反、与和或),全部用单个触发器和无查找表实现。

因为这些优化不总是在设计被构造的时候所认识,当面积是考虑的关键时,只要有可能应避免利用置位和复位。

当面积是考虑的关键时,尽可能避免利用置位和复位。

总结

  • 折叠流水线可以优化在流水线级复制逻辑的流水线设计的面积。
  • 当共享逻辑比控制逻辑更大时,控制可以直接用来逻辑复用。
  • 对于面积是主要要求的紧凑设计,搜索在其他模块中有类似计数部件的资源,可以把他们放到层次上的全局位置,在多个功能范围之间共享。
  • 不正确的复位策略可以产生不必要的面积大的设计和抑制一些面积优化。
  • 优化的FPGA资源在不相容的复位分配到它时将不被利用,但利用一般的元件实现其功能,将占用更多的面积。
  • DSPs和其他多功能资源一般对复位策略的变化是不灵活的。
  • 不正确地复位一个RAM可能对面积有惊人的影响。
  • 利用置位/复位可能阻止一些组合逻辑的优化。
  • 当面积是考虑的关键时,尽可能避免利用置位和复位。

在数字设计中,速度和面积是相斥的,既快面积又小的设计是不可能的,因此需要根据实际情况,进行相应的取舍。

有关【读书笔记】高级FPGA设计之面积结构设计的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  4. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  5. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  6. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  7. ruby-on-rails - 一般建议和推荐的文件夹结构 - Sinatra - 2

    您将如何构建一个简单的Sinatra应用程序?我正在制作,我希望该应用具有以下功能:“应用程序”更像是一个包含所有信息的管理仪表板。然后另一个应用程序将通过REST访问信息。我还没有创建仪表板,只是从数据库中获取东西session和身份验证(尚未实现)您可以上传图片,其他应用可以显示这些图片我已经使用RSpec创建了一个测试文件通过Prawn生成报告目前的设置是这样的:app.rbtest_app.rb因为我实际上只有应用程序和测试文件。到目前为止,我已经将Datamapper用于ORM,将SQLite用于数据库。这是我的第一个Ruby/Sinatra项目,所以欢迎任何和所有建议-我应

  8. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

  9. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

  10. ruby-on-rails - 设计通过 reset_password_token 获取用户 - 2

    我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow

随机推荐