Pulsed Latch Timing Analysis: Product Version: Tempus 15.1 October, 2015
Pulsed Latch Timing Analysis: Product Version: Tempus 15.1 October, 2015
Contents
Introduction .................................................................................................................. 3
Library Cells Required for Pulsed Latch Design .......................................................... 3
Modeling Pulse Generator in Timing Library ................................................................ 5
Timing Analysis for Pulsed Latch Design ................................................................... 10
Constraints ................................................................................................................ 13
Example: Pulse Clock Filtering............................................................................... 16
Support ...................................................................................................................... 21
Feedback ................................................................................................................... 21
Introduction
This document describes the Pulsed Latch Timing Analysis supported in Tempus. It
covers:
• Modeling pulse generator using standard Liberty timing library constructs
• Different aspects of analyzing timing paths related to pulsed latches
There are three types of standard cells that need to be provided by the
library vendor:
Pulse type defines the relationship of the pulse with source clock.
Pulse generator
However, for rise_triggered_high_pulse, rise->fall arc, delays should be larger than the
rise>rise delays. For the rise_triggered_low_pulse, rise->rise arc delays should be
larger than rise->fall delays.
pin (clk) {
direction : output;
pulse_clock : rise_triggered_high_pulse;
timing () {
related_pin : clk_in; timing_type :
combinational_rise;
timing_sense : positive_unate;
rise_transition(delay_template_7x8){
…….
…….
}
cell_rise (delay_template_7x8) {
……
……
}
}
timing ( ) {
related_pin: clk_in;
timing_type : combinational_fall;
timing_sense : negative_unate;
fall_transition (delay_template_7x8) {
…….
…….
}
cell_fall (delay_template_7x8) {
……
……
}
}
However, for fall_triggered_high_pulse, fall->fall arc, delays should be larger than the
fall>rise delays. For fall_triggered_low_pulse pulse, the fall->rise arc delays should be
larger than the fall->fall delays.
…….
}
cell_rise (delay_template_7x8) {
……
……
}
}
timing () {
related_pin : clk_in;
timing_type : combinational_fall;
timing_sense : positive_unate;
fall_transition (delay_template_7x8) {
…….
…….
}
cell_fall (delay_template_7x8) {
……
……
}
}
timing () {
related_pin : clk_in;
timing_type : combinational_fall;
timing_sense : positive_unate;
fall_transition (delay_template_7x8) {
…….
…….
}
cell_fall (delay_template_7x8) {
……
……
}
}
The main difference in timing analysis between pulsed latches and regular latches lies
in how the time borrow checks are performed. For pulsed latches, the time borrow
checks are done at one clock later than regular latches.
By replacing flops with pulsed latches, you can reduce power consumption and take
advantage of time borrowing to improve timing. However, if you do not want to take the
advantage of time borrowing and want to check that data arrives before the opening
edge of the pulse, you can perform setup checks in the following manner:
Setup checks are performed at close edge to make sure that the data is stable before
latch closing.
Launch clock
Launch clock
Note: Pulsed latch analysis is not enabled by default. Set the following variable to
enable pulsed latch analysis, more pulse-clock specific constraint specifications and
reporting capabilities will also be provided:
Set_global timing_enable_pulsed_latch true
Constraints
Description: These four new commands allow you to configure specific DRV
rules for your pulse clock networks. By default, the DRVs apply to the
specified pulse-clock generator start point. Use the –transitive_fanout option
to apply constraints to all the clock network elements between the generator
and the pulse-latch clock inputs.
0 5 10
CLK
1 2 4 5
Pulse-clock
minPW=3
maxPW=4
…
report_constraint -check_type pulse_clock_min_width -verbose -all_violators
report_constraint -check_type pulse_clock_max_width -verbose -all_violators
cell (PULSEGEN) {
pin(CLK) {
direction : input;
}
pin(PCLK) {
pulse_clock : rise_triggered_high_pulse;
direction : output;
timing( ) {
related_pin : "CLK";
timing_type : combinational_rise;
timing_sense : positive_unate;
cell_rise(delay_template_2x2) { … }
rise_transition(delay_template_2x2) { …}
}
timing() {
related_pin : "CLK";
timing_type : combinational_fall;
timing_sense : negative_unate;
cell_fall(delay_template_2x2) { … }
set_clock_sense
-pulse {rise_triggered_high_pulse|rise_triggered_low_pulse|
fall_triggered_high_pulse|fall_triggered_low_pulse}
0 5 10
CLK
1 2 4 5
6 7 8 9
Pulse-clock (FTH)
+------------------------------------------------------+
| Timing | Cell | Delay | Arrival | Edge |
| Point | | | Time | |
|-------------+--------------+-------+---------+-------|
| clk | | | 5.000 | v |
| clk | (net) | | | |
| PG_FTH/CLK | PULSEGEN_FTH | 0.000 | 5.000 | v |
| PG_FTH/PCLK | PULSEGEN_FTH | 1.000 | 6.000 | ^ |
| fth_clk | (net) | | | |
| C2/A | BUFX1 | 0.000 | 6.000 | ^ |
| C2/Y | BUFX1 | 1.000 | 7.000 | ^ |
| fth_clk_1 | (net) | | | |
| C3/B | MX2X1 | 0.000 | 7.000 | ^ |
| C3/Y | MX2X1 | 1.000 | 8.000 | ^ |
| mux_clk | (net) | | | |
| C4/A | BUFX1 | 0.000 | 8.000 | ^ |
| C4/Y | BUFX1 | 1.000 | 9.000 | ^ |
| mux_clk_1 | (net) | | | |
| L1/G | TLATRX1 | 0.000 | 9.000 | ^ |
+------------------------------------------------------+
+---------------------------------------------------+
| Timing | Cell | Delay | Arrival | Edge |
| Point | | | Time | |
|-------------+----------+--------+---------+-------|
| clk | | | 0.000 | ^ |
| clk | (net) | | | |
| PG_RTH/CLK | PULSEGEN | 0.000 | 0.000 | ^ |
| PG_RTH/PCLK | PULSEGEN | 1.000 | 1.000 | ^ |
| rth_clk | (net) | | | |
| C1/A | BUFX1 | -0.000 | 1.000 | ^ |
| C1/Y | BUFX1 | 1.000 | 2.000 | ^ |
| rth_clk_1 | (net) | | | |
| C3/A | MX2X1 | 0.000 | 2.000 | ^ |
| C3/Y | MX2X1 | 1.000 | 3.000 | ^ |
| mux_clk | (net) | | | |
| C4/A | BUFX1 | 0.000 | 3.000 | ^ |
| C4/Y | BUFX1 | 1.000 | 4.000 | ^ |
| mux_clk_1 | (net) | | | |
| L1/G | TLATRX1 | 0.000 | 4.000 | ^ |
+---------------------------------------------------+
report_constraint
-check_type
{pulse_width|clock_period|recovery|removal|clock_gating_setup|clock_gating_ho
ld|skew|pulse_clock_max_width|pulse_clock_min_width}
-drv_violation_type
{max_capacitance|max_transition|max_fanout|min_capacitance|min_transition|mi
n_fanout|pulse_clock_max_transition|pulse_clock_min_transition}
Use model: Report max transition constraints in Setup analysis mode, and min
transition constraints in Hold analysis mode
PG PL
C1 C2 C3
CLK PCLK A Y A Y A Y PG
CLK
Design schematic
0 5 10
CLK
1 2 4 5
Pulse-clock
minPW=3
maxPW=4
Constraints:
Support
Cadence Online Support provides access to support resources, including an extensive
knowledge base, access to software updates for Cadence products, and the ability to
interact with Cadence Customer Support. Visit http://support.cadence.com.
Feedback
Email comments, questions, and suggestions to [email protected].