SpyGlass - CDC - Challenges in Hierarchical Convergence - v1.2 - To - Intel
SpyGlass - CDC - Challenges in Hierarchical Convergence - v1.2 - To - Intel
IMPORTANT NOTICE
In the event information in this presentation reflects Synopsys’ future plans,
such plans are as of the date of this presentation and are subject to
change. Synopsys is not obligated to develop the software with the features
and functionality discussed in these materials. In any event, Synopsys’
products may be offered and purchased only pursuant to an authorized quote
and purchase order or a mutually agreed upon written contract.
abstract_port –ports O2
–clock C2
–sync inactive –from C1 –to C2
–names “<>.sync1”
abstract_port –ports O3
–clock C2
–sync active –from C1 –to C2
–seq yes
–names “<>.sync2”
abstract_port – –ports O4
–clock C1
–combo yes –related_ports IN2
abstract_port –ports O4 –path_logic combo –related_ports
IN5
set_case_analysis -name foo -value 0
abstract_port -ports O5 -related_ports IN5 -path_logic combo
#HEADER
abstract_file -version 5.1.0 -scope cdc #What Product can this abstract file be used with (cdc/lint/dft/etc.)
current_design "dstBlk" -param { DW=7 } #Used to only apply this abstract to a module that matches the parameters
##########################################################
# abstract_port constraints (FEED THROUGHS) # Used only for Clock/Domain Propagation
# clock constraints (OUTPUT CLOCKS) # Catch Missing Clocks or wrong domain clocks
# set_case_analysis constraints (OUTPUTS) # Catch Missing or wrong set_case_analysis
# reset constraints (OUTPUTS) # Catch missing or wrong –sync/-async -value
# quasi_static constraints (OUTPUTS) # Catch missing quasi_static
# abstract_port constraints (OTUPUTS CLOCKED) # Catch data ports on wrong domains, -sync, -combo mismatches
#Adding -combo no to abstract_port defined at input port # (Additional Informatiton for Inputs to catch combinational logic on inputs)
#If it invloves a synchronized control crossing #
# qualifier constraints (OUTPUTS) # Qualifier Missing
# virtual clock constraints (OUTPUTS) # Definition of NEW clocks inside of blocks
# cdc_attribute constraints (OUTPUTS) # cdc_attributes to get propagated
# define_reset_order constraints (OUTPUTS) # define_reset_order mismatches.
# Inferred abstract_port constraints (INPUTS) # Auto Inferred Abstract ports to catch ports on wrong domains –sync -combo
# block interface constraints (INPUTS/OUTPUTS) # SV block interfaces parameters and direction of ports
abstract_block_violation -name checkCMD_existence -sev ERROR -waived_count 19 -is_builtin #Violations reported/waived during block level
abstract_block_violation -name Ac_clockperiod01 -sev WARNING -count 2 #SoC owner can tell if the block was run clean.
block_file_decompiled_start #Input Constraints used to generate abstract model.
clock -name "dstBlk.dstBlk__ctlDt_clk" -tag SG_AUTO_TAG_2 -domain domain1 #Used
clock -name "dstBlk.cmnDst__clk" -tag SG_AUTO_TAG_1 -domain domain0
reset -name "dstBlk.cmnDst__reset" -value 1 -sync
reset -name "dstBlk.dstBlk__ctlDt_reset" -value 1 -sync
block_file_decompiled_end
© 2015 Synopsys, Inc.
Checks done during reading of an abstract model
dstBLK
Abstract was read
srcBLK
Abstract was NOT
read and was run
FLAT
P1 Vck1
Ck1
Ck2
P2 bck2
P1 vck1
Ck1
P2 vck1
Ck3
P3 bck2
Ck2
• Block virtual clock vck1 cannot be mapped to the two different top
clocks Ck1 & Ck3
– Use different virtual clock name for proper mapping to the another top
clock
© 2015 Synopsys, Inc.
abstract_port –name P2 –clock vck12
SGDC_abstract_mapping01 Rule
• This is for the srcBlk. You can see each REAL clock constraint
• You can also see the bottom line is a “virtual” clock that was defined by an abstract_port –
clock constraint.
• The virtual clocks get mapped to the domain driving the port.
• Bottom up flow:
– Lower Level modules constraints are created and verified and then abstracted.
– These lower level abstracts are then instantiated in a higher level module and validated.
– Can be significant number of validation issues depending on block level’s understanding of SOC domains.
• During cdc_setup_check goal, we will limit ourselves to only the “Clock” and “Reset” checks.
– The other validation checks (data domain, case_analysis, quasi_static, combo logic) will considered in
the cdc_verify_struct goal
• Generation
– The rule Ac_abstract01 generates the abstract model.
– It is contained in the cdc_verify_struct goal, so every time you run the goal the model is created.
– If there are NO Verilog module parameters defined in the project file, then the abstract model will
contain a line saying it was generated with the default Verilog parameters.
– If there were Verilog parameters defined in the project file, then the Verilog parameters will get added
to the abstract model so that it will automatically get used when the Verilog parameters match the
Verilog instance.
• Due to the reduction of logic during abstraction and user assumptions could be wrong, their
can be errors in the block level runs.
• Most importantly are insure the clocks and resets are correct.
• Sometimes these problems are hard to resolve if ALL abstracts are introduced in a single run.
• Since you are only have access to the port level constraints it can be difficult to understand
why an output of block might be missing a clock or have multiple clocks on them.
• There are multiple ways to solve:
– You can tell SpyGlass to NOT blackbox when using the abstract models. This way a schematic is
available to trace signals. Unfortunatly the schematic is dead (there is no debug data) available
because only the schematic was left, but no analysis was done on it.
– Another way is by opening a separate GUI on the block that you have questions about. That way you
have full analysis of all the debug data.
• Another option to simplifying that the abstracts are not introducing problems is to only add 1 or
2 abstracts at a time. Resolve any clock or reset issues and then add more abstracts.
• Problem Description
– Block verification for srcBlk missed declaring clock “my_hanging_clk_viol”
– Top Level missed declaring a top level clock on “my_missing_clk_vil”
• Results of Ac_abstract_validation02 Reports 2 violation
– srBlk is missing clock constraint on pin my_hanging_clk_viol
– srBlk is missiong top level clock constraint on pin my_missing_clk_viol
• Conclusion:
– If connectivity issue, SoC owner to fix, if block assumption is wrong, Block owner to fix
TX RX
rx_clk
tx_clk
© 2015 Synopsys, Inc.
Simple Data Synchronizer (Split 2) (No block level violations)
• Port d_in of Block RX shows up as a data mismatch.
• Yellow Clock can be completely independent clocks.
• Qualifier is in a different block, so it requires a qualifier constraint.
#abstract_port –ports d_in -clock rx_clk
#Mismatches with tx_clk!
#abstract_port –ports d_in –clock VCLK
d_out d_in
Either block could
A1 be flat or abstracted
A1[7:0]
D1 and it should work
either way.
TX RX
rx_clk
tx_clk
© 2015 Synopsys, Inc.
Data Path Domain Mismatch (Clock Domain Crossings)
Correcting data domain at block
input
• Problem Description port and doing analysis again will
– Abstract Model has BLK_DATA on the BLK_CLKB domain. resolve the mis-match.
– But, it is driven by the TOP_CLKA domain.
– Either block owner assumed incorrectly or SoC connectivity problem TOP
• Solution TOP_DATA(TOP_CLKA)
BLK_DATA(BLK_CLKB)
FF1 FF2
MYBLOCK
TOP_D
ATA BLK_DATA –
MYBLOCK
combo no
• Problem Description
– Block verification has incorrect mode-setup or the SoC setup is incorrect/inconsistent compared to the
block
• Example in Real Design
– MYBLOCK accidentally blocked real CDC issues due to constants blocking clock propagation
– MYBLOCK accidentally assumed wrong mode and picked wrong clocks
• Results of Flat Run
– Due to blocked state space block verification might be optimistic
OR
– SoC connectivity issue which can lead to illegal modes
• Results of Validation Run (Hier)
– 1 violation per over constrained port (block level had SCA, but top didn’t) space
– 1 violation per wrongly constrained port, block is in a different mode than SoC assumes
• 30 Minutes.
• In this lab you will see what mismatches look like and fix them and rerun.
• Some problems will problems in the block and others will be top level problems.
• All problems can be fixed by adding constraints.
– Bus width’s
– Internal depth of registers arrays and fifo’s
//IP level RTL
– Functionality (sync vs. async). module FIFO (inputs, outputs);
parameter width=32;
– Reset (sync vs. async vs. non-resettable) parameter depth=16;
– Etc…. //rtl code
endmodule
d1 8 FIFO
u1 8
clk
1
d2 32 FIFO
3
clk2 u2 2
© 2015 Synopsys, Inc.
Parameterized Modules
• Only the parameters that are different from the default specified in RTL need to be added to
project file.
• Flow is same an non-parameterized module.
Input SGDC
constriants.
(Non- Spyglass Abstract
parameterized) RTL Model creation Parameterized
modules Abstradct
Models
• Priority is given to –param. If there is NO matching –param, then the –defparam abstract will
be used.
• The abstract model created many times will contain bit blasted constraints
– Different behavior of different outputs.
• This is why you almost always need to generate a model for each unique set of parameters,
unless you know for sure that a parameter won’t change port width or behavior.
• Then use the “set_option dnc_param top.parameter option when generating the abstract.
• Even though the module name is the same or parameters don’t change, it is possible for
different instances of the same module to have different input requirements.
– Different set_case_analysis
– This could cause different clocks to be applied
• SpyGlass can apply a specific abstracat model to a specific instance by adding an instance list
to the sgdc –import constraint
• Some IP’s arrive early and you receive collateral (abstract models) right away.
• Some IP’s arrive late in the design process so you don’t have abstract models.
• Can’t run flat because the design is too large or will take too long.
• You can generate a dirty abstract and help the IP owner by generating the IP level constraints
using the TOP down workflow.
SpyGlass_ReadMe.pdf
SpyGlass_ReleaseNotes.pdf
• What’s new in this release. Also contains the list of incidents Fixed in this release
SpyGlass_KPNS.pdf
Console GUI
Launch Console and either
press the F1 keyboard key
or click Help > SpyGlass
Help menu item.
Linux Windows
Run the spyhelpviewer Copy the $SPYGLASS_HOME
utility from htmlhelp or doc directory to
the SPYGLASS_HOME/bin your local hard drive.
directory Run the index.html file.
SpyGlass
HTML/PDF
Help Set