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等。

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

相关推荐
AA陈超2 小时前
ASC学习笔记0020:用于定义角色或Actor的默认属性值
c++·笔记·学习·ue5·虚幻引擎
IMPYLH3 小时前
Lua 的 collectgarbage 函数
开发语言·笔记·junit·单元测试·lua
思成不止于此4 小时前
深入理解 C++ 多态:从概念到实现的完整解析
开发语言·c++·笔记·学习·多态·c++40周年
谅望者5 小时前
数据分析笔记08:Python编程基础-数据类型与变量
数据库·笔记·python·数据分析·概率论
iiiiii115 小时前
【论文阅读笔记】多实例学习方法 Diverse Density(DD):在特征空间中寻找正概念的坐标
论文阅读·人工智能·笔记·机器学习·ai·学习方法·多实例学习
inputA6 小时前
【LwIP源码学习8】netbuf源码分析
android·c语言·笔记·嵌入式硬件·学习
JM丫6 小时前
内网理论知识总结
笔记·网络安全
d111111111d6 小时前
STM32外设学习-I2C(细节)--学习笔记
笔记·stm32·单片机·嵌入式硬件·学习
( ˶˙⚇˙˶ )୨⚑︎6 小时前
【学习笔记】DiffFNO: Diffusion Fourier Neural Operator
笔记·神经网络·学习
ModestCoder_6 小时前
【学习笔记】Diffusion Policy for Robotics
论文阅读·人工智能·笔记·学习·机器人·强化学习·具身智能