• No results found

Modulgenerator för generering av Brent Kung-adderare

N/A
N/A
Protected

Academic year: 2021

Share "Modulgenerator för generering av Brent Kung-adderare"

Copied!
61
0
0

Loading.... (view fulltext now)

Full text

(1)

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

(2)

Modulgenerator för generering

av Brent Kung-adderare

Examensarbete utfört i elektroniksystem

vid Linköpings tekniska högskola av

Michael Dahlqvist och Andreas Röst LiTH-ISY-EX-ET-0255-2003

Handledare: Emil Hjalmarson Examinator: Mark Vesterbacka

(3)

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.

(4)

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.

(5)

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...13

4.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

(6)

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

(7)
(8)

1 Inledning

1.1 Bakgrund

Allt 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.

(9)

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.

(10)

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.

(11)
(12)

3 Programvaror

3.1 Verktyg

Detta ä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

(13)

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.

(14)

4 Arbetsgång

4.1 Litteraturstudier

Det 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.

(15)

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.

(16)

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.

(17)
(18)

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.

(19)

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

(20)

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

(21)

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 aibi 1 0 0 0 1 0 1 1 1 1 0 1 (aibi)ci−1 1 1 1 1 aibi

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

(22)

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.

(23)

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.

(24)

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)

(25)

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.

(26)

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

(27)

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.

(28)

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).

(29)

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.

(30)

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.

(31)
(32)

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.

(33)

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.

(34)

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

(35)

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

(36)

7 Förslag till förbättringar

7.1 Flaskhalsar

En 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.

(37)

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.

(38)

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.

(39)
(40)

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

(41)

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

(42)

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.

(43)

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.

(44)

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.

(45)

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.

(46)

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”.

(47)

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.

(48)

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.

(49)

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.

(50)

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.

(51)

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”.

(52)

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!

(53)

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

(54)

Appendix E

Exempel på testbänkar som används för simulering. Testbänk för 4-bitars BK-adderare.

(55)
(56)

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.

(57)

Appendix G

Schema- och layout-utskrifter som genererats med modulgeneratorn.

(58)
(59)
(60)
(61)

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,

References

Related documents

Den reparativa rättvisan ser till alla aspekter av brottet och respondenterna upplevde att medlingen gav utrymme att inte bara tala om brottet utan också om bakgrunden och

oavsett vilken form har behålaren. Antalet invånare i ett land är 50 miljoner och växer nu med hastigheten 2,0% per år. Anta att tillväxthastigheten ökar linjärt från 2,0% till

När det gäller kollegialt lärande så använder sig ingen av deltagarna i föreliggande studie specifikt utav sociala medier för kollegialt lärande, detta trots att

Men public service skiljer sig från de kommersiella kanalerna när det gäller tittarsiffror som en variabel för utbudet på så sätt att det inte behöver vara styrande

Strategin för att kunna välja ut låtmaterialet var helt enkelt att ägna mycket tid till att lyssna på skivor som jag tycker är bra, detta för att bli påmind om låtar jag inte

I studien urskiljs och redogörs det vidare för fem särskilt centrala områden när det handlar om att anpassa bibliotekslokaler till integrerad folk- och

Inte enbart för att alla ska ”känna” sig delaktiga (vilket i och för sig är bra), utan även för att alla på riktigt ska ha jobbat med saken, getts förutsättningar att

I denna avhandling undersöker Judy Ribeck svenska naturveten- skapliga lärobokstexters språkliga karakteristik, i förhållande till språket i andra skolämnen och i förhållande