Author Topic: How to calculate fanout_latency for set_clock_gate_latency ?  (Read 1160 times)

0 Members and 1 Guest are viewing this topic.

Offline promachTopic starter

  • Frequent Contributor
  • **
  • Posts: 878
  • Country: us
How to calculate fanout_latency for set_clock_gate_latency ?
« on: November 18, 2020, 06:36:02 am »
Could anyone advise how to calculate the values for -fanout_latency using the following examples ?


Example A




Example B




Example C


 

Offline promachTopic starter

  • Frequent Contributor
  • **
  • Posts: 878
  • Country: us
Re: How to calculate fanout_latency for set_clock_gate_latency ?
« Reply #1 on: November 18, 2020, 10:28:36 am »
Problem solved. See the following :

dc_shell> man set_clock_gate_latency


2.  Synopsys Commands                                        Command Reference
                            set_clock_gate_latency

NAME
       set_clock_gate_latency
              Specifies clock network latency values to be used for clock-gat-
              ing cells, as a function of clock domain, clock-gating stage and
              fanout.

SYNTAX
       status set_clock_gate_latency
               [-clock clock_list]
               [-overwrite]
               -stage cg_stage
               -fanout_latency cg_fanout_list
               [-transitive_fanout]

   Data Types
       clock_list         list
       cg_stage           integer
       cg_fanout_list     string

ARGUMENTS
       -clock clock_list
              Specifies  that  the latency must be applied with respect to the
              specified clocks.  If the -clock option is  not  specified,  the
              latency  is  applied  with respect to all clock domains to which
              the clock-gating cell belongs.

       -overwrite
              Specifies that clock latency values previously set on clock-gat-
              ing cells should be overwritten.

       -stage cg_stage
              Specifies the clock-gating stage to which the clock latency data
              from the fanout range is applied.  Registers are  considered  as
              stage 0.

       -fanout_latency cg_fanout_list
              Specifies  the  list  of  clock-gating  cells  fanout  and clock
              latency values; for example, {1-5 0.9, 6-20 0.5, 21-inf 0.3}.  A
              fanout  of 1 to 5 has a latency of 0.9; a fanout of 21 or larger
              has a latency of 0.3.  If the same latency value is  wanted  for
              the entire fanout range, it can be specified as {1-inf 0.9}.

       -transitive_fanout
              Specifies  that  transitive  fanout  should  be  used instead of
              direct fanout when annotating clock gate latency. Direct  fanout
              is the default.

DESCRIPTION
       The  set_clock_gate_latency command allows you to specify clock network
       latency values for clock-gating cells, as a function of  clock  domain,
       clock-gating  stage, and fanout.  These latency values are annotated on
       the clock pins of clock-gating cells  when  running  the  compile_ultra
       command, or when running the apply_clock_gate_latency command.

       The     clock-gate     latency    settings    specified    using    the
       set_clock_gate_latency command are stored as an attribute on the source
       port  of  each specified clock.  Invoke this command after defining all
       clocks of the design.  These stored latency values are annotated on the
       clock  pins of clock-gating cells by means of one of the following pro-
       cesses:

        o Using the apply_clock_gate_latency command, which applies latency on
         any existing clock-gating cells

        o  During compile_ultra command, which applies latency on any existing
         clock-gating cells or those inserted or modified during the compile

       NOTE: The stages of the clock gating network are numbered  from  0  for
       the  register  stage number and increasing toward the clock source. For
       example, in a four stage clock gating tree,  Stage  0  drives  register
       clocks  directly,  and  Stage 3 is the clock gating cell with its input
       directly connected to the clock source.

       Use the set_clock_gate_latency command to specify the latency for gated
       registers by specifying the command for stage 0.  By definition stage 0
       has no fanout, so use the following syntax:

         prompt> set_clock_gate_latency -stage 0 -fanout_latency \
                 { 1-inf value }

       When clock latency settings are provided for stage 0,  the  values  are
       annotated  on  the  output pin (enabled clock pin) of each clock-gating
       cell that is directly driving gated registers.  If no clock latency  is
       set  for  stage 0, but a clock latency has been set on the clock object
       by using set_clock_latency command, then this value is used  for  clock
       latency.  For ungated registers, the latency is propagated by the timer
       from the clock object latency.

       You can use the -clock and -overwrite options with the -stage 0 option.

       Use the -transitive_fanout option to calculate latency value based upon
       the transitive fanout of a clock-gating  cell  instead  of  the  direct
       fanout.  The transitive fanout of a clock-gating cell is defined as the
       total number of all driven leaf registers. The registers  driven  by  a
       stage 1 clock-gating cell, ICG_1, are counted as part of the transitive
       fanout of the stage 2 clock-gating cell, ICG_2, that drives  ICG_1.  By
       definition:

       stage 2 transitive fanout >= stage 1 transitive fanout

       NOTE: Transitive fanout only counts registers, unlike the direct fanout
       which counts both registers and driven clock-gating cells.

       When the -transitive_fanout option is used for the first time, a fanout
       mode  is set, and this is indicated by the PWR-916 information message.
       You cannot mix fanout  modes  of  the  set_clock_gate_latency  command,
       where  some  instances  use the -transitive_fanout option and others do
       not.  If  you  want  to  switch   between   fanout   modes,   use   the
       reset_clock_gate_latency command.

       If you specify fanout ranges in the cg_fanout_list and you do not cover
       all values from 1 to inf, the fanout ranges with missing latency infor-
       mation  are filled by the tool with the smallest latency value from the
       adjacent ranges.

       In a clock tree, latency values are lowest for cells closest to the top
       of  the  tree  (clock source). Transitive fanout values are highest for
       cells at the source and decrease toward the registers. Therefore, spec-
       ified  clock latency values must decrease with respect to fanout ranges
       otherwise a PWR-742 warning message is generated.

       If clock latency settings are not specified for a certain  clock-gating
       stage  and a clock-gating cell within this stage exists, the latency is
       propagated from the driving clock-gating  cell  or  from  clock  object
       latency,  and a warning message is issued.  These actions are performed
       during the annotation process:

       apply_clock_gate_latency or compile_ultra command.

       If specified clock latency values do not decrease with respect to clock
       gating  stages, the PWR-744 warning message is generated. This check is
       disabled if the -transitive_fanout option is used.  In addition, if  an
       inconsistent  clock  latency  annotation  is  detected when running the
       apply_clock_gate_latency or compile_ultra command, the tool attempts to
       fix  it  by  assuming the smallest value from the clock latencies anno-
       tated on gated clock-gating cells  or  registers.   This  ensures  that
       clock  latencies  are monotonically increasing values in the path going
       from the clock source to the gated registers.   The  following  actions
       can be performed by the tool to achieve this:

        o  If  clock-gating  cell A is directly driving one or more registers,
         and some clock latency settings have been provided for the timing  of
         these  gated  registers  (by  using  value 0 for the -stage option of
         set_clock_gate_latency command or by propagation of latency specified
         for clock object), and the latency annotated on cell A is higher than
         the latency provided for gated registers, then the latency on  clock-
         gating cell A is overwritten with the latency provided for gated reg-
         isters.  If this fix is done, the PWR-746 warning message  is  gener-
         ated.

        o  If  clock-gating cell A is driving another clock-gating cell B, and
         the clock latency set on A is higher than the one set on B, the  tool
         resolves  it by overwriting the clock latency on A with the value set
         on B.  If this fix is done, the PWR-746 warning message is generated.

       To  remove the settings specified using set_clock_gate_latency, use the
       reset_clock_gate_latency command.

       If the variable power_cg_physically_aware_cg is enabled, then the anno-
       tation of latency values from set_clock_gate_latency is disabled.

   Multicorner-Multimode Support
       This  command  is  scenario  dependent and affects the current scenario
       only.

       The actual clock latency annotation performed during the  execution  of
       the  compile_ultra or apply_clock_gate_latency commands is done for all
       the scenarios for which a clock latency value is available.

EXAMPLES
       The following example specifies the clock latency values for  the  com-
       plete  fanout range of clock-gating cells for stages 1, 2, and 3.  This
       latency data applies to the clock-gating cells whose clock pins belongs
       to clock clk1.

         prompt> set_clock_gate_latency -clock [get_clocks clk1] -stage 1 \
                 -fanout_latency {1-30 2.1, 31-100 1.7, 101-inf 1.1}

         prompt> set_clock_gate_latency -clock [get_clocks clk1] -stage 2 \
                 -fanout_latency {1-5 0.9, 6-20 0.5, 21-inf 0.3}

         prompt> set_clock_gate_latency -clock [get_clocks clk1] -stage 3 \
                 -fanout_latency {1-10 0.28, 11-inf 0.11}

       In   the   following   example,   fanout   ranges   specified   in  the
       -fanout_latency cg_fanout_list do not cover all values from 1  to  inf.
       In  this  case,  the  tool  assumes  a clock latency value of 1.7 to be
       applied to fanout range 11-30 and a clock latency of  1.1  for  fanouts
       higher than 80.

         prompt> set_clock_gate_latency -stage 1 \
                 -fanout_latency {1-10 2.1, 31-80 1.7, 101-300 1.1}

       The following example shows how to specify and annotate different clock
       latency values using the transitive fanout.

         prompt> set_clock_gate_latency -clock [get_clocks clk1] -stage 1 \
                 -fanout_latency {1-30 2.1, 31-100 1.7, 101-inf 1.1} \
                 -transitive_fanout

         prompt> set_clock_gate_latency -clock [get_clocks clk1] -stage 2 \
                 -fanout_latency {1-5 0.9, 6-20 0.5, 21-inf 0.3} \
                 -transitive_fanout

       The following example shows how to specify and annotate different clock
       latency values for different multicorner-multimode scenarios.

         prompt> current_scenario sc1
         prompt> set_clock_gate_latency -stage 1 \
                 -fanout_latency {1-inf 0.11}

         prompt> current_scenario sc2
         prompt> set_clock_gate_latency -stage 1 \
                 -fanout_latency {1-inf 0.15}

         prompt> compile_ultra -gate_clock

SEE ALSO
       apply_clock_gate_latency(2)
       power_cg_physically_aware_cg(3)
       remove_clock_latency(2)
       report_clock_gating(2)
       reset_clock_gate_latency(2)
       set_clock_latency(2)
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf