FPGA设计时序约束十五、Set_Bus_Skew

目录

一、序言

二、Set Bus Skew

2.1 基本概念

2.2 设置界面

2.3 命令语法

2.4 报告分析

三、工程示例

3.1 工程代码

3.2 时序报告

四、参考资料


一、序言

    在时序约束中,对时钟的约束除了set clock latency,set clock uncertainty,set input jitter外,还有一条set bus skew的约束命令。该命令主要用于跨时钟域的场景中,下面将对set bus skew的使用进行详细的介绍。

二、Set Bus Skew

2.1 基本概念

   Set Bus Skew用于在多个跨时钟域路径中设置一个最大的偏斜要求,可以限制用于发送数据的源时钟沿的数目以及被目的时钟沿捕获。和普通路径上的时钟偏斜不同,bus skew对应的是约束下所有路径中最大的捕获时钟偏斜值,该值同时应用到fast corner和slow corner。

    Bus skew约束通常用于以下几种跨时钟域的拓扑结构中:

    a) 格雷码总线切换中,例如异步FIFOs

    b)带有CE,MUX或MUX hold的多比特跨时钟域电路中

    c) 配置寄存器的跨时钟域

 尽管set_bus_skew命令可以设置一个总线偏斜约束到同步跨时钟域中,但这种做法是多余的,因为setup和hold检查已经可以确保在两个时序安全的同步跨时钟域路径间安全切换。

    总线偏斜约束不属于时序例外,和set_data_check一样,它属于时序断言。因此,总线偏斜约束不会被时序例外约束,如set_clock_group,set_false_path,set_max_delay,set_multicycle_path约束影响,仅可能会被route_design优化掉。

    约束设置时建议将总线偏斜约束到没有扇出fanout的路径上,并且,每个总线偏斜约束必须覆盖最少两个起点和两个终点。

2.2 设置界面

进入Timing Constraints界面,在左侧Assertions栏中选中Set Bus Skew,右侧即显示Set Bus Skew

 

设置界面中Specify bus skew设置总线信号上最快的信号和最慢的信号间的偏斜,start points和end points分别设置起点和终点,Through points设置中间路径,也可不设。同时,也可指定只分析rise、fall或都分析

 

约束from/to的对象,只能为Cells或cell pins或clocks

 

through的对象则只能为Cells,Nets或Cell Pins

2.3 命令语法

命令格式

set_bus_skew [-from <args>] [-to <args>] [-through <args>] <value>

 

2.4 报告分析

    set_bus_skew的分析报告和普通时序报告结果查看有些不一致。可以通过tcl console使用命令或界面运行Report Bus Skew,进入Reports → Timing → Report Bus Skew

 

对报告进行显示设置

 

也命令执行report_bus_skew -delay_type max -max_paths 10 -name bus_skew_2,bus_skew_2为报告名

 

三、工程示例

3.1 工程代码

设计中跨时钟域是握手机制的一部分,当数据被采样时源时钟发送数据。目的时钟域用了一个4阶同步器来同步发送信号。在4阶同步器之后,信号驱动跨时钟域寄存器的时钟使能端口CE.在这种场景下,必须设置总线偏斜来调整包含CE端口路径上的阶段数,因为它代表了数据有效时目的时钟周期的数目。

module set_bus_skew(src_clk,dest_clk,rst,ce,d,in,out);
input src_clk,dest_clk,rst,ce;
input  d;
input [1:0] in;
output reg [1:0] out;
reg [3:0] syn_reg;
reg src_send;
reg [1:0] src_data;
always@(posedge src_clk)beginif(!rst)src_send<=0;else src_send<=d;endalways@(posedge dest_clk)if(!rst)beginsyn_reg[0]<=0;syn_reg[1]<=0;  syn_reg[2]<=0;  syn_reg[3]<=0;      endelsebeginsyn_reg[0]<=src_send;syn_reg[1]<=syn_reg[0];  syn_reg[2]<=syn_reg[1];  syn_reg[3]<=syn_reg[2];                end
assign des_infer=~syn_reg[3];
always@(posedge src_clk)if(!rst)beginsrc_data[0]<=0;src_data[1]<=0;endelse beginsrc_data[0]<=in[0];src_data[1]<=in[1];            endalways@(posedge dest_clk)if(!ce)beginout[0]<=0;out[1]<=0;endelseif(des_infer) beginout[0]<=src_data[0];out[1]<=src_data[1];           endendmodule

综合网表连接图如下图所示

 

约束文件,源时钟周期为5ns,目的时钟周期为2.5ns,set_bus_skew对两个起点src_data_reg[0]/src_data_reg[1]和两个终点out_reg[0]/out_reg[1]设置总线偏斜约束

create_clock -period 5.000 -name src_clk -waveform {0.000 2.500} [get_ports src_clk]
create_clock -period 2.500 -name dest_clk -waveform {0.000 1.250} [get_ports dest_clk]
set_max_delay -from [get_cells src_send_reg] -through [get_cells {{out_reg[0]} {out_reg[1]}}] 10.000
set_bus_skew -from [get_cells {{src_data_reg[0]} {src_data_reg[1]}}] -to [get_cells {{out_reg[0]} {out_reg[1]}}] 0.100

3.2 时序报告

    先对总线偏斜设置为0ns,此时路径时序违例

 

    将总线偏斜约束设置为0.5ns,违例消失,设置的0.5ns补偿违例的0.492ns,因此,结果为0.008ns

 

四、参考资料

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

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

提取码:mylt   

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

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

相关文章

merge发生冲突时 ☞ 撤销merge

场景&#xff1a;merge发生冲突时☞撤销merge 1. git checkout dev 2. git pull origin release 3. 发生冲突git merge --abort git reset --hard HEAD git reset --hard 8ec554Further Reading &#xff1a;Git常用命令汇总

【C语言数据结构】堆排序讲解

>>知识传送站&#xff1a; 排序算法&#xff1a;堆排序【图解代码】_哔哩哔哩_bilibili 一.代码部分&#xff1a; //堆排序 #include<stdio.h> #include<stdlib.h> #include<string.h> void swap(int* a,int* b)//用于换位 {int tamp;tamp*a;*a*b;*…

51、全连接 - 特征的全局融合

Resnet50 中的核心算法,除了卷积、池化、bn、relu之外,在最后一层还有一个全连接。 下图是 Resnet50 网络结构结尾的部分,最后一层 Gemm(通用矩阵乘法)实现的就是全连接操作。而矩阵乘法我们之前介绍过,传送门在:矩阵乘。 卷积也好,矩阵乘法也好,其目的都是为了完成神…

JavaWeb基础(1)- Html与JavaScript(JavaScript基础语法、变量、数据类型、运算符、函数、对象、事件监听、正则表达式)

JavaWeb基础&#xff08;1&#xff09;- Html与JavaScript(JavaScript基础语法、变量、数据类型、运算符、函数、对象、事件监听、正则表达式) 文章目录 JavaWeb基础&#xff08;1&#xff09;- Html与JavaScript(JavaScript基础语法、变量、数据类型、运算符、函数、对象、事件…

2024.1.2 Redis 数据类型 Stream、Geospatial、HyperLogLog、Bitmaps、Bitfields 简介

目录 引言 Stream 类型 Geospatial 类型 HyperLogLog 类型 Bitmaps 类型 Bitfields 类型 引言 Redis 最关键&#xff08;应用广泛、频繁使用&#xff09;的五个数据类型 StringListHashSetZSet 下文介绍的数据类型一般适合在特定的场景中使用&#xff01; Stream 类型 St…

Redis命令---Hash(哈希)篇 (超全)

目录 1.Redis Hmset 命令 - 同时将多个 field-value (域-值)对设置到哈希表 key 中。简介语法可用版本: > 2.0.0返回值: 如果命令执行成功&#xff0c;返回 OK 。 示例 2.Redis Hmget 命令 - 获取所有给定字段的值简介语法可用版本: > 2.0.0返回值: 一个包含多个给定字段…

MySQL:CRUD,函数以及unionunion all

一. CRUD 1. SELECT(查询) 基础查询&#xff1a; select 查询列表 from 表名&#xff1a;从表中查询。 查询列表可以是表中的字段、常量、表达式和函数等。 查询的结果是一个虚拟的表格。 查询多个字段&#xff0c;在查询列表中用逗号隔开。 *可以表示所有字段。 select dist…

LangChain与昇腾

LangChain这个词今年已经听烂了&#xff0c;今天基于昇腾的角度总结一下&#xff1a; Why LangChain &#xff1f; 场景&#xff1a;构建一个LLM应用 在构建一个新项目时&#xff0c;可能会遇到许多API接口、数据格式和工具。要去研究每一个工具、接口很麻烦。 假设要构建一…

k8s二进制部署2

部署 Worker Node 组件 //在所有 node 节点上操作 #创建kubernetes工作目录 mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs} #上传 node.zip 到 /opt 目录中&#xff0c;解压 node.zip 压缩包&#xff0c;获得kubelet.sh、proxy.sh cd /opt/ unzip node.zip chmod x kubelet.…

3分钟了解syscall系统调用|详细易懂的流程

文章目录 syscall1.简介2.详细解释3.具体举例4.比喻解释5.作用6.优点7.总结 syscall和int 0x80有什么不同&#xff1f;1. 上下文切换效率2. 指令执行流程3. 兼容性总结 syscall 具体流程1. 用户空间准备2. 执行syscall指令3. 切换到内核态4. 内核模式下执行系统调用5. 返回用户…

Unity3D UGUI图集打包与动态使用(TexturePacker)

制作图集的好处&#xff1a; 众所周知CPU是用来处理游戏的逻辑运算的&#xff0c;而GPU是用来处理游戏中图像的。在GPU中&#xff0c;我们要绘制一个图像需要提交图片&#xff08;纹理&#xff09;到显存&#xff0c;然后再进行绘制&#xff08;在这个过程中会产生一次DrawCall…

html websocket的基本使用

html websocket的基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"w…

【投稿】计算机-AI相关期刊/会议了解和推荐

期刊 CCF相关推荐期刊 Artificial Intelligence (AI) AI领域的旗舰刊,人家都叫AI了好叭。身边有小伙伴半年给了大修,三个审稿人,其中有两个看的非常非常详细,问了许多问题,要加一堆实验(我觉得就是相当于重做了)。大修审稿周期给了半年(我算是知道为什么顶刊都这么慢…

vue3 + TS + vite 搭建中后台管理系统(完整项目)

vue3 TS vite 搭建中后台管理系统&#xff08;完整项目&#xff09; 前言1、搭建步骤及方法2、集成多种插件功能&#xff0c;实现中后台按需使用3、新手学TS如何快速进入状态、定义TS类型4、layout搭建四款常见风格6、大屏搭建效果5、vue3Ts运营管理系统总结&#xff1a; 前言…

Python实现观察者模式

观察者模式是一种设计模式&#xff0c;其中一个对象&#xff08;称为主题&#xff09;维护一组依赖于它的对象&#xff08;称为观察者&#xff09;&#xff0c;当主题的状态发生变化时&#xff0c;它会通知所有观察者。这种模式常用于实现分布式事件处理系统。 下面是一个简单…

Scikit-Learn线性回归(三)

Scikit-Learn线性回归三&#xff1a;综合实践 1、线性回归理论回顾2、数据分析与问题提出3、简单线性回归实践4、多项式回归实践5、多元线性回归实践 1、线性回归理论回顾 2、数据分析与问题提出 3、简单线性回归实践 4、多项式回归实践 5、多元线性回归实践

C. Perfect Square(矩形旋转之后对应的坐标)

题目&#xff1a; https://codeforces.com/contest/1881/problem/C 思路&#xff1a; 旋转之后对应的坐标&#xff1a; 顺时针旋转 0 90 180 270 分别为&#xff08;i&#xff0c;j&#xff09;&#xff08;j&#xff0c;n1-i&#xff09;&#xff08;n1-i&#xff0c;n1-j&…

LeetCode每日一题 | 2397. 被列覆盖的最多行数

文章目录 题目描述问题分析程序代码&#xff08;Golang 版本&#xff09; 题目描述 原题链接 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix &#xff1b;另给你一个整数 numSelect&#xff0c;表示你必须从 matrix 中选择的 不同 列的数量。 如果一行中所有的 1 …

C语言,easyx,绘制一个五边形。

#include<stdio.h> #include<easyx.h>//图形库头文件 #include<math.h>//使用三角函数引用头文件 #define PI 3.14//要使用弧度制 int main() { initgraph(800,600);//创建一个窗口&#xff0c;宽度为800&#xff0c;高度为600 setorigin(400, 300);//以…

three.js相机按照指定路线在建筑模型中漫游(支持开始,暂停)

three.js相机按照指定路线在模型中漫游&#xff08;支持开始&#xff0c;暂停&#xff09; 关键点 相机运动曲线 // 相机路线 const points [new THREE.Vector3(0, 40, 300),new THREE.Vector3(50, 40, 300),new THREE.Vector3(50, 40, 50),new THREE.Vector3(150, 40, 50),…