Հատակագծում
Հատակագծումը որոշում է չիպի ֆիզիկական կմախքը, նախքան որևէ ստանդարտ բջիջ տեղադրվի. core-ի չափն ու aspect ratio-ն, թե որտեղ են նստում hard macro-ներն ու IP block-երը, թե որտեղ են անցնում սնուցման strap-երը (տես Power Integrity), և որ physical-only բջիջները պետք է նախապես պլանավորվեն, որպեսզի տեղաբաշխումը, CTS-ը և երթուղավորումը բոլորն ունենան legal, արտադրելի ելակետ։
Կտտացրեք տիրույթի վրա՝ ներքևի տեքստի այդ մասին անցնելու համար։ Հատակագիծը ավելին է, քան macro տեղաբաշխումը. boundary/end-cap բջիջները փակում են ամեն row-ն ու block edge-ը, tap բջիջի grid-ը կանխում է latch-up-ը, իսկ spare բջիջի bank-երը բաշխվում են հետագա metal-only ECO-ների համար։
Core sizing, utilization և macro տեղաբաշխում
Core տարածքը չափավորվում է target utilization-ից ելնելով — core size ≈ (ստանդարտ բջիջի area + macro area + blockage area) / utilization — տիպիկ target-երով 70–80%-ի շուրջ։ Utilization-ը շատ բարձր հրելով՝ հետևում են երթուղավորման congestion-ը, ժամանակային վատացումը և DRC violation-ները. շատ ցածրը վատնում է բյուրեղիկ տարածք և ավելացնում wire length։ Hard macro-ները (SRAM-ներ, analog IP) տեղադրվում են առաջինը, քանի որ ստանդարտ բջիջի տեղաբաշխումը պլանավորվում է դրանց շուրջ՝ առաջնորդվելով I/O-ի և այլ macro-ների հետ connectivity/adjacency-ով, orientation-ով (flip/rotate անելով՝ pin-երը հավասարեցնելու համար), և ստանդարտ բջիջի row-երի ու երթուղավորման համար մաքուր channel-եր թողնելով։ Macro halo-ն keep-out margin է ֆիքսված macro-ի շուրջ, որտեղ ոչ մի այլ macro կամ ստանդարտ բջիջ չի կարող տեղադրվել՝ երաշխավորելով երթուղավորման/DRC clearance. այն շարժվում է macro-ի հետ, եթե վերջինս տեղափոխվի։ Տեղաբաշխման/երթուղավորման blockage-ները (hard, soft, partial կամ layer-specific երթուղավորման blockage-ներ) պահուստավորում են տիրույթներ հետագա օգտագործման համար — օրինակ՝ պաշտպանելով տարածք տակտային ազդանշանի mesh-ի կամ սնուցման strap-ի համար, նախքան այնտեղ որևէ բան տեղադրվի։
Design-rule compliance տեղաբաշխումից առաջ (“TCIC”-ոճի ստուգումներ)
Որոշ հոսքեր advanced node-երում global տեղաբաշխման մեկնարկից առաջ run են անում նախա-տեղաբաշխման expert/compliance ստուգումների մի դաս — ստուգելով, օրինակ, որ հատակագծի պլանավորված tap բջիջի grid-ն իրականում բավարարում է foundry-ի max-distance-to-tap կանոնը, նախքան իրական բջիջները գոյություն ունենան դրա դեմ ստուգելու համար։ Եթե ձեր հոսքի փաստաթղթերն այս ամենը կոչում են կոնկրետ ներքին acronym-ով, վերաբերվեք դրան որպես ստուգումների այս ընդհանուր կատեգորիայի. DRC-ոճի sanity pass հատակագծի physical-only բջիջ grid-ի վրա (tap/boundary spacing)՝ run արված տեղաբաշխումից առաջ, ոչ թե functional logic-ի ստուգում։ Դրա տակ ընկած մեկ կանոնը, որ ունիվերսալ և հաստատուն է, ստորև նկարագրված tap բջիջի distance rule-ն է։
Boundary (end-cap) բջիջներ
Սովորական ստանդարտ բջիջները գծված են՝ ենթադրելով երկու կողմից հարևանի հետ abutment — դրանց well, diffusion և poly շերտերը նախատեսված են շարունակվելու դեպի այն, ինչ նստած է կողքին։ Row-ի կամ block-ի բառացի եզրին տեղադրված բջիջը կբացահայտեր չփակված well/diffusion boundary՝ առաջացնելով well-spacing violation-ներ, կախված active diffusion և poly-density/լիտոգրաֆիա loading խնդիրներ։ Boundary (end-cap) բջիջները physical-only բջիջներ են՝ առանց logic ֆունկցիայի, տեղադրված ամեն ստանդարտ բջիջի row-ի երկու ծայրերին և block/macro boundary-ներում, որոնք ապահովում են ճիշտ well/diffusion termination և dummy poly միատեսակ լիտոգրաֆիա loading-ի համար։ Դրանք ֆիքսված են (placer-ը երբեք չի շարժում) և միանում են միայն սնուցում/ground-ին։
Tap բջիջները և max-distance-to-tap rule-ը
Bulk CMOS-ն ունի ներհատուկ parasitic PNPN thyristor կառուցվածք, որ ձևավորվում է հարակից NMOS/PMOS սարքերով։ Եթե trigger արվի noise-ով կամ transient-ով, այս կառուցվածքը կարող է latch անել low-impedance short-ի մեջ VDD-ից GND — latch-up։ Tap բջիջները կապում են N-well-ը VDD-ին և P-substrate/P-well-ը VSS-ին կանոնավոր ինտերվալներով, և latch-up holding հոսանքը ուժեղ կերպով կախված է տրանզիստորի և իր ամենամոտ tap-ի միջև well/substrate resistance-ից. որքան հեռու է տրանզիստորը tap-ից նստած, այնքան բարձր է այդ resistance-ը, և այնքան փոքր է trigger հոսանքը, որ անհրաժեշտ է parasitic thyristor-ը պահելու համար։ Foundry-ի Design Rule Manual-ը սահմանում է առավելագույն թույլատրելի հեռավորությունը ցանկացած տրանզիստորից մինչև իր ամենամոտ tap (սովորաբար 15–30 µm-ի կարգի, ավելի խիստ advanced node-երում)՝ հենց այս resistance-ը սահմանափակելու համար։ Քանի որ ստանդարտ բջիջների մեծ մասը ներկառուցված tap չի պարունակում, tap բջիջները տեղադրվում են որպես առանձին, կանոնավոր staggered/checkerboard grid ամբողջ core-ի վրայով հատակագծման ընթացքում — տեղաբաշխումից առաջ — որպեսզի ուր էլ իրական բջիջները հետո վայրէջք կատարեն, բյուրեղիկի ամեն կետ երաշխավորված լինի կանոնի սահմաններում։
Spare բջիջներ ECO-ի համար
Ուշ գտնված bug-ը — signoff-ում, կամ ավելի վատ՝ post-silicon bring-up-ում — չափազանց թանկ է ուղղել full re-սինթեզով և re-place-and-route-ով, և այն ռիսկ է պարունակում նոր ֆոտոդիմակ set ստորին (diffusion/poly/contact) շերտերի համար։ Spare բջիջի bank-երը չմիացված (tied-off) logic gate-եր են — սովորաբար NAND, NOR, inverter-ների, buffer-ների, AOI/OAI complex gate-երի, mux-երի և flip-flop-երի խառնուրդ՝ տարբեր drive strength-երով — նախապես տեղադրված և բաշխված ամբողջ հատակագծի վրայով այս փուլում։ Երբ ուշ fix-ի կարիք կա, ECO tool-ը հայտնաբերում է մոտակա spare gate-երը և rewire է անում միայն վերին metal layer-ները՝ patch անելով նոր logic ֆունկցիան՝ խուսափելով թանկ ստորին ֆոտոդիմակ layer-ների ցանկացած փոփոխությունից։ Ավելի առաջադեմ հոսքերն օգտագործում են metal-configurable gate-array spare բջիջներ (անորոշ տրանզիստորի մակարդակի primitive-ներ, որոնք վերածվում են NAND, NOR, XOR և այլնի զուտ իրենց metal/via միակցումներով ECO-ի ժամանակ), որոնք ավելի շատ logic ճկունություն են pack անում մեկ միավոր տարածքի համար և խուսափում են նախապես սահմանված, չօգտագործված spare gate-երի idle արտահոսքից։ Spare bank-երը բաշխվում են այլ ոչ թե կենտրոնացվում հենց այն պատճառով, որ ուր էլ հետագայում fix-ի կարիք լինի, spare gate-երը ֆիզիկապես մոտ լինեն՝ նվազագույնի հասցնելով ECO-ի երթուղավորման detour-ը և արդեն փակված ժամանակային խանգարումը։
Տեղաբաշխում
Տեղաբաշխումը վերագրում է legal (x, y) դիրք ամեն ստանդարտ բջիջի՝ վերևում սահմանված հատակագծի ներսում։ Այն աշխատում է երեք փուլով — global տեղաբաշխում, detailed տեղաբաշխում և legalization — և հենց այստեղ է, որ հոսքի տակտային ազդանշանի ժամանակային risk-ի առաջին բացահայտ արտահայտումը՝ SDC տակտային ազդանշանի uncertainty margin-ը, դառնում է load-bearing։
Global տեղաբաշխում
Թուլացված, շարունակական օպտիմալացում (force-directed / analytic / electrostatics-based մեթոդներ) տարածում է բոլոր բջիջները core-ի վրայով՝ մոտավորապես բավարարելով density target-երը, նվազագույնի հասցնելով half-perimeter wirelength-ը (HPWL) որպես ժամանակային և էներգասպառման գերիշխող proxy — դեռ առանց legal row-երի կամ zero overlap-ի enforce անելու։
Detailed տեղաբաշխում
Ճշգրտում է global լուծումը՝ օգտագործելով ավելի ճշգրիտ local model-ներ և իրական ժամանակային arc-եր, հրելով բջիջները near-legal դիրքեր՝ local congestion-ն ու ժամանակային փակումը լուծելու համար՝ global արդյունքից նվազագույն displacement-ով։
Legalization
Վերջնական snapping քայլը. բջիջները շարժվում են legal site row-երի վրա՝ zero overlap-ով, ճիշտ row alignment-ով և ճիշտ սնուցման rail orientation-ով (flip անելով abutment-ի համար)՝ նվազագույնի հասցնելով total/maximum displacement-ը արդեն near-legal detailed տեղաբաշխումից։
Քանի որ հում wirelength minimization-ը չի երաշխավորում routability կամ ժամանակային closure, placer-ները base objective-ի վրա երկու բան են ավելացնում. congestion estimation (կանխատեսված երթուղավորման demand ընդդեմ track supply-ի ամեն տիրույթի համար՝ տեղեկացնելով white-space allocation-ը) և ժամանակային-driven օպտիմալացում, առավել հաճախ հանգույցների weighting-ի միջոցով — critical-path հանգույցներին ավելի շատ weight տալով wirelength objective-ում, քանի որ full STA-in-the-loop տեղաբաշխումը ճշգրիտ է, բայց թանկ։ Հետագայում, փոքր incremental (ECO) տեղաբաշխում-ները ավելացնում, հեռացնում, resize կամ հրում են մի բուռ բջիջ՝ ուղղելու կոնկրետ violation՝ առանց խանգարելու արդեն փակված ժամանակային closure-ը և congestion-ը այլուր։
SDC տակտային ազդանշանի uncertainty տեղաբաշխման փուլում
set_clock_uncertainty-ն կիրառում է ժամանակային margin setup և/կամ hold ստուգումների համար տակտային ազդանշանի համար, և այն մեկ թվի մեջ է փաթեթավորում երեք ֆիզիկապես տարբեր էֆեկտ. տակտային ազդանշանի jitter (period-to-period կամ cycle-to-cycle շեղում PLL/տակտային ազդանշանի source-ից), տակտային ազդանշանի skew (arrival time-ի տարածական variation sequential element-ների վրայով) և ընդհանուր margin այն էֆեկտների համար, որոնք այլ կերպ մոդելավորված չեն։ Setup-ը և hold-ը ստանում են տարբեր արժեքներ — setup uncertainty-ն հանվում է data-required time-ից (խստացնելով launch-to-capture window-ը), hold uncertainty-ն ավելացվում է (լայնացնելով hold window-ը) — արդյունաբերության տարածված rule of thumb-ը սկսվում է տակտային ազդանշանի period-ի մոտ 10%-ից setup-ի համար և մոտավորապես 5% hold-ի համար՝ ճշգրտվելով, երբ իրական data-ն արդեն գոյություն ունի։
Pre-CTS, իրական տակտային ազդանշանի ծառ գոյություն չունի, ուստի SDC uncertainty թիվը placeholder է՝ փաթեթավորելով ակնկալվող skew-ն ու jitter-ը միասին։ Post-CTS tool-ը հաշվարկում է իրական, path-specific skew propagated tree-ից, ուստի uncertainty-ն սովորաբար փոքրանում է հիմնականում jitter-ի գումարած մնացորդային margin-ի։
Clock Tree Synthesis
CTS-ը միացնում է տակտային ազդանշանի source-ը ամեն sequential element-ի տակտային ազդանշանի pin-ին buffer-ների/inverter-ների և երթուղավորման կալիբրված network-ով։ Այն միանգամից optimize է անում չորս զուգակցված objective. skew (arrival-time-ի տարբերություն sequential element-ների միջև — նպատակը փոքր և վերահսկվող է, ոչ թե zero, քանի որ ամեն flop-ի միաժամանակյա switching-ը կսկսնակեր IR drop և di/dt noise), insertion հապաղում / latency (root-to-sink հապաղում — բավական, որ hold-ի համար ապահով լինի, հնարավորինս քիչ՝ էներգասպառումը խնայելու համար), transition/slew (maximum-transition design rule ամեն branch-ում, որպեսզի ոչ մի segment չափազանց դանդաղ չլինի գրադարանի characterized միջակայքի համար) և useful skew (միտումնավոր arrival time-ը անհավասարակշռելով, որպեսզի ժամանակային պահուստ ունեցող path-ը «փոխ է տալիս» ժամանակ հարակից critical path-ին)։ Տակտային ազդանշանի network-ը սովորաբար նշվում է որպես չիպի դինամիկ էներգասպառման ամենամեծ միակ աղբյուրը — հաճախ ընդհանուր դինամիկ էներգասպառման 30–50%+ — քանի որ ամեն տակտային ազդանշանի հանգույց toggle է անում ամեն cycle՝ անկախ նրանից՝ downstream logic-ը օգտակար աշխատանք է կատարում, թե ոչ, ինչը մոտիվացնում է ստորև գրեթե ամեն ինչ։
Design-ում տակտային ազդանշանների տեսակները
| Տակտային ազդանշանի տեսակ | Ինչ է դա |
|---|---|
| Functional / system տակտային ազդանշան | Առաջնային տակտային ազդանշանը off-chip oscillator-ից կամ on-chip PLL-ից — root SDC create_clock-ը, որից մնացած ամեն ինչ բխում է |
| Generated տակտային ազդանշան | Divide, multiply կամ invert արված master տակտային ազդանշանից (օր. divider chain, DDR half-rate տակտային ազդանշան). հայտարարվում է create_generated_clock -source ... -divide_by N-ով, որպեսզի իր waveform-ը բխի, ոչ թե անկախ սահմանվի |
| Gated տակտային ազդանշան | Տակտային ազդանշան, որ անցնում է clock-gating logic-ով (ICG բջիջ) նախքան flop-երի կլաստեր հասնելը — տես clock gating ստորև |
| Virtual տակտային ազդանշան | SDC տակտային ազդանշան, որ կցված չէ որևէ ֆիզիկական pin-ի, օգտագործվում է զուտ որպես I/O ժամանակային reference — խորությամբ ընդգրկված է Interface Paths & Virtual տակտային ազդանշաններ-ում |
| Test / scan տակտային ազդանշան | Առանձին (հաճախ ավելի դանդաղ կամ mux արված) տակտային ազդանշանի path, որ օգտագործվում է DFT shift mode-ում. capture mode-ը կիրառում է full-speed functional տակտային ազդանշան at-speed testing-ի համար — տես Scan & ATPG |
| Asynchronous domains | Տակտային տիրույթ հատող path-եր առանց ֆիքսված phase relationship-ի, բացառված սովորական setup/hold վերլուծությունից set_clock_groups -asynchronous-ի միջոցով և մշակված synchronizer կառուցվածքներով, ոչ թե CTS skew control-ով |
Clock gating-ը մանրամասն
Clock gating-ը անջատում է toggle-ը դեպի idle logic՝ դինամիկ էներգասպառումը կրճատելու համար — արդյունաբերության թվերը սովորաբար նշում են 20–40% ընդհանուր դինամիկ էներգասպառման խնայողություն արդյունավետ gating-ից։ Naive իրականացումը AND է անում տակտային ազդանշանը ուղղակիորեն combinational enable-ի հետ, բայց այդ enable-ը կարող է state փոխել տակտային ազդանշանի high phase-ի կամայական կետում (այն ժամանակային relationship չունի տակտային ազդանշանի edge-ի հետ)։ Եթե այն ընկնի, երբ տակտային ազդանշանը high է, AND output-ը ընկնում է pulse-ի կեսին — runt glitch հասնում է downstream տակտային ազդանշանի pin-երին՝ ռիսկելով spurious capture։ Ուղղումն է Integrated Clock Gating (ICG) բջիջ-ը. negative-level-sensitive latch-ը capture է անում enable-ը՝ սնելով AND gate-ը տակտային ազդանշանով։ Latch-ը թափանցիկ է միայն, երբ տակտային ազդանշանը low է, և պահում է հենց որ տակտային ազդանշանը rise է անում, ուստի raw enable-ի ցանկացած transition տակտային ազդանշանի high phase-ի ընթացքում անտեսանելի է latch output-ում — AND gate-ի երկրորդ input-ը երաշխավորված stable է ամբողջ high phase-ի ընթացքում։ Արդյունքը միշտ կամ լրիվ, մաքուր pulse է, կամ լիովին ճնշված, երբեք ոչ մասնակի pulse։
Latch-ի output-ը կարող է փոխվել միայն, երբ տակտային ազդանշանը low է, ուստի enable-ը միշտ stable է տակտային ազդանշանի high phase-ի ընթացքում, երբ հասնում է AND gate-ին — երաշխավորելով glitch-free gating։
ICG բջիջները սովորաբար տեղադրվում են functional sub-tree-ի root-ի մոտ — որոշ common buffering-ից հետո, բայց մինչև fanout-ը դեպի leaf flop-երի ամբողջ կլաստեր — ուստի մեկ enable-ը toggle անելով անջատում է ամբողջ downstream sub-tree-ն միանգամից՝ առավելագույնի հասցնելով էներգասպառման խնայողությունը ամեն gating որոշման համար։ Hierarchical design-երն այս ամենը շերտավորում են. կոպիտ top-level gate-ը կարող է անջատել ամբողջ subsystem, մինչ ակտիվ subsystem-ի ներսում ավելի նուրբ sub-module gate-երը ավելացնում են լրացուցիչ granularity։ Enable signal-ն ինքը պետք է settle անի նախքան gating տակտային ազդանշանի active edge-ը, ինչը փաստորեն setup-ի նման ժամանակային requirement է launch path-ի վրա դեպի gated sub-tree։
Leaf-level տակտային ազդանշանի distribution
CTS-ը նախ կլաստերացնում է (հաճախ միլիոնավոր) sequential leaf բջիջները ֆիզիկապես local խմբերի, որպեսզի ամեն կլաստեր drive արվի ընդհանուր local buffer-ով սահմանափակ wire length-ի վրայով — clustering-ը proximity- և ժամանակային-aware է, տեղեկացված տեղաբաշխման data-ով, քանի որ leaf-cluster capacitance-ը գերիշխում է total տակտային ազդանշանի ծառի capacitance-ը։ Latency-ն ու skew-ն ապա հավասարակշռվում են level-by-level. դասական ալգորիթմական հիմքը Deferred-Merge Embedding (DME)-ն է, որ հաշվարկում է ներքին merge point-երի zero-skew (կամ bounded-skew) embedding-ներ, որոնք նվազագույնի են հասցնում total wirelength-ը հապաղման model-ի ներքո, և ժամանակակից commercial CTS-ը այս ընտանիքի ժառանգն է՝ ընդլայնված useful-skew-ով և dynamically-updated RC extraction-ով։ Buffer-ները տեղադրվում են level-by-level՝ վերականգնելու տակտային ազդանշանի edge-ը և բավարարելու max-transition rule-ը ամեն branch-ում՝ sized ամեն branch-ի համար՝ ելնելով downstream load-ից։ Քանի որ տակտային ազդանշանի հանգույցի վրա glitch-ը սպառնում է ամեն downstream flop-ի, root/trunk տակտային ազդանշանի հանգույցները route արվում են non-default երթուղավորման rules (NDR)-ով — default-ից ավելի լայն լարեր և spacing — և հաճախ shielded են հարակից VDD/VSS լարերով՝ coupling capacitance-ը սահմանափակելով դեպի quiet, well-modeled հանգույց. leaf/sink-level հանգույցներն ավելի հաճախ թողնվում են default rules-ի վրա՝ երթուղավորման resource-ներ խնայելու համար։ «Skew group»-ի ներսում (flop-երի հավաքածու, որ պետք է հավասարակշռվեն միասին) tool-ը միտումնավոր անհավասարակշռում է arrival time-երը՝ setup-ը թուլացնելու critical path-ի վրա, մինչ skew growth-ը սահմանափակելով, որ նոր hold violation-ներ չստեղծի, և շատ մեծ fanout node-երի համար այն տեղադրում է intermediate buffer stage-եր և բաժանում է fanout-ը հավասարակշռված sub-branch-երի վրա։
Տակտային ազդանշանի ծառի topology-ներ
Տակտային ազդանշանի distribution-ի չորս ընտանիք, յուրաքանչյուրը տարբեր կերպ է փոխզիջում skew-ը, էներգասպառումը, area-ն և gating ճկունությունը։
| Topology | Skew | Էներգասպառում/area cost | Տիպիկ օգտագործում |
|---|---|---|---|
| Conventional / buffered tree | Ալգորիթմորեն վերահսկվող, հարմարվում է ցանկացած հատակագծի | Ամենացածրը — near-minimal wirelength | Default ASIC block-երի մեծ մասի համար |
| H-tree | Near-zero երկրաչափական կառուցվածքով | Ավելի բարձր — սիմետրիան պարտադրվում է զուտ wirelength minimization-ի փոխարեն | Կանոնավոր sink տոպոլոգիաներ. SRAM/register-file array-ներ, FPGA global տակտային ազդանշաններ |
| Multi-tap / hierarchical | Վերահսկվող ամեն domain-ի համար. global skew-ը կառավարվում է tap point-երում | Չափավոր — global trunk-ը ծանր buffered/NDR է | Մեծ hierarchical SoC-ներ մի քանի block/domain-ով |
| Տակտային ազդանշանի mesh | Չափազանց ցածր, խիստ variation-tolerant | Ամենաբարձրը — շատ redundant driver-ներ, լայն grid metal, դժվար է gate անել | Flagship CPU/GPU core-եր, մեկ գերիշխող տակտային տիրույթ |
Երթուղավորում
Երթուղավորումը միացնում է ամեն տեղադրված բջիջն ու macro-ն metal interconnect-ով՝ փուլերով. global երթուղավորում-ը բաժանում է չիպը tile-երի կոպիտ grid-ի և վերագրում ամեն հանգույցի կոպիտ path և layer sequence («երթուղավորման guides»)՝ ստուգելու ընդհանուր routability-ն և հայտնաբերելու congestion-ը նախքան ճշգրիտ shape-երին commit անելը. track assignment-ը ապա ընտրում է կոնկրետ track-ը ամեն տիրույթում, որ լարը զբաղեցնում է (ավելի ու ավելի կարևոր advanced node-երում dense non-default rule-երով). detailed երթուղավորում-ը վերածում է guide-երը ճշգրիտ geometry-ի — ճշգրիտ coordinate-ներ, width-եր, via-ներ, layer transition-ներ — բավարարելով foundry-ի rule set-ի ամբողջությունը. և via insertion-ը թե՛ մշակում է սովորական layer transition-ները, թե՛ տեղադրում redundant/double via-ներ զուտ contact resistance-ը կրճատելու և պիտանի ելքը բարելավելու համար։
Ինչ է ստուգվում երթուղավորման ընթացքում և հետո
DRC (Design Rule Check)
Minimum width, minimum spacing, minimum area (կարճ jog segment-երն ու via-adjacent metal-ը տարածված post-route offender-ներ են) և via enclosure — run արված post-route (և incrementally detailed երթուղավորման ընթացքում)՝ օգտագործելով signoff tool-եր, ինչպիսիք են Calibre, Hercules կամ Pegasus/Assura։
Antenna rules
Երկար isolated metal-ը, միացված միայն gate-ի, հավաքում է charge plasma փորագրման ընթացքում նախքան իր պաշտպանիչ diode/well tie-ի միանալը — ռիսկելով gate-oxide breakdown։ Ուղղվում է gate-ի մոտ antenna diode insertion-ով, կամ run-ը jumper-ներով բարձր layer-ի վրա և հետ ցած բաժանելով, որպեսզի ոչ մի փորագրման step բավական charge չկուտակի։
Signal integrity / crosstalk
Coupling capacitance-ը հարակից լարերի միջև առաջացնում է crosstalk հապաղում (տեղաշարժելով victim հանգույցի arrival time-ը ավելի վաղ կամ ուշ՝ ըստ switching alignment-ի) և crosstalk noise (quiet victim-ի վրա glitch, որ սխալ ընթերցվում է որպես transition)։ SI-aware STA-ն առանձնացնում է coupling-ը ground capacitance-ից և back-annotate է անում delta-հապաղում ուղղումներ ամեն arc-ի համար։
Double/multi-patterning coloring
Մոտավորապես 20nm-ից ցածր, tight-pitch layer-ները պահանջում են երկու կամ ավելի լիտոգրաֆիա exposure («color-ներ»). տոպոլոգիա decomposition-ը պետք է վերագրի color-ներ, որ same-color feature-ները երբեք չխախտեն spacing-ը — two-coloring-ը լուծելի է polynomial time-ում, բայց triple/quad-pattern decomposition-ը NP-complete է, ուստի detailed router-ները advanced node-երում պետք է coloring-aware լինեն route generation-ի ընթացքում, ոչ միայն դրանից հետո։
IR drop / EM re-check
Post-route parasitic extraction-ը տալիս է իրական resistance սնուցման և signal հանգույցների համար՝ սնելով IR-drop-ը և electromigration signoff-ը իրական route արված geometry-ով pre-route գնահատականների փոխարեն — տես EMIR Analysis՝ ամբողջական signoff մեթոդաբանության համար։
LVS + final ժամանակային closure
Layout-vs-schematic-ը հաստատում է, որ ոչ մի short/open/mismatch չի ներմուծվել երթուղավորմամբ կամ ECO-ներով։ Full parasitic extraction-ը (SPEF) փոխարինում է ավելի վաղ wireload/global-route գնահատականներին վերջնական, ամենաճշգրիտ signoff STA pass-ի համար նախքան tapeout։
Ինչպես է uncertainty-ն զարգանում փուլից փուլ
Ընդհանուր օրինաչափությունը. STA margin-ը գոյություն ունի անհայտ ինֆորմացիան ծածկելու համար, և ամեն հաջորդ փուլ փոխարինում է ավելի վաղ անհրաժեշտ ենթադրությունը չափված կամ extracted իրականությամբ։
| Փուլ | Ինչ տեսք ունի տակտային ազդանշանի model-ը | Ինչ է ներկայացնում uncertainty-ն |
|---|---|---|
| Pre-CTS (տեղաբաշխում) | Ideal տակտային ազդանշան — ամեն տակտային ազդանշանի pin ենթադրվում է միաժամանակյա, zero network հապաղում | Մեկ հարթ, պահպանողական թիվ՝ փաթեթավորելով գնահատված skew + jitter + margin (իրական tree չկա skew հաշվարկելու համար) |
| Post-CTS | Propagated (իրական) տակտային ազդանշանի ծառ իրական topology-ով և buffering-ով | Skew այժմ հաշվարկվում է explicitly, path-by-path, իրական network-ից — uncertainty-ն փոքրանում է հիմնականում jitter + ավելի փոքր residual/CTS-tool margin |
| Post-route | Fully extracted տակտային ազդանշանի և data հանգույցներ (իրական SPEF), AOCV/POCV derating՝ օգտագործելով իրական ֆիզիկական հեռավորություն և logic depth | Ավելի խստացված — derate-ները այժմ data-driven են իրական geometry-ով, ոչ թե մեկ blanket տոկոսով, և signoff STA-ն run է անում առկա ամենաճշգրիտ model-ներով բոլոր PVT corner-ների վրայով |
Սա նույն սկզբունքն է pessimism-reduction տեխնիկաների հետևում, ինչպիսիք են common-path-pessimism removal-ը (CRPR) և տակտային ազդանշանի network pessimism removal-ը — վաղ-փուլի margin-ները ճանաչվում են որպես անհրաժեշտաբար պահպանողական, և հոսքը ակտիվորեն խստացնում է դրանք, երբ ավելի լավ data-ն հասանելի է դառնում՝ առանց անվտանգությունը զոհելու։
Fillers & Decaps
Երբ տեղաբաշխումը, CTS-ը և երթուղավորումը վերջնականացվում են, ամեն ստանդարտ բջիջի row-ում մնում են դատարկ բացեր։ Երկու տեսակի ոչ-functional (կամ ոչ զուտ-functional) բջիջներ լցնում են դրանք։
Երկու բջիջ տեսակներն էլ զբաղեցնում են մնացած row տարածքը առանց signal pin-երի — միայն սնուցում/ground — և տեղադրվում են վերջինը, երբ իրական տեղաբաշխումն ու երթուղավորումը վերջնականացվում են։
Filler-ներ
Filler բջիջները ոչ-functional ստանդարտ բջիջներ են — ոչ ժամանակային arc, ոչ signal pin — shaped, որ համապատասխանեն գրադարանի row height-ին և site grid-ին, որպեսզի տեղավորվեն մնացած տարածքի մեջ։ Դրանք գոյություն ունեն երեք ֆիզիկական/manufacturing պատճառով. (1) well/diffusion continuity — իրական ստանդարտ բջիջի տոպոլոգիան ենթադրում է, որ իր N-well/P-well-ը և diffusion-ը շարունակվում են դեպի հարևան. չլցված բացը թողնում է այդ layer-ները ընդհատված՝ առաջացնելով DRC violation-ներ և well-proximity effect-ներ, որ կարող են shift անել threshold լարումը մոտակա իրական բջիջներում. (2) density-rule compliance CMP-ի համար — chemical-mechanical polishing-ի որակը զգայուն է poly/diffusion/metal-ի local pattern density-ի հանդեպ, և foundry-ները պարտադրում են minimum (և maximum) density window ամեն layer-ի համար. դատարկ row-երը կստեղծեին low-density տիրույթներ՝ առաջացնելով non-planar CMP և պիտանի ելքի loss. (3) սնուցման rail continuity — filler-ները կրկնում են VDD/VSS rail segment-ները, որպեսզի rail-ը մնա ֆիզիկապես և էլեկտրապես շարունակական row-ի վրայով նույնիսկ այնտեղ, որտեղ functional բջիջ գոյություն չունի։
Decap-ներ
Decap (decoupling capacitor) բջիջները մասնագիտացված filler ենթադաս են, որ իրականացնում են իրական capacitor VDD-ի և VSS-ի միջև նույն footprint-ի ներսում՝ սովորաբար օգտագործելով MOS տրանզիստորի gate capacitance։ Երբ շատ մոտակա բջիջներ switch են անում միաժամանակ, local սնուցման grid-ը պետք է մատակարարի հոսանքի spike. քանի որ grid-ն ունի վերջավոր resistance և inductance, այդ spike-ը առաջացնում է transient լարման droop (V = IR + L·di/dt) — dynamic IR drop — որ մաշում է setup/hold margin-ը հենց switching edge-երում, որոնք STA-ն ենթադրում էր nominal VDD-ի վրա։ Decap բջիջները գործում են որպես local charge reservoir-ներ՝ պահելով և ակնթարթորեն ազատելով charge՝ damp անելու այդ droop-ը ավելի արագ, քան սնուցման grid-ը միայնակ կարող է արձագանքել, ուստի դրանք տեղադրվում են high-switching-activity logic-ի մոտ, որտեղ effectiveness-ը (որ ընկնում է grid impedance/distance-ի հետ) ամենակարևորն է։
Coarse ընդդեմ fine-grained decap-ի — իրական երկաստիճան ռազմավարություն
Դա խիստ «ամեն ինչ տեղադրել վերջում» չէ։ Large discrete decap macro-ները միտումնավոր տեղադրվում են հատակագծման ընթացքում՝ մեծ IP block-երի կամ հայտնի high switching activity-ի տիրույթների մոտ՝ որպես noise-aware հատակագծման մաս — պլանավորված վաղ, քանի որ կոպիտ, global droop mitigation-ը շահում է macro/IP տեղաբաշխումը նախապես իմանալուց (հրապարակված արդյունքները նշում են noise-aware հատակագծումը կրճատում է peak noise-ը մինչև ~40%-ով և ընդհանուր decap area budget-ը մինչև ~21%-ով ընդդեմ ամեն ինչ post-տեղաբաշխում անելու)։ Գործնական երկքայլ հոսք. նախապես տեղադրել uniform decap budget (օր. մոտավորապես area-ի 6%-ը) նախքան ստանդարտ բջիջի տեղաբաշխումը baseline ծածկույթի համար, ապա հետևել incremental fine-grained decap insertion-ով (մոտավորապես ևս 1–4% area), որ driven է իրական post-route IR-drop/EMIR signoff արդյունքներով՝ բացահայտելով կոնկրետ hot-spot-եր (տես Dynamic Analysis)։ Fine-grained ստանդարտ բջիջի decap filler-ները ապա բաշխվում են ավտոմատ, ուր սովորական filler-ներն այլ կերպ կգնային՝ տալով local droop suppression հենց այն logic-ի կողքին, որ ի վերջո մոտակայքում հայտնվեց — քանի որ ճշգրիտ վայրերն հայտնի չեն, մինչև տեղաբաշխումը legalize անի։
Ինչու է insertion-ը կատարվում վերջում
Fine-grained population-ը տեղաբաշխումից, CTS-ից և երթուղավորումից հետո հետաձգելը առավելագույնի է հասցնում իրական logic-ի համար օգտագործելի տարածքը օպտիմալացման ընթացքում (filler-ներն այլ կերպ legalization խոչընդոտներ կլինեին, որոնց placer-ը ստիպված է շուրջը շարժել), խուսափում է router-ի սեփական օպտիմալացման ընթացքում երթուղավորման resource-ներ արգելափակելուց, և պարզապես սպասում է, մինչև մնացած բացերի ճշգրիտ չափն ու վայրը իրականում հայտնի լինեն։ Ուշադրություն դարձրեք փոխզիջմանը հատկապես decap-ի կողմում. decap-ը ավելացնում է արտահոսքի էներգասպառում, և եթե oversized է, կարող է անբարենպաստ փոխազդել չիպի parasitic RLC network-ի հետ (resonance effect-ներ) — ուստի decap budgeting-ն ինքն օպտիմալացում է, ոչ թե «ավելին միշտ ավելի լավ է»։
Interface Paths & Virtual տակտային ազդանշաններ
Interface (I/O) ժամանակային path-երը հատում են վերլուծվող design-ի boundary-ն. input path-եր (port → ներքին register), output path-եր (ներքին register → port) և feedthrough path-եր (port → port՝ առանց register-ի միջև)։ Դրանք հատուկ մշակում են պահանջում, քանի որ logic-ը, որն իրականում որոշում է ժամանակային relationship-ը — input-ը drive անող արտաքին սարքը, կամ output-ը ստացող արտաքին սարքը — ֆիզիկապես ապրում է վերլուծվող հանգույցների ցանկից դուրս։ STA-ն այդ արտաքին logic-ի ներքին հապաղումների տեսանելիություն չունի, ուստի constraint writer-ը պետք է externally characterize անի boundary ժամանակային բնութագրերը և feed անի այն որպես set_input_delay / set_output_delay constraint-ներ՝ հղված տակտային ազդանշանի edge-ի։
Virtual տակտային ազդանշաններ
Virtual տակտային ազդանշանը սահմանվում է սովորական create_clock հրամանով, բայց կիրառված չէ որևէ ֆիզիկական port-ի կամ pin-ի — այն գոյություն ունի զուտ որպես աբստրակտ ժամանակային reference (period, waveform, name), որ STA tool-ը երբեք չի տեսնում toggle անել հանգույցների ցանկի որևէ տեղ։ Virtual տակտային ազդանշաններն օգտագործվում են հատկապես, երբ տակտային ազդանշանը, որն իրականում կառավարում է interface-ի ժամանակային relationship-ը, ֆիզիկապես առկա չէ վերլուծվող design-ում — օրինակ՝ source-synchronous սարք, որ կիսում է board oscillator, որի trace-ը միանում է միայն այդ արտաքին սարքին, ոչ թե այս չիպի որևէ pin-ի, ուստի get_ports-ը չի կարող legal կերպով հղում անել դրան։ Իրական տակտային ազդանշանը ֆիզիկապես toggle է անում node և propagate է անում իրական տակտային ազդանշանի ծառով (այն ամենը, ինչ ընդգրկված է վերևում). virtual տակտային ազդանշանը կիսում է նույն period/waveform թվաբանությունը, բայց ոչինչ չի drive անում — այն reference է միայն -clock argument-ների համար։
set_input_delay -clock virtual_ext_clk -max 2.3 [get_ports data_in]
set_output_delay -clock virtual_ext_clk -max 1.8 [get_ports data_out]
Virtual տակտային ազդանշանը երբեք չի կցվում design pin-ի — այն գոյություն ունի միայն, որպեսզի input/output հապաղման constraint-ներն ունենան reference edge, որից չափել։
Ամբողջ reference period T-ն budget է արվում երեք հաջորդական մասի վրայով. source սարքի clock-to-out հապաղումը, board flight time-ը և այս չիպի սեփական setup requirement-ը — output-side budget-ը հայելային պատկերն է՝ պահուստավորելով ժամանակ destination սարքի setup-ի համար։
Ինչպես են հապաղման թվերն իրականում որոշվում
Synchronous interface-ի համար, որ կիսում է reference period T, input-ի կողմը պետք է բավարարի T ≥ Tco(source սարք) + Tflight(board trace) + Tsetup(այս չիպի capture register), գումարած skew/jitter margin։ set_input_delay -max-ին փոխանցվող արժեքը փաստորեն Tco(max) + Tflight(max) է — «որքան ուշ կարող է data-ն դեռ ժամանել virtual տակտային ազդանշանի edge-ի նկատմամբ» — իսկ -min-ն օգտագործում է համապատասխան minimum-case գումարը hold վերլուծության համար։ T-ից ինչ որ մնում է input հապաղումը հանելուց հետո, հենց դա է, ինչ ունի աշխատելու չիպի սեփական input-to-register logic-ը։ Output-ի կողմը հայելային պատկերն է. T ≥ Tco(այս չիպի output path) + Tflight + Tsetup(destination սարք), և set_output_delay-ն պահուստավորում է board flight time-ը գումարած destination սարքի setup requirement-ը, որպեսզի ներքին register-to-output-port logic-ն իմանա, թե period-ի որ մասը իրեն թույլատրված է սպառել։ Երկու ուղղություններով էլ constraint-ները հապաղում չեն ավելացնում չիպի ներսում — դրանք ժամանակ են հանում global period budget-ից՝ թարգմանելով արտաքին board/device ժամանակային բնութագրերը ներքին ժամանակային պահուստի թվի, որ STA engine-ը կարող է օգտագործել։
Տարածված ծուղակներ
| Ծուղակ | Հետևանք |
|---|---|
-clock-ը բաց թողնելը set_input_delay/set_output_delay-ի վրա | Tool-ը լուռ հետ է ընկնում implicit/default տակտային ազդանշանի (հաճախ առաջինը սահմանված կամ գերիշխող տակտային ազդանշան)՝ արտադրելով սխալ — սովորաբար չափից ավելի optimistic — boundary constraint-ներ առանց error-ի |
| Virtual տակտային ազդանշանի period/edge drift իրական արտաքին տակտային ազդանշանից | STA-ում ոչինչ չի կարող որսալ virtual տակտային ազդանշանի definition, որ այլևս չի համապատասխանում board-ի իրականությանը. պետք է ձեռքով վերանայվի schematic/board ժամանակային spec-ի դեմ — հաճախակի root cause՝ «մաքուր signs off է, բայց lab-ում ձախողվում է» կամ հակառակը |
| Virtual տակտային ազդանշան սահմանել, բայց երբեք չհղել այն | Թողնում է այդ interface path-երը լիովին անսահմանափակ — STA-ն վերաբերվում է դրանց որպես չվերլուծված՝ լուռ քողարկելով իրական ժամանակային problem-ը մինչև tapeout |
Աղբյուրներ
- Multi-Voltage and Level-Shifter Assignment Driven Floorplanning — IEEE Xplore (ICCAD)
- Functional ECO Using Metal-Configurable Gate-Array Spare Cells — IEEE Xplore (DAC)
- Timing ECO Optimization Using Metal-Configurable Gate-Array Spare Cells — IEEE Xplore
- Integrated Circuit Having Tap Cells and a Method for Positioning Tap Cells — US Patent 6,560,753
- Routability-Driven Global Placer Target on Removing Global and Local Congestion for VLSI Designs — IEEE Xplore
- An Efficient Uncertainty- and Skew-Aware Methodology for Clock Tree Synthesis and Analysis — IEEE Xplore
- Zero-Skew Clock Routing With Minimum Wirelength (DME) — IEEE Xplore
- UST/DME: A Clock Tree Router for General Skew Constraints — ACM TODAES
- Optimal Useful Clock Skew Scheduling in the Presence of Variations Using Robust ILP Formulations — IEEE Xplore
- Clock Mesh Framework — IEEE Xplore
- Enhancing Double-Patterning Detailed Routing With Lazy Coloring and Within-Path Conflict Avoidance — IEEE Xplore
- Pessimism Reduction in Coupling-Aware Static Timing Analysis Using Timing and Logic Filtering — IEEE Xplore
- UI-Timer: An Ultra-Fast Clock Network Pessimism Removal Algorithm — IEEE Xplore
- Block-Based Static Timing Analysis With Uncertainty — IEEE Xplore
- Static Timing Analysis Using Derived Boundary Timing Constraints for Out-of-Context Hierarchical Entity Analysis — US Patent 9,542,524
- End-cap/boundary cells, well-tap cell placement, filler and decap cell mechanics — general web research (practitioner references: Team VLSI, iVLSI Technologies, physicaldesign4u)
- SDC clock uncertainty, generated/virtual clock semantics, I/O timing budgeting — general web research (vlsi.pro, Synopsys/Xilinx/Intel constraint documentation)