当前位置: 首页 > news >正文

FPGA时序分析与约束(10)——生成时钟

 一、概述

        最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候,它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号,当多个时钟域交互时,设计中只有异步时钟很难满足建立和保持要求。我们将在后面的内容中介绍这部分问题,同步时钟则会共享固定相位关系。往往同步时钟产生自同一个时钟源。

        如今的Soc在同一个芯片内包含多种异构设备。同一个芯片内可能包含高速的处理器和低速的存储器。这些工作在不同频率下的器件通常由不同的时钟触发。每个部分的运行是基于各自时钟的,这些会带来异步性的设计问题。这可能导致几个时钟都源于同一个主时钟,这些时钟称为生成时钟(衍生时钟、派生时钟)。

        在FPGA设计中,生成时钟(Generated Clock)有两种类型:第一种是由FPGA的专用时钟管理模块(PLL/MMCM)产生的时钟(这种时钟可以由时序引擎自动推断出来);第二种是由用户通过LUT或寄存器产生的时钟(这种时钟必须由用户手动约束)。

二、如何进行生成时钟约束

2.1 约束方式

        生成时钟的定义取决于主时钟的特性,生成时钟约束必须指定时钟源,这个时钟源可以是一个已经约束好的主时钟或者另一个生成时钟。生成时钟并不直接定义频率、占空比等参数,而是定义与其时钟源的相对关系,如分配系数、倍频系数、相移差值、占空比差值等。

        生成时钟的约束定义能够帮助时序工具进行准确的时序分析。生成时钟约束时必须指定某个源时钟或某个已知的时钟传输扇出节点,由此时序工具才能准确地计算生成时钟相对于源时钟的插入时延。

2.2 生成时钟约束语法create_generated_clock

        SDC中约束生成时钟create_generated_clock。该指令的BNF是:

create_generated_clock [source_objects]-source clock_source_pin[-master_clock master_clock_name][-name generated_clock_name][-edges edge_list][-divide_by factor][-multiply_by factor][-invert][-edge_shift shift_list][-duty_cycle percent][-combinational][-add][-comment comment_string]

2.2.1 定义生成时钟的源

        设定生成时钟的源引脚可利用-source选项,这个选项可以指明生成时钟是由哪个主时钟的源引脚派生的。

        这里我们理解一下源对象和生成时钟源之间的区别,源对象指的是生成时钟(或者时钟)设定在哪个位置,而生成时钟源指的是具体是哪个获得生成时钟的参考信号。

        一个源对象可以具有多个时钟。如果主时钟源引脚有多个时钟扇出,则生成时钟必须表明是由哪个主时钟派生来的。其功能可以通过-master_clock实现,这个选项采用了SDC时钟名称,该时钟已经被定义为驱动主时钟源引脚。只要定义了生成时钟,则开发工具将基于源的波形特性派生时钟特性。(如波形、周期等)

        对于通过特定源生成的时钟,重要的一点是源必须能够通过某种方式保持与生成时钟的相关性。一种常见的错误是将生成时钟指定于一个并未扇出生成时钟的特定源。实际上这意味生成时钟的波形被设定在一个源引脚处的波形函数上,它与生成时钟无关。开发工具不能捕获这种情况,从而导致在静态时序分析期间将错误的时钟波形用于生成时钟。

2.2.2 时钟命名

        像主时钟一样,生成时钟也需要通过名称来标识。可通过-name选项设定一个名称。若没有定义-name时,开发工具会自动指派一个名称。于生成时钟建立依赖关系后,任何SDC指令都将引用该名称。

2.2.3 设定生成时钟的特性

        设定生成时钟的特性可以利用以下3个选项中的1个:

        1、-edges ——作为一个对应源时钟边沿的整数数列,它表明了是从哪个生成时钟而产生的时钟边沿。时钟沿是指生成时钟交替的上升沿和下降沿。时钟沿的个数必须为奇数个整数,并且应当至少由3个整数表示一个完整生成时钟的周期。时钟沿计数由“1”开始,这个“1”表示源时钟的第一个上升沿。我们以下图为例:

create_clock -period 10 -name CLK [get_ports CLK]create_generated_clock -name LSB -source [get_ports CLK]
-edges {1 3 5}{get_pins FF1/Q}//用FF1/Q约束FF2/Q
create_generated_clock -name MSB -source [get_ports FF1/Q]
-edges {1 3 5}{get_pins FF2/Q}//用CLK约束FF2/Q
create_generated_clock -name MSB -source [get_ports CLK]
-edges {1 5 9}{get_pins FF2/Q}

3b1232f0a972473e90ede451353afd19.jpeg

        2、-divide_by——这表示生成时钟通过某个因子而分频,周期则通过这个因子而加倍。

        3、-multiply_by——这表示产生时钟通过某个因子而倍频,周期则要除以这个因子。应当注意的是,尽管时钟通过周期特性来定义,但要记住multiply_by和divide_by则是通过频率特性来设定的(即周期的倒数)。

        总的来说,任何使用 -divide_by 或 -multiply_by 来表示的生成时钟也可以使用-edges来表示。反之则未必正确。

        使用 -divide_by 或 -multiply_by 生成时钟有时需要进行取反,可以使用-invert选项来设定这个功能。   

        当定义的时钟需要倍频的时候占空比可以用-duty_cycle来设定,该选项指可以配合 -multiply_by来使用,并以表示倍频时钟为1时脉冲宽度的百分比。

2.2.4 时钟沿位移

        生成时钟的时钟沿可能受到时间的影响而发生位移。-edge_shift 选项选取一组浮点数来表示在时间单元内每一个时钟沿的位移。该选项必须具有与时钟沿数量相同的参数来表示每个生成时钟沿的位移。我们举个例子进行说明:

create_generated_clock -name PLUSE -source [get_ports clk]
-edges {1 1 3} -edge_shift{0 2 0}{get_pins AN1/Z}

        这段指令表示,在生成时钟上:

  • 在第一个源时钟沿产生上升沿
  • 在第一个源时钟沿达到后2ns后产生下降沿
  • 在第三个源时钟沿产生下一个上升沿

三、总结

        与主时钟相同,对生成时钟正确建模也很重要。否则可能导致时序收敛的迭代增加。由SDC约束定义的生成时钟,若其特性电路与实际功能不匹配,这很难通过调试发现。许多情况下,设计虽然与时序相符,但硬件却呈现出完全不一致的状态。
        当定义生成时钟时,时钟的特性基于源时钟的特性而构成。通常可以直接通过create_clock在对象上定义相同的特性,而不利用生成时钟。从时序分析的角度来看,只要特性一致,时钟由create_generated_clock还是由create_clock设定并不重要。然而,若时钟是另一个时钟派生的,则无论何时都建议使用create_generated_clock,而非create_clock。这样做更易于维护和改进,因为修改源时钟的特性将直接影响生成时钟的特性。

        同样,利用正确的约束可更好地模拟设计意图,当修改或改进约束时会减少产生错误的概率——包括移植技术和设计。
        此外,当设计中多个时钟交互工作时,仅正确地定义时钟并不能满足要求,同样需要准确地定义各个时钟之间的关系。

 

相关文章:

FPGA时序分析与约束(10)——生成时钟

一、概述 最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候,它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号,当多个时钟域交互时,设计中只有异步时钟很难满足建立和保持要求。我们将在后面…...

A. Hit the Lottery

#include<bits/stdc.h> using namespace std; const int N1e55; int n,a[N],res; int main(){scanf("%d",&n);int an/100;n%100;int bn/20;n%20;int cn/10;n%10;int dn/5;n%5;int en;cout<<abcde;return 0; }...

mvn: Downloading from pluginRepository

场景 maven 项目打包 mvn package 报git地址错误&#xff08;有换新的git地址&#xff09; 检查了下 settting.xml的配置没问题。是新的git地址。 处理&#xff1a; 用命令&#xff1a; mvn -X [DEBUG] Message styles: debug info warning error success failure stron…...

docker相关知识

docker-compose https://www.runoob.com/docker/docker-compose.html Compose 使用的三个步骤&#xff1a; 使用 Dockerfile 定义应用程序的环境。 使用 docker-compose.yml 定义构成应用程序的服务&#xff0c;这样它们可以在隔离环境中一起运行。 最后&#xff0c;执行 …...

Springboot 集成 RocketMQ(进阶-消息)

0. 入门篇 Springboot 集成 RocketMq&#xff08;入门&#xff09;-CSDN博客 1. 异步消息 1.1 生产者 GetMapping("/send/async/{messageBody}")public String sendAsyncMsg(PathVariable("messageBody") String messageBody) {// 构建消息对象Message m…...

10 索引优化与查询优化

文章目录 索引失效案例关联查询优化对于左外连接对于内连接JOIN语句原理简单嵌套循环连接SNLJ索引嵌套循环连接INLJ块嵌套循环连接BNLJHash Join 子查询优化排序优化filesort算法&#xff1a;双路排序和单路排序 分组优化分页优化优先考虑覆盖索引索引下推ICP使用条件 其他查询…...

linux PVE安装

先下载安装包&#xff1a; ISO - Proxmox Virtual Environment 普通电脑主机的话&#xff0c;做个U盘启动盘&#xff0c;进行刷机即可。 如果还没制作U盘启动盘&#xff0c;建议用这个&#xff0c;方便多个镜像切换 Download . Ventoy 按照刷机提示页面一步步配置即可&#…...

ZZ038 物联网应用与服务赛题第J套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;J卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…...

【寒武纪(3)】媒体处理系统的系统控制、视频输入和后处理子系统

系统控制 文章目录 系统控制1、配置视频缓存池Video Pool2、配置硬件IP为在线工作&#xff08;不通过DDR数据交互&#xff09;/ 离线工作&#xff08;写入DDR&#xff09;模式3、硬IP可以使用 非Video Block &#xff08;VB&#xff09;内存4、配置是否启动内存传递的压缩 视频…...

Linux下使用vscode编写Python项目

我此处是使用VScode远程连接的服务器&#xff0c;具体方法可看如下&#xff1a; 1、vscode中安装Python插件 按上面步骤安装好Python插件后&#xff0c;重启vscode&#xff1b; 2、选择Python解释器 创建Python项目结构&#xff1a; 按下F1&#xff0c;打开vscode命令栏&am…...

使用 curator 连接 zookeeper 集群 Invalid config event received

dubbo整合zookeeper 如图&#xff0c;错误日志 2023-11-04 21:16:18.699 ERROR 7459 [main-EventThread] org.apache.curator.framework.imps.EnsembleTracker Caller0 at org.apache.curator.framework.imps.EnsembleTracker.processConfigData(EnsembleTracker.java…...

大促期间也要做好低价治理

低价链接无处不在&#xff0c;对于品牌来说&#xff0c;日常治理低价是常规操作&#xff0c;那面对价格变化更快、促销信息更丰富的大促&#xff0c;对低价的治理要求会更高。否则容易被未授权在大促双十一、六一八期间分食流量。 力维网络有专业的团队为品牌提供低价治理服务&…...

【c++】——类和对象(中)——默认成员函数(上)

【学习目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 目录 一.类的6个默认成员函数 二. 构造函数 2.1 概念 2.2.特性 三.析构函数 3.1.概念 3.2 特性 四.拷贝构造函数 4.1.概念 4.2.特性 一.类的6个默认成员函数 如果一个类中什么成员…...

钉钉企业微应用开发C#-HTTP回调接口

官方的STREAM回调推送的方式&#xff0c;试了几次都认证不过&#xff0c;就放弃了还是用HTTP的模式吧。 /// <summary>/// 应用回调/// </summary>/// <param name"model"></param>/// <returns></returns>public static Dictio…...

Rust编程基础之条件表达式和循环

1.if表达式 if 表达式允许根据条件执行不同的代码分支, 以下代码是一个典型的使用if表达式的例子: fn main() {let number 3; ​if number < 5 {println!("condition was true");} else {println!("condition was false");} } 所有的 if 表达式都以…...

MATLAB算法实战应用案例精讲-【人工智能】ROS机器人(补充篇)

目录 前言 ROS 机器人导航调参 1 速度和加速度 2 全局路径规划 3 局部路径规划...

基于8086汽车智能小车控制系统

**单片机设计介绍&#xff0c;基于8086汽车智能小车控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于 8086 的汽车智能小车控制系统是一种将微处理器技术应用于汽车控制的系统。下面是其主要的设计介绍&#xff1a; 硬…...

全光谱大面积氙光灯太阳光模拟器老化测试

氙灯光源太阳光模拟器广泛应用于光解水产氢、光化学催化、二氧化碳制甲醇、光化学合成、光降解污染物、 水污染处理、生物光照,光学检测、太阳能电池研究、荧光材料测试(透射、反射、吸收) 太阳能电池特性测试&#xff0c;光热转化&#xff0c;光电材料特性测试&#xff0c;生物…...

linux添加一条到中间路由器的路由

有时候需要配置一些明细路由&#xff0c;不能直接通过网关进行路由转发 配置示例 ip route add 10.0.12.0/24 via 10.0.41.1 dev bond0 这个命令是用于在Linux操作系统上配置IP路由的命令。具体来说&#xff0c;这个命令的含义是&#xff1a; ip route add: 这部分表示要添加…...

不同MySQL服务的表以及库的数据迁移(/备份)

目标&#xff1a; 将本地主机上usernameroot,passwordroot,port3307的MySQL服务中migration_one数据库的table_11数据表导出到本地的D:\start_java\XinQiUtilsOrDemo\testMigrationMySQL\table_11.bak注意&#xff1a;目前D:\start_java\XinQiUtilsOrDemo\testMigrationMySQL该…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...