FPGA设计时序约束七、设置时钟不确定约束

news2025/1/12 3:43:53

一、背景

    在之前的时序分析中,通常是假定时钟是稳定理想的,即设置主时钟周期后按照周期精确的进行边沿跳动。在实际中,时钟是非理想存在较多不确定的影响,存在时延和波形的变化,要准确分析时序也需将其考虑进来,下面将对其进行介绍。

二、时钟例外

    Vivado的时序约束中,考虑时钟不稳定影响的约束包括set_clock_latency,

set_clock_uncertainty,set_input_jitter,set_system_jitter,这些约束可分为两类:clock latency和clock uncertainty

2.1 clock latency

    信号从外部传输到FPGA内部后,时钟到达内部的目的地存在确定的时延,该时延包括源点的延时(source latency)和网络延时(network latency,也称为插入时延)。source latency表示时钟信号从波形的起点传输到芯片源点引脚的时延,时钟网络时延表示时钟信号从芯片源点引脚到芯片寄存器时钟引脚的时延。

    网络延时在预布线阶段会分析工具自动的估算,在完成布线后可以精确的计算。在许多非赛灵思的时序分析工具中,要求设置set_propagated_clock约束来计算时钟树上的传输延时。vivado不需要该命令,会默认自动考虑所有时钟的传输时延,对于生成时钟的时延,包含主时钟的插入时延和自身的网络时延。

    赛灵思器件使用set_clock_latency约束主要是约束器件外部的时钟时延,约束命令设置界面如图

Relative clocks:设置与指定对象objects相关联的时钟时延,为可选项。

Latency type:选择时延类型,可以是Source或Network,未进行设置时,默认为Network

Latency value:设置时延值应用的分析类型,min为hold,max为setup,不勾选时,对setup/hold分析都有效。

Source latency variation bound:在latency type选Source才能设置该项,设置时钟延时是早于early还是晚于late时钟边沿到达,early表示应用于hold分析,late应用于setup分析,不设置时对setup/hold分析都有效

Operating condition:设置延时

Clock rise latency/Clock fall latency:设置时延是针对上升沿触发,下降沿触发,还是对两者都触发的场景

Object:时钟时延约束的对象,可以是clocks,cell pins,I/O port

2.2 clock uncertainty

clock uncertainty包含clock jitter,input jitter,system jitter

2.2.1 clock jitter

对于ASIC器件来说,时钟抖动clock jitter通常表示时钟不确定的特征,但对于FPGA来说,时钟抖动是可预知的,时序分析工具会自动计算时钟抖动。

2.2.2 input jitter

输入抖动input jitter是指与理想的连续时钟到达时间相比,连续的时钟边沿到达时间存在变化,输入抖动是一个绝对值,代表了每一个时钟沿的变动。使用set_input_jitter约束可以设置每一个主时钟的输入抖动,但不能直接对生成时钟设置时钟抖动,时序分析工具会自动的根据主时钟的输入抖动计算生成时钟的时钟抖动。

a)对于来自于MMCM或PLL的生成时钟,将用一个独立的抖动值来替代时钟抖动

b)对于来自组合逻辑的生成时钟,生成时钟的时钟抖动和主时钟相同

set_input_jitter设置方式简单,对象只能为clock。

系统抖动system jitter是由于电源供电噪声,板级噪声,或其他系统的抖动一起引起的抖动,使用约束命令set_system_jitter设置的抖动是针对整个设计,所有的时钟。

以经过主时钟的时钟输入端口clkin设置

%5Cpm%20100

ps的时钟抖动为例

set_input_jitter [get_clocks -of_objects [get_ports clkin]] 0.1

2.2.3 additional clock uncertainty

使用set_clock_uncertainty可以对不同的场景,延时或者是需要的时钟关系设置时钟不确定性,对于设置中的部分添加时序裕量是一种很方便的方式。

Clock uncertainty type:有两种设置不确定性方式,simple uncertainty和interclock uncertainty。simple uncertainty是针对同步时钟,objects可以是Cell pins,clocks,I/O port,interclock uncertainty针对异步时钟,需设置-from和-to参数

跨时钟间的不确定性总是优于简单的时钟不确定性,不受约束顺序的影响。以下面约束为例,尽管第二条简单的不确定约束放在后面,从clk1到clk2的时序路径不确定性依旧为2ns

set_clock_uncertainty 2.0 -from [get_clocks clk1] -to [get_clocks clk2]
set_clock_uncertainty 1.0 [get_clocks clk1]

当在跨时钟域的两个时钟间设置了不确定约束时,需确保约束了两个时钟域间所有的跨时钟域路径,如clk1到clk2,clk2到clk1。

三、工程设计

 工程代码

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

a)无时钟不确定约束时,路径中clock uncertainty也存在,时序分析工具会自动计算Total system jitter,此处为0.071,按照公式(Tsj^2+Tij^2+DJ)/2+PE的值为0.035。

b) 设置set_clock_latency约束

create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} [get_ports clk1]
create_clock -period 7.000 -name clk2 -waveform {0.000 3.500} [get_ports clk2]
set_clock_latency -source 0.800 [get_clocks clk1]  //设置latency为0.8ns

时序分析报告,setup分析中source clock path路径的clock source latency为0.8

c) 设置set_clock_uncertainty值为2.660,因为设计中clk1和clk2为异步时钟域,Clock uncertainty type选择interclock uncertainty。

create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} [get_ports clk1]
create_clock -period 7.000 -name clk2 -waveform {0.000 3.500} [get_ports clk2]
set_clock_uncertainty -from [get_clocks clk1] -to [get_clocks clk2] 2.660

查看时序路径中setup或hold路径的Clock uncertainty为2.695ns,该值的计算可以看右侧中的计算公式(Tsj^2+Tij^2+DJ)/2+PE+UU。UU为用户约束的不确定值,即为2.66ns,和约束值一致。

同理,查看路径的clock path skew,通过clock path skew equation可以知道计算方式,DCD-SCD-CPR

d) 设置set_input_jitter为1.66ns

create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} [get_ports clk1]
create_clock -period 7.000 -name clk2 -waveform {0.000 3.500} [get_ports clk2]
set_input_jitter [get_clocks clk1] 1.660

查看setup路径中clock uncertainty值为0.831ns,查看计算使用值中total input jitter为1.66ns,和约束值一致

四、参考资料

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

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

提取码:mylt  

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

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

相关文章

2023深耕kotlin,谈谈前景

为什么学习kotlin&#xff1f; Kotlin 早就已经是 Google 官方推荐的开发语言了&#xff0c;而且 Android 新的 Compose 框架只支持 Kotlin &#xff0c;在 Google 那里&#xff0c;Android开发中 Java 其实已经被淘汰了。Java 和 Kotlin 虽然都属于高级语言&#xff0c;但是 …

利用nicegui开发ai工具示例

from fastapi import FastAPI import uvicorn from nicegui import uiclass PipRequirement:def __init__(self):ui.label("依赖安装与依赖展示")class BasicSettings:def __init__(self):self.project_select ui.select(["test"], label"项目选择&q…

驱动获取设备树节点信息

mycdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/of.h>struct device_node *dnode; //解析得到的设备树节点对象指针 struct property *pr; unsigned int lenth; static int __init mycdev_init(void) {//解析设备树节点信息d…

Hafnium安全分区管理器和示例参考软件栈

安全之安全(security)博客目录导读 目录 一、安全分区管理器 1、术语 2、对旧平台的支持 二、示例参考软件栈 一、安全分区管理器 安全分区管理器的三种实现在TF-A代码库并存&#xff1a; 1.基于FF-A规范的S-EL2 SPMC&#xff08;SPM Core&#xff09;&#xff0c;使能安全…

C++ 模板和泛型编程详解

C中的模板和泛型编程是非常重要的概念。模板是一种将数据类型作为参数的通用程序设计方法。它们允许开发人员编写可以处理各种数据类型的代码&#xff0c;而无需为每种数据类型编写不同的代码。下面介绍了一些关于C中模板和泛型编程的重要知识点 模板的定义 模板是一种通用程序…

论坛议程 | COSCon'23 开源治理(G)

众多开源爱好者翘首期盼的开源盛会&#xff1a;第八届中国开源年会&#xff08;COSCon23&#xff09;将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01;各位新老朋友们&#xff0c;欢迎到成都&a…

第十五章:L2JMobius学习 – 刷新NPC和对话

首先&#xff0c;我们介绍一下城镇里面的传送师NPC的刷新和对话。 传送师对应的类是L2TeleporterInstance&#xff0c;它继承L2FolkInstance&#xff0c;再继承L2NpcInstance。 我们要处理的是“单击/双击”传送师的业务逻辑&#xff0c;对应的是Action数据包。这个数据包具有…

Linux系统上安装FTP服务

文章背景 最近为了调试Linux系统FTP传输工具&#xff0c;刚好有Linux虚拟机环境&#xff0c;于是就搭建了vsftpd服务。 使用环境 Linux系统&#xff1a;BigCloud Enterprise Linux 7.8 (Core) 安装 1. 查询是否安装vsftpd [rootlocalhost ~]# rpm -qa | grep vsftpd 2. 安…

【CHI】Transaction structure

我们在前文【CHI】CHI协议&#xff0c;transaction事务汇总已经总结了事务类型&#xff0c;这篇开始讲述事务可以完成的方式。它显示了参与事务的各种组件可以使用的所有允许的选项。 注&#xff1a; 除了PCrdReturn 和PrefetchTgt之外&#xff0c;其他的事务在开始的时候都可…

APP分发-CDN加速原理

摘要 CDN的全称是(Content Delivery Network)&#xff0c;即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层&#xff0c;将网站的内容发布到最接近用户的网络”边缘“的节点&#xff0c;使用户可以就近取得所需的内容&#xff0c;提高用户访问网站的…

疯狂java 三-六章

第三章 数据类型和运算符 Java语言是强类型语言&#xff0c;意思是每个变量和每个表达式都有一个在编译时就确定的类型&#xff0c;所有的变量都必须显式声明类型 标识符就是类&#xff0c;变量、方法命名的符号 标识符不能包含空格 标识符只能包含美元符($)&#xff0c;不…

2000-2021年三批“智慧城市”试点名单匹配数据

2000-2021年三批“智慧城市”试点名单匹配数据 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;行政区划代码、地区、所属省份、年份、智慧城市试点、最早试点年份 3、来源&#xff1a;住建部公布的三批“国家智慧城市名单” 4、说明&#xff1a;内含原始文件和匹配结…

AcWing 1.1 数字三角形模型 dp动态规划

&#xff08;1&#xff09;ACWing 1015. 摘花生 1015. 摘花生 - AcWing题库 Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上…

从设计、制造到封测,XSKY 智能存储助力半导体行业数字化转型

近日&#xff0c;ECS2023 第五届中国电子通信与半导体 CIO 峰会在深圳召开&#xff0c;峰会以“数字科技与业务重塑”为主题&#xff0c;汇聚了 300来自电子通信与半导体行业知名企业高管、CIO、信息化与数字化负责人&#xff0c;交流电子通信与半导体行业的创新的产品和解决方…

65、内网安全-域环境工作组局域网探针方案

目录 案例1-基本信息收集操作演示案例2-网络信息收集操作演示案例3-用户信息收集操作演示案例4-凭据信息收集操作演示案例5-探针主机域控架构服务操作演示涉及资源 我们攻击内网一般是借助web攻击&#xff0c;直接进去&#xff0c;然后再去攻击内网&#xff0c;那么攻击的对象一…

Python 继承和子类示例:从 Person 到 Student 的演示

继承允许我们定义一个类&#xff0c;该类继承另一个类的所有方法和属性。父类是被继承的类&#xff0c;也叫做基类。子类是从另一个类继承的类&#xff0c;也叫做派生类。 创建一个父类 任何类都可以成为父类&#xff0c;因此语法与创建任何其他类相同&#xff1a; 示例&…

贪心算法学习——加油站

目录 一&#xff0c;题目 二&#xff0c;题目接口 三&#xff0c;解题思路及其代码 一&#xff0c;题目 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油…

单链表的定义(数据结构与算法)

单链表的定义 单链表是一种常见的数据结构&#xff0c;用于存储元素的序列。它由一系列节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的引用&#xff08;指针&#xff09;。单链表中的节点之间通过指针连接起来&#xff0c;形成一个线性结构。单链表是一种…

【C++进阶之路】第三篇:二叉搜索树 kv模型

文章目录 一、二叉搜索树1.二叉搜索树概念2.二叉搜索树操作3.二叉搜索树的实现 二、二叉搜索树的应用1.kv模型2.kv模型的实现 三、 二叉搜索树的性能分析 一、二叉搜索树 1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性…

使用 kind 集群实现 all-in-one 在线安装 DCE 5.0 社区版

文章目录 一、什么是DCE 5.0二、部署先决条件三、创建云服务器实例3.1 实例节点配置[最低配置要求]3.2 远程连接云实例3.3 更新系统 四、安装Docker-CE五、使用 Kind 搭建 Kubernetes 集群六、安装依赖包6.1 helm安装6.2 skopeo安装6.3 kubectl安装6.4 yq安装 七、安装 DCE 5.0…