FPGA设计时序约束一、主时钟与生成时钟

目录

一、主时钟create_clock

1.1 定义

1.2 约束设置格式

1.3 Add this clock to the existing clock

1.4 示例

1.5 差分信号

二、生成时钟generate_clock

2.1 定义

2.2 格式

2.2.1 by clock frequency

2.2.2 by clock edges

2.2.3 示例

2.2.4 自动生成时钟

2.2.5 重命名生成时钟


一、主时钟create_clock

1.1 定义

    主时钟是来自FPGA芯片外部的时钟,通过时钟输入端口或高速收发器GT的输出引脚进入FPGA内部。对于赛灵思7系列的器件,主时钟必须手动定义到GT的输出,对于Ultrascale和Ultrascale+系列的器件,定时器会自动地接入到GT的输出。

1.2 约束设置格式

    主时钟约束使用命令create_clock进行创建,进入Timing Constraints窗口,clocks选择Create Clock,单击添加图标或双击Create Clock,进入创建窗口

 

Create Clock窗口中,Clock name为时钟约束命名,Source objects设置约束的对象类型,可以是ports,nets,pin,Waveform设置波形的形状,Period为波形周期,Rise at设置时钟的上升沿位置,Fall at设置时钟的下降沿位置。command后面为根据上述的设置自动生成对应的约束命令。

 

1.3 Add this clock to the existing clock

Add this clock to the existing clock勾选后,对于如果某个对象已创建时序约束,再次创建时将不会将之前的约束覆盖。

下面两条约束create_clk1和create_clk2的约束对象source objects都是clk1,约束内容不同,未勾选Add this clock to the existing clock时,约束如下

 

查看时序分析结果,只有create_clk2的信号,create_clk1已被覆盖

 

勾选Add this clock to the existing clock

 

时序分析报告中,create_clk1和create_clk2都存在

 

1.4 示例

    以时钟输入端口为例,时钟信号周期为10ns,占空比为50%,通过输入缓冲器和全局时钟缓冲器BUFG到达寄存器的时钟输入端口。

  约束命令: create_clock -period 10 [get_ports sysclk]

 

   来自高速收发器GT的时钟rxclk,周期为3.33ns,50%的占空比,经过时钟管理单元MMCM,生成不同的分频时钟信号,分频时钟信号再传输到寄存器。 

约束命令:create_clock -name rxclk -period 3.33 [get_pins gt0/RXOUTCLK]

 

1.5 差分信号

约束命令:create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]

    差分信号作为主时钟输入时,以一个差分信号输入到PLL的时钟输入端口CLKIN1为例,主时钟必须约束到差分端口的输入正极(sys_clk_clk_p)

 

二、生成时钟generate_clock

2.1 定义

        生成时钟通常来源于设计内部的时钟管理单元,如MMCM,PLL等,生成时钟是与主时钟相关,其来源来自主时钟或其他生成时钟。因此,需先定义主时钟,再定义生成时钟。优点是主时钟变化时会同步进行变化。

生成时钟与主时钟关系可以是分频,倍频,非整数倍频率,相移,占空比切换,以及上述关系的组合。

2.2 格式

在Timing Constraints中,左侧选择Create Generated Clock,

 

    在Create Generated Clock可以看到生成时钟的相关参数设置

clock name: 设置生成时钟的名称

Master pin(source):设置生成时钟的来源,可以是IO ports或cells pin

Master clock:设置生成时钟的源时钟

Source objects:指定指定生成时钟的实际对象,可以是I/O ports,cell pins或nets.

Do not override clocks already defined on the same Source object:勾选后,如果Source objects上有其他时钟约束,将不会被覆盖,不勾选,则覆盖原先的约束信息

Derive from source clock waveform:设置生成时钟波形与源时钟的关系,有频率相关和边沿相关两种方式,见2.2.1和2.2.2

2.2.1 by clock frequency

Multiply source clock frequency by:生成时钟是源时钟的倍频关系,值大于或等于1

Divide source clock frequency by:生成时钟是源时钟的分频关系,值大于或等于1

Duty cycle:设置生成时钟的占空比

Invert the generated clock signal:勾选后对生成信号进行倒置,即高低电平互换,0变1,1变0

下图设置的命令为:create_generated_clock -name gen_clk -source [get_ports clk1] -multiply_by 2 -invert -master_clock [get_clocks create_clk1]

 

2.2.2 by clock edges

通过源时钟的边沿设置生成时钟,以下图为例。

 

对应的命令为create_generated_clock -name gen_clk -source [get_pins clk_IBUF_BUFG_inst/O] -edges {1 3 4} -edge_shift {2.0 0.0 1.0} -add -master_clock [get_clocks  "*"] [get_pins {shiftr_reg[13]/C}]

 

含义解释:-edge {1,3,4}即生成时钟的第1个上升沿位置,第1个下降沿位置,第2个上升沿位置分别对应源时钟的第1,3,4个变化边沿,-edge_shift的3个值为在源时钟基础上的偏移。假设源时钟clk周期为10ns,占空比为50%,从0时刻开始,统计了边沿变化的数目,-edge {1,3,4}如中间波形所示,对应了clk第1,3,4的边沿;Generate clk即为各个边沿的偏移值,分别是0+2,10+0,15+1,即为Generate clk的波形。

2.2.3 示例

a)二分频的生成时钟实现用寄存器实现

 

主时钟周期为10ns,对应的约束命令为

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]  #创建生成时钟

b)边沿生成时钟

时钟边沿设置生成时钟,对应命令为,由波形可看出生成时钟的3个边沿刚好对应主时钟的第1,3,5,因为无偏移,故不需要-edge_shift,

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

生成时钟的波形clkdiv2如下图所示

 

c)非整数倍频生成时钟

    通过同时设置倍频和分频可以设置非整数倍的生成时钟频率,如果需要生成一个4/3倍频的生成时钟,先用倍频参数multiply_by 4,再用分频参数divide_by 3。

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

2.2.4 自动生成时钟

    Vivado在某些场景下会根据已定义的主时钟自动产生生成时钟,将生成时钟约束到时钟修正块(CMB:clock modifying blocks)中,CMB可以是MMCM,PLL,BUFR等,在UltraScale器件中,还包括GT_COMMON/GT_CHANNEL/IBUFDS_GTE3,ISERDESE3,BITSLICE_CONTROL / RX*_BITSLICE。

    如果用户在需自动产生生成时钟的网表对象中设置了约束,则不会产生生成时钟。自动产生的生成时钟是以定义位置连接net的最顶层的部分名来命名。

    以下图连接示例,主时钟clkin驱动MMCM实例化为clkip/mmcm0的CLKIN,自动产生的生成时钟名称为cpuclk,约束到clkip/mmcm0/CLKOUT

 

2.2.5 重命名生成时钟

    对于自动生成的生成时钟,可以使用约束对其进行重命名,命令格式如下

new_name:重命名的名称

source_object:为自动生成时钟的源对象

source/master_clock:在源对象source_object存在其他时钟时,必须加上该参数,避免冲突或产生歧义

create_generated_clock -name new_name [-source master_pin] [-master_clock master_clk] source_object

    并不是生成时钟都可以重命名,自动生成时钟重命名于来源的pin,例如MMCM/PLL的输出端口,不能重命名于BUFG的输出端口,并且用户定义的生成时钟不能重命名。

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

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

相关文章

MongoDB-1入门介绍

NoSQL NoSQL(NoSQL Not Only SQL),意即反SQL运动,指的是非关系型的数据库 优点 1、对数据库高并发读写。 2、对海量数据的高效率存储和访问。 3、对数据库的高可扩展性和高可用性。 弱点: 1、数据库事务一致性需求 2、数据库的写实时性…

flink集群与资源@k8s源码分析-集群

0 介绍 本文是flink集群与资源@k8s源码分析系列的第二篇-集群 1 场景 下面详细分析各用例 2 启动k8s集群 k8s集群支持session和application模式,job模式将会被废弃,本文分析session模式集群 Configuration作为配置容器,几乎所有的构建需要从配置类获取配置项,这里不显示…

将docker镜像打成tar包

# 打包 docker save -o zookeeper.tar bitnami/zookeeper:3.9.0-debian-11-r11# 解压 docker load -i zookeeper.tar

day27IO(异常File综合案例)

1. 异常 1.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况,最…

事务碰上锁好似那油锅里进了火

目录 前言 场景 代码复现 提出疑问 该怎么解决呢 1.使用编程式事务 2.将事务独立出一个方法 前言 很多时候我们谈起事务都是如虎色变,一想起来都是脑袋懵懵的 事务的隔离级别及传播机制是什么Spring的事务底层实现原理了解吗哪几种情况下事务会失效 …

【探索C++】C++对C语言的扩展

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…

JavaScript基础知识12——运算符:算数运算符,比较运算符

哈喽,大家好,我是雷工。 以下为JavaScript基础知识学习笔记。 一、算数运算符 1、算术运算符:即进行数学计算的符号。 2、有哪些算数运算符: :加法 -:减法 *:乘法 /:除法 %:取余(…

系统架构设计师-数据库系统(3)

目录 一、数据控制 1、安全性 2、完整性 3、并发控制 4、故障恢复 二、数据库设计概述 1、数据库设计关注的问题 2、数据库性能优化 3、规范化与反规范化 一、数据控制 1、安全性 2、完整性 (1)实体完整性约束:规定基本关系的主属性不能取空…

Python开发利器之VS Code

Python官方提供了一个Python集成开发环境(IDE): IDLE (Integrated Development and Learning Environment)。 它提供了一个图形用户界面,可以让开发者编写、调试和执行Python程序。IDLE包含Python解释器、代码编辑器、调试器和文件…

RK3568平台开发系列讲解(工具命令篇)ADB的安装

🚀返回专栏总目录 文章目录 一、ADB介绍二、Windows 下安装 adb 工具沉淀、分享、成长,让自己和他人都能有所收获!😄 一、ADB介绍 adb 全称 Android Debug Bridge,直译过来就是 Android 调试桥,它是一个通用的命令行工具。adb 做为 Android 设备与 PC 端连接的一个桥梁…

揭秘:Wasserstein GAN与梯度惩罚(WGAN-GP)

一、说明 什么是梯度惩罚?为什么它比渐变裁剪更好?如何实施梯度惩罚?在提起GAN对抗网络中,就不能避免Wasserstein距离的概念,本篇为系列读物,目的是揭示围绕Wasserstein-GAN建模的一些重要概念进行探讨。 图…

浅谈DBT的一些不足之处

DBT的好处是显而易见的,它支持连接多达41种数据库。而且不需要你写DDL语句,只要写select语句,DBT会自动帮你推断schema结构,将数据写入到数据库中: 但是使用了一段时间之后,发现DBT也存在着如下这些不足之处…

/usr/bin/ld: cannot find -lmysqlcllient

文章目录 1. question: /usr/bin/ld: cannot find -lmysqlcllient2. solution 1. question: /usr/bin/ld: cannot find -lmysqlcllient 2. solution 在 使用编译命令 -lmysqlclient时,如果提示这个信息。 先确认一下 有没有安装mysql-devel 执行如下命令 yum inst…

【Linux】Ubuntu美化主题【教程】

【Linux】Ubuntu美化主题【教程】 文章目录 【Linux】Ubuntu美化主题【教程】1. 安装优化工具Tweak2.下载自己喜欢的主题3. 下载自己喜欢的iconReference 1. 安装优化工具Tweak 首先安装优化工具Tweak sudo apt-get install gnome-tweak-tool安装完毕后在菜单中打开Tweak 然后…

**20.迭代器模式(Iterator)

意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 上下文:集合对象内部结构常常变化各异。对于这些集合对象,能否在不暴露其内部结构的同时,让外部Client透明地访问其中包含的元素…

nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(三)

因为这个版本的若依plus不支持本地文件上传&#xff0c;所以需要增加这些本地上传文件的后端代码 和前端代码修改。 1、后端部分 先配置跳过测试吧&#xff0c;平时编译也不需要这个 <!--添加配置跳过测试--><plugin><groupId>org.apache.maven.plugins<…

Python常用库(六):科学计算库-Numpy[上篇]:创建、访问、赋值

1.Numpy 1.1 介绍 NumPy是Python中非常流行且重要的科学计算库&#xff0c;提供了一个强大的多维数组对象(ndarray)和许多数学操作&#xff0c;包括矩阵运算、线性代数、微积分等等。 numpy是Python中一个非常有用的工具&#xff0c;特别是在需要进行数值计算、线性代数计算、…

淘宝分布式文件存储系统( 三 ) -TFS

淘宝分布式文件存储系统( 三 ) ->>TFS 目录 : 文件重新映射的接口介绍文件映射 mmap_file.cpp的实现进行测试 文件重新映射 (增加 或者 减少 文件映射区域的大小) mremap() 函数的原型如下 #include <sys/mman.h> void *mremap( void * old_address , size_…

阿里测开面试大全(一)附答案完整版

万字长文&#xff0c;建议收藏 1 什么是POM&#xff0c;为什么要使用它&#xff1f; POM是Page Object Model的简称&#xff0c;它是一种设计思想&#xff0c;而不是框架。大概的意思是&#xff0c;把一个一个页面&#xff0c;当做一个对象&#xff0c;页面的元素和元素之间操…

JS Ajax 封装

ajax 封装 一、 什么是Ajax&#xff1f;二、 Ajax的优缺点&#xff1f;2.1 优点2.2 缺点 三、 Ajax的使用3.1 状态码3.2 xhr的基本使用3.3 ajax原生封装&#xff1a;3.3.1 触发GET请求&#xff1a;3.3.2 调用POST请求&#xff1a; 四、Ajax的约束 一、 什么是Ajax&#xff1f; …