Академический Документы
Профессиональный Документы
Культура Документы
PrimeTime
Application Note
April 2014
Copyright Notice and Proprietary Information
2014 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary
information that is the property of Synopsys, Inc. The software and documentation are furnished under a license
agreement and may be used or copied only in accordance with the terms of the license agreement. No part of the
software and documentation may be reproduced, transmitted, or translated, in any form or by any means, electronic,
mechanical, manual, optical, or otherwise, without prior written permission of Synopsys, Inc., or as expressly provided
by the license agreement.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys company and certain product names are trademarks of Synopsys, as set forth at
http://www.synopsys.com/Company/Pages/Trademarks.aspx.
All other product or company names may be trademarks of their respective owners.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
www.synopsys.com
ii
Contents
Introduction ................................................................................................................................... 1
Functional Behavior of Pulse Latches and Pulse Clocks .............................................................. 1
Pulse Clock Behavior in PrimeTime .............................................................................................. 2
Edge Relationship Between Master Clock and Pulse Clock ..................................................... 2
Types of Pulse Clocks and Pulse Generator Cell ..................................................................... 3
Modeling Pulse Clock Generators................................................................................................. 3
Using a Library Model for the Pulse Generator (Recommended) ............................................. 3
Specifying a Pulse Clock at Each Pulse Generation Point ....................................................... 5
Specifying the Sense of an Existing Clock ................................................................................ 5
Constraining a Pulse Clock Generator .......................................................................................... 5
Merging Pulse Clocks Generated From the Same Clock With Conflicting Pulse Sense .......... 6
Merging a Normal Clock and a Pulse Clock Not Generated From the Same Clock ................. 6
Reporting Undefined Pulse Generators and Ignored Pulse Constraints ................................... 7
Handling Pulse Types Set by the set_sense Command ........................................................... 7
Analyzing Designs With Pulse Clocks........................................................................................... 7
Design Rule Checks ................................................................................................................. 8
Minimum and Maximum Slew Limits ..................................................................................... 8
Minimum and Maximum Pulse Width .................................................................................... 9
Pulse Latches Not Driven by the Pulse Clock ..................................................................... 10
Analyzing a Path With a Pulse Clock ...................................................................................... 10
Setup and Hold Checks ...................................................................................................... 10
Pulse Width Check .............................................................................................................. 12
Conclusion .................................................................................................................................. 12
iii
Introduction
In a system-on-chip (SoC), the clock network consumes a large amount of dynamic
power because of the switching of flip-flops, which contain two latches triggered by a
clock signal. One method of reducing dynamic power uses pulse latches and pulse
clocks. A pulse latch is similar to an edge-triggered flip-flop, but it consumes much less
power.
This application note describes how to use PrimeTime to analyze designs using pulse
latches and pulse clocks.
Typically, pulse latches that use a rise-triggered pulse have setup checks verified on the
rising edge and hold checks verified on the falling edge of the clock. Flip-flops use a
single clock edge to check both the setup and hold checks; in the case of a rise-
triggered flip-flop, this occurs on the rising edge of the clock. Figure 2 describes the
timing arc for setup and hold checks.
1
Figure 2 Timing arc for setup and hold check
Figure 4 shows the output of the pulse generator to be non-unate because there are
both inverting and non-inverting paths through the logic. The non-inverting path is direct
path through the AND gate and the inverting path is through the inverter.
Figure 4 Non-unate clock sense for pulse generator
2
Types of Pulse Clocks and Pulse Generator Cell
PrimeTime supports four types of pulse clocks and pulse generator cell. Figure 5 to
Figure 8 explain the clock sense and pulse types.
Figure 5 Rise-triggered high pulse
rise_triggered_high_pulse
3
rise_triggered_low_pulse
fall_triggered_high_pulse
fall_triggered_low_pulse
For example:
pin(Y) {
...
pulse_clock : rise_triggered_low_pulse ;
...
}
4
Specifying a Pulse Clock at Each Pulse Generation Point
If the library is missing a pulse generator definition, you can specify the pulse clock
characteristics at each pulse generation point in the design by using the
create_generated_clock command. For example:
create_generated_clock edges {1 1 3} name PULSE_CLK source CLK \
{PULSE_GENERATOR/Z}
Figure 9 Defining non-increasing edges (rise_triggered_high_pulse)
By using the create_generated_clock command, you can create a new clock domain
at a pulse generation point.
In this case, the pulse clock is not defined as a separate clock domain. Instead, it is just
a different sense (rise-triggered high pulse sense) of the source clock downstream from
the specified point in the clock network.
5
Merging Pulse Clocks Generated From the Same Clock With
Conflicting Pulse Sense
If pulse clocks with conflicting senses merge, an error message is generated during a
timing update. If you set the set_sense command at the merge point, the sense and
pulse type of one pulse clock is propagated. For example, in Figure 10, a rise-triggered
high pulse clock is merged with a rise-triggered low pulse clock, and the following error
message is reported.
Error: pulse clock sense merging at pin: 'gater/Z'for clock: 'clk'
The clock will not propagate forward from this pin.
(PTE-080)
Figure 10 Pulse generator
pt_shell> check_timing
6
Reporting Undefined Pulse Generators and Ignored Pulse
Constraints
The tool does not issue warning messages when pulse constraints are ignored because
of undefined pulse generators. Instead, you must use the check_timing command with
the pulse_clock_no_pulse_generator option. For example:
pt_shell> check_timing -override_defaults \
{pulse_clock_no_pulse_generator} \
verbose
7
Design Rule Checks
You must check the following design rules:
Minimum and Maximum Slew Limits
Minimum and Maximum Pulse Width
Pulse Latches Not Driven by the Pulse Clock
pulse_clock_max_transition_rise_transitive_fanout
Required Actual
Pin Transition Transition Slack
-------------------------------------------------------
PL1/cp 0.01 0.08 -0.07 (VIOLATED)
buf1/z 0.01 0.08 -0.07 (VIOLATED)
buf2/i 0.01 0.08 -0.07 (VIOLATED)
PL2/cp 0.01 0.07 -0.06 (VIOLATED)
buf2/z 0.01 0.07 -0.06 (VIOLATED)
PG/z 0.01 0.02 -0.01 (VIOLATED)
buf1/i 0.01 0.02 -0.01 (VIOLATED)
pulse_clock_max_transition_fall_transitive_fanout
Required Actual
Pin Transition Transition Slack
-------------------------------------------------------
PL1/cp 0.01 0.06 -0.05 (VIOLATED)
buf1/z 0.01 0.06 -0.05 (VIOLATED)
buf2/i 0.01 0.06 -0.05 (VIOLATED)
PL2/cp 0.01 0.04 -0.03 (VIOLATED)
8
buf2/z 0.01 0.04 -0.03 (VIOLATED)
PG/z 0.01 0.02 -0.01 (VIOLATED)
buf1/i 0.01 0.02 -0.01 (VIOLATED)
You can apply, report, or remove a minimum transition constraint only at the input of the
pulse generator. This restriction ensures the proper functioning of pulse generators. The
following example reports only the pulse generator input pin, PG/i:
pt_shell> set_pulse_clock_min_transition 0.01 [current_design]
pt_shell> set_pulse_clock_min_transition 0.02 [get_clock clk]
pt_shell> set_pulse_clock_min_transition 0.03 \
{"celllib/pulse_rise_high"}
pt_shell> set_pulse_clock_min_transition 0.04 PG
pt_shell> report_pulse_clock_min_transition
pulse_clock_min_transition_rise
Required Actual
Pin Transition Transition Slack
------------------------------------------------------------
PG/i 0.04 0.08 0.04 (MET)
pulse_clock_min_transition_fall
Required Actual
Pin Transition Transition Slack
------------------------------------------------------------
PG/i 0.04 0.05 0.01 (MET)
pt_shell> remove_pulse_clock_min_transition PG
pulse_clock_min_transition_rise
Required Actual
Pin Transition Transition Slack
------------------------------------------------------------
PG/i 0.03 0.08 0.05 (MET)
pulse_clock_min_transition_fall
Required Actual
Pin Transition Transition Slack
------------------------------------------------------------
PG/i 0.03 0.05 0.02 (MET)
sequential_pulse_clock_min_width_transitive_fanout
9
Required Actual
Pin pulse width pulse width Slack
-------------------------------------------------------------------
PL2/cp (high) 0.500 0.471 -0.029 (VIOLATED)
PL1/cp (high) 0.500 0.507 0.007 (MET)
clock_tree_pulse_clock_min_width_transitive_fanout
Required Actual
Pin pulse width pulse width Slack
--------------------------------------------------------------
buf2/i (high) 0.005 0.507 0.502 (MET)
PG/z (high) 0.005 0.530 0.525 (MET)
buf1/i (high) 0.005 0.530 0.525 (MET)
buf1/z (high) 0.005 0.507 0.502 (MET)
buf2/z (high) 0.005 0.471 0.466 (MET)
setup
hold
For example,
10
Startpoint: PL1 (rising edge-triggered flip-flop clocked by clk(rise
high pulse))
Endpoint: PL2 (rising edge-triggered flip-flop clocked by clk(rise high
pulse))
Path Group: clk
Path Type: max
11
clock clk(rise high pulse) (fall edge) 0.00 0.00
clock source latency 0.00 0.00
clk (in) 0.00 0.00 0.00 r
mbuf1/z (buf) 0.08 0.09 0.09 r
PG/z (pulse_rise_high) 0.02 0.64 0.74 f
buf1/z (buf) 0.06 0.08 0.82 f
buf2/z (buf) 0.04 0.08 0.90 f
PL2/cp (ff) 0.04 0.00 0.90 f
clock reconvergence pessimism 0.00 0.90
library hold time -0.12 0.78
data required time 0.78
---------------------------------------------------------------------
data required time 0.78
data arrival time -0.56
---------------------------------------------------------------------
slack (VIOLATED) -0.21
Conclusion
This document described in detail the functional behavior of pulse clocks and modeling
of the pulse generator cell. It also described the rules of pulse clock constraint check in
PrimeTime. Finally, it explains how to analyze pulse clocks including setup and hold
analysis in PrimeTime.
12