• No results found

Implementation of FIR filter and CORDIC algorithm on XSA-50 board

N/A
N/A
Protected

Academic year: 2021

Share "Implementation of FIR filter and CORDIC algorithm on XSA-50 board"

Copied!
123
0
0

Loading.... (view fulltext now)

Full text

(1)

Implementering av FIR filter

samt CORDIC algoritm på XSA-50

Joachim Andersson

Nima Khakpour

(2)

Implementering av FIR filter

samt CORDIC algoritm på XSA-50

Examensarbete utfört i Datakommunikation

vid Linköpings Tekniska Högskola, Campus

Norrköping

Joachim Andersson

Nima Khakpour

Handledare Qin-Zhong Ye

Examinator Qin-Zhong Ye

Norrköping 2006-01-09

(3)

Rapporttyp Report category Examensarbete B-uppsats C-uppsats D-uppsats _ ________________ Språk Language Svenska/Swedish Engelska/English _ ________________ Titel Title Författare Author Sammanfattning Abstract ISBN _____________________________________________________ ISRN _________________________________________________________________

Serietitel och serienummer ISSN

Title of series, numbering ___________________________________

URL för elektronisk version

Department of Science and Technology

x

x

LITH-ITN-EX--06/001--SE

Implementering av FIR filter samt CORDIC algoritm på XSA-50

Joachim Andersson, Nima Khakpour

Denna rapport visar hur ett FIR filter kan konstrueras i språket VHDL samt implementeras på XSA-50 kortet. Det andra som tas upp är hur CORDIC algoritmen används och hur den implementeras på samma kortsystem.

Rapporten är uppställd på så sätt att den först ska ge en grundläggande inblick i de två ämnesområdena FIR respektive CORDIC. Vidare så redovisas hur projekten har utförts för de båda konstruktionerna. Det ges även en beskrivning av XSA-50 kortet.

(4)

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/

Copyright

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.

(5)

Implementering av FIR filter samt CORDIC

algoritm på XSA-50

Nima Khakpour, Joachim Andersson

Sammanfattning

Denna rapport visar hur ett FIR filter kan konstrueras i språket VHDL samt

implementeras på XSA-50 kortet. Det andra som tas upp är hur CORDIC

algoritmen används och hur den implementeras på samma kortsystem.

Rapporten är uppställd på så sätt att den först ska ge en grundläggande inblick i

de två ämnesområdena FIR respektive CORDIC. Vidare så redovisas hur

projekten har utförts för de båda konstruktionerna. Det ges även en beskrivning

av XSA-50 kortet.

(6)

Abstract

This report shows how to construct a FIR-filter in VHDL and implement it on

the XSA-50 card. The other thing that the report looks up on is how the

CORDIC-algoritm is used and how to implement it on the same cardsystem.

The report is presented in such way that it starts with a basic insight in the two

subjects FIR and CORDIC. Further on the report shows how the project was

carried out for the both constructions. There is also a section describing the

XSA-50 card.

(7)
(8)

Innehållsförteckning

1 INLEDNING...2 1.1 BAKGRUND CORDIC...2 1.2 BAKGRUND FIR ...2 1.3 SYFTE...3 1.4 METOD...3 1.5 STRUKTUR...3 2 CORDIC ...5 2.1 CORDIC-MODER ...6 2.1.1 Framåtrotation...6 2.1.2 Bakåtrotation ...7

2.2 BEGRÄNSNINGAR I CORDIC-ROTATION...8

3 CORDIC-ALGORITMER FÖR FPGA DESIGN...11

3.1 KONVENTIONELL KONTRA REDUNDANT ARITMETIK PÅ FPGA ...13

3.1.1 Konventionell Aritmetik på FPGA ...13

3.1.2 Adderare och Subtraherare ...13

3.1.3 Adder/Subtraktor ...14

3.2 RADIX-2REDUNDANT ARITMETIK PÅ FPGA ...14

3.3 KONVENTIONELL CORDIC PÅ FPGA ...15

3.4 REDUNDANT CORDIC PÅ FPGA ...15

3.4.1 Uppskattning av tecken ...16

3.4.2 Differential CORDIC (DCORDIC)...16

3.4.3 Pre-Computed CORDIC (P-CORDIC)...16

4 DIGITALA FILTER...18

4.2 ICKE-REKURSIVA FILTER...18

5 DESIGN AV FIR-FILTER...21

5.1 FÖNSTERMETODER...21

5.2 FREKVENSDOMÄN DESIGN...21

5.3 FALTNING...22

6 XSA-50 KRETSKORT ...27

6.1 KOPPLA KORTET TILL PC ...27

6.2 VGA MONITOR TILL XSA-50 ...27

6.3 PS/2 PORT...28 6.4 100MHZ OSCILLATOR...28 6.5 SYNKRON DRAM ...28 6.6 FLASH RAM...29 6.7 SJU-SEGMENT LED ...29 6.8 DIPSWITCHAR...30 6.9 PUSHBUTTON...30 7 PROJEKTBESKRIVNING...32

(9)

7.3.5 Filter_muls...40 7.3.6 Adder...40 7.3.7 Adder2...41 7.3.8 Store ...41 8 AVSLUTNING ...43 8.1 RESULTAT CORDIC ...43 8.2 RESULTAT FIR ...43 8.3 PROBLEM...43 8.4 DISKUSSION...44 9 TERMINOLOGI...46 10 REFERENSER ...49 BILAGOR:

Bilaga A - Källkod för FIR filter

Bilaga B – Källkod för CORDIC

Bilaga C – Manual för FIR filter

Bilaga D – Schema över FIR filter

Bilaga E – Matlabkod för CORDIC

Bilaga F – Matlabkod för HEX-fil

Bilaga G – Matlabprogram för faltning

Bilaga H – Manual för CORDIC

(10)
(11)

1

Inledning

1.1

Bakgrund CORDIC

I mitten av 1950-talet kom det ett direktiv från den amerikanska militären om

att digitalisera den analoga datordrivna navigationssystemet till B-58

bombflygplan. Det ansågs att det analoga systemet hade en alldeles för

begränsad noggrannhet. Den största svårigheten vid en övergång till ett

digitaltsystem var att kunna göra real-tids beräkningar av navigations

ekvationer för att bestämma den nuvarande positionen på ett sfärisk planet. Vid

den tiden hade det redan utvecklats digitala differentialanalysatorer som kunde

utföra fortlöpande navigations beräkningar. Men dessa system klarade inte av

att producera resultat vid flygningar nära Nordpolen, och de hade även endel

andra tillkortakommanden. Därför krävdes det ett helt nytt sätt att lösa detta

problem på.

Volder presenterade en lösning på detta problem i sin artikel [1] om COordinate

Rotation DIgital Computer det vill säga förkortningen CORDIC. Senare

vidareutvecklades CORDIC-algoritmen av bland andra John Walther [2].

Walther generaliserade CORDIC-algoritmen så att den även löste hyperboliska

och exponentialfunktioner. Tack vare algoritmens förträfflighet när det gäller

lösningar för bland annat Very Large Scale Integrated Circuit (VLSI) teknik och

Field Programmable Gate Array (FPGA) har intresset kring den vuxit starkt.

Andra områden som algoritmen har använts i är miniräknare och andra Digital

Signal Processing (DSP) objekt, så som adaptiva filter, Fast Fourier Transform

(FFT), demodulatorer, och neurala nätverk. VLSI implementationer har

diskuterats i bl.a. doktorsavhandlingar av Timmermann [5] och Hahn [6]. Den

första FPGA implementationen undersöktes av Meyer-Bäse et al. [7,8].

1.2

Bakgrund FIR

Namnet ”FIR” står för ”Finite Impulse Response” och betyder ändligt pulssvar.

Detta pulssvar kan användas för att beskriva hur ett digitalt system beter sig. Ett

pulssvar som finns på ett filters utgång kan mätas då en enhetspuls finns på

filtrets ingång.

En enhetspuls är en puls med amplituden 1 som dyker upp då funktionens

argument är noll.

(12)

1.3

Syfte

Examensarbetets syfte var att implementera ett FIR filter samt CORDIC

algoritmen på kretskortet XSA-50. Arbetet ska vidare användas i

utbildningssyfte. I rapporten presenteras en del grundläggande information om

respektive ämnesområde, detta för att ge en övergripande insyn i ämnena.

Arbetet ska resultera i manualer för de båda konstruktionerna. Dessa kan

användas som utbildningsmaterial alternativt i självstudiematerial. Manualernas

syfte är att ge steg för steg förklaring till hur man implementerar dessa

konstruktioner på XSA-50 kortet.

1.4

Metod

Först genom diskussion med kursansvarig vid institutionen togs det fram en

kravspecifikation. Kraven omfattade simulering samt implementering av FIR

filtret och CORDIC-algoritmen. Vidare skulle det framtagna resultatet

sammanställas till att användas som kursmaterial.

1.5 Struktur

Rapporten börjar med en presentation av CORDIC-algoritmen för att sedan

fortsätta med olika metoder för tillämpning av algoritmen. Därefter visas

simulationer och praktisk implementation på kortet XSA-50. Rapporten

fortsätter med en övergripande bild av FIR filter samt en generell beskrivning

av några olika filter designer. Efter detta presenteras simulering och praktisk

implementering av filtret på kortet. Slutligen bifogas ett antal bilagor

(13)
(14)

2

CORDIC

I detta kapitel beskrivs grundläggande information om CORDIC-algoritmen.

Med hjälp av en vektorrotation kan man beräkna en trigonometriskfunktion. Det

är på denna bakgrund som algoritmen har tagits fram.

CORDIC-algoritmen roterar en vektor ett antal gånger mot en antagen vinkel. Algoritmen

närmar sig genom att de iterativa rotationerna sker med successivt mindre

vinklar. Detta kallas även ibland för mikrorotationer. Algoritmen [1] är härledd

från de generella ekvationerna för vektorrotation. En vektor v(x,y) roteras med

vinkeln φ blir:

Φ

+

Φ

Φ

Φ

=

=

)

sin(

*

x

)

cos(

*

y

)

sin(

*

y

-)

cos(

*

x

´

´

´

y

x

v

(2.1)

Figuren 2.1 visar en rotation av en vektor v med vinkeln φ.

figur. 2.1 Rotation av en vektor v med vinkeln φ.

Ekvationen (2.1) kan även skrivas så att:

)]

tan(

[

)

cos(

´

=

Φ

x

y

Φ

x

(2.2)

)]

tan(

[

)

cos(

´

=

Φ

x

+

y

Φ

y

(2.3)

Om rotationsvinkeln begränsas så att

reduceras multiplikationen

med tangenstermen till en skiftoperation. En godtycklig rotationsvinkel uppnås

i

±

=

Φ

)

2

tan(

(15)

]

2

[

1 i i i i i i

K

y

x

d

y

+

=

+

(2.5)

där:

i i i

K

2 1

2

1

1

)

2

cos(tan

− − −

+

=

=

1

±

=

i

d

Om man avlägsnar konstanten från den iterativa ekvationen, så har man bara en

skift/additions algoritm för vektrorotation. Produkten av konstanten

kan

beräknas separat och sedan appliceras i systemet. När antalet iterationer går mot

oändligheten så närmar sig produkten 0.6073. Därför har rotations algoritmen

en ökning,

på ca 1.647. Den exakta ökningen beror på antalet iterationer.

i

K

n

A

+

=

n i n

A

1

2

2

(2.6)

Vinkeln för en sammansatt rotation bestäms unikt av en serie av riktningar för

mikrorotationerna. Den totala vinkelrotationen blir:

)

2

(

tan

1 1 i i i i

z

d

z

+

=

− −

(2.7)

2.1

CORDIC-MODER

CORDIC-algoritmen arbetar oftast i en av två moder. Den ena moden kallas

rotation eller framåtrotation, i detta mode så roterar en inputvektor med en

specifik vinkel, given som argument. Den andra moden kallas för

vektoriseringsmoden eller för bakåtrotation, i detta mode så roterar inputvektorn

till x-axeln undertiden så sparas vinklarna för att genomföra rotationen.

2.1.1

Framåtrotation

I framåtrotations moden initieras vinkelackumulatorn med den önskade

rotationsvinkeln. Vid varje iterations tas ett beslut så att storleken på

residualvinkeln minimeras i vinkelackumulatorn. Därav baseras varje beslut på

tecknet för residualvinkeln vid varje steg. För framåtrotation är CORDIC

ekvationen följande:

(16)

1

=

i

d

om

z

i

<

0

, annars +1

1 + i

z

= Residualvinkeln

i

z = Tecken på rotationsvinkel

Vilket ger det här resultatet:

+

=

=

+

=

=

n i n n n n n n

A

z

z

x

z

y

A

y

z

y

z

x

A

x

2 0 0 0 0 0 0 0 0

2

1

0

]

sin

cos

[

]

sin

cos

[

(2.9)

Figur 2.2 visar en iterativ framåtrotation initierad med vektor v0.

Figur 2.2 iterativ framåtrotation initierad med vektor v0

2.1.2

Bakåtrotation

I bakåtrotations moden roterar inputvektorn mot x-axeln. Resultatet från

vektoreringsoperationen är en rotationsvinkel och en skalad storlek av original

vektorn. Vektoreringsfunktionen fungerar på så sätt att den försöker minimera y

komponenten i residualvektorn vid varje rotation. Tecknet från den återstående

delen av y-komponenten används till att bestämma vilken riktning som

(17)

Där:

1

+

=

i

d

om

y

i

<

0

, annars –1

Vilket ger det här resultatet:

− −

+

=

+

=

=

+

=

n i n n n n n

A

x

y

z

z

y

y

x

A

x

2 0 0 1 0 2 0 2 0

2

1

)

(

tan

0

(2.11)

Figur 2.3 visar en Bakåtrotation initierad med vektor v0.

Figur 2.3 Bakåtrotation initierad med vektor v0

2.2

Begränsningar i CORDIC-rotation

Båda CORDIC moderna är så som de är uppgivna begränsade i rotationsvinkeln

till värden mellan -π/2 och π/2. Denna begränsning beror på att vinkeln vid den

första iterationen är

. För sammansatta rotationsvinklar större än

π/2 krävs det en extra rotation. Volder [1] beskriver initial rotationen till ±π/2.

Detta ger korrigerings iterationen:

)

2

(

tan

1 0 0 −

=

Φ

(18)

d=+1 om y<0, annars –1.

Det finns ingen ökning för denna initialrotation. Ett annat alternativ är att man

kan göra en initial rotation för antingen π eller 0, och på så sätt undvika att

tilldela x och y komponenterna till roterande elementet. Det finns ingen ökning

då heller tackvare initialrotationen:

y

d

y

x

d

x

=

=

´

´

(2.13)

z´=z om d=1 eller z´=z-π om d=-1.

d=-1 om x<0, annars +1.

(19)
(20)

3

CORDIC-algoritmer för FPGA Design

I detta kapitel presenteras en större del av CORDIC-algoritmen i självstudie

syfte.

Den höga kapacitet och prestanda som FPGA, har uppnått de senaste åren, har

resulterat i en acceleration av DSPs uppgiftslösning. FPGA utrustningen har

dragit stor nytta av ” VLSI deep sub-micron technology,” för att få bl.a. högre

hastighet och kapacitet.

Tidiga FPGAs kunde inte implementera parallell CORDIC-algoritmer på grund

av begränsningar i chip storlek och möjligheten att routa hårdvaruskiftningen

[4]. Därför har många FPGA baserade DSP applikationer använt sig av en

iterativ struktur.

En nackdel med konventionell CORDIC implementationer som är baserade på

ripple-carry-adderare eller subtraherare, är den interna carry

överföringsfördröjningen. För att öka prestanda har redundant aritmetik

föreslagits. Denna aritmetik skulle då kunna rationalisera bort fördröjningen.

Dock innebär detta flera svårigheter. Det är inte möjligt att upptäcka tecknet för

en redundant siffra utan att inspektera alla siffror som måste propageras från

MSB till LSB. Eftersom alla siffror inte undersöks så finns det en chans för att

tecknet inte kan bestämmas. I ett sådant fall kan någon av siffrorna {-1, 0, 1}

väljas, detta kan i sin tur leda till icke-konstant skalfaktor eller godtycklig

rotation måste utföras. I det första fallet så måste skalfaktorn beräknas parallellt

med CORDIC iterationen, medan en fel vald rotation måste kompenseras.

Xiling FPGA har en matris struktur, där varje element av matrisen är en

Configurable Logic Block (CLB). CLB:arna är kopplade internt och omgivna

av programmerbara Input-Output Block (IOB). En CLB består av två 4-input

Look-Up Tables (LUTs), en 3-ingångs och två stycken register se figur 3.1. I

sin rapport [9] har Valls et al. undersökt FPGA implementationer av dessa

operationer både genom att använda konventionell och redundant aritmetik. Där

säger de att en jämförelse mellan olika design kan enkelt göras genom att

utvärdera den kritiska fördröjningsvägen (t.ex. genom att räkna antalet full

adderare mellan två register). Men i en FPGA design kan prestationen förändras

beroende på hur väl man utnyttjar arean. Det är inte tillräckligt att bara räkna

antal CLB som ingår därför att routingen är en viktigt komponent för

beräkningen av den totala fördröjningen. Den långa routingfördröjningen beror

på dessa faktorer enligt Valls et al. [9]:

(21)

• Det är inte möjligt att finna en optimal placering och routing

för alla problem p.g.a. begränsade resurser och fasta strukturer

av utrustningen.

• Placering och routing är automatiska eller halv-automatiska

processer.

Figur 3.1 tagen direkt ur Valls et al. [9].

I deras rapport så karakteriseras throughput av propagations fördröjningen i

kritiska vägar. Tabell 3.1 visar värden och beskrivningar av symboler som

används för att beteckna fördröjningen i den kritiska vägen. De korresponderar

till Xilings XC4000XL chips med hastighetsgraden 1.

(22)

Tabell 3.1 taget direkt ur Valls et al. [9].

3.1

Konventionell kontra Redundant Aritmetik på FPGA

Operationer som ingår i CORDIC är addition och subtraktion. I denna del av

rapporten tittar vi på en del utvalda delar av Valls et al. [9] resultat. För en

djupare inblick och mer utförligt redovisning rekommenderas läsning av hela

rapporten [9].

3.1.1

Konventionell Aritmetik på FPGA

Aktuella FPGAn tillhandahåller resurser för att effektivt kunna implementera

aritmetiska operationer.

3.1.2

Adderare och Subtraherare

Grunddelen av en konventionell adderare och subtraherare är Full Adder (FA).

En FA består av två stycken 3-ingångsfunktioner, därför kan den realiseras med

hjälp av en enda CLB. Om man använder sig av FPGA:ns resurs att generera

Carry Signal (CS), resulterar detta i en reduktion av area och en ökning i

hastighet uppnås. I detta fall kan två FAn användas i samma CLB, så en

N-bitars adderare eller subtraherare kräver N/2 CLBn. Propagationsfördröjningen

(23)

Den kritiskavägen bestäms av propagationstiden för ripple carry och

routingfördröjningen en av de minst signifikanta input av kretsen.

3.1.3

Adder/Subtraktor

En adder/subtraktor utför en addition eller subtraktion beroende på ingångsvalet

på A/S. Denna ingång indikerar om en operand är 2-komplement. Add/Sub

grundcellen består av två 4-ingångsfunktioner. Ena till att beräkna ut värdet och

den andra till att sänd carry. Enligt detta kan en N-bitars Add/Sub få plats i

(N+1)/2 CLBn. Den andra halvan av CLBn används till att beräkna LSB 1 vid

subtraktion. Den kritiska vägen för denna krets uttrycks av:

[

t

N

]

ns

T

T

T

N

T

t

T

T

Nf net SUM NET BYP ASCY Nf net CKO p

45

.

0

2

/

)

4

(

5

.

6

)

(

2

/

)

4

(

1 , 1 ,

+

+

=

+

+

+

+

+

=

(3.2)

3.2

Radix-2 Redundant Aritmetik på FPGA

Redundant aritmetik är användbart då hastigheten vill höjas i operationer som

karakteriseras av lång propagationsfördröjning. Utöver denna funktion så kan

data processas med Most Significant Digit First (MSDF). Detta förenklar

implementering av operationer som i sig arbetar på MSDF-sätt, som t.ex.

division eller roten ur eller förbättrade algoritmer så som Differential CORDIC

[10].

Implementering av vissa operationer så som, multiplikation, skalning och

dividerare på FPGA kan finnas i [11].

I radix-2 redundant aritmetik kan en siffra X representeras som:

− = − −

=

=

1 0 1 2 1 0 2

...

2

N i i i N

x

x

x

x

x

X

(3.3)

där varje siffra

x

i

tillhör {-1, 0, 1} enligt:

− +

=

i i i

x

x

x

(3.4)

där

x

i+

,

x

i

{

0

,

1

}

.

(24)

3.3

Konventionell CORDIC på FPGA

Den bit-parallella fullt pipelineade kretsen för att beräkna ekvation (2.8) för

framåtrotation visas[9]. Den är baserad på ripple carry adderare/subtraherare (se

3.1.3). Tecken biten från

är A/S linjen, som indikerar om nästa operation är

en addition eller subtraktion. Hela processen kräver (2·(M+1) ·(N +1)+ (M

+1)^2)/2 CLB:n. Den kritiska vägen ordnas av M+1 A/S näten. Varenda en av

dessa nät har en fan-out på 2N + M + 3. Ekvationen för propagationstiden i den

kritiska vägen ges av:

i

Z

ns

N

t

T

T

T

N

T

t

T

T

M f M N net SUM NET BYP ASCY M f M N net CKO p

]

45

.

0

2

/

)

4

(

5

.

6

[

)

(

2

/

)

4

(

1 , ) 1 2 ( 1 , ) 1 2 (

+

+

=

+

+

+

+

+

=

+ + + + + +

(3.5)

Processorns latens är M+1 klockcykler. I fall av CORDIC implementering som

beräknar antingen framåt- eller bakåtrotation med en precision av M=16 bitar,

så är den area som ockuperas på FPGA:n 535.5 CLBn. Den sämsta

routingfördröjningen ges av en av de 17 näten med en fan-out på 61. Den

maximala operations frekvensen är ungefär 25MHz när den får plats på ett chip

med hastighetsgraden 1 och med en ockupation av mindre än 25%. För en

struktur som beräknar både framåt- och bakåtrotation så är resurserna 100%

delade. I sådana fall räcker det med att inkludera en multiplexor för att välja

A/S signal mellan tecken biten

framåtrotation eller

i bakåtrotation. Det

krävs bara en extra (M+1)/2 CLB. Men trots allt så försämrar det prestanda

något p.g.a. extra routingfördröjning. Den resulterande kritiska vägen ges av:

i

Z

Y

i

ns

N

t

t

T

T

T

N

T

t

T

t

T

T

M f M N net net SUM NET BYP ASCY M f M N net ILO net CKO p

]

45

.

0

2

/

)

4

(

8

.

7

[

)

(

2

/

)

4

(

1 , ) 1 2 ( 17 , 1 1 , ) 1 2 ( 17 , 1

+

+

+

=

+

+

+

+

+

+

+

=

+ + + + + +

(3.6)

3.4

Redundant CORDIC på FPGA

För att kunna lösa problemet med redundant aritmetik baserad CORDIC, har

flera metoder föreslagits. Alla dessa förslag behåller skalfaktorn konstant. De

har blivit klassificerade i tre grupper: (i) sådana som baseras på uppskattning av

tecknet, (ii) differential CORDIC-algoritm och (iii) de som baseras på

(25)

3.4.1

Uppskattning av tecken

Flera metorder utför uppskattning på tecknet genom att utforska några av

värdena. Dessa är:

• Double Rotation CORDIC [12].

• Correcting Rotation CORDIC ([12] för framåtrotation och [13]

för bakåtrotation).

• Householder [14-16]

Bland dessa är Correcting Rotation CORDIC den enklaste att implementera.

Uppsättningen av ekvationer är inte samma för alla iterationer i denna metod.

De andra metoderna för uppskattning av tecken, har mer avancerade ekvationer

vilket leder till att en större area användes och den får en lägre throughput.

3.4.2

Differential CORDIC (DCORDIC)

Differential CORDIC [17] är en redundant aritmetik baserad metod som

behåller en konstant skalfaktor, utan att behöva extra rotationer. I DCORDIC

väljs riktningen för mikrorotationen på så sätt att den återstående

rotationsvinkeln i framåtrotation-moden och

variabeln i bakåtrotation-moden

alltid minskas. Målet med denna metod är MSDF beräkningen av alla

involverade operationer.

i

Y

3.4.3

Pre-Computed CORDIC (P-CORDIC)

En annan metod att utföra CORDIC-algoritmen på är att direkt beräkna

riktningen för mikrorotationen utan iterationer.

I [18,19] uppnås sambandet mellan riktningen, mikrorotationen och

inputvinkeln för framåtrotationsmoden. Sambandet mellan X- och Y-ingången i

bakåtrotationsmoden uppnås i [18]. Denna metod har uteslutits för FPGA

design då dess implementering kräver två MSDF multiplikationer och en MSDF

addition.

(26)
(27)

4

Digitala Filter

Det finns olika sätt att specificera digitala filter[20]. Exempel på detta är en

klass av processer som kallas all-pass. De är designade till att ha en flat

magnitudkaraktäristik men har även en faskaraktäristik som varierar med

frekvensen i vissa fall. Många designer är framtagna för att kunna lösa olika

problem, som att till exempel kunna se ett specifikt impulssvar eller stegsvar.

Impulssvaret är den term som bäst beskriver ett systems egenskaper medan

stegsvaret inte är lika unikt i det syftet.

De mest förekommande digitala filtren är Linear Time-Invariant (LTI) filter. Ett

LTI påverkas av sin in-signal genom en process som kallas linjär faltning, som

betecknas av f*x där f är filtrets impulssvar. Den generella formeln för

ekvationen till en godtycklig LTI process är:

= =

=

M k k N K k

y

n

k

b

x

n

k

a

0 0

]

[

]

[

(4.1)

4.2

Icke-rekursiva filter

I ett icke-rekursivt filter så beror utsignalen endast på nuvarande eller senaste

in-signal. Differentialekvationen för ett sådant filter ser ut som nedan

=

=

M k k

x

n

k

b

n

y

0

]

[

]

[

(4.2)

Detta filter har ingen återkoppling av utsignalen så summan skickas ut direkt på

utgången. Koefficienterna

är helt enkelt lika med successiva termer i filtrets

impulssvar. FIR filter är att föredra när antalet koefficienter måste vara ändligt.

Konsten att designa ett icke-rekursivt filter är att uppnå ett acceptabelt

k

(28)

frekvenskomponenter som passerar filtren. Ett exempel på ett pulssvar är till

exempel funktionen δ[n] som blir 1 endast då n=0 alla andra n ger δ[n]=0. Det

ter sig så att om pulssvaret är känt och en insignal är given så kan utsignalen

beräknas med hjälp av faltning.

(29)
(30)

5

Design av FIR-filter

FIR filter spelar en betydande roll för design av diskreta tidssystem[21]. Till

skillnad från Infinite Impulse Response (IIR) filter så kan dessa filter designas

till att vara slumpmässiga och ha exakt linjär fas. FIR filter kan implementeras

med hjälp av Discrete Fourier Transform (DFT). Det finns flertalet olika

metoder för att designa FIR filter som till exempel fönstermetoden.

5.1

Fönstermetoder

Fönstermetoden är en av de äldsta och enklaste metoderna för att designa ett

FIR filter, den är även en av de bästa. Fönster kan användas till att designa FIR

filter av vilken storlek som helst. Vidare så kan det med fönster skapas filter

med linjär eller icke-linjär faskaraktäristik och med reellt eller komplext

impulssvar.

Fönstermetoden är ett exempel på en tidsdomän teknik. Den väljer filtrets

impulssvar h[n] och approximerar ett idealiskt impulssvar i[n].

5.2

Frekvensdomän design

Andra filtermetoder är frekvensdomän designalgoritmer. Dessa väljer filtrets

impulssvar så att filtrets frekvenssvar approximerar ett idealiskt frekvenssvar

I(

). Det här menas att när specifikationen är given på det här viset måste

den inversa DTFT användas först för att utvärdera i[n].

jw

e

Impulssvaret h[n] bestäms genom att multiplicera det idealiska impulssvaret

med en N-punkters fönstersekvens, w[n]:

]

[

]

[

]

[

n

i

n

w

n

h

=

(5.1)

(31)

5.3

Faltning

En annan metod som kan tillämpas för att designa FIR filter är faltning. Kort

sagt är faltning en matematisk operation som inom signalbehandling används

till exempel när linjära filter appliceras.

Ett system beskrivs ofta med differentialekvationer [23], dessa kan vara svåra

att formulera. I stället för att använda metoden med differentialekvationer när

utsignalen från ett system ska bestämmas, kan faltningsmetoden utnyttjas.

Denna metod innebär följande:

En enhetspuls kan används som insignal, betecknad δ(t) eller δ[n] till ett okänt

system (ett system sägs vara okänt då det inte har några formulerade

differentialekvationer). Detta system kommer då att svara med en utsignal som

kallas för impulssvaret h(t) eller h[n] för den tidsdiskreta varianten.

Impulssvaret ger en bra beskrivning av hela systemet.

Fortsättningsvis kan utsignalen y(t) eller y[n] från ett system beräknas med

hjälp falting mellan impulssvaret h(t) och insignalen x(t) eller h[n] och x[n].

Faltning kan göras i två varianter, tidskontinuerlig eller tidsdiskret.

∞ =

=

0

]

[

*

]

[

]

[

i

i

n

h

i

x

n

y

,n

0

tidsdiskret variant

(5.2)

=

0

)

(

*

)

(

)

(

t

x

λ

h

t

λ

d

λ

y

,t

0

tidskontinuerlig variant

(5.3)

Den tidsdiskreta varianten är tillämpad i detta exjobb, vilken kan förklaras på

följande sätt:

• I en tidsdiskret signal kan varje sampelvärde ”klippas ut” från hela signalen.

Detta genom att signalen multipliceras med en förskjuten impuls, figur 5.2.

• En impuls ger som svar ett impulssvar, oavsett om den är förskjuten eller

(32)

Insignal till Systemet

Utsignal från systemet

δ[n]

h[n]

δ[n-1]

h[n-1]

δ[n-2]

h[n-2]

δ[n-i]

h[n-i]

Tabell 5.1

Om impulsen till exempel skulle vara förskjuten 3 steg åt höger, det vill säga

δ[n-3] så kommer impulssvaret att fördröjas med 3 steg åt höger.

• En multiplicering av termerna i vänstra kolumnen av tabell 5.1 med till

exempel en konstant, måste på grund av att systemet är linjärt, motsvaras av

en multiplicering i högra kolumnen med samma konstant

• Hela insignalen ”x” alltså signalens samtliga sampels fås genom att

summera alla sampelvärden multiplicerade med ”förskjutna impulser” där

av formeln,

∞ =

=

0

]

[

*

]

[

]

[

i

i

n

i

x

n

x

δ

(5.4)

Vidare fås utsignalen ”y” genom att summera alla impulssvar multiplicerade

med ”konstanter” det vill säga sampelvärdena. Det gör att den slutliga

faltningsformlen blir,

på grund av linjärt system. (5.5

)

∞ =

=

0

]

[

*

]

[

]

[

i

i

n

h

i

x

n

y

Faltningsformelns index ”i” börjar vid i=0 och sträcker sig till ett ändligt värde i

=N i kausala system.

(33)

För att visa på hur den tidsdiskreta faltningsformeln fungerar så illustreras ett

exempel nedan. Signalen x(i) i figur 5.1 faltas med impulssvaret h(n) i figur 5.2

då erhålls resultatet enligt tabell 5.2.

0 1

1

2 3

Figur 5.1 Visar en signal x(i) med 3 stycken sampelvärden alla med värde 1.

1 2 3

0 1

(34)

Antal(i) Insignal

x(i) Impulssvaret h(n) Utsignal y(n)

0 1

1

1

1 1

1

2

2 1

1

3

3 1

1

3

4 1

1

2

5 1

1

1

6 1

1

0

(35)
(36)

6

XSA-50 kretskort

XSA-50 kortet är ett avancerat kretskort med många utvecklings möjligheter. I

detta kapitel beskrivs kortets olika funktioner. Se figur 6.1 för en översiktsbild.

Figur 6.1 Översiktsbild av XSA-50 kortet ur [24].

För en detaljerad genomgång av XSA-50 kortet rekommenderas [24]. I

manualen till kortet [24] så finns det även ett schema över XSA-50 och en

presentation av alla pinnar, samt vad de är kopplade till på kortet. Där finns

även en beskrivning av hur man laddar ner program till kortet.

6.1

Koppla kortet till PC

Kortet kan kopplas till en PC genom parallell in-/utgångs porten. Detta är

användbart då kortet ska programmeras med det egna programmet, eller då

SDRAM:en ska fyllas med värden.

(37)

6.3

PS/2 port

På kortet finns det en PS/2 ingångs port som kan användas till att koppla in en

mus eller ett tangentbord. Programmering av ett mus- eller

tangentbordsinterface måste göras för att kunna behandla informationen som tas

emot från tangentbordet eller musen.

6.4

100 MHz oscillator

Kortet innehåller även en intern 100MHz oscillator. Denna kan ställas om från

100 MHz ner till 48.7 KHz. Det går även att koppla in en extern oscillator på

kortet på pin 64. Den externa oscillatorn får dock inte ha en högre frekvens än

50 MHz. När det har kopplats in en extern oscillator så tar den ”över”

funktionen av den interna.

6.5

Synkron DRAM

XSA-50 kortet innehåller även en SDRAM som kan användas till att spara eller

hämta in information till programmet som man har skapat. Se bilaga H för en

steg för steg genomgång av detta.

SDRAM:en är organiserad på detta sätt:

Figur 6.2 ur [24].

(38)

Figur 6.3 ur [24].

För tillfället så används inte pin 133 på SDRAM:en men den kan komma att

användas i framtiden.

6.6

Flash RAM

Kortet innehåller även en Flash RAM. För en större förståelse av Flash RAM:en

rekommenderas läsning av [24] och [25].

6.7

Sju-Segment LED

På kortet finns det en sju-segments LED display se figuren nedan. Displayen är

aktivt-hög det vill säga att den visar ett tecken då den är logiskt hög.

(39)

6.8

DIP Switchar

Kortet innehåller även fyra stycken switchar, se figur 6.1. för mer information

om switcharna rekommenderas läsning av [24].

6.9

Pushbutton

Pushbutton som finns på kortet delar samma pin som PS/2 data. Se figuren

nedan

Figur 6.5 ur [24].

Detta gör att man inte kan använda PS/2 ingången samtidigt som man använder

pushbutton.

(40)
(41)

7

Projektbeskrivning

I detta kapitel presenteras projekten som har utförts.

7.1

Projektbeskrivning för CORDIC

Målet med CORIC delen av projektet var att implementera en av

CORDIC-moderna på FPGA kortet XSA-50. Detta skulle sedan resultera i ett häfte

(bilaga H) som studenter senare ska kunna använda för självstudier. För att göra

projektet mer användbart än bara vid studier av CORDIC-algoritmen så

användes även SDRAM funktionen på kortet. Detta för att studenter ska kunna

följa vårat arbete för att implementera SDRAM i egna framtida projekt.

Valet av CORDIC-mode föll på framåtrotation eller rotationmode som det även

kallas. Detta för att förenkla förståelse av annan studiematerial som kommer att

tillgängliggöras för studenterna under kursens gång.

För att implementera algoritmen med hjälp av den interna SDRAM:en så

utgicks det ifrån ett exempel från XESS Corporations hemsida [26]. Deras

exempel fungerade på sådant sätt att den skapar en slumpgenererad

sifferkombination. Denna kombination sparas sedan på SDRAM:en, därefter så

läses värdena tillbaka från SDRAM:en och jämförs med de framslumpade

värdena. Om sifferkombinationen inte stämmer med varandra så har något fel

skett vid antingen skrivningen eller läsningen till/från SDRAM:en. Detta

indikeras då på LED displayen.

Deras stomme [26] användes till detta projekt. Men istället för att skapa en

slumpgenerator som spara siffror i minnen, så skapades

CORDIC-framåtrotation.

Y- och Z-värdena är satta i förväg i programmet. Det vill säga att dessa värden

är konstanter. Men x-värdet skapas externt igenom ett Matlab program som har

konstruerats specifikt för detta projekt. Z-värdet måste ligga i intervallet +45 till

-45. Om man ska använda ett negativt värde på z så måste man dock räkna ut

tvåkomplementet.

(42)

7.1.2

Utföra CORDIC algoritm på kortet

Det första som händer när programmet utförs är att den läser in x-värdet som

tidigare har sparats i SDRAM:en. Värdet sparas på den först minnesplatsen på

SDRAM:en.

Med hjälp av detta värde utförs CORDIC algoritmen. Sedan sparas det

uträknade värdet tillbaka på SDRAM:en. Det sparas på den andra adress raden i

SDRAM:en.

När uträkningen är färdig så visar LED displayen på kortet ”0”. Då kan

laddning av det nya uträknade värdet ske till en PC för att verifieras.

7.1.3

Verifierng av CORDIC algoritmen

För att verifiera de värden som har beräknats fram på kortet utfördes simulering

med hjälp av ett program skapat i Matlab. Se bilaga E för Matlabkoden.

Nedan i tabell 7.1 visas resultatet av simuleringar utförda i Matlab och de

beräknade värden utförda av programmet på XSA-50 kortet.

x-värde

y-värde z-värde Resultat med XSA-50 Resultat med Matlab

14 10 40 7

7.0734

5 10

40

FFFB

1

-4.2792

20 15 35 12

12.8065

8 15

35

FFFC

1

-3.3796

25 20 30 21

19.1806

15 20 30 6

4.9201

30 30 20 27

29.5258

10 30 20 FFFD

1

-1.4230

Tabell 7.1 Resultat av värden på XSA-50 kortet med programmet som har tagits fram

(43)

den enda felkällan. När man utför simulering i Matlab så har man möjlighet att

utföra många fler iterationer och därmed uppnå en mycket högre precision i

beräkningarna. Men detta är inte möjligt då man utför algoritmen i en

hårdvarumiljö. I Matlabsimulationen utförs det 15 iterationer medan det bara är

5 iterationer i hårdvaran. För VHDL kod se bilaga B. För en mer detaljera

genomgång av hur experimenten har utförts rekommenderas läsning av bilaga

H.

(44)

7.2

Projektbeskrivning FIR Filter

Detta avsnitt har för avsikt att ge en bra inblick i hur skapandet av FIR filtret

gick till, från ide till färdig konstruktion.

Projektet inleddes med att bestämma vilken metod som skulle tillämpas vid

beräkning av filtret, metoden som valdes var Falting. Därefter gjordes en studie

i hur filtrets överföringsfunktion skulle se ut. Inspiration hämtades från [22]

som lade grunden till funktionen. Detta gjordes för att knyta an till exjobbets

mål, att underlätta självstudier för studenter i detta ämne.

Filtrets överföringsfunktion kom att bli enligt figur 7.1 nedan:

Figur 7.1 FIR filter.

I figuren 7.1 syns det att filtret har 3 stycken koefficienter h[2], h[1] och h[0].

Antalet är orelevant eftersom tillvägagångssättet vid konstruktion av större filter

med flera koefficienter är detsamma.

Filtret fungerar på så sätt att insignalen x[n] sätts till godtyckliga värden som

matas in i systemet. Sedan multipliceras x[n] med den 1:a filterkoefficienten

h[0] och resultatet adderas med

och läggs ut som utsignalen y[n]. Efter det

multipliceras x[n] med den 2:a koefficienten h[1] och resultatet summeras ihop

med det tidigare värdet i

. Till sist så multipliceras x[n] med den 3:e

koefficienten h[2] och det värdet sparas i

. Ett exempel visas i tabellen 7.2.

1 −

z

1 −

z

1 −

z

Insignal x[n] Koefficienter h[n] Utsignal y[n]

1,0,0,0 h[2]=1, h[1]=2, h[0]=3 3,2,1,0

(45)

Det framtagna filtret simulerades i Matlab och implementerades på hårdvaran

för att se att det överrensstämmer med teorin. Vid simulering så testades värden

mellan 0-9 på insignalen x[n]. Denna begränsning av insignalen beror på

tangentbordsavkodningen. Filterkoefficienterna är fasta i detta fall men kan anta

vilka heltal som helst. Resultatet av simuleringen visas i tabell 7.3 och

implementeringen på hårdvara i tabell 7.4.

Insignal x[n] Koefficienter h[n]

Utsignal y[n]

1,0,0

h[2]=1, h[1]=2, h[0]=1 1,2,1

2,0,0

h[2]=1, h[1]=2, h[0]=1 2,4,2

3,0,0

h[2]=1, h[1]=2, h[0]=1 3,6,3

4,0,0

h[2]=1, h[1]=2, h[0]=1 4,8,4

5,0,0

h[2]=1, h[1]=2, h[0]=1 5,10,5

6,0,0

h[2]=1, h[1]=2, h[0]=1 6,12,6

7,0,0

h[2]=1, h[1]=2, h[0]=1 7,14,7

8,0,0

h[2]=1, h[1]=2, h[0]=1 8,16,8

9,0,0

h[2]=1, h[1]=2, h[0]=1 9,18,9

Tabell 7.3 Simulering i Matlab.

Resultatet av testerna på hårdvaran och simuleringarna i Matlab ser ut på olika

sätt. Till exempel när insignal till filtret är 1 så blir utsignalen i Matlab 1,2,1

medan den på hårdvaran blir 4. Detta är för att utsignalen från hårdvarna visar

summan av multiplikationerna mellan insignal x[n] och filterkoefficienterna

h[n]. Medan den i Matlab visar varje multiplikation var för sig.

(46)

Insignal x[n] Koefficienter h[n]

Utsignal y[n]

1

h[2]=1, h[1]=2, h[0]=1

4

2

h[2]=1, h[1]=2, h[0]=1

8

3

h[2]=1, h[1]=2, h[0]=1 12

4

h[2]=1, h[1]=2, h[0]=1

16

5

h[2]=1, h[1]=2, h[0]=1

20

6

h[2]=1, h[1]=2, h[0]=1

24

7

h[2]=1, h[1]=2, h[0]=1

28

8

h[2]=1, h[1]=2, h[0]=1

32

9

h[2]=1, h[1]=2, h[0]=1

36

Tabell 7.4 Utförande på XSA-50 kortet.

Efter utförda simuleringar så startade projektet med att koda konstruktionen i

programmet Xillinx ISE 7.1i. Programmet byggdes upp i blockform för att

underlätta vid exekveringen/simulering samt vid felsökning. Se avsnitt 7.3 för

beskrivning av blocken.

När programkoden var färdigställd så generades en .bit fil som laddades ner till

XSA-50 kortet. Därefter provkördes filtret genom att mata in värden med det

inkopplade tangentbordet via PS/2 porten på kortet [27]. För att se koden till

tangentbordsavkodningen se bilaga A. Ett oscilloskop kopplades in för att

kunna avläsa utsignalen från filtret. För en mer detaljerad genomgång av

utförandet av experimentet rekommenderas läsning av bilaga C. Som stomme

till tangentbordsavkodningen har [27] används.

7.3

Blockstrukturen i FIR Filtret

I detta avsnitt beskrivs de olika blocken i FIR filtret. Systemet fungerar på så

sätt att inmatning av data sker med hjälp av ett tangentbord. Denna data

behandlas sedan i filtret för att sedan läggas som en utsignal. Utsignalen kan

sedan användas på olika sätt, till exempel genom att sparas och presentera

(47)

7.3.1

Ps2_kbd

Här sker inladdningen av värden från tangentbordet som sedan skickas vidare

till blocket Keyb_scan för avkodningen.

Figur 7.2

7.3.2

Keyb_scan

I denna modul sker avkodningen av tangentbordet. När användaren matar in ett

värde mellan 0-9 med tangentbordet så läggs det på ingången scancode. Är

signalen rdy hög så avkodas detta värde och läggs på utgången x_ut. X_ut blir

det nya x-invärdet i loadbuff.

(48)

7.3.3

Loadbuff

Detta block har till uppgift att ladda X-värden och sätta värden på

filterkoefficienterna. X-värdet som har laddats in från keyb_scan modulen

skickas sedan vidare när loadsignalen är låg. Detta värde skickas vidare till

multiplier blocken med utsignalen x_ut .

Ready signalen är kopplad till load signalen på samtliga multipliers.

Figur 7.4

7.3.4

One_pulse

Detta block genererar en puls i taget. Detta för att undvika kontaktstudsar då

man använder switchboarden.

(49)

7.3.5

Filter_muls

Det finns tre sådana block och i dessa sker multiplikationerna av

filterkoefficienterna och insignal.

När signalen load är låg så laddas x_in och c_in i x- respektive c-registret.

Sedan sker multiplikationen mellan dessa värden och produkten läggs på

utsignalen y1. När en multiplikation är klar så skickas en ready signal.

Figur 7.6

7.3.6

Adder

Ready signalen i detta block är sammankopplad med ready signalen från

multiplier modulen. När denna signal blir låg så sparas det tidigare inkommande

värdet z_in i register s. Efter att detta har inträffats så adderas värdet i register s

och in_add. Efter denna addition läggs summan ut på utsignalen ut.

(50)

7.3.7

Adder2

Adder2 fungerar på liknade sätt som adder men den har ingen ready signal. Det

gör att ett inkommande värde(z_in) sparas i register s utan att någon ready

signal sätts. Sedan läggs produkten från multiplier på in_add och adderas till sist

med värdet i s och läggs på utsignalen ut.

Figur 7.8

7.3.8

Store

I detta block skall produkten av x_in. När signalen ready är låg så sparas det

inkommande värdet från in_data i register z. Därefter så läggs värdet ut på

utsignalen ut_data.

(51)
(52)

8

Avslutning

I detta avsnitt diskuteras arbetet och resultaten redovisas.

8.1

Resultat CORDIC

Simuleringarna utförda i Matlab skilde sig jämfört med resultaten från

utförandet på XSA-50 kortet.

Andledningen till detta är att hårdvaruutförandet av CORDIC-framåtrotationen

bara kan utföra ett fåtal iterationer, så kan det uppstå vissa felaktigheter. De

uppmätta värdena från hårdvaruutförandet av programmet kan även skilja sig

från de simulerade värdena på grund av avrundningsfel. Detta beror på att man i

hårdvaran endast kan jobba med heltal.

Matlabprogram som har skrivits skapar den nödvändiga HEX filen, som behövs

för att ladda ner det valda x-värdet på SDRAM:en. Detta underlättar då man

slipper räkna ut checksumovärdena som är nödvändiga.

Vidare har det skapts en manual som kan användas vid självstudier av bland

annat implementering av CORDIC-algoritmen och SDRAM funktionen på

XSA-50 kortet.

8.2

Resultat FIR

Efter att simuleringsresultatet i Matlab har jämförts med det på hårdvaran så

kunde det konstateras att implementeringen var lyckad. Filtret fungerade enligt

förutsättningarna.

Utsignalen y[n] visades på olika sätt vid simulering respektive

hårdvaruimplementering. I Matlab visades multiplikationerna av insignalen och

filterkoefficienterna var för sig. Medan det på hårdvaran är summan av samtliga

multiplikationer som visas.

Vidare har det skapts en manual som kan användas vid självstudier av bland

annat implementering av FIR-filter och tangentbordsfunktionen på XSA-50

kortet.

8.3

Problem

(53)

8.4

Diskussion

CORDIC-algoritmen är väl anpassad till att användas på DSP tillämpningar. Då

den till största delen handlar om addition och skiftoperationer. I detta arbete så

har algoritmen anpassats till att fungerar med XSA-50 kortet. Detta har fungerat

väl då laborationskortet har många funktioner som kan utnyttjas. I CORDIC

tillämpningen så används den inbyggda SDRAM:en. Genom att utgå från detta

projekt kan man lätt använda SDRAM till egna projekt och tillämpningar.

Vid konstruktionen av FIR filtret så utfördes simulation i Matlab, detta

underlättade vidare arbete med konstruktionen på XSA-50 kortet.

Blockkonstruktion tillämpades med stor fördel. Detta gjorde det mycket enklare

att skapa en bra översikt över de olika delarna i filtret. Felsökning av FIR filtret

underlättades avsevärt, då varje block kunde simuleras var för sig. För denna

del av projektet har PS/2 ingången använts för inläsning ifrån tangentbordet.

Detta projekt kan vara en utgångspunkt för att anpassa tangentbordsinläsning

till egna tillämpningar.

(54)
(55)

9

Terminologi

Akrynom

Förklaring

CLB

Configurable Logic Block

CORDIC

COordinate Rotation DIgital Computer

CS

Carry

Signal

DCORDIC

Differential

CORDIC

DFT

Discrete Fourier Transform

DSP

Digital Signal Processor

DTFT

Discrete Time Fourier Transform

FA

Full

Adder

FFT

Fast Fourier Transform

FIR

Finite Impulse Response

FPGA

Field Programmable Gate Array

IIR

Infinite Impulse Response

IOB

Input Output Block

LSB

Least Significant Bit

LTI

Linear Time Invariant

LUT

Look-Up

Tables

MSB

Most Significant Bit

(56)
(57)
(58)

10

Referenser

1. J.E. Volder, "The CORDIC Trigonometric Computing Technique," IRE

Trans Electronic Computers, vol8, pp. 330-334, Sept. 1959.

2. J. S. Walther, "A Unified Algorithm for Elementary Functions," Proc.

Spring. Joint Computer Conf., pp. 379-385, 1971.

3. R. Andraka, “A Survey of CORDIC Algorithms for FPGAs,” in

Proceedings of the 1998 ACM/SIGDA Sixth International Symposium on

Field Programmable Gate Arrays (FPGA ’98),Monterey, CA, Feb. 22–24,

1998, pp. 191–200.

4. J.E. Volder, ”The Birth of CORDIC”, 2000

5. D. Timmermann (1990): “CORDIC-Algorithmen, Architekturen und

monolithische Realisierungen mit Anwendungen in der Bildverarbeitung,”

Ph.D. thesis, VDI/Springer, Düsseldorf, Vol. 10, No. 152

6. H. Hahn (1991): “Untersuchung und Integration von Berechnungsverfahren

elementarer Funktionen auf CORDIC-Basis mit Anwendungen in der

adaptiven Signalverarbeitung,” Ph.D. thesis, VDI/Springer, Düsseldorf, Vol.

9, No. 125

7. U. Meyer-Bäse: The Use of Complex Algorithm in the Realization of

Universal Sampling Receiver Using FPGAs (in German) (VDI/Springer,

Düsseldorf, 1995), Vol. 10, No.404, 215 pages

8. U. Meyer-Bäse, A. Meyer-Bäse, W. Hilberg: “ COordinate Rotation DIgital

Computer (CORDIC) Synthesis for FPGA,” Lecture Notes in Computer

Science 849, 397-408 (Springer, Heidelberg, 1994)

9.

J. Valls, M. Kuhlmann, K.K. Parhi, “Evaluation of CORDIC Algorithms for

FPGA Design,“ Journal of VLSI Signal Processing 32, pp. 207-222, 2002.

10.

H. Dawid and H. Meyr, “The Differential CORDIC Algorithm: Constant

Scale Factor Redundant Implementation without Correcting Iterations,”

(59)

12.

N. Takagi, T. Asada, and S.Yajima, “Redundant CORDIC Methods with a

Constant Scale Factor for Sine and Cosine Computation,” IEEE

Transactions on Computers, vol. 40, no. 9, 1991.

13.

J.-A. Lee andT. Lang, “Constant-Factor RedundantCORDICfor Angle

Calculation and Rotation,” IEEE Transactions on Computers, vol. 41, no. 8,

1992.

14.

Shen-Fu Hsiao and Jean-Marc Delosme, “Householder CORDIC

Algorithm,” IEEE Transactions on Computers, vol. 44, no. 8, 1995.

15.

Shen-Fu Hsiao and Jen-Yin Chen, “Design, Implementation and Analysis of

aNewRedundant CORDIC Processor with Constant Scaling Factor and

Regular Structure,” Journal of VLSI Signal Processing, vol. 20, 1998, pp.

267–278.

16.

Shen-Fu, Hsiao, “A High-Speed Constant-Factor Redundant CORDIC

Processor without Extra Correcting or Scaling Iterations,” in IEEE Int. Conf.

On Circuits and Systems (ISCAS’99), Florida, 1999.

17.

H. Dawid and H. Meyr, “The Differential CORDIC Algorithm: Constant

Scale Factor Redundant implementation without Correcting Iterations,”

IEEE Transactions on Computers, vol. 45, no. 3, 1996.

18.

M. Kuhlmann and K.K. Parhi, “A High-Speed CORDIC Algorithm and

Architecture for DPS Applications,” in Proc. of the 1999 IEEE Workshop

on Signal Processing Systems (SiPS’99), Taipei, Taiwan, Oct. 1999.

19.

M. Kuhlmann and K.K. Parhi, “A New CORDIC Rotation Method for

Generalized Coodinate Systems,” in Proc. of the 1999 Asilomar Conference

on Signal, Systems and Computers, Pacific Grove, CA, Oct. 1999.

20.

P.A. Lynn, W. Fuerst, ”Introductory Digital Signal Processing” 1994

21.

R.M. Mersereau, M.J.T. Smith, ”Digital Filtering” 1994

22.

U.M. Baese,”Dgital Signal Processing with Field Programmable Gate

Arrays” 2001

23.

O. Pedersen, ”Signaler och System kompendium för teori och praktik”, mars

2003, 2:a editionen.

(60)
(61)

-- Filename Ps2_kbd.vhd

--- -- This circuit accepts a serial datastream and clock from a PS/2 keyboard

-- and outputs the scancode for any key that is pressed. --

-- Notes: --

-- 1. The clock from the PS/2 keyboard does not drive the clock inputs of -- any of the registers in this circuit. Instead, it is sampled at the

-- frequency of the main clock input and edges are extracted from the samples. -- So you have to apply a main clock that is substantially faster than

-- the 10 KHz PS/2 clock. It should be 200 KHz or more. --

-- 2. The scancode is only valid when the ready signal is high. The scancode -- should be registered by an external circuit on the first clock edge -- after the ready signal goes high.

--

-- 3. The ready signal pulses only after the key is released. --

-- 4. The error flag is set whenever the PS/2 clock stops pulsing and the -- PS/2 clock is either at a low level or less than 11 bits of serial -- data have been received (start + 8 data + parity + stop). The circuit -- locks up once an error is detected and will not resume operation until -- a reset is applied. library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; package ps2_kbd_pckg is component ps2_kbd generic(

FREQ : natural := 100_000 -- frequency of the main clock (KHz) );

port(

clk : in std_logic; -- main clock

rst : in std_logic; -- asynchronous reset

ps2_clk : in std_logic; -- clock from keyboard

ps2_data : in std_logic; -- data from keyboard

scancode : out std_logic_vector(7 downto 0); -- key scancode

rdy : out std_logic; -- scancode ready pulse

error : out std_logic -- error receiving scancode

);

end component ps2_kbd; end package ps2_kbd_pckg;

library IEEE;

References

Related documents

I listened to their album ”A story of the road called life” and then I just couldn´t stop listening.. If you want to hear The International Singers, they have two albums and

By studying the two most important components of a remote leadership (Nordengren and Olsen, 2006), this research could contribute to an understanding of

Eftersom att samtliga intervjupersoner har blivit inspirerade till köp via sociala medier samt att majoriteten av enkätrespondenterna visar på att de har köpt något som de

My intention with this thesis is to give the reader an insight into Ireland and their religious run institutions in the twentieth century along with the reaction of Irish society

[r]

The core in Olsen’s revolutionary new archaeology is an urge to see things as just things, to avoid (over)interpretation, and to accept that, for example, a boat is a boat is a

mätinstrument jag har utvecklat för att detta finns närmare beskrivna i kapitel 5.2. Kvantitativa undersökningar försöker ofta skapa generaliserbar kunskap där man utifrån ett

Brev och nyhetsartiklar, skrivna av 37 16-åriga elever analyseras för att undersöka skillnader i språkbruk mellan elever som ägnar stor del av sin fritid åt aktiviteter där