Validering av flyttalsberäkningar och. ForSyDe

Relevanta dokument
IE1205 Digital Design: F6 : Digital aritmetik 2

Datorsystemteknik DVG A03 Föreläsning 3

Föreläsning 8: Aritmetik och stora heltal

Teknisk Beräkningsvetenskap I Tema 1: Avrundning och populationsmodellering

Datoraritmetik. Från labben. Från labben. Några exempel

n Kap 4.1, 4.2, (4.3), 4.4, 4.5 n Numerisk beräkning av derivata med n Felen kan t ex vara avrundningsfel eller mätfel n Felet kan mätas

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M

7 november 2014 Sida 1 / 21

Digital- och datorteknik

Flyttal kan också hantera vanliga tal som både 16- och 32-bitars dataregister hanterar.

Föreläsning 8: Aritmetik och stora heltal

IE1204 Digital Design

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

Fel- och störningsanalys

ÖH kod. ( en variant av koden används i dag till butikernas streck-kod ) William Sandqvist

Approximation av funktioner

TANA17 Matematiska beräkningar med Matlab

Maskinorienterad Programmering /2011. Maskinorienterad Programmering 2010/11. Maskinnära programmering C och assemblerspråk

Uppgift 1 ( Betyg 3 uppgift )

f (a) sin

F2 Datarepresentation talbaser, dataformat och teckenkodning

Fel- och störningsanalys

TANA19 NUMERISKA METODER

Digital Aritmetik Unsigned Integers Signed Integers"

Struktur: Elektroteknik A. Digitalteknik 3p, vt 01. F1: Introduktion. Motivation och målsättning för kurserna i digital elektronik

Grunderna i stegkodsprogrammering

TAIU07 Matematiska beräkningar med Matlab

DIGITAL ELEKTRONIK. Laboration DE3 VHDL 1. Namn... Personnummer... Epost-adress... Datum för inlämning...

Adderare. Digitalteknik 7.5 hp distans: 4.6 Adderare 4.45

Föreläsning 8: Aritmetik I

Datorsystem. Övningshäfte. Senast uppdaterad: 22 oktober 2012 Version 1.0d

a = a a a a a a ± ± ± ±500

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

DEC Alpha instruktions Arkitektur

Feluppskattning och räknenoggrannhet

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Tenta i Digitalteknik

Kapitel 2. Feluppskattning och räknenoggrannhet

Datorsystem. Tentamen

Lösningsanvisningar till de icke obligatoriska workoutuppgifterna

DIGITALA TAL OCH BOOLESK ALGEBRA

Sammanfattninga av kursens block inför tentan

Matriser och Inbyggda funktioner i Matlab

Mer om funktioner och grafik i Matlab

Hantering av hazards i pipelines

Linjära ekvationssystem

AD-DA-omvandlare. Mätteknik. Ville Jalkanen. 1

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Hyper Threading Intels implementation av SMT. Datorarkitekturer med operativsystem - EITF60. Felix Danielsson IDA2

Linjära ekvationssystem

Talrepresentation. Heltal, positiva heltal (eng. integers)

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Kapitel 3. Approximation av funktioner

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

SVAR TILL TENTAMEN I DATORSYSTEM, HT2013

Matriser och Inbyggda funktioner i Matlab

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Talrepresentation. Ett tal kan representeras binärt på många sätt. De vanligaste taltyperna som skall representeras är:

Digital elektronik CL0090

Adderare. Digitalteknik 7.5 hp distans: 4.6 Adderare 4.45

2320 a. Svar: C = 25. Svar: C = 90

Resträkning och ekvationer

Mer om funktioner och grafik i Matlab

F2 Binära tal EDA070 Datorer och datoranvändning

Pipelining i Intel Pentium II

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Envariabelanalys 5B1147 MATLAB-laboration Derivator

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Binär addition papper och penna metod

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Förenklad förklaring i anslutning till kompedieavsnitten 6.3 och 6.4

5B1134 Matematik och modeller

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

Simulering med ModelSim En kort introduktion

Digitala projekt rapport

Lösningsanvisningar till de icke obligatoriska workoutuppgifterna

Signalanalys med snabb Fouriertransform

Denna uppdelning är ovanlig i Sverige De hela talen (Både positiva och negativa) Irrationella tal (tal som ej går att skriva som bråk)

Shannon-Fano-Elias-kodning

Tekniska beräkningar. Vad är tekn beräkningar? Vad är beräkningsvetenskap? Informationsteknologi. Informationsteknologi

Lösandet av ekvationer utgör ett centralt område inom matematiken, kanske främst den tillämpade.

Institutionen för elektro- och informationsteknologi, LTH

Innehåll. Datorteknik. Abstraktionsnivå 1. Spelkonsol - blockschema. Spelkonsol abstraktionsnivå 2. Abstraktionsnivå 2

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

Matematik EXTRAUPPGIFTER FÖR SKOLÅR 7-9

Laboration i Fourieranalys, TMA132 Signalanalys med snabb Fouriertransform

Digital- och datorteknik

Trigonometriska funktioner och deras derivata

SF1661 Perspektiv på matematik Tentamen 24 oktober 2013 kl Svar och lösningsförslag. z 11. w 3. Lösning. De Moivres formel ger att

Linjär algebra med tillämpningar, lab 1

Utvecklingen från en 8 bitars till en 16 bitars mikroprocessor

Digital- och datorteknik

Konvergens för iterativa metoder

Titel Mall för Examensarbeten (Arial 28/30 point size, bold)

NUV 647E. Digitalteknik och Datorarkitektur 5hp. 3x12 = 36 2x12 = 24 1x12 = 12 0x12 = 18

Tentamen i Envariabelanalys 2

Avsnitt 5, introduktion.

Räkna med C# Inledande programmering med C# (1DV402)

Maskinorienterad programmering. Kompendium: Aritmetik för HC12 Roger Johansson, 2013

Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

Transkript:

Validering av flyttalsberäkningar och sinus- och cosinusimplementation på FPGA för ForSyDe Validation of Floating Point calculations and Sine and Cosine implementation on FPGA using ForSyDe HUSSEIN EZZEDDINE Examensarbete inom Elektroteknik, Grundnivå, 15 hp Handledare på KTH: Svante Granqvist Examinator: Thomas Lind TRITA-STH 2014:09 KTH Skolan för Teknik och Hälsa 136 40 Handen, Sverige

2

Sammanfattning Denna rapport behandlar två olika implementeringar på FPGA: Pipelinad implementering av flyttal med dubbel-precision samt implementering av cosinus- och sinusfunktion. Uppdraget med examensarbetet är att felsöka varför uppdragsgivarens sinus- och cosinusfunktioner generar felaktigt resultat samt åtgärda upptäckta fel. Under experimentets gång tillämpades flera metoder för att lokalisera fel. Testbänkar skrevs med olika scenarier för att lokalisera fel i flyttalsimplementationen med verktyget ModelSim Altera. ForSyDe användes för att skapa testmodeller som testar sinus- och cosinusfunktionen på en FPGA. Matematiska program som Mathematica samt Matlab användes för att utföra beräkningar med hög precision. Resultaten visar att flyttalsimplementationen genererar korrekt resultat efter att ha åtgärdat upptäckta fel. sinus/cosinus funktionen generar fortfarande fel resultat, dock med en marginell förminskning av fel. Utvärdering av experimentets resultat visar dock att felen som genereras av sinus- och cosinusfunktionen kan elimineras med ett par trigonometriska regler. Nyckelord Flyttal, Dubbel-Precision, Sinus, Cosinus, Maclaurin, FPGA, ForSyDe, Pipeline, Validering 3

4

Abstract This report deals with two different implementations on a FPGA: Pipelined Double-Precision Floating Point implementation and Sine/Cosine implementation. The purpose of this thesis is to troubleshoot why the Sine/Cosine function generates incorrect results and to alter the errors found. During the experiments, several methods were applied for troubleshooting. Test-benches with different scenarios were written to be used with ModelSim Altera in order to find possible faults in the Floating Point implementation. Test-models were also generated with the tool ForSyDe to test the Sine/Cosine implementation on a FPGA. Mathematical softwares such as Mathematica was used for calculations with high precision. The results indicates that the Floating Point implementation are generating correct results, after fixing the faults found. The Sine/Cosine function still generates faults in the results, but with a marginal reduction of errors. However, evaluation of the results shows that the errors produced by the Sine/Cosine function can be eliminated with a few trigonometric rules. Keywords Floating point, Double-Precision, Sine, Cosine, FPGA, ForSyDe, Pipeline, Validation 5

6

Förord Jag skulle vilja tacka min handledare Johnny Öberg på KTH ES samt Francisco Robino för deras stöd samt bidrag av kunskap till detta examensarbete. Jag skulle även vilja tacka min handledare Svante Granqvist på KTH STH för att ha bidragit med råd och vägledning under examenarbetets gång, samt för att ha givit mig konstruktiv feedback för rapporten. 7

8

Innehållsförteckning 1 Inledning... 13 1.1 Bakgrund... 13 1.2 Målformulering... 14 1.3 Avgränsningar... 14 1.4 Lösningsmetoder... 14 2 Teori... 17 2.1 Flyttal med dubbel-precision... 17 2.1.1 Representation av flyttal... 17 2.1.2 Precision IEEE-754... 20 2.1.3 Specialfall IEEE-754... 21 2.1.4 Avrundningsfel... 23 2.1.5 Exempel: 6+3 (8 bitar)... 25 2.2 Implementeringar... 26 2.2.1 Flyttalsoperator (Aritmetik)... 26 2.2.2 Sinus- och Cosinushårdvaruimplementering... 27 3 Beskrivning av metodik... 29 3.1 Validering av flyttalsimplementation i ModelSim Altera... 29 3.2 Felsökning av HW Sinus- och Cosinusfunktion... 32 3.3 Validering av Maclaurinalgoritm i Mathematica... 34 4 Resultat... 37 4.1 Resultat efter att ha åtgärdat fel i flyttalsimplementation... 37 4.2 Resultat: Sinus- och Cosinusfunktion... 39 5 Diskussion och slutsats... 43 Källförteckning... 47 Bilagor... 49 1. Felmeddelande ModelSim Altera... 49 2. Sammanfattning av fel ModelSim Altera... 50 9

... 50 3. Felsökningsprocedur: Sinus- & Cosinusfunktion... 51 4. Simulering av modell: två olika jämförelser för validering av Maclaurinalgoritm... 52 10

11

12

1 Inledning 1.1 Bakgrund Antalet processorer på ett chip ökar ständigt och det blir allt vanligare med flerkärniga system. Å andra sidan har förmågan att programmera dessa flerkärniga system inte utvecklats i samma takt som teknologin. Det är en av orsakerna till att programmeringsmetodiken ForSyDe utvecklats. En del av metodiken är att låta ForSyDe importera funktioner som produceras av andra verktyg, exempelvis Matlab/Simulink. Funktionen kan användas som den är, dvs. köras som C-kod (mjukvara) på en av processorerna eller omvandlas till hårdvaruaccelerator med hjälp av transformeringsverktyget Calc2HW. När det kommer till att transformera aritmetiska operationer i form av C- kod till hårdvara, används flyttal med dubbel-precision. Nackdelen är dock att versionen utvecklad av IEEE (IEEE-754) inte är tillräckligt effektiv. Orsaken är för att de aritmetiska operationerna inte använder pipelines, vilket medför att systemets kapacitet inte utnyttjas. Man har därför valt att implementera en egen flyttalsversion med dubbelprecision som använder pipelines. En snabbare hårdvaruversion av sinus- och cosinusberäkningar har även varit av intresse för uppdragsgivaren. Genom att tillämpa flyttalsimplementationen kan man enkelt öka funktionens hastighet. Ett problem som har upptäckts med sinus- och cosinusfunktionen som används i hårdvaran, är att den inte alltid genererar samma resultat i de sista bitarna som dess motsvarighet i mjukvara. Man misstänker att problemet är relaterat till olika avrundningsmetoder i flyttalsimplementationen. 13

1.2 Målformulering Följande mål är uppdelade i obligatoriska mål (O.x) samt valfria mål (V.x). O.1 Studera nuvarande testbänk, som är skriven i VHDL. Verifiera att testbänken täcker samtliga tänkbara fall för flyttals aritmetik. O.2 Studera VHDL implementationen av IEEE-754 standarden för de olika aritmetiska operationerna och jämför med den nuvarande implementationen, särskilt avrundningsmetoderna som används. Förslag på korrigeringar ska tilläggas på den nuvarande implementationen. O.3 Testa den slutgiltiga flyttals implementationen i sinus- och cosinusfunktionen med transformeringsverktyget i ForSyDe för att jämföra resultatet med den ursprungliga implementationen. Notera ifall felen har reducerats. V.1 Implementera och testa en ny version av operationen DIV (division) för att göra den snabbare än IEEE standarden V.2 Testa DIV operationen i en demonstratör, eg. en fungerande prototyp av systemet på en FPGA tillsammans med ett testprogram som körs på en de lokala processorerna. 1.3 Avgränsningar Flyttals implementationerna ska vara av formatet dubbel-precision (64 bitar) Implementationerna ska följa IEEE-754 standarden Implementationerna ska klara av en klockfrekvens på 50MHz 1.4 Lösningsmetoder Följande metoder och instrument har bedömts som lämpliga verktyg för att kunna genomföra arbetet: Quartus Altera som är en programmeringsmiljö i VHDL för att programmera FPGA enheter (Hårdvara). ModelSim Altera som är ett simuleringsverktyg för att kunna verifiera och felsöka digitala kretsar. Eclipse Nios II som är en programmeringsmiljö i C för att programmera processorer (Mjukvara). 14

Matlab är ett verktyg för att utföra matematiska beräkningar samt rita grafer. Mathematica som är ett verktyg som används för att utföra matematiska beräkningar med hög precision. 15

16

2 Teori 2.1 Flyttal med dubbel-precision Trots att detta examensarbete är baserat på dubbel-precision (64 bitars flyttal) kommer exemplen att bestå av 8 bitar; principerna är dock fortfarande desamma. Ett av målen är att studera IEEE-754 standarden för flyttal och av den orsaken kommer en del av det teoretiska vara baserat på det. Flyttal är en metod för att representera approximationer av reella tal. Flyttal har en konstant relativ noggrannhet med varierande absolutfel, tillskillnad från exempel fixpunktsmetoden som har en varierande absolutfel och konstant absolutfel. [1] 2.1.1 Representation av flyttal Att lagra stora reella tal i form av binära tal i digitala system kräver långa sekvenser av ettor och nollor. Som åtgärd är flyttal baserad på samma idé som grundpotensform. Se ekvation 2.1, där a är reella talet, b basen samt e exponenten. [2] N = a b e ekv. 2.1 Normaliserad grundpotensform Att skriva ett reellt tal i grundpotensform kan utföras på flera sätt, och att låta ett digitalt system hantera alla möjliga former kräver extra kapacitet som i sin tur kan försämra prestandan. Av den orsaken har man valt att endast använda en form, normaliserad grundpotensform. Se kriterium 2.1. 1.00.0 10 a 10 < 1.99 9 10 1.00 0 2 a 2 < 1.11 1 2 kriterium 2.1 17

Exempel 2.1 klargör proceduren för normalisering av binära tal, med precisionen p = 5. 101.11 2 0 (5.75 2 0 ) (Icke normaliserat) 10.111 2 1 (2.875 2 1 ) (Icke normaliserat) 1.0111 2 2 (1.4375 2 2 ) (Normaliserat, enligt kriterium 2.1) Exempel 2.1 Normalisering av binärt tal För omvandling från normaliserat binärt tal till decimaltal tillämpas ekvation 2.2. [3] p 1 (1 + bit n 2 n ) ekv. 2.2 n=1 Lagring av flyttal Vid lagring av flyttal har man valt att spara det som en vektor av bitar, arrangerade som i figur 2.1. 1 0 Tecken t Exponent e b (n bitar) Mantissa M (m bitar) Figur 2.1 Delarna som ingår för representation av flyttal. Biten innan binära kommat är inte inkluderad i mantissan, utan är underförstådd. 18

Tecken t: lagring av negativa tal i digitala system kan vara komplicerat. Av den orsaken har man valt att använda en Teckenbit (t) för att indikera ifall reella talet är negativt eller positivt. Det tar bort behovet av att använda tvåkomplementform eller någon annan metod för att lagra negativa tal. Mantissa M: även kallad signifikant, innehåller samtliga bitar efter binära kommat med precisionen p. Biten innan binära kommat är inte inkluderad i vektorn. Ettan innan binära kommat (eller nollan, beskrivs under fallen för specialfall) är alltid implicit inkluderad och kallas därför för den gömda biten. Exponenten e b : anger hur många steg talet har skiftats åt höger eller vänster. Fastän exponenten kan anta positiva eller negativa värden så är exponenten inte representerad i tvåkomplementform, utan snarare representerad i excessform (kallas även för offset form). Exponenten lagras således endast som positiva värden. För att lagra exponenten e, adderas ett beräknat offsetvärde (ekvation 2.3), och för att läsa exponenten e b subtraheras offset värdet. Offset värde = 2 n 1 1(n = antalet bitar i e b ) ekv. 2.3 För att konvertera ett normaliserat tal i flyttalsformat till ett reellt tal tillämpas ekvation 2.4. [4] N Norm = 1 s 1. M 2 e b offset ekv. 2.4 19

2.1.2 Precision IEEE-754 Tecken Exponent Mantissa Offset 1 11 52 1023 Figur 2.2 Dubbel-precision flyttal, 64-bitar Fast dubbelprecision endast har 52 bitar i fraktionen (se figur 2.2) så kan man i tabell 2.1 observera att precisionen p är 53 bitar. Orsaken är för att den gömda biten alltid är en etta bortsett från denormaliserade tal, beskrivs under specialfall. Tabell 2.1 IEEE-754 format IEEE-754 har valt att e min < e max för att undvika att man överstiger det maximala värdet minnet kan hantera (overflow). Ett exempel är 1 2 e min. Man kan dock understiga det minimala värdet minnet kan hantera (underflow) med e max, men det ser man inte lika allvarligt på eftersom att man oftast kan representera underflow med en nolla. 20

2.1.3 Specialfall IEEE-754 Tabell 2.2 Sammanfattad lista över olika typer av fall för flyttal Exponent e Mantissa M Specialfall e = e min 1 M = 0 ±0 (Noll) e = e min 1 M 0 0. M 2 e min (De-norm.) e min e e max M = 1. M 2 e (Normaliserat) e = e max + 1 M = 0 (Oändligt) e = e max + 1 M 0 NaN (Inget reellt tal) IEEE-754 har ett antal reserverade kombinationer för att kunna representera specialfall. Nedan beskrivs samtliga specialfall. För en sammanfattad lista, se tabell 2.2. [5] 1. Talet 0 Detta sker när talet är 0, eller när man understiger det minsta möjliga tal som kan representeras (underflow). Vid ett sådant scenario är den gömda biten en nolla och inte en etta som vid ett normaliserat tal, och ekvationen blir således enligt ekvation 2.5 [6]. Teckenbiten kan vara antingen 0 eller 1. N = 1 sign 0.00 0 2 0 ekv. 2.5-000 0000 Figur 2.3 Talet ± 0 21

2. De-normaliserade flyttal (gradvis underflow) Tillvägagångssättet för att lagra flyttal med normaliserad grundpotensform ger inte möjlighet att representera tal som är väldigt nära noll. För att åtgärda det har man valt att införa ett specialfall för tal som är mindre än det lägsta talet som kan representeras med normaliserad grundpotensform. [7] e e min 1 f 0 kriterium 2.2 Uppfyller flyttalet kriterium 2.2, då behöver talet inte normaliseras. Man skiftar således fraktionen tills exponenten e antar värdet e min, vilket i sin medför att den gömda biten antar värdet 0. För att omvandla ett de-normaliserat flyttal till ett reellt tal tillämpas ekvation 2.6 [8] N denorm = 1 sign 0. F 2 e min ekv. 2.6-000 F 0 Figur 2.4 ±De normaliserat tal 3. Oändligt (±overflow) Detta sker när ett tal överskrider intervallet av möjliga tal. - 111 0000 Figur 2.5 ± (oändligt) 22

4. NaN (Inget reellt tal) Detta sker när ett tal är odefinierat, tabell 2.3 visar ett par exempel. [9] - 111 F 0 Figur 2.6 NaN (Inget reelt tal) Tabell 2.3 Scenarion som resulterar i NaN Operation Orsak ± ± 0 / 0 0, x(x < 0) 2.1.4 Avrundningsfel Mellan två tal finns det oändligt många reella tal, att representera samtliga reella tal är dock inte möjligt med flyttal som består av ett ändligt antal bitar. Avrundningsfel är därför ett faktum med flyttal. [10] Avrundningsmetoder IEEE-754 stödjer följande avrundningsmetoder: avrunda mot 0, avrunda mot +, avrunda mot samt avrunda mot närmaste. Den sistnämnda, avrunda mot närmaste är dock standarden hos IEEE- 754. 23

Avrunda mot närmaste följer kriterium 2.3. Tal 0.4 Avrunda ned Tal 0.6 Avrunda upp kriterium 2.3 Ett specialfall är dock när talet är 0.5, det IEEE-754 gör vid ett sådant fall är: avrunda mot ett jämnt tal. Om talet exempelvis är 2.5, då avrundas talet till 2. [11] Noggrannhet Något man bör ta hänsyn till när man arbetar med flyttal är att fördelningen mellan flyttalen inte är jämnt fördelade. Antag att b = 2, p = 2, e min = 2 och e max = 3. De icke negativa talen kan då illustreras enligt figur 2.7 Figur 2.7 Notera att flyttalen ökar med en faktor 2 för varje ökning av exponenten. Mellan exponenterna ska 2 p = 4 flyttal delas över det tillgängliga intervallet mellan två exponenter, och detta leder till att precisionen försämras avsevärt ju högre värde exponenten har. [12] Förbättring av avrundningsfel Det finns flera metoder som kan tillämpas för att minimera avrundningsfel. Man kan exempelvis beräkna talet exakt (oändlig precision) och sedan avrunda. Detta kan dock vara väldigt kostsamt i processorkraft i förhållande till hur mycket felet egentligen minskar. IEEE-754 använder tre extra bitar, vilket medför att precisionen tillfälligt blir p + 3. Man har valt att döpa dessa tre extra bitar enligt följande: skydds-, avrundnings- samt sticky bit. Där sticky bit antar den minst signifikanta biten. Sticky biten har en särskild egenskap; när någon hög bit skiftas genom sticky biten, då kommer sticky biten att förbli hög. [13] 24

2.1.5 Exempel: 6+3 (8 bitar) 1. Konvertera till flyttalsformat 6 110.0 2 0 3 011.0 2 0 2. Bestäm fall Normalisera 110.0 2 0 1.1000 2 2 011.0 2 0 1.1000 2 1 3. Lagra - 6 3 0 101 1000 0 100 1000 4. Utför operation 1. Skifta minsta talet (M) tills de antar samma exponent 2. Addera 1,1000 + 0,1100 10,0100 5. Bestäm fall Normalisera 10.0000 2 2 1.0000 2 3 6. Lagra 0 110 0010 1 0 1,125 2 6 offset = 9 25

2.2 Implementeringar Denna sektion beskriver översiktligt metoderna som används vid implementering av flyttals-, sinus- och cosinusberäkningar. 2.2.1 Flyttalsoperator (Aritmetik) Flyttalsimplementationen använder Alteras megafunktioner [14] för att utföra matematiska operationer; addition, subtraktion samt multiplikation. Fördelen med dessa operationer är att man kan reglera antalet pipeline steg. Pipeline är när man delar upp en seriell operation i flera processer, arrangerade så att utgången av varje process är kopplad till ingången till en annan process. Figur 2.8 illustrerar en pipeline modell. [15] Process 1 Räkna Räkna Räkna Process 2 Analysera Analysera Analysera Process 3 Skriv ut Skriv ut Skriv ut t 0 t 1 t 2 Figur 2.8 Pipeline modell: efter 3 cykler skrivs resultaten ut efter varje cykel. 26

2.2.2 Sinus- och Cosinushårdvaruimplementering Vid sinus- och cosinusberäkningar används metoden Taylorutveckling kring 0. Denna metod kännetecknas även vid namnet Maclaurinutveckling [16], se ekvation 2.7-8. cos(x) = 1 x2 2! + x4 4! x6 6! + x8 8! = = ( 1) n x2n (2n)! n=0 ekv. 2.7 sin(x) = x x3 3! + x5 5! x7 7! + x9 9! = x 2n+1 = ( 1) n (2n + 1)! n=0 ekv. 2.8 I hårdvaruimplementeringen används de 21 första koefficienterna i Maclaurinutvecklingen för att beräkna sinus- och cosinusvärden. Beräkningar tillämpas med de implementerade flyttalsoperationerna. 27

28

3 Beskrivning av metodik Flera tillvägagångssätt utfördes för att felsöka samt åtgärda möjliga fel i implementationerna. Denna sektion beskriver samt förklarar varför metoderna nedan används. Mål V.1 samt V.2 (att utveckla en DIV funktion) kommer inte att tas med i Beskrivning av metodik (3) samt Resultat (4) på grund av begränsningar i Alteras megafunktioner. En av begränsningarna är att funktionen inte stödjer antalet bitar som behövs. 3.1 Validering av flyttalsimplementation i ModelSim Altera En testbänk skriven i VHDL, som täcker alla påtänkta beräkningsscenarion, användes för att felsöka flyttalsimplementationen. Ett VHDL-2008 kompatibelt bibliotek som heter IEEE-754 proposed användes som referens för att säkerställa att resultatet från implementationerna är korrekta (ett av målen är att ta hänsyn till IEEE standarden). På grund av att Alteras beräkningsmetodik är pipelinad och IEEE inte är det, måste en fördröjning appliceras på resultaten från IEEE. Detta för att resultaten från implementationen samt IEEE ska matcha varandra tidsmässigt när de kommer in i jämförelseblocket. Figur 3.1 visar testmodellen, där A och B är två insignaler av typen flyttal och ALU består av tre operatorer: ADD, SUB samt MUL. A B FP IMPL. ALU FP IEEE ALU Delay Comparison Figur 3.1 Jämförelse mellan beräkningar från IEEE samt pipelinad implementation 29

När en skillnad uppstår mellan IEEE och implementationen i jämförelseblocket skrivs ett felmeddelande ut på terminalen i ModelSim Altera. Figur 3.2 illustrerar upplägget av felmeddelandet. Bilaga 1. Typ av operator och fel s: e b : f Verkligt resultat s: e b : f Förväntat resultat Hela bitmönstret av verkligt resultat I fraktionen Figur 3.2 Felmeddelande, terminal i ModelSim Altera En kortfattad förklaring av upplägget i figur 3.2: Typ av operator och fel : beskriver vilken typ av operator som användes när ett fel upptäcktes, e.g. ADD, SUB eller MUL. Typ av fel kan exempelvis vara avrundningsfel. De två nästa raderna skriver ut resultatet i flyttals representation, där de tre olika delarna är separerade. Verkligt och förväntat resultat är implementationen samt IEEE, respektive. Den sista raden är helt enkelt hela resultatet av fraktionen. Detta medför att man kan inspektera de trunkerade bitarna. Felmeddelandet förenklar proceduren för felsökning, vilket gör det enkelt att spåra fel som uppstår i koden. 30

De applicerade testfallen kan ses i tabell 3.1. A B betyder att en av ingångarna A eller B antar värden från en ingångskolumn, samtidigt som den andra antar värden från den andra ingångskolumnen. Efter att sekvensen utförts, roteras ingångskolumnerna så att A och B byter värden med varandra. och 0 betyder att värdet sakta går mot oändligheten eller mot 0 (värdet innan multipliceras 2 och 0.5 för varje iteration), respektive. Tabell 3.1 Olika testscenarion för testbänken Ingång Resultat A B 0 - - 0 0 - Normal Normal Normal Normal Denormal Normal Normal Denormal Denormal Denormal Denormal Noll Y När testbänken exekverat samtliga tester, skrivs följande ut i terminalen: antalet iterationer, antalet fel samt hur många gånger en viss typ av fel uppstått. Detta för att ge en sammanfattad bild av samtliga fel. Bilaga 2. För att säkerställa att de modifierade koderna i flyttalsimplementationerna är korrekta utförs ytterligare testfall med andra beräkningsscenarion. Orsaken är för att det kan finnas en sannolikhet att man inte utfört tillräckligt många stickprov. 31

3.2 Felsökning av HW Sinus- och Cosinusfunktion Figur 3.3 HW-accelerator & SW SINUS/COSINUS modell, ForSyDe För att bekräfta att resultaten från hårdvaruacceleratorn med sinus- och cosinusimplementeringen är korrekta används dess motsvarighet i mjukvaran som referens. I verktyget ForSyDe, beskrivs ett system som en uppsättning av kommunikationsprocesser. Processer tilldelas sedan till processornoder. I detta test är en modell i ForSyDe upplagd med fyra olika noder. [17-19] Process P 0 sänder testvärden till process P 1 och P 3. Där värdena är fördefinierade, mellan 2π α 2π. P 1 och P 3 beräknar sinus- och cosinusvärden och skickar deras resultat till P 2, som skriver ut deras resultat i en terminal på datorn. De tre processerna (P 0, P 2 och P 3 ) är implementerade i mjukvara (SW) och P 1 i en hårdvaruaccelerator. Se figur 3.3. Hela systemet körs på en FPGA- 32

bräda (Altera DE-115) med en samplingsfrekvens på 1Hz så att användaren kan se resultaten ticka på terminalen. Verktyget ForSyDe genererar alla nödvändiga filer som behövs för att skapa en modell enligt figur 3.3. Quartus Altera och Eclipse Nios II används sedan för att ladda upp hårdvara- och mjukvaruinformation, respektive, till FPGA-plattformen. Resultaten utläses från nod P 2 genom JTAG med Eclipse Nios II. För att säkerställa att all information uthämtats, skrivs värdena ut i hexadecimalformat. Detta är dock väldigt besvärligt för en människa att läsa. P 2 skriver därför istället ut nödvändiga kommandon som behövs för att göra det möjligt att kopiera & klistra resultat för jämförelse i ett referensverktyg (figur 3.4), Mathematica eller Matlab. I detta fall används Mathematica, för att erhålla ett felfritt värde upp till erforderlig precision. För att få en visuell bild av hur felen minimerats efter att ha åtgärdat fel i flyttalsimplementationen används Matlab för att rita en graf av båda fallen, skillnad innan och efter man åtgärdat fel. Bilaga 3. Figur 3.4 Kommandon i Eclipse Nios II Differens i Mathematica Kopiera & Klistra 33

3.3 Validering av Maclaurinalgoritm i Mathematica Ett till test utförs för att verifiera att felen i sinus- och cosinusimplementeringen endast är relaterat till beräkningarna i flyttalsimplementationen, och inte till avrundningsfel i koefficienterna. I teorin nämns det att inte alla reella tal kan representeras i flyttalsformat (figur 2.7). Därför kan det finnas en sannolikhet att avrundningsfelen i koefficienterna inte är försumbara. Därför används Mathematica för att simulera två scenarion för att bekräfta om ovannämnda beteende kan försummas eller inte. En jämförelse dras mellan den inbyggda sinus- och cosinusfunktionen och en annan som använder Maclaurin algoritmen med samma antal koefficienter som i hårdvaruimplementeringen. I den första jämförelsen använder Maclaurinalgoritmen endast koefficienter med högprecision i Mathematica, och i den andra jämförelsen är koefficienterna konverterade till flyttalsformat och sedan tillbaka till reella värden. Bilaga 4. Värdena som används är detsamma som i sektion 3.2: 2π α 2π. Detta tillåter en att även kunna göra en jämförelse med resultaten i 3.2. För att få en visuell bild används Matlab för att rita graferna. 34

35

36

4 Resultat Under denna sektion är varje delsektion i Resultat (4) relaterat till varje delsektion under Beskrivning av metoder (3). 4.1 Resultat efter att ha åtgärdat fel i flyttalsimplementation Resultatet under denna delsektion (4.1) är sammankopplat till Validering av flyttals implementation i ModelSim Altera (3.1). Nedan visas tre tabeller som presenterar mängden fel som uppstått i flyttalsimplementationen, tabell 4.1-2. Tabell 4.1 antal fel - innan fel åtgärdat i flyttalsimplementering De feltyper som sträcker sig från oändligt till denormal informerar vad resultatet borde ha varit. Exempelvis bör 21 resultat i MUL ha varit av typen oändligt men istället visade sig vara något annat. Stickprov: Operator 5167 Feltyp: MUL ADD SUB Avrundning 488 100 8 Oändligt 21 1 0 NaN 0 0 2 Noll 116 0 0 Normal 0 0 0 Denormal 12 0 0 Annat 21 14 14 Totalt fel: antal 658 115 15 37

Tabell 4.2 Antal fel - efter att ha åtgärdat fel i flyttalsimplementering Stickprov: Operator 5167 Feltyper: MUL [5167] ADD [5167] SUB [5167] Avrundning 0 0 0 Oändligt 0 0 0 NaN 0 0 0 Noll 0 0 0 Normal 0 0 0 Denormal 0 0 0 Annat 0 0 0 Totalt fel: antal 0 0 0 Tabell 4.3 Antal fel Verifiering av tabell 4.2 Stickprov: Operator 5167 Feltyper: MUL [5167] ADD [5167] SUB [5167] Avrundning 0 0 0 Oändligt 0 0 0 NaN 0 0 0 Noll 0 0 0 Normal 0 0 0 Denormal 0 0 0 Annat 0 0 0 Totalt fel: antal 0 0 0 38

4.2 Resultat: Sinus- och Cosinusfunktion Denna delsektion visar resultaten från två delsektioner: Felsökning av HW Sinusoch Cosinusfunktion (3.2) samt Validering av Maclaurinalgoritm i Mathematica (3.3). Figur 4.3-4 består av fyra olika simuleringar sammanfogade under respektive graf. Den blåa samt röda linjen är relaterat till delsektion 3.2 och den svarta samt gröna linjen är relaterat till delsektion 3.3. Den röda- samt blåa linjen motsvarar beräkningar med FPGA (differens mellan hårdvara samt mjukvara) innan man åtgärdat fel och efter att ha åtgärdat fel i flyttalsimplementation, respektive. Den svarta- samt gröna linjen motsvarar beräkningar i Mathematica, differens mellan Maclaurinalgoritm samt inbyggd sinus- och cosinusfunktion. E tot = 3.272733775494361e 13 innan E totefter = 2.589179039122346e 13 Förbättring = E tot efter E totinnan 20.8% Figur 4.1 Sinus-Förbättring efter att ha åtgärdat fel i % E tot = 3.4712456568783212e 13 innan E totefter = 2.5561546456456651e 13 Förbättring = E tot efter E totinnan 26.3% Figur 4.2 Cosinus-Förbättring efter att ha åtgärdat fel i % 39

Figur 4.3 Sinus - Figur 4.4 Cosinus - 40

41

42

5 Diskussion och slutsats Testbänken som utformades under examensarbetets gång har visat sig vara ett väldigt effektivt verktyg för att lokalisera fel i flyttalsimplementationerna. De olika parametrarna i felmeddelandet som skrivs ut i terminalen när ett fel upptäcks bidrar till att man enkelt vet vilka sektioner i koderna man ska granska samt modifiera. Mer än 10,000 stickprov användes totalt för att vara på säkra sidan att man upptäckt samtliga potentiella fel. Innan detta examensarbete utfördes fanns det misstankar om att felen som uppstod i sinus- och cosinusimplementationen ursprungligen kom från olika avrundningsmetoder i flyttalsimplementationen jämfört med IEEE- 754. De olika stickproven som användes i testbänken har dock visat att även andra fel än avrundningsfel existerar i flyttalsimplementationerna. Man har dock enkelt lyckats eliminera samtliga lokaliserade fel effektivt med hjälp utav de olika parametrarna från felmeddelandena. Trots att flyttalsresultaten nu matchar IEEE-754 enligt testbänken i ModelSim Altera, genererar hårdvaruacceleratorn fortfarande felaktiga resultat från sinus- och cosinusimplementationen, dock med en reducering av medelfel med ~20.8% samt ~26.3% för sinus och cosinus, respektive. Experimentet visar oss att felen producerade från HW sinus- och cosinusfunktion inte har sitt ursprung från flyttalsberäkningar, utan snarare från otillräcklig precision i koefficienterna representerade i flyttalsformat i Maclaurinalgoritmen. 43

Denna slutsats kan verifieras med följande punkter (med hänsyn till figur 4.3-4): 1. Den gröna linjen, som representerar differensen mellan Maclaurinalgoritmen med reella koefficienter (samma antal som i hårdvaruimplementeringen) och dess inbyggda funktion, beräknat i Mathematica med hög precision, visar att det inte finns någon skillnad mellan båda algoritmerna. Slutsats 1: Felet är inte pga. för få koefficienter. 2. Den svarta linjen, samma som punkten ovan. Skillnaden är dock att Maclaurinkoefficienterna är omvandlade till flyttals format och sedan tillbaka till reella tal. Svarta linjen visar däremot att det nu finns en märkbar skillnad mellan båda algoritmerna. Slutsats 2: Avrundningsfelen i Maclaurinkoefficienterna som introduceras vid konvertering till flyttalsformat kan inte försummas. 3. Den svarta linjen följer samma mönster som hårdvarans resultat (blå och röd linje). Slutsats 3: Indikerar att den blåa linjen (HW sinus & cosinus) har samma typ av fel som svarta linjen. Slutsatsen måste därför vara att det inte är möjligt att implementera en sinus- och cosinusfunktion med tillräcklig precision (fel < 1 LSB) med Maclaurinalgoritm. Graferna visar dock att felen mellan π α π är tillräckligt små. Genom 2 2 att beräkna samtliga värden inom första kvadranten, kan problemet lösas. Detta kan implementeras genom att utnyttja följande samband: Kvadrant Sinus Cosinus 1. Sin(α) Cos(α) 2. Sin(α) Cos(90 + α) Sin(α) 3. Sin(270 + α) Cos(α) Cos(180 + α) Cos(α) 4. Sin(180 + α) Sin(α) Cos(270 + α) Sin(α) 44

Man kan ta sambandet ovan ytterligare ett steg längre, att utföra samtliga beräkningar i den första halva kvadranten, vilket skulle resultera i att man har 8 olika samband att ta hänsyn istället. Detta skulle medföra att resultaten uppnår bättre precision. Det är dock en fråga om uppoffring: precision eller kapacitet. Orsaken till att mål V.1 (implementering av operatorn DIV) inte uppnåddes är för att Alteras megafunktion inte stödjer tillräckligt många bitar som behövs för att kunna utföra beräkningarna. För att lösa detta problem behöver man utveckla en egen DIV operator som stödjer dubbel-precision. Tid och utrymme har dock inte varit tillräckligt under examensarbetets gång för att lösa detta problem och kan därför vid intresse utföras i ett framtida arbete. De obligatoriska målen 1-2 har uppnåtts med väldigt goda resultat. Testbänken har modifierats så att endast utskriften av felmeddelandet i terminalen (ModelSim Altera) är nödvändigt. Även flera stickprov har lagts till i testbänken. Innan hade man endast lokaliserat fel relaterat till avrundningsfel, nu har man dock lyckats upptäcka många andra fel. Samtliga upptäckta fel har korrigerats, samt att flyttalsimplementationerna nu även följer IEEE-754 standarden. Syftet med mål 3 var att endast jämföra HW och SW sinus- och cosinusfunktionerna samt notera ifall resultaten förbättrats efter att ha åtgärdat fel i flyttalsimplementationerna. Fler experiment har däremot utförts för att lokalisera ursprungskällan för fel, vilket visade sig vara koefficienterna i Maclaurinalgoritmen, som inte erhåller tillräckligt hög precision. 45

46

Källförteckning [1] Mark Zwolinski, 2004, Digital System Design with VHDL, s.34 [2] Bagenal, Frans, University of Colorado at Boulder, Scientific Notation, http://lasp.colorado.edu/~bagenal/math/math1.html, 2014 [3] Douglas A. Kerr, 2011, Scientific Notation and Floating point Representation, http://dougkerr.net/pumpkin/articles/scientific_floating.pdf, 2014 [4] Peter J. Ashenden, 2007. Digital Design: An Embedded Systems Approach Using VHDL, s.141, 2014 [5] Goldberg, David, 1991, What Every Computer Scientist Should Know About Floating Point Arithmetic, http://cr.yp.to/2005-590/goldberg.pdf, s.173-179, 2014 [6] Goldberg, David, s.157 [7] Goldberg, David, s.186 [8] Finley, Thomas, 2000, Floating Point, http://www.tfinley.net/notes/cps104/floating.html, 2014 [9] Goldberg, David, s.181 [10] Goldberg, David, s.157 [11] Goldberg, David, s.191 [12] Goldberg, David, s.158 [13] Goldberg, David, s.177 [14] Altera, 2014, Integer Arithmetic IP Cores User Guide, http://www.altera.com/literature/ug/ug_lpm_alt_mfug.pdf, 2014 [15] National Instruments, 2011, Programming Strategies For Multicore Processing: Pipelining, 2014 [16] Girardi, Maria, Professor, University of South Carolina, Taylor Series, http://www.math.sc.edu/~girardi/m142/handouts/10staylorpolyseries. pdf, 2014 [17] J. Öberg, F. Robino, 2011, A NoC Generator for the Sea-of-Cores Era, ACM Digital Libraries, 2014 [18] ] F. Robino, J. Öberg, 2013, The HeartBeat model: a platform abstraction enabling fast prototyping of real-time applications on NoCbased MPSoC on FPGA, 2014 [19] https://forsyde.ict.kth.se/noc_generator 47

48

Bilagor 1. Felmeddelande ModelSim Altera 49

2. Sammanfattning av fel ModelSim Altera 50

3. Felsökningsprocedur: Sinus- & Cosinusfunktion Kopiera & Klistra in Mathematica Differens mellan SW och HW Sinus & Cosinus Matlab Plotta differensen Beräkningar sparas i Matlab dokument 51

4. Simulering av modell: två olika jämförelser för validering av Maclaurinalgoritm Mathematica Inbyggd Sinus/Cosinusfunktion Differens Maclaurinalgoritm (Reella koefficienter) Maclaurinalgoritm (Konv. koefficienter) Matlab Plotta grafer 52

53