Вы находитесь на странице: 1из 163

1

Constraints Coding Rules

Introduction
This chapter presents reference information for the rules
contained in the Constraints policy for the Leda Checker tool.
This policy specifies general-purpose rules that cover many
aspects of Synopsys Design Constraint (SDC) files and their
relationships to the designs that they constrain. For
information on how to use the SDC checker, see the Leda User
Guide.
The rules in the Constraints policy are grouped by type into the
following rulesets. Each ruleset imposes constraints on
different aspects of SDC file constraints (see Table 2).
Table 2: Constraints Policy Rulesets 
Ruleset Description

Rules for consistency and


completeness in the usage of
constraints defined with
create_clock,
create_generated_clock,
set_propagated_clock,
set_clock_transition,
Clocks
set_input_transition,
Ruleset

set_driving_cell,
set_clock_latency, and
set_clock_uncertainty SDC file
commands used to constrain
real and generated clocks in
the design.
Rules to check for consistency in the usage of
TVB Ruleset constraints between the top block and other sub
blocks of a design.

DFT Ruleset
Ruleset includes checks associated with SDC DFT
commands, used in test-mode SDC files.
DRC Ruleset Rules that deal with DRC of the design.
Ruleset includes checks related to SDC timing
Exceptions
Ruleset exceptions commands like set_false_path,
set_multicycle_path, set_disable_timing etc.
Rules for consistency and completeness in the
Inputs Ruleset usage of set_input_delay, set_input_transition and
set_driving_cell SDC commands.
Naming
Ruleset Rules for naming clocks, ports, and pins.
Outputs Rules for consistency and completeness in the
Ruleset
usage of set_output_delay SDC commands.
Power Ruleset Rules that deal with power of the design
Structure
Ruleset
Rules that deal with structure of the design.

Rules that are miscellaneous in nature and that


Miscellaneous
Ruleset does not fall under any of the above mentioned
rulesets.
Rules that deal with objects that should not be used
Objects
Ruleset
with create_clock and create_generated_clock
commands.

Equivalency Rules that deal with the


equivalency of two SDC files.
Ruleset

Clocks Ruleset
The following rules are from the Clocks ruleset:

SDC_CLK01

Message: Unconstrained clock. No create_clock or


create_generated_clock found: %s

Every clock in the design must be defined in the SDC


file using either a create_clock or
create_generated_clock command. This information
needs to be passed to synthesis and post-synthesis
tools, because clocks are treated as special nets in
Description
the design flow. For example, if you don't specify a
definition and other information on clock nets in your
constraint file for DC, the synthesis tool may treat the
clock signal like any other net, thus requiring another
iteration with DC.Leda's output points to the signal
inferred as a clock and the Path Viewer shows a path
from this signal to a flip-flop.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows a portion of an SDC file and the
associated design file. Leda flags this combination as a rule
violation because the SDC file does not contain a definition for
the second clock in the design. Every clock has to be present
in your SDC file. In this case, Leda infers a clock that has no
corresponding constraint in the SDC files checked. If a register
has no clock in the constraint file, Leda cannot verify paths to
this register.
// SDC File
create_clock -name CLK1 -period 10 [get_pins clk1]

// Design File
module CLK01(clk1, clk2, in1, in2, out1, out2);
input clk1;
input clk2;
input in1, in2;
output out1, out2;
reg out1, out2;
always @(posedge clk1)
begin
out1 <= in1;
end
always @(negedge clk2)
begin
out2 <= in2;
end
endmodule

SDC_CLK02

Message: Unused clock constraint %s

Unused create_clock and create_generated_clock


Description commands in constraint files reduce performance
and readability and make debugging more difficult.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows a constraint file that has a create_clock
command for a clock that is not used in the design. Leda flags
an error for the unused clock constraint:
// SDC File
create_clock -name CLK -period 2 [get_ports CLKIN]
create_generated_clock -name GCLK1 -source [get_ports CLKIN] -divide_by
2 [get_pins Q0]
create_generated_clock -name GCLK2 -source [get_pins Q0] -divide_by 2
[get_pins Q1]
create_clock -name ECLK -period 2 [get_ports D0]
# SDC_CLK02 violation--ECLK is an extra clock

// Design File
module CLK02(D0, D1, D2, CLKIN, Q);
input D0, D1, D2, CLKIN;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q0)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN)
Q <= SR2;
endmodule

SDC_CLK03

Message: Generated clock is not in the transitive fanout


of its master clock: %s

Each generated clock should be driven by a master


clock in the design. For each create_generated_clock
command in the SDC files you check, Leda traces
backward from the generated clock node in the
Description design until the master clock node is reached. If it is
never reached, Leda flags an error giving the source
position of the create_generated_clock constraint, as
well as the master clock and generated clock full path
names.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog

Type
SDC
Severity
Error
Example
Leda flags an error for this example because the generated
clock for Q1 is not driven by the design master clock.
// SDC File
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
create_clock -name CLK1 -period 7.0 -waveform {0.0 2.5} [get_ports
CLKIN1]
create_generated_clock -name GCLK1 -source [get_ports CLKIN] -divide_by
2 [get_pins Q0]
create_generated_clock -name GCLK2 -source [get_ports CLKIN_1] -
divide_by 2 [get_pins D0]

// Design File
module CLK02(D0, D1, D2, CLKIN, CLKIN_1, Q);
input D0, D1, D2, CLKIN, CLKIN_1;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q0)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN_1)
Q <= SR2;
endmodule

The following circuit diagrams illustrate valid and invalid


designs using generated clocks. Leda flags an error for rule
SDC_CLK03 when it infers an error case like the one shown
below.
SDC_CLK04

Message: Generated clock master is not used as clock in


design

This rule makes sure that the pin referred to in the -


source option for the create_generated_clock
command is really a clock. If it isn't, Leda flags an
Description error and points to the generated_clock declaration
and the master clock (source) declaration. The Path
Viewer shows the path from the generated clock to
its designated master clock.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because the driver
for GCLK is an input pin, but not a clock:
// SDC File
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
create_generated_clock -name GCLK -source DATAIN -divide_by 2 [get_pins
FF0/Q]
# SDC_CLK04 violation--driver for GLCK not a clock

// Design File
module CLK04 ( D0, D1, D2, CLKIN, CLKIN1, Q );
input D0;
input D1;
input D2;
input CLKIN;
input CLKIN1;
output Q;
wire Q0, Q1, SR0, SR1, SR2;
GTECH_FD1 Q_reg ( .D(SR2), .CP(CLKIN1), .Q(Q) );
GTECH_FD1 SR2_reg ( .D(SR1), .CP(Q1), .Q(SR2) );
GTECH_FD1 SR1_reg ( .D(SR0), .CP(Q1), .Q(SR1) );
GTECH_FD1 SR0_reg ( .D(D2), .CP(Q0), .Q(SR0) );
GTECH_FD1 Q1_reg ( .D(D1), .CP(Q0), .Q(Q1) );
GTECH_FD1 Q0_reg ( .D(D0), .CP(CLKIN), .Q(Q0) );
endmodule
SDC_CLK06

Message: Overlapping clock trees: path from clock


source to leaf cell clock is not unique

This rule flags if there is more than one path from


Description
clock source (obtained from
create_clock/create_generated_clock) to clock pins
of sequential elements.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error.
// SDC File
create_clock -name CLK -period 10 -waveform {0 5} [get_ports clk]

// Design File
module mid ( c1, c2, d, q );
input c1;
input c2;
input d;
output q;
wire w5;
GTECH_AND_NOT U3 ( .A(c2), .B(c1), .Z(w5) );
GTECH_FD1 q_reg ( .D(d), .CP(w5), .Q(q) );
endmodule

module mSDC_CLK06 ( clk, en1, en2, d, q );


input clk;
input en1;
input en2;
input d;
output q;
wire w2, w3;
mid inst ( .c1(w2), .c2(w3), .d(d), .q(q) );
GTECH_AO21 U1 ( .A(en1), .B(clk), .C(w2), .Z(w3) );
GTECH_AND2 U2 ( .A(en2), .B(clk), .Z(w2) );
endmodule

SDC_CLK07

Message: Clock tree net is connected to output port


without dedicated buffering

Description
This rule flags violation if any net in clock tree is
connected to output port without dedicated buffering.
Policy Constraints
Ruleset Clocks

Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error.
// SDC File
create_clock -name CLOCK1 -period 10 [get_ports CLK1]
create_clock -name CLOCK2 -period 15 [get_ports CLK2]
create_clock -name CLOCK3 -period 20 [get_ports CLK3]
# SDC_CLK07 violation

// Design File
module mSDC_CLK07 (D, CLK1, CLK2, CLK3, EN, Q1, Q2, Q3, outClk1,
outClk2, outClk3, outClk4);
input D, CLK1, CLK2, CLK3, EN;
output outClk1, outClk2, outClk3, outClk4;
output Q1, Q2, Q3;
reg Q1, Q2, Q3;
wire w1,w2,w3;
assign outClk1 = CLK1 & EN;
always@(posedge outClk1) Q1 <= D;
assign w1 = CLK2 | EN;
always@(posedge w1) Q2 <= D;
assign outClk2 = !w1;
assign w2 = CLK3 & EN;
buf inst0(outClk3, w2);
buf inst1(w3, outClk3);
always@(posedge w3) Q3 <= D;
endmodule

SDC_CLK08

Message: Generated clock is a port of design: %s

If a generated clock is a port, then the slope on that


port and the delays in the clock tree depend strongly
on the load capacitance of that port. When Leda finds
a violation of this rule, the output shows the
Description generated_clock declaration, master clock (source)
declaration, and the declaration of the port referenced
by the constraint. The Path Viewer shows the path
from port identified as a generated clock to the
master clock.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file with a generated clock that is
a design port.
// SDC File
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
# SDC_CLK08 violation
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
create_generated_clock -name GCLK1 -source [get_ports D2] -divide_by 2
[get_pins CLK08.Q]

// Design File
module clk08(D0, D1, CLKIN, GCLK, Q, Q1);
input D0, D1, CLKIN;
inout GCLK;
output Q, Q1;
reg Q, TMP;
reg Q0, Q1;

always @(posedge CLKIN)


Q0 <= D0;
always @(posedge GCLK)
Q1 <= D1;
always @(posedge Q1)
TMP <= D1;
always @(posedge TMP)
Q <= Q0 & TMP;
endmodule

SDC_CLK09

Message: Clock detected on fanin of generated clock


that is not the master clock: master %s, detected %s

If the source pin of a clock GCLK is in the fanout of


the source pin of another clock CLK, then GCLK
should be generated by CLK. When Leda flags a
violation of this rule, the output points to the
Description generated_clock declaration, master clock (source)
declaration, and the declaration of the port referenced
by the constraint. The Path Viewer shows the path
from the generated clock to the real master clock
(primary input).
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows valid and invalid circuit diagrams relative
to the SDC file.
// SDC File
create_clock -name CLK -period 5.0 [get_ports CLKIN]
create_generated_clock -name GCLK -source CLKIN -divide_by 2 [get_pins
FF0/Q]
SDC_CLK10

Message: Clock has no set_propagated_clock constraint


in post-layout: %s

In the post-layout timing analysis constraint file, real


and generated clocks need to be set as propagated
clocks (this rule does not apply to virtual clocks).
Because the clock tree has already been synthesized,
Description setting propagated clocks is necessary for accurate
timing analysis. With this rule selected, Leda checks
that all real and generated clocks are constrained by
set_propagated_clock commands in the post-layout
SDC file.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows a post-layout SDC file that is missing the
set_propagated_clock commands required for accurate timing
analysis.
// SDC File
create_clock -name CLKIN -period 10 [get_ports clk1]
create_generated_clock -name GCLK1 -source clk1 [get_pins clk2]
# SDC_CLK10 violation--no set_propagated_clock command in post-layout

//Design File
module clk10(D1, clk1, Q);
input D1, clk1;
output Q;

reg Q, clk2;
always @(posedge clk1)
clk2 = D1;
always @(posedge clk2)
Q = 1;
endmodule

SDC_CLK11

Message: set_propagated_clock defined on clock in pre-


layout: %s

In a pre-layout SDC file, the clock tree is not yet


synthesized, so setting it as propagated clock is
premature. Using set_propagated_clock commands
Description in this mode may cause the timing analysis tool to
unnecessarily calculate delays for an ideal clock
network. This rule applies to both real and generated
clocks in pre-layout mode.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_CLK12

Message: Clock must be defined on ports or leaf cell


pins, not on hierarchical ports

This rule flags violation if the clock is defined on a


Description
signal, which is neither port nor a leaf cell pin.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error.
// SDC File
create_clock -name CLK1 -period 10 [get_ports CLKIN]
create_clock -name CLK2 -period 10 [get_pins Q3_reg/CP]
create_clock -name CLK3 -period 10 [get_pins inst0/CP]
# SDC_CLK12 violation
create_generated_clock -name CLK4 -source [get_pins inst0/CP] [get_pins
inst1/CP] -divide_by 2

// Design File
module mSDC_CLK12 ( D0, D1, D2, CLKIN, CLKIN1, Q1, Q2, Q3 );
input D0;
input D1;
input D2;
input CLKIN;
input CLKIN1;
output Q1;
output Q2;
output Q3;
wire Q0;

GTECH_FD1 Q3_reg ( .D(Q2), .CP(CLKIN1), .Q(Q3) );


mid inst1 ( .D(D2), .CP(Q1), .Q(Q2) );
flop inst0 ( .D(D1), .CP(Q0), .Q(Q1) );
GTECH_FD1 Q0_reg ( .D(D0), .CP(CLKIN), .Q(Q0) );
endmodule

module mid (D, CP, Q);


input D, CP;
output Q;
wire clk;
assign clk = ~CP;
flop I0 ( .D(D2), .CP(clk), .Q(Q2) );
endmodule

module flop (D, CP, Q);


input D, CP;
output Q;
reg Q;

always @(posedge CP)


Q <= D;
endmodule

SDC_CLK13
Message: Virtual clock has no corresponding real clock
with the same period and waveform

Every virtual clock defined in constraint file should


Description have a real clock with same period and waveform
values.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error.
// SDC File
create_clock -name VCLOCK0 -period 10 -waveform {5 9}
create_clock -name VCLOCK1 -period 15
create_clock -name VCLOCK2 -period 20 -waveform {5 10}
# SDC_CLK13 violation
create_clock -name CLOCK0 -period 10 -waveform {5 10} [get_ports CLK0]
create_clock -name CLOCK1 -period 10 [get_ports CLK1]
create_clock -name CLOCK2 -period 20 -waveform {5 10} [get_ports CLK2]

// Design File
module mSDC_CLK13 (D0, D1, D2, CLK0, CLK1, CLK2, Q);
input D0, D1, D2, CLK0, CLK1, CLK2;
output Q;
reg Q0, Q1, Q2;
always @(posedge CLK0)
Q0 <= D0;
always @(posedge CLK1)
Q1 <= D1;
always @(posedge CLK2)
Q2 <= D2;
assign Q = Q0 | Q1 | Q2;
endmodule

SDC_CLK14

Message: Incomplete clock definition: waveform and


period are missing

Constraint file clock definitions should specify the


period and waveform of the clock. This information is
Description
needed by timing analysis and synthesis tools for
their internal delay calculations.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_CLK15

Message: Incomplete generated clock definition: one of -


divide_by, -multiply_by, -invert, -edge_shift or -edges
must be present

Generated clock definitions in SDC files must contain


one of the options: -divide_by, -multiply_by, -invert, -
Description
edge_shift or -edge. This defines the relationship
between the source and generated clocks. The
absence of this information may lead to incorrect
timing results during timing analysis and synthesis.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_CLK16

Message: Divided clock detected


This rule flags violation if there is a
Description create_generated_clock command having -divide_by
or -multiply_by option.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This example causes Leda to flag a warning because the
create_generated_clock command is having -divide_by and -
multiply_by options.
// SDC File
create_clock -name CLK [get_ports CLKIN] -waveform {5 10} -period 15
# SDC_CLK16 violation
create_generated_clock -name GCLK1 -source [get_ports CLKIN] Q0
-divide_by 2
create_generated_clock -name GCLK2 -source Q0 -divide_by 2 Q1
-multiply_by 3

// Design File
module mSDC_CLK16 (D0, D1, D2, CLKIN, Q);
input D0, D1, D2, CLKIN;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q0)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN)
Q <= SR2;
endmodule

SDC_CLK17

Message: Edge derived clock detected

This rule flags violation if there is a


Description
create_generated_clock command having -edges
option.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This example causes Leda to flag a warning because the
create_generated_clock command is having -edges option.
// SDC File
create_clock -name CLK [get_ports CLKIN] -waveform {5 10} -period 15
# SDC_CLK17 violation
create_generated_clock -name GCLK1 -source [get_ports CLKIN] Q0 -edges
{1 3 5}
create_generated_clock -name GCLK2 -source Q0 -divide_by 2 Q1

// Design File
module mSDC_CLK17 (D0, D1, D2, CLKIN, Q);
input D0, D1, D2, CLKIN;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q0)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN)
Q <= SR2;
endmodule

SDC_CLK18

Message: Unsupported options used: -add -master_clock

This rule flags violation if there is a


Description create_generated_clock command having -add or -
master_clock option.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because the
create_generated_clock command is having -add and -
master_clock option.
// SDC File
create_clock -name CLK [get_ports CLKIN] -waveform {5 10} -period 15
# SDC_CLK18 violation
create_generated_clock -name GCLK1 -source [get_ports CLKIN] -divide_by
2 Q0 -add
create_generated_clock -name GCLK2 -source Q0 -divide_by 2 Q1 -
master_clock [get_ports CLKIN]

// Design File
module mSDC_CLK18 (D0, D1, D2, CLKIN, Q);
input D0, D1, D2, CLKIN;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q0)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN)
Q <= SR2;
endmodule

SDC_CLK20

Message: Same clock line has multiple definitions

This rule fires when Leda detects multiple


Description create_clock or create_generated_clock commands
defined for the same real clock.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_CLK23

Message: Incomplete clock definition: period is missing

Description
This rule flags violation if there is a create_clock
command without -period option.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because
create_clock command is not having -period option.
// SDC File
# SDC_CLK23 violation
create_clock -name VCLK
create_clock -name CLK [get_ports CLKIN] -waveform {5 10}
create_generated_clock -name GCLK1 -source [get_ports CLKIN] -divide_by
2 Q0
create_generated_clock -name GCLK2 -source Q0 -divide_by 2 Q1

// Design File
module mSDC_CLK23 (D0, D1, D2, CLKIN, Q);
input D0, D1, D2, CLKIN;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q0)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN)
Q <= SR2;
endmodule

SDC_CTR01

Message: Missing or zero value set_clock_transition


constraint for clock: %s

In RTL and pre-layout modes, clock transition values


must be defined in the constraint file using
set_clock_transition commands. Because a clock tree
is ideal, the clock transition should be supplied using
Description
set_clock_transition command for timing analysis.
Without information about clock transition values,
you may get incorrect results in timing analysis and a
design that does not optimize properly during
synthesis. This rule fires for real clocks and
generated clocks.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file for an RTL or pre-layout
design that does not contain the required set_clock_transition
commands:
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
create_generated_clock -name GCLK -source [get_ports clk] -divide_by 2
[get_pins clk1]
set_propagated_clock { CLK GCLK }
# SDC_CTR01 violation for CLK

// Design File
module CTR01(in1, in2, clk, out);
input in1, in2, clk;
output out;
reg out;
reg clk1;

always @(posedge clk)


clk1 <= in1;
always @(posedge clk1)
out <= in2;
endmodule

SDC_CTR02

Message: set_clock_transition is set on an object that is


not a clock: %s

In RTL and pre-layout modes, clock transition values


specified with set_clock_transition commands are
valid for clocks. But setting clock transition values on
nets that are not clocks may result in incorrect timing
Description
and synthesis results. So Leda flags errors when it
finds set_clock_transition commands specified for
objects that are not clocks. The output points to the
object in a set_clock_transition command which does
not have corresponding create_clock or
create_generated_clock command.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an RTL or pre-layout SDC file that uses a
set_clock_tansition command on a design object that is not a
clock:
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
create_generated_clock -name GCLK -source [get_ports clk] -divide_by 2
[get_pins clk1]
set_propagated_clock { CLK GCLK }
set_clock_transition 0.0 -rise {in1}
# SDC_CTR02 violation--use of set_clock_transition on object that is not
a clock

SDC_CTR04

Message: set_annotated_transition not defined on clock


pin of leaf cell

Get all the clock pins of leaf level cells. For each clock
Description pin if the constraint set_annotated_transition is not
set on it then flag a violation.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_CTR06

Message: Undefined clock transition for real clock: %s

In post-layout mode, because the clock network is


synthesized, the clock transition value at the port
needs to be set using an set_input_transition or
set_clock_constraint command in the SDC file. Other
Description transition values at the clock pins of registers are
calculated by the timing analysis tool.Note that if you
have a set_input_transition command, but no
set_clock_constraint command, this rule does not
fire.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type
SDC
Severity
Error
Example
This example shows part of an SDC file for post-layout mode.
This SDC file causes Leda to flag an error.
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
create_generated_clock -name GCLK -source [get_ports clk] -divide_by 2
[get_pins clk1]
# SDC_CTR06 violation--no set_input_transition command for real clock

To fix this SDC file, add a command like the following:


set_input_transition 0.5 [get_ports clk]

SDC_CTR08

Message: Do not use set_clock_transition in post-layout


for clocks; use set_input_transition instead

In post-layout mode, the clock tree is synthesized and


net transition values can be calculated from the
synthesized netlist. Therefore, only external port
transition values need to be set in post-layout mode.
After the clock tree network is synthesized, the clock
Description
port needs to be treated like any other port, using
set_input_transition commands to set transition
values instead of set_clock_transition
commands.Note that if there are both
set_input_transition and set_clock_transition
commands in the SDC file, this rule fires on the
set_clock_transition command.
Policy Constraints

Ruleset
Clocks

Language VHDL/Verilog
Type SDC
Severity
Error
Example
This post-layout SDC file example causes Leda to flag an
error, because the clock port transition values in this mode
should be set with set_input_transition commands, not
set_clock_transition commands.
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
set_clock_transition 0.0 CLK
# SDC_CTR08 violation--set_clock_transition for clock signal in post-
layout mode.

SDC_CTR09

Message: set_input_transition and set_driving_cell on


clock ports are not recommended in pre-layout

Generally, during the pre-layout stage, the clock net is


ideal. So, using the set_input_transition and
set_driving_cell commands for the clock is not
recommended. Instead, use set_clock_transition
Description
commands. Leda checks this rule for both real and
generated clocks in pre-layout mode. When Leda
finds violations of this rule, the output points to
set_input_transition and set_driving_cell commands
for clocks defined using create_clock or
create_generated_clock commands.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC

Severity Error
Example
This example shows the use of a set_input_transition
command for a clock in pre-layout mode, which causes Leda
to flag an error.
// SDC File
create_clock -name CLK -period 10 clk
set_input_transition 1.0 clk
# SDC_CTR09 violation--set_input_transition for clock in pre-layout
mode.

SDC_CTR10

Message: set_driving_cell on clock ports is not


recommended in post-layout

In post-layout mode, Leda fires for this rule when it


finds real or generated clocks set with the
set_driving_cell command. The output points to
set_input_transition and set_driving_cell commands
for clocks defined using create_clock or
create_generated_clock commands. In post-layout
mode it is better to use the set_input_transition
commands.Setting a drive on a clock port can create
problems. With an ideal clock there is a 0 ns
propagation delay and thus the drive strength is
ignored; however, there is a transition delay. Since the
Description load on the clock is large, the transition delay is huge.
The non-linear delay model tables in the library are
not characterized to handle such huge transition
delays. As a result, there might be a negative
propagation delay. Moreover, the nonlinear delay
model allows a cell's output pin transition to depend
on the transition on the input. The set_driving_cell
command does not specify what input transition to
use when calculating the port delay. Leda assumes a
zero transition. This means that the port delay will be
slightly optimistic for driving cells where output
transition depends on input transition.
Policy
Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_CTR11

Message: Incomplete set_clock_transition options

In RTL or pre-layout mode, clock transitions should be


specified using both the max and min values and
both the rise and fall values to give more information
Description
to the timing analysis and synthesis tools. This rule
applies to clocks and generated clocks. When Leda
flags a violation of this rule, the output points to the
set_clock_transition command with incomplete
options.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example SDC file for a pre-layout design shows the use of
a min value without also specifying a max value for the clock.
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
set_clock_transition 0.0 -min CLK
# SDC_CTR11 violation--no max specified for clock

This next example SDC file for a pre-layout design shows the
use of a rise value without also specifying a fall value for the
clock.
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
set_clock_transition 0.0 -rise CLK
# SDC_CTR11 violation--no fall specified for clock

SDC_CTR12

Message: Incomplete set_input_transition options

In post-layout mode, clock input transitions should be


specified using both the max and min values and
both the rise and fall values to give more information
Description
to the timing analysis and synthesis tools. This rule
applies to clocks and generated clocks. When Leda
flags a violation of this rule, the output points to the
set_input_transition command with incomplete
options.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_CTR13

Message: Inconsistent clock transition values min > max

Description
This rule will flag violation if min value specified in
clock transition is greater than max.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because the min
value is greater than the max value in set_clock_transition and
set_input_transition command.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN]
-divide_by 2 Q1

set_clock_transition 1.5 [get_clocks GCLK] -max


# SDC_CTR13 violation
set_clock_transition 2.5 [get_clocks GCLK] -min
set_input_transition 2.5 [get_ports CLKIN] -max
# SDC_CTR13 violation
set_input_transition 3.5 [get_ports CLKIN] -min

// Design File
module mSDC_CTR13 (D1, D2, D3, D4, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3, D4;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2&D4;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_CTR14

Message: clock and clock_fall options of


set_input_transition command are not supported

Description
This rule will flag violation if -clock or -clock_fall
options are specified in set_input_transition.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because -clock and
-clock_fall options are present.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN]
-divide_by 2 Q1
# SDC_CTR14 violation
set_input_transition 2.5 [get_clocks CLK] -clock_fall
set_input_transition 1.5 [get_clocks GCLK] -clock [get_clocks CLK]

// Design File
module mSDC_CTR14 (D1, D2, D3, D4, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3, D4;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2&D4;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_CTR15

Message: Negative clock transition value

Description
This rule flags violation if the value specified in clock
transition constraint is < 0.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because the value
specified in set_clock_transition command is negative.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN] -divide_by 2
Q1
#RTL & G-pre
# SDC_CTR15 violation
set_clock_transition -2.5 [get_clocks GCLK]
#G-Post
set_input_transition -1.5 [get_ports CLKIN]
set_input_transition -1.6 [get_ports D1]

// Design File
module mSDC_CTR15 (D1, D2, D3, D4, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3, D4;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2&D4;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_LAT01

Message: Undefined clock latency or zero clock latency


for real clocks: %s

In RTL or pre-layout mode, the clock latency for real


clocks cannot be zero or left unspecified. To model
the propagation of the clock signal through the clock
Description
tree from the root pin to the leaf pins, a latency must
be defined for every clock. This is mandatory to
ensure alignment between ideal and propagated
clock timing analysis and the optimization
environment.
Policy Constraints
Ruleset Clocks

Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file example shows a properly specified clock
latency, as illustrated in the following circuit diagram.
// SDC File
create_clock -name CLK -period 5.0 [get_ports CLKIN]
set_clock_latency 1.5 [get_clocks CLK]

SDC_LAT02

Message: Clock latency is set on an object that is not a


clock: %s

Setting clock latencies on design objects that are not


Description clocks may cause problems for timing analysis and
synthesis tools.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file contains examples of valid and invalid
create_clock commands. Leda flags the invalid cases as
errors and points to them in the Checker output.
// SDC File
create_clock -name CLK -period 10 [ger_ports clk]
set_clock_latency 1.0 [get_clocks clk]
set_clock_latency 1.0 [get_clocks d] #Error, d is not a clock
# SDC_LAT02 violation--clock latency set for object that is not a clock

// Design File
module ITR07 (clk, d, q);
parameter nb_bit = 8;
input clk;
input [1: nb_bit] d;
output [1: nb_bit] q;
reg [1: nb_bit] q;

always @(negedge clk) q = d;


endmodule

SDC_LAT03

Message: Source latency for a generated clock is less


than or equal to the source clock latency

The latency of a generated clock has to be greater


Description
than its source clock latency. Otherwise, Leda flags
an error because this can cause poor quality of
results from timing analysis and synthesis tools.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file example shows a properly specified clock
latency for a generated clock, as illustrated in the following
circuit diagram.
// SDC File
create_clock -name CLK0 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN]
create_generated_clock -name CLK -source [get_ports CLKIN] -divide_by 2
[get_pins FF0/Q]
create_generated_clock -name GCLK -source [get_pins FF0/Q] -divide_by 2
[get_pins FF1/Q]
set_clock_latency -source 1.0 [get_clocks CLK]
set_clock_latency -source 2.0 [get_clocks GCLK]

SDC_LAT05

Message: Clock latency specified for post layout analysis

Description
The rule will flag violation if set_clock_latency is used
in constraint file for post-layout analysis.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file contains examples.
// SDC File
create_clock -name CLK0 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN]
create_generated_clock -name GCLK1 -source [get_ports CLKIN]
-divide_by 2 Q0
create_generated_clock -name GCLK2 -source Q0 -divide_by 2 Q1
set_clock_latency 2.5 [get_clocks CLK0]
set_clock_latency -source 4.0 [get_clocks GCLK1]
set_clock_latency -source 2.1 [get_clocks GCLK2]
# SDC_LAT05 violation

// Design File
module mSDC_LAT05 (D, CLKIN, CLKIN1, Q, EN);
input CLKIN, CLKIN1, EN;
input [0:2]D;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D[0];
wire tmp;
assign tmp = Q0 & EN;
always @(posedge tmp)
Q1 <= D[1];
always @(posedge Q0)
SR0 <= D[2];
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN1)
Q <= SR2;
endmodule

SDC_LAT06

Message: Undefined source latency or zero source


latency for generated clock

The latency for a generated clock cannot be zero; it


has to be greater than the latency of its source clock.
Description Specifying a latency for generated clocks greater than
their source clocks produces better timing analysis
and synthesis results.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file example shows properly specified generated
clocks, as illustrated in the following circuit diagram.
// SDC File
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN] -divide_by 2
[get_pins FF0/Q]
set_clock_latency -source 1.8 [get_clocks GCLK]
SDC_LAT07_A

Message: Incomplete set_clock_latency options: missing


-min/max

When options such as -min/max are used with


set_clock_latency commands, the counterpart
Description options must also be present. Otherwise, Leda flags
an error. The output points to the incomplete
command in the SDC file checked.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_LAT07_B

Message: Incomplete set_clock_latency options :


missing -late/early

When options such as -late/early are used with


set_clock_latency commands, the counterpart
Description options must also be present. Otherwise, Leda flags
an error. The output points to the incomplete
command in the SDC file checked.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_LAT07_C

Message: Incomplete set_clock_latency options: missing


-source

When the -source option is not used used with


Description
set_clock_latency commands, Leda flags an error.
The output points to the incomplete command in the
SDC file checked.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_LAT08_A

Message: Inconsistent clock latency option values - min


> max

Leda flags an error is the minimum clock latency is


Description
greater than the maximum clock latency. Leda points
to the incorrect set_clock_latency command in the
output.
Policy
Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_LAT08_B

Message: Inconsistent clock latency option values - early


> late

Leda flags an error is the -early option is greater than


Description
the -late option in the set_clock_latency command.
Leda points to the incorrect set_clock_latency
command in the output.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_LAT09

Message: Negative clock latency value: %d

Clocks should not be specified with negative


Description
latencies. Check for typos. Leda flags these errors
and points to the incorrect set_clock_latency
command in the output.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_UNC01

Message: Undefined clock uncertainty or zero clock


uncertainty (real and generated clocks)

For every real clock, the clock uncertainty must not be


zero. Otherwise, Leda flags an error. In Primetime, the
hold clock uncertainty models the sum of the clock
tree's inherent skew, the uncertainty on insertion
Description delays, and a hold margin. The setup clock
uncertainty models the sum of the clock tree's
inherent skew, the uncertainty on insertion delays, a
setup margin, and the clock's input jitter. See the
following circuit diagram.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file that is missing a
set_clock_uncertainty command for CLK2:
// SDC File
create_clock -name CLK1 -period 1.0 clk1
create_clock -name CLK2 -period 1.0 clk2
set_clock_uncertainty 1.0 CLK1
# SDC_UNC01 violation--no clock uncertainty set for CLK2

// Design File
module simple_reg (clk1, clk2,d1,d2, q1,q2);
parameter nb_bit = 8;
input clk1,clk2;
input [1: nb_bit] d1,d2;
output [1: nb_bit] q1,q2;
reg [1: nb_bit] q1,q2;
always @(negedge clk1) q1 = d1;
always @(negedge clk2) q2 = d2;
endmodule

SDC_UNC02

Message: Clock uncertainty is set on an object that is not


a clock (real and generated clocks)

This rule checks that all design objects specified with


set_clock_uncertainty commands are real or
generated clocks. If not, Leda flags an error and
Description points to the faulty command in the output. Setting
clock uncertainty for design objects that are not
clocks causes problems for timing analysis and
synthesis tools.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file that uses a
set_clock_uncertainty command on a design object (in1),
which is not a clock.
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
set_clock_uncertainty -setup 0.65 in1
# SDC_UNC02 violation--design object not a clock

// Design File
module UNC02(in1, in2, clk, out);
input in1, in2, clk;
output out;
reg out;
reg clk1, clk2;
always @(posedge clk)
clk1 <= in1;
always @(negedge clk)
clk2 <= in2;
always @(posedge clk1 or posedge clk2)
out <= in1;
endmodule

SDC_UNC04

Message: Incomplete set_clock_uncertainty options

This rule flags violation when any of rise, fall or setup,


Description hold option is used but the counterpart options are
not present for inter-clocks.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because -rise and -
fall options are not present for the -hold option.
// SDC File
create_clock -name CLK0 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN]
create_clock -name CLK1 -period 7.0 -waveform {0.0 2.5} [get_ports
CLKIN1]

#set_clock_uncertainty -setup .45 [get_clocks CLK0]


#set_clock_uncertainty -hold .35 [get_clocks D1]

set_clock_uncertainty -setup -rise 1.2 -from CLK0 -to CLK1


set_clock_uncertainty -setup -fall 1.3 -from CLK0 -to CLK1
# SDC_UNC04 violation--missing -rise, -fall for hold option
// Design File
module mSDC_UNC04(D0, D1, D2, CLKIN, CLKIN1, Q2, Q3);
input D0, D1, D2, CLKIN, CLKIN1;
output Q2, Q3;
reg Q0, Q1, Q2, Q3;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q1)
Q2 <= D2;
always @(posedge CLKIN1)
Q3 <= Q2;
endmodule

SDC_UNC05

Message: Negative clock uncertainty value: %d

Specifying negative clock uncertainty values causes


Description
problems for timing analysis and synthesis tools.
Leda flags these as errors and points to the faulty
set_clock_uncertainty commands in the output.
Policy Constraints
Ruleset Clocks
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file that specified a negative
clock uncertainty value.
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
set_clock_uncertainty -setup -0.65 CLK
# SDC_UNC05 violation--negative clock uncertainty

// Design File
module UNC05(in1, in2, clk, out);
input in1, in2, clk;
output out;
reg out;
reg clk1, clk2;
always @(posedge clk)
clk1 <= in1;
always @(negedge clk)
clk2 <= in2;
always @(posedge clk1 or posedge clk2)
out <= in1;
endmodule

TVB Ruleset
The following rules are from the Top versus Block (TVB)
ruleset:

SDC_TOP01

Message: Block level clock constraint is inconsistent


with top level clock constraint

This rule checks if the top level clock constraint has a


period equal to the period associated with the
corresponding block level clock constraint. It also
Description
checks if the top-level waveform is exactly equivalent
to the corresponding block-level waveform. This rule
also takes into consideration the divide_by and
multiply_by options on a create_generated_clock
command.
Policy Constraints
Ruleset TVB
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to issue an error message because
the period of the top-level clock constraint is not the same as
the period of the block-level clock constraint.
// SDC File
//Top-level constraints:
create_clock -name "CLK_t" -period 5.0 [get_ports CLK_t]
create_generated_clock -name "CLK_g" -divide_by 2 -source CLK_t
[get_pins div/clk]

//Block-level constraints for block_1:


create_clock -name "BCLK1" -period 6.0 -waveform {0 3} [get_ports BCLK1]
//Block-level constraints for block_2:
create_clock -name "BCLK2" -period 12.0 -waveform {0 6}[get_ports BCLK2]
# SDC_TOP01 violation because of inconsistency of period between top and
block_1 and between top and block_2

SDC_TOP02

Message: Block level I/O delay constraint is inconsistent


with top level delay constraint

This rule checks that the input constraints at the


block-level are consistent with top-level constraints.
The input delay for block must be greater than or
Description
equal to any input delay for a top-level port in the
fanin cone of that block input. The output delay for
block must be greater than or equal to any output
delay for a top-level port in the fanout cone from that
block output.
Policy Constraints
Ruleset TVB
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to issue an error message because
the input delay and output delay constraints of top-level and
block-level are inconsistent.
// SDC File

//Top-level constraints:
create_clock -name "CLK_t" -period 5.0 -waveform {0 2.5} [get_ports
CLK_t]
create_generated_clock -name "CLK_g" -divide_by 2 -source CLK_t
[get_pins div/clk]
set_input_delay 2.5 -clock CLK_t [et_ports IN1]
set_output_delay 2.5 -clock CLK_g [get_ports OUT1]

//Block-level constraints for block_1: Input IN1 reaches block input


B1_IN1
create_clock -name "BCLK1" -period 5.0 -waveform {0 2.5} BCLK1
set_input_delay 2.0 -clock CLK_t [get_ports B1_IN1]

//Block-level constraints for block_2: Output B1_OUT1 reaches top-level


output OUT1
create_clock -name "BCLK2" -period 10.0 -waveform {0 5} BCLK2
set_output_delay 2.0 -clock CLK_g [get_ports B1_OUT1]

// 2 violations of SDC_TOP02 will be flagged


// For input B1_IN1 and IN1: The value for top is greater than block_1
// For output B1_OUT1 and OUT1: The value for top is greater than
block_2

SDC_TOP03

Message: Block level false path constraint is


inconsistent with top level false path constraint

This rule checks that the top-level false path


constraint is consistent with the block-level false path
Description constraint. A path that is defined as false at the
block-level should also be a false path at the top
level.
Policy Constraints
Ruleset TVB
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows a test case that does not violate this rule.
// SDC File

//If a clock is specified in the false_path at the block level, then the
//top-level should also have a similar constraint and the top-level
//clock should drive the block-level clock.

//At the block level consider the following:

create_clock -name "BCLK1" -period 6 -waveform {0 3} BCLK1


set_false_path -from [get_clocks BCLK1] -to [get_ports B1_OUT1]

//The top level should have the following


create_clock -name  "Clk_t" -period 5.0 [get_ports Clk_t]
set_false_path -from [get_clocks Clk_t] -to [get_pins BA/B1_OUT1]
SDC_TOP04

Message: Block level multicycle path constraint is


inconsistent with top level multicycle path constraint

This rule checks that the top-level multicycle path


constraint is consistent with the block-level
Description multicycle path constraint. A path that is defined as
multicycle at the block-level should also be a
multicycle path at the top level.
Policy Constraints
Ruleset TVB
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows a test case that does not violate this rule.
// SDC File

//If a clock is specified in the multicycle path at the block level,


then the top-level should also have a similar constraint and the top-
level clock should drive the block-level clock.

//At the block level consider the following:

create_clock -name "BCLK1" -period 6 -waveform {0 3} BCLK1


set_multicycle_path -from [get_clocks BCLK1] -to [get_ports B1_OUT1]

//The top level should have the following


create_clock -name  "Clk_t" -period 5.0 [get_ports Clk_t]
set_multicycle_path -from [get_clocks Clk_t] -to [get_pins BA/B1_OUT1]

SDC_TOP20

Message: Block level max/min delay constraint is


inconsistent with top level max/min delay constraint

This rule checks that a set_max/min_delay constraint


at the block level is consistent with the corresponding
top-level constraint. This rule reports a violation if
Description there is a combinational path on top that goes
through block(s) and these block(s) have
set_max/min_delay and there is no corresponding
set_max/min_delay for the top.
Policy Constraints
Ruleset TVB
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows a test case that does not violate this rule.
// SDC File

// Top-level constraint

set_max_delay 2.5 -from { IN1 }

// Block-level constraint:
// Assume the top-level port goes through instance BA of block and the
// block has the following constraint

set_max_delay 1.0 -from { B1_IN1 }

DFT Ruleset
The following rules are from the DFT ruleset:

SDC_DFT01

Message: Undefined test_scan_enable port

set_scan_configuration command is specified, then


depending on "-existing_scan" option value of this
Description command, test_scan_enable pin should be specified
using set_scan_signal or set_signal_type command
respectively.
Policy Constraints
Ruleset DFT
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This example causes Leda to flag a warning because
undefined test_scan_enable ports are present.
// SDC File
create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 10 [get_ports clk2]

set_scan_configuration -existing_scan true


#set_signal_type "test_scan_enable" in1
# SDC_DFT01 violation
set_signal_type "test_scan_in" in2
set_signal_type "test_scan_out" in1

// Design File
module mSDC_DFT01 ();
endmodule

SDC_DFT02

Message: Undefined test_scan_in port

set_scan_configuration command is specified, then


depending on "-existing_scan" option value of this
Description command, test_scan_in pin should be specified using
set_scan_signal or set_signal_type command
respectively.
Policy Constraints
Ruleset DFT
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This example causes Leda to flag a warning.
// SDC File
create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 10 [get_ports clk2]
# SDC_DFT02 violation
set_scan_configuration -existing_scan true
set_signal_type "test_scan_enable" in1
#set_signal_type "test_scan_in" in2
set_signal_type "test_scan_out" in1

// Design File
module mSDC_DFT02(clk1, clk2, in1, in2, out1, out2, out3, out4, out5,
out6, out7);
input clk1;
input clk2;
input in1, in2;
output out1, out2,out3, out4, out5, out6 , out7;
reg out1, out2,out3, out4, out5, out6, out7;
wire w2;
assign w2 = clk2;
always @(posedge clk1)
begin
out1 <= in1;
end
always @(negedge clk2)
begin
out2 <= in2;
end
always
out3 <= clk1;
always
out4 <= ~clk2;
BUF U1(clk1,out5);
always@(w2)
out6 <= w2;
always@(w2)
out7 <= clk2;
endmodule

module BUF(in1, out1);


input in1;
output out1;
wire in1;
reg out1;
wire w1;
assign w1 = in1;
always @(w1)
out1 <= w1;
endmodule

SDC_DFT03

Message: Undefined test_scan_out port

set_scan_configuration command is specified, then


depending on "-existing_scan" option value of this
Description command, test_scan_out pin should be specified
using set_scan_signal or set_signal_type command
respectively.
Policy Constraints
Ruleset DFT
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This example causes Leda to flag a warning.
// SDC File
create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 10 [get_ports clk2]
# SDC_DFT03 violation
set_scan_configuration -existing_scan true
set_signal_type "test_scan_enable" in1
set_signal_type "test_scan_in" in2
#set_signal_type "test_scan_out" in1

// Design File
module mSDC_DFT03(clk1, clk2, in1, in2, out1, out2, out3, out4, out5,
out6, out7);
input clk1;
input clk2;
input in1, in2;
output out1, out2,out3, out4, out5, out6 , out7;
reg out1, out2,out3, out4, out5, out6, out7;
wire w2;
assign w2 = clk2;
always @(posedge clk1)
begin
out1 <= in1;
end
always @(negedge clk2)
begin
out2 <= in2;
end
always
out3 <= clk1;
always
out4 <= ~clk2;
BUF U1(clk1,out5);
always@(w2)
out6 <= w2;
always@(w2)
out7 <= clk2;
endmodule

module BUF(in1, out1);


input in1;
output out1;
wire in1;
reg out1;
wire w1;
assign w1 = in1;
always @(w1)
out1 <= w1;
endmodule

SDC_DFT04
Message: Undefined scan configuration

A set_scan_configuration command should be


Description present in test mode SDC files, as it tells the tool
nature of test scan chain present or to be created.
Policy Constraints
Ruleset DFT
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This example causes Leda to flag a warning.
// SDC File
create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 10 [get_ports clk2]
# SDC_DFT04 violation
#set_scan_configuration -existing_scan true
set_signal_type "test_scan_enable" in1
set_signal_type "test_scan_in" in2
set_signal_type "test_scan_out" in1

// Design File
module mSDC_DFT04(clk1, clk2, in1, in2, out1, out2, out3, out4, out5,
out6, out7);
input clk1;
input clk2;
input in1, in2;
output out1, out2,out3, out4, out5, out6 , out7;
reg out1, out2,out3, out4, out5, out6, out7;
wire w2;
assign w2 = clk2;
always @(posedge clk1)
begin
out1 <= in1;
end
always @(negedge clk2)
begin
out2 <= in2;
end
always
out3 <= clk1;
always
out4 <= ~clk2;
BUF U1(clk1,out5);
always@(w2)
out6 <= w2;
always@(w2)
out7 <= clk2;
endmodule

module BUF(in1, out1);


input in1;
output out1;
wire in1;
reg out1;
wire w1;
assign w1 = in1;
always @(w1)
out1 <= w1;
endmodule

DRC Ruleset
The following rules are from the DRC ruleset:

SDC_IDR01

Message: Undefined set_max_capacitance on input or


inout ports

Description
This rule will flag violation if set_max_capacitance is
not constraint on an input or inout port.
Policy Constraints
Ruleset DRC
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This example causes Leda to flag an error.
// SDC File
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
create_clock -name CLK1 -period 15.0 -waveform {0.0 2.5} [get_ports
CLKIN1]

# SDC_IDR01 violation
set_max_capacitance 2.5 D0
set_input_delay 2.5 D1 -clock [get_clocks CLK]

// Design File
module mSDC_IDR01 (D0, D1, D2, CLKIN, CLKIN1, Q, EN, SR2);
input CLKIN, CLKIN1, EN;
input D0, D1, D2;
output Q, SR2;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D0;
wire tmp;
assign tmp = Q0 & EN;
always @(posedge tmp)
Q1 <= D1;
always @(posedge Q0)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN1)
Q <= SR2;
endmodule

SDC_ODR01

Message: Undefined set_max_capacitance on output or


inout ports

Description
This rule will flag violation if set_max_capacitance is
not constraint on an output or inout port.
Policy Constraints
Ruleset DRC
Language VHDL/Verilog
Type SDC
Severity
Warning
Example

This example causes Leda to flag a warning.


// SDC File
create_clock -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
create_generated_clock -name Q0 -source CLK0 -divide_by 2 Q0
create_generated_clock -name GCLK2 -source GCLK1 -divide_by 2 Q1
set_clock_latency -source 2.5 [get_clocks CLK0]
set_clock_latency -source 4.0 [get_clocks GCLK1]
set_clock_latency -source 2.1 [get_clocks GCLK2]
# SDC_ODR01 violation
set_max_capacitance 2.5 Q

// Design File
module mSDC_ODR01 (D, CLKIN, CLKIN1, Q, EN, SR2);
input CLKIN, CLKIN1, EN;
input [0:2]D;
output Q, SR2;
reg Q;
reg Q0, Q1, SR0, SR1, SR2;
always @(posedge CLKIN)
Q0 <= D[0];
wire tmp;
assign tmp = Q0 & EN;
always @(posedge tmp)
Q1 <= D[1];
always @(posedge Q0)
SR0 <= D[2];
always @(posedge Q1)
SR1 <= SR0;
always @(posedge Q1)
SR2 <= SR1;
always @(posedge CLKIN1)
Q <= SR2;
endmodule

Exceptions Ruleset

The following rules are from the Exceptions ruleset:

SDC_CMB01

Message: Unconstrained input/output/max/min delay for


combinational path -from %s -to %s

This rule will flag violation if a combinational path is


Description not constrained using set_max_delay and
set_min_delay.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error because


input/output delay values is not specified for a combinational
path.
// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} CLKIN
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} [get_ports Q0]

# SDC_CMB01 violation
set_input_delay 2.0 [get_ports sel]
set_input_delay 2.0 [get_ports D2]
set_output_delay 2.0 [get_ports Q]
set_max_delay 5.0 -from [get_ports sel] -to [get_ports Q]
set_max_delay 5.0 -from [get_ports D2] -to [get_ports Q]

// Design File
module mSDC_CMB01 (D4, D0, D1, D2, sel, CLKIN, Q);
input D0, D1, D2, CLKIN, sel, D4;
output Q;
wire Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
assign Q = muxwirebar;
endmodule

SDC_CMB02

Message: Inconsistent set_max_delay/set_min_delay


delay value for combinational path: min > max

Description
This rule will flag violation if set_min_delay >
set_max_delay value for a combinational path.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error because


set_min_delay value is greater than set_max_delay for a
combinational path.
// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} CLKIN
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} Q0

# SDC_CMB02 violation
set_min_delay 5.0 -from [get_ports D0] -to [get_ports Q]
set_max_delay 4.0 -from [get_ports D0] -to [get_ports Q]
set_min_delay 5.0 -from [get_ports D1] -to [get_ports Q]
set_max_delay 6.0 -from [get_ports D1] -to [get_ports Q]
set_min_delay 4.0 -from [get_ports D1] -through {tmp} -to [get_ports Q]
set_max_delay 5.0 -from [get_ports D1] -through [get_ports tmp] -to
[get_ports Q]
set_max_delay 5.0 -to [get_ports tmp]
set_min_delay 7.0 -through [get_ports Q0]
set_min_delay 8.0 -from {D1 CLKIN} -to {tmp Q}
set_max_delay 6.0 -from {CLKIN D1} -to {Q tmp}
set_max_delay 10.0 -from [get_clocks CLK1] -to [get_ports Q]
set_min_delay 11.0 -from [get_clocks CLK1] -to {Q}

// Design File
module mSDC_CMB02 (D4, D0, D1, D2, sel, CLKIN, Q);
input D0, D1, D2, CLKIN, sel, D4;
output Q;
wire Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
assign Q = muxwirebar;
endmodule

SDC_CMB03

Message: Inconsistent input/output delay value vs. clock


period for combinational path

For a combinational path, set_input_delay and


set_output_delay values are set with respect to virtual
Description
clock. This rule will flag violation if input delay +
output delay > virtual_clock_period. It also flag
violation if -min > -max in case of both input delay and
output delay.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error.


// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN]
create_generated_clock -name CLK2 -multiply_by 2 -source CLKIN Q0
create_generated_clock -name CLK3 -divide_by 2 -source CLKIN [get_ports
CLKIN1]
create_generated_clock -name CLK4 -divide_by 2 -source CLKIN1 [get_ports
CLKIN2]

set_input_delay 1.0 -clock [get_clocks CLK1] [get_ports sel]


set_output_delay 4.0 -clock [get_clocks CLK1] [get_ports Q]
set_input_delay 2.5 -clock [get_clocks CLK1] [get_ports D2]
# SDC_CMB03 violation
set_input_delay 2.5 -clock [get_clocks CLK2] [get_ports sel]
set_output_delay 8.0 -clock [get_clocks CLK2] [get_ports Q]
set_input_delay 1.5 -clock [get_clocks CLK2] [get_ports D2]

set_input_delay 1.4 -clock [get_clocks CLK3] [get_ports sel]


set_output_delay 1.0 -clock [get_clocks CLK3] [get_ports Q]
set_input_delay 1.6 -clock [get_clocks CLK3] [get_ports D2]

set_input_delay 0.26 -clock [get_clocks CLK4] [get_ports sel]


set_output_delay 1.0 -clock [get_clocks CLK4] [get_ports Q]
set_input_delay 0.24 -clock [get_clocks CLK4] [get_ports D2]

// Design File
module mSDC_CMB03 (D4, D0, D1, D2, sel, CLKIN, CLKIN1, CLKIN2, Q);
input D0, D1, D2, CLKIN, CLKIN1, CLKIN2, sel, D4;
output Q;
wire Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
assign Q = muxwirebar;
endmodule

SDC_CMB04

Message: Incomplete set_max_delay/set_min_delay


options for combinational path: -rise must be used with -
fall

This rule will flag violation if -fall option is not used


Description along with -rise option while specifying input delay
and output delay for a combinational path.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC

Severity
Error
Example

This example causes Leda to flag an error because -fall is not


used with -rise option for a combinational path.
// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} CLKIN
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} Q0
set_min_delay 5.0 -rise -from [get_ports D0] -to [get_ports Q]
set_min_delay 5.0 -fall -from [get_ports D0] -to [get_ports Q]
set_min_delay 5.0 -fall -from [get_ports D1] -to [get_ports Q]
set_min_delay 5.0 -rise -from [get_ports D1] -to [get_ports Q]
set_min_delay 5.0 -rise -from [get_ports D1] -through {tmp} -to
[get_ports Q]
set_min_delay 5.0 -fall -from [get_ports D1] -through [get_ports tmp] -
to [get_ports Q]
set_min_delay 5.0 -rise -from [get_ports CLKIN] -to [get_ports Q]
set_min_delay 5.0 -fall -from [get_ports CLKIN] -through [get_ports tmp]
-to [get_ports Q]
set_min_delay 5.0 -rise -to [get_ports tmp]
set_min_delay 5.0 -fall -through [get_ports Q0]
set_min_delay 5.0 -rise -from {D1 CLKIN} -to {tmp Q}
set_min_delay 5.0 -fall -from {CLKIN D1} -to {Q tmp}
set_max_delay 5.0 -rise -from [get_ports D0] -to [get_ports Q]
set_max_delay 5.0 -fall -from [get_ports D0] -to [get_ports Q]
set_max_delay 5.0 -fall -from [get_ports D1] -to [get_ports Q]
set_max_delay 5.0 -rise -from [get_ports D1] -to [get_ports Q]
set_max_delay 5.0 -rise -from [get_ports D1] -through [get_ports tmp] -
to [get_ports Q]
set_max_delay 5.0 -fall -from [get_ports D1] -through [get_ports tmp] -
to [get_ports Q]
set_max_delay 5.0 -rise -from [get_ports CLKIN] -to [get_ports Q]
set_max_delay 5.0 -fall -from [get_ports CLKIN] -through [get_ports tmp]
-to [get_ports Q]
set_max_delay 5.0 -rise -to [get_ports tmp]
set_max_delay 5.0 -fall -through [get_ports Q0]
set_max_delay 5.0 -rise -from {D1 CLKIN} -to {tmp Q}
set_max_delay 5.0 -fall -from {CLKIN D1} -to {Q tmp}
set_max_delay 5.0 -rise -from [get_clocks CLK1]
set_min_delay 5.0 -rise -from [get_clocks CLK2]
# SDC_CMB04 violation
set_max_delay 6.0 -fall -from [get_clocks CLK1]

// Design File
module mSDC_CMB04 (D4, D0, D1, D2, sel, CLKIN, Q);
input D0, D1, D2, CLKIN, sel, D4;
output Q;
wire Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
assign Q = muxwirebar;
endmodule

SDC_CMB05
Message: Combinational constraints present on
elements belonging to internal sequential path

This rule will flag violation if set_min_delay and


Description set_max_delay constraint command is used for
sequential paths.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error because


set_min_delay and set_max_delay constraint command is
used for sequential path.
// SDC File
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} CLKIN

set_max_delay 5.0 -from [get_ports sel] -to [get_ports Q]


set_max_delay 5.0 -from [get_ports D2] -to [get_ports Q]
set_min_delay 4.0 -from {Q0 D4} -to [get_ports Q]
set_min_delay 4.0 -from {tmp} -to {muxwirebar}
set_min_delay 4.0 -from {D0 sel D2} -to {muxwirebar muxwire}
set_min_delay 4.0 -from {tmp sel D2} -to {muxwirebar muxwire}
# SDC_CMB05 violation
set_max_delay 5.0 -from [get_clocks CLK] -to [get_ports Q]

// Design File
module mSDC_CMB05 (D4, D0, D1, D2, sel, CLKIN, Q);
input D0, D1, D2, CLKIN, sel, D4;
output Q;
reg Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
always @(posedge Q0)
Q <= muxwirebar;
endmodule
SDC_DIS03

Message: Disable timing reference cells/points don't


exist

Description
Design objects referred in set_disable_timing
command does not exist in design.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error because the object


referred in set_disable_timing command is not present in the
design.
// SDC File
# SDC_DSC03 violation
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} CLKIN
set_disable_timing {A1}
#none of the points exist
set_disable_timing [get_ports Q]

// Design File
module mSDC_DIS03 (D4, D0, D1, D2, sel, CLKIN, Q);
input D0, D1, D2, CLKIN, sel, D4;
output Q;
reg Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
always @(posedge Q0)
Q <= muxwirebar;
endmodule

SDC_DIS04
Message: The timing arc(s) disabled belongs to clock
path %s

set_disable_timing arc is part of clock net, so it will


Description
disturb timing calculations in prelayout/postlayout
timing analysis. It does not have any effect as clock
is treated as ideal in RTL level.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_FLP01

Message: False path reference points do not exist %s or


are not connected. From %s to %s [through %s]

In all modes, false paths specified with


set_false_path commands must refer to real design
Description signals, and should be specified with from and to
points so that the timing analysis and synthesis tools
have all the needed information.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_FLP02
Message: False path is not applicable to hierarchical
ports %s

Description None.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error.


// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} CLKIN
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} {INST1/INST/D}

# SDC_FLP02 violation
set_false_path -from {D0} -to {Q} -through {tmp}
set_false_path -from [get_ports D0] -to [get_ports D2] -through {tmp}
set_false_path -from {D4} -to {Q} -through {muxwire}
set_false_path -from {D0 D4} -to {Q} -through {tmp}
set_false_path -from {D0 D4} -to {Q} -through {andwire}
set_false_path -from {D0 D4} -to {Q}

set_false_path -from {INST/D} -to {Q}


set_false_path -from {INST1/INST/D} -to {Q}
set_false_path -from [get_clocks CLK2] -to {Q}
set_false_path -from {INST1/Q1} -to {Q}

// Design File
module mymodule (D, Q, CLK);
input D, CLK;
output Q;
reg Q;
initial
begin
Q <= D;
end
endmodule

module mymodule1 (D1, Q1, CLK1);


input D1, CLK1;
output Q1;
reg Q1;
initial
begin
Q1 <= D1;
end
mymodule INST (.D(D1), .Q(Q1), .CLK(CLK1));
endmodule

module mSDC_FLP02 (D4, D0, D1, D2, sel, CLKIN, Q);


input D0, D1, D2, CLKIN, sel, D4;
output Q;
reg Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
always @(posedge Q0)
Q <= muxwirebar;
mymodule INST (.D(D0), .Q(Q), .CLK(CLKIN));
mymodule1 INST1 (.D1(D0), .Q1(Q), .CLK1(CLKIN));
endmodule

SDC_FLP06

Message: Inter clock domain false path not applied %s

This rule is a parameterized rule where user needs to


explicitly specify which clocks are asynchronous
using the parameter ASYNC_CLOCKS. The default
value of the rule parameter is {CLK,
CLK1}.rule_set_parameter -rule SDC_FLP06 -
parameter ASYNC_CLOCKS -value {CLK, CLK1}You
can overwrite this rule parameter to specify the
asynchronous clock set. When there are several
asynchronous clocks in the design for example, CLK1,
CLK2, CLK3, CLK4 then the parameter value can be
specified as follows:rule_set_parameter -rule
Description
SDC_FLP06 -parameter ASYNC_CLOCKS -value
{CLK1, CLK2, CLK3, CLK4}When there are several
synchronous and asynchronous clocks for example, a
set of clocks CLK1, CLK2, CLK3, CLK4 CLK1 <-> CLK2
- synchronousCLK1 <-> CLK3 | CLK4 - asynchronous
CLK2 <-> CLK3 | CLK4 - asynchronousCLK3 <-> CLK4 -
asynchronousthen the parameter value can be
specified as shown below:rule_set_parameter -rule
SDC_FLP06 -parameter ASYNC_CLOCKS -value
{{CLK1, CLK3, CLK4}, {CLK2, CLK3, CLK4}}This rule
expects a false path to be set between all
asynchronous clocks irrespective of data crossing
exists or not.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error.


// SDC File
create_clock -name CLK -period 5.0 -waveform {0.0 2.5} [get_ports CLKIN]
create_generated_clock -name CLK1 -divide_by 2 -source CLKIN [get_ports
Q]
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN1]
create_generated_clock -name CLK3 -divide_by 2 -source CLKIN1 [get_ports
sel]

# SDC_FLP06 violation
set_false_path -from [get_clocks CLK] -to [get_clocks CLK1]
set_false_path -from {CLK2} -to {CLK3}

// Design File
module mSDC_FLP06 (D4, D0, D1, D2, sel, CLKIN, CLKIN1, Q);
input D0, D1, D2, CLKIN, CLKIN1, sel, D4;
output Q;
reg Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0, Dim;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
always @(posedge CLKIN1)
Dim <= muxwirebar;
always @(posedge Q0)
Q <= Dim;
endmodule

SDC_FLP21

Message: False path has been set between registers


belonging to same clock domain

Generally false path is set between registers


Description
belonging to different domains (asynchronous
clocks). Hence this check.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error.


// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN]
create_generated_clock -name CLK2 -divide_by 2 -source CLKIN {Q0}
create_generated_clock -name CLK3 -divide_by 3 -source CLKIN [get_ports
CLKIN1]

# SDC_FLP21 violation
set_false_path -from [get_clocks CLK1] -to tmp
set_false_path -from [get_ports CLKIN] -to tmp
set_false_path -from Q0 -to [get_ports Q]
set_false_path -from tmp -to muxwirebar
set_false_path -from Q0 -to tmp
set_false_path -from tmp1 -to Q1

// Design File
module mSDC_FLP21 (D4, D0, D1, D2, sel, CLKIN, CLKIN1, Q);
input D0, D1, D2, CLKIN, CLKIN1, sel, D4;
output Q;
reg Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0, Dim;
reg tmp1, Q1;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
always @(posedge CLKIN1)
Dim <= muxwirebar;
always @(posedge Q0)
Q <= Dim;
always @(posedge tmp1)
Q1 <= D4;
endmodule

SDC_FLP22

Message: False path set between derived clocks


Derived clocks are clocks which are related to each
Description
other. Generally false path is set between registers
belonging to different domains (asynchronous
clocks). Hence this check.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

Example

This example causes Leda to flag an error.


// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN]
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} {Q0}
create_generated_clock -name CLK3 -divide_by 2 -source CLKIN [get_ports
CLKIN1]
create_generated_clock -name CLK4 -divide_by 4 -source CLKIN [get_ports
D1]
create_clock -name CLK5 -period 5.0 -waveform {0.0 2.5}

# SDC_FLP22 violation
set_false_path -from [get_ports CLKIN] -to [get_ports CLKIN1]
set_false_path -from [get_ports CLKIN] -to {Q0}
set_false_path -from [get_clocks CLK3] -to [get_clocks CLK4]
set_false_path -from [get_clocks CLK5] -to [get_clocks CLK5]

// Design File
module mSDC_FLP22 (D4, D0, D1, D2, sel, CLKIN, CLKIN1, Q);
input D0, D1, D2, CLKIN, CLKIN1, sel, D4;
output Q;
reg Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0, Dim;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
always @(posedge CLKIN1)
Dim <= muxwirebar;
always @(posedge Q0)
Q <= Dim;
endmodule
SDC_HFN01

Message: Clock is not set as dont_touch_network %s

At RTL and prelayout level, clock net is not


synthesized, so it has to be as
Description set_dont_touch_network. Otherwise, synthesizer will
treat it as high fanout net and add buffers to the clock
network.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error.


// SDC File
create_clock -name CLK -period 5 [get_ports CLKIN]
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} [get_ports
CLKIN1]
create_clock -period 5.0 -waveform {0.0 2.5} [get_ports Q0]
create_clock -period 5.0 -waveform {0.0 2.5} [get_ports Q1]
create_clock -period 5.0 -waveform {0.0 2.5} [list [get_ports SR0]
[get_ports SR1]]
create_generated_clock -name CLK3 -divide_by 2 -source CLKIN [get_ports
SR2]
create_generated_clock -name CLK4 -divide_by 2 -source CLKIN [get_ports
SR3]

# SDC_HFN01 violation
set_dont_touch_network [get_clocks CLK]
set_dont_touch_network [get_ports CLKIN1]
set_dont_touch_network [get_ports Q1]
set_dont_touch_network [list [get_ports SR0] [get_ports SR1]]
set_dont_touch_network [get_clocks CLK3]

// Design File
module mSDC_HFN01 (D0, D1, D2, CLKIN, CLKIN1, Q);
input D0, D1, D2, CLKIN, CLKIN1;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2, SR3, SR4, SR5;
always @(posedge CLKIN)
Q0 <= D0;
always @(posedge Q0)
Q1 <= D1;
always @(posedge Q1)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge SR0)
SR2 <= SR1;
always @(posedge SR1)
SR3 <= SR2;
always @(posedge SR2)
SR4 <= SR3;
always @(posedge SR3)
SR5 <= SR4;
always @(posedge CLKIN1)
Q <= SR5;
endmodule

SDC_HFN02

Message: Non-clock object has been constrained with


don't_touch or don't_ touch_network

Description
Only clock object should be constrained with
set_dont_touch or set_dont_touch_network attribute.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Note

SDC_HFN06

Message: Inconsistent ideal transition values : min > max

Description
To verify that set_ideal_transition value with "-min"
option does not exceed the value with "-max" option.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Error
Severity

SDC_HFN07

Message: Incomplete set_ideal_transition options

If the command has "-min" option then there should


Description be a counter part command with "-max" option.
Similar for options "-rise" and "-fall.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_HFN08

Message: Incomplete ideal latency values min > max

Description
To verify that set_ideal_transition value with "-min"
option does not exceed the value with "-max" option.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_HFN09
Message: Incomplete set_ideal_latency options

If the command has "-min" option then there should


Description be a counter part command with "-max" option.
Similar for options "-rise" and "-fall".
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_HFN10

Message: Invalid constraint in post-layout

Constraints like -set_dont_touch,


Description
set_dont_touch_network, set_ideal_net,
set_ideal_network, set_ideal_latency, and
set_ideal_transition are not valid in post-layout.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_HFN11

Message: Ideal net latency not specified for %s


At RTL and prelayout level, clock is treated as ideal
net, hence you should use set_ideal_latency
Description command to set latency. It sets ideal latency on top-
level ports and leaf-cell pins of the ideal network,
ideal nets or auto disable drc nets. Specifies latency
on ideal network.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because ideal net
latency is not specified for CLK1.
// SDC File
create_clock -name CLK -period 5 [get_ports CLKIN]
create_clock -name CLK1 -period 5 [get_ports CLKIN1]

set_ideal_network [get_ports CLKIN]


set_ideal_latency 2.0 [get_ports CLKIN]
set_ideal_network [get_ports CLKIN1]
# SDC_HFN11 violation

// Design File
module mSDC_HFN11 (D0, D1, D2, CLKIN, CLKIN1, Q);
input D0, D1, D2, CLKIN, CLKIN1;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2, SR3, SR4, SR5;
always @(posedge CLKIN)
Q0 <= D0;
/*always @(posedge Q0)
Q1 <= D1;
always @(posedge Q1)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge SR0)
SR2 <= SR1;
always @(posedge SR1)
SR3 <= SR2;
always @(posedge SR2)
SR4 <= SR3;
always @(posedge SR3)
SR5 <= SR4;*/
always @(posedge CLKIN1)
Q <= Q0;
endmodule
SDC_HFN12

Message: Ideal net transition not specified for %s

At RTL and prelayout level, clock is treated as ideal


net, hence you should use set_ideal_transition
Description
command to set transition. It sets ideal transition on
top-level ports and leaf-cell pins of the ideal network,
ideal nets or auto disable drc nets. Specifies
transition on ideal network.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because ideal net
transition is not specified for CLK1.
// SDC File
create_clock -name CLK -period 5 [get_ports CLKIN]
create_clock -name CLK1 -period 5 [get_ports CLKIN1]

set_ideal_network [get_ports CLKIN]


set_ideal_transition 2.0 [get_ports CLKIN]
set_ideal_net [get_ports D0]
set_ideal_network [get_ports CLKIN1]
# SDC_HFN12 violation--ideal net transition not specified for CLK1
set_ideal_net [get_ports D1]
set_ideal_transition 2.0 [get_ports D1]

// Design File
module mSDC_HFN12 (D0, D1, D2, CLKIN, CLKIN1, Q);
input D0, D1, D2, CLKIN, CLKIN1;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2, SR3, SR4, SR5;
always @(posedge CLKIN)
Q0 <= D0;
/*always @(posedge Q0)
Q1 <= D1;
always @(posedge Q1)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge SR0)
SR2 <= SR1;
always @(posedge SR1)
SR3 <= SR2;
always @(posedge SR2)
SR4 <= SR3;
always @(posedge SR3)
SR5 <= SR4;*/
always @(posedge CLKIN1)
Q <= Q0;
endmodule

SDC_HFN20

Message: Fanout specified exceeds user defined


requirements %s

This rule is working through a parameter called


MAX_FANOUT. In case the parameter is not defined,
Description the rule shall do nothing. In case it is defined, then the
rule shall verify that the specified max_fanout is less
than or equal to the use specified limit.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error

Example
This example causes Leda to flag an error.
// SDC File
create_clock -name CLK -period 5 [get_ports CLKIN]
# SDC_HFN20 violation
set_max_fanout 1.0 [get_ports D0]
set_max_fanout 99999.0 [get_ports CLKIN]
set_max_fanout 100001.0 [get_ports D1]

// Design File
module mSDC_HFN20 (D0, D1, D2, CLKIN, CLKIN1, Q);
input D0, D1, D2, CLKIN, CLKIN1;
output Q;
reg Q;
reg Q0, Q1, SR0, SR1, SR2, SR3, SR4, SR5;
always @(posedge CLKIN)
Q0 <= D0;
/*always @(posedge Q0)
Q1 <= D1;
always @(posedge Q1)
SR0 <= D2;
always @(posedge Q1)
SR1 <= SR0;
always @(posedge SR0)
SR2 <= SR1;
always @(posedge SR1)
SR3 <= SR2;
always @(posedge SR2)
SR4 <= SR3;
always @(posedge SR3)
SR5 <= SR4;*/
always @(posedge CLKIN1)
Q <= Q0;
endmodule

SDC_MCP01

Message: MCP reference points do not exist or are not


connected

Description None.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_MCP02

Message: Multicycle path is not applicable to hierarchical


ports %s

Setting constraints on hierarchical ports is wrong.


Because hierarchical ports may not exist once design
Description is optimized (or hierarchy is removed to create single
flat design) or these hierarchical ports get renamed
etc.
Policy Constraints
Ruleset Exceptions
Language
VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because multi cycle
path is applied to hierarchical ports.
// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} CLKIN
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} {INST1/INST/D}

set_multicycle_path 3 -from {D0} -to {Q} -through {tmp}


set_multicycle_path 3 -from [get_ports D0] -to [get_ports D2] -through
{tmp}
set_multicycle_path 3 -from {D4} -to {Q} -through {muxwire}
set_multicycle_path 3 -from {D0 D4} -to {Q} -through {tmp}
set_multicycle_path 3 -from {D0 D4} -to {Q} -through {andwire}
set_multicycle_path 3 -from {D0 D4} -to {Q}

# SDC_MCP02 violation
set_multicycle_path 3 -from {INST/D} -to {Q}
set_multicycle_path 3 -from {INST1/INST/D} -to {Q}
set_multicycle_path 3 -from [get_clocks CLK2] -to {Q}
set_multicycle_path 3 -from {INST1/Q1} -to {Q}

// Design File
module mymodule (D, Q, CLK);
input D, CLK;
output Q;
reg Q;
initial
begin
Q <= D;
end
endmodule

module mymodule1 (D1, Q1, CLK1);


input D1, CLK1;
output Q1;
reg Q1;
initial
begin
Q1 <= D1;
end
mymodule INST (.D(D1), .Q(Q1), .CLK(CLK1));
endmodule

module mSDC_MCP02 (D4, D0, D1, D2, sel, CLKIN, Q);


input D0, D1, D2, CLKIN, sel, D4;
output Q;
reg Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
always @(posedge Q0)
Q <= muxwirebar;
mymodule INST (.D(D0), .Q(Q), .CLK(CLKIN));
mymodule1 INST1 (.D1(D0), .Q1(Q), .CLK1(CLKIN));
endmodule

SDC_MCP05

Message: Incomplete set_multicycle_path options: -


setup must be used with -hold

If setup value is set for a multi cycle path using


Description "set_multicycle_path" -setup, then hold value should
also be specified using "set_multicycle_path" -hold.
Policy Constraints
Ruleset Exceptions
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error because -setup


option was not used with -hold for CLK2.
// SDC File
create_clock -name CLK1 -period 5.0 -waveform {0.0 2.5} CLKIN
create_clock -name CLK2 -period 5.0 -waveform {0.0 2.5} Q0
set_multicycle_path 5 -setup -from [get_ports D0] -to [get_ports Q]
set_multicycle_path 5 -hold -from [get_ports D0] -to [get_ports Q]
set_multicycle_path 5 -hold -from [get_ports D1] -to [get_ports Q]
set_multicycle_path 5 -setup -from [get_ports D1] -to [get_ports Q]
set_multicycle_path 5 -setup -from [get_ports D1] -through tmp -to
[get_ports Q]
set_multicycle_path 5 -hold -from [get_ports D1] -through [get_ports
tmp] -to [get_ports Q]
set_multicycle_path 5 -setup -from [get_ports CLKIN] -to [get_ports Q]
set_multicycle_path 5 -hold -from [get_ports CLKIN] -through [get_ports
tmp] -to [get_ports Q]
set_multicycle_path 5 -setup -to [get_ports tmp]
set_multicycle_path 5 -hold -through [get_ports Q0]
set_multicycle_path 5 -setup -from {D1 CLKIN} -to {tmp Q}
set_multicycle_path 5 -hold -from {CLKIN D1} -to {Q tmp}
set_multicycle_path 5 -setup -from [get_clocks CLK1] -to [get_ports Q]
set_multicycle_path 5 -hold -from [get_clocks CLK1] -to [get_ports Q]
# SDC_MCP05 violation
set_multicycle_path 5 -hold -from [get_clocks CLK2] -to [get_ports Q]

// Design File
module mSDC_MCP05 (D4, D0, D1, D2, sel, CLKIN, Q);
input D0, D1, D2, CLKIN, sel, D4;
output Q;
wire Q;
wire andwire, muxwire, muxwirebar;
reg tmp, Q0;
assign andwire = ~D0 & D1;
always @(posedge CLKIN)
Q0 <= andwire;
always @(posedge Q0)
tmp <= D4;
assign muxwire = sel? tmp : D2;
assign muxwirebar = ~muxwire;
assign Q = muxwirebar;
endmodule

Inputs Ruleset

The following rules are from the Inputs ruleset:

SDC_IDL01

Message: Unconstrained input %s

All input ports must be specified with input delay


values using set_input_delay commands. Without this
Description
information, you can get incorrect hardware
optimizations. When Leda finds a violation of this
rule, the output points to the signal inferred as a
clock.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example shows an SDC file without a set_input_delay


command to set the delay value for the clock.
// SDC File
create_clock -name CLK -period 10 [get_ports clk]
# SDC_IDL01 violation--unconstrained input

// Design File
module IDL01(in1, clk, out);
input in1, clk;
output out;
reg out, clk1;
always @(posedge clk)
clk1 <= in1;
always @(posedge clk1)
out <= in1;
endmodule

SDC_IDL02

Message: Input delay specified with respect to multiple


clocks

This rule will flag violation if more than one input


Description delay command is used on an input with different
clocks and without add delay options.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error because more than


one input delay command is used on an input with different
clocks.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN] -divide_by 2
Q1
create_clock -name VCLK -period 20

set_input_delay 2.5 [get_ports D1] -clock [get_clocks CLK]


set_input_delay 2.5 [get_ports D1] -clock [get_clocks GCLK]
set_input_delay 2.5 [get_ports D1] -clock [get_clocks VCLK]

# SDC_IDL02 violation
set_input_delay 2.5 [get_ports D2] -clock [get_clocks CLK]
set_input_delay 2.5 [get_ports D2] -clock [get_clocks GCLK] -add_delay
set_input_delay 2.5 [get_ports D2] -clock [get_clocks VCLK]

set_input_delay 2.5 [get_ports D3] -clock [get_clocks CLK]


set_input_delay 1.5 [get_ports D3] -clock [get_clocks GCLK] -add_delay -
min
set_input_delay 3.5 [get_ports D3] -clock [get_clocks GCLK] -max
set_input_delay 2.5 [get_ports D3] -clock [get_clocks VCLK] -add_delay

// Design File
module mSDC_IDL02 (D1, D2, D3, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_IDL03

Message: Sub-elements of same bus have different


delays

Description
This rule flags if all the elements of a bus do not have
same min-max delays.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_IDL04

Message: Incomplete set_input_delay options

When options such as -rise, -fall, -min, and -max are


used with set_input_delay commands to constraint
Description
an object, the counterpart options must be also
present. Otherwise, Leda flags an error.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example shows an SDC file with a set_input_delay -max


command that does not specify a corresponding -min option.
Leda flags these as errors. The output points to the
set_input_delay -max command.

// SDC File
create_clock -name CLK -period 10 [get_ports clk]
set_input_delay 1.2 -max -clock [get_clocks CLK] [all_inputs]

// Design File
module IDL04(in1, clk, out);
input in1, clk;
output out;
reg out, clk1;
always @(posedge clk)
clk1 <= in1;
always @(posedge clk1)
out <= in1;
endmodule

SDC_IDL05

Message: Inconsistent set_input_delay value versus


clock period: period %s, max %s, min %s

Setting inconsistent delay values compared to the


clock period may cause the synthesis tool to run for a
Description
long time and result in poor quality of results.
Inconsistent settings include input_delay_value >
virtual_clock_period and min > max with
set_input_delay commands.
Policy
Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_IDL06

Message: Input constrained versus wrong (real) clock:


Port: %s1, clock (wrong): %s2

Setting input delay values with respect to a clock other than


the clock that drives the input signal in question can result in
incorrect timing analysis and synthesis results. Leda flags
these as errors. The Path Viewer output shows the path from
the primary input to the flip-flop clocked by the signal that is
not in the constraint command.The secondary messages of
Description
this rule could be one of the following:
Right clock is %s3
Right clock source is (this does not have a
corresponding SDC clock definition) %s4
This port drives only combinatorial paths %s5

Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC

Severity Error

SDC_IDL07
Message: Input constrained versus real clock instead of
virtual one: clock %s

Objects specified with set_input_delay -clock


Description
commands must be virtual clocks, not real clocks.
Otherwise, Leda flags an error. The output points to
the faulty set_input_delay -clock command.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example

Using a virtual clock as reference clock may help in situations


where you want to change the reference clock from
REAL_CLK1 to REAL_CLK2 (see example below). In this
example, you need to change the virtual clock definition (that
is, modify its parameters similar to REAL_CLK1). This changes
the reference clock. Using the virtual clock helps avoid
situations where your real clock name is used in all
set_input_delay and set_output_delay commands. When you
decide to change the reference clock, you have edit all the
input and output delay commands.
// SDC File
Create_clock -name REAL_CLK1 -period 10 -waveform{0,5} \
[get_ports clk_in1 ]
Create_clock -name REAL_CLK2 -period 15 -waveform{0,7.5} \
[get_ports clk_in2]
Create_clock -name Virtual_clk -period 10 -waveform {0,5}
#same parameters as REAL_CLK1
Set_input_delay 2.0 -source Virtual_clk [get_ports in1]
Set_input_delay 3.0 -source Virtual_clk [get_ports in2]
Set_input_delay 4.0 -source Virtual_clk [get_ports in3]
Set_input_delay 1.5 -source Virtual_clk [get_ports out1]
Set_input_delay 0.5 -source Virtual_clk [get_ports out2]
Set_input_delay 4.5 -source Virtual_clk [get_ports out3]

This next example shows an SDC file with a set_input_delay -


clock command that does not point to a virtual clock. Leda
flags these as errors. The output points to the incorrect
set_input_delay -clock command.
// SDC File
create_clock -name CLK -period 10 clk
create_clock -name VCLK -period 10
set_input_delay 5 -max -clock VCLK {in1}
set_input_delay 5 -max -clock CLK {in1}
# SDC_IDL07 violation--input delay specified for real clock

// Design File
module IDL07(in1, clk, out);
input in1, clk;
output out;
reg out, clk1;
always @(posedge clk)
clk1 <= in1;
always @(posedge clk1)
out <= in1;
endmodule

SDC_IDL08

Message: Input delay is larger than user defined


percentage of clock period

This rule will flag violation if the input delay vs. clock
Description period (respect to which clock it is specified) doesn't
match with user-defined ratio.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example causes Leda to flag an error because the input


delay vs. clock period doesn't match with user-defined ratio.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN]
-divide_by 2 Q1
# SDC_IDL08 violation
set_input_delay 2.5 [get_ports D1]
set_input_delay 2.5 [get_ports D2] -clock [get_clocks CLK]
set_input_delay 2.5 [get_ports D3] -clock [get_clocks GCLK]
set_input_delay 2 [get_ports D4] -clock [get_clocks CLK]

// Design File
module mSDC_IDL08 (D1, D2, D3, D4, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3, D4;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2&D4;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_IDL09

Message: Level sensitive input detected

Description
This rule flags violation if -level_sensitive option is
used in set_input_delay constraint.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Note

SDC_IDL10

Message: Falling edge sensitive input detected

Description
This rule flags violation if -clock_fall option is used in
set_input_delay constraint along with clock.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Note

SDC_IDL11

Message: Unsupported options used in set_input_delay

Description
This rule flags violation if -level_sensitive option is
used in set_input_delay constraint.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_IDL12

Message: Negative input delay value

Description
This rule flags violation for non-negative min delay or
negative max delay.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC

Severity
Warning

SDC_IDL20

Message: Input delay is not specified with respect to a


clock

This rule will flag violation if there is no -clock option


Description in input delay constraint w.r.t an already defined
clock.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because input delay
constraint is specified without -clock option.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN]
-divide_by 2 Q1

# SDC_IDL20 violation
set_input_delay 2.5 [get_ports D1]
set_input_delay 2.5 [get_ports D2] -clock [get_clocks CLK]
set_input_delay 2.5 [get_ports D3] -clock [get_clocks CLK1]

// Design File
module mSDC_IDL20 (D1, D2, D3, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_IDL21

Message: Input delay should not be specified on a


hierarchical port

Description
This rule will flag violation if input delay is specified
on a hierarchical port.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error.
// SDC File
create_clock -name CLK1 -period 10 [get_ports CLKIN]
create_clock -name CLK2 -period 10 [get_ports CLKIN1]

# SDC_IDL21 violation
set_input_delay 2.5 [get_ports D1]
set_input_delay 2.5 [get_pins inst/D]
set_input_delay 2.5 [get_pins Q3_reg/D]
// Design File
module mSDC_IDL21 ( D0, D1, D2, CLKIN, CLKIN1, Q1, Q2, Q3 );
input D0;
input D1;
input D2;
input CLKIN;
input CLKIN1;
output Q1;
output Q2;
output Q3;
wire Q0;

GTECH_FD1 Q3_reg ( .D(Q2), .CP(CLKIN1), .Q(Q3) );


flop inst ( .D(D2), .CP(Q1), .Q(Q2) );
GTECH_FD1 Q1_reg ( .D(D1), .CP(Q0), .Q(Q1) );
GTECH_FD1 Q0_reg ( .D(D0), .CP(CLKIN), .Q(Q0) );
endmodule

module flop (D, CP, Q);


input D, CP;
output Q;
reg Q;
always @(posedge CP)
Q <= D;
endmodule

SDC_ITR01

Message: Undefined set_input_transition or


set_driving_cell: %s

All input ports must be specified with input transition


values. Without these input transition values, you may
get poor quality of results from the timing analysis
and synthesis tools. You can constrain input ports
Description with set_input_transition or set_driving_cell
commands. If not, Leda flags these as errors. The
output points to a signal that Leda inferred as a clock.
The Path Viewer shows a path from this signal to a
flip-flop.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file does not contain a set_input_transition
command for the in1 input port. Leda flags an error in this
case.
// SDC File
create_clock -name CLK -period 10 clk
# SDC_ITR01 violation--no input transition specified for in1

// Design File
module ITR01(in1, clk, out);
input in1, clk;
output out;
reg out, clk1;
always @(posedge clk)
clk1 <= in1;
always @(posedge clk1)
out <= in1;
endmodule
SDC_ITR02

Message: Incomplete input transition options

When some options such as -rise, -fall, -min, and -max


are used with set_input_transition commands to
Description
constrain an object, the counterpart options must
also be present. Otherwise, Leda flags an error. The
output points to the incomplete command in the SDC
file checked.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file does not contain a set_input_transition -min
option that corresponds to the specified -max option. Leda
flags an error in this case.
// SDC File
create_clock -name CLK -period 10 clk
set_input_transition 2 -max [get_ports in1]
# SDC_ITR02 violation--max specified without corresponding min

// Design File
module ITR02(in1, clk, out);
input in1, clk;
output out;
reg out, clk1;
always @(posedge clk)
clk1 <= in1;
always @(posedge clk1)
out <= in1;
endmodule

SDC_ITR03

Message: Inconsistent set_input_transition values - min >


max: min %s max %s
Setting the min greater than the max may cause the
synthesis tool to run for a long time and results in
Description
poor quality of results. Leda checks for such
inconsistency on set_input_transition commands.
The output points to the inconsistent command in the
SDC file checked.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file contains a set_input_transition -min option with a
greater value than the corresponding -max option. Leda flags
an error in this case.
// SDC File
create_clock -name CLK -period 10 clk
set_input_transition 2 -max [get_ports in1]
set_input_transition 5 -min [get_ports in1]
# SDC_ITR03 violation--min greater than max

// Design File
module ITR02(in1, clk, out);
input in1, clk;
output out;
reg out, clk1;
always @(posedge clk)
clk1 <= in1;
always @(posedge clk1)
out <= in1;
endmodule

SDC_ITR04

Message: Input transition value outside characterization


range

This rule flags if the input transition value (specified


Description by set_input_transition) is greater than the
default_max_transition value in library.
Policy
Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This is an example of invalid usage of constraint.
module mSDC_ITR04
input D1, D2;
...
endmodule

.lib file
Library (test) {
...
default_max_transition : 5.0;
default_max_fanout : 20.0;
defaullt_fanout_load      : 1.0;
...
}
Constraint file
...
set_input_transition -max 6.5 D1 -clock CLK1 //Flag violation
set_input_transition -min 1.5 D1 -clock CLK1 //OK

SDC_ITR05

Message: Inconsistent input transition value vs


associated clock transition value

This rule flags if the input transition is less than the


Description transition value of the clock specified with -clock
option for the set_input_transition command.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_ITR07

Message: Unusual input_transition options

This rule fires when Leda detects clock and clock_fall


options used with set_input_transition or
set_driving_cell commands. This rule also fires when
Description
Leda detects max and min options used with
set_driving_cell commands. These options are not
supported by synthesis. They may apply for timing
analysis tools, but there could be discrepancies
between the synthesis and timing analysis tools.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file contains set_input_transition commands with -
clock and -clock_fall options. Leda flags these as errors and
points to the unusual commands in the Checker output.
// SDC File
set_input_transition -clock clk 1.0 d1;
set_input_transition -clock_fall 1.0 d2;
set_driving_cell -clock clk d3;
set_driving_cell -clock_fall d4;
# SDC_ITR07 violations--clock and clock_fall options

// Design File
module ITR07 (clk, d, q);
parameter nb_bit = 8;
input clk;
input [1: nb_bit] d;
output [1: nb_bit] q;
reg [1: nb_bit] q;

always @(negedge clk) q = d;


endmodule

This SDC file contains set_driving_cell commands with -max


and -min options. Leda flags these as errors and points to the
unusual commands in the Checker output.
// SDC File
set_driving_cell -min d4;#FAIL SDC_ITR07_B x 1
set_driving_cell -max d5;#FAIL SDC_ITR07_B x 1
set_driving_cell -min -max d6;#FAIL SDC_ITR07_B x 1
# SDC_ITR07 violation--max and min options for set_driving_cell

// Design File
module ITR07 (clk, d, q);
parameter nb_bit = 8;
input clk;
input [1: nb_bit] d;
output [1: nb_bit] q;
reg [1: nb_bit] q;

always @(negedge clk) q = d;


endmodule

SDC_ITR08

Message: set_drive is not recommended

Description This rule flags error if set_drive constraint is used.


Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_ITR09

Message: Negative set_input_transition value: %s

Negative transition values could increase runtimes


Description for timing analysis and synthesis tools. Check for a
typing error.
Policy Constraints
Ruleset
Inputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This SDC file contains a set_input_transition command that
specifies a negative value. Leda flags these as errors and
points to the unusual commands in the Checker output.
// SDC File
set_input_transition -1.0 d1;#FAIL SDC_ITR09 x 1
# SDC_ITR09 violation--negative transition value specified

// Design File
module ITR07 (clk, d, q);
parameter nb_bit = 8;
input clk;
input [1: nb_bit] d;
output [1: nb_bit] q;
reg [1: nb_bit] q;

always @(negedge clk) q = d;


endmodule

SDC_ITR10

Message: Missing load on port for transition


computation with set_driving_cell

Description
This rule flags violation if set_driving_cell is set on an
input port but set_load is not set on it.
Policy Constraints
Ruleset Inputs
Language VHDL/Verilog
Type SDC
Severity
Warning
Naming Ruleset
The following rule is from the Naming ruleset:

SDC_NAM01

Message: Do not name clocks same as port or pin name:


%s

Description
Using the same name for clocks as port or pin names
confuses timing analysis and synthesis tools.
Policy Constraints
Ruleset Naming
Language VHDL/Verilog
Type SDC
Severity
Error
Outputs Ruleset
The following rules are from the Outputs ruleset:

SDC_ODL01

Message: Unconstrained output

This rule checks to make sure all outputs and inout


ports of a block are constrained by set_output_delay
Description
commands. If they aren't, Leda flags an error. The
output points to the unconstrained output signal that
Leda has inferred as a clock, and the Path Viewer
shows the path from this signal to a flip-flop.
Policy Constraints
Ruleset Outputs
Language
VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file that is missing a
set_output_delay command for an output port in the design.
// SDC File
# SDC_ODL01 violation--no set_output_delay constraint for output port

// Design File
module simple_reg (clk, d, q);
parameter nb_bit = 8;
input clk;
input [1: nb_bit] d;
output [1: nb_bit] q;
reg [1: nb_bit] q;
always @(negedge clk) q = d;
endmodule

SDC_ODL02

Message: Output delay specified with respect to multiple


clocks

This rule will flag violation if more than one output


Description delay constraint is used on an output with different
clocks and without add delay options.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because more than
one output delay constraint is used on an output with different
clocks.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN]
-divide_by 2 Q1
create_clock -name VCLK -period 20

# SDC_ODL02 violation
set_output_delay 2.5 [get_ports Q1] -clock [get_clocks CLK]
set_output_delay 2.5 [get_ports Q1] -clock [get_clocks GCLK]
set_output_delay 2.5 [get_ports Q1] -clock [get_clocks VCLK]

set_output_delay 2.5 [get_ports Q2] -clock [get_clocks CLK]


set_output_delay 2.5 [get_ports Q2] -clock [get_clocks GCLK] -add_delay
set_output_delay 2.5 [get_ports Q2] -clock [get_clocks VCLK]

set_output_delay 2.5 [get_ports Q3] -clock [get_clocks CLK]


set_output_delay 1.5 [get_ports Q3] -clock [get_clocks GCLK] -add_delay
-min
set_output_delay 3.5 [get_ports Q3] -clock [get_clocks GCLK] -max
set_output_delay 2.5 [get_ports Q3] -clock [get_clocks VCLK] -add_delay

// Design File
module mSDC_ODL02 (D1, D2, D3, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_ODL03

Message: Sub-elements of same bus have different


delays

Description
This rule flags if all the elements of a bus do not have
same min-max delays.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Warning
SDC_ODL04

Message: Incomplete set_output_delay options

When some options such as -rise, -fall, -min, and -max


are used with set_output_delay commands, the
Description counterpart options must also be present. Otherwise,
Leda flags an error. The output points to the
incomplete command in the SDC file checked.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file with a min delay specified,
but no max.
// SDC File
set_output_delay -min 1.09 clk
# SDC_ODL04 violation--min specified but no max

// Design File
module simple_reg (clk, d, q);
parameter nb_bit = 8;
input clk;
input [1: nb_bit] d;
output [1: nb_bit] q;
reg [1: nb_bit] q;
always @(negedge clk) q = d;
endmodule

SDC_ODL05

Message: Inconsistent output delay value versus clock


period

Setting inconsistent delay values compared to the


Description clock period may cause the synthesis tool to run for a
long time and result in poor quality of results.
Policy
Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file that contains conflicting
delay values for the outputs relative to the clock period.
// SDC File
create_clock -period 1.0 -name clk
set_output_delay -max -clock clk 1.1 q
set_output_delay -min -clock clk 1.1 q;
# SDC_ODL05 violation--output delay value inconsistent with clock period

// Design File
module simple_reg (clk, d, q);
parameter nb_bit = 8;
input clk;
input [1: nb_bit] d;
output [1: nb_bit] q;
reg [1: nb_bit] q;
always @(negedge clk) q = d;
endmodule

SDC_ODL06

Message: Output constrained versus wrong (real) clock:


Port: %s1, clock (wrong): %s2

Setting inconsistent delay values compared to a wrong (real)


clock period may cause the synthesis tool to run for a long
time and result in poor quality of results. The secondary
messages of this rule could be one of the following:
Description

Right clock is %s3


Right clock source is (this does not have a
corresponding SDC clock definition) %s4

Policy
Constraints

Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file with output delays specified
relative to the wrong clock.
// SDC File
create_clock -period 1.0 -name clk1 clk1
create_clock -period 1.0 -name clk2 clk2
set_output_delay -clock [get_clocks clk1] 0.5 q2
set_output_delay -clock [get_clocks clk2] 0.5 q1

// Design File
module top (clk1, clk2, d1, d2, q1, q2, q3);
input clk1, clk2;
input d1, d2;
output q1, q2;
reg q1, q2;
input d3;
output q3;
reg q3;

always @(negedge clk1) q1 = d1;


always @(negedge clk2) q2 = d2;
always @(negedge clk1) q3 = d3;

endmodule

SDC_ODL07

Message: Detected output constraints versus real clocks


instead of virtual ones

Setting output delay values compared to real clocks


Description
instead of virtual clocks may cause the synthesis tool
to run for a long time and result in poor quality of
results.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
Using a virtual clock as reference clock may help in situations
where you want to change the reference clock from
REAL_CLK1 to REAL_CLK2 (see example below). In this
example, you need to change the virtual clock definition (that
is, modify its parameters similar to REAL_CLK1). This changes
the reference clock. Using the virtual clock helps avoid
situations where your real clock name is used in all
set_input_delay and set_output_delay commands. When you
decide to change the reference clock, you have edit all the
input and output delay commands.
// SDC File
Create_clock -name REAL_CLK1 -period 10 -waveform{0,5} \
[get_ports clk_in1 ]
Create_clock -name REAL_CLK2 -period 15 -waveform{0,7.5} \
[get_ports clk_in2]
Create_clock -name Virtual_clk -period 10 -waveform {0,5}
#same parameters as REAL_CLK1
Set_input_delay 2.0 -source Virtual_clk [get_ports in1]
Set_input_delay 3.0 -source Virtual_clk [get_ports in2]
Set_input_delay 4.0 -source Virtual_clk [get_ports in3]
Set_input_delay 1.5 -source Virtual_clk [get_ports out1]
Set_input_delay 0.5 -source Virtual_clk [get_ports out2]
Set_input_delay 4.5 -source Virtual_clk [get_ports out3]

This next SDC file example shows an output delay value set to
a real clock, which Leda flags as an error.
// SDC File
create_clock -name clk1 -period 1.0 clk1
set_output_delay -clock clk1 1.0 q1
# SDC_ODL07 violation--output delay relative to real clock

// Design File
module simple_reg (clk1, clk2,d1,d2, q1,q2);
parameter nb_bit = 8;
input clk1,clk2;
input [1: nb_bit] d1,d2;
output [1: nb_bit] q1,q2;
reg [1: nb_bit] q1,q2;
always @(negedge clk1) q1 = d1;
always @(negedge clk2) q2 = d2;
endmodule

SDC_ODL08

Message: Output delay is larger than user defined


percentage of clock period

This rule will flag violation if the output delay vs.


Description
clock period (respect to which clock it is specified)
doesn't match with user-defined ratio.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because the output
delay vs. clock period doesn't match with user-defined ratio.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN]
-divide_by 2 Q1

# SDC_ODL08 violation
set_output_delay 2.5 [get_ports Q1]
set_output_delay 2.5 [get_ports Q2] -clock [get_clocks CLK]
set_output_delay 2.5 [get_ports Q3] -clock [get_clocks GCLK]
set_output_delay 2 [get_ports Q4] -clock [get_clocks CLK]

// Design File
module mSDC_ODL08 (D1, D2, D3, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_ODL09

Message: Level sensitive output detected

Description
This rule flags violation if -level_sensitive option is
used in set_output_delay constraint.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Note
SDC_ODL10

Message: Falling edge sensitive output detected

Description
This rule flags violation if -clock_fall option is used in
set_output_delay constraint along with clock.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Note
SDC_ODL11

Message: Unsupported options used in set_output_delay

Description
This rule flags violation if -level_sensitive option is
used in set_output_delay constraint.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Warning
SDC_ODL12

Message: Unusual output delay value

Setting negative output delay values or positive/zero


Description minimum delay values can cause problems for timing
analysis and synthesis tools.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example shows an SDC file with negative output delay
values that Leda flags as errors.
// SDC File
set_output_delay -1.0 -max q2 -clock clk2
set_output_delay -1.0 -min q2 -clock clk2
set_output_delay -1.0 -min q1 -clock clk1
set_output_delay -1.0 -min q1 -clock clk1 -add_delay
set_output_delay 3.0 -min q1 -clock clk1 -add_delay
# SDC_ODL12 violation--negative output delays

// Design File
module simple_reg (clk1, clk2,d1,d2, q1,q2);
parameter nb_bit = 8;
input clk1,clk2;
input [1: nb_bit] d1,d2;
output [1: nb_bit] q1,q2;
reg [1: nb_bit] q1,q2;
always @(negedge clk1) q1 = d1;
always @(negedge clk2) q2 = d2;
endmodule

SDC_ODL20

Message: Output delay not specified with respect to a


clock

This rule will flag violation if there is no -clock option


Description
in output delay constraint w.r.t an already defined
clock.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because there is no
clock option used in output delay constraint w.r.t an already
defined clock.
// SDC File
create_clock -name CLK -period 10 [get_ports CLKIN]
create_generated_clock -name GCLK -source [get_ports CLKIN]
-divide_by 2 Q1

# SDC_ODL20 violation
set_output_delay 2.5 [get_ports Q1]
set_output_delay 2.5 [get_ports Q2]
set_output_delay 2.5 [get_ports Q3] -clock [get_clocks CLK]
set_output_delay 2.5 [get_ports Q4] -clock [get_clocks CLK1]

// Design File
module mSDC_ODL20 (D1, D2, D3, CLKIN, Q1, Q2, Q3, Q4);
input D1, D2, D3;
inout CLKIN;
output Q1, Q2, Q3, Q4;
reg Q1, Q2, Q3, Q4;
wire tmp, Q2Bar;\
always @(posedge CLKIN)
Q1 <= D1;
assign tmp = Q1 & Q3;
always @(posedge tmp)
Q2 <= D2;
assign Q2Bar = ~Q2;
always @(posedge Q2Bar)
Q3 <= D3;
always @(posedge Q3)
Q4 <= D1;
endmodule

SDC_ODL21

Message: Output delay should not be specified for a


hierarchical port

Description
This rule will flag violation if output delay is specified
for a hierarchical port.
Policy
Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
Example
This example causes Leda to flag an error because output
delay is specified for a hierarchical port.
// SDC File
create_clock -name CLK1 -period 10 [get_ports CLKIN]
create_clock -name CLK2 -period 10 [get_ports CLKIN1]

# SDC_ODL21 violation
set_output_delay 2.5 [get_ports Q1]
set_output_delay 2.5 [get_pins inst/Q]
set_output_delay 2.5 [get_pins Q3_reg/Q]

// Design File
module mSDC_ODL21 ( D0, D1, D2, CLKIN, CLKIN1, Q1, Q2, Q3 );
input D0;
input D1;
input D2;
input CLKIN;
input CLKIN1;
output Q1;
output Q2;
output Q3;
wire Q0;

GTECH_FD1 Q3_reg ( .D(Q2), .CP(CLKIN1), .Q(Q3) );


flop inst ( .D(D2), .CP(Q1), .Q(Q2) );
GTECH_FD1 Q1_reg ( .D(D1), .CP(Q0), .Q(Q1) );
GTECH_FD1 Q0_reg ( .D(D0), .CP(CLKIN), .Q(Q0) );
endmodule

module flop (D, CP, Q);


input D, CP;
output Q;
reg Q;
always @(posedge CP)
Q <= D;
endmodule

SDC_OLD01

Message: Undefined or zero load on output or inout port

For each output, a load value must be defined via a


set_load command in your constraint file. If a load
Description
value is not defined for an output (zero is the default
value), Leda flags an error for this rule.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_OLD02_A

Message: Load value outside characterization range (for


RTL)

This rule flags a violation if the load value (specified


Description by set_load) is greater than the corresponding
parameter value in the RTL.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Warning
Example
This is an example of invalid usage of constraint.
module mSDC_OLD02
output Q;
...
endmodule

default_max_capacitance = 5

Constraint file
...
set_load 12.5 [get_ports Q] # Flag violation of SDC_OLD02_A

SDC_OLD02_B
Message: Load value outside characterization range (for
netlist)

This rule flags violation if the load value (specified by


Description
set_load) is greater than the
default_max_capacitance value in library for NETLIST
design.
Policy Constraints
Ruleset Outputs
Language VHDL/Verilog
Type SDC
Severity
Warning
Example

This is an example of invalid usage of constraint.


.lib file
Library (test) {
...
default_max_capacitance : 6.0;
default_max_fanout : 20.0;
defaullt_fanout_load : 1.0;
...
}

Constraint file
...
set_load 12.5 [get_ports Q] # Flag violation of SDC_OLD02_B

Power Ruleset

The following rules are from the Power ruleset:

SDC_POW01

Message: Undefined or zero maximum dynamic power


constraint
Description None.
Policy Constraints
Ruleset Power
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_POW02

Message: Undefined or zero maximum leakage power


constraint

Description None.
Policy Constraints
Ruleset Power
Language VHDL/Verilog
Type SDC
Severity
Warning

Structure Ruleset

The following rules are from the Structure ruleset:

SDC_STR21

Message: set_max_area not set

Description
This rule will flag violation if set_max_area is not set
in constraint file.
Policy
Constraints
Ruleset STR
Language VHDL/Verilog
Type SDC
Severity
Warning
Example

Leda flags a warning for this example because set_max_area


is not set in the constraint file.
// SDC File
# SDC_STR21 violation
set_max_dynamic_power 25
set_max_leakage_power 25

// Design File
module mSDC_STR21();
endmodule

SDC_STR23

Message: Operating condition specified is not defined in


library

Description
This rule flags a violation if the specified operating
condition is not found in the library.
Policy Constraints
Ruleset STR
Language VHDL/Verilog
Type SDC
Severity
Warning
SDC_STR24

Message: Operating condition is defined more than once

Description
This rule will flag violation if same operating
condition is defined in constraint file more than once.
Policy Constraints
Ruleset STR
Language VHDL/Verilog
Type SDC
Severity
Warning
Example

Leda flags a warning for this example because operating


condition is defined more than once.

// SDC File
set_operating_conditions WCCOM
set_max_area 90
set_max_dynamic_power 25
# SDC_STR24 violation
set_operating_conditions WCIND
set_max_leakage_power 12.5
set_operating_conditions BCCOM

// Design File
module mSDC_STR24 ();
endmodule

Miscellaneous Ruleset

The following rules are from the miscellaneous ruleset:

SDC_MSC02

Message: Constraint not allowed; use set_case_analysis


instead
Usage of set_logic_dc, set_logic_one, set_logic_zero
Description commands is not advisable. Instead user should use
set_case_analysis command that is interpreted
during optimization.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC04

Message: Wireload model specified is not defined in


library

Description
This rule flags a violation if the specified wire_load
model is not found in the library.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_MSC05

Message: set_fanout_load can only be used on output


ports

Description None.
Policy
Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC07

Message: set_port_fanout_number present in postlayout

Description None.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC08

Message: set_port_fanout_number has a zero value

Description None.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error
SDC_MSC09

Message: set_clock_gating_check detected

Description None.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC11

Message: set_max_time_borrow must only be set on


level-sensitive objects and the value must be smaller
than the clock period

Description None.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC13

Message: set_clock_gating_check is can be used only on


design, pin, clock and cell

Description None.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC14

Message: set_data_check should be set on port, pin


excluding clock and net

Description None.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC16

Message: Incomplete set_data_check options

This rule flags violation when any of rise, fall or setup,


Description hold option is used but the counterpart option is not
present for inter-clocks.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_MSC25

Message: Type of drive cells not specified to user


defined requirements

This rule works through a parameter called


user_drive_cell. In case the parameter is not defined,
Description the rule will do nothing. In case it is defined, the rule
will verify that all specified driving cells are listed in
the user_drive_cell parameter.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Warning
Example

This is an example of invalid usage of driving cell.


module mSDC_MSC25
input D1, D2;
...
endmodule

parameter user_drive_cell = "AN2 OR2"

Constraint file
...
set_driving_cell D1 -lib_cell IV   //Flag violation
set_driving_cell D2 -lib_cell OR2  //OK
SDC_MSC26

Message: Don't use cell not present in the specified


library

This rule verifies that only library cells are specified


Description
as don't use (no design cells); that is, if the cell used
in the set_dont_use command is not found in library,
then Leda flags a violation.
Policy Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Warning
Example

Constraint file
...
set_dont_use mylib/OR2 //OK
set_dont_use mylib/AND //Flag violation
module mSDC_MSC25
input D1, D2;

SDC_MSC27

Message: Don't touch should not be specified for


modules belonging to netlist

set_dont_touch command is primarily to tell DC not to


optimize a particular module in a given design. It
Description should not be used to set it on library cells
instantiated in design. The module referred should be
user defined modules/block.
Policy
Constraints
Ruleset Miscellaneous
Language VHDL/Verilog
Type SDC
Severity
Error

Objects Ruleset

The following rules are from the objects ruleset:

SDC_OBJ01

Message: Do not set create_clock to input pin of black


box macro cells

This rule checks if the create_clock command is set


Description to the input pin of a black box macro cell. If it is, Leda
issues a warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

The below test case can be used to validate all the rules of
objects ruleset.
module test(clk,d,o,en);
input clk, d, en;
output o;

IVDA CBUF0 (.A(clk), .Z(s1));


B1I RCTS1 (.A(net2), .Z(net1)); // dont_touch cell
ABPLSSCH apll1 ( .RCLK(net1), .CLKOA(net2), .CLKI(s1));
BlockA CellA (.clkin(net1), .datain(d), .dataout(o), .en(en));

endmodule

module BlockA(datain, clkin, dataout, en);


input clkin, datain, en;
output dataout;

IVDA CBUF1 (.A(clkin), .Z(n1));


IVDA CBUF2 (.A(n1), .Z(n2));
IVDA CBUF3 (.A(n2), .Z(n3));
FD1 REG1 (.CP(n1), .D(), .Q(s1));
IV INV1 (.A(s1), .Z(s2));
FD1 REG2 (.CP(n3), .D(s2), .Q(s3));
AN2 AND1 (.A(en), .B(s3), .Z(s4));
IVDA BUF4 (.A(s4), .Z(s5));

IVDA DBUF5 (.A(datain), .Z(d1));


FD1 REG3 (.CP(s4), .D(d1), .Q(ss1));
IV INV2 (.A(ss1), .Z(ss2));
FD1 REG4 (.CP(s5), .D(ss2), .Q(dataout));

endmodule

SDC File:
#Objects
set PriInput [get_port "clk"] ;#1
set InPinMacro [get_pins "apll1/RCLK"] ;#2
set OutPinMacro [get_pins "apll1/CLKOA"] ;#3
set OutPinDntTouchCell [get_pin "RCTS1/Z"] ;#4
set HierPin [get_pins "CellA/dataout"] ;#5 CellA/en CellA/datain
set nets [get_nets "CellA/n2"] ;#6
set OutPinReg [get_pins "CellA/REG2/Q"] ;#7
set OutPinCombCell [get_pins "CellA/AND1/Z"] ;#8
set PriOutput [get_port "o"] ;#9
set ClkPinReg [get_pins "CellA/REG1/CP"] ;#10
set DataPinReg [get_pins "CellA/REG2/D"] ;#11
set InPinCombCell [get_pins "CellA/AND1/A"] ;#12
set Clock [get_clocks "clk"] ;#13
set LogicPinOnData [get_pins "CellA/DBUF5/Z"] ;#14

### Constraints
# create_clock
create_clock -p 5 $PriInput ;# OK
create_clock -p 5 $InPinMacro ;# NG, SDC_OBJ01
create_clock -p 5 $OutPinMacro ;# OK
create_clock -p 5 $OutPinDntTouchCell ;# OK
create_clock -p 5 $HierPin ;# NG,SDC_OBJ02
create_clock -p 5 $nets ;# NG,SDC_OBJ03
create_clock -p 5 $OutPinReg ;# OK,SDC_OBJ04
create_clock -p 5 $OutPinCombCell ;# NG,SDC_OBJ05
create_clock -p 5 $PriOutput ; #NG,SDC_OBJ06
create_clock -p 5 $ClkPinReg ;# NG,SDC_OBJ07
create_clock -p 5 $DataPinReg ;# NG,SDC_OBJ08
create_clock -p 5 $InPinCombCell ;# NG,SDC_OBJ09
create_clock -p 5 $Clock ;#NG, SDC_OBJ10
create_clock -p 5 $LogicPinOnData ;#NG,SDC_OBJ11

# create_generated_clock
create_generated_clock -source clk -div 1 -name gclk $PriInput ;#
NG,SDC_OBJ12
create_generated_clock -source clk -div 1 -name gclk $InPinMacro ;#
NG,SDC_OBJ13
create_generated_clock -source clk -div 1 -name gclk $OutPinMacro ;# OK
create_generated_clock -source clk -div 1 -name gclk
$OutPinDntTouchCell ;# OK
create_generated_clock -source clk -div 1 -name gclk $HierPin ;#
NG,SDC_OBJ14
create_generated_clock -source clk -div 1 -name gclk $nets ;#
NG,SDC_OBJ15
create_generated_clock -source clk -div 1 -name gclk $OutPinReg ;# OK
create_generated_clock -source clk -div 1 -name gclk $OutPinCombCell ;#
NG,SDC_OBJ16
create_generated_clock -source clk -div 1 -name gclk $PriOutput ; # OK
create_generated_clock -source clk -div 1 -name gclk $ClkPinReg ;# OK
create_generated_clock -source clk -div 1 -name gclk $DataPinReg ;#
NG,SDC_OBJ17
create_generated_clock -source clk -div 1 -name gclk $InPinCombCell ;#
NG,SDC_OBJ18
create_generated_clock -source clk -div 1 -name gclk $Clock ;# NG,
SDC_OBJ19
create_generated_clock -source clk -div 1 -name gclk $LogicPinOnData
;#NG,SDC_OBJ20

SDC_OBJ02

Message: Do not set create_clock to hierarchical pin

This rule checks if the create_clock command is set


Description to the hierarchical pin. If it is, Leda issues an error
message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC

Severity
Error

SDC_OBJ03

Message: Do not set create_clock to net

Description
This rule checks if the create_clock command is set
to a net. If it is, Leda issues an error message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_OBJ04

Message: Do not set create_clock to output pin of


registers

This rule checks if the create_clock command is set


Description to the output pin of a register. If it is, Leda issues a
warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning
SDC_OBJ05

Message: Do not set create_clock to output pin of


combinational cells in clock line

This rule checks if the create_clock command is set


Description to the output pin of a combinational cell in clock line.
If it is, Leda issues a warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ06

Message: Do not set create_clock to primary output

This rule checks if the create_clock command is set


Description to a primary output. If it is, Leda issues a warning
message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ07
Message: Do not set create_clock to clock pin of
registers

This rule checks if the create_clock command is set


Description to the clock pin of a register. If it is, Leda issues a
warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ08

Message: Do not set create_clock to data pin of registers

This rule checks if the create_clock command is set


Description to the data pin of a register. If it is, Leda issues a
warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ09

Message: Do not set create_clock to input pin of


combinational cells in clock line
This rule checks if the create_clock command is set
Description to the input pin of a combinational cell in clock line. If
it is, Leda issues a warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ12

Message: Do not set create_generated_clock to primary


input

This rule checks if the create_generated_clock


Description command is set to a primary input. If it is, Leda
issues an error message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_OBJ13

Message: Do not set create_generated_clock to input pin


of black box macro cells

This rule checks if the create_generated_clock


Description
command is set to the input pin of a black box macro
cell. If it is, Leda issues a warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ14

Message: Do not set create_generated_clock to


hierarchical pin

This rule checks if the create_generated_clock


Description command is set to the hierarchical pin. If it is, Leda
issues an error message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_OBJ15

Message: Do not set create_generated_clock to net

This rule checks if the create_generated_clock


Description command is set to a net. If it is, Leda issues an error
message.
Policy
Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Error

SDC_OBJ16

Message: Do not set create_generated_clock to output


pin of combinational cells in clock line

This rule checks if the create_generated_clock


Description
command is set to the output pin of a combinational
cell in clock line. If it is, Leda issues a warning
message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ17

Message: Do not set create_generated_clock to data pin


of registers

This rule checks if the create_generated_clock


Description command is set to the data pin of a register. If it is,
Leda issues a warning message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC_OBJ18

Message: Do not set create_generated_clock to input pin


of combinational cells in clock line

This rule checks if the create_generated_clock


Description
command is set to the input pin of a combinational
cell in clock line. If it is, Leda issues a warning
message.
Policy Constraints
Ruleset Objects
Language VHDL/Verilog
Type SDC
Severity
Warning

SDC Equivalency Check

In different stages of the design process, many changes are


introduced to achieve the specification. These changes could
be either functional, or structural, or both depending upon the
design stage. There are processes at every design stage in the
design flow to make sure that the results of two different
stages are equivalent and are not affected by such changes.
Similarly, the design constraints file also gets modified at
different stages of the design cycle.

Changes in constraints data are usually made manually at


different stages of the design flow. With the design size
growing exponentially, the size of the constraints file has also
grown significantly. Changing constraints data at different
stages for a huge design and managing them manually to
make sure that a potential problem is not introduced is a
herculean task. SDC equivalency check is an approach to
make sure that such faults are exposed at the right stage of
the design cycle.

SDC equivalency check compares two SDC files belonging to


two different design phases and reports any discrepancies in
the intent of design constraints in the two files. The block
diagram of the SDC equivalency checker is as follows:

Two SDC files are said to be equivalent, if the following


information are same in both SDC files:

Clocks - Effective clocks and clock related constraint


information.
IO Delay - Effective IO delay constraint information.
Timing Exceptions (Paths) - Effective timing exceptions
constraint information.

Using SDC Equivalency Check

SDC Equivalency checks can be used only through the Tcl


mode. You can use the
-compare_file option with the read_constraints command to
access the SDC Equivalency checks. A simple example with
two SDC files namely SDC1.tcl and SDC2.tcl is as follows:

Use the following commands to read and elaborate a design:


leda> read_verilog -f files.list
leda> elaborate -top TOP

To read the first constraints file, you need to use the


read_constraints command in the same way as you do when a
SDC file for inconsistency. This SDC file is referred to as the
reference SDC file in the rule messages.
leda> read_constraints SDC1.tcl

To read the second constraints file, you need to use -


compare_file option with the read_constraints command. This
SDC file is referred to as the compare SDC file in the rule
messages.
leda> read_constraints -compare_file SDC2.tcl

Use the check command to execute rule checking.


leda> check -sdc -config SDC_Eqv_rules.tcl

The options -for_equivalency and -compare_file are


functionally equivalent. Although, Leda recommends you to
replace the -for_equivalency option with -compare_file.

SDC Equivalency Checks for Pre-synthesis and Post-


synthesis SDC files
Leda Equivalency checks can be used to verify the equivalency
between a pre-synthesis SDC file and a post-synthesis SDC
file. The post-synthesis (netlist) SDC file generated by the
implementation tools is most likely to be different from that of
the pre-synthesis SDC file because of the various
transformations done by the tool. The implementation tools
generate the automated setup file (.svf) that has the
transformation information. You need to provide this .svf file
to check the equivalency between a pre-synthesis SDC file and
a post-synthesis SDC file. The usage model is as follows:

1. In Tcl shell mode, read in the post-synthesis netlist file that


you want to check:
leda> read_verilog netlist_file.v
2. Elaborate the design by specifying the top-level module or
entity:
leda> elaborate -top my_top_module -nohierdump
3. Read the reference SDC file of the design. Read in an SDC
file using the read_constraints command:
leda> read_constraints netlist_SDC_file.tcl
4. Provide the .svf file generated by DC during synthesis
process to create the above netlist using the following
command:
leda> set_svf my_DC_run.svf
5. Read the pre-synthesis SDC file as compare SDC file.
leda> read_constraints -compare_file compare_SDC_file.tcl
6. Run the Checker using the check command with the -sdc
switch and pointing to the configuration file using the -config
option:
leda> check -sdc -config config_file

For more information, see the Leda User Guide.

New Tcl commands

You can use the command remove_constraint to remove the


previously read constraints information.
Syntax
remove_constraint [ -all ] [ -blocks ] [ -block block_name ] [ -
compare ] [ -reference ]
Arguments
-all Removes all the constraints information from the memory.
-blocks Removes all the block level constraints information.
-blocks block_name Removes only the constraints information
of specified block.
-compare Removes the constraints information of compare
file.
-reference Removes the constraints information of reference
file.

You can use the command set_svf to specify the .svf to be


read by Leda to understand the transformation information
required for checking the equivalence between a pre-synthesis
SDC file and a post-synthesis SDC file.

Syntax
set_svf <file_name>

Arguments
file_name Specify the file to be read.

Limitations on SDC files

There are restrictions on the nature of SDC files that are given
as inputs for checking SDC equivalency for a reference design.

SDC is specified with respect to design nodes that do


not change through implementation. For example:
- Input/output ports
- Flip-flop/memory pins
- Hierarchical module ports/pins
You need to regenerate the golden SDC file, if re timing,
and hierarchy manipulation are done after golden SDC
file is created.
If one of the SDC file belongs to RTL, then the design
object reference in this file should be in the way
Synopsys Design Compiler supports.

For example, consider the following RTL code:


module test(D, Clk, rst, Q);
  input D, Clk, rst;
  output Q;
  reg temp;

  always @(posedge Clk or posedge rst)


  if (rst)
  temp <= 0;
  else
  temp <= D;
  assign Q = temp;
endmodule

The netlist file that a customer reads in Leda will be as


follows:
module test ( D, Clk, rst, Q );
input D, Clk, rst;
output Q;
wire n1;

FD2 temp_reg ( .D(D), .CP(Clk), .CD(n1), .Q(Q) );


IV U4 ( .A(rst), .Z(n1) );
endmodule

The inferred flip-flop pins (temp) in RTL code should be


referred in RTL-SDC file as follows:
[ get_pins temp_reg/D ]
[ get_pins temp_reg/Q ]
[ get_pins temp_reg/CD ]

Equivalency Ruleset

The following rules are from the Equivalency ruleset:

SDC_EQCLK01

Message: Clock constraints are inconsistent

This rule checks for inconsistency between the reference file


clock constraint and the compare file clock constraint. For
each primary clock definition in the reference file, it checks if
there exists a corresponding clock specification in the
Description
compare file with same specifications.Leda issues this error
message for the following:
clock period mismatch
clock waveform mismatch

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module block (clk, d, q);


input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
create_clock -name CLK2 -period 20 [get_pins f2/clk]
create_generated_clock -name CLK3 -source [get_pins f2/clk] -divide_by 2
[get_pins b1/clk]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 4}


create_clock [get_pins f2_q_reg/CP] -name CLK2 -period 20 -waveform
{0 15}
create_generated_clock [get_pins f2_q_reg/Q] -name CLK3 -source
[get_pins f2_q_reg/CP] -divide_by 2

// Output
cmp.sdc : 2 : NOTE : SDC command ignored for design object f2/clk
cmp.sdc : 3 : NOTE : SDC command ignored for design object b1/clk
1: create_clock -name CLK1 -period 10 [get_ports clk]
^
cmp.sdc:1: EQV> [ERROR] SDC_EQCLK01: Clock constraints are inconsistent
: Waveform not matching
/new_file.sdc:8: : : Reference SDC file clock parameters:
(ClockType)REAL CLOCK (Period) 10.000000 (Waveform) 0.000000 4.000000
cmp.sdc:1: : : Compare SDC file clock parameters: (ClockType)REAL CLOCK
(Period) 10.000000 (Waveform) 0.000000 5.000000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCLK01
#HTM1: "pol_constraints.html#SDC_EQCLK01"

SDC_EQCLK02

Message: Clock constraint is missing

This rule checks for missing clock constraints between the


reference constraint file and the compare constraint file. Leda
issues this error message for the following:
Description reference clock that has no corresponding compare
clock.
compare clock that has no corresponding reference
clock.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module block (clk, d, q);


input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
create_clock -name CLK2 -period 20 [get_pins f2/clk]
create_generated_clock -name CLK3 -source [get_pins f2/clk] -divide_by 2
[get_pins b1/clk]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 4}


create_clock [get_pins f2_q_reg/CP] -name CLK2 -period 20 -waveform
{0 15}
create_generated_clock [get_pins f2_q_reg/Q] -name CLK3 -source
[get_pins f2_q_reg/CP] -divide_by 2

// Output
9: create_clock [get_pins f2_q_reg/CP] -name CLK2 -period 20 -
waveform {0 15}
^
new_file.sdc:9: EQV> [ERROR] SDC_EQCLK02: Clock constraint is missing in
compare SDC file
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCLK02
#HTM1: "pol_constraints.html#SDC_EQCLK02"

10: create_generated_clock [get_pins f2_q_reg/Q] -name CLK3 -


source [get_pins f2_q_reg/CP] -divide_by 2
^
new_file.sdc:10: EQV> [ERROR] SDC_EQCLK02: Clock constraint is missing
in compare SDC file
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCLK02
#HTM1: "pol_constraints.html#SDC_EQCLK02"
SDC_EQCLK03

Message: Clock transition constraints are inconsistent

This rule checks for inconsistency between the clock


transition values in reference sdc file and compare sdc file.
Leda flags this violation if the clock transition values are
inconsistent. Leda also issues this error message for the
following:
Description
clock transition constraint present in reference
constraints file but missing in compare constraints file.
clock transition constraint present in compare
constraints file but missing in reference constraints
file.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule
module block (clk, d, q);
input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
create_clock -name CLK2 -period 20 [get_pins f2/clk]
create_generated_clock -name CLK3 -source [get_pins f2/clk] -divide_by 2
[get_pins b1/clk]

set_clock_transition -rise 2.5 [get_clocks CLK1]


set_clock_transition -fall 2.5 [get_clocks CLK1]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_pins f2_q_reg/CP] -name CLK2 -period 20 -waveform
{0 10}
create_generated_clock [get_pins f2_q_reg/Q] -name CLK3 -source
[get_pins f2_q_reg/CP] -divide_by 2

// Output
1: create_clock -name CLK1 -period 10 [get_ports clk]
^
cmp.sdc:1: EQV> [ERROR] SDC_EQCLK03: Clock transition constraints are
inconsistent : Clock Transition missing in reference file
cmp.sdc:6: : : Compare SDC file clock transition parameters:(Max Rise)
0.000000 (Max Fall) 2.500000 (Min Rise) 0.000000 (Min Fall) 2.500000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCLK03
#HTM1: "pol_constraints.html#SDC_EQCLK03"

SDC_EQCLK04

Message: Clock uncertainty constraints are inconsistent

This rule checks for inconsistency between the clock


uncertainty values in reference sdc file and compare sdc file.
Leda flags this violation if the clock uncertainty values are
inconsistent. Leda also issues this error message for the
following:
Description clock uncertainty constraint present in reference
constraints file but missing in compare constraints file.
clock uncertainty constraint present in compare
constraints file but missing in reference constraints
file.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module block (clk, d, q);


input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
create_clock -name CLK2 -period 20 [get_pins f2/clk]
create_generated_clock -name CLK3 -source [get_pins f2/clk] -divide_by 2
[get_pins b1/clk]

set_clock_uncertainty -setup 0.1 CLK1

// Reference. SDC File


set sdc_version 1.6
create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}
#set_clock_uncertainty -setup 0.1 [get_clocks CLK1]

create_clock [get_pins f2_q_reg/CP] -name CLK2 -period 20 -waveform


{0 10}
create_generated_clock [get_pins f2_q_reg/Q] -name CLK3 -source
[get_pins f2_q_reg/CP] -divide_by 2

// Output
1: create_clock -name CLK1 -period 10 [get_ports clk]
^
cmp.sdc:1: EQV> [ERROR] SDC_EQCLK04: Clock uncertainty constraints are
inconsistent : Clock Uncertainty missing in reference file
cmp.sdc:5: : : Compare SDC file clock uncertainty parameters:(Setup)
0.100000 (Hold) 0.000000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCLK04
#HTM1: "pol_constraints.html#SDC_EQCLK04"

SDC_EQIDL01

Message: Input delay constraints are inconsistent

This rule checks for inconsistency between the reference file


input delay constraint and the compare file input delay
constraint. For each primary input, the effective input delay
constraint of the reference file is compared with the effective
input delay constraint of the compare file.Leda issues this
Description error message for the following:
Mismatch in max_rise, max_fall, min_rise, min_fall
max_rise, max_fall, min_rise, min_fall are present in
one file but missing in the other file with respect to
same clock or time 0.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC

Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module block (clk, d, q);


input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File

create_clock -name CLK1 -period 10 [get_ports clk]


create_clock -name CLK2 -period 10 [get_pins f2/clk]
create_clock -name CLK3 -period 10 [get_pins b1/clk]

set_input_delay 5 [get_pins f1/d] -clock [get_clocks CLK1]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_pins f2_q_reg/CP] -name CLK2 -period 10 -waveform
{0 5}
create_clock [get_pins b1_q_reg/CP] -name CLK3 -period 10 -waveform
{0 5}
set_input_delay -clock CLK1 5 [get_ports a]

// Output

10: set_input_delay 6 [get_ports a] -clock CLK1


^
cmp.sdc:10: EQV> [ERROR] SDC_EQIDL01: Input delay constraints are
inconsistent : MaxRise MaxFall MinRise MinFall delays not matching
new_file.sdc:10: : : Reference SDC input delays: (Max Rise) 5.000000
(Max Fall) 5.000000 (Min Rise) 5.000000 (Min Fall) 5.000000
cmp.sdc:10: : : Compare SDC input delays: (Max Rise) 6.000000 (Max
Fall) 6.000000 (Min Rise) 6.000000 (Min Fall) 6.000000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQIDL01
#HTM1: "pol_constraints.html#SDC_EQIDL01"

SDC_EQIDL02
Message: Input delay constraint is missing

This rule checks for missing input delay constraints between


the reference constraint file and the compare constraint file.
Leda issues this error message for the following:Leda issues
this error message for the following:

Description
No input delay present in reference file with reference
to the same clock or time 0, but specified in compare
file.
No input delay present in compare file with reference
to the same clock or time 0, but specified in reference
file.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module block (clk, d, q);


input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
create_clock -name CLK2 -period 10 [get_pins f2/clk]
create_clock -name CLK3 -period 10 [get_pins b1/clk]

set_input_delay 5 [get_pins f1/d] -clock [get_clocks CLK1]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_pins f2_q_reg/CP] -name CLK2 -period 10 -waveform
{0 5}
create_clock [get_pins b1_q_reg/CP] -name CLK3 -period 10 -waveform
{0 5}
set_input_delay -clock CLK1 5 [get_ports a]

// Output
11: set_input_delay -clock CLK1 5 [get_ports a]
^
new_file.sdc:11: EQV> [ERROR] SDC_EQIDL02: Input delay constraint is
missing in compare SDC wrt clock CLK1 for input port test.a
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQIDL02
#HTM1: "pol_constraints.html#SDC_EQIDL02"

SDC_EQODL01

Message: Output delay constraints are inconsistent

This rule checks for inconsistency between the reference file


output delay constraint and the compare file output delay
constraint. For each primary output, the effective output delay
constraint of the reference file is compared with the effective
output delay constraint of the compare file.Leda issues this
Description error message for the following:
Mismatch in max_rise, max_fall, min_rise, min_fall
max_rise, max_fall, min_rise, min_fall are present in
one file but missing in the other file with respect to
same clock or time 0.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module block (clk, d, q);


input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10.000000 -waveform { 0.000000 5.000000
} {clk1}
create_clock -name CLK2 -period 10.000000 -waveform { 0.000000 5.000000
} {clk2}
set_output_delay 4 [get_ports o1]

// Reference. SDC File


create_clock -name CLK1 -period 10.000000 -waveform { 0.000000 5.000000
} {clk1}
create_clock -name CLK2 -period 10.000000 -waveform { 0.000000 5.000000
} {clk2}
set_output_delay 3 [get_ports o2]
set_output_delay 2 [get_ports o1]

// Output
4: set_output_delay 10 [get_ports zout] -clock [get_clocks CLK1]
^
cmp.sdc:4: EQV> [ERROR] SDC_EQODL01: Output delay constraints are
inconsistent : MaxRise MaxFall MinRise MinFall delays not matching
new_file.sdc:9: : : Reference SDC output delays: (Max Rise) 11.000000
(Max Fall) 11.000000 (Min Rise) 11.000000 (Min Fall) 11.000000
cmp.sdc:4: : : Compare SDC output delays: (Max Rise) 10.000000 (Max
Fall) 10.000000 (Min Rise) 10.000000 (Min Fall) 10.000000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQODL01
#HTM1: "pol_constraints.html#SDC_EQODL01"

SDC_EQODL02

Message: Output delay constraint is missing

This rule checks for missing output delay constraints between


the reference constraint file and the compare constraint file.
Leda issues this error message for the following:Leda issues
this error message for the following:

Description
No output delay present in reference file with reference
to the same clock or time 0, but specified in compare
file.
No output delay present in compare file with reference
to the same clock or time 0, but specified in reference
file.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, a, b, c, dout );

input clk, a, b, c;
output dout;
//reg temp1, temp2, temp3;

flop f1 (.clk(clk), .d(a), .q(temp1) );


flop f2 (.clk(temp1), .d(b), .q(temp2) );
block b1 (.clk(temp2), .d(c), .q(dout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module block (clk, d, q);


input clk, d;
output q;
reg q;
wire w1;

assign w1 = ~d;
always @(posedge clk)
q <= w1;

endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10.000000 -waveform { 0.000000 5.000000
} {clk1}
create_clock -name CLK2 -period 10.000000 -waveform { 0.000000 5.000000
} {clk2}
set_output_delay 4 [get_ports o1]

// Reference. SDC File


create_clock -name CLK1 -period 10.000000 -waveform { 0.000000 5.000000
} {clk1}
create_clock -name CLK2 -period 10.000000 -waveform { 0.000000 5.000000
} {clk2}
set_output_delay 3 [get_ports o2]
set_output_delay 2 [get_ports o1]

SDC_EQFLP01

Message: False path constraints are inconsistent

This rule checks for inconsistency between the


compare file false path constraint and the reference
Description file false path constraint. Leda issues this error
message if the setup_rise, setup_fall, hold_rise or
hold_fall options are not matching for the paths.
Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC

Severity Error
Example

This example illustrates the rule.


// Design File
module test ( clk1, clk2, d0, d1, d2, qout );

input clk1, clk2, d0, d1, d2;


output qout;
wire and_z, combo_d, mux_z, temp;

flop f1 (.clk(clk1), .d(d0), .q(temp) );


ag A1 (.z(and_z), .a(d1), .b(temp) );
ag A2 (.z(combo_d), .a(temp), .b(d2) );
flop f2 ( .clk(clk2), .d(combo_d), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 20 [get_ports clk2]

set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2] -setup

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk1] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_ports clk2] -name CLK2 -period 20 -waveform {0 10}
set_false_path -fall -from [get_clocks CLK1] -to [get_clocks CLK2]

// Output
10: set_false_path -fall -from [get_clocks CLK1] -to [get_clocks CLK2]
^
new_file.sdc:10: EQV> [ERROR] SDC_EQFLP01: False path constraints are
inconsistent : SetupFall HoldFall option not matching
new_file.sdc:10: : : Clock domain start point CLK1
new_file.sdc:10: : : Clock domain end point CLK2
NO_FILE_INFO:0: : : Compare SDC file false path command
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQFLP01
#HTM1: "pol_constraints.html#SDC_EQFLP01"

SDC_EQFLP02

Message: False path constraint is missing


This rule checks for missing false path constraints
between the reference constraint file and the
compare constraint file. Leda issues this error
message for the following: For each false path
specified in the reference file, this rule checks if there
Description exists a false path specification in the compare file
which contains that path.Leda issues this error
message if the reference file false path is not covered
by any false path constraint in equivalency file. Leda
also considers setup_rise, setup_fall, hold_rise and
hold_fall conditions if they are specified.
Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk1, clk2, d0, d1, d2, qout );

input clk1, clk2, d0, d1, d2;


output qout;
wire and_z, combo_d, mux_z, temp;

flop f1 (.clk(clk1), .d(d0), .q(temp) );


ag A1 (.z(and_z), .a(d1), .b(temp) );
ag A2 (.z(combo_d), .a(temp), .b(d2) );
flop f2 ( .clk(clk2), .d(combo_d), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 20 [get_ports clk2]

set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk1] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_ports clk2] -name CLK2 -period 20 -waveform {0 10}

// Output
4: set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
^
cmp.sdc:4: EQV> [ERROR] SDC_EQFLP02: False path constraint is missing in
reference SDC file
cmp.sdc:4: : : Clock domain start point CLK1
cmp.sdc:4: : : Clock domain end point CLK2
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQFLP02
#HTM1: "pol_constraints.html#SDC_EQFLP02"

SDC_EQMCP01

Message: Multicycle path constraints are inconsistent

This rule checks for inconsistency between the


reference file multicycle path constraint and the
Description
compare file multicycle path constraint. Leda issues
this error message if the setup_rise, setup_fall,
hold_rise, hold_fall options are not matching for the
paths.
Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk1, clk2, d0, d1, d2, qout );
input clk1, clk2, d0, d1, d2;
output qout;
wire and_z, combo_d, mux_z, temp;

flop f1 (.clk(clk1), .d(d0), .q(temp) );


ag A1 (.z(and_z), .a(d1), .b(temp) );
ag A2 (.z(combo_d), .a(temp), .b(d2) );
flop f2 ( .clk(clk2), .d(combo_d), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 20 [get_ports clk2]

set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2] -


rise -setup

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk1] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_ports clk2] -name CLK2 -period 20 -waveform {0 10}
set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2]

// Output
10: set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2]
^
new_file.sdc:10: EQV> [ERROR] SDC_EQMCP01: Multicycle path constraints
are inconsistent : SetupFall HoldRise HoldFall option not matching
NO_FILE_INFO:0: : : Clock domain start point: CLK1
NO_FILE_INFO:0: : : Clock domain end point: CLK2
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQMCP01
#HTM1: "pol_constraints.html#SDC_EQMCP01"

SDC_EQMCP02

Message: Multicycle path constraint is missing

This rule checks for missing multi-cycle path constraints


between the reference constraint file and the compare
constraint file.For each multicycle path specified in reference
file, this rule checks if there exists a multicycle path
Description
specification in equivalency file which contains that path.Leda
issues this error message in the following cases:
Reference file multicycle path is not covered by any
multi-cycle path constraint in equivalency file.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk1, clk2, d0, d1, d2, qout );

input clk1, clk2, d0, d1, d2;


output qout;
wire and_z, combo_d, mux_z, temp;

flop f1 (.clk(clk1), .d(d0), .q(temp) );


ag A1 (.z(and_z), .a(d1), .b(temp) );
ag A2 (.z(combo_d), .a(temp), .b(d2) );
flop f2 ( .clk(clk2), .d(combo_d), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 20 [get_ports clk2]

set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2] -


rise -setup

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk1] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_ports clk2] -name CLK2 -period 20 -waveform {0 10}
set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2]

// Violation
10: set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2]
^
new_file.sdc:10: EQV> [ERROR] SDC_EQMCP01: Multicycle path constraints
are inconsistent : SetupFall HoldRise HoldFall option not matching
NO_FILE_INFO:0: : : Clock domain start point: CLK1
NO_FILE_INFO:0: : : Clock domain end point: CLK2
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQMCP01
#HTM1: "pol_constraints.html#SDC_EQMCP01"

SDC_EQMCP03

Message: Multicycle path multiplier values are


inconsistent

This rule checks for inconsistency in the multipath multiplier


values between the reference constraint file and the compare
constraints file.Leda issues this error message in the following
cases:
Description

Path multipliers do not match between the two files.


Leda also considers the setup_rise, setup_fall, hold_rise and
hold_fall conditions if they are specified.
Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk1, clk2, d0, d1, d2, qout );

input clk1, clk2, d0, d1, d2;


output qout;
wire and_z, combo_d, mux_z, temp;

flop f1 (.clk(clk1), .d(d0), .q(temp) );


ag A1 (.z(and_z), .a(d1), .b(temp) );
ag A2 (.z(combo_d), .a(temp), .b(d2) );
flop f2 ( .clk(clk2), .d(combo_d), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk1]
create_clock -name CLK2 -period 20 [get_ports clk2]

set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk1] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_ports clk2] -name CLK2 -period 20 -waveform {0 10}
set_multicycle_path 6 -from [get_clocks CLK1] -to [get_clocks CLK2]

// Violation
4: set_multicycle_path 2 -from [get_clocks CLK1] -to [get_clocks CLK2]
^
cmp.sdc:4: EQV> [ERROR] SDC_EQMCP03: Multicycle path multiplier values
are inconsistent : SetupRise SetupFall HoldRise HoldFall path multiplier
not matching
cmp.sdc:4: : : Path Multiplier in Compare SDC: (SetupRise) 2
(SetupFall) 2 (HoldRise) 2 (HoldFall) 2
new_file.sdc:10: : : Path Multiplier in Reference SDC: (SetupRise) 6
(SetupFall) 6 (HoldRise) 6 (HoldFall) 6
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQMCP03
#HTM1: "pol_constraints.html#SDC_EQMCP03"

SDC_EQCMB01

Message: Max delay path constraints are inconsistent

This rule checks for inconsistency between the


reference file max-delay path constraint and the
Description compare file max-delay path constraint. Leda flags
this rule if the rise, fall options are not matching for
the paths.
Policy Constraints
Ruleset
EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, d0, d1, d2, d3, sel, qout );

input clk, d0, d1, d2, d3, sel;


output qout;
wire and_z, mux_z;

ag A1 (.z(and_z), .a(d0), .b(d1) );


flop f1 ( .clk(clk), .d(and_z), .q(temp) );
flop f2 ( .clk(temp), .d(d3), .q(q0) );
mux M1 ( .z(mux_z), .sel(sel), .x(d2), .y(q0) );
inv I1 ( .d(mux_z), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

module mux (z, sel, x, y);


input sel, x, y;
output z;
reg z;
always @(sel or x or y)
if (sel == 1'b0)
z = x;
else
z = y;
endmodule

module inv (d, q);


input d;
output q;
assign q = ~d;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
create_generated_clock -name CLK2 -source [get_pins f1/clk] -divide_by 2
[get_pins f2/clk]

set_max_delay 3 -from [get_ports d0] -rise


// Reference. SDC File
set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}


create_generated_clock [get_pins f2_q_reg/CP] -name CLK2 -source
[get_ports clk] -divide_by 2
set_max_delay -fall 3 -from [get_ports d0]

// Output
5: set_max_delay 3 -from [get_ports d0] -rise
^
cmp.sdc:5: EQV> [ERROR] SDC_EQCMB01: Max delay path constraints are
inconsistent : SetupRise HoldRise option not matching
new_file.v:3: :test: Path start point: test.d0
/remote/in01home1/sathishm/SDC_EQV_testing/sdc_eqv/eqcmb_1/new_file.v:7:
:GTECH_FD3S: Path end point: test.f1_q_reg.~iw0
new_file.sdc:10: : : Reference SDC file Max delay path command
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB01
#HTM1: "pol_constraints.html#SDC_EQCMB01"

10: set_max_delay -fall 5 -from [get_ports d0]


^
new_file.sdc:10: EQV> [ERROR] SDC_EQCMB01: Max delay path constraints
are inconsistent : SetupFall HoldFall option not matching
new_file.v:3: :test: Path start point: test.d0
new_file.v:7: :GTECH_FD3S: Path end point: test.f1_q_reg.~iw0
/remote/in01home1/sathishm/SDC_EQV_testing/sdc_eqv/eqcmb_1/cmp.sdc:5: :
: Reference SDC file Max delay path command
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB01
#HTM1: "pol_constraints.html#SDC_EQCMB01"

SDC_EQCMB02

Message: Max delay path constraint is missing

This rule checks for missing max delay path constraint


between the reference constraint file and the compare
constraints file. Leda issues this error message for the
Description following conditions:
The compare file max-delay path is not covered by any
max-delay path constraint in the reference file.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, d0, d1, d2, d3, sel, qout );

input clk, d0, d1, d2, d3, sel;


output qout;
wire and_z, mux_z;

ag A1 (.z(and_z), .a(d0), .b(d1) );


flop f1 ( .clk(clk), .d(and_z), .q(temp) );
flop f2 ( .clk(temp), .d(d3), .q(q0) );
mux M1 ( .z(mux_z), .sel(sel), .x(d2), .y(q0) );
inv I1 ( .d(mux_z), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

module mux (z, sel, x, y);


input sel, x, y;
output z;
reg z;
always @(sel or x or y)
if (sel == 1'b0)
z = x;
else
z = y;
endmodule

module inv (d, q);


input d;
output q;
assign q = ~d;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10.000000 -waveform { 0.000000 5.000000
} {clk1}
create_clock -name CLK2 -period 10.000000 -waveform { 0.000000 5.000000
} {clk2}
set_min_delay 3 -from [get_ports i1]

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk1] -name CLK1 -period 10 -waveform {0 5}


create_clock [get_ports clk2] -name CLK2 -period 10 -waveform {0 5}
set_min_delay 3 -from [get_ports i1]
SDC_EQCMB03

Message: Max delay path constraint values are


inconsistent

This rule checks for inconsistency between the max-delay path


value present in reference constraint file and the compare
constraints file. Leda issues this error message for the
following conditions:
Description
The max delay values do not match between the two
files.
Leda also considers the rise and fall conditions if they
are specified.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, d0, d1, d2, d3, sel, qout );

input clk, d0, d1, d2, d3, sel;


output qout;
wire and_z, mux_z;

ag A1 (.z(and_z), .a(d0), .b(d1) );


flop f1 ( .clk(clk), .d(and_z), .q(temp) );
flop f2 ( .clk(temp), .d(d3), .q(q0) );
mux M1 ( .z(mux_z), .sel(sel), .x(d2), .y(q0) );
inv I1 ( .d(mux_z), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;
endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

module mux (z, sel, x, y);


input sel, x, y;
output z;
reg z;
always @(sel or x or y)
if (sel == 1'b0)
z = x;
else
z = y;
endmodule

module inv (d, q);


input d;
output q;
assign q = ~d;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
create_generated_clock -name CLK2 -source [get_pins f1/clk] -divide_by 2
[get_pins f2/clk]

set_max_delay 3 -from [get_ports d0] -rise

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}


create_generated_clock [get_pins f2_q_reg/CP] -name CLK2 -source
[get_ports clk] -divide_by 2
set_max_delay -rise 5 -from [get_ports d0]

SDC_EQCMB04

Message: Min delay path constraints are inconsistent

This rule checks for inconsistency between the


reference file min-delay path constraint and the
Description compare file min-delay path constraint. Leda flags
this rule if the rise, fall options are not matching for
the paths.
Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, d0, d1, d2, d3, sel, qout );

input clk, d0, d1, d2, d3, sel;


output qout;
wire and_z, mux_z;

ag A1 (.z(and_z), .a(d0), .b(d1) );


flop f1 ( .clk(clk), .d(and_z), .q(temp) );
flop f2 ( .clk(temp), .d(d3), .q(q0) );
mux M1 ( .z(mux_z), .sel(sel), .x(d2), .y(q0) );
inv I1 ( .d(mux_z), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

module mux (z, sel, x, y);


input sel, x, y;
output z;
reg z;
always @(sel or x or y)
if (sel == 1'b0)
z = x;
else
z = y;
endmodule

module inv (d, q);


input d;
output q;
assign q = ~d;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
set_min_delay 3 -from [get_ports d0] -rise
set_min_delay 4 -from [get_ports d1] -rise
set_min_delay 5 -from [get_ports sel] -rise

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}


set_min_delay -fall 3 -from [get_ports d0]
set_min_delay -fall 4 -from [get_ports d1]
set_min_delay -rise 5 -from [get_ports sel]

// Violation
3: set_min_delay 3 -from [get_ports d0] -rise
^
cmp.sdc:3: EQV> [ERROR] SDC_EQCMB04: Min delay path constraints are
inconsistent : SetupRise HoldRise option not matching
new_file.v:3: :test: Path start point: test.d0
new_file.v:7: :GTECH_FD3S: Path end point: test.f1_q_reg.~iw0
new_file.sdc:9: : : Reference SDC file Min delay path command
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB04

4: set_min_delay 4 -from [get_ports d1] -rise


^
cmp.sdc:4: EQV> [ERROR] SDC_EQCMB04: Min delay path constraints are
inconsistent : SetupRise HoldRise option not matching
new_file.v:3: :test: Path start point: test.d1
new_file.v:7: :GTECH_FD3S: Path end point: test.f1_q_reg.~iw0
new_file.sdc:10: : : Reference SDC file Min delay path command
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB04

9: set_min_delay -fall 3 -from [get_ports d0]


^
new_file.sdc:9: EQV> [ERROR] SDC_EQCMB04: Min delay path constraints are
inconsistent : SetupFall HoldFall option not matching
new_file.v:3: :test: Path start point: test.d0
new_file.v:7: :GTECH_FD3S: Path end point: test.f1_q_reg.~iw0
cmp.sdc:3: : : Reference SDC file Min delay path command
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB04

10: set_min_delay -fall 4 -from [get_ports d1]


^
new_file.sdc:10: EQV> [ERROR] SDC_EQCMB04: Min delay path constraints
are inconsistent : SetupFall HoldFall option not matching
new_file.v:3: :test: Path start point: test.d1
new_file.v:7: :GTECH_FD3S: Path end point: test.f1_q_reg.~iw0
cmp.sdc:4: : : Reference SDC file Min delay path command
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO new_file.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB04

SDC_EQCMB05

Message: Min delay path constraint is missing

This rule checks for missing min delay path constraint


between the reference constraint file and the compare
constraints file. Leda issues this error message for the
Description following conditions:
The compare file min-delay path is not covered by any
min-delay path constraint in the reference file.

Policy Constraints
Ruleset EQUIVALENCY

Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, d0, d1, d2, d3, sel, qout );

input clk, d0, d1, d2, d3, sel;


output qout;
wire and_z, mux_z;

ag A1 (.z(and_z), .a(d0), .b(d1) );


flop f1 ( .clk(clk), .d(and_z), .q(temp) );
flop f2 ( .clk(temp), .d(d3), .q(q0) );
mux M1 ( .z(mux_z), .sel(sel), .x(d2), .y(q0) );
inv I1 ( .d(mux_z), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

module mux (z, sel, x, y);


input sel, x, y;
output z;
reg z;
always @(sel or x or y)
if (sel == 1'b0)
z = x;
else
z = y;
endmodule

module inv (d, q);


input d;
output q;
assign q = ~d;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]

#set_min_delay 3 -from [get_ports d0] -rise


set_min_delay 4 -from [get_ports d1] -rise
set_min_delay 5 -from [get_ports sel] -rise

// Reference. SDC File


set sdc_version 1.6
create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}
set_min_delay -rise 3 -from [get_ports d0]
set_min_delay -rise 4 -from [get_ports d1]
set_min_delay -rise 5 -from [get_ports sel]

SDC_EQCMB06

Message: Min delay path constraint values are


inconsistent

This rule checks for inconsistency between the min-delay path


value present in reference constraint file and the compare
constraints file. Leda issues this error message for the
following conditions:
Description
The min delay values do not match between the two
files.
Leda also considers the rise and fall conditions if they
are specified.

Policy Constraints
Ruleset EQUIVALENCY
Language VHDL/Verilog
Type SDC
Severity
Error
Example

This example illustrates the rule.


// Design File
module test ( clk, d0, d1, d2, d3, sel, qout );

input clk, d0, d1, d2, d3, sel;


output qout;
wire and_z, mux_z;

ag A1 (.z(and_z), .a(d0), .b(d1) );


flop f1 ( .clk(clk), .d(and_z), .q(temp) );
flop f2 ( .clk(temp), .d(d3), .q(q0) );
mux M1 ( .z(mux_z), .sel(sel), .x(d2), .y(q0) );
inv I1 ( .d(mux_z), .q(qout) );

endmodule

module flop (clk, d, q);


input clk, d;
output q;
reg q;

always @(posedge clk)


q <= d;

endmodule

module ag (z, a, b);


input a, b;
output z;
assign z = a & b;
endmodule

module mux (z, sel, x, y);


input sel, x, y;
output z;
reg z;
always @(sel or x or y)
if (sel == 1'b0)
z = x;
else
z = y;
endmodule

module inv (d, q);


input d;
output q;
assign q = ~d;
endmodule

// Compare. SDC File


create_clock -name CLK1 -period 10 [get_ports clk]
set_min_delay 13 -from [get_ports d0] -rise
set_min_delay 14 -from [get_ports d1] -rise
set_min_delay 15 -from [get_ports sel] -rise

// Reference. SDC File


set sdc_version 1.6

create_clock [get_ports clk] -name CLK1 -period 10 -waveform {0 5}


set_min_delay -rise 3 -from [get_ports d0]
set_min_delay -rise 4 -from [get_ports d1]
set_min_delay -rise 5 -from [get_ports sel]

// Violation
3: set_min_delay 13 -from [get_ports d0] -rise
^
cmp.sdc:3: EQV> [ERROR] SDC_EQCMB06: Min delay constraint values are
inconsistent : SetupRise HoldRise delay value not matching
cmp.sdc:3: : : Min delay values in Compare SDC: (SetupRise) 13.000000
(HoldRise) 13.000000
new_file.sdc:9: : : Min delay values in Reference SDC: (SetupRise)
3.000000 (HoldRise) 3.000000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB06

4: set_min_delay 14 -from [get_ports d1] -rise


^
cmp.sdc:4: EQV> [ERROR] SDC_EQCMB06: Min delay constraint values are
inconsistent : SetupRise HoldRise delay value not matching
cmp.sdc:4: : : Min delay values in Compare SDC: (SetupRise) 14.000000
(HoldRise) 14.000000
new_file.sdc:10: : : Min delay values in Reference SDC: (SetupRise)
4.000000 (HoldRise) 4.000000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB06

5: set_min_delay 15 -from [get_ports sel] -rise


^
cmp.sdc:5: EQV> [ERROR] SDC_EQCMB06: Min delay constraint values are
inconsistent : SetupRise HoldRise delay value not matching
cmp.sdc:5: : : Min delay values in Compare SDC: (SetupRise) 15.000000
(HoldRise) 15.000000
new_file.sdc:11: : : Min delay values in Reference SDC: (SetupRise)
5.000000 (HoldRise) 5.000000
#UNIT: VERILOG .leda_work NO_DIMENSION_INFO cmp.sdc
#RULE: CONSTRAINTS EQV $LEDA_PATH/rules/constraints/./CONSTRAINTS.sl 1
SDC_EQCMB06

Вам также может понравиться