• No results found

3 Xilinx ... 5 3.1 Uppkoppling av hårdvaran ... 6 3.2 Implementering ... 9 3.3 Matlab ... 11

1. Förord

Denna manual har för avsikt att ge inblickar i hur ett FIR filter skapas i VHDL.

Vidare så innehåller den information om hur man implementerar filtret på XSA-

50 kortet. Efter att ha studerat denna manual så ska man kunna göra egna

filterkonstruktioner och implementera dessa på XSA-50 kortet.

2.

Att konstruerar

När man ska börja konstruera är det bra att först vara på det klara med hur det

ska fungera. Ett bra tips är ta fram papper och penna och göra en skiss på hur

system ska se ut. Tanken är att man tillämpa blockkonstruktion i detta projekt.

Det betyder att man skapar olika block som utför olika funktioner. Till exempel

kan ett block utför en multiplikation, medan ett annat utför en addition. Detta

underlättar väldigt mycket när man ska simulera och felsöka konstruktioner.

För att visa hur det går till när man gör en konstruktion, så visas ett exempel med

ett FIR filter. Följ anvisningarna och försök bekanta er med denna programmiljö.

3 Xilinx

• Börja med att starta Xilinx ISE 7.1 Project Navigator.

Detta för att kontrollera att projektet fungerar samt att skapa en bit-fil.

3.1

Uppkoppling av hårdvaran

För kunna köra filtret på hårdvaran så måste systemet kopplas upp enligt figuren

nedan. Två stycken signaler måste viras på XSA-50 kortet. Dessa är load_p med

pinnummer 46 samt res med pinnummer 68. OBS! använd inte mer än 5V vid

inkoppling av insignalerna på pin 46 och 68. Om detta görs finns det risk för att

kortet skadas.

Figur 3.1 Översiktsbild av konstruktionen.

Figur 3.2 Digitalingång till oscilloskopet.

Vid användning av oscilloskopet ska den digitalingången användas. Se figuren

ovan.

Figur 3.3 Tangentbordsanslutning via PS/2.

Figur 3.4 Switchboardsuppkoppling.

För att ladda in ett värde med hjälp av tangentbordet till FIR konstruktionen, ska

man först sätta reset signalen hög för att nollställa hela systemet. Vidare ska man

sätta både reset- och loadsignalen låg. När detta är gjort ska man ange sitt värde

med tangentbordet och sätta endast load signalen hög. Därefter kan resultatet

avläsas på oscilloskopet. Det är väldigt viktigt att matningsspänningen till

switchboarden inte överstiger 5V då detta kan skada XSA-50 kortet.

Namn Pinne

Clk P88

Load_p P46

Ps2_clk P94

Ps2_data P93

Res P68

Ut<0> P78

Ut<1> P79

Ut<2> P80

Ut<3> P83

Ut<4> P84

Ut<5> P85

Ut<6> P86

Ut<7> P87

Tabell 3.1 tabell över pinnarna i konstruktionen.

Koppla utsignalerna 0-7 till oscilloskopets digitala ingång. Pinne 88 är kortets

interna klocka. Load_p signalen indikerar att det kommer ett nytt tecken från

tangentbordet. Ps2_clk och Ps2_data är kopplade till PS2 porten på XSA-50

kortet. Till sist insignalen Res nollställer alla register i systemet.

3.2

Implementering

• Öppna menyn XTOOLs och välj GXLOAD.

• Ta programfilen(.bit) och dra den till FPGA/CPLD rutan.

• Tryck på Load.

• Nu är programmet laddat på XSA-50 kortet. Testa nu med hjälp av

tangentbordet värden mellan 0-9 som insignal. Denna begränsning av

insignalen beror på tangentbordsavkodningen. Läs av utsignalen på

oscilloskopet.

Öppna den bifogade Matlabfilen faltning.m. Denna fil innehåller ett

simulationsprogram för att se vad utsignlaen blir från filtret vid olika insignaler.

Testa samma värden på insignalen x[n] som vid hårdvarukörningen och

anteckna vad utsignalen y[n] blir. Se exemplet nedan.

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 3.2 Simulerade värden i Matlab

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

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.

Filterkoefficienterna är konstanta värden i detta fall men kan anta vilka heltal

som helst.

%The angle z should be in the range of -90 degree to 90 degree. %Resolution can be improved by increasing the number of iterations. clear

An=1.6466; %The gain = 1.6466 if the power of 2 in the CORDIC equations starts from 0. x0=10 %the reciprocal of the gain

y0=30;

degrees=20;%-80 z0=degrees*pi/180 %z0=19;

%normalize the vector

x(1)=x0; y(1)=y0; z(1)=z0; t(1)=1; s(1)=1; for i=1:14

% Compute the reciprocal of the gain to verify the gain value 1.647 t(i+1)=t(i)*cos(atan(2^(-(i-1)))); s(i+1)=s(i)/sqrt(1+2^(-(i-1)*2)); if z(i) < 0 d=-1; else d=1; end x(i+1)=x(i)-y(i)*d*2^(-(i-1)); y(i+1)=y(i)+x(i)*d*2^(-(i-1)); z(i+1)=z(i)-d*atan(2^(-(i-1))); end

t(15) %the reciprocal of the gain s(15) %the reciprocal of the gain

cos_z=x(15)

cos_real=cos(degrees*pi/180) sin_z=y(15)

sin_real=sin(degrees*pi/180)

A=sin(degrees*pi/180)/sin_z %This value should be 1. B=cos(degrees*pi/180)/cos_z %This value should be 1.

R=':1'; N=0;

N=dec2hex(N,3);

fid = fopen('ramdwld.hex','w+'); %spara till filen ramdwld.hex for i=S:0 if x > 31 len=dec2bin(x); leng=length(len)-1; z=x-2^leng; else z=x; end ADR=i;

A=dec2hex(ADR,4); %adress i hex form

check=240-(z*8)-(ADR*16); %beräkna ut checksumman check=mod(check,256);

L=dec2hex(check,2); %checksumma på hexform H=dec2hex(x,4); %x-invärdet på hexform

fprintf(fid,'%s',R,A,N,H,H,H,H,H,H,H,H,L); %spara på detta format i hexfilen end

% Datum 2005-09-21 % FALTNING

% Detta program utför faltning mellan signalen h och x samt % plottar svaret y.

h=[1 2 1]; %filtrets koefficienter x=[2]; %insignalens värde

y=conv(h,x); %faltar vektorerna med varandra

Manual

Ett kompindium om CORDIC konstruktion i VHDL samt

implementering på XSA-50 kortet.

1. Förord... 3

2. Konstruktion... 4

3 CORDIC ... 5

3.1 Skapa HEX fil och ladda ner/upp på/från XSA-50 kortet ... 5

3.2 VHDL ... 7

3.3 Skapa .bit fil och ladda ner på XSA-50... 8

1. Förord

Denna manual har för avsikt att ge inblickar i hur CORDIC-rotation mode

skapas i VHDL. Vidare så innehåller den information om hur man

implementerar filtret på XSA-50 kortet. Efter att ha gått igenom denna manual

ska man kunna förstå och tillämpa CORDIC på XSA-50 kortet.

Här ges även en grundlig förklaring till hur man ska ladda ner och ladda upp

värden från XSA-50 kortets SDRAM. Detta är användbart då man vill verifiera

de värdena som man har beräknat fram.

Related documents