ENARM
Logic Synthesis · Հիմնական հոսքից անդին

Առաջադեմ Synthesis տեխնիկաներ և եզրային դեպքեր

Դասագրքային RTL→generic-gates→technology-mapping→optimization հոսքը միայն կմախքն է։ Արտադրական սինթեզ և physical-synthesis հոսքերը հենվում են մի շարք ավելի մասնագիտացված transformation-ների վրա, որպեսզի սեղմեն դուրս area, power, timing և routability, որոնք հիմնական հոսքը թողնում է չօգտագործված — և տարբեր EDA vendor-ներ ու design թիմեր դրանք կիրառում են տարբեր զուգակցումներով։

Register-ների Կլաստերացում

Multi-Bit Flip-Flop Banking և Debanking

Design-ի flip-flop-երը սովորաբար synthesized են և սկզբնապես տեղադրվում են որպես անկախ single-bit բջիջներ, յուրաքանչյուրն իր սեփական local տակտային ազդանշանի buffer-ով, որը drive է անում իր տակտային ազդանշանի pin-ը։ Բայց եթե մի քանի single-bit flop-եր կիսում են նույն տակտային ազդանշանը (և հաճախ նաև նույն reset/enable-ը), optimizer-ը կարող է դրանք կլաստերացնել մեկ ֆիզիկական multi-bit flip-flop (MBFF) բջջի մեջ — 2-bit, 4-bit կամ 8-bit macro, որն իրականացնում է մի քանի storage bit մեկ ընդհանուր տակտային ազդանշանի buffer/inverter chain-ի հետևում։ Քանի որ տակտային ազդանշանի network-ի էներգասպառումը scale է անում ըստ իրականում drive արվող տակտային ազդանշանի pin-երի քանակի, ոչ թե պահվող data bit-երի քանակի, banking-ը ուղղակիորեն կրճատում է տակտային ազդանշանի էներգասպառումը և փոքրացնում տակտային ազդանշանի ծառը, որը CTS փուլը (Physical Design → CTS) ընդհանրապես պիտի կառուցեր — հայտնված խնայողությունները տակտային ազդանշանի էներգասպառման համար կազմում են 19–37% միջակայքում՝ կախված design-ից և banking algorithm-ից։

⤢ Սեղմեք խոշորացնելու համար Banking-ից առաջ. 4 առանձին 1-bit FF FF0 FF1 FF2 FF3 buf buf buf buf 4 անկախ տակտային ազդանշանի buffer bank debank Banking-ից հետո. 1 ընդհանուր տակտային ազդանշանի 4-bit MBFF bit0 bit1 bit2 bit3 ընդհանուր clk buf մեկ տակտային ազդանշանի pin drive է արվում, մեկ buffer, ընդհանուր well/power — ավելի փոքր CTS load

Banking-ը կլաստերացնում է տակտային ազդանշան կիսող flop-երը մեկ ֆիզիկական multi-bit բջջի մեջ՝ մեկ տակտային ազդանշանի buffer-ի հետևում։ Debanking-ը ընտրովի կերպով հակադարձում է սա — մեկ bit-ը հետ հանելով որպես իր առանձին single-bit FF, երբ banked վիճակում պահելը երթուղավորման կամ timing-ի առումով կարժենար ավելի, քան տակտային ազդանշանի էներգասպառման խնայողությունն արժե։

Ինչ է անումԵրբ է արժեքավոր
BankingՄիավորում է նույն տակտային ազդանշանի single-bit FF-երը մեկ MBFF բջջի մեջ՝ կիսելով տակտային ազդանշանի buffer/inverter chain-ըDefault agressive pass, սովորաբար pre-placement կամ վաղ տեղաբաշխման փուլում, հիմնված logical տակտային ազդանշանի/reset խմբավորման վրա
DebankingԿոնկրետ MBFF instance-ը հետ է բաժանում առանձին single-bit FF-երիԵրբ post-placement վերլուծությունը ցույց է տալիս, որ banked bit-երի իրական ֆիզիկական տեղակայությունները հեռու են իրարից — banked վիճակում պահելը կստիպեր երկար, congested route-եր դեպի/ընդհանուր macro-ից, կվնասեր legalization/bin-density-ը, կամ կմեծացներ total negative slack-ը (TNS) այդ կոնկրետ bit-երին առնչվող path-երում
DFT փոխազդեցություն. banking-ը կարող է նաև վերադասավորել կամ բարդացնել scan-chain stitching-ը, քանի որ multi-bit բջջի ներքին bit-երն ունեն ֆիքսված ֆիզիկական scan-in/scan-out կարգ — banking-ը և scan reordering-ը սովորաբար համակարգվում են նույն tool flow-ի ներսում, այլ ոչ թե աշխատում առանձին-առանձին, որպեսզի իրար չհակասեն։ Տես DFT → Scan & ATPG՝ scan-chain հիմունքների համար։
Ինչպես է իրականում իրականացվում. ժամանակակից place-and-route գործիքները (Synopsys IC Compiler II / Fusion Compiler, Cadence Innovus) banking-ը և debanking-ը դիտարկում են որպես մեկ ավտոմատացված ցիկլ տեղաբաշխման օպտիմալացման ընթացքում — agressively bank անել տակտային ազդանշանի էներգասպառման շահույթի համար, ապա selectively debank անել միայն այն կոնկրետ instance-ները, որոնք չափելիորեն վնասում են timing-ը, congestion-ը կամ density-ը, փոխանակ ընդունելու all-or-nothing գլոբալ որոշում։
Boolean Դեկոմպոզիցիա

Combinational Cell Unpacking / Decomposition

Ստանդարտ բջիջների գրադարանները ներառում են ձեռքով optimized compound բջիջներ տարածված ֆունկցիաների համար — full adder-ներ, AND-OR-INVERT (AOI) և OR-AND-INVERT (OAI) գեյթեր, XOR/XNOR, multiplexer-ներ — քանի որ նպատակային transistor-level իրականացումը սովորաբար ավելի փոքր, արագ և low-power է, քան առանձին primitive gate-երից կառուցված համարժեքը։ Բայց սինթեզը երբեմն միտումնավոր անում է հակառակը. unpacking-ը compound բջիջը հետ վերածում է իր Boolean-համարժեք decomposition-ի՝ պարզ 2-input primitive-ների, ինչպիսիք են NAND, NOR և inverter-ները։ NAND-ը և NOR-ը յուրաքանչյուրն առանձին-առանձին «universal» գեյթեր են՝ ֆունկցիոնալորեն ամբողջական իրենց հենքով, ուստի ցանկացած combinational ֆունկցիա, ներառյալ full adder-ը, միշտ կարելի է ամբողջությամբ վերակառուցել միայն մեկից կամ մյուսից։

⤢ Սեղմեք խոշորացնելու համար Packed. մեկ ատոմային compound բջիջ Full Adder (մեկ hardened բջիջ) A B Cin Sum Cout optimizer-ը չի կարող տեսնել կամ վերակառուցել ներսը պիտի տեղադրվի և route արվի որպես մեկ ֆիզիկական միավոր unpack Unpacked. անկախ NAND/INV primitive-ներ NAND NAND NAND NAND NAND INV INV Sum Cout յուրաքանչյուր գեյթ առանձին տեղադրելի, չափափոխելի և buffer-ելի է

Նույն Boolean ֆունկցիան (full adder), երկու structural ձև։ Packed բջիջը default-ով compact և արդյունավետ է, unpacked ձևը այդ native արդյունավետության մի մասը փոխանակում է optimizer-ի տեսանելիության և ֆիզիկական տեղաբաշխման ճկունության հետ։

Unpacking-ը միտումնավոր փոխզիջում է, կիրառվում է կոնկրետ իրավիճակներում, ոչ թե գլոբալ կերպով.

Unpack անելու պատճառԻնչու
Timing-driven լոկալ վերակառուցումPacked compound բջիջը optimizer-ի համար անթափանց է — այն չի կարող resize, buffer կամ վերադասավորել logic-ը բջջի ներսում։ Unpacking-ը բացահայտում է ներքին node-երը, որպեսզի բջջով անցնող critical path-ը կարողանա առանձին optimized լինել։
Congestion / legalization թեթևացումCompound բջիջը մեկ ատոմային ֆիզիկական օբյեկտ է, որը պիտի տեղադրվի և route արվի որպես մեկ միավոր։ Դրա primitive decomposition-ը կարող է տարածվել լոկալ հատակագծի վրայով՝ թեթևացնելով congestion-ի կամ legalization-ի ծանր կետը, որտեղ մեկ մեծ բջիջը չէր տեղավորվում։
Library/corner ծածկույթՈչ բոլոր compound բջիջներն են characterized ամեն drive strength-ի կամ ամեն PVT corner-ի համար։ NAND2/NOR2/INV-ը գրեթե միշտ ցանկացած գրադարանում ամենալիարժեք characterized բջիջներն են, ուստի դրանց decompose անելը շրջանցում է ավելի հազվադեպ compound-cell ծածկույթի բացը։
ECO-ընդունակությունPost-layout, metal-only engineering change order-երն ավելի հեշտ է կառուցել պարզ 2-input primitive-ներից և spare բջիջներից (տես Physical Design → Spare Cells), քան աշխատել մեծ compound բջջի ֆիքսված footprint-ի շուրջ։
Դա դեռ technology mapping է. unpacking-ը փաստորեն նույն technology-mapping քայլն է հիմնական սինթեզ հոսքից, կրկին run արված հանգույցների ցանկի ընտրված region-ի վրա՝ ընդդեմ սահմանափակ target set-ի (միայն primitive-ներ) ամբողջ գրադարանի փոխարեն — trigger արվում է ավտոմատ optimizer-ի cost function-ով, կամ ձեռքով՝ engineering change directive-ով ECO-ի ընթացքում։
Ամփոփելով

ԵՒս մի քանիսը, որ արժե իմանալ

ՏեխնիկաԻնչ է անումՓոխզիջում / սահմանափակում
Register retimingՏեղափոխում է register-ի սահմանները combinational logic-ի վրայով՝ վերահավասարակշռելու pipeline-stage հապաղումը՝ առանց փոխելու ֆունկցիայի end-to-end վարքագիծը — կարող է մեկ ծանրաբեռնված դանդաղ stage-ը և մեկ թերբեռնված արագ stage-ը վերածել երկու հավասարակշռված stage-իՓոխում է cycle-accurate timing-ը, թեև multi-cycle I/O վարքագիծը պահպանվում է, ուստի պահանջում է sequential equivalence checking, ոչ միայն combinational equivalence checking. որոշ feedback/reset structure-ներ սահմանափակում են, թե որտեղ կարող են register-ները legal կերպով տեղաշարժվել
Physical-aware (topographical) սինթեզՍինթեզի ընթացքում իրականացնում է կոպիտ տեղաբաշխում (Synopsys DC Topographical, Cadence Genus iSpatial), որպեսզի wire-load և congestion գնահատականները գան իրական մոտավոր տոպոլոգիայից, ոչ թե statistical model-իցTiming/area corelation-ը սինթեզի և place-and-route-ի միջև սեղմում է մոտավորապես 5%-ի սահմաններում և երթուղավորման congestion hotspot-երը կանխատեսում է բավական վաղ, որպեսզի հնարավոր լինի ուղղել դրանք, նախքան design-ը placer հասնելը
Datapath / arithmetic resource sharingԼայն multiplier-ներն ու adder-երը synthesized են dedicated arithmetic structure-ներով (Booth encoding՝ partial-product քանակը կրճատելու համար, Wallace-tree/compressor partial-product reduction), ոչ թե generic Boolean օպտիմալացմամբՆույն ֆունկցիայի համար հիմնովին տարբեր սխեմայի topology, ընտրված ըստ width-ի և target metric-ի (area vs. speed) — general logic օպտիմալացումը հազվադեպ է ինքնուրույն վերագտնում այս structure-ները

Աղբյուրներ