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

Constraint Verification

Formal verification of SDC constraints

• Flags constraint/design issues that are not caught by other tools


• Eliminates the need for gate-level sims and the risk of silicon failure from bad constraints
• Assertions generated for timing exceptions that fail formal proof
• Use of RTL simulation to verify generated assertions is recommended– reduces review effort
• RTL input is recommended– RTL is not synthesized by the tool, allowing compact assertions to be generated
for simulation
• Refocus maps gate-level signoff constraints to RTL
Constraint Verification Capabilities

Generated
Clock
• Waveform Glitch
Verification Are timing
Constraint • Alignment endpoints
Mapping Verification glitch safe? CDC

Formal Timing RDC


Constraint Exception
Lint • FP
Verification
• MCP
Verification
Constraint Mapping
 Application of Constraints to RTL
 Tcl is converted to SDC
 Loops are unrolled, filters evaluated, wildcards expanded
 Netlist names are mapped to RTL
 LEC Mapping file can optionally be provided (normally not required)
 Syntax issues are flagged
 Incorrect object references are flagged
set_multicycle_path –setup 2 –from [get_pins u_arbiter_ready_reg_3]
set_false_path –through [get_pins genloop*u_adder/sum]

set_multicycle_path –setup 2 –from u_arbiter/ready_reg[3]


set_false_path –through {genloop[0].u_adder/sum
genloop[1].u_adder/sum genloop[2].u_adder/sum
genloop[3].u_adder/sum}
Back
Formal Constraint Lint
Clock Definitions • Unclocked registers, missing clock definitions

• Missing generated clocks


Generated Clock • Incorrect edge specification
Definitions • No combinational path from master to generated clock

• Clock reconvergence
Clock Propagation • False paths in clock propagation network

Clock Crossing • Missing/incorrect clock groups, clock-to-clock false paths

Case Analysis • Conflicting case analysis

• Setup MCPs with missing hold MCP


Exception Issues • Overlapping timing exceptions
• Timing exceptions that apply to large numbers of paths

Input/Output Delays • Missing I/O constraints


Back
No Combinational Path from Master to Generated
Clock

Unintended path

Intended path

create_clock –name clk {clk} –period 10


create_generated_clock –name genclk1 –source clk –master_clock clk {U1/O}
create_generated_clock –name genclk2 –source clk –master_clock clk {U2/Q}

Back
False Paths in Clock Propagation Network

create_clock –period 10 CLKA


create_clock –period 10 CLKB
create_clock –period 15 TCLK

Back
Incorrect Logically Exclusive Clock Group

set_clock_group –logically_exclusive –group clk –group genclk

Back
Conflicting Case Analysis

set_case_analysis 0 U1/S
set_case_analysis 0 U2/S

Back
Generated Clock Waveform Verification

create_clock clk –period 10


create_generated_clock –source clk –edges {1 3 7} genclk

1 2 3 4 5 6 7 8 9
clk

specified
genclk
actual
genclk Back
Generated Clock Alignment Verification
mclk

mclkby2

mclkby4

4 cycles
mclkby8 of mclk

2 cycles
of mclk

Back
False-Path Verification
 All paths constrained by a false-path are verified
 Clock-to-Clock FPs are verified as part of constraint lint
 Only paths between synchronous clocks are verified
 Path passes verification if any of the following is true:
 Startpoint is static
 Endpoint is synchronizer cell
 Condition required to propagate a transition from startpoint to
endpoint can never be true
 Assertion generated for FP that fails formal verification
 FPs that are specified for “timing don’t care” reasons should
not be verified
Back
False-Path Supported by Design Logic

set_false_path –from FF1_reg –to CLKB


set_false_path –from FF2_reg –to CLKA

Back
False-Path Assertion
module u_top_fp15_1 (input bit clk, input logic from_reg, input logic
to_reg, input bit v1);

wire path_propagation_condition = ( !v1 );

property e_fp15_1;
@(posedge clk) `FT_DISABLE (`FT_TRANSITIONS_AND_NOT_UNKNOWN(from_reg))
|=> (`FT_PPC_IS_FALSE_IN_PREV_CYCLE(path_propagation_condition)
|| (!(`FT_TRANSITIONS_AND_NOT_UNKNOWN(to_reg))));
endproperty

fp15_1: assert property(e_fp15_1) $display("top_fp15_1 checked"); else


$error("top_fp15_1 failed");
endmodule

bind top u_top_fp15_1 sva_u_top_fp15_1(.clk(clk1), .from_reg(r1),


.to_reg(r2),
.v1(i_mux.INT_TXBYTECLK_PORT_GEN[0].\ctech_lib_clk_mux_2to1_txbyteclkhs_int
[txport].s));

Back
Multi-Cycle Path Verification
 All paths constrained by a multi-cycle path are verified
 Only paths between synchronous clocks are verified
 Path passes verification if any of the following is true:
 Startpoint is static
 Endpoint is allowed to go metastable and startpoint value is held
stable for multiple cycles
 Condition required to propagate a transition from startpoint to
endpoint is not true when the startpoint transitions
 Assertion generated for MCP that fails formal verification
 MCPs that are specified for “timing don’t care” reasons
should not be verified

Back
Multi-Cycle Path Supported by Design Logic

set_multicycle_path –setup 2 –from FF1 –to FF2


set_multicycle_path –hold 1 –from FF1 –to FF2

Back
Multi-Cycle Path Assertion
module u_top_mcp9_4 (input bit clk, input logic from_reg, input logic
to_reg_1, input logic to_reg_2, input bit [1:0] v60, input bit [3:0] v62,
input bit [1:0] v66);

wire path_propagation_condition_1 =
( (v60[1:0] == 2'b11) && (v62[3:0] == 4'b0011) );
wire path_propagation_condition_2 =
( (v62[3:0] == 4'b0011) && (v66[1:0] == 2'b00) );

property e_mcp9_4_1;
@(posedge clk) `FT_DISABLE
(`FT_TRANSITIONS_AND_NOT_UNKNOWN(from_reg)) |=> (
((`FT_PPC_IS_FALSE_IN_PREV_CYCLE(path_propagation_condition_2) ||
(!(`FT_TRANSITIONS_AND_NOT_UNKNOWN(to_reg_2)))) &&
(`FT_PPC_IS_FALSE_IN_PREV_CYCLE(path_propagation_condition_1) ||
(!(`FT_TRANSITIONS_AND_NOT_UNKNOWN(to_reg_1))))));
endproperty

mcp9_4_1: assert property(e_mcp9_4_1) $display("top_mcp9_4 checked"); else


$error("top_mcp9_4 failed");
endmodule
bind top u_top_mcp9_4 sva_u_top_mcp9_4(.clk(clk), .from_reg(sp1),
.to_reg_1(q1), .to_reg_2(q2), .v60(dis1), .v62(counter), .v66(dis2)); Back
Glitch Verification

@(posedge clk)
(($rose(poken10_1p8) && `FT_IS_LO(pok10_1p8) && $fell(pok10_out_1p8)) ||
($fell(poken10_1p8) && `FT_IS_LO(pok10_1p8) && $rose(pok10_out_1p8)))
|->
(!(`FT_IS_HI(reset_tamper_extended.q) && `FT_IS_LO(U240.y) &&
`FT_IS_LO(U34.y) && `FT_IS_HI(U244.y) && `FT_IS_HI(u245.y) )); Back
Back
RDC Verification

 Path through async reset to capture flop must be false


 Formal verification, with assertions generated for formal failures
Back
Formal CDC Verification

 Formal proof that async. clock crossings are correctly synchronized


 Verification that either handshake mechanism is in place for correct data
transfer or path ends at synchronizer cell
 No need to specify or recognize CDC structures
Back

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