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

一、背景

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

二、时钟例外

    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)
beginif(!ce)beginff1<=0;endelse beginff1<=d1;end
end
assign comb=ff1&d2;
always@(posedge clk2,negedge ce)
beginif(!ce)ff2<=0;else beginff2<=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.rhkb.cn/news/172607.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06 _ 链表(上):如何实现LRU缓存淘汰算法

今天我们来聊聊“链表(Linked list)”这个数据结构。学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是LRU缓存淘汰算法。 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的CPU缓存、数据库缓存…

“节省内存、提升性能:享元模式的神奇之处“

概念 享元模式的本质是缓存共享对象&#xff0c;降低内存消耗。 是对象池的的一种实现&#xff0c;一句话用到了缓存了对方和池化技术的地方绝大多是享元模式的体现。 例如线程池&#xff0c;数据库连接池&#xff0c;字符串常量池 应用示例 String中的享元模式 public c…

Linux Centos7安装后,无法查询到IP地址,无ens0,只有lo和ens33的解决方案

文章目录 前言1 查看network-scripts目录2 创建并配置 ifcfg-ens33 文件3 禁用NetworkManager4 重新启动网络服务总结 前言 在VMware中&#xff0c;安装Linux centos7操作系统后&#xff0c;想查询本机的IP地址&#xff0c;执行ifconfig命令 ifconfig结果如下&#xff1a; 结…

​ iOS自动混淆测试处理笔记

1 打开 ipa&#xff0c;导出ipa 路径和配置文件路径会自动填充 ​ 2 点击 开始自动混淆测试处理 自动混淆测试是针对 oc 类和oc方法这两个模块进行自动混淆ipa&#xff0c;并ipa安装到设备中运行&#xff0c;通过检测运行ipa包是否崩溃&#xff0c;来对oc类和oc方法进行筛选。…

Docker Harbor概述及构建

Docker Harbor概述及构建 一、Docker Harbor 概述1.1、harbor 简介1.2、Harbor的优势1.3、Harbor 的核心组件1.4、Docker私有仓库 架构 二、Harbor构建Docker私有仓库2.1 环境配置2.2、部署Harbor服务2.2.1、上传dock-compose&#xff0c;并设置权限2.2.2、安装harbor-offline-…

openEuler 22.03 LTS 环境使用 Docker Compose 一键部署 JumpServer (all-in-one 模式)

环境回顾 上一篇文章中&#xff0c;我们讲解了 openEuler 22.03 LTS 安装 Docker CE 和 Dcoker Compose&#xff0c;部署的软件环境版本分别如下&#xff1a; OS 系统&#xff1a;openEuler 22.03 LTS(openEuler-22.03-LTS-x86_64-dvd.iso)Docker Engine&#xff1a;Docker C…

归并排序(java)

大家好我是苏麟 , 今天说说归并排序 . 归并排序 递归 正式学习归并排序之前&#xff0c;我们得先学习一下递归算法。 定义&#xff1a; 定义方法时&#xff0c;在方法内部调用方法本身&#xff0c;称之为递归. public void show(){System.out.println("aaaa")…

软考高级系统架构师冲关预测

[ – 2023年10月27日 – ] 去年11月通过了软考高级系统架构师的考试&#xff0c;原本想立即分享下过关的总结回顾&#xff0c;但是随着软考新版大纲及教程的发布&#xff0c;也意味着题目及内容的复盘总结经验便不那么适用。在即将迎来今年的软考高架的时候&#xff0c;想着透…

Azure - 机器学习企业级服务概述与介绍

目录 一、什么是 Azure 机器学习&#xff1f;大规模生成业务关键型机器学习模型 二、Azure 机器学习适合哪些人群&#xff1f;三、Azure 机器学习的价值点加快价值实现速度协作并简化 MLOps信心十足地开发负责任地设计 四、端到端机器学习生命周期的支持准备数据生成和训练模型…

k8s statefulSet 学习笔记

文章目录 缩写: stsweb-sts.yaml创建sts扩缩容金丝雀发布OnDelete 删除时更新 缩写: sts 通过 kubectl api-resources 可以查到&#xff1a; NAMESHORTNAMESAPIVERSIONNAMESPACEDKINDstatefulsetsstsapps/v1trueStatefulSet web-sts.yaml apiVersion: v1 kind: Service met…

LabVIEW开发TDS1000 和TDS2000 系列泰克示波器

LabVIEW开发TDS1000 和TDS2000 系列泰克示波器 泰克示波器是经常用到的工具&#xff0c;一般手动操作即可&#xff0c;但有时候也要集成到系统中&#xff0c;需要程控。这时候先要下载厂家提供的例子&#xff0c;了解LabVIEW的demo。根据不用的示波器型号&#xff0c;选择和计…

【SpringCloudNetflix】一图理解Spring Cloud Netflix解决了那些微服务问题?

什么是微服务理解&#xff1a; SpringCloudNetflix解决的问题理解&#xff1a; SpringCloudNetflix核心点&#xff1a; 注册中心&#xff1a;Eureka负载均衡&#xff1a;Ribbon、Feign服务熔断&#xff1a;Hystrix服务降级&#xff1a;Hystrix服务监控&#xff1a;Hystrix Da…

CSS 滚动驱动动画与 @keyframes 新语法

CSS 滚动驱动动画与 keyframes 在 CSS 滚动驱动动画相关的属性出来之后, keyframes 也迎来变化. 以前, keyframes 的值可以是 from, to, 或者百分数. 现在它多了一种属性的值 <timeline-range-name> <percentage> 建议先了解 animation-range 不然你会对 timeli…

高三高考免费试卷真题押题知识点合集

发表于安徽 温馨提示&#xff1a;有需要的真题试卷可联系本人&#xff0c;百卷内上免费资源。 感觉有用的下方三连&#xff0c;谢谢 ​ 。 免费版卷有6-60卷每卷平均4-30页 高三免费高三地理高三英语高三化学高三物理高三语文高三历史高三政治高三数学高三生物 付费版卷有1…

Linux shell编程学习笔记15:定义数组、获取数组元素值和长度

一、 Linux shell 脚本编程中的数组概述 数组是一种常见的数据结构。跟大多数编程语言一样&#xff0c;大多数Linux shell脚本支持数组&#xff0c;但对数组的支持程度各不相同&#xff0c;比如数组的维度&#xff0c;是支持一维数组还是多维数组&#xff1f;再如&#xff0c;…

[Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷

一.Docker 部署 Nginx 以及端口映射 Docker 部署 Nginx,首先需要下载nginx镜像,然后启动这个镜像,就运行了一个nginx的容器了 1.下载 nginx 镜像并启动容器 #查看是否存在nginx镜像:发现没有nginx镜像 [rootlocalhost zph]# docker images | grep nginx#下载nginx镜像 [rootl…

IO流框架,缓冲流

一.缓冲流有什么优点 Java中的缓冲流&#xff08;Buffered Stream&#xff09;具有以下优势&#xff1a; 提高效率&#xff1a;缓冲流通过在内存中缓存一部分数据&#xff0c;减少了直接从内存到磁盘或从磁盘到内存的频繁IO操作&#xff0c;从而提高了读写效率。缓冲区大小调整…

Java8与JDK1.8与JDK8之间的关系是什么?

1.Java8等价于JDK8 2.JDK8或者JDK1.8是由于自从JDK1.5/JDK5命名方式改变后遗留的历史问题。所以JDK8或者JDK1.8是等价的。 2004年9月30日&#xff0c;J2SE1.5发布。为了表示该版本的重要性&#xff0c;J2SE 1.5更名为Java SE 5.0&#xff0c;从此开始&#xff0c;如下图像jav…

C++之#pragma once实例总结(二百四十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

OpenCV官方教程中文版 —— 直方图的计算,绘制与分析

OpenCV官方教程中文版 —— 直方图的计算&#xff0c;绘制与分析 前言一、原理1.统计直方图2. 绘制直方图3. 使用掩模 前言 • 使用 OpenCV 或 Numpy 函数计算直方图 • 使用 Opencv 或者 Matplotlib 函数绘制直方图 • 将要学习的函数有&#xff1a;cv2.calcHist()&#xf…