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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: leijing

[求助] 关于create_generated_clock中get_pins的疑问

[复制链接]
 楼主| 发表于 2018-9-6 19:31:40 | 显示全部楼层
微信图片_20180906193604.png 回复 10# Marvin.Liang


    微信图片_20180906193610.png
 楼主| 发表于 2018-9-6 19:33:21 | 显示全部楼层
回复 10# Marvin.Liang


    微信图片_20180906193939.png
发表于 2018-9-6 21:07:46 | 显示全部楼层
回复 12# leijing

我感觉首先应该确认一下这个生成时钟pwm_clk_pre是不是在current_design    ICND2196 这个module下面如果是在ICND2196这个module下面,建议把你个get_pins换成[get_pins  pwm_clk_pre_reg/Q]
如果在ICND2196这个module下面例化的module下面,换成[get_pins -hier pwm_clk_pre_reg/Q]


另外,你source sdc肯定是在读入RTL之后的,读入RTL之后工具会先用GETCH 库改一遍名字,最后生成网表之前,会再按照你的design name rule改一遍名字,然后再生成网表。
发表于 2018-9-7 03:31:29 | 显示全部楼层
回复 1# leijing
所以 我看到有些是这样解决的综合分成两个部分
1. RTL to netlist  (r to n)
2. netlist to netlist (n to n)

generated clock 的约束在第二个步骤加进去
发表于 2018-9-7 08:33:12 | 显示全部楼层
在RTL里,将现有时钟定义点(比如某个分频计数器输出cnt_div[3])经过一个buffer,这个buffer直接调用库里的单元,综合约束里设置dont_touch。新的时钟定义点设置在这个buffer的输出。
这样不论在RTL里,还是综合网表之后,这个定义点永远都在。
 楼主| 发表于 2018-9-7 11:32:29 | 显示全部楼层
回复 15# 杰克淡定


   按照你的方法,成功找到了generated clock的定义点。想问一下,create_generated_clock都是采用这种方法来确定get_pins吗?谢谢啦!
 楼主| 发表于 2018-9-7 11:33:51 | 显示全部楼层
回复 13# Marvin.Liang


   按照你的方法,还是不行。其实,仔细想想,在没有生成网表之前,是没有pwm_clk_pre_reg的,所以肯定会报错。
发表于 2018-9-7 12:50:23 | 显示全部楼层
回复 17# leijing

dc利用read_verilog或者read_vhdl或者analyze和elaborate的组合读入RTL之后要先translate the design into a technology-independent design(GTECH).就是说读入RTL后会先生成一个GTECH netlist,这个过程会改一遍名字,SDC里面的时钟定义应该都按照这个netlist里面的名字来定义。所以一般在读入RTL还没有进行compile之前要先将这个netlist保存下来,如果design特别大,debug的时候就可以直接将这个netlist读进来。
所以我建议用我在2#提到的方法试一下。


15#提到的方法肯定在综合阶段没问题,但是增加了一个单元,只是在DC里面做了dont_touch,在pnr做时钟树的时候如果这个buffer优化掉了怎么办,DC时是不应该在时钟路径上加buffer的。
发表于 2018-9-7 13:52:02 | 显示全部楼层
本帖最后由 杰克淡定 于 2018-9-7 13:57 编辑

回复 16# leijing


   一般来说,SOC里的时钟模块,在RTL设计时,就应该考虑后续的综合和布线流程中对于时钟约束和定义的便利性。所以通常做法都是在RTL设计之初就在可能的时钟定义点上直接调用库里的单元(可能是buffer,inverter,MUX等等),并将这些调用的单元instance name为辨识度很高且不易普通重复的特殊名字,比如YYY_CLK_BUF,YYY_CLK_INV,YYY_CLK_MUX等等,综合脚本里只需要用 set_dont_touch [get_cells "YYY_CLK_*" -h]的方式来匹配,简单快捷。
发表于 2018-9-7 14:12:29 | 显示全部楼层
回复 17# leijing


   我怀疑你应该是读入rtl生成getch 网表时名字改了,所以找不到,建议写出elab的网表查看他的名字,或者直接改name rule,应该是某一个变量值默认有问题   另外15楼的方法是常用的方法,在你的clock即去做时钟又去做数据的时候能很好的区分,不过我在流程里从来不会对它去设dont touch,因为我尝试过设与不设最后到pt的时候都没有改变,而且注意buff加了以后要设ideal,以防综合后的仿真时间delay过大,不过也有很多不进行这一步直接等最后的后防就没关系了
   但是我们还会遇到另外一种情况,并不是所有的设计你都需要一个个去加buff,这种情况就要像之前了,name rule订好了,你可以直接按前面的方法去通过rtl去寻找你想定义的点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-19 02:19 , Processed in 0.031178 second(s), 8 queries , Gzip On, Redis On.

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