基于Xlinx的时序分析与约束(5)----衍生时钟约束

news/2024/4/24 10:57:43/文章来源:https://blog.csdn.net/wuzhikaidetb/article/details/128432173

衍生时钟约束语法

        衍生时钟(Generated Clocks,又称为生成时钟)是指由设计中已有的主时钟通过倍频、分频或者相移等操作后产生的新的时钟信号,如由MMCM或PLL或由组合逻辑生成的倍、分频时钟信号。

        衍生时钟约束必须指定时钟源,在对衍生时钟进行约束时,并不指直接对其周期、相位等进行描述,而是描述其与源时钟的关系,如倍频因子、分频因子、相位关系等。衍生时钟与源时钟之间的关系可以是:

  • 简单的频率分频
  • 简单的频率倍频
  • 频率倍频与分频的组合,获得一个非整数的比例,通常由MMCM或PLL完成
  • 相移或波形反相
  • 占空比改变
  • 上述所有关系的组合

        

        衍生时钟约束的一般语法是:

create_generated_clock -name <generated_clock_name>\

                                       -source <master_clock_source_pin_or_port>\

                                       -multiply_by <mult_factor>\

                                       -divide_by <div_factor>

                                       <pin_or_port>

  • \是换行符号
  • -name后的generated_clock_name是用于指定的衍生时钟名
  • -source后的 master_clock_source_pin_or_port 是源时钟的物理节点,源时钟可以是一个主时钟、虚拟时钟或者衍生时钟
  • -multiply_by后是衍生时钟相对于源时钟的倍频系数,值必须大于等于1.0
  • -divide_by后是衍生时钟相对于源时钟的分频系数,值必须大于等于1.0
  • <pin_or_port>是衍生时钟的物理节点

例1:2分频的衍生时钟约束

        下图中,主时钟clkin的时钟周期为10ns,通过组合逻辑的形式构建了2分频的衍生时钟clkdiv2,

        根据源时钟的不同认定方式,clkdiv2的衍生时钟约束有两种表达方式:

(1)源时钟是主时钟clkin

create_clock -name clkin -period 10 [get_ports clkin]

create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 \ [get_pins REGA/Q] 

(2)源时钟是REGA的时钟管脚

create_clock -name clkin -period 10 [get_ports clkin]

create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2 \ [get_pins REGA/Q]


例2:-edges选项描述的2分频衍生时钟 

        除了用选项-divide_by来描述外,也可以使用-edges选项来描述上面的2分频衍生时钟。其表示方法如下:

# waveform specified with -edges instead of -divide_by

create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -edges {1 3 5} \ [get_pins REGA/Q]

         其中的 -edges {1 3 5} 分别表示衍生时钟的第一个上升沿是源时钟的第1个边沿;衍生时钟的第一个下降沿沿是源时钟的第3个边沿;衍生时钟的第2个上升沿是源时钟的第5个边沿。通过这种边沿之间的对应关系间接描述了源时钟与衍生时钟之间的倍、分频关系。


例3:-edges选项与-edge_shift描述的衍生时钟(占空比改变) 

        下图是一个用MMCM实现的衍生时钟,源时钟周期10ns,占空比50%。衍生时钟占空比25%,周期10ns,相移90度。

        这个衍生时钟可以被约束为:

create_clock -name clkin -period 10 [get_ports clkin]

create_generated_clock -name clkshift -source [get_pins mmcm0/CLKIN] -edges {1 2 3} \

                -edge_shift {2.5 0 2.5} [get_pins mmcm0/CLKOUT] 

         -edges {1 2 3}和 -edge_shift {2.5 0 2.5}共同表示:

  • 衍生时钟的第一个上升沿在源时钟的第1个边沿并加上2.5ns的相移,即其在0+2.5=2.5ns处
  • 衍生时钟的第一个下降沿在源时钟的第2个边沿并加上0ns的相移,即其在5+0=5ns处
  • 衍生时钟的第二个上升沿在源时钟的第3个边沿并加上2.5ns的相移,即其在10+2.5=2.5ns处

例4:同时使用-divide_by 和 -multiply_by

        假设例4的其他情况均为例3相同,不同的是衍生时钟是源时钟的4/3倍,所以可以描述为:

create_generated_clock -name clk43 -source [get_pins mmcm0/CLKIN] -multiply_by 4 \ -divide_by 3 [get_pins mmcm0/CLKOUT]

        非常经典的使用倍频系数和分频系数来描述的衍生时钟。


衍生时钟约束实战

        在了解了衍生时钟时钟约束的语法后,我们接着来学习一下,如何具体地在vivado中使用它。

        我们首先新建一个简单的工程,并实现以下代码:


module test(input		sys_clk,	//50Minput		rst,output		out
);assign out = clk_div2;reg 		clk_div2;
wire		pll_clk;//2分频
always @(posedge pll_clk)beginif(rst)clk_div2 <= 0;else clk_div2 <= ~clk_div2;
end//PLL实现125M
clk_wiz_0 pll_inst
(// Clock out ports.clk_out1	(pll_clk),     	// output clk_out1.reset		(rst), 			// input reset.locked		(),       		// output locked.clk_in1	(sys_clk)      	// input clk_in1
);endmodule

        代码主要实现的功能:

  • 输入时钟50M的sys_clk,经PLL后倍频到100M的pll_clk
  • 100M的pll_clk使用组合逻辑2分频到50M的clk_div2

(1)Vivado自动推导的衍生时钟

        使用PLL或者MMCM生成的衍生时钟,是可以不用做衍生时钟约束的,vivado会自动推断出衍生时钟的相位、频率等参数。

        自动推导的好处在于当MMCM/PLL/BUFR的配置改变而影响到输出时钟的频率和相位时,用户无需改写约束,Vivado仍然可以自动推导出正确的频率/相位信息。劣势在于,用户并不清楚自动推导出的衍生时钟的名字,当设计层次改变时,衍生时钟的名字也可能改变。但由于该衍生时钟的约束并非我们自定义的,因此可能会没有关注到它名字的改变,当我们使用这些衍生时钟进行别的约束时,就会出现错误。

        解决办法就是用户自己手动写出自动推导的衍生时钟的名字,也仅仅写出名字即可,其余的不写。如下如所示:

       

        比如上面的代码,使用了PLL生成一个2倍频的时钟,且我们没有做衍生时钟约束,在Tcl界面输入:report_clocks,会发现自动推到出了3个时钟,一个是主时钟sys_clk,一个是PLL生成的时钟clk_out1_clk_wiz_0,最后一个是PLL自动生成的反馈时钟clkfbout_clk_wiz_0(和我们使用PLL的方式有关,这里不管它)

        接着我们新建一个xdc文件,命名为timing.xdc,用来存储各种XDC指令。

        接着可以使用GUI界面来创建时序约束语句。在创建了XDC文件后,把工程综合完成,点击 edit timing constraints,打开时序约束编辑界面:

        此时已经由PLL生成了两条约束:一条是主时钟约束,另一条是jitter约束。

        PLL生成的2倍频时钟clk_out1_clk_wiz_0 的名字是自动生成的,看上去很奇怪,我们可以自己把它改成特定的有意义的名字:

        此时vivado左侧的保存约束按钮又可以按下了,按下将这一条语句保存:

        此时再在Tcl界面输入:report_clocks,会发现名字已经改了:

(2)手动推导的衍生时钟 

         除了PLL和MMCM自动推出的衍生时钟外,我们自己用组合逻辑构建的分频时钟等,均需要自己手动写约束,约束的语法在上面已经介绍过了,这里说下用GUI界面来生成。

        我们首先打开综合界面下的原理图:

        可以看到2分频衍生时钟的master端是clk_div2_reg的C端,而source端则是 clk_div2_reg的Q端。

        接着按如下步骤操作:

        此时vivado左侧的保存约束按钮又可以按下了,按下将这一条语句保存: 

        此时再在Tcl界面输入:report_clocks,会发现多出来了一个手动推导的衍生时钟clk_div2:


  • 📣博客主页:wuzhikai.blog.csdn.net
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵
  • 📣您有任何问题,都可以在评论区和我交流📞!
  • 📣创作不易,您的支持是我持续更新的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!

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

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

相关文章

【正点原子I.MX6U-MINI移植篇】rootfs移植过程详解(三)

Linux三巨头己经完成了2个了&#xff0c;就剩最后一个rootfs&#xff08;根文件系统&#xff09;了&#xff0c;根文件系统的组成以及如何构建根文件系统是Liux移植的最后一步&#xff0c;根文件系统构建好以后就意味着我们己经拥有了一个完整的、可以运行的最小系统。以后我们…

程序员高手解决问题,都是从正确的提问开始

回顾各大技术网站、社区、问答&#xff0c;我们发现&#xff1a;真正的程序员高手都极度擅长提问。 好的提问不但能得到建设性的解决方案&#xff0c;更加能激发人们的好奇心、创造力和学习的动力。 毫不夸张地说&#xff0c;会提问的程序员一开口就赢了&#xff01; 所以今…

QT基本组件与常用类

目录 一、设计师 Designer&#xff08;掌握&#xff09; 二、布局 Layout 2.1 布局的基本使用&#xff08;掌握&#xff09; 2.2 布局属性&#xff08;掌握&#xff09; 2.3 伸展器&#xff08;掌握&#xff09; 2.4 嵌套&#xff08;掌握&#xff09; 2.5 伸展与策略&#xff…

分布式缓存的四大痛点

目前开发中经常用到的缓存&#xff0c;是我们必不可缺的&#xff0c;他大大的提高了我们整个项目的响应速度和并发量。但是带来好处的同时&#xff0c;也给我们带了了新的问题&#xff1a;缓存穿透、缓存击穿、缓存雪崩以及缓存一致性这么四个问题&#xff0c;也是分布式缓存的…

IT大侦“碳”:VxRail的可持续法宝

环境Environmental      社会责任Social Responsibility      企业治理Corporate Governance      随着碳达峰、碳中和的逐步推进,越来越多的“大厂”或各行业的明星企业都开始重视自己的ESG报告,已然成为了商界新风尚。      可持续发展战略也与前沿技术密切相…

Java项目:Springboot体育器材管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 体育器材管理系统主要包含以下功能&#xff1a; 登录注册&#xff1b; 体育器材管理&#xff1a;显示器材表、显示价目表、显示供应商表&#x…

4.2、网络层提供的两种服务

1、面向连接的虚电路服务 虚电路服务的核心思想&#xff1a;可靠通信由网络自身来保证\color{red}可靠通信由网络自身来保证可靠通信由网络自身来保证 当两台计算机进行通信时&#xff0c;必须建立网络层的连接\color{red}网络层的连接网络层的连接----虚电路VC\color{red}虚…

Java+SpringBoot电影订票系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术后台&#xff1a;SpringBoot、Spring、Springmvc、Springdata、MySQL数据库、前台&#xff1a;FreeMarker、css、Javascript等&#xff0c;项目含有源码、论文、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍&#xff1a; 本系统主要的…

Hi,运维,你懂Java吗--No.4:JVM-概述

作为运维&#xff0c;你不一定要会写Java代码&#xff0c;但是一定要懂Java在生产跑起来之后的各种机制。 本文为《Hi&#xff0c;运维&#xff0c;你懂Java吗》系列文章 第四篇&#xff0c;敬请关注后续系列文章 欢迎关注 龙叔运维&#xff08;公众号&#xff09; 持续分享运…

筛法(线性筛,厄拉多塞筛)

在前前前前前前…的博客中,我们主要谈了欧拉筛和埃氏筛. 今天我们主要来聊一聊线性筛和厄拉多塞筛(其实和埃氏筛和欧拉筛本质上没区别哎).其实在这两种筛法中厄拉多塞筛最好懂(就连本蒟蒻一看代码就明白了…别看这个名字,容易糊弄人) 首先是厄拉多塞筛"粉墨登场"::…

某农业学校 算法设计与分析-第五次实验-回溯算法

1. 罗密欧与朱丽叶的迷宫问题 问题描述 罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个mn的迷宫中&#xff0c;如图所示。每一个方格表示迷宫中的一个房间。这mn个房间中有一些房间是封闭的&#xff0c;不允许任何人进入。在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗…

深度学习常见概念字典(感知机、全连接层、激活函数、损失函数、反向传播、过拟合等)

这一章的所有内容均是为了进入深度学习具体的某某网络而准备的&#xff0c;简单但是非常有必要。 1. 神经网络&#xff08;neural networks&#xff09;的基本组成 1.1 神经元&#xff08;neuron&#xff09; 神经元&#xff08;neuron&#xff09; 是神经网络&#xff08;n…

Djiango实现用户管理增删改成功能实战

1.0定义 前后端不分离模式 前后端分离是指前端页面看到的效果都是由后端控制&#xff0c;即后端渲染HTML页面&#xff0c;前端与后端的耦合度比较高 前后端分离模式 后端仅返回前端所需要的数据&#xff0c;不在渲染HTML页面&#xff0c;不在控制前端的效果&#xff0c;至…

CodeQL代码静态污点分析引擎排查漏洞模式

文章目录前言环境搭建1.1 codeql基础1.2 vscode插件1.3 生成数据库1.4 HelloWorldcodeql语法2.1 语法结构2.2 常用类库2.3 谓词介绍2.4 污点分析漏洞检测3.1 初步结果3.2 解决误报总结前言 对于代码审计的工作&#xff0c;最早期的安全人员会以人工审计的方式来审计项目代码&a…

RabbitMQ 第二天 高级 7 RabbitMQ 高级特性 7.1 消息的可靠投递 7.1.1 confirm【确认模式】

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级7 RabbitMQ 高级特性7.1 消息的可靠投递7.1.1 confirm【确认模式】第二天 高级 7 RabbitMQ 高级特性 7.1 消息的可靠投递 7.1.1 confirm【确认模式】 在使用 Ra…

【数据预处理】基于Pandas的数据预处理技术【california_housing加州房价数据集】_后9个任务

文章目录一.需求分析二.需求解决2.1 对第一个特征&#xff08;收入中位数&#xff09;排序后画散点图2.2 对第一个特征&#xff08;收入中位数&#xff09;画分位数图并分析2.3 【选做】对所有特征画分位数图并进行分析2.4 使用线性回归方法拟合第一个特征&#xff08;收入中位…

【C语言进阶】指针练习题

写在前面 这是指有关指针的小题 正文 练习一 int main() {int a[5][5];int (*p)[4];pa;printf("%p,%d", &p[4][2]-&a[4][2], &p[4][2]-&a[4][2] );return 0; } 解析&#xff1a; a[4][2]为如图粉色部分&#xff0c;p[4][2]为如图蓝色部分。a的…

Java项目:springboot药品管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目属于前后端分离的项目&#xff0c;分为两个角色药品管理员和取药处人员 药品管理员&#xff1a; 登录、退出、药品信息录入、药厂信息录入…

买不到的数目(蓝桥杯C/C++A组真题详解)

题目详细&#xff1a; 题目思路&#xff1a; 对于这个题有一个定理 如果 a,b 均是正整数且互质&#xff0c;那么由 axby&#xff0c;x≥0&#xff0c;y≥0 不能凑出的最大数是 &#xff1a; a*b-a-b 具体的证明过程这里就不赘述 感兴趣的同学可以自行查找 这里就提供一种思…

RabbitMQ 第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级7 RabbitMQ 高级特性7.2 Consumer Ack7.2.1 Consumer Ack7.2.2 Consumer Ack 小结7.2.3 消息可靠性总结第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack 7.2.…