STA-6. SDC是如何炼成的?IO约束篇 - 附Top和Block实战经验以及DDR接口时序

SDC设计约束——IO延时约束 文章目录约束命令对input delay的理解对output delay的理解 约束命令 set_input_delay -clock CLK -max 2.0 [get_ports IN] set_input_delay -clock CLK -min 2.0 [get_ports IN] 附加问题:input delay 和setup time之间大概的数量关系是? 对input delay的理解 从上图可以看出, 我们所要定义的输入延时是指被综合模块外的寄存器触发的信号在到达被综合模块之前经过 阅读详情
AI摘要

本文深入讲解SDC(Synopsys Design Constraints)在模块级和顶层的实战应用,涵盖时钟定义、IO约束及Exception,重点解析set_input_delay、set_output_delay等命令在不同场景下的运用技巧,包括虚拟时钟、端口Buffer的设置与DDR接口时序。

一般地,SDC主要分为三个部分:时钟定义,IO约束,Exception。相应地,我们也分上中下三篇进行讲解,最后还会有最重要的《验收篇》。

IO约束在顶层和模块级的主要命令都是以下几个,但是实际应用的复杂程度不可同日而语,本篇会先介绍模块级IO约束实战经验,然后讲解顶层IO约束复杂性,过程中会介绍DDR接口时序。

set_input_delay
set_output_delay
set_drive
set_driving_cell
set_input_transition
set_load
...

各个命令的具体用法可以在PT中通过man了解详情,这里就不费劲重复了:

pt_shell> man set_input_delay

模块级IO约束实战

上图给出了一种IN2REG路径的示意图,DUA为当前模块,外部有一个假想的虚拟寄存器在驱动CIN端口,这种情况下我们可通过以下命令来约束:

set period 8
create_clock -name CLKP -period $period [get_ports CLKP]
#创建同频率的虚拟时钟
create_clock -name vCLKP -period $period
#参考值为0.6,根据实际情况调整
set_input_delay [expr 0.6 * $period] -clock vCLKP [get_ports CIN]
#假设端口buffer为BUFX4
set_driving_cell -lib_cell BUFX4 -pin Z [get_ports CIN]

虚拟时钟的作用

使用set_input_delay时,可以指定真实时钟CLKP,也可以指定虚拟时钟vCLKP,在CTS之前是没有区别的。然而,在CTS之后,如果指定的是真实时钟,那么虚拟寄存器的时钟延迟就被忽略了。如果指定的是虚拟时钟,工具往往可以根据内部真实时钟的平均延迟来估算外部虚拟寄存器的时钟延迟,更加合理。

一般地,为了让顶层的时序更容易满足,在模块级优化的时候,都会对自己内部的IN2REG和REG2OUT路径约束更加严格,可以设置外部的延迟为60%的时钟周期,给内部的数据路径留40%的空间。不过,具体问题需要具体分析了。

需要注意,set_input_delay 可以指定-max和-min选项,分别对应setup和hold时序检查,如果只是指定其中一个选项,或者都不指定,那么工具在检查setup和hold时,会使用相同的值。

端口Buffer和set_driving_cell配合使用

在实际项目中,为了避免模块之间,或者模块和顶层之间IO接口部分出现时序问题,一般会要求在靠近IO端口的地方添加具有一定驱动能力的端口Buffer。在这种情况下,可以通过set_driving_cell来模拟端口的真实外部环境。假如没有端口Buffer,也可以通过set_input_transition大致指定输入端口的驱动能力。

总体来说,set_driving_cell会考虑到OCV的影响,input transition是查表计算出来的,而set_input_transition比较简单粗暴,在IO端口时序不那么关键的时候,也可以使用。但在顶层,一般使用后者,因为IO单元的输入电容较大,芯片外部具备驱动能力较强的器件,标准单元库中没有buffer能够驱动。

顶层IO约束实战

顶层IO约束在原理上与模块级没有本质区别,然而由于顶层需要与外部器件进行通讯,除了GPIO,还会接触到各种标准协议接口,例如UART,I2C,SPI,LVDS,DDR等等,在写SDC前需要读一读协议。更复杂的情况是,由于存在端口复用的情况,往往同一个端口具备多种时序要求,需要逐一定义。

上图是一个PinMux(也称为IOMux)的示意图,在SoC设计中非常常见,特别对于IO limited的芯片来说,PinMux是很有必要的。看似复杂,其实只要各个击破就能达到目标,SDC标准制定者已经为我们考虑到了这一点,通过set_input_delay的选项-add_delay,可以对同一个端口设置多重约束,例如:

set_input_delay [expr 0.6 * $periodA] -clock CLKA [get_ports CIN] -add_delay
set_input_delay [expr 0.3 * $periodB] -clock CLKB [get_ports CIN] -add_delay

另外,针对顶层输出数字端口,需要根据芯片使用的实际情况set_load,一般的GPIO端口负载电容都在pF级别。

FPGA板级验证实战:DesignWare IP集成、约束与调试全流程解析 在数字系统设计中,IP核(知识产权核)作为预验证的功能模块,是提升开发效率、实现复杂功能(如高速接口、处理器集成)的关键技术。其核心原理在于封装了标准协议或算法,通过可配置参数适配不同应用场景,从而避免重复设计,加速产品上市。然而,从仿真环境到物理硬件平台的迁移,常因时序、电气特性等物理因素引入巨大挑战,这使得板级验证成为确保设计可靠性的决定性环节。本文聚焦于Synopsys DesignWare这类高性能第三方IP在FPGA平台上的实战部署,深入剖析IP集成配置、物理及时序约束设计、以及利用ILA(集成逻 阅读详情

相关推荐

数字IC后端层次化设计全攻略:Block Partition与Pin Assignment实战

随着芯片制程不断微缩、集成规模跃升至亿门级,传统平坦式物理设计在容量、内存占用和迭代周期上逐渐逼近极限。层次化设计通过将大芯片拆解为多个可独立收敛的物理模块,并借助抽象模型与顶层协调机制,成为大型SoC后端实现的主流选择。其核心原理在于“局部化迭代”——将跨模块时序问题隔离在接口处,从而大幅提升团队并行效率和收敛速度。在工程实践中,合理的模块划分与精细的引脚分配是决定项目成败的关键步骤,直接影响到绕线拥塞、时序裕量和物理验证复杂度,广泛适用于CPU集群、多媒体SoC及数模混合芯片等项目。本文结合量产项目经验

weixin_34199335的博客 352

STA | 5. SDC是如何炼成的?时钟定义篇 - 附create_generated_clock花式定义方法!

前面几篇文章分别介绍了,Cell Delay,Net Delay,以及Path Delay。从《STA | 3. 如何做一条合格的Path》一文中可以看出,对于同步数字电路,只要在时序单...

graymount的博客 6950

FPGA双向端口(inout)设计实战:三态门原理与Verilog实现详解

在数字电路设计中,三态门是实现总线通信的核心硬件机制,它通过输出使能信号控制数据流向,使单一引脚兼具输入输出功能。其原理基于高阻态隔离技术,当使能无效时端口呈高阻,允许多设备共享总线而避免冲突。这一技术对提升芯片引脚利用率、简化PCB布局具有重要工程价值,广泛应用于SDRAM、I2C、共享数据总线等场景。本文以FPGA开发为背景,深入解析双向端口的设计范式,重点阐述如何通过Verilog语言规范建模三态逻辑,并针对I2C控制器等典型应用提供可复用的代码模板与仿真验证方案。

weixin_30631587的博客 356

STA | 8. SDC是如何炼成的?验收篇 - 如履薄冰

STA是由SDC驱动的,所以SDC的完整性、正确性和一致性直接决定着综合、布局布线以及STA的有效性。在STA系列开篇文章《STA | 0. 静态时序分析概述》就提到了其局限性,通过后仿...

graymount的博客 7083

芯片物理实现中的层级分区协同方法

芯片物理实现是数字集成电路设计的关键阶段,涉及从逻辑综合到版图生成的全流程。其中,层级化设计(Hierarchical Design)通过模块化抽象降低复杂度,而分区策略(Partitioning)直接影响布线拥塞、时序收敛与功耗分布。先进工艺节点(如16nm及以下)下,单纯自顶向下(Top-down)或自底向上(Bottom-up)流程易导致面积失真、拥塞误判与时序违例。真正的工程突破在于构建物理感知(Physical-aware)的双轨协同机制——以层级约束文件(HCF)为契约,在芯片规划与组装阶段实现

weixin_33951761的博客 290

国产FPGA管脚兼容替代Xilinx Artix-7实战指南

FPGA作为软件无线电(SDR)等实时信号处理系统的核心可编程硬件,其选型直接受限于逻辑规模、高速接口、时序收敛与功耗特性。Xilinx Artix-7系列(如XC7A75T、XC7A100T-FGG676)凭借28nm工艺、GTP收发器、丰富BRAM/DSP资源及成熟Vivado生态,长期占据中高端SDR主控地位。随着供应链风险加剧,国产FPGA的‘管脚兼容+功能对标+工具链可迁移’能力成为工程落地关键——它不再仅是参数替代,而是覆盖物理层(封装/IO/供电)、逻辑层(LUT/BRAM/DSP配比)与生态

weixin_34060299的博客 310

如何创建SDC文件(初学者)

用来描述设计人员对于时序设计的要求,比如时钟频率,输入输出的延时等。设计者需要告诉 EDA 工具,设计中所使用的时钟的频率是多少,然后工具才能按照所要求的时钟频率去优化布局布线,使设计能够在要求的时钟频率下正常工作。一般只用对输入时钟做约束。

m0_58427556的博客 3581

海思IC设计岗笔试核心考点:AXI协议与DFT能力图谱

AXI协议和DFT(可测性设计)是数字集成电路设计中的两大基础技术概念,分别支撑高速片上互连与流片后缺陷定位。AXI通过分离式握手机制实现地址、数据与响应通道的并行调度,其本质是解决时序收敛与吞吐优化的硬件协同问题;DFT则围绕scan chain、ATPG和JTAG构建测试可控性与可观测性,核心在于平衡测试覆盖率与芯片面积/功耗开销。二者共同构成SoC级系统验证与量产保障的技术底座,在华为海思COT与XPU岗位笔试中占据近70%权重,广泛应用于视频编解码IP集成、AI加速器微架构调试及PHY模块出厂测试等

weixin_34343308的博客 349

set_data_check:数字接口时序下限约束的核心原理与实战

在数字电路设计中,时序约束不仅需保障数据‘不迟到’(setup/hold),更需防止‘过早到达’引发的亚稳态或协议失效。set_data_check 正是建模此类‘数据最早稳定时间’的关键SDC原语,其本质是定义采样沿前数据必须保持有效的最小时间裕量,独立于主时序路径slack计算。该机制广泛应用于I2C、SPI、RGMII、MIPI等高速接口的物理层合规性验证,尤其对应datasheet中明确标注的tSU、tHD(min)、data valid window下限等关键参数。掌握其原理与配置,是实现FPGA

weixin_34378767的博客 378

【信息科学与工程学】【制造工程】第二十五篇 制造工程工艺05 HBM内存制造工程核心工艺方法详解 00 1~3nm代际(N3/N2系GPU die + HBM3/HBM3E 2.5D/3D堆叠语境)

1~3nm代际(N3/N2系GPU die + HBM3/HBM3E 2.5D/3D堆叠语境),字段内容编号​01类型​带宽/接口预算建模(代数+量纲分析)芯片类型​GPU(3nm代,N3/N2系)+ HBM3E 内存子系统领域​【结果/电路/时序】领域中的问题​给定 HBM 栈数 Ns​、每栈位宽 W、每引脚数据率 R(Gbps),求系统峰值 pin 带宽 Bmax​;并把 Bmax​与 GPU 计算吞吐(FLOPS)、显存容量 Ctot​关联成"带宽瓶颈条件"。问题的详细数学分析和解法​JEDEC HB

weixin_49199313的博客 190

【芯片前端】sdc学习日常——端口delay的正向设置与反向设置

前言 sdc的学习还在继续,这次的话题是设置input_max/min_delay / output_max/min_delay。 正向设置 设定一下模块的场景,假设一个模块有三个时钟域,对应的接口如下: set clka_ports{ \ clka_sig1 \ clka_sig2 \ } set clkb_ports{ \ clkb_sig* \ } set clk_sig{ \ clka \ clkb \ clkc \ } set rs.

moon9999的博客 1641

4.SDC---TCL基础知识

这段语句将在变量allgates中存储以下值"NAND AND NOR OR XNOR XOR"。可以看到,这个遍历程序可以让来自不同列表的项目混合在一起。将给出一个错误,指示无法处理参数。错误信息为:cannot find a channel named ‘Hello’

面朝大海 958

【IC前端虚拟项目】SDC文件编写与DC综合环境组织

最后是io.sdc的设置,mvu的接口实际上是比较简单的所以直接通过get_ports的方式把接口区分输入和输出拉出来就可以,注意要把时钟去除掉,一般我们也会把复位单独处理不过因为mvu面积不大一拍内复位信号抵达所有的寄存器也没有什么压力,所以保留在里面也没关系。这个文件中我们定义了后面要使用的众多变量,注意clk_period决定了时钟频率此处设置为1单位默认为ns,因此默认的综合频率是1Ghz,并且将uncertainty设置为1/200,latency设置为1/5,这里可以根据实际情况设置经验值。

moon9999的博客 1834

设计约束文件SDC

数字后端设计sdc文件详解

qq_61545726的博客 2万+

Xilinx时序约束指南 SDC编写指南

Xilinx时序约束指南,SDC编写指南 XILINX_时序约束使用指南中文.pdf sdc_command.pdf

DNF单机版搭建全攻略:从零开始到局域网联机(含常见问题解决)

本文提供详细的DNF单机版搭建指南,从环境配置到局域网联机设置,涵盖服务端安装、数据库配置及常见问题解决方案。适合新手和有经验的玩家,帮助快速搭建专属游戏服务器,重温经典游戏体验。

weixin_30832143的博客 848

SDC时序约束(1)- create_clock

扩展:http://wenku.baidu.com/link?url=akY_aflyoIkbmsuXXcIOs99iPGX1KvMhJaQy7lW1HNudc-0tInCosJVuc-R_iB8y9Y2M2E4uC503RiXlPS5rDoddK27AlnqYCYSBCA96d1S STA : http://wenku.baidu.com/view/966cd84ffe4733687e21

limanjihe的专栏 3万+

5分钟搞定!用Keil MDK将STM32F103C8T6工程无缝迁移到ZET6开发板

本文详细介绍了如何在Keil MDK环境下快速将STM32F103C8T6工程迁移到ZET6开发板,涵盖硬件差异对比、工程配置调整、外设适配及编译排错等关键步骤,帮助开发者5分钟内完成工程移植,大幅提升开发效率。

weixin_30879169的博客 409

以太网详解(五)GMII、RGMII、SGMII 接口时序约束(Quartus 平台)

由于大多数信号进入芯片内部都是需要和芯片内部进行数据传递的,所以必须通过约束inputdelay和outputdelay的方式告诉工具此处的timing信息,这样才能保证输入的信号能够被芯片内部正确的采样,从而保证芯片工作正常。如上图所示,如果在设计上没有对dina,douta的数据进行约束,那么STA工具并不能够得到由外部寄存器经过组合逻辑到达rega的时间,同时也不知道dina信号和输入的clk是什么关系(如果有多个时钟,到底和哪个时钟是有关的?

s1_mple的博客 7103

RK3588开发板实战:从零开始移植Ubuntu 24.04(讯为SDK版)

本文详细介绍了如何在RK3588开发板上从零开始移植Ubuntu 24.04系统(讯为SDK版),涵盖开发环境准备、SDK解析、根文件系统定制、驱动适配、系统集成与烧录等全流程。通过实战案例,帮助开发者快速掌握RK3588开发板的系统移植技巧,适用于嵌入式开发与定制化Linux系统构建。

sand8的博客 438

11、CUDA 内存优化:平铺矩阵乘法技术解析

本文深入解析了CUDA中的平铺矩阵乘法技术,重点介绍了如何利用共享内存和线程协作减少全局内存访问,提升计算效率。通过矩阵乘法实例,详细阐述了平铺算法的执行流程、内核代码实现及性能优化策略,包括平铺大小选择、线程同步机制和代码优化建议。文章还分析了该技术在深度学习、图像处理和科学计算等领域的应用价值,为CUDA程序的内存优化提供了系统性指导。

peace的博客 70
上一篇: 白山头讲PV: 用calibre进行layout之间的比对
下一篇: STA | 8. SDC是如何炼成的?验收篇 - 如履薄冰
白山头
博客等级 码龄7年 1115粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值