约束综合中的逻辑互斥时钟(Logically Exclusive Clocks)

news2024/11/25 22:35:57

注:本文翻译自Constraining Logically Exclusive Clocks in Synthesis

逻辑互斥时钟的定义

逻辑互斥时钟是指设计中活跃(activate)但不彼此影响的时钟。常见的情况是,两个时钟作为一个多路选择器的输入,并根据sel信号决定哪一个时钟被激活。一个处理逻辑互斥时钟的重要指导思想就是逻辑互斥时钟不应该在mux以外的地方发生交互。
在这里插入图片描述
如上图所示,设计中共有两个时钟,分别是CLKA和CLKB,两个时钟是多路选择的,某一时刻,只有一个时钟对电路起作用。一种约束的方法是使用set_case_analysis约束,即假定SEL恒为0或者1,然后进行时序分析。否则,若不进行任何约束,则flop-1和flop-2的发起时钟和捕获时钟分别有两种可能,因而综合工具总共会分析四条路径,如下表所示:

flop-1发起时钟flop-2捕获时钟
CLKACLKA
CLKBCLKA
CLKACLKB
CLKBCLKB

然而,事实上,表中中间的两种情况永远不可能发生。因此,为了杜绝这一问题,我们可以采用下面所示的约束方式:

set_clock_groups -logically_exclusive -group CLKA -group CLKB

通过上述约束,综合工具只会分析CLKA–>CLKA和CLKB–>CLKB这两条路径。
事实上,我们也可以通过设置伪路径来实现:

set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]

在这里插入图片描述

现在考虑另一种情况,如上图所示,CLKA直接驱动了flop-3,因此,如果我们仍然采用set_clock_groups -logically_exclusive -group CLKA -group CLKB约束,那么综合工具只会分析CLKA–>CLKA和CLKB–>CLKB之间的路径,而事实上,flop-3和flop-2之间可能存在CLKA–>CLKB这种情况
因此,为了解决上述问题,我们需要为CLKA和CLKB创建生成时钟,如下所示:

create_generated_clock -name -CLKA_GEN -source CLKA [get_pins clk_mux/out]
create_generated_clock -name -CLKB_GEN -source CLKB [get_pins clk_mux/out]

然后,我们设置生成时钟之间是逻辑互斥的:

set_clock_groups -logically_exclusive -group CLKA_GEN -group CLKB_GEN

经此约束后,原先遗漏的路径CLKA(flop-3)–>CLKB(flop-2)也会被综合工具分析了。
在这里插入图片描述
考虑上图所示的情况,由图可知,CLKA和CLKB被信号SEL1 MUX,CLKC和CLKD被信号SEL2 MUX,flop-1和flop-2以及flop-6被CLKA和CLKB MUX后的时钟驱动,而flop-4、flop-5以及flop-3被CLKC和CLKD MUX后的时钟驱动。
为了对上述设计进行约束,我们有:

set_clock_groups -logically_exclusive -group CLKA -group CLKB
set_clock_groups -logically_exclusive -group CLKC -group CLKD

我们也可以通过设置伪路径实现上述效果:

set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]
set_false_path -from [get_clocks CLKC] -to [get_clocks CLKD]
set_false_path -from [get_clocks CLKD] -to [get_clocks CLKC]

在这里插入图片描述
我们在上述例子的情况再作了一些改变,即两个MUX的SEL信号是相同的,此时CLKA和CLKB以及CLKD不能交互,CLKC也不能和CLKD以及CLKB交互,因此,我们可以做如下约束:

set_clock_groups -logically_exclusive -group “CLKA CLKC” -group “CLKB CLKD”

上述约束中,同一组内的时钟可以交互,而不同组间的时钟不能交互,其效果正是我们想达到的。

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

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

相关文章

【人工智能前沿弄潮】——生成式AI系列:Diffusers应用 (2) 训练扩散模型(无条件图像生成)

无条件图像生成是扩散模型的一种流行应用,它生成的图像看起来像用于训练的数据集中的图像。与文本或图像到图像模型不同,无条件图像生成不依赖于任何文本或图像。它只生成与其训练数据分布相似的图像。通常,通过在特定数据集上微调预训练模型…

Idea报错:Cannot resolve symbol “springframework“以及各种依赖包

问题描述: Idea导入了maven项目之后出现报错Cannot resolve symbol “springframework” ,识别不了这个标识或者找不到这个包,明明这些依赖和包都有就是出现报错,并且运行按钮变成灰色 解决办法: 其实这个原因大概率就…

React构建的JS优化思路

背景 之前个人博客搭建时,发现页面加载要5s才能完成并显示 问题 React生成的JS有1.4M,对于个人博客服务器的带宽来说,压力较大,因此耗费了5S的时间 优化思路 解决React生成的JS大小,因为我用的是react-router-dom…

从源码Debug深入spring事件机制,基于观察者模式仿写spring事件监听骨架

文章目录 1.测试案例2.DEBUG源码分析3. 异步监听4.ApplicationListener子接口5. 注解支持6. 基于观察者模式高仿spring事件监听6.1 先定义自定义一个事件6.2 定义两个监听器6.3 定义一个持有所有监听器的对象,类似spring的SimpleApplicationEventMulticaster6.4 事件…

全面解析 Axios 请求库的基本使用方法

Axios 是一个流行的基于 Promise 的 HTTP 请求库,用于在浏览器和 Node.js 中进行 HTTP 请求。它提供了简单易用的 API,可以发送各种类型的请求(如 GET、POST、PUT、DELETE等),并处理响应数据,Axios 在前端工…

Java——线程睡眠全方位解析

线程睡眠的方法: 在 Java 中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和唤醒的方法,在线程休眠之后,可…

七牛云如何绑定自定义域名-小白操作说明——七牛云对象储存kodo

七牛云如何绑定自定义域名 **温馨提示:使用加速cdn自定义域名是必须要https的,也就是必须ssl证书,否则类似视频mp4 之类会无法使用。 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 点击首页——…

Android12之MediaCodec用法套路(三十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

动态链接(8/11)

静态链接的缺点:生成的可执行文件体积较大,当多个程序引用相同的公共代码时,这些公共代码会多次加载到内存,浪费内存资源。 为了解决这个问题,动态链接对静态链接做了一些优化:对一些公用的代码&#xff0…

邻接表创建无向表(C++ 代码)

#include<iostream>//邻接表创建无向表 #define MVNum 100 using namespace std; typedef char VerTexType; typedef struct Arcnode//边节点 {int adjvex;//该边所指向的顶点的位置struct Arcnode* nextarc;//指向下一条边的指针 }Arcnode; typedef struct vnode//顶点节…

【数据结构】二叉树篇| 纲领思路02+刷题

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 所谓自由&#xff0c;不是随心所欲&#xff0c;而是自我主宰。——康德 目录 一、前言二、刷题1、翻转二叉树 2、二叉树的层序遍历✨3、 二…

SpringMVC 详细教程及源码讲解

目录 一、SpringMVC简介1. 什么是MVC&#xff1f;2.什么是SpringMVC?3.SpringMVC的特点&#xff1f; 二、SpringMVC入门案列1. 开发环境2. 创建Maven工程2.1 添加web模块2.2 引入依赖 3. 配置web.xml3.1 默认配置方式3.2 扩展配置方式 4.创建请求控制器5. 创建SpringMVC的配置…

基于ChatGLM的Deepin文档问答Bot

一、背景介绍 题目来源&#xff1a;2023全国大学生计算机系统能力大赛操作系统设计赛-功能挑战赛题目地址&#xff1a;proj225-document-question-answering-bot题目描述&#xff1a;https://wiki.deepin.org 上有900多条deepin系统相关的中文教程和词条&#xff0c;请编写能根…

【第358场周赛】翻倍以链表形式表示的数字,Java解密。

LeetCode 第358场周赛 恒生专场。 文章目录 剑指Offer:翻倍以链表形式表示的数字示例:限制:解题思路:剑指Offer:翻倍以链表形式表示的数字 【题目描述】 给你一个 非空 链表的头节点 head ,表示一个不含前导零的非负数整数。 将链表 翻倍 后,返回头节点 head 。 示例…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令&#xff1a; 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时&#xff0c;项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中&#xff0c;…

第四课 学习动词短语

文章目录 前言动词短语动副词组及物动副词组实义动词副词介词动宾词组固定特殊可分开动词短语时态变化规则 一、动副词组1、go ahead 先走&#xff0c;进行 不及物go along 前进&#xff0c;向前走&#xff0c;与....一道去go away 走开&#xff0c;离去&#xff0c;逃走&#…

全网最全的接口自动化测试教程

为什么要做接口自动化 相对于UI自动化而言&#xff0c;接口自动化具有更大的价值。 为了优化转化路径或者提升用户体验&#xff0c;APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化&#xff0c;导致自动化的代码频繁变更&#xff0c;没有起到减少工作量的效果。 而…

用友 U8 CRM 任意文件上传+读取漏洞复现(HW0day)

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞&#xff0c;攻击…

RK3399平台开发系列讲解(入门篇)Linux内核常见的规则

🚀返回专栏总目录 文章目录 一、编码风格二、内核结构分配和初始化三、面向对象的思想沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在内核代码的演化过程中应该遵守标准规则 一、编码风格 参考一下内核编码风格手册,它位于内核源代码树的 Documentat…

Flink 火焰图

方式一 使用 Flink Web UI 的 Flame Graph Flink 自己也支持了 Task 粒度的 Flame Graphs 功能,并且可以细化到 subtask 粒度。 第一步:配置启用功能 Flink 作业动态参数里增加配置:“rest.flamegraph.enabled”: “true” 并重启作业。当前该功能没有默认开启,因为这个功…