synopsys-SDC第六章——生成时钟

2023-10-27


之前准备了一段时间的秋招,好久没有学SDC,现在准备SDC和秋招同时准备,更新。

  • 一个复杂的设计都需要多个时钟信号来共同完成功能,设计中异步时钟不能共享确定相位关系的时钟信号,也不必过于关心其时钟源,但是同步信号往往产生于同一个时钟源(如时钟分频器、时钟乘法器、时钟门控)
  • 不同模块运行在不同时钟下,如果不考虑各自关系,将会带来异步性的设计问题。

时钟派生方式

  • 时钟分频器就不过多说了,无非是用DFF做counter完成N分频。
  • 时钟乘法器在此介绍一下,我们在设计中常用PLL完成倍频的需求,但是同样可以通过缓冲器和反相器引入delay,再结合XOR完成倍频。
    在这里插入图片描述

如上图所示,通过buffer和inv完成对源时钟的延时,再将延时后的时钟和源时钟一同输入XOR,便可以完成倍频的功能,但是buffer和inv需要仔细计算过delay time。

  • 时钟门控,这种方式主要通过使能信号来控制时钟是否对后级起作用,虽然时钟信号一样,但是对电路来说时钟源并不一样。(时钟门控常用于低功耗设计中)

create_generated_clock

在SDC中,用于设定生成时钟的命令是create_generated_clock,而它的设计对象可能是pin、port或net.

  • 设定生成时钟的源引脚可用 -source选项。(此处需要注意源对象和生成时钟源之间的区别,源对象是指生成时钟设定在哪个位置,而生成时钟源指哪个是参考信号
  • 只要定义了generate clock,则开发工具将基于source clock派生时钟特性(周期、波形等)
  • 和create_clock一样,用-name表征每个clock的名字,每个generate clock同样要有唯一的name
  • 设定生成时钟的特性如:-edges、-divide_by、-multiply_by

edge divide multiply

edge通过指定波形边沿的变化来描述generate clock。
divide_bymultiply_by通过直接对源时钟的分频,倍频来描述generate clock

在这里插入图片描述

对上述电路,分别用edge、divide_by、multiply_by对其约束

create_clock -period 10 -name CLK [get_ports CLK]
create_generate_clock -name LSB -source [get_port CLK]
-divide_by 2 [get_pins FF1/Q]
create_generate_clock -name MSB -source [get_pins FF1/Q]
-divide_by 2 [get+pins FF2/Q]

create_generated_clock -name LSB -source [get_ports CLK]
-edges [1 3 5][get_pins FF1/Q]
create_generated_clock -name MSB -source [get_pins FF1/Q]
-edges [1 3 5][get_pins FF2/Q]

不同的分频时钟约束与上述约束类似。

edge_shift

  • 除此之外,还可以用**-edge_shift**描述每个边沿的相位偏移,例如
create_generated_clock -name CLKOUT -source [get_ports CLK]
-edges[1 1 3] -edge_shift[0 2 0][get_pins X]

上面的指令表示:

  • 在source clock的第一个边沿产生上升沿
  • 在source clock的第一个边沿后2ns产生下降沿
  • 在source clock的第三个边沿产生上升沿

多同源时钟

下图是一个基于三分频电路的时钟切换电路。
在这里插入图片描述
电路输入的mux会决定最后分频的divide clk对应的是clk1还是clk2,这就导致generate clock的source clock不同,所以写约束时要注意一些。

create_clock -name C1 -period 10 [get_ports CLK]
create_clock -name C2 -period 15 [get_ports CLK] -add

#C1
create_generated_clock -name GC1 -divide_by 3 -source [get_port CLK]
-master_clock C1 [get_pins FF2/Q]

#C2
create_generated_clock -name GC2 -divide_by 3 -source [get_port CLK]
-master_clock C2 [get_pins FF2/Q] -add

如果用户要得到两个生成时钟的STA,需要添加-add,否则后一个会覆盖前一个。
而master_clock用于定义哪些时钟与用于派生generate clock的特定源对象关联。

使能组合路径

  • 在设计中会出现时钟随着数据作为输出,这种结构的优点时时钟和数据按同样的路径来传送,如下图:
    在这里插入图片描述
  • 如果有些路径在本质上时时序电路,即他们通过时序电路单元,则generate clock通常无损,但是如果时组合逻辑和时序逻辑的混合,那么会出现时钟失效的情况,这时候需要**-combinational**约束来阻隔时序电路。
create_generated_clock -name CLKOUT -combinational
-source [get_pins FF1/Q] [get_ports CLKOUT] 

其他注意事项

  • 一个遗漏的generate clock将会产生无约束寄存器
  • 需要保证generate clock 设置了source clock
  • 如果时钟收敛于多种路径,则特别注意禁用时序电路路径



搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

synopsys-SDC第六章——生成时钟 的相关文章

  • 基于FPGA的简易BPSK和QPSK

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • x 和 z 值在 Verilog 中到底代表什么?

    Verilog 标准定义了四种类型的位值 0 1 x 和 z 其中 0 表示低 1 表示高 x 表示未知 z 表示未驱动网络 有几个问题 x 是否意味着我们不知道该值是 0 还是 1 0 或 1 或 z 或者该值是未知的并且可以是 0 1
  • Verilog 中总是后面跟着 #(...) pound 是什么意思?

    在一个简单的时钟生成器示例中 我看到以下代码 always cycle 2 clk clk 我以前总是见过 但没见过井号 我试图在文档中找到它 但我所能找到的只是一些对 实值端口 的引用 没有进一步的阐述 这是一个延迟操作 它本质上只是读取
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

    我正在尝试想出一种方法来添加寄存器的各个位 例如 if regA 111000 then regB 3 位的总和regA 1 Verilog或SystemVerilog中是否有可以直接使用的可综合函数 运算符来执行此操作 如果不是 那么问题
  • 「HDLBits题解」Gates4

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接 Gates4 HDLBits module top module input 3 0 in out
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • Verilog 错误:必须连接到结构网络表达式

    我收到错误 output or inout port Qout must be connected to a structural net expression 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • 您可以使用类 C 语言对 FPGA 进行编程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在大学里 我用类似 C 的语言编写了 FPGA 不过 我也知道人们通常使用 Verilog 或 VHD
  • 如何将时钟门映射到技术库单元

    我的设计中有以下时钟门 module my clkgate clko clki ena Clock gating latch triggered on the rising clki edge input clki input ena ou
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • 向左旋转 verilog 大小写

    我的任务是用verilog编写一个16位ALU 当我做需要旋转操作数和进行2的补码加法和减法的部分时 我发现了困难 我知道如何用纸和铅笔解决这个问题 但我无法弄清楚如何在 Verilog 中做到这一点 例如 A表示为a15 a14 a13
  • 映射 MMIO 区域写回不起作用

    我希望对 PCIe 设备的所有读写请求都由 CPU 缓存进行缓存 然而 它并没有像我预期的那样工作 这些是我对回写 MMIO 区域的假设 对 PCIe 设备的写入仅在缓存回写时发生 TLP 有效负载的大小是缓存块大小 64B 然而 捕获的
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • 我怎样才能让我的verilog移位器更通用?

    这里我有一个移位器 但现在它最多只能工作 3 位 我一直在寻找 但不知道如何让它工作最多 8 位 module shifter a b out input 7 0 a b output 7 0 out wire 7 0 out1 out2
  • 如何修复实例上的错误:未定义的变量 B?

    我想编译此 Verilog 代码 但在实例中出现错误B模块中的MultiP module error 1 Undefined variable B error 2 near Adder1 syntax error unexpected ID
  • Verilog 双向握手示例

    我正在完成一个项目 要求是处理器内部功能单元之间的双向握手 我知道它是什么 但是有没有任何 标准 或一个简单的例子 我唯一能想到的就是两个单元之间 当它们之间有一条数据线并且当 X 发送到 Y 时 会给出一个单独的 发送 信号 当 Y 接收

随机推荐

  • React怎样在非组件环境下拿到路由信息实现路由跳转

    最近写项目的时候遇到一个问题 如图所示 用户token失效后 页面需要跳转回登录页面 用location href直接赋值会导致页面刷新 对SPA来说是可耻的 而且location href跳转的时候 页面并没有提示信息出现就直接跳转了 然
  • 微信小程序——flex布局

    flex布局的基本知识 flex布局作用于父容器之上 用于控制其子盒子的位置和排列的方式 flex是Flexible Box的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为Flex布局 box display
  • 应用层概述、基本原理

    网络应用体系结构 客户机 服务器结构 Client Server C S 点对点结构 peer to peer P2P 混合结构 Hybrid 1 客户机 服务器结构 服务器 7 24小时提供服务 永久性访问地址 域名 利用大量服务器实现可
  • aix安装bff_在AIX中安装与维护软件

    学习内容 在 AIX 中安装与维护软件 学习目标 1 了解安装软件包的含义及命名规则 2 了解 AIX 如何发布补丁 知道自己的 AIX 及已安装软件的版本情况 3 知道如何安装与管理软件及升级 4 会修复损坏的软件 5 知道如何通过 Fi
  • Linux/Windows中根据端口号关闭进程及关闭Java进程

    目录 Linux 根据端口号关闭进程 关闭Java服务进程 Windows 根据端口号关闭进程 Linux 根据端口号关闭进程 第一步 根据端口号查询进程PID 可使用如下命令 netstat anp grep 8088 以8088端口号为
  • java判空方式

    java判空方式 1 数据结构判空 map list set CollectionUtils isEmpty 为空 CollectionUtils isNotEmpty 不为空 2 对象判空 Objects isNull 为空 Object
  • IPv6你知道多少?

    IPv6是什么 互联网协议 IP 地址是分配给连接到互联网的每个设备的数字标识符 从广义上讲 IP地址允许设备相互通信并交换信息 Internet协议版本4 IPv4 于1983年发布 至今仍用于大多数Internet通信 IPv4地址使用
  • MongoDB.WebIDE:升级版的Mongodb管理工具

    很早以前收藏了一片文章 强大的MongoDB数据库管理工具 最近刚好要做一些MongoDB方面的工作 于是翻出来温习了一下 用起来也确实挺方便 不过在使用过程中出现了一些个问题 加上更喜欢MongoUVE的操作习惯 于是决定 自己动手 丰衣
  • Java之object和string的理解

    Java之object和string的理解 文章链接http blog csdn net qq 16628781 article details 65036244 知识点 栈区 堆区和方法区 object类clone 和qeuales 方法
  • dubbo之mock模拟

    1 写在前面 考虑这样的场景 当服务提供者还没有开发完毕或者是因为某些原因无法启动时 会导致服务消费者方的停滞 此时为了能够正常的开发测试 可以使用mock功能 在服务消费者端提供一个服务接口的mock实现类 来模拟调用服务提供者正常获取结
  • RCE高危漏洞预警:CVE-2021-40444简要分析

    漏洞影响及其危害 未经身份验证的攻击者可以利用该漏洞在目标系统上执行代码 Microsoft发布了一份关于此漏洞的官方公告 这篇博客文章讨论了该漏洞如何发挥作用 我们已获得多个利用此漏洞的文档样本 文档包中的document xml rel
  • JSONP 教程

    本章节我们将向大家介绍 JSONP 的知识 Jsonp JSON with Padding 是 json 的一种 使用模式 可以让网页从别的域名 网站 那获取资料 即跨域读取数据 为什么我们从不同的域 网站 访问数据需要一个特殊的技术 JS
  • CTFHUBWeb技能树——信息泄露writeup

    web之信息泄露 一 目录遍历 二 PHPINFO 三 备份文件下载 1 网站源码 2 bak文件 3 Vim缓存 4 DS Store 四 Git泄露 1 Log 2 Stash 3 Index 五 SVN泄露 六 HG泄露 一 目录遍历
  • 一口气用Python写了13个小游戏(附源码)

    今天给大家分享13个游戏源码 可以自己复现玩玩 研究下里面的编程逻辑 对学习编程 特别是初学者 应该会有很大帮助 1 吃金币 源码分享 import os import cfg import sys import pygame import
  • 做自媒体创作,这些坑你都踩过吗?快来避雷

    做自媒体以来 我经历过不少误区 走了很多弯路才觉悟出来 这里分享给大家 看看你有没有踩坑 1 不要把涨粉放在第一位 粉丝多少不是关键 20万粉丝的创作者我也有接触 几乎无变现能力 2 标题和封面的重要性 我以前愿意花几个小时写一篇文章 或者
  • nginx脚本

    将wget下载nginx 1 22 0 tar gz包 直接复制到文本中 添加执行权限 chmod 744 脚本名称 脚本名称或sh 脚本名称 执行脚本 bin bash shijian 20220717 xingming zs echo
  • Linux基础笔记

    文章目录 一 Linux目录结构 二 vi 和 vim 1 三种方式 2 基础操作 三 Linux基础命令 1 关机 重启 2 登录 注销 3 用户管理 4 运行级别 5 帮助指令 6 文件目录指令 7 压缩 解压 8 组管理 9 权限管理
  • Python大神给免费分享一个爬取12306火车票例子(附源码)

    上面是以前写的文章的资源 在以前的文章中有对应的资源 有兴趣的可以去查看 作为一种便捷地收集网上信息并从中抽取出可用信息的方式 网络爬虫技术变得越来越有用 使用Python这样的简单编程语言 你可以使用少量编程技能就可以爬取复杂的网站 如果
  • vue中使用video插件vue-video-player

    进入我们的项目文件夹中 并打开命令行窗口 然后进行下面的步骤 1 安装vue video player 输入命令 npm install vue video player S 2 引入插件 在项目的入口文件main js中引入插件 如下 i
  • synopsys-SDC第六章——生成时钟

    synopsys SDC第六章 生成时钟 时钟派生方式 create generated clock edge divide multiply edge shift 多同源时钟 使能组合路径 其他注意事项 之前准备了一段时间的秋招 好久没有