面向模块的综合技术之控制集优化(七)

面向模块的综合技术之控制集优化(七)


文章目录

  • 面向模块的综合技术之控制集优化(七)
  • 前言
  • 控制集优化
    • [1. 什么是控制集(Control Set)](#1. 什么是控制集(Control Set))
    • [2. 控制集分析](#2. 控制集分析)
    • [4. 优化四板斧](#4. 优化四板斧)
      • [4.1 合并复位 ------ 最大收益](#4.1 合并复位 —— 最大收益)
      • [4.2 合并 CE ------ 无 CE 就造"常有效"CE](#4.2 合并 CE —— 无 CE 就造“常有效”CE)
      • [4.3 消灭"集合只有 1 个 FF"的孤岛](#4.3 消灭“集合只有 1 个 FF”的孤岛)
      • [4.4 用 `SEQUENTIAL_LATE_CELL` + `set_case_analysis` 告诉工具"常有效"](#4.4 用 SEQUENTIAL_LATE_CELL + set_case_analysis 告诉工具“常有效”)
    • [5. 控制集与 retiming 的联动](#5. 控制集与 retiming 的联动)

前言


控制集优化


1. 什么是控制集(Control Set)

Xilinx FPGA 里 一个触发器 的控制信号由 4 张票决定:

票名 可选值 说明
CLK 任意时钟 net 时钟域
CE 任意使能 net / 1'b1 高/低有效均可
SR 任意复位/置位 net / 1'b0 高/低有效 + 同步/异步
SR 类型 {SYNC, ASYNC} 由 always 敏感列表决定

只要 任意一张不同 ,就是 不同控制集

对于7系列FPGA,每个SLICE中有8个触发器,这8个触发器共享时钟端口、时钟使能端口和置位/复位端口,因此,这8个触发器只有1个控制集

对于UltraScale系列FPGA,每个SLICE包含16个触发器。这16个触发器分为两组:对于上半部分的8个共享时钟端口和置位/复

位端口,每4个端口共享1个使能端口,所以有两组控制集;下半部分的8

个触发器亦是如此。


2. 控制集分析

Xilinx给出了控制集百分比指导值


tcl 复制代码
# 一键报表
report_control_sets -verbose -file ctrl.rpt
# 看数量
llength [lsort -unique [get_cells -hier -filter {PRIMITIVE_TYPE =~ FD*.*}]]

经验红线:

  • 7-Series ≤ 8 个 / UltraScale ≤ 16 个
  • 超过即开始优化,别等 place 失败再回头。

4. 优化四板斧

4.1 合并复位 ------ 最大收益

verilog 复制代码
// 优化前:五花八门
always @(posedge clk or negedge rst_a) ...
always @(posedge clk or posedge rst_b) ...

// 优化后:统一低电平复位
always @(posedge clk or negedge rst_n)
    if (!rst_n) ...
  • 高电平复位 → 加反相器宏:
verilog 复制代码
assign rst_n = ~rst_p; /* synthesis keep */
  • 异步复位 → 如非必要,改 同步释放;可省 SR 类型差异。

4.2 合并 CE ------ 无 CE 就造"常有效"CE

verilog 复制代码
wire ce_global = 1'b1;   // 常有效
(* keep *)
reg  a /* CE = ce_global */;
always @(posedge clk)
    if (ce_global) a <= d;
  • 不要直接写 always @(posedge clk) a <= d;
    工具会生成 CE=1'b1线名不同 → 仍算独立控制集!

4.3 消灭"集合只有 1 个 FF"的孤岛

tcl 复制代码
# 找出孤岛
report_control_sets -verbose -hierarchy | grep "Count.*1 "
  • 孤岛常来自 IP 或手写代码;wrapper 一层,把它的 CE/RST 接到 全局同名牌

4.4 用 SEQUENTIAL_LATE_CELL + set_case_analysis 告诉工具"常有效"

tcl 复制代码
set_property SEQUENTIAL_LATE_CELL TRUE [get_cells a]
set_case_analysis 1 [get_pins a/ce_global]

防止工具把 1'b1 优化回独立线,导致控制集再次分裂。


5. 控制集与 retiming 的联动

verilog 复制代码
// 优化前:不同控制集 → retiming 0 移动
// 优化后:同控制集 → 报告
Retiming moved 12 registers across 37 logic levels
WNS +0.38 ns

同控制集 = 同滑轨 → 寄存器可在 SLICE 内 横向滑纵向滑,retiming/folding/clockEnableOpt 全开。


相关推荐
尤老师FPGA8 小时前
HDMI数据的接收发送实验(十二)
fpga开发
坏孩子的诺亚方舟12 小时前
FPGA神经网络数学基础0
人工智能·神经网络·线性代数·fpga开发
熠速12 小时前
PolarBox高性能实时仿真系统
arm开发·fpga开发·嵌入式实时数据库·硬件在环半实物仿真
南檐巷上学13 小时前
基于Zynq-7020的带有正弦波发生器的8051软核设计
单片机·嵌入式硬件·fpga开发·fpga
思尔芯S2C14 小时前
FPGA原型验证中的内存模型应用:基于DDR5的Linux系统启动与测试
fpga开发·内存模型·ddr4·ddr5·memory model·hbm3·prototyping
hai3152475431 天前
RISC-V CVA6 AXI适配器+DMA桥蜂鸟E203处理器的总线接口单元(BIU)仲裁器
驱动开发·fpga开发·硬件架构·硬件工程·精益工程
高速上的乌龟1 天前
Lattice LFCPNX-100 HSB+Fpga开发详解:2.3 Hololink 顶层模块深度全解析
linux·fpga开发
ALINX技术博客1 天前
【FPGA 开发教程】基于 ALINX FPGA 开发板实现 USB3.2 高速通信(Z7-P+FL2010)
fpga开发·fpga·fmc子卡·usb3.2通信
Ricky05531 天前
搭载实时 FPGA 处理系统的航天器上用于海上监视的超分辨率YOLO目标检测技术(意大利2026年研究)
yolo·目标检测·fpga开发
kaizq1 天前
在线设计模仿平台StepFPGA应用实践
fpga开发·verilog编程·在线设计仿真·小脚丫stepfpga·图形化设计·risc-v_soc·ima-copilot-ds