STA学习记录-generated clock

STA学习记录-时钟定义 (qq.com)

1 generated clock的定义

generated clock是有master clock衍生而来,master clock指的是由create_clock定义的clock

当基于master clock生成一个新的clock时,可以将这个新的clock定义为generated clock

举个栗子,如下图所示,UFF0的功能是将时钟CLKP进行二分频,那么便可以在UFF0的输出端UFF0/Q定义一个generated clock

CLKP在经过UFF0后,后续电路的时钟周期发生了更改,但STA并不知道后续电路的时钟发生了变化,更不知道新的clock的周期是多少,因此需要定义generated clock,让STA知道后续电路的clock已经发生了更改以及新的clock周期是多少

 # 创建一个master clock
 create_clock -name CLKP 10 \
 [get_pins UPLL0/CLKOUT]
 
 # 新的clock被命名为CLKDIV2
 # 它的master clock 在UPLL0/CLKOUT处定义
 # 新的clock是master clock的二分频
 # 新的clock在UFF0/Q处定义
 create_generated_clock \
 -name CLKPDIV2 \
 -source UPPL0/CLKOUT \
 -divide_by 2 \
 [get_pins UFF0/Q]

2 generated clock与master clock的区别

从上面一张图中可以看到,master clock是由电路推出的,generated clock也是由电路推出的,也就是说,其实我们是可以在UFF0/Q定义一个master clock的

那为什么我们要将这个clock定义为generated clock而不是master clock

定义master clock会创建一个新的clock domain,而定义generated clock则不会创建新的clock domain

generated clock与master clock同相,并且不需要进行额外的约束,所以应当尽量将内部的新clock定义为generated clock

master clock的source是时钟定义点,generated clock的source是master clock,因此在report中,clock path的起点是master clock的定义点

此外,master clock的latency也会直接作用于generated clock(也就是说在定义generated clock时不需要再指定latency)

先看一个例子

SYS_CLK由触发器的输出进行门控,由于触发器的输出可能并不是恒定的,因此处理这种情况的一种方式是在UAND1的输出端定义一个generated clock,并且让新的clock与SYS_CLK相同

 created_clock 0.1 [get_ports SYS_CLK]
 
 #创建一个generated clock
 #周期与master clock相同
 created_generated_clock \
 -name CORE_CLK \
 -divide_by 1 \
 -source SYS_CLK \ 
 [get_pins UAND1/Z]

在来看一个generated clock比master clock频率高的例子

#定义master clock
 create_clock -period 10 \
 -waveform {0 5} \
 [get_port PCLK]
 
 #定义generated clock
 create_generated_clock \ 
 -name PCLKx2 \
 -source PCLK \
 -multiply_by 2 \
 [get_pins UCLKMULTREG/Q]

3 门控单元输出端的master clock

来看这个例子

UAND2的两个输入端分别是两个不同的clock,此时我们可以在UAND2的输出端定义一个master clock,因为UAND2的输出与这个输入的clock不大可能具有相位关系

定义方式如下:

create_clock -name SYS_CLK \
 -period 4 \
 -waveform {0 2} \
 [get_pins UFFSYS/Q]
 
 create_clock -name CORE_CLK \ 
 -period 12 \
 -waveform {0 4} \
 [get_pins UFFCORE/Q]
 
 create_clock -name MAIN_CLK \
 -period 12 \
 -waveform {0 2} \
 [get_pins UAND2/Z]

4 使用Edge和Edge_shift 定义generated clock

在定义generated clock时,也可以用-edge-edge_shift的方式定义

先来看一下 什么是edge

看红色方框框住的内容,edge指的是DCLK的每一个边沿(既包括posedge,也包括negedge),从1开始,每遇到一个边沿,增加1

-waveform{}相似,-edge{}-edge_shift{}中的内容也是以上升沿开始的,即-edge{posedge negedge posedge}

-edge{}中,我们给出三个边沿即可,因为通过这三个边沿我们就可以确定generated clock的high duration和low duration

-edge {} 和 -edge_shift {}有一个最大的不同点

在-edge {}中,三个参数指的是上图红色框中的边沿数

而在-edge_shift {}中,三个参数指的是蓝色框框柱的内容,也就是时间

接下来看几个例子

 #创建master clock
 create_clock 2 [get_ports DCLK]
 
 #创建一个generated clock 
 #DCLKDIV2的posedge在DCLK的第2个边沿
 #DCLKDIV2的negedge在DCLK的第4个边沿
 #DCLKDIV2的下一个posedge在DCLK的第6个边沿
 create_generated_clock \
 -name DCLKDIV2 \
 -edges {2 4 6} \
 -source DCLK \
 [get_pins UBUF2/Z]
 
 #与上面相似
 create_generated_clock \
 -name PH0CLK \
 -edges {3 4 7} \
 -source DCLK \
 [get_pins UAND0/Z]
 
 
 create_generated_clock \
 -name PH1CLK \
 -edges {1 2 5} \
 -source DCLK \
 [get_pins UAND1/Z]

对应的波形图如下

前面提到,-edge {}中的第一个参数是上升沿,那么如果generated clock的第一个边沿是下降沿,那么则需要进行推断

比如下面定义的generated clock

 create_generated_clock \
 -name G3CLK \
 -edges {5 7 10} \
 -source DCLK \
 [get_pins UAND0/Z]

在这个例子中,可以推断到,high duration有两个边沿的时间,low duration有3个边沿时间

那么可以推断在边沿5之前有一个negedge,并且这个negedge出现在边沿2

波形图如下

下面我们引入-edge_shift {}

 # master clock
 create_clock -period 10 \
 -waveform {0 5} \
 [get_ports MIICLK]
 
 # 只有 -edge {}
 create_generated_clock \
 -name MIICLKDIV2 \
 -source MIICLK \
 -edges {1 3 5} \
 [get_pins UMIICLKREG/Q]
 
 # 带有 -edge_shift {}
 create_generated_clock \
 -name MIIDIV2 \
 -source MIICLK \
 -edges {1 1 5} \
 -edge_shift {0 5 0} \
 [get_pins UMIIDIV/Q]

只有-edge {}的分析与上面一致

在前文提到,-edge_shift {}中的三个参数,单位是时间

那么在这个例子中-edge_shift {0 5 0}意思是,generated clock的第一个posedge便宜0ns,第一个negedge偏移5ns,第二个posedge偏移0ns

结合-edge {}的设置和master clock的定义,可以推断generated clock的第一个posedge出现在0ns,第一个negedge出现在5ns,第二个posedge出现在20ns

如下图所示

5 invert选项

-invert选项就是给generated clock加一个反相器,电路图如下图所示

对应的generated clock波形也是进行取反,比如下面这个例子

create_clock -period 10 [get_ports CLK]
 
 create_generated_clock \
 -name NCLKDIV2 \
 -divide_by 2 \
 -invert \
 -source CLK \
 [get_pins UINVQ/Z]

对应波形如下


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容