在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12754|回复: 27

[求助] 关于过两级mux的时序约束的添加

[复制链接]
发表于 2014-8-28 09:36:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
eetop.cn_timing.jpg



如上图,分频器都是寄存器做的,mux是用组合逻辑实现的,时序图列出了clkx与clkz之间4分频时的数据采集关系。
哪位大虾能写出本电路完整的时序约束的SDC文件?尤其不明白clkx和clkz之间应该如何约束。
发表于 2014-8-28 10:11:49 | 显示全部楼层
都写啊, clkx 是master clock , clky , clkz都是generated clock ,
clkz由clky得来,


generated clock可以产生generated clock的,

写在mux的输出pin(leaf pin)上, 然后用-add_clock   , 分别写1/2/4/8分频,
写全部写完, 然后timing分析的时候 用case 控制,
如果不控制,看了timing再说,
 楼主| 发表于 2014-8-28 13:45:58 | 显示全部楼层
回复 2# icfbicfb
对于clky的产生也是要用-add_clock然后写clkx的1/2/3/4分频吗?为什么不写完后用 exclusive group来约束呢?还是只是clkz 需要用-add_clock然后写clky的1/2/4/8分频来做?
发表于 2014-8-28 13:55:36 | 显示全部楼层
都写了吧,然后看情况再删除,
发表于 2014-8-28 22:35:40 | 显示全部楼层
本帖最后由 liude19832006 于 2014-8-28 22:40 编辑

回复 1# misrig001


set_app_var timing_enable_multiple_clocks_per_reg true

create_generated_clock -divide_by 1 -name clkx_div1 -source [get_ports clkx] [get_pins freq_divA/clkx_div1]
create_generated_clock -divide_by 2 -name clkx_div2 -source [get_ports clkx] [get_pins freq_divA/clkx_div2]
create_generated_clock -divide_by 3 -name clkx_div3 -source [get_ports clkx] [get_pins freq_divA/clkx_div3]
create_generated_clock -divide_by 4 -name clkx_div4 -source [get_ports clkx] [get_pins freq_divA/clkx_div4]
set_clock_group -logically_exclusive -group clkx_div1 -group clkx_div2 -group clkx_div3 -group clkx_div4

create_generated_clock -divide_by 1 -name clky_1 -source [get_pins freq_divA/clkx_div1] [get_pins MUX1/clky]
create_generated_clock -divide_by 1 -name clky_2 -source [get_pins freq_divA/clkx_div2] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 1 -name clky_3 -source [get_pins freq_divA/clkx_div3] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 1 -name clky_4 -source [get_pins freq_divA/clkx_div4] [get_pins MUX1/clky] -add
set_clock_group -physically_exclusive -group clky_1 -group clky_2 -group clky_3 -group clky_4

create_generated_clock -divide_by 1 -name clky_div1 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div1]
create_generated_clock -divide_by 2 -name clky_div2 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div2]
create_generated_clock -divide_by 4 -name clky_div4 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div4]
create_generated_clock -divide_by 8 -name clky_div8 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div8]
set_clock_group -logically_exclusive -group clky_div1 -group clky_div2 -group clky_div4 -group clky_div8

create_generated_clock -divide_by 1 -name clkz_1 -source [get_pins freq_divB/clky_div1] [get_pins MUX2/clkz]
create_generated_clock -divide_by 1 -name clkz_2 -source [get_pins freq_divB/clky_div2] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 1 -name clkz_4 -source [get_pins freq_divB/clky_div4] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 1 -name clkz_8 -source [get_pins freq_divB/clky_div8] [get_pins MUX2/clkz] -add
set_clock_group -physically_exclusive -group clkz_1 -group clkz_2 -group clkz_4 -group clkz_8

之后再继续设定各个generated clokc的uncertainty、network latency和transition:set_clock_transition和set_clock_uncertainty
以及set_clock_latency -network 。。。,需要写的命令是多一些。但还是比用set_false_path命令好,DC会分析4*4=16条时序路径,
因此你需要些32句set_false_path命令,而用set_clock_group,只需要4句命令。
由你的图中,可知clkx_div?四个生成时钟是逻辑上互斥的,物理上不互斥,这样就不会分析它们之间的时序关系,但会分析它们之间的信号
完整性(PT SI),而引脚clky之后作用在launchregister的时钟之间既是逻辑互斥也是物理互斥。同样可以分析第二个分频器和mux的原理。

当然也可以采用如下写法:
create_generated_clock -divide_by 1 -name clky_1 -source [get_ports clkx] [get_pins MUX1/clky]
create_generated_clock -divide_by 2 -name clky_2 -source [get_ports clkx] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 3 -name clky_3 -source [get_ports clkx] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 4 -name clky_4 -source [get_ports clkx] [get_pins MUX1/clky] -add
set_clock_group -physically_exclusive -group clky_1 -group clky_2 -group clky_3 -group clky_4

create_generated_clock -divide_by 1 -name clkz_1 -source [get_pins MUX1/clky] [get_pins MUX2/clkz]
create_generated_clock -divide_by 2 -name clkz_2 -source [get_pins MUX1/clky] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 4 -name clkz_4 -source [get_pins MUX1/clky] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 8 -name clkz_8 -source [get_pins MUX1/clky] [get_pins MUX2/clkz] -add
set_clock_group -physically_exclusive -group clkz_1 -group clkz_2 -group clkz_4 -group clkz_8
同样设置各个generated clokc的network latency、uncertainty和transition。

如果你确定clkx和clkz是1:4分频的话,不会出现1:16或其他十四种情况,且capture clock和launch clock确实是如上图那样,
则使用set_case_analysis命令,就很简单了,就不用set_clock_group命令了。如果有必要,还需要使用set_multicycle_path命令。
有说的不对的地方,还请论坛中的大神指出错误,不吝赐教。
 楼主| 发表于 2014-8-29 10:02:07 | 显示全部楼层
回复 5# liude19832006
多谢liude19832006 和 icfbicfb 两位大虾,真让人佩服万分,还有个问题,那DC还会分析clkx 和 clky_div1/clky_div2/clky_div4/clky_div8 之间,以及clkx_div? 与clky_div? 之间的时序关系吗?
发表于 2014-8-29 10:44:00 | 显示全部楼层
5楼写的很好, 用set_clock_groups -logicall_exclusive 很方便,

只要你不设false path(包括case analaysis, clock groups),dc都会分析,
发表于 2014-8-29 13:16:24 | 显示全部楼层
回复 6# misrig001


    不会了,因为你定义了generated clock,DC就认为是新的clock了,就将旧的clock和寄存器之间的时序路径掐断了,只分析直接驱动寄存器的clock了。
发表于 2014-9-10 14:49:10 | 显示全部楼层
我觉得不用定义这么多generate clock  只用定义最高频的那个,只要最高频满足了,低频肯定满足啊
发表于 2019-10-11 17:16:17 | 显示全部楼层
支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 05:31 , Processed in 0.023796 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表