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