set_ideal_network

In addition to disabling timing updates and timing optimizations, all cells and nets in the ideal
network have the dont_touch attribute set.
The size_only attribute is set on all cells of ideal network sources. If nets are specified,
size_only is set on all cells that are cells of the specified nets' global driver pins. This
guarantees that ideal network sources are not optimized away by compile.
DRC checking is turned off so the nets in an ideal network are free of max_capacitance ,
max_fanout , and max_transition design rule constraints. Disabling all of these features
improves runtime and timing optimization;
The latency and transition times of an ideal network are 0 by default, but you can override
them by using the set_ideal_latency and set_ideal_transition commands.
The set_ideal_network command will not prevent clock gating optimizations from
modifying or removing clock gating cells. To prevent this use set_dont_touch command
instead.
=========================================

set_ideal_network 只是将net上的transition和delay默认设置为0,fix timing的时候是不会动到这个net的。但是我们还会设置max_fanout
它不管你是不是ideal的,只要扇出足够大他就会去优化。所以必须要给高扇出的net设置dont_touch属性。

=========================================

附上4个实践结果:
1。 只执行set_dont_touch_network , 而不执行set_ideal_network.
      这种情况下,阻止不了DC往high_fanout的地方长buffer_tree.

  
2。  当约束文件中,没执行set_driving_cell  命令, 这种情况下:       DC不会对复位脚长buffer_tree.

       当约束文件中,有执行set_driving_cell命令后,这种情况下:
      对于high_fanout的net,  DC会不会插入buffer_tree,由这根high_fanout的net, 是否具有ideal_net属性来决定。
      可以通过命令 get_attribute  [get_nets XXX]  ideal_net 来查看。
      或者 report_ideal_network -net  来查看


3。具有ideal_net属性的线,在经过与门,或门后,不能往下级传播(如左图所示)。         除非这个cell的所有输入都具有 ideal_net属性,才能住下级传播(如右图所示)。


4.  DC会自动为create_clock命令创建的port pin ,所对应连接的net, 赋与ideal_net属性。     所以,DC默认不会为时钟树长buffer_tree.

=========================================

在综合的过程中,为了不让DC工具自动优化一些我们不希望其优化的模块(比如CLK)我们通常都会设置set_ideal_network和set_dont_touch,我理解为前者在timing_report的时候忽略延迟,后者阻止DC插入buffer。

那么dont_touch的属性,能不能穿过logic?

set_dont_touch和set_dont_touch_network有什么区别,为什么普遍认为set_dont_touch_network会造成未知问题而不推荐使用?

对于ideal_net的这个属性,是不是说直接忽略了延迟,忽略了DRC,如果将clk设定为ideal_net,是不是就不用再设定dont_touch了?

说的有点混乱,请各位大神技术支持,小弟不胜感激!!

~~~~~~~~~~~~

set_dont_touch不会穿过logic,可以用于cells, nets, references, 和 designs。你不希望DC碰的地方,都可以用它。
set_dont_touch_network可以穿过logic,可以用于clocks, pins, 或 ports,比上面的范围小。当你对设计不十分熟悉时,这个属性可能会传到你不希望的地方去。

ideal_net 顾名思义就是把这条net完全理想化--无穷大的驱动能力,没有延迟。有时会和上面的命令一起用。当你知道了它们的意思,如何使用取决于你的目的和得到的结果

~~~~~~~~~~~~

对于Ideal_net这个属性,设置的时候有个no_propagate的属性,对于net来说一定要设这个,是不是就是为了阻止其穿过逻辑?那如果我设的是pin并且不加上no_propagate能穿过逻辑吗?

在建立clock的时候,我看到它会自动的设为ideal_net,但是却还是会计算延迟,会不会因为clock path有逻辑的原因?

~~~~~~~~~~~~

set_ideal_net = set_ideal_network -no_propagate

clock net 如果被用作data,就会有delay,那是因为net上面挂的clk pin的负载,不是ideal net本身

~~~~~~~~~~~~

我大体上明白了,clk在创建的时候,会默认为ideal net的,但当clk接入到data path的时候,D端就会考虑我clk上的负载,但并不会影响clk的ideal net的属性。
假如我的clk需要门电路做gating,gating后的时钟也有很大的扇出,那我为了忽略掉延迟,是不是需要在gating后重新给clk定义ideal net?因为ideal net不能穿过逻辑。

~~~~~~~~~~~~

如果你的CG集成好的标准单元,它会自动继承ideal的属性

~~~~~~~~~~~~


   问题1:        set_ideal_network :当object是一个net的时候,必须加上-no_propagate选项,不然dc会ignore该命令,是不是说用set_ideal_network 声明ideal net时候,dc不让attribute 传递,为什么要这么要求?set_ideal_net被抛弃?
   问题2:
        在什么场景下需要使用set_ideal_network net_name -no_propagate          场景1.当gate logic cell中的latch的output与ideal clock做与的时候,与门的output 不会是ideal,如果需要output 为ideal,需要强制的设定latch output net为ideal。
        还有其他的场景吗?
   问题3:
        set_ideal_network和set_dont_touch_network在什么场景下需要配合使用;           场景1:set_ideal_network,对design 内部soft reset network声明ideal network的时候,由于reset net被一个组合逻辑驱动,无法找到相关的pin,只好声明reset_net为ideal network,但是这样的话要使用set_ideal_network -nopropagate,导致ideal attribute无法spread,这时候只能使用set_dont_touch_network将reset_net声明为dont touch ,但是整个reset network没有完全声明为ideal,没有声明为reset network的部分还会做timing check&drc,甚至报violation,这种场景存在吗?该如何解决啊

=========================================

#-----clock------
create_clock -name $clock_name -period [expr $clk_period] [get_ports $clock_name]
#设置时钟
set_clock_uncertainty -setup $clk_uncertainty_setup [get_clocks $clock_name]
#设置时钟不确定性
set_clock_latency $clk_latency [get_clocks $clock_name]
#设置时钟延迟
set_dont_touch_network [get_clocks $clock_name]
#在优化过程中对时钟网络不进行改变和替换,原因:由于时钟端口的负载很大,DC 会使用 Buffer 来增加其驱动能力。但一般设计者都使用布局布线工具来完成此项工作,所以有必要指示 DC 不要对时钟网络进行修改,可以选中上图中“Don’t touch network”进行设置。
set_dont_touch_network [get_ports $reset_name]
#在优化过程中对复位信号不进行改变和替换
set_ideal_network [get_ports $reset_name]
#对reset设置成理想线网,因为reset的fanout太大,一般布图前都设置成理想线网,具体原因有待研究#
————————————————
版权声明:本文为CSDN博主「木子木杉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38407219/article/details/89448667

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在DC综合中,set_ideal_network函数用于指定理想时钟、复位和其他信号。其用法如下: ``` set_ideal_network ( ideal_clock => clock_signal_name, ideal_reset => reset_signal_name, ... // 其他信号 ); ``` 其中,ideal_clock和ideal_reset参数是必需的,其他信号是可选的,可以根据设计需要进行设置。这些参数分别表示理想时钟和复位信号的信号名。 在使用set_ideal_network函数之前,需要先将时钟和复位信号定义为全局信号,例如: ``` library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity my_design is port ( clock : in std_logic; reset : in std_logic; ... ); end my_design; architecture Behavioral of my_design is signal internal_clk : std_logic; signal internal_reset : std_logic; ... begin ... end Behavioral; ``` 上述代码中,时钟和复位信号被定义为输入端口,而内部信号internal_clk和internal_reset被定义为全局信号。 然后,可以在DC综合的脚本中使用set_ideal_network函数指定时钟和复位信号,例如: ``` set_ideal_network ( ideal_clock => internal_clk, ideal_reset => internal_reset ); ``` 这里,ideal_clock和ideal_reset参数分别使用了定义的内部信号internal_clk和internal_reset作为理想时钟和复位信号。此后,在设计中就可以使用这些内部信号进行时钟和复位同步等操作。 需要注意的是,set_ideal_network函数只是一种设置时钟、复位和其他信号的方式,具体的用法和实现可能会因设计的不同而有所变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值