FPGA设计时序约束六、设置最大/最小时延

news2024/11/15 17:42:50

目录

一、背景

二、Max/Min_delay约束

2.1 约束设置参数

2.2 约束说明

三、工程示例

3.1 工程代码

3.2 时序报告

四、参考资料


一、背景

    在设计中,有时需要限定路径的最大时延和最小时延,如没有特定时钟关系的异步信号,但需要限制最大时延和最小时延,也可以对端口到端口(中间无寄存器)的路径设置最大时延和最小时延,设置最大时延和最小时延会影响当前的setup和hold时序分析。

二、Max/Min_delay约束

    设置路径最大时延和最小时延的命令为set_max_delay,set_min_delay,可在Timing Constraints窗口进入Exceptions中,选择Set Maximum Delay或Set Minimum Delay,即为选择最大时延或最小时延。

 

2.1 约束设置参数

以设置最大时延为例,双击Set Maximum Delay进入设置窗口

Targets设置

 

Specify path delay:设置路径最大时延值,可为正整数或负整数

From:设置路径的起点,对象可以是Clocks,Cells,Cell pins,I/O ports

Through:设置路径的中间经过点,对象可以是Net,Cells,Cell pins

To:设置路径的终点,对象可以是Clocks,Cells,Cell pins,I/O ports

Options设置

 

Rise/Fall:勾选后可设置最大时延只对上升沿触发或下降沿触发的路径有效,未勾选时不区分边沿触发。

Set Maximum...ignored):勾选后设置的时延约束只对数据路径有效,时钟偏斜和hold检查会被忽略,即等效于该路径也设置了set_false_path -hold约束,此时如果约束中设置了set_min_delay约束也不会生效。并且该设置不能用于set_min_delay约束中。

Remove...path delays:勾选后,如果设置的约束路径上有其他时例外约束(如false_path,multicycle约束,最大最小时延约束都将被移除)

2.2 约束说明

    对于输入输出逻辑的约束,将不会使用set_max_delay/set_min_delay,对于输入端口到第一级寄存器或最后一级寄存器到输出端口的逻辑路径,通常使用set_input_delay

/set_output_delay约束,set_max_delay/set_min_delay通常用于约束输入端口和输出端口间的纯组合逻辑路径。

    set_max_delay另一个常用的场景是没有时钟关系的异步信号,但需要设置最大时延。两个异步时钟路径可以使用set_clock_group或set_false_path,从而不会进行时序分析。当异步时钟间的设计合理,如FIFO中的两级同步寄存器,要放宽约束,保证两个时钟间的路径延时符合实际情况,就需要使用set_max_delay。

    在多比特跨时钟域(CDC)场景中,比特之间的偏斜必须在一定要求时间内,虽然偏斜可以通过set_bus_skew来约束,但必须确保两个时钟域间的时延不能太大。此时可以通过约束set_max_delay -datapath_only代替set_false_path/set_clock_groups。

    如果对于两个时钟域间的部分路径或全部路径的最大时延必须明确时,就必须使用set_max_delay -datapath_only约束。这种场景下,set_clock_groups不能用来定义两个时钟作为异步时钟,因为从约束的优先级角度看它将取代set_max_delay。其他跨时钟域路径就必须联合约束set_false_path或set_max_delay constraints.
 2.3 路径分段

    不同于约束文件XDC中的其他约束,在设置最大时延和最小时延中,参数-from和-to选项为设置约束的起点和终点,在设置时,有些起点和终点对于约束来说是无效的。当设置了一个无效的起点时,为了让节点成为一个有效的起点,时序分析工具会阻止时序路径通过该节点。

以如下约束为例,最大延时约束的起点为有效起点

set_max_delay 5 -from [get_pins FD1/C]

 

如果约束设置到FD1/Q,时序分析工具将会断开从C->Q的路径,从而使得引脚Q为有效的起点。这种为了创建有效的起点而将时序路径断开的做法称为路径分段,路径分段对最大时延和最小时延都会有影响,同时也会影响经过这些节点(FD1/Q,FD1/C)的时序约束。

set_max_delay 5 -from [get_pins FD1/Q]

 

路径分段的影响

有序设置最大/最小时延导致路径分段,对于从起点FD1/Q的时序路径将无启动时钟,因为终点的时钟偏斜将会考进来。因此,将有可能导致大的时钟偏斜,如下图所示。

 

在路径分段后,将没有默认的hold要求时间,如果没有选择-datapath_only选项,使用set_min_delay命令设置hold要求时间。正式由于分段带来风险,出现路径分段时将会有告警提示。

如果一定要将输出FD1/Q最为约束的起点,而又不想去考虑时钟偏斜的影响,则可以勾选-datapath_only来解决。

set_max_delay 5 -from [get_pins FD1/C] -datapath_only

类似的,如果设置了一个无效的终点时,为了该节点成为有效的终点,也会出现路径分段,

以LUTA/O为终点为例

set_max_delay 5 -from [get_pins LUTA/O]

 

为了使得LUTA/O为有效的终点,时序分析工具将会断开LUTA/O后面的路径,因此,所有经过LUTA/O的setup/hold路径都会受影响,对于REGA/C为起点和LUTA/O为终点的路径,时钟偏斜将会很大。

在下图中,设置约束

set_max_delay 6 -from [get_pins LUTA/O] -to [get_pins REGB/D]

由于LUTA/O不是有效的起点,将在LUTA/O处出现路径分段,LUTA/I0到LUTA/O的时序路径将断开。尽管约束只设置在了LUTA/O和REGB/D间,REGA/C到REGC/D的路径也受影响被断开。

 

路径分段与时序例外

路径分段也可能导致时序例外的优先级告警,特别是对于set_clock_groups和set_max_delay,如以下两个场景

场景1 

set_max_delay <ns> -datapath_only -from <instance> -to <instance>

最大延迟约束设置在两个instance中,如果instance设有set_clock_groups -asynchronous约束,当vivado选择instance的一个有效的起点时,set_max_delay约束将会被覆盖

场景2

set_max_delay <ns> -datapath_only -from <pin> -to <pin | instance>

约束是从pin引脚到inst的引脚,此时,如果instance设有set_clock_groups -asynchronous约束,set_max_delay约束将不会被覆盖。原因是路径分段将让路径起点pin不再被认为是第一个时钟域所启动的起点,因此set_max_delay不会被覆盖,从而约束有效。

三、工程示例

3.1 工程代码

以跨时钟域路径ff1_reg/C到ff2_reg/D的路径为例,设计代码

module timing(d1,d2,clk1,clk2,ce,ff2);
input d1,d2,clk1,clk2,ce;
output ff2;
reg ff1,ff2;
wire comb;
always@(posedge clk1,negedge ce)
begin
    if(!ce)
    begin
    ff1<=0;
    end
    else begin
        ff1<=d1;
    end
end
assign comb=ff1&d2;
always@(posedge clk2,negedge ce)
begin
    if(!ce)
    ff2<=0;
    else begin
        ff2<=comb;
    end
end
endmodule

网表连接

 

约束设置

set_max_delay -from [get_pins ff1_reg/C] -to [get_pins ff2_reg/D] 5.000  //设置clk的周期
set_min_delay -from [get_pins ff1_reg/C] -to [get_pins ff2_reg/D] 2.000	  //设置clk2的周期
create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} [get_ports clk1]   //max_delay值为5
create_clock -period 7.000 -name clk2 -waveform {0.000 3.500} [get_ports clk2]   //min_delay值为2

3.2 时序报告

在report timing summary中,查看inter-clock paths中查看跨时钟域路径,在setup分析中,setup requirement即为设置的set_max_delay值5ns。

 

hold分析的requirement值为set_min_delay值2ns

 

在目的时钟路径上,时延值直接加上设置的时延值

 

 

总结:set_max_delay设置的值即为该路径的setup Requirments值,set_min_delay设置的值即为该路径的holdup Requirments值

四、参考资料

用户手册:ug903-vivado-using-constraints-en-us-2022.2.pdf

链接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt 

提取码:mylt  

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

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

相关文章

【tg】4:NetworkManager :p2p、ice、消息收发

代码分布 NetworkManager 自成体系,看起来也么有啥依赖 class NetworkManager : public sigslot::has_slots<>, public std::enable_shared_from_this<NetworkManager

Redis缓存(缓存预热,缓存穿透,缓存雪崩,缓存击穿)

目录 一, 缓存 1, 什么是缓存 2, 什么是热点数据(热词) 3, 缓存更新策略 3.1 定期生成 3.2 实时生成 二, Redis缓存可能出现的问题 1, 缓存预热 1.1 什么是缓存预热 1.2 缓存预热的过程 2, 缓存穿透 2.1 什么是缓存穿透 2.2 缓存穿透产生的原因 2.3 缓存穿透的解…

html表格标签

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!--表格table 行 tr 列 td --> <table border"1px"><tr> <!--colsp…

《数据结构与算法之美》读书笔记1

Java的学习 方法参数多态&#xff08;向上和向下转型&#xff09; 向上转型&#xff1a; class Text{public static void main(String[] args) {Animals people1 new NiuMa();people1.eat1();//调用继承后公共部分的方法&#xff0c;没重写调用没重写的&#xff0c;重写了调…

DataGridView的下拉DataGridViewComboBoxColumn的数据绑定问题

DataGridView的下拉DataGridViewComboBoxColumn的数据绑定问题 需求&#xff1a;左边这列固定x行&#xff0c;右边显示下拉&#xff0c;并且赋上默认值 public void Set(){// 添加需要固定显示的行数dataGridView1.Rows.Add("早班";dataGridView1.Rows.Add("中…

电脑技巧:笔记本电脑网络不显示wifi列表解决办法

目录 1.WiFi功能被关闭 2.启用了飞行模式 3.WLAN连接被禁用 4.无线网卡驱动未安装 5.WLAN AutoConfig服务未启动 我的笔记本电脑连接wifi时&#xff0c;结果wifi列表中不显示任何的网络信息&#xff0c;这是怎么回事&#xff1f;要如何解决&#xff1f; 答&#xff1a;笔…

Go学习第四章——程序流程控制

Go学习第四章——程序流程控制 1 分支结构1.1 单分支1.2 双分支1.3 多分支1.4 switch分支 2 循环结构2.1 for循环2.2 while和dowhile的实现2.3 经典案例——打印金字塔2.4 经典案例——打印九九乘法表 3 跳转控制语句3.1 break3.2 continue3.3 goto3.4 return 流程控制的作用&a…

JavaSE入门---认识String类、学习String类的相关方法

文章目录 什么是String类&#xff1f;String类的常用方法字符串构造&#xff08;三种&#xff09;String对象的比较&#xff08;四种&#xff09;字符串查找转化数值和字符串转化大小写转化字符串和数组转化格式化 字符串替换字符串拆分字符串截取字符串的其他方法 字符串常量池…

SOLIDWORKS 2024新功能 3D CAD三维机械设计10大新功能

SOLIDWORKS 2024新增功能 - 3D CAD三维机械设计 10大新增功能 1. 先前版本的兼容性 •利用您订阅的 SOLIDWORKS&#xff0c;可将您的 SOLIDWORKS 设计作品保存为旧版本&#xff0c;与使用旧版本 SOLIDWORKS 的供应商无缝协作。 •可将零件、装配体和工程图保存为最新版本…

【CSS】常见 CSS 布局

1. 响应式布局 <!DOCTYPE html> <html><head><title>简单的响应式布局</title><style>/* 全局样式 */body {font-family: Arial, sans-serif;margin: 0;padding: 0;}/* 头部样式 */header {background-color: #333;color: #fff;padding: …

【C语言练习题】添加逗号

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;C语言练习题 添加逗号 1. 题目2.讲解3.代码总结 1. 题目 牛客网在线OJ 2.讲解 因为数字位数可能不全是3的倍数&#xff0c;比如&#xff1a;23&#xff0c;445&#xff0c;555。所以我们从后向前进行&…

“我有一个大胆的想法”?Meta AI 新技术让你的思维图像一览无余!

夕小瑶科技说 原创 作者 | 付奶茶 大家之前是否想象过未来的技术进步会带来读脑器&#xff0c;计算界面是否有可能越过触摸屏、键盘进入我们思维内部读取我们脑袋中所想。尽管当前我们社会尚未达到这一阶段&#xff0c;但我们确实逐渐接近这一愿景&#xff01; 不久前&#x…

DDR电源硬件设计要点

一、DDR电源简介 1. 电源 DDR的电源可以分为三类: a、主电源VDD和VDDQ,主电源的要求是VDDQ=VDD,VDDQ是给IO buffer供电的电源,VDD是给但是一般的使用中都是把VDDQ和VDD合成一个电源使用。 有的芯片还有VDDL,是给DLL供电的,也和VDD使用同一电源即可。电源设计时,需要考…

【PyTorch】深度学习实践 02 线性模型

深度学习的准备过程 准备数据集选择模型模型训练进行推理预测 问题 对某种产品花费 x 个工时&#xff0c;即可得到 y 收益&#xff0c;现有 x 和 y 的对应表格如下&#xff1a; x &#xff08;hours&#xff09; y&#xff08;points&#xff09;12243648 求花费4个工时可得…

回归预测 | MATLAB实现基于BP-Adaboost的BP神经网络结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于BP-Adaboost的BP神经网络结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于BP-Adaboost的BP神经网络结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于BP-Adaboost的BP…

C# 程序运行无法加载 C++ DLL“xxx.dll”: 找不到指定的模块 Exception from HRESULT: 0x8007007E

背景:由于公司需要集成期货公司的提供的DLL&#xff0c;在本地开发调试时运行正常&#xff0c;放到web服务器后运行提示找不到指定模块错误代码Exception from HRESULT: 0x8007007E 原因&#xff1a;可能是由于服务器的C:\Windows\SysWOW64系统文件夹下的模块有缺失。 排查 下载…

剑指Offer || 054.把二叉搜索树转换为累加树

题目 给定一个二叉搜索树&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c;二叉搜索树满足下列约束条件&#xff1a; 节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也…

【FISCO-BCOS】十八、使用docker部署区块链

目录 前言&#xff1a; docker&#xff1a; 一、安装docker docker部署区块链&#xff1a; 一、 搭建单群组4节点区块链 二、启动区块链 三、检查容器 四. 查看节点 前言&#xff1a; 关于FISCOBCOS部署区块链的方式&#xff0c;我们已经学习过了很多种&#xff0c;如多群组部…

Java代理

一、代理模式 代理模式定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。 上面类图中有一个订单接口类(OrderService)、一个订单实现类(OrderServiceImpl)&#xff0c;订单模块的业务相对复杂和重要&#xff0c;如果这时候要在方法执行前后加上日志&#xff0c…

三种字符串格式化方法(%、format、f-string)

一、使用 % name 第一帅 print(我是宇宙无敌天下%s % name) age 18 print(我是宇宙无敌天下%s&#xff0c;我今年%d岁%(name,age)) price 5.99print(白心火龙果单价是%.1f元一斤%price)二、使用 format 在字符串中&#xff0c;使用{ }进行占位&#xff0c;然后在字符串后…