AutoCons - TAU Workshop
Download
Report
Transcript AutoCons - TAU Workshop
Taming the Constraints Beast:
AutoCons
Manjeri Krishnan
Brian Borchers
Texas Instruments, Inc.
1
Agenda
Background
AutoCons Overview
Basic Concepts
Some Illustrations
Helper Scripts
Conclusion
2
“Necessity is the Mother of Invention”
Necessity
Intensely manual effort of developing timing constraints
Increasing SOC complexity
Decreasing schedules and resources
Differing requirements of analysis and optimization teams
Differing requirements of chip and subchip teams
Need for speedy and error-free constraints development
Need for efficient management and maintenance of large
amounts of constraints
Invention
AutoCons
3
Sample Target Design
1.2GHz, 28nm, 208mm2
2.7B transistors, 37.7M instances
Over 60 subchips
Flat STA signoff at chip-level
3 STA and OPT modes
Constraints
Beast
Over 1500 clock definitions
Mission mode tcl constraints
Over 44K lines at chip-level
Over 89K lines at subchip-level
4
Motivation for AutoCons
Automate constraints development
Standardize how constraints are written and developed
Subchip to Subchip
Subchip to Chip
Leverage commonality among Subchips
Distributed clock dividers, glitch-free clock muxes, etc.
SerDes, RAMs, PM, DFT
Extract Subchip and Chip constraints from same database
Abstract out details of constraints development
Share lessons learned quickly among Subchips
5
AutoCons Overview
AutoCons = Automatic Constraints Generator
~8000 line Perl program
Input = Golden Constraints INput (GCIN) file
Input is a set of multi-dimensional hash-style Perl
variables
Bottoms-up approach to constraints development
Abstracted view of constraint related objects
Subchip and Chip constraints from same Database
Automation without giving up control
6
AutoCons Overview - Flow
SubchipA
GCIN
file(s)
miss.tcl
hold.tcl
atpg.tcl
SubchipC
SubchipC
SubchipA
miss.tcl
hold.tcl
atpg.tcl
AutoCons
SubchipB
Top
miss.tcl
tftc.tcl
atpg.tcl
22K lines
300K lines
7
Basic Concepts
Keywords for pre-determined constructs
mclkport__, clkdivh__, clkmux__, etc.
Clock period variables for clock associations and
groupings
CLKn_PERIOD, TESTCLK_PERIOD, etc.
Automatic translation to chip-level
Instance-specific constraints replication
General constraints
RAM, PM, DFT, etc.
Helper scripts
Clock tracer
Subchip IO constrainer
8
Sample GCIN Entries
#-- clkdivh__chip1 (from GCIN for subchip1)
#-$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ hierpath } = "Ictl/i_pll_ctrl_clkdivctl_0/U_div/I_ti_ipg_divh";
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ srcpin } = $autocons{ ref_subchip1 }{ mclkport__pllclk1 }{ clkpin };
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ mastclk } = $autocons{ ref_subchip1 }{ mclkport__pllclk1 }{ clkname };
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ mastclk_top } = $autocons{ ref_chip1 }{ mclkpin__corepll }{ clkname };
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ clkname } = "gclk_pll_chip_clk1";
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ clkname_top } = "gclk_pll_chip_clk1";
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ clkperiod } = "\$CLK1_PERIOD";
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ divfact } = 1;
$autocons{ ref_subchip1 }{ clkdivh__chip1 }{ olddivh } = "true";
#-- VBUS clock (from GCIN for subchip2)
#-$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ hierpath } = "Idivh_clk3_clk";
$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ srcpin } = $autocons{ ref_subchip2 }{ mclkport__clk1clk }{ clkpin };
$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ mastclk } = $autocons{ ref_subchip2 }{ mclkport__clk1clk }{ clkname } ;
$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ mastclk_top } = $autocons{ ref_subchip1 }{ clkdivh__chip1 }{ clkname } ;
$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ clkname } = "gclk_clk3";
$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ clkperiod } = "\$CLK3_PERIOD";
$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ divfact } = "3";
$autocons{ ref_subchip2 }{ clkdivh__subclk3 }{ mode_top } = "both";
9
AutoCons Abstraction
CLK_DIVH
Create Clock Definitions here
Disable Timing Arcs here
Set Multicycle Exceptions here
10
Sample Instance Specification (1/2)
Two instances of ref_subchip3:
Imysc0
Imysc1
Specification in GCIN for subchip3:
$autocons{ ref_subchip3 }{ instances } = "Imysc0, Imysc1";
;#-- comma separated list of instances
;#-- (for use at chip-level)
Clock defined at ref_subchip3 level:
gclk_myclk1_clk
Corresponding clocks defined at chip level:
gclk__Imysc0__myclk1_clk
gclk__Imysc1__myclk1_clk
11
Sample Instance Specification (2/2)
Clock definition at subchip level:
create_generated_clock [get_pins Idivh_clk3_clk/I_orgate_finalnand/clk_na2_nand_0/y] \
-name gclk_clk3 \
-source [get_ports refclk1_clk] \
-master_clock mclk_clk1 \
-edges { 1 4 7 } -edge_shift { 0 0 0 } -add
Corresponding clock definitions at chip level:
create_generated_clock [get_pins Imysc0/Idivh_clk3_clk/I_orgate_finalnand/clk_na2_nand_0/y] \
-name gclk__Imysc0__clk3 \
-source [get_pins Imysc0/refclk1_clk] \
-master_clock gclk_pll_chip_clk1 \
-edges { 1 4 7 } -edge_shift { 0 0 0 } –add
create_generated_clock [get_pins Imysc1/Idivh_clk3_clk/I_orgate_finalnand/clk_na2_nand_0/y] \
-name gclk__Imysc1__clk3 \
-source [get_pins Imysc1/refclk1_clk] \
-master_clock gclk_pll_chip_clk1 \
-edges { 1 4 7 } -edge_shift { 0 0 0 } -add
12
Helper Scripts – Clock Tracer
Used to understand clocking of given netlist
Traces gate-mapped netlist to identify clock objects
and clock flow
Starts with all clock pins and traces backwards,
then forwards
Finds all clock dividers, clock muxes, and primary clock IO
(plus tieoffs, fanout stats, and control points)
Runs iteratively, taking in design-specific information
as needed
Produces a textual representation of clock flow and objects
13
Sample Clock Tracer Output
CLOCK BRANCH SRC: refclk1_clk
>> CLOCK TREE FANOUT = 259 <<
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_clkin_clockgate/tiboxv_clk_icg_icg_0/clkin (icg_f4_svt)
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_div1_dummynand1/tiboxv_clk_na2_nand_0/a (ctnand2_f8_dh_svt)
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_div1_dummynand1/tiboxv_clk_na2_nand_0/b (ctnand2_f8_dh_svt) **Logic 1**
<SNIP>
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_clksel_divideone_clockgate/tiboxv_clk_icg_inv_icg_0/clkin (icg_f4_svt)
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_mx_finalnand/tiboxv_clk_na2_nand_0/a (ctnand2_f8_dh_svt)
>> CLOCK TREE FANOUT = 25188 <<
Idbg/Idbg_wrap/Idbg/I_dvs/I_ct_tbr/I_clkgen/I_sys/U0_FIRSTGCM/tiboxv_clk_icg_icg_0/clkin (icg_f4_svt)
Idbg/Idbg_wrap/Idbg/I_dvs/I_ct_tbr/I_clkgen/I_sys/U0_SECONDGCM_0/tiboxv_clk_icg_icg_0/clkin (icg_f4_svt)
Idbg/Idbg_wrap/Idbg/I_dvs/I_ct_tbr/I_tbrI_mem_ctl/I_rd_clk_mx2/tiboxv_clk_mx2_mux_0/b (ctmux2_f6_dh_svt)
>> CLOCK TREE FANOUT = 24 <<
CLOCK BRANCH SRC: Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_mx_finalnand/tiboxv_clk_na2_nand_0
Idbg/Idbg_wrap/Idbg/I_dvs/I_mipi_stm/U0_<snip>/Itiboxh_clk_mx2/tiboxv_clk_mx2_mux_0/b (ctmux2_f6_dh_svt)
CLOCK BRANCH SRC: Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_clkin_clockgate/tiboxv_clk_icg_icg_0
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_divh_clkoutreg/tiboxv_clk_reg_apncn_reg_0/clk (ctsdffbqs_f4_dh_svt)
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_orgate_nanda/tiboxv_clk_na2_nand_0/a (ctnand2_f8_dh_svt)
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_orgate_nanda/tiboxv_clk_na2_nand_0/b (ctnand2_f8_dh_svt) **Control Branch**
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_orgate_finalnand/tiboxv_clk_na2_nand_0/b (ctnand2_f8_dh_svt)
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_clksel_divout_clockgate/tiboxv_clk_icg_inv_icg_0/clkin (icg_f4_svt)
Idbg/Idbg_wrap/Idivh_clk3_clk/I_c_ti_ipg_mx_finalnand/tiboxv_clk_na2_nand_0/b (ctnand2_f8_dh_svt)
>> CLOCK TREE FANOUT = 25188 <<
14
Helper Scripts – Subchip IO Constrainer
Used to constrain subchip IO
Runs on gate-mapped netlist with AutoCons constraints
loaded
Traces netlist to associate each input and output port
with correct clocks
Applies IO constraint as a predetermined fraction of
clock cycle time
Handles situation of an input (output) port that is
captured (driven) by multiple clocks
15
IO Constraining Issue
iport
vclk1
clk1
vclk2
/2
clk2
set_input_delay vclk1_budget –clock vclk1 iport
set_input_delay vclk2_budget –clock vclk2 iport
set_false_path –from vclk1 –through iport –to clk2
set_false_path –from vclk2 –through iport –to clk1
16
Conclusion
Automation is the way forward
AutoCons is here to stay (4 successful SOCs so far)
Standardization is a key enabler for automation
Methodology changes to enable more automation
17
18
Backup Slides
19
STA Modes – New 3-Mode Strategy
• miss.tcl
– At-speed setup
– Covers Mission and TFT-Capture setup timing
• hold.tcl
– All hold
– Covers Mission, TFT-Capture, and ATPG hold
• atpg.tcl
– ATPG setup
– Covers ATPG shift setup
20
STA Modes – Block versus Top
Mission setup
miss.tcl
Mission hold
miss.tcl
TFT-Capt setup
hold.tcl
TFT-Capt hold
tftc.tcl
ATPG-Shft setup
atpg.tcl
ATPG-Shft hold
atpg.tcl
ATPG-Capt hold
TFT-Capt = Transition (or Delay) Fault Test Capture
21
Fully Automatic IO Constraining
• Clocking configurations that can be fully constrained automatically
eag_cpu, eag_l2_tbnk
mclk
mclk
fclk
bcp, bcr, fftc, intc, qm, tac, vcp
mclk
divh
gclk
mclk
divh
gclk
fclk
22
So What’s in AutoCons Constraints?
• Clock definitions – divh, divp, clkmux, etc.
• Clock lists and Clock-to-Clock exceptions (set_clock_groups)
• Standard constants - clock periods, object attribute names
• Standard variables and collections:
– Collections: clkports, iports, oports
– Path Groups: IPATH, OPATH, FTPATH
– Default IO delay variables: default__<clkname>__io_delay
• Common timing exceptions:
– mode-related case settings
– divh, clkmux related timing exceptions
– DFT, RAM, PM related timing exceptions
• IO delay constraints where possible
23