Wednesday, November 18, 2015

Specifying Clock Tree Exceptions

To define clock tree exceptions, use the set_clock_tree_exceptions command or choose Clock > set Clock Tree Exceptions in the GUI. You can set clock tree exceptions on pins or hierachical pins.

If you issue the set_clock_tree_exceptions command multiple times for the same pin, the pin keeps the highest-priority exception. ICC prioritizes the clock tree pin exceptions as follows:

1 Nonstop pins
2.Exclude pins
3. Float pins
4. Stop pins

Note:
The don't touch subtree exception is compatible with the nonstop, exclude, float, or stop pin exception. You can set both exceptions on a pin, and clock tree synthesis honors both exceptions.

To remove clock tree exceptions, use the remove_clock_tree_exceptions command or choose Clock > Remove Clock Tree Exceptions in the GUI.

To see the clock tree exceptions  defined for your design, generate a clock tree exceptions report by running the report_clock_tree -exceptions command or by choosing choose Clock > Report Clock Tree in the GUI and selecting Exceptions.

Note:
If your design contains sequential cells with unconnected outputs, the clock pins of these cells are marked as implicit ignore pins. When you run clock tree synthesis, these unloaded sequential cells are deleted from the design. As a result, at the end of clock tree synthesis, you no longer see these implicit ignore pins. To prevent the removal of these sequential cells, set the physopt_delete_unloaded_sequential_cells variable to false before running clock tree synthesis.

If your design contains dangling nets, the clock tree exceptions report might show false implicit ignore pins on these nets.  If this happens, you can remove the false implicit ignore pins by saving your design and reopening it.

Specifying Nonstop Pins
Nonstop pins are pins that would normally be considered endpoints of the clock tree, but instead ICC traces through them to find the clock tree endpoints. The clock pins of sequential cells driving generated clocks are implicit nonstop pins. In addtion, ICC supports user-defined ( or explicit ) nonstop pins.

To specify a nonstop pin, use the set_clock_tree_exceptions -non_stop_pins command.

For example, to specify pin U2/CLK as a nonstop pin, enter
icc_shell> set_clock_tree_exceptions -non_stop_pins  [get_pins U2/CLK]
 To remove the nonstop pin definition from a pin,  use the remove_clock_tree_exceptions
-non_stop_pins command.

For example, to remove the nonstop pin definition from pin U2/CLK , enter
icc_shell> remove_clock_tree_exceptions -non_stop_pins  [get_pins  U2/CLk]

Specifying Exclude Pins
Exclude pins are clock tree endpoints that are excluded from clock tree timing calculations and optimizations. ICC uses exclude pins only in calculations and optimizations for design rule constraints. In addtion to the exclude pins inferred by ICC ( the inplicit exclude pins), ICC supports user-defined ( or explicit)  exclude pins. For example, you might define an exclude pin to exclude all branches of the clock tree that fan out from some combinational logic or to  exclude an implicit stop pin.

During clock tree synthesis, ICC isolates exclude pins ( both implicit and explicit) from the clock tree by iserting a guide buffer before the pin.  Beyond the exclude pin, ICC never performs skew or insertion delay optimization, bot does perform design rule fixing.

To specify an exclude pin, use the set_clock_tree_exceptions -exclude_pins command.

For example, to exclude clock sink U2/CLK, enter
icc_shell> set_clock_tree_exceptions -exclude_pins [get_pins U2/CLK]
To remove the exclude pin definition from a pin, use the remove_clock_tree_exceptions
-exclude_pins command.

For example, to remove the exclude pin definition from pin U2/CLK, enter
icc_shell> remove_clock_tree_exceptions -exclude_pins  [get_pins U2/CLK]

For another example, assue that a clock tree also drives combinational logic,

Explicit Exclude Pin


To exclude all branches of the clock tree that fan out from this point, enter

icc_shell> set_clock_tree_exceptions -exclude_pins  [get_pins  U2/A]

Specifying Float Pins
Float Pins are clock pins that have special insertion delay requirements. ICC adds the float pin delay ( positive or negative ) to the calculated insertion delay up to this pin.

To specify a float pin and its timing characteristics, use the following
set_clock_tree_exceptions options:

1.  -float_pins [get_pins pin_list]
2.  -float_pin_max_delay_fall max_delay_fall_value
3.  -float_pin_max_delay_rise max_delay_rise_value
4.  -float_pin_min_delay_fall min_delay_fall_value
5.  -float_pin_min_delay_rise  min_delay_rise_value

For example, to define an active-low float pin ( so that clock tree synthesis considers only the falling edge), enter
icc_shell>set_clock_tree_exceptions -float_pins [get_pins U1/CLK] \
      -float_pin_max_delay_fall 0.10 -float_pin_min_delay_fall 0.08

The clock tree exceptions report ( report_clock_tree -exceptions) shown the float pin values only for the active edge. For Example, the report for the float pin defined above shows

Explicit sync pins:  1
      (F) U1/CLK    ( -0.100 -0.080 )

The float pin delay values can be either positive or negative, depending on your timing requirements. To increase the path delay to a pin, specify a negative float pin delay. To decrease the path delay to a pin, specify a positive float pin delay.

## Specifying a negative float pin
icc_shell> set_clock_tree_exceptions -float_pins U1/CLK \
   -float_pin_max_delay_rise -0.5 -float_pin_max_delay_fall -0.5

##Specifying a positive float pin
icc_shell> set_clock_tree_exceptions -float_pins U4/CLK \
   -float_pin_max_delay_rise 0.5 -float_pin_max_delay_fall 0.5

Float Pin Timing




To remove the float pin definition from a pin, use the remove_the_clock_tree_exceptions -float_pins command.

Specifying Don't Touch Subtres
In some cases you will want to preserve a portion of an existing clock tree. You need to do this, for example, when two clock networks share part of some clock logic behind a multiplexer. The portion of the clock tree that is preserved is called a don't touch subtree.

To specify a don't touch subtree, specify the root pin of the don't touch subtree by using the set_clock_tree_exceptions -dont_touch_subtrees command.

Although ICC does not make any modifications to the don't touch subtree during clock tree synthesis, it does propagate the clock tree attributes and the nondefault routing rules beyond the don't touch subtree. To prevent propagation of the clock attributes and the nondefault routing rules, set the
cts_traverse_dont_touch_subtrees variable to false.

ICC considers the sinks in the don't touch subtree when balancing clock delays and computing the clock skew.

To remove the don't touch subtree exception from a pin, use the
remove_clock_tree_exceptions -dont_touch_subtrees command.

Specifying don't Buffer Nets
In some cases you might be able to improve the results by preventing ICC from buffering certain nets ( ICC still performs global prerouting on these nets).

Note:
During clock tree synthesis, the don't buffer nets exception has priority over the clock tree design rule constraints. However, the clock tree specification in the clock tree configuration file has priority over the don't buffer nets exception.

To specify nets that should not be buffered, sue the set_clock_exceptions -dont_buffer_nets command.

For example, to specify net n1 as a don't buffer net, enter
icc_shell> set_clock_tree_exceptions -dont_buffer_nets [get_nets n1]

To remove the don't buffer net exceptions, use the
remove_clock_tree_exceptions -dont_buffer_nets command.

For example, to remove the don't buffer net exception from net n1, enter
icc_shell> remove_clock_tree_exceptions -dont_buffer_nets  [get_nets n1]

Specifying Don't Size Cells
During clock tree synthesis and optimization, ICC ignores the dont_touch attribute on cells and nets.
To prevent sizing of cells on the clock path during clock tree synthesis and optimization, you must identify the cells as don't size cells.

To specify cells that should not be sized, use the set_clock_tree_exceptions -dont_size_cells command.

For example, to specify cell U1/U3 as don't size cell, enter
icc_shell> set_clock_tree_exceptions -dont_size_cells [get_cells U1/U3]
To remove the don't size cell exception, use the remove_clock_tree_exceptions -dont_size_cells command.

For example, to remove the don't size cell exception from the cell U1/U3, enter
icc_shell> remove_clock_tree_exceptions -dont_size_cells [get_cells U1/U3]

Specifying Size-Only Cells
During clock tree synthesis and optimization, size-only cells can only be sized, not moved or split.
If a size-only cell overlaps with an adjacent cell after sizing, the size-only cell might be moved during the legalization step. To specify size-only cells , use the
set_clock_tree_exceptions -size_oly_cells command.

For example, to specify cell U1/U3 as a size-only cell, enter

icc_shell> set_clock_tree_exceptions -size_only_cells [get_cells U1/U3]

To remove the size-only cell exception, use the remove_clock_tree_exceptions -size_only_cells command.

For example, to remove the size-only cell exception from cell U1/U3, enter
icc_shell> remove_clock_tree_exceptions \
 -size_only_cells [get_cells U1/U3]

Preserving  the clock Pins of Existing Hierarchies
------------------------------------------------------------
In some cases, clock tree synthesis and optimization might cluster clock sinks from hierarchies to create new clock pins. You can prevent the clustering of clock sinks in the desired hierarchies that have clock sinks in other logical hierarchies by using the
set_clock_tree_exceptions -preserve_hierarchy command, so the clock pins of the desired logical hierachies are preserved.

For example, suppose your design has two hierarchical block instances L1 and L2 in the top level, and each block has clock pins CK1, Ck2, and CKO,

Hierarchical Clock Pins,
To preserve pin CK1 in cell instance L1, enter
icc_shell> set_clock_tree_exceptions -preserve_hierarchy [get_pins I1/CK1]

To preserve pins CK1, CK2, and CKO in cell instance I2, enter
icc_shell> set_clock_tree_exceptions -preserve_hierarchy [get_cells I2]

To preserve pins CK1, CK2, and CKO in cell instances L1 and L2, enter
icc_shell>set_clock_tree_exceptions -preserve_hierachy [get_references -hierarchical REG_A]

To remove the preserve-hierarchy exception, use the
remove_clock_tree_exceptions -preserve_hierarchy command. If the specified hierarchical pins or cells contain any leaf pins or cells that are not in the clock network, the tool issues a warning message.





















No comments:

Post a Comment