AMD FPGA设计优化宝典笔记(3)控制集

控制集

1 控制集的个数要求

控制集 control set:因为 7 系列 FPGA,一个 slice 只能有一种控制集(触发器的使用方式 比如有复位/有时钟使能等等),多了就会分布到不同的 slice 里, 所以代码尽量统一触发器的控制集使用方式,不要超限制(xilinx 给出的比例是尽量小于总控制集个数的 7.5%)。合理的使用举例,总控制集数769个,用了37个,比例是4.8%,这是用tcl指令看的。

2 降低控制集个数的方法

有多种方法可以降低控制集。

从代码风格的角度看,方法1:只有在必要时才使用时钟使能或复位。
方法2:保持控制信号的极性一致,也就是都是高有效或低有效。
方法3:避免使用低扇出的异步复位、置位信号,但是异步复位、置位信号不受时钟的控制,所以综合工具无法将其搬移到数据路径上,使用异步复位或置位必然增加控制集

方法1的实际应用:

例如,

数据路径上经常会使用很多流水寄存器,因为在流水线上老的数据总会被新的数据冲掉,因此只需要在首级和末级使用复位即可。

同步复位触发器可以用 tcl 代码将其搬移到数据路径上,综合后的名字为寄存器的输出端名字加上_reg,把 EXTRACT_RESET 这个参数设置为no,意味着不允许工具提出复位信号 。起到中间级的寄存器不用复位的目的。

同步的置位使用同样的约束也可以将其搬到数据路径上,就是tcl指令稍微变一下。

再例如,

有三个触发器共享时钟端口:

第一个触发器既无复位也无置位,

第二个触发器只有同步置位,

第三个触发器只有同步复位。这原本会放置在三个不同的 SLICE 中,但使用 EXTRACT_RESET 为 no,将它们变成一致的,可将其放置在同一个SLICE 中,节约了资源和控制集

对于时钟使能信号,可以通过设置属性 EXTRACT_ ENABLE 为 no 将其搬到数据路径上,也节约了控制集。

再例如:用vivado工具来减小控制集

1 )尽量不用MAX_FANOUT来降低扇出(这是控制集与扇出的权衡)

2 )综合选项中 -control_opt_threshold的值设置大一点,控制集就小一点

3 )布局布线阶段(opt_design)阶段中,合并等效控制信号,用的选项是-control_set_merge等。

这些看工具中的提示,如果确定控制集超了,可以试着用这些方法。

相关推荐
暮乘白帝过重山4 分钟前
ArkTS 关键字速查笔记
笔记·arkts
Wild_Pointer.15 分钟前
技术书籍精读笔记:全景目录
笔记
d111111111d22 分钟前
W25Q60简介--SPI通信(笔记)
笔记·stm32·单片机·嵌入式硬件·学习
打工人你好30 分钟前
Android 应用逆向分析与架构研究笔记
android·笔记·架构
Dream Algorithm33 分钟前
合约持仓量和价格之间的关系
笔记·区块链
fmk10232 小时前
TailwindCSS 学习笔记
笔记·学习
摇滚侠3 小时前
Vue 项目实战《尚医通》,完成确定挂号业务,笔记46
java·开发语言·javascript·vue.js·笔记
摇滚侠3 小时前
Vue 项目实战《尚医通》,完成取消预约业务,笔记49
vue.js·笔记
Just right3 小时前
AndroidApp笔记环境配置
笔记
xinxingrs3 小时前
贪心算法、动态规划以及相关应用(python)
笔记·python·学习·算法·贪心算法·动态规划