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)
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  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Webpack 基础以及常用插件使用方法

目录 一、前言二、修改打包入/出口配置步骤 三、常用插件使用html-webpack-plugin打包 CSS 代码提取 CSS 代码优化压缩过程打包 less 代码打包图片文件 一、前言 本质上&#xff0c;Webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时…

VSCode汉化设置

扩展中搜索并安装 Chinese… 快捷键 commandshiftp&#xff0c;输入框中输入config&#xff0c;选择Config Display Language 选择zh-cn&#xff0c;重启vscode

SpringBoot 分布式验证码登录方案

前言 为了防止验证系统被暴力破解&#xff0c;很多系统都增加了验证码效验&#xff0c;比较常见的就是图片二维码&#xff0c;业内比较安全的是短信验证码&#xff0c;当然还有一些拼图验证码&#xff0c;加入人工智能的二维码等等&#xff0c;我们今天的主题就是前后端分离的…

【MyBatis Plus】初识 MyBatis Plus,在 Spring Boot 项目中集成 MyBatis Plus,理解常用注解以及常见配置

文章目录 一、初识 MyBatis Plus1.1 MyBatis Plus 是什么1.2 MyBatis Plus 和 MyBatis 的区别 二、在 Spring Boot 项目中集成 MyBatis Plus2.1 环境准备2.2 引入 MyBatis Plus 依赖2.3 定义 Mapper2.4 测试 MyBatis Plus 的使用 三、MyBatis Plus 常用注解3.1 为什么需要注解3…

安装Redis使用make命令报异常

报错信息如下&#xff1a; 解决方案&#xff1a; 安装 gcc yum install gcc-c -y清空编译失败残留文件&#xff1a; make distclean使用 make 命令进行编译&#xff1a; make -j 2 PREFIX/usr/local/redis install

Jmeter性能 —— 事务控制器

统计性能测试结果一定会关注TPS&#xff0c;TPS表示&#xff1a;每秒处理事务数&#xff0c;JMeter默认每个事务对应一个请求。我们可以用逻辑控制器中的事务控制器将多个请求统计为一个事务。 1、添加事务控制器 2、事务控制器参数说明 Generate parent sample&#xff1a;如…

编写虚拟UART驱动程序-框架

一、框架回顾 二、编写UART驱动要做的事 1.注册一个uart_driver 2. 对于每一个port&#xff0c;都会在设备树里面有一个节点 3. 设备树里的节点和platform_driver节点匹配 4. 当platform_dirver的probe函数被调用时&#xff0c;可以获得设备树里的信息&#xff0c;从而把每个串…

Vue3 封装 element-plus 图标选择器

一、实现效果 效果一&#xff1a; 效果二&#xff1a; 效果一的这个是把全部的icon图标都让它显示出来&#xff0c;让我们自己选择说选图标 二、效果一实现步骤 2.1. 全局注册 icon 组件 // main.ts import App from ./App.vue; import { createApp } from vue; import * a…

代码随想录算法训练营第2天| 977有序数组的平方、209长度最小的子数组。

JAVA代码编写 977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&…

PDF编辑工具Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款全面、高效的PDF编辑和管理软件。它提供了丰富的PDF编辑功能&#xff0c;如创建、编辑、合并、分割、压缩、旋转、裁剪等&#xff0c;让用户可以轻松处理各种PDF文档。同时&#xff0c;该软件还具有智能的PDF处理技术&#xff0c;可以自动识别和修复P…

中国铁路线路数据,分为高速铁路和普通铁路,有shp格式和xlsx格式,免费下载

数据地址&#xff1a; 中国铁路线路数据https://www.xcitybox.com/datamarketview/#/Productpage?id274 基本信息. 数据名称: 中国铁路线路数据 数据格式: ShpXlsx 数据时间: 2018年 数据几何类型: 线 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 数据…

Java 使用 poi 和 aspose 实现 word 模板数据写入并转换 pdf 增加水印

本项目所有源码和依赖资源都在文章顶部链接&#xff0c;有需要可以下载使用 1. 需求描述 从指定位置读取一个 word 模板获取业务数据并写入该 word 模板&#xff0c;生成新的 word 文档将新生成的 word 文档转换为 pdf 格式对 pdf 文档添加水印 2. 效果预览 word 模板 带水印的…

openpnp - SlotSchultzFeeder source code bugfix

文章目录 openpnp - SlotSchultzFeeder source code bugfix概述笔记openpnp源码调试环境排查思路开git分支查到的问题 - 1查到的问题 - 2查到的问题 - 3针对以上问题进行的逻辑修正D:\my_openpnp\openpnp_github\src\main\java\org\openpnp\machine\reference\driver\wizards\G…

Spark On Hive原理和配置

目录 一、Spark On Hive原理 &#xff08;1&#xff09;为什么要让Spark On Hive&#xff1f; 二、MySQL安装配置&#xff08;root用户&#xff09; &#xff08;1&#xff09;安装MySQL &#xff08;2&#xff09;启动MySQL设置开机启动 &#xff08;3&#xff09;修改MySQL…

用 Rust 和 cURL 库制作一个有趣的爬虫

目录 一、介绍 二、准备工作 三、代码实现 四、解析 HTML 并提取特定元素示例 总结 本文将介绍如何使用 Rust 编程语言和 cURL 库制作一个有趣的网络爬虫。我们将通过实例代码来展示如何抓取网页内容、处理数据和解析 HTML 结构。同时&#xff0c;还将探讨爬虫技术的原理、…

YOLOv5 添加 OTA,并使用 coco、CrowdHuman数据集进行训练。

YOLO-OTA 第一步&#xff1a;拉取 YOLOv5 的代码第二步&#xff1a;添加 ComputeLossOTA 函数第二步&#xff1a;修改 train 和 val 中损失函数为 ComputeLossOTA 函数1、在 train.py 中 首先添加 ComputeLossOTA 库。2、在 train.py 修改初始化的损失函数3、在 train.py 修改一…

ChatGPT 与 Python Echarts 完成热力图实例

热力图是一种数据可视化方式&#xff0c;它通过颜色的变化来表示数据的差异和分布。以下是使用热力图的一些作用和好处&#xff1a; 数据可视化&#xff1a;热力图可以将复杂的数据集转化为更直观、更易理解的形式。这对于很多人来说&#xff0c;尤其是那些没有深入统计学或数…

YouTrack 中如何设置邮件通知

在 YouTrack 中&#xff0c;默认是不会邮件通知的。 你可以为你的账号设置邮件通知。 设置的方法为单击用户属性&#xff0c;然后在弹出的小窗口中选择属性选项。 设置邮件通知 在通知 Tab 页面中&#xff0c;选择发送邮件的方式&#xff0c;默认这个选项是不选择的。 用户…

IDEA 断点高阶

一、按钮介绍 1.1 补充 返回断点处&#xff1a; 设置debug配置&#xff1a; 二、增加/切换debugger视图 三、window快捷键 所在行处&#xff1a; CtrlF8断点属性编辑&#xff1a; CtrlShiftF8 四、一些常用的高级功能 4.1 查看对象内存-Attach memory agent 1.勾选Atta…

vscode下ssh免密登录linux服务器

vscode使用ssh免密登录linux 1、安装SSH插件2、生成密钥3、linux安装ssh服务4、linux下配置公钥5、vscode远程登录 注&#xff1a;测试环境为window10Ubuntu1804/Ubuntu2204 1、安装SSH插件 扩展->搜索SSH->点击install进行安装&#xff0c;如下图所示&#xff1a; 2、…