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

news2025/3/1 3:59:29

目录

面积结构设计

折叠流水线

基于控制的逻辑复用

资源共享

复位对面积的影响

无复位的资源

无置位的资源

无同步复位的资源

复位 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可能对面积有惊人的影响。
  • 利用置位/复位可能阻止一些组合逻辑的优化。
  • 当面积是考虑的关键时,尽可能避免利用置位和复位。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录】Day67哈希表:力扣242,383,1,349,202,454,15,18

目录 基础知识 哈希表 哈希函数 2.哈希碰撞 常见的哈希结构(三种) 数组 集合set 映射map 经典题目 数组作为哈希表 例题:力扣242 已完成 例题:力扣383 已完成 例题:力扣49 例题:力扣438 set…

小黑实习第二天,正在为hbase而头疼的leetcode之旅:671. 二叉树中第二小的节点

小黑代码(暴力) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def findSecondMinimumValue(self, root: …

执照吊销了能否恢复

一、执照吊销了能否恢复 1、按照法律规定,企业法人被吊销营业执照,只是企业解散程序的开始。《公司法》规定,企业法人被吊销营业执照后应当依法进行清算,清算程序结束并办理工商注销登记后,该企业法人才归…

间隔分区表merge into报错“-2903: 语句块/包/存储函数中的间隔分区不支持自动扩展”

描述 版本: DM V8 --08134283904-20220804-166351-20005 Pack4 初始化参数: 默认 ini参数: 默认 执行间隔分区表上执行merge into语句报错,信息如下: 同样的语句,在Oracle中执行正常。 测试 创建环境&a…

Springboot利用redis缓存,结合Aop与自定义注解实现接口节流

接口的节流是开发过程中为了防止单一微服务模块突然遭受太多并发导致用户服务不流畅而产生的业务需求,就是实现在固定时间内访问同一个接口的次数也固定。开发过程中通常采用redis去作为缓存去快存快取,对于需求次数较多的数据可以存储在redis内部&#…

Ansible剧本使用

剧本语言 剧本使用的yaml语言 yaml文件的后缀为.yml或者.yaml 使用空格做为缩进 相同层级的元素左侧对齐即可 缩进时不允许使用 Tab 键,只允许使用空格 创建剧本 直接编辑不存在会自动创建这个文件,先用touch新建也行 vim juben.yml编写剧本 hosts&am…

C语言零基础项目:2D 赛车游戏,详细思路+源码分享

目录 一、简介 二、如何建立一个地图包 三、关于碰撞图的绘制 四、游戏时的说明 五、如何更好地绘制赛场图与碰撞图? 游戏截图 源码下载 一、简介 此游戏是《2D 赛车》的”魔改版“——2.5D 双人赛车! 原作实现了 2D 视角的赛车游戏&#xff0c…

关于 国产麒麟系统赋值给双精度double时乘以1.0f编译器优化 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128459376 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

【 uniapp - 黑马优购 | 首页】小程序首页全局配置(home、网络请求、轮播图、分类...)

个人名片: 🐼作者简介:一名大二在校生,讨厌编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

csdn里的KaTex 公式语法

KaTex 语法 Accents 字母各种上下标 波浪,箭头,声调等 Delimiters 分隔符 大括号,小括号,方括号 Environments 行列式里多行多列数字表达式包含 HTML Letters and Unicode 字符和 Unicode Layout 布局 Spacing 空格 Logic and Se…

Centos系统,防火墙没开,docker部署的rabbitmq不能外网访问监听端口,但别的端口都能正常访问???

真是一个神奇的问题,防火墙firewalld ,iptables都没开。 之前访问都正常,最近可能是服务器被动了。rabbitmq的相关监听接口,只能本机服务器连接了,导致设备连接不了rabbitmq组件了。 排查问题记录 1.防火墙是否开启。发现是关闭…

web仿真或实际内存分析应用及自动化方案

js 自带 GC(垃圾回收)机制,因此绝大多数 web 开发人员不会在日常开发中考虑内存情况(包括本人),在多数业务场景中,这可能没有问题,但在一些核心web应用场景下(比如某个页…

【Spring(一)】初识Spring(史上最详细的Spring介绍!)

文章目录前言1.初识Spring2.Spring Framework系统架构3.核心概念前言 在学习 Spring 之前,我们需要先知道为什么要学习它?    IT业的任何一门技术,它只有抢占了很强的市场占有率,才会有更多的人使用和学习它,Spring技术在我们Java开发界拥…

APP怎么免费接入MobPush

1、获取AppKey 申请Appkey的流程,请点击 http://bbs.mob.com/thread-8212-1-1.html?fromuid70819 2、下载SDK 下载解压后,如下图: 目录结构 (1)Sample:演示Demo。(2)SDK&#…

【C操作符】详解操作符

操作符前言一、操作符分类二、算数操作符三、移位操作符(一)原码、补码、反码(二)操作符应用1.左移操作符(1)正数(2)负数(3)总结2.右移操作符(1&a…

《码出高效:java开发手册》六-数据结构与集合(二)

前言 接上篇,第六章第二部分,上篇讲到了红黑树的FixAfterInsertion方法,这个方法原理与fixAfterDelete类似,只讲这个添加时的调整方法 代码可以看到,调整后的根节点一定是黑色的,叶子节点可红可黑&#x…

Spring 之 @Import 注解使用与源码浅析

1、Import 的作用? 再说 Import 之前先回忆下 Component 的作用,在类上标注该注解,该类就能够被 Spring 扫描封装成 BeanDefinition 并注册到容器中。但现在需要将第三方 jar 包、或者其他路径下面的包中的类也要被扫描注册呢?使…

Unity 制作一个简单的星系

使用素材: 1.Planets with Space Background in Flat Style 2.Planet Icons 创建场景 编写脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Cytaster : MonoBehaviour {[SerializeField]private float rotate_s…

【LeetCode】矩阵置零 [M](矩阵)

73. 矩阵置零 - 力扣(LeetCode) 一、题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&a…

uni-app - 封装全局 API 调用弹框组件

uni-app - 在纯 JS 文件中调用自定义弹框组件 / 封装全局 API 调用弹框组件(解决小程序、APP 无法使用 document.body.appendChild 插入组件节点)适配全端 uni-app中实现一个全局弹层组件 引用超级全局组件方案 一、安装 npm install vue-inset-loade…