Modulgenerator för generering
av Brent Kung-adderare
Examensarbete utfört i elektroniksystem av
Michael Dahlqvist och Andreas Röst LiTH-ISY-EX-ET-0255-2003
Modulgenerator för generering
av Brent Kung-adderare
Examensarbete utfört i elektroniksystemvid Linköpings tekniska högskola av
Michael Dahlqvist och Andreas Röst LiTH-ISY-EX-ET-0255-2003
Handledare: Emil Hjalmarson Examinator: Mark Vesterbacka
Avdelning, Institution Division, Department Institutionen för Systemteknik 581 83 LINKÖPING Datum Date 2003-06-05 Språk Language Rapporttyp Report category ISBN X Svenska/Swedish Engelska/English Licentiatavhandling
X Examensarbete ISRN LITH-ISY-EX-ET-0255-2003 C-uppsats D-uppsats Serietitel och serienummer Title of series, numbering ISSN
Övrig rapport
____
URL för elektronisk version
http://www.ep.liu.se/exjobb/isy/2003/255/ Titel
Title Modulgenerator för generering av Brent Kung-adderare Modulegenerator for Brent Kung-adder generation. Författare
Author Michael Dahlqvist och Andreas Röst
Sammanfattning Abstract
För att snabba upp addering av tal, vilket är en vital del inom signalbehandling finns olika algoritmer. En sådan algoritm är Brent Kungs vilken har en tidsfördröjning proportionell mot log2(N).
I rapporten jämförs några olika varianter av adderare med avseende på grinddjup, vilket är proportionellt mot propageringstiden. En modulgenerator för Brent Kung-adderare
implementeras med Skill-kod i Cadence. Modulgeneratorn kan genera adderare av obegränsad ordlängd och är även teknologi oberoende. Brent Kung-adderarens fysiska begränsningar studeras och förslag ges på lämpliga förbättringar.
To speed up the addition of numbers, which is a vital part of signal processing there are different types of algorithms. One of those algorithms is the Brent Kung-adder, which has a time delay proportional to log2(N).
In the report comparison of different adders has been done, taking into account grind-depth which is proportional to the propagation time. A module generator for the Brent Kung adder is
implemented with skill-code in the program Cadence. The module generator can generate adders of infinite word length and is independent of the technology used. The physical limitations of Brent Kung adders are being studied and proposals for improvements are given in the report.
Sammanfattning
För att snabba upp addering av tal, vilket är en vital del inom
signalbehandling finns olika algoritmer. En sådan algoritm är Brent Kungs vilken har en tidsfördröjning proportionell mot log2(N).
I rapporten jämförs några olika varianter av adderare med avseende på grinddjup, vilket är proportionellt mot propageringstiden. En
modulgenerator för Brent Kung-adderare implementeras med Skill-kod i Cadence. Modulgeneratorn kan genera adderare av obegränsad ordlängd och är även teknologi oberoende. Brent Kung-adderarens fysiska
begränsningar studeras och förslag ges på lämpliga förbättringar.
Abstract
To speed up the addition of numbers, which is a vital part of signal processing there are different types of algorithms. One of those
algorithms is the Brent Kung-adder, which has a time delay proportional to log2(N).
In the report comparison of different adders has been done, taking into account grind-depth which is proportional to the propagation time. A module generator for the Brent Kung adder is implemented with skill-code in the program Cadence. The module generator can generate adders of infinite word length and is independent of the technology used. The physical limitations of Brent Kung adders are being studied and proposals for improvements are given in the report.
Innehållsförteckning
1 INLEDNING ...7 1.1 BAKGRUND...7 1.2 UPPGIFT...7 1.3 MÅL...8 2 TERMINOLOGI ...9 3 PROGRAMVAROR...11 3.1 VERKTYG...11 3.2 CADENCE...11 3.3 SKILL...11 3.4 AMS STANDARDCELLER...12 3.5 EMACS...12 4 ARBETSGÅNG ...13 4.1 LITTERATURSTUDIER...134.2 SKILL, CADENCE-STUDIER...13
4.3 UPPDELNING AV PROBLEMEN...13
4.3.1 Divide-and-conquer...13
4.3.2 Schema och layout ...14
4.3.3 Standardceller ...14
4.3.4 PG-gen och dot-op...14
4.3.5 BK ...15
4.4 SIMULERING OCH TEKNOLOGIBYTE...15
4.5 RAPPORTSKRIVNING...15
5 ADDERARE...17
5.1 HELADDERAREN...17
5.2 RIPPLE CARRY...18
5.3 CARRY-LOOK-AHEAD...19
5.4 BK-ADDERARE...22
5.5 RADIX-4 KOGGE STONE...27
5.6 JÄMFÖRELSER AV GRINDJUP HOS ADDERARNA...29
6 MODULGENERATORN ...31
6.1 ALLMÄNT OM MODULGENERATORER...31
6.2 MODULGENERATOR FÖR BK-ADDERAREN...31
7 FÖRSLAG TILL FÖRBÄTTRINGAR...35
7.1 FLASKHALSAR...35
7.2 KOMPENSERINGSMETOD FÖR UTGÅNGSBELASTNING...35
7.2.1 Buffertsteg ...35
7.2.2 Grindar med olika drivförmåga...35
7.2.3 Metoder för kompensering av adderarens sista minnesbit...35
7.3 SAMMANFATTNING KOMPENSERING...36 8 RESULTAT...37 REFERENSER...39 APPENDIX A ...40 APPENDIX B ...41 APPENDIX C ...51 APPENDIX D ...52 APPENDIX E ...53 APPENDIX F ...55 APPENDIX G...56
1 Inledning
1.1 BakgrundAllt eftersom teknikutvecklingen har gått framåt så har kraven på
miniatyrisering och hastighet hos integrerade kretsar ökat. Effektkraven på kretsar har även de blivit en viktig del i konstruktionsarbetet. Detta då många portabla produkter nu finns på marknaden.
Metoder för att öka hastigheten hos integrerade kretsar bygger ofta på att utöka kretsarnas parallellism. Detta medför att större mängd hårdvara krävs och därmed tar kretsen större chip-area. Då en kretslösning som drar lite effekt önskas kan bland annat matningsspänningen sänkas. Vilket medför att kretsens propageringstid ökar.
Att avväga area, hastighet och effektkrav är en viktig uppgift inom elektronikkonstruktion. Detta medför att det inte bara är att ta en kretslösning utan den kretslösning som lämpar sig bäst för ändamålet måste väljas.
1.2 Uppgift
En vital del inom signalbehandling är snabba upp addering av tal. För detta finns det olika algoritmer. En sådan är Brent Kungs som har en tidsfördröjning proportionell mot log2(N). Arbetet består av konstruktion
av en generator för Brent Kung-adderare med olika ordlängd.
1.3 Mål
Följande mål för examensarbetet ställdes upp:
• Skapa en modulgenerator för Brent Kung-adderare oberoende av ordlängd.
• Grundcellerna skall hämtas från AMS standardcell bibliotek. • En teoretisk jämförelse mellan olika typer av adderare skall
genomföras och jämföras med Brent Kung-adderarens grinddjup och area.
• Testresultat från simuleringarna skall redovisas och kommenteras. • Undersöka om det finns flaskhalsar och om dessa behöver
kompenseras.
• Finns tid över ska koden modifiera så den blir teknologioberoende. • Användarbeskrivning av modulgeneratorn skall ingå i rapporten.
2 Terminologi
FA = Full Adder.
RCA = Ripple Carry-Adder.
CLA = Carry-Look-Ahead.
Fan-out = Antal ingångar som belastar en utgång.
PG = Propagera Generera.
BK = Brent Kung-adderare.
AMS = Austria Mikro Systeme.
CMOS = Complementary Metal Oxide Semiconductor. ASIC = Application Specific Integrated Circuits.
PinList = En lista med in- och utgångar från ett schema, som sedan används till att skapa en symbol. Detta är en standardlista i skill-språket.
Skill-kommandon:
RodObjekt = Ett objekt som går att anropa med rod-kommandon. RodAlign = Placera objekt i förhållande till varandra.
RodCreatePath = Drar ledningar mellan terminaler. RodCreateRect = Skapar metallrektanglar.
LeCreateContact = Skapar övergångar mellan metaller(via).
InstanceMaster = Innehåller all information om en instans, till exempel koordinater och terminal namn.
3 Programvaror
3.1 VerktygDetta är de programverktyg som har använts för att konstruera
modulgeneratorn för BK-adderare. Alla verktygen är Unix baserade. • Cadence 4.4.5
• Cadence 4.4.6 • Emacs
Till Cadence användes standardbiblioteken. • AMS 3.40 (Standardceller)
• AMS 3.50 (Standardceller)
3.2 Cadence
Cadence är ett komplett utvecklingsverktyg för elektronikkonstruktion. Med Cadence kan både analoga och digitala kretslösningar konstrueras. Kretsar kan skapas genom att konstruera dem för hand eller att använda det medföljande programspråket Skill. Det går även att använda
standardceller från till exempel AMS i Cadence. Simulering av kretsar kan ske på både schemanivå och layoutnivå.
3.3 Skill
Skill är ett högnivå-programmeringsspråk från Cadence. Skill är ett script-språk vilket medför att det inte behövs en kompilator för att exekvera koden. Språket bygger på programmeringsspråket Scheme (en dialekt av språket Lisp), men syntaxen känns igen från C-språket. Detta medför att det går snabbt att sätta sig in i Skill för nya användare med erfarenhet av C. Det finns ett flertal specialkommandon i Skill som är anpassade för Cadence. Dessa kommandon är ofta namngivna efter vad de gör i Cadence. Exempel på några sådana kommandon är
Det medföljer en omfattande användarmanual till språket Skill i Cadence. Denna manual beskriver de olika instruktionernas funktioner och oftast finns det exempel på hur instruktionen kan användas. Skill-språket kan programmeras rent procedurellt men det finns möjlighet för
objektorienterad programmering då Skill++ instruktioner nyttjas. Erfarna programmerare kan dessutom använda sig av Lisp språkets fulla kraft direkt i Skill.
3.4 AMS Standardceller
Austria Mikro Systeme(AMS) tillhandahåller olika typer av
standardcellsfamiljer. De standardceller som använts till BK-adderaren ingår i AMS hit-kit 3.50. Cellerna är implementerade i en 0.35 µm triple metal CMOS process teknologi. Cellerna är konstruerade för låg
effektförbrukning, hög hastighet och för låg bruspåverkan.
De digitala standardcellerna kan även kombineras med analoga CMOS celler vilket ger en optimal lösning för blandade ASICs. Detta medför att BK-adderaren kan användas tillsammans med analoga applikationer. Grundcellerna är konstruerade för 3.3V men det finns även bibliotek med kombinerade matningsspänningar på 3.3V och 5V.
3.5 Emacs
Emacs är en text-editor. Denna editor har använts för att skriva den Skill-kod som genererar BK-adderaren.
4 Arbetsgång
4.1 LitteraturstudierDet första momentet inför konstruktionen av BK-adderaren var en litteraturstudie. Ett flertal böcker och artiklar studerades för att få en förståelse för funktionen hos BK. Även andra adderare studerades för att kunna göra en jämförelse av grinddjup mellan adderarna. När
BK-adderarens funktion var helt klarlagd studerades olika former av layouter för adderaren. Detta för att avgöra vilken typ av layout som lättast kan implementeras med hjälp av en modulgenerator.
4.2 Skill, Cadence-studier
Efter genomförda litteraturstudier var layouten preliminärt bestämd. Problemet var nu hur denna layout skulle kunna realiseras med hjälp av programmeringsspråket Skill. Cadence hade vi båda en viss kunskap om tidigare. Men Skill-språket hade ingen av oss stött på. Genom att studera ett flertal programexempel gick det relativt snabbt att komma in i
syntaxen. Stor hjälp gick även att få ifrån Cadence användarmanual. Det insågs snabbt att det inte fanns några hinder i språket Skill för att
konstruera den layout som preliminärt hade bestämt. Ytterligare en källa till information om språket Skill och Cadence var en nyhetsgrupp [7] på Internet.
4.3 Uppdelning av problemen
Lösningsmetoden som valdes är divide-and-conquer, då BK-adderaren enkelt kunde delas upp i underliggande block.
4.3.1 Divide-and-conquer
Divide-and-conquer-metoden går ut på att en hel uppgift studeras, den delas sedan in i några underliggande deluppgifter. Dessa olika
deluppgifter delas ytterligare upp i mindre uppgifter och så vidare.
Slutligen har ett antal enklare uppgifter fåtts på botten. Dessa deluppgifter kan sedan på ett enklare sätt lösas.
4.3.2 Schema och layout
När modulgeneratorn för BK-adderaren skulle skapas kunde den delas in i två underliggande generatorer, se figur 4.1.
Brent Kung adderare
Brent Kung adderare
Schematic Brent Kung adderare Layout
Standard-celler Schematic PG-gen dot-op Schematic Standard-celler Layout PG-gen dot-op Layout BK Schematic BK Layout Figur 4.1 BK-adderare.
En för schema och en för layout, detta för att det skall kunna gå att utföra en fullständig simulering på BK-adderaren. Generatorn för schemat skapades först för att det skulle gå att verifiera adderarens funktion innan det var dags att fortsätta med layouten.
4.3.3 Standardceller
En underfunktion till schema- och layout-generatorn är ett block som genererar de interna standardcellerna, se figur 4.1. Detta block hämtar standardceller från ett av AMS standardbibliotek och gör om dem så att de passar för konstruktion av en BK-adderare. Denna underfunktion genererar endast några interna standardceller och den är oberoende av ordlängden på BK-adderaren.
4.3.4 PG-gen och dot-op
Denna underfunktion till schematics- och layout-generatorn skapar med hjälp av de interna standardcellerna den PG-generator och dot-operator som BK-adderaren byggs upp av, se figur 4.1. Denna underfunktion är oberoende av ordlängden på BK-adderaren.
4.3.5 BK
Underfunktionen BK till schematics- och layout-generatorn skapar BK-adderaren, se figur 4.1. Funktionen hämtar PG-generatorer och dot-operatorer, placerar ut dem på rätt plats och drar ledningar. Denna funktion är beroende av ordlängden på BK-adderaren.
4.4 Simulering och teknologibyte
Då modulgeneratorn för BK-adderare var färdig simulerades olika ordlängder av adderare med avseende på funktion och tider. Därefter testades att göra ett teknologibyte från AMS 3.40 till AMS 3.50 och nya simuleringar genomfördes.
4.5 Rapportskrivning
Parallellt med litteraturstudierna har teoribitar förts in i rapporten. Under tiden arbetet fortgått har rapporten sedan kompletterats med ytterligare bitar. Då BK-adderaren började bli klar, var första utkastet till rapporten också klar. Den kompletterades sedan med simuleringsvärden.
5
Adderare
I kapitlet kommer fyra olika adderare att beskrivas och jämföras med avseende på grinddjup. För att underlätta jämförelsen bortses från
samtliga inverterare. Detta eftersom andgrind och orgrind är uppbyggda av nandgrind och orgrind plus inverterare.
5.1 Heladderaren
Heladderaren [4] är ett logiskt block med tre ingångar och två utgångar, se figur 5.1. i b i s i a 1 − i c i c FA Figur 5.1 Heladderare.
De två första ingångarna utgörs av ai och bi, vilka är de ingående binära bitarna som skall summeras. Den tredje ingången ci är en binär
minnesbit vilken kan komma från t.ex. en annan heladderare eller från något annat logiskt block. De två utgångarna utgörs av summabit si och utgående minnesbit ci. 1 − ci-1 ai bi ci si 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1
Tabell 5.1 Heladderarens sanningstabell.
Tabell 5.1 visar heladderarens sanningstabell, med hjälp av denna kan heladderarens logiska ekvationer 5.1 och 5.2 tas fram.
ci = ai· bi+ ai⊕ bi· ci−1 (5.1) si = ai⊕ bi⊕ ci−1 (5.2)
Figur 5.2 visar att heladderaren har olika grinddjup för olika vägar genom adderaren. För att minnesbiten ci ska uppdateras krävs att signalerna ai,bi
och ci-1 passerar ett grinddjup på tre grindar. Grinddjup mellan ingående
minnesbit ci-1 till utgående minnesbit ci blir två.
ai & ≥1 ci ≥1 & bi & ≥1 ≥1 s i ≥1 & & ci-1
Figur 5.2 Heladderare beskriven på grindnivå.
5.2 Ripple carry
Ripple carry-adderaren [2] även kallad RCA är den enklaste parallella adderaren. Den består av en kedja seriekopplade heladderare vilka är seriekopplade, se figur 5.3. i b 1 i b+ n b n s si+1 s i n c cn−1 ci+1 c i 1 i c− n a ai+1 a i FA FA FA
Genom att låta den ingående minnessiffran ci-1 vara noll kan två tal
adderas som är representerade i tvåkomplement ai,n och bi,n.
Minnesbitarna ci-1 till cn propagerar genom hela adderaren seriellt. Detta
medför att FAi inte kan påbörja beräkningen av ci förrän ci-1 finns
tillgänglig. Den första heladderaren har ett grindjup på tre grindar eftersom ai, bi och ci-1 beräknas samtidigt. Övriga heladderare får ett
grinddjup på två grindar eftersom endast grinddjupet mellan inkommande minnesbit ci-1 och utgående minnesbit ci behöver beaktas. Detta eftersom
ai och bi redan är beräknade då inkommande minnesbit ci-1 anländer till
heladderaren, se figur 5.2.
Ripple carry-adderaren som består av en kedja heladderare får därmed ett grindjup på två gånger antalet heladderare plus ett, se ekvation 5.3. Detta medför att grinddjupet för ripple carry-adderaren växer relativt fort. Grinddjupet är direkt proportionellt mot propageringstiden. På grund av detta är denna typ av adderare inte lämplig att implementera för
ordlängder > 4 [3] utan någon form av kompensering. Grinddjup = 2·N+1 (5.3)
N = antalet bitar
Sammanfattningsvis har ripple carry-adderaren följande egenskaper. • Enkel lösning.
• Stort grinddjup.
• Icke lämplig för ordlängd > 4.
5.3 Carry-look-ahead
Med ökad ordlängd och hastighet följer att prestandakraven på adderare blir större. Ripple carry-adderarens minnesbitar måste propagera genom hela adderarkedjan, vilket medför lång propageringstid. För att minska propageringstiden har parallella adderare som carry-look-ahead
Då heladderaren studeras i figur 5.1 och det bortses från summabiten si
kan tabell 5.2 bildas.
1 − i c ai bi ci 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 ai• bi 1 0 0 0 1 0 1 1 1 1 0 1 (ai⊕bi)ci−1 1 1 1 1 ai• bi
Tabell 5.2 Sanningstabell för minnesbit.
Tabell 5.2 visar att då uttrycket ai· bi är sant blir minnesbiten ci en etta. Vilket kallas för att generera minnesbit. Då uttrycket ai⊕ biär sant blir minnesbiten ci lika med ci-1. Detta kallas för att propagera minnesbit.
Ekvationerna 5.4 och 5.5 bildas för genererings- och propageringsbitarna. Med hjälp av dem bildas sedan ekvation 5.6 för den utgående
minnesbiten ci.
Gi = ai· bi (5.4) Pi = ai⊕ bi (5.5) ci = Gi+ Pi· ci−1 (5.6)
Carry-look-ahead använder sig av PG-generatorer, se figur 5.4. Dessa räknar ut alla Pi och Gi för hela adderaren parallellt.
ai Gout & Pout & ≥1 b
Utvecklas ekvation 5.6 fås ekvationerna 5.7 för carry-look-ahead-adderarens minnesbitar. c0 = 0 c2 = G2 + P2· c1 = G2 + P2· G1 . . cn = Gn + Pn· cn-1 (5.7)
Carry-look-ahead-adderaren får enligt ekvationerna 5.7 för tredje ordningens minnesbit c3 ett totalt grinddjup på två andgrindar, en
PG-generator samt en orgrind. Detta motsvarar ett grinddjup på fem grindar. I appendix A beskrivs en fyra bitars carry-look-ahead-adderare på
grindnivå.
Ripple carry-adderaren skulle få ett grinddjup för minnesbit c3 på totalt
sju grindar. Grindjupet för minnesbit c3 kan således minskas med två
grindar för carry-look-aheaden jämfört med ripple carry-adderaren. Då ordlängden för carry-look-ahead-adderaren växer ökar grinddjupet för utgående minnesbit approximativt linjärt [5], [6] enligt ekvation 5.8.
Grinddjupet ≈ N+2 (5.8) N = ordlängden
Den första genereringsbiten G1 kopplas till ett stort antal grindar vilket
medför att denna interna nod får en stor belastning. Denna belastning gör att carry-look-ahead-adderaren endast är lämplig för ordlängder ≤ 4 [5], [6] utan någon form av kompensering.
Sammanfattning carry-look-ahead-adderaren • Komplex lösning.
• Linjärt växande grinddjup.
• Snabbt ökande belastning för första genereringsbiten. • Endast lämplig för ordlängder ≤ 4.
5.4 BK-adderare
Carry-look-ahead-adderaren utnyttjar att minnesbitarna ci kan beräknas
med hjälp av propageringsbitarna Pi och genereringsbitarna Gi. Dessa
bitar kan även kombineras på flera andra sätt. På grund av detta finns flera olika varianter av carry-look-ahead-adderare. Gemensamma mål för dessa adderare är att minska det antal grindar som belastar utgångarna (fan-out) eller grinddjupet, detta för att minimera propageringstiden genom adderaren.
En variant av carry-look-ahead-adderaren togs fram av Richard P. Brent och H. T. Kung [1]. De definierade en operator kallad dot-operatorn med symbol enligt figur 5.5.
Pi-1
Gi-1
Gout
Pi
Gi Pout
Figur 5.5 Symbol dot-operator.
Denna operator arbetar associativt vilket innebär att den är oberoende av i vilken ordning operationerna utförs, till exempel (a●b)●c = a●(b●c). Att dot-operatorn är associativ medför att ekvationerna kan modifieras för carry-look-aheaden för att öka dess effektivitet.
0 A 2 A A3 A4 A5 A6 A7 1 A F
Figur 5.6 Kedja av dot-operatorer.
Figur 5.6 visar hur en linjär funktion kan byggas upp med hjälp av dot-operatorer. Denna funktion kan beskrivas enligt ekvationen 5.9.
0 A 1 A 2 A 3 A F 4 A 5 A 6 A 7 A
Figur 5.7 Logaritmisk struktur med dot-operatorer.
Utnyttjas dot-operatorns associativa egenskap kan en logaritmisk struktur enligt figur 5.7 konstrueras. Genom omstrukturering av ekvationen 5.9 kan ekvationen 5.10 skapas för den logaritmiska strukturen.
F = ((A0●A1) ● (A2●A3))●((A4●A5) ● (A6●A7)) (5.10)
Den logaritmiska strukturen enligt figur 5.7 medför att funktionen F uppdateras efter log2(8) = 3 dot-operatorer. Den linjära strukturen i figur
5.6 uppdaterar funktionen F efter 7 operatorers djup. Att
dot-operatorn är associativa möjliggör därmed en reduktion när det gäller den kritiska vägen.
Dot-operatorns logiska funktion beskrivs enligt ekvationerna 5.11 och 5.12.
Gout = (Gi + Pi·Gi-1) (5.11)
En dot-operator på grindnivå visas i figur 5.8. Gi-1 & Pi-1 ≥1 Gout Gi Pout & Pi Figur 5.8 Dot-operator.
Då dot-operatorerna ordnas logaritmiskt enligt den struktur som visas i figur 5.7 fås de vita operatorer som syns i figur 5.9. Detta nät av dot-operatorer kallas för forward-nätet. Med hjälp av denna kombination av dot-operatorer skapas minnesbitarna c1, c2, c4 och c8.
(G0,P0) C1 C2 C3 C5 (G1,P1) C4 C6 (G2,P2) (G3,P3) C7 (G4,P4) (G5,P5) C8 (G6,P6) (G7,P7) Figur 5.9 BK-adderare.
För att beräkna övriga minnesbitar c3, c5, c6 och c7 måste det logaritmiska
forward-nätet kompletteras med ytterligare dot-operatorer. Dessa är markerade med grått i figur 5.9 och bildar det så kallade inversnätet. I inversnätet utnyttjas delresultaten från forward-nätet för att beräkna de återstående minnesbitarna.
Ekvationen 5.13 visar hur en dot-operator arbetar, (Gi, Pi), (Gi-1, Pi-1) är
ingångar och (Gi+Pi·Gi-1, Pi·Pi-1) är de två utgångarna Gout och Pout.
Då resultatet från dot-operatorns utgång Gout eller Pout skall användas
beräknas dessa enligt ekvationerna 5.14 respektive 5.15. (Gi, Pi)●(Gi-1, Pi-1) = (Gi+Pi·Gi-1, Pi·Pi-1) (5.13)
Gout[(Gi+Pi·Gi-1, Pi·Pi-1)] = Gi+Pi·Gi-1 (5.14)
Pout [(Gi+Pi·Gi-1, Pi·Pi-1)] = Pi·Pi-1 (5.15)
Minnesbitarna för forward-nätet i figur 5.9 beskrivs enligt ekvationerna 5.16. Jämför gärna dessa ekvationer med carry-look-ahead-adderarens.
c1 = Gout[(G0, P0)] = G0 c2 = Gout[(G1, P1)●(G0, P0)] = Gout[(G1+P1·G0, P1·P0)] = G1+P1·G0 (5.16) c4 = Gout[((G3,P3)●(G2,P2))●((G1,P1)●(G0,P0))] = ….. = G3 + P3·G2+ P3·P2·(G1 + P1·G0) c8 = Gout[((G7,P7)●(G6,P6))●((G5,P5)●(G4,P4))●((G3,P3)●(G2,P2))●((G1,P1)●(G0,P0))] =….. =G7+P7·G6+ P7·P6·(G5+P5·G4)+P7·P6·P5·P4·(G3+P3·G2+P3·P2·(G1+P1·G0))
På samma sätt kan ekvationerna för BK-adderarens inversnät bestämmas. I figur 5.10 visas ett kopplingsschema för BK-adderaren av ordlängd 16. De svarta och grå punkterna utgör dot-operatorer. De svarta utgör
forward-nätet och de grå inversnätet. Pi och Gi längst ned i schemat
kommer från PG-generatorer.
C5
C1 C2 C3 C4 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16
Figur 5.10 BK-adderarens kopplingsschema för ordlängd 16.
Nivå4 Nivå3 Nivå2 Nivå1 G0 , P0 G1 , P1 G2 , P2 G3 , P3 G4 , P4 G5 , P5 G6 , P6 G7 , P7 G8 , P8 G9 , P9 G10 , P10 G11 , P11 G12 , P12 G13 , P13 G14 , P14 G15 , P15
Schemat i figur 5.10 skall läsas nerifrån och upp. Om exempelvis
minnesbit c8 skall beräknas följs den vertikala linjen nerifrån (G7,P7) tills
en dot-operator påträffas, i detta fall dot-operatorn på nivå1. Denna kombinerar ihop (G6,P6) och (G7,P7) som bildar utsignalerna Pout och Gout
. Därefter tar dot-operatorn på nivå2 emot Pout och Gout från dot-
operatorerna på nivå1 osv. Slutligen kommer Gout från dot-operatorn på
nivå 3 att användas som minnesbit c8. Schemat visar att BK-adderaren har
en regelbunden struktur som är enkel att utöka.
Figur 5.10 visar också tydligt vilken belastning olika utgångar har. Dot-operatorn som genererar minnesbiten c8 måste också skicka sina
utsignaler Gout, Pout till alla dot-operatorer på nivå4. Detta medför att
denna dot-operator blir mycket hårt belastad, vilket ökar
propageringstiden. Belastningen på utgångarna växer exponentiellt med ökad ordlängd på adderaren. BK-adderare med en ordlängd större än 32 bör ej konstrueras utan någon form av kompensering för belastningen på utgångarna [5], [6].
Enligt figur 5.10 visas att dot-djupet för BK-adderaren ökar med log2(N),
där N = ordlängden. Grinddjupet för en dot-operator är enligt figur 5.8 två. Detta medför att grinddjupet för BK-adderaren ökar med 2·log2(N).
Sammanfattning av BK-adderaren
• Grinddjupet ökar med 2·log2(N), där N = ordlängd.
• Belastningen för kritiska utgångar ökar snabbt med växande ordlängd på adderaren.
• Det är stora variationer på belastningen för de olika utgångarna.
• Ej lämplig för ordlängder ≥ 32 utan kompensering för belastningen på utgångarna.
5.5 Radix-4 Kogge Stone
Ytterligare en variant på carry-look-ahead-adderaren är radix-4-adderaren [5], [6], se figur 5.11. Denna adderare använder sig av mer komplexa dot-operatorer, se figur 5.12. Detta medför att dot-operator djupet för radix-4-adderaren blir mindre. Men eftersom dessa dot-operatorer är mer
komplexa än BK-adderarens dot-operatorer medför detta inte garanterat ett lägre grinddjup.
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 G0 , P0 G1 , P1 G2 , P2 G3 , P3 G4 , P4 G5 , P5 G6 , P6 G7 , P7 G8 , P8 G9 , P9 G10 , P10 G11 , P11 G12 , P12 G13 , P13 G14 , P14 G15 , P15 Figur 5.11 Radix-4-adderare.
En fördel med radix-4-adderaren är att belastningen på utgångarna är begränsade. Detta då endast maximalt fyra ingångar belastar en utgång, se figur 5.11. Vilket medför att belastningen på varje dot-operator för Radix-4-adderaren blir jämnare än för BK-adderaren. Belastningen på
utgångarna medför således ingen begränsning av storleken för denna adderare. Ledningsdragningen för radix-4-adderaren blir mer omfattande än för BK-adderaren. Enligt figur 5.11 visas att dot-djupet för radix-4-adderaren ökar med log4(N), där N = ordlängden. Grinddjupet för en
dot-operator är enligt figur 5.12 fyra. Detta medför att grinddjupet för radix-4-adderaren ökar med 4·log4(N).
Gi Gi-1 ≥1 G out & ≥1 Gi-2 Gi-3 & & ≥1 Pi & & Pi-2 Pi-1 Pout & & Pi-3
Figur 5.12 Dot-operator för radix-4 Koge Stone-adderare.
Radix-4-adderarens dot-operator har fyra (Gi,Pi) ingångar, se figur 5.12.
Dot-operatorns funktion beskrivs av ekvation 5.17.
(Gi,Pi,Gi-1,Pi-1)●(Gi-2,Pi-2,Gi-3,Pi-3)
= (Gi+Pi·Gi-1+Pi·Pi-1·(Gi-2+Pi-2·Gi-3),Pi·Pi-1·Pi-2·Pi-3) (5.17)
Används ekvation 5.17 för dot-operatorn och skapar utsignalerna
(Gout,Pout) från den dot-operator som genererar minnesbit c8 enligt figur
5.11 fås ekvationen 5.18.
[(G7,P7,G6,P6)●(G5,P5,G4,P4)]●[(G3,P3,G2,P2)●(G1,P1,G0,P0)] =…..
= (G7+P7·G6+P7·P6·(G5+P5·G4) +
P7·P6·P5·P4·(G3+P3·G2+P3·P2·(G1+P1·G0),P7·P6·P5·P4·P3·P2·P1·P0)
(5.18)
Genom att ur ekvation 5.18 lösa ut Gout fås ekvation 5.19 för minnesbit c8.
Jämför gärna denna med BK-adderarens minnesbit c8 i ekvation 5.16.
c8 = Gout[(G7+P7·G6+P7·P6·(G5+P5·G4) + P7·P6·P5·P4·(G3+P3·G2+P3·P2·(G1+P1·G0)),P7·P6·P5·P4·P3·P2·P1·P0)] = (G7+P7·G6+P7·P6·(G5+P5·G4) + P7·P6·P5·P4·(G3+P3·G2+P3·P2·(G1+P1·G0)) (5.19) Sammanfattning av radix-4-adderaren.
• Grinddjupet ökar med 4·log4(N), där N = ordlängd.
• Begränsad belastning på utgångarna. • Omfattande ledningsdragning.
5.6 Jämförelser av grindjup hos adderarna
De adderare som jämförs är ripple carry-, carry-look-ahead-, BK- och radix-4-adderaren. Adderarna är i denna jämförelse uppbyggda med två ingångars grindar. Ordlängden som jämförs ligger mellan 4 och 128 bitar. Ripple carry-adderaren har ett grinddjup på 2·N+1 för den utgående
minnesbiten, där N är adderarens ordlängd.
Carry-look-ahead-adderarens PG-generatorer har grinddjup på två grindar. För ordlängder större än ett växer denna adderares grinddjup approximativt med N+2 för utgående minnesbit.
BK-adderarens dot-operator har ett grinddjup på två grindar. Denna adderare har ett dot-operator djup på log2(N). Grinddjupet för
dot-operatorerna blir således 2· log2(N). PG-generatorn har ett grinddjup på
två. BK-adderaren får ett totalt grinddjup på 2+2·log2(N) för utgående
minnesbit.
Radix-4-adderarens dot-operatorer har ett grinddjup på fyra grindar. PG-generatorerna har grinddjup på två grindar. Adderarens dot-operatorer växer med log4(N). Vilket ger ett totalt grinddjup för radix-4-adderaren
på 2+4·log4(N) för utgående minnesbit.
Ordlängd(N) 4 8 16 32 64 128
RCA 9 17 33 65 129 257
CLA 6 10 18 34 66 130
BK 6 8 10 12 14 16
Radix-4 6 10 10 14 14 18
Tabell 5.3 Grinddjup för olika adderare.
Tabell 5.3 visar att grinddjupet för BK-adderaren och radix-4-adderaren är lägst. Belastningen på BK-adderarens utgångar påverkar dock
möjligheten att växa över ordlängd 32 [5], [6] utan någon form av kompensering. Radix-4-adderaren har inga begränsningar när det gäller belastningen på utgångarna. Men denna adderare har istället en komplex ledningsdragning.
6 Modulgeneratorn
6.1 Allmänt om modulgeneratorer
En modulgenerator är ett datorprogram som automatgenererar en
kretslösning av något slag. Utgående från de parametrar som användaren matar in kan en modulgenerator för t.ex. minnen skapa en layout för ett flertal olika typer och storlekar hos minnet.
Det tar oftast längre tid att skriva en modulgenerator än att rita en enstaka krets för hand i något designprogram. Ska ett flertal kretsar genereras där en komponent med regelbunden struktur ingår är modulgeneratorer ett sätt att effektivisera konstruktionsarbetet.
Det är möjligt att implementera en modulgenerator så att den blir oberoende av teknologi. Denna typ av modulgeneratorer är speciellt användbara eftersom det underlättar teknologibyte.
En fungerande modulgenerator har dessutom fördelen att den levererar en fungerande design. Risken att fel introduceras under designprocessen kan således minskas.
6.2 Modulgenerator för BK-adderaren
Modulgeneratorn består av två delar. • En generator för schema.
• En generator för layout.
Schemadelen i modulgeneratorn skapar ett kopplingsschema på
grindnivå. I detta schema behöver ingen hänsyn tas till ledningsdragning eller parasitkapacitanser, då de endast beskriver funktioner. För att ett schema skall kunna användas på en högre hierarkisk nivå måste en symbol av schemat skapas.
Layoutdelen i modulgeneratorn skapar en layout för kretsen. Detta
schema innehåller alla transistorer och den ledningsdragning som behövs. När layoutschemat skapas måste hänsyn tas till parametrar såsom
exempelvis avstånd mellan ledare. Då layouten är färdig kan parasitkapacitanserna beräknas.
Först implementeras en schemagenerator. Med denna kunde sedan funktionen för BK-adderaren verifieras. Simuleringar gav även en bra uppfattning om BK-adderarens propageringstid. Därefter skrevs kod för layout-generatorn. Koden för de båda generatorerna har satts samman till ett program då detta var möjligt, detta för att undvika dubbelarbete. I BK-adderarens layout finns information om olika lager och ledare. Genom simulering på layouten kan parasitkapacitanser beräknas. Dessa behövs då en exaktare simulering på BK-adderarens propageringstid skall genomföras.
Modulgeneratorn för att generera BK-adderare arbetar i tre steg.
• Steg ett är att automatgenerera de interna standardceller som används till att skapa PG-generatorer och dot-operatorer.
• Steg två för modulgeneratorn är att automatgenerera PG-generatorn och dot-operatorn som sedan används för att skapa BK-adderaren. • Steg tre är att skapa en BK-adderare, av den ordlängd användaren
önskar.
Steg ett och steg två utförs alltid på samma sätt. Dessa båda steg påverkas inte av BK-adderarens storlek. I figur 6.1 beskrivs hur BK-adderarens tredje steg fungerar. Denna princip används för att bygga upp
modulgeneratorn. Det inses snabbt att vartannat steg skall ha en dot-operator på nivå1. På nivå2 är det först två tomma steg, sedan två steg med dot-operatorer och så vidare. Studeras schemat noggrannare inses att antalet dot-operatorer i rad på varje nivå blir 2nivå-1 och de tomma stegen mellan dot-operatorerna blir lika många. Med denna vetskap kan en metod för att placera ut dot-operatorer realiseras.
Figur 6.1 visar att ledningsdragningen för BK-adderaren har ett system. I schemat syns det svarta forward-nätet och det grå inversnätet.
Ledningsdragningen för dot-operatorerna fungerar så att dot-operatorerna på nivå(n) skall kopplas ihop med närmast föregående dot-operator i forward-nätet på nivå(n-1). Dessutom kopplas dot-operatorerna ihop med närmaste underliggande PG-generator eller dot-operator. Undantaget är nivå1 där dot-operatorerna kopplas ihop med närmaste föregående PG-generator och den underliggande PG-PG-generatorn.
x_0 x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10 x_11 x_15x_12 x_13 x_14 Nivå4 Nivå3 Nivå2 Nivå1 pg_3 pg_0 pg_1 pg_2 pg_4 pg_5 pg_6 pg_7 pg_8 pg_9 pg_10 pg_11 pg_12 pg_13 pg_14 pg_15
6.2 Flödesschema för modulgenerator
I figur 6.2 visas ett förenklat flödesschema över modulgeneratorn för BK-adderare. Funktionen standardcell implementerar layouten och schemat för de interna standardcellerna. PG och dot bygger layout och schema för PG-generatorn och dot-operatorn. BK innehåller den logik som behövs för att skapa en komplett BK-adderare av en specifik ordlängd. En detaljerad funktionsbeskrivning finns i appendix B och exempel på layouter och scheman finns i appendix E.
Standardceller
nand_cell inv_cell or_cell and_cell xor_cell
PG dot
BK
place_pg place_dot place_xor
7 Förslag till förbättringar
7.1 FlaskhalsarEn av BK-adderarens flaskhalsar är att belastningen på utgångarna växer exponentiellt med adderarens ordlängd. För vissa grindar i strukturen medför detta att någon eller några dot-operatorer måste driva stora laster, vilket i sin tur ger ökad propageringstid för vissa bitar. Ytterligare en flaskhals är adderarens sista minnesbit vilken ökar propageringstiden genom hela adderaren.
7.2 Kompenseringsmetod för utgångsbelastning 7.2.1 Buffertsteg
Problemet med belastningen på utgångarna kan kompenseras genom att buffertsteg placeras efter de belastade dot-operatorerna som driver de största lasterna. Detta medför att dot-operatorn får kortare
propageringstid. Nackdelen är att det läggs till propageringstid med varje buffertsteg. Men den totala propageringstiden kan minskas med denna metod.
7.2.2 Grindar med olika drivförmåga
Belastningen på utgångarna kan även kompenseras till en viss grad genom att använda grindar med en bättre drivförmåga till de kritiska dot-operatorerna.
7.2.3 Metoder för kompensering av adderarens sista minnesbit
En möjlighet är att försöka optimera BK-adderarens grindar så de får lägre propageringstid. Vilket medför att propageringstiden för sista minnesbiten minskar. Ett annat alternativ är att byta till en adderare med lägre grinddjup.
7.3 Sammanfattning kompensering
För att välja en optimal kompenseringsmetod måste simuleringar som kan avgöra vilken metod som är bäst lämpad utföras. Den enklaste
kompenseringen är när det finns olika varianter på samma grind i standardbiblioteket. Då kan dessa enkelt byta till grindar med bättre drivförmåga där detta krävs.
8 Resultat
Då modulgeneratorn var klar kunde BK-adderarens funktion verifieras. Detta gjordes genom att addera ett antal olika testvektorer. Flera
genererade adderare av olika ordlängder har används vid testningen. Funktionen var felfri och obegränsade ordlängder gick att generera. Exempel på de testbänkar som användes finns i appendix E.
I appendix D finns mätresultat från simuleringarna med avseende på propageringstid, stigtid och falltid. De standardceller som använts till BK-adderaren är AMS 3.50:s celler med lägst drivförmåga.
I tabell 7.1 framgår att propageringstiden genom BK-adderare av ordlängder 4 och 8 inte skiljer sig mycket åt. Men för ordlängd 16 är propageringstiden stor i förhållande till ordlängd 4 och 8. Detta beror på BK-adderarens exponentiellt växande belastning på utgångarna. Skall propageringstiden minskas måste någon form av kompensering
implementeras.
Ordlängd [bitar] 4 8 16
Propageringstid [ns] 1.0192 1.0947 10.0452
Tabell 7.1 Propageringstider för olika ordlängder.
Ett av målen var att skapa en modulgenerator för BK-adderare som är teknologioberoende. Detta testades genom byte ifrån AMS 3.40 till AMS 3.50, vilken visade sig ha en helt ny uppsättning standardceller. Några mindre justeringar i koden för modulgeneratorn var nödvändiga. Det finns dock flera faktorer att ta hänsyn till när ett teknologibyte skall göras, se appendix F.
Referenser
[1] Brent R.P and Kung H.T.; ”A regular Layout for Parallell Adders,” IEEE Trans. on Computers, Vol. C-31, pp. 280-284, 1982.
[2] Lars Wanhammar; “DSP Integrated Circuits,” ISBN 0-12-734530-2, 1999.
[3] Nagendra C., Irwin M.J. and Owens R.M.; “Area-Time-Power Tradeoffs in Parallel Adders,” IEEE Trans. on Cicuits and system-II: Analog and Digital Signal Processing, Vol. 43, NO. 10,
October 1996
[4] Kang S.M. and Leblebici Y.; “CMOS Digital Integrated Circuits Analysis and Design,” ISBN 0-07-116427-8, 1999
[5] Rabaey, Jan M.; “Digital integrated circuits : a design perspective,”ISBN 0-13394271-6, 1996
[6] Rabaey, Jan M.; “Digital integrated circuits : a design perspective,” 2. ed, ISBN 0-13-120764-4, 2003
Appendix A
Schema på grindnivå för en fyra bitars carry-look-ahead-adderare.
S1 a1 P1 PG-gen b1 G1 C1 a2 P2 S2 PG-gen XOR b2 G2 & C2 a3 P3 ≥1 S3 PG-gen XOR b3 G3 & & C3 a4 P4 ≥1 & ≥1 S4 PG-gen XOR b4 G4
Appendix B
Funktionsbeskrivning för modulgenerator. prop_instance_pin_cord create_std_cell_layout 1. 2.1. ”create_std_cell_layout”, denna funktion skapar de interna
standardceller som används till att konstruera PG-generatorn och dot-operatorns layouter. Funktionen hämtar sin information ifrån det bibliotek som anges först i listan ”list_cell” (se skill-kod). Från följande standardceller i listan hämtas sedan de layouter funktionen använder sig av. Dessa layouter kopieras till biblioteket ”brent_kung” och placeras under de celler som anges sist i listan ”list_cell”. Denna kopiering av celler från något standardbibliotek till biblioteket
”brent_kung” är nödvändig. Då de standardceller som finns i
standardbiblioteken inte har några rodobjekt att greppa tag i för övriga programfunktioner. Funktionen frågar sedan med hjälp av den
underliggande funktionen ”prop_instance_pin_cord” vilka koordinater ingångar, utgångar, vdd och gnd har i cellvyn. Därefter placerar
funktionen pinnar över dessa positioner med samma namn som originalpinnen men med den skillnad att de är rodobjekt. Vilka sedan enkelt kan greppas tag i av övriga programfunktioner. Att skapa dess interna standardceller underlättar mycket för övriga
programfunktioner då instanser av dessa interna standardceller enkelt kan placeras på rätt position med hjälp av rodobjekten.
2. ”prop_instance_pin_cord”, denna funktion tar emot en instanspinne och hämtar koordinaterna i det aktuella schemat. Funktionen tar reda på om pinnen finns i instansen. Om den gör det frågar den instansens ”instanceMaster” om vilka koordinater pinnen har. Denna funktion behövs för att ta fram koordinaterna för en pinne som inte är ett rodobjekt.
4. place_pin
create_std_cell_schematic_symbol 3.
3. ”create_std_cell_schematic_cymbol”, denna funktion skapar de interna scheman som används för att konstruera PG-generatorn och dot-operatorns. Funktionen hämtar sin information ifrån bibliotek som står först i listan ”list_cell”. Från de följande standardcellerna i listan ”list_cell” hämtas de symboler funktionen använder sig av. Dessa symboler kopieras in under biblioteket ”brent_kung” och placeras under de celler som anges sist i listan ”list_cell”. Efter det att
funktionen kopierat standardsymbolerna anropas den underliggande funktionen ”place_pin” för att placera ut pinnarna i schemat.
Funktionen skapar även pinnlistor som den använder för att skapa symbolerna. Dessa symboler sparas under den aktuella cellen.
4. ”place_pin”, denna funktion hämtar från det bibliotek som står först i listan ”list_basic” (se skill-kod) de in- och utpinnar som följer i listan. Funktionen undersöker sedan om den aktuella pinnen i
funktionsanropet finns i instansen. Hittas pinnen placerar funktionen ut en in- eller utpinne med samma namn.
5. 6. create_via PropPin 8. 9. create_pin create_path 7. term_handle pg_layout 10.
5. ”pg_layout”, denna funktion skapar layout för PG-generatorn som BK-adderaren använder sig av. Den färdiga layouten för
PG-generatorn sparas under biblioteket ”brent_kung”, under cell ”pg”. Alla de olika instansernas in-, utgångar, vdd och gnd får egna
terminalnamn. Den underliggande funktionen ”term_handle” anropas sedan för att placerar ut de olika instanserna. Underfunktionen
”create_path” anropas flera gånger för att dra de ledningar som behövs internt i PG-generatorn. Funktionen ”propPin” anropas för att
propagera upp de pinnar som ligger på rätt plats. ”create_pin” anropas för att skapa de nya pinnarna som behövs för PG-generatorn. Sist anropas funktionen ”create_via”.
6. ”term_handle”, denna funktion använder sig av kommandot
”rodAlign” för att placera ut instanser. Detta är en underfunktion som har skapats för att slippa skriva samma sak flera gånger i koden. 7. ”create_path”, denna funktion skapar en ledning mellan två punkter
genom att använda kommandot ”rodCreatePath”. Skickas
ledningsnamn i sifferform in i funktionen döps ledningen till ”path_” kombinerat med den inskickade siffran. Att ge ledningarna namn underlättar om någon ledning skulle behöva justeras. Kommer inget siffra in i funktionen dras endast ledningen.
8. ”propPin”, denna funktion propagerar upp en pinne som är ett rodobjekt i en layout. Detta sker genom att funktionen skapar en metallrektangel i samma metall som den aktuella pinnen. Rektangel placeras sedan över originalpinnen och den får samma namn.
Rektangel kan sedan anropas som ett rodobjekt när en instans av den layout där rektangeln hör hemma skapas.
9. ”create_pin”, denna funktion skapar en metallrektangel med de
egenskaper som anges i funktionens anrop. Funktionen används då en ny pinne skall skapas och är användbar då det inte finns någon pinne att propagera upp. Funktionen använder sig av kommandot
”rodCreateRect”.
10. ”create_via”, denna funktion skapar en kanal mellan två olika metaller. Detta sker med hjälp av kommandot ”leCreateContact”. Denna funktion har skapats för att slippa skriva samma sak i koden flera gånger.
11.
12.
pg_schematic_symbol
inst_pin_cord
11. ”pg_schematic_symbol”, denna funktion skapar PG-generatorns schema och placerar den i biblioteket ”brent_kung” under cellen ”pg”. Funktionen hämtar instanser på de interna standardcellernas symboler och placerar ut dem i schemat. Sedan hämtar funktionen instanser från det bibliotek som står först i listan ”list_basic”, på de in- och utpinnar som följer i listan. De in- och utpinnar som behövs placeras sedan ut på rätt platser. Koordinaterna till instansernas in- och utgångar hämtas med hjälp av funktionen ”inst_pin_cord”. Ledningar dras sedan enligt de koordinater som har hämtats. Funktionen skapar en ”pinList” och med hjälp av den skapas en symbol som sparas under biblioteket ”brent_kung” under cellen ”pg”.
12. ”inst_pin_cord”, denna funktion tar fram koordinaterna för en pinne i en instans. Funktionen frågar ”instanceMasters” om vilka koordinater den aktuella instansens pinne har och returnerar koordinaterna. Hittas ingen pinne med det aktuella namnet returneras inga koordinater.
13. 6. create_via PropPin 8. 9. create_pin create_path 7. term_handle dot_op_layout 10.
13. ”dot_op_layout”, denna funktion skapar dot-operators layout vilken BK-adderaren sedan använder. Funktionen skapar instanser av de interna standardceller som skapats av tidigare funktioner. Den färdiga dot-operator layouten sparas under biblioteket ”brent_kung” undercell ”dot_op”. Alla de olika instansernas in- och utgångar samt vdd och gnd får ett eget terminalnamn. Detta är enkelt att genomföra då de alla är rodobjekt. Den underliggande funktionen ”term_handle” anropas sedan några gånger för att placerar ut de olika instanserna på de positioner de skall vara. Underfunktionen ”create_path” anropas flera gånger för att dra de ledningar som behövs internt i dot-operatorn. Funktionen ”propPin” anropas flera gånger för att propagera upp de pinnar som ligger på rätt plats. ”create_pin” anropas för att skapa några nya pinnar som behövs för dot-operatorn. Sist anropas funktionen ”create_via”.
12. inst_pin_cord dot_op_schematic_symbol 14.
14. ”dot_op_schematic_symbol”, denna funktion skapar dot-operatorns schema och placerar det i biblioteket ”brent_kung” under cellen ”dot_op”. Funktionen hämtar de interna standardcellernas symboler och placerar ut dem i schemat. Sedan hämtar funktionen in- och utpinnar från det bibliotek som står först i listan ”list_basic”. Dessa pinnar placeras sedan ut på rätt platser. Koordinaterna till instansernas in- och utgångar hämtas med hjälp av funktionen ”inst_pin_cord”. Ledningar dras sedan enligt de koordinater som har hämtats.
Funktionen genererar en ”pinList” och med hjälp av den skapas en symbol som sparas under biblioteket ”brent_kung” under cellen ”dot_op”.
place_pg 15.
15. ”place_pg”, denna funktion skapar den layout och schemat som bildar BK-adderaren. Dessa placeras i biblioteket ”brent_kung” under cellen ”BK”. Funktionen hämtar instanser på PG-generatorns symbol och layout. Dessa placeras sedan ut i rad i respektive scheman. Antalet PG-generatorer som placeras ut bestäms av BK-adderaren ordlängd.
17. 16. connect_dot_pg place_dot inst_pin_cord connectTerminals 18. 12.
16. ”place_dot”, denna funktion placerar ut alla dot-operatorer som används i BK-adderaren. Funktionen hämtar först instanser i biblioteket ”brent_kung” under cellen ”dot_op” på dot-operatorns layout och symbol. Instanserna placeras sedan ut enligt en
förprogrammerad logik i layouten och schemat. Ledningsdragningen mellan dot-operatorer och/eller PG-generatorerna sköts av den
underliggande funktionen ”connect_dot_pg”.
17. ”connect_dot_pg”, denna funktion drar ledningar mellan
dot-operatorer och PG-generatorer. Den arbetar mot både BK-adderarens layout och schema. Funktionen hämtar koordinaterna för
dot-operatorns in- och utgångar genom att använda funktionen
”inst_pin_cord”. Därefter kan ledningarna mellan PG-generatorer och/eller dot-operatorer för BK-adderarens schema dras. Funktionen ”connectTerminal” anropas för att dra ledningar mellan
PG-generatorer och/eller dot-operatorer i BK-adderarens layout. 18. ”connect_terminals”, denna funktion skapar en ledning mellan två
rodobjekt genom att använda kommandot ”rodCreatePath”.
Funktionen namnger ledningsbanorna själv, vilket är praktiskt när antalet ledningar i schemat och layouten varierar med ordlängden på adderaren.
create_via place_no_connect_symbol inst_pin_cord 10. 12. 20. 18. connectTerminals 19. place_xor
19. ”place_xor”, funktionen hämtar instanser på xorns symbol och layout som skapats av ”create_std_cell_layout” respektive
”create_std_cell_schematic_symbol”. Dessa placeras sedan ut i rad i respektive schema. Antalet xorgrindar som placeras ut bestäms av BK-adderaren ordlängd. Underfunktionen ”connectTerminals” kopplar sedan ihop xorgrindens ingångar till PG-generator och carrybiten från en dot-operator. Funktionerna ”inst_pin_cord” och ”create__via” utnyttjas sedan för att få tag i koordinaterna till xorgrinden i schemat och byte av metallager. Funktionen används även för att placera ”no connect” symbolen från biblioteket basic, genom underfunktionen ”create_no_connect_symbol”. Denna symbol behövs för att kunna spara schemat utan fel.
20. ”place_no_connect_symbol”, denna funktion hämtar instansen
”noConn” från det bibliotek som står först i listan ”list_basic”. Sedan placeras dessa ut på tomma utgångar i BK-adderarens schema, detta är nödvändigt vid simulering för att undvika felmeddelanden.
Funktionen använder även ”inst_pin_cord”, för att hitta koordinaterna för dot-operatorernas utgångar som inte är inkopplade.
create_path create_vdd_gnd 21.
7.
21. ”create_vdd_gnd”, denna funktion används för dragning av
jordledning och matningsledning till samtliga celler i layouten för BK-adderaren. Jordledningen placeras ut först och namnges ”gnd!”.
Därefter placeras matarledningen ut, vilken namnges ”vdd!”.
Ledningarnas längd och placering förändras beroende på adderarens ordlängd. 9. 8. PropPin create_pin prop_in_out 22.
22. ”prop_in_out”, denna funktion propagerar och skapar alla pinnar på den slutliga BK-adderare layouten. Detta görs med hjälp av
funktionerna ”propPin” och ”create_pin”. Funktionen namnger även in- och utgångarna, ingångarna får namnen a och b vilka kompletteras med en siffra som räknas upp med växande ordlängd. Utgångarna ges beteckningen s som även den kompletteras med en siffra som ökar med ordlängden.
12.
inst_pin_cord
create_schematic_wire_symbol_pin_BK 23.
23. ”create_schematic_wire_symbol_pin_BK”, denna funktion skapar BK-adderarens in- och utgångar som används i schemat. Funktionen hämtar instanser från det bibliotek som står först i listan ”list_basic”, på de in- och utpinnar som följer i listan. Dessa pinnar placeras sedan ut på rätt platser. Koordinaterna till instansernas in- och utgångar hämtas med hjälp av funktionen ”inst_pin_cord”. Ledningar skapas sedan med hjälp av koordinater som har hämtats. Funktionen skapar en ”pinList” och med hjälp av den genereras en symbol som sparas under biblioteket ”brent_kung” under cellen ”BK”.
Appendix C
Utformning och namngivning för standardceller. metall1
metall2
xor_cell and_cell or_cell
B Q A gnd! vdd! Q B A gnd! vdd! Q B A gnd! vdd!
inv_cell nand_cell nor_cell
Q A gnd! vdd! vdd! gnd! A B Q B Q A gnd! vdd!
Appendix D
Simuleringsresultat för olika delar i BK-adderaren samt för några ordlängder av BK-adderare.
Grindtyp Stigtid[ns] Prop.[ns] Falltid[ns] Prop.[ns]
Inverterare A→Q 1.0846 0.4848 0.5872 0.2961 And A→Q 1.0924 0.5529 0.5968 0.4277 And B→Q 1.0933 0.5640 0.5842 0.4546 Nand A→Q 1.1341 0.5123 0.5127 0.2457 Nand B→Q 1.1690 0.5341 0.5133 0.2517 Nor A→Q 1.0599 0.4851 0.6623 0.3597 Nor B→Q 1.0698 0.4451 0.5935 0.3108 Or A→Q 1.0970 0.6236 0.5856 0.4498 Or B→Q 1.0927 0.5690 0.5857 0.4081 Xor A→Q 1.1576 0.6217 0.6236 0.5201 Xor B→Q 1.0919 0.5439 0.6232 0.4761 Byggblock Pg A→Gout 1.0973 0.5791 0.6271 0.4884 Pg B→Gout 1.0964 0.5909 0.6255 0.5339 Pg A→Pout 1.0961 0.6937 0.6095 0.5220 Pg B→Pout 1.0960 0.7339 0.6077 0.5328 Dot Ga→Gout 1.0983 0.7996 0.6105 0.6399 Dot Gb→Gout 1.0956 0.5694 0.5899 0.4126 Dot Pa→Pout 1.0940 0.5330 0.5981 0.4303 Dot Pb→Gout 1.0999 0.8084 0.5965 0.6777 Dot Pb→Pout 1.0935 0.5642 0.5823 0.4635 BK-adderare Ordlängd[bitar] 4 8 16 Propageringstid[ns] 1.0192 1.0947 10.0452
Appendix E
Exempel på testbänkar som används för simulering. Testbänk för 4-bitars BK-adderare.
Appendix F
Användarmanual och hänvisningar för teknologibyte.
Användarmanual
• Installera Cadence 4.4.6 • Installera AMS 3.50
• Skapa biblioteket ”brent_kung” i Cadence ”libaryManager”, ange teknologi till ”TECH_C35B3”
• Ladda programmet brent_kung.il
• Ange kommandot run(n), där n är ordlängden i heltal
Teknologibyte
• Installera din version av Cadence
• Skapa biblioteket ”brent_kung” i Cadence ”libaryManager”
• Placera dina celler under biblioteket ”brent_kung”, layoutena skall vara utformade och namngivna enligt appendix C. Dessa celler skall även innehålla schema och symbol.
• Avmarkera funktionerna ”create_std_cell_layout” och
”create_std_cell_schematic_symbol” i koden för modulgeneratorn. • Ladda programmet brent_kung.il
• Ange kommandot run(n), där n är ordlängden i heltal
Tillägg teknologibyte
• ”list_basic” hämtar ingångar, utgångar och ingen anslutning • ”list_int” anger varifrån cellerna hämtas
• ”const_do”t bestämmer ledningsbredd och terminalstorlek • ”const_dist” bestämmer avståndet mellan dot-operatorerna
• Övriga faktorer som via, metall osv. kan behöva beaktas för olika teknologier.
Appendix G
Schema- och layout-utskrifter som genererats med modulgeneratorn.
På svenska
Detta dokument hålls tillgängligt på Internet – eller dess framtida ersättare – under en längre tid från publiceringsdatum under förutsättning att inga extra-ordinära omständigheter uppstår.
Tillgång till dokumentet innebär tillstånd för var och en att läsa, ladda ner, skriva ut enstaka kopior för enskilt bruk och att använda det oförändrat för ickekommersiell forskning och för undervisning. Överföring av upphovsrätten vid en senare tidpunkt kan inte upphäva detta tillstånd. All annan användning av dokumentet kräver upphovsmannens medgivande. För att garantera äktheten, säkerheten och tillgängligheten finns det lösningar av teknisk och administrativ art.
Upphovsmannens ideella rätt innefattar rätt att bli nämnd som upphovsman i den omfattning som god sed kräver vid användning av dokumentet på ovan beskrivna sätt samt skydd mot att dokumentet ändras eller presenteras i sådan form eller i sådant sammanhang som är kränkande för upphovsmannens litterära eller konstnärliga anseende eller egenart.
För ytterligare information om Linköping University Electronic Press se förlagets hemsida http://www.ep.liu.se/
In English
The publishers will keep this document online on the Internet - or its possible replacement - for a considerable time from the date of publication barring exceptional circumstances.
The online availability of the document implies a permanent permission for anyone to read, to download, to print out single copies for your own use and to use it unchanged for any non-commercial research and educational purpose. Subsequent transfers of copyright cannot revoke this permission. All other uses of the document are conditional on the consent of the copyright owner. The publisher has taken technical and administrative measures to assure authenticity, security and accessibility.
According to intellectual property law the author has the right to be mentioned when his/her work is accessed as described above and to be protected against infringement.
For additional information about the Linköping University Electronic Press and its procedures for publication and for assurance of document integrity,