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

news2025/2/28 17:41:25

目录

一、主时钟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.coloradmin.cn/o/1026915.html

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

相关文章

看完这篇 教你玩转渗透测试靶机Vulnhub——Grotesque:3.0.1

Vulnhub靶机Grotesque:3.0.1渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:①:信息收集:②:漏洞发现:③:LFI漏洞利用(本地文件包含漏洞):④&#xff1a…

go语言初学(备忘)

1、安装 2 路径配置 C:\Program Files\Go\bin 3新建一个工程 4、下载VSCode 并安装插件 创建一个调试文件 在main目录下新建一个test.go脚本 package main import "fmt" func main() { fmt.Println("Hi 1111") fmt.Println("testasdf") } 断点…

【递归方式,流程回路检测】

背景:后置流程。例如:task1配置后置流程task2,task3。task3配置后置流程task4 问题:需要解决的问题配置时候防止回路,造成死循环:task1配置后置流程task2,task2配置后置流程task1 import jav…

Spring Cloud Gateway快速入门(二)——断言工厂

文章目录 前言1. 什么是Gateway断言工厂2. 为什么要使用断言2.1. 调试和开发:2.2. 防御性编程:2.3. 文档和可读性:2.4. 测试: 3. 常用的Gateway断言工厂3.1 Path断言工厂3.2 Method断言工厂3.3 Header断言工厂3.4 时间断言工厂 4.…

OpenHarmony应用程序包整体说明

用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。一个应用所对应的软件包文件,称为“应用程序包”。 OpenHarmony提供了应用程序包开发、安装、查询、更新、卸载的管理机制,方便开发者开发和管…

C# PaddleDetection 安全帽检测

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using Sdcb.PaddleDetection; using Sdcb.PaddleInference; using System; using System.Drawing; using System.Text; using System.Windows.Forms; using YamlDotNet; using static System.Windows.Forms…

jvm-sandbox-repeater源码解析-配置管理

一、配置初见 源码里提供的控制台截图如下:(怎么搭建自己去百度) 从中取出对应的配置如下: { "degrade": false, //阻断能力 "exceptionThreshold": 1000, //异常采样率 "httpEntrancePatterns&qu…

RuoYi-Vue 新增子module模块,接口报404

新建maven子模块 参考若依添加子模块 解决接口报404 官方用例没有父版本号 需要在ruoyi-admin加上父版本号

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

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

git 使用之撤销暂存区提交

有时候git add 不想要的文件,不想要继续commit了, 可以使用如下命令: git reset HEAD如下命令 比较工作区和暂存区差异,查询是否恢复成功 git diff --cached

【Vue+NodeJS】vue路由及NodeJS环境搭建(Windows版)

一、Vue路由 1、什么是Vue路由 Vue路由是Vue.js框架中用于实现单页面应用&#xff08;SPA&#xff09;的路由管理器。它允许您创建多个页面之间的导航&#xff0c;并通过URL的变化来动态加载不同的组件。Vue路由通过声明式的方式定义页面的导航规则&#xff0c;并提供了一些内置…

机器视觉Halcon中read_image算子探究与学习

目录 算子作用参数注意点算子 作用 读取图片,用于从硬盘上读取图像数据并将其加载到Halcon中进行进一步的显示,分析,处理。 参数 Image:输出参数,表示读取的图像数据。 FileName:输入参数,表示待读取的图像文件的路径和名称 注意点 FileName有相对路径和绝对路径…

K8S:pod集群调度及相关操作

文章目录 一.pod集群调度概念1.调度约束( List-Watch组件)2.List-Watch的工作机制&#xff08;1&#xff09;List-Watch的工作机制流程&#xff08;2&#xff09;List-Watch的工作机制图示 3.调度的过程&#xff08;1&#xff09;调度的任务&#xff08;2&#xff09;调度选择p…

如何选择适合爬虫的动态住宅套餐

在当今互联网时代&#xff0c;爬虫已经成为了一项非常重要的技术。爬虫技术可以帮助企业和个人获取大量的数据&#xff0c;从而进行数据分析和决策。但是&#xff0c;要想让爬虫技术发挥最大的作用&#xff0c;就需要选择一款动态住宅套餐。那么&#xff0c;在选择动态住宅套餐…

vue内置组件Transition的详解

1. Transition定义 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition>会在一个元素或组件进入和离开 DOM 时应用动画。 <TransitionGroup> 会在一个 v-for 列表中的元素或组件被插入&#xff0c;移动&#xff0…

第七章 查找 五、二叉排序树

目录 一、定义 二、代码实现 1、查找 2、插入 3、构造 4、删除 三、查找效率分析 1、查找成功ASL 2、查找失败ASL 四、总结 一、定义 二叉排序树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种特殊的二叉树&#xff0c;它满足以下条件&#xff1a…

计算机竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

通讯网关软件007——利用CommGate X2Mbt实现Modbus TCP访问MSSQL服务器

本文介绍利用CommGate X2Mbt实现Modbus TCP访问MS SQL数据库。CommGate X2MBT是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现上位机通过Modbus TCP来获取MS SQL数据库的数据。 【解决方案】设…

查看linux是centos还是Ubuntu

查看linux是centos还是Ubuntu 命令&#xff1a;cat /etc/os-release

【操作系统笔记】任务调度信号处理CPU上下文

任务调度 何时需要调度执行一个任务&#xff1f; 第一&#xff1a;当任务创建的时候&#xff0c;需要决定是继续执行父进程&#xff0c;还是调度执行子进程 第二&#xff1a;在一个任务退出时&#xff0c;需要做出调度决策&#xff0c;需要从 TASK_RUNNING 状态的所有任务中选…