• No results found

8 Implementation, verifiering och simulering

8.2 Implementationsresolution

8.2.2 Inputnormalisering

Differential CORDIC-algoritmen beräknar mikrorotationsriktningarna med hjälp av hela y-operanden. I de flesta CORDIC-arkitekturer är riktningen av en mikrorotation baserad på en uppskattning av tecknet på operanden. Genom att trunkera Y- eller Z-operanden till endast ett par bitar kan rotationsriktningen beräknas/uppskattas fort. När detta förfarande används i bakåtrotationsmoden måste emellertid inputoperanderna normaliseras. Operanden med den största magnituden måste normaliseras så att absolutvärdet är inom [0.5,1). DCORDIC-algoritmen kräver inte denna normaliserings-procedur. Emellertid visar vi i kapitel 3 att om resultatet från en CORDIC i bakåtrotationsmoden ska vara godtagbart måste inputoperanderna normaliseras. Ett enkelt normaliseringssteg har därför implementerats.

8.2.3 Pseudo-overflow/intern ordbredd

I redundanta nummersystem kan pseudo-overflow inträffa. Med detta menas att även om värdet på resultatet av en addition/subtraktion kan representeras av den tillgängliga ordbredden så kan den redundanta summan ge spill.

Inputoperanden i CORDIC-processorn är 16-bitar bred. Då största absoluta magnituden på x/y-inputoperanderna är 1, mest signifikanta biten (signbiten) har värdet 20. Internt i CORDICen krävs det guardbitar på båda sidor av operanden för att erhålla önskad noggrannhet i resultatet och för att eliminera overflow. Den största magnitud som resultatet kan anta är:

(8.1)

Då maximala absoluta magnituden är 2.33 krävs det minst två stycken guardsiffror i implementeringen på mest signifikanta sidan. Sifferpositionerna 22 och 21 blir därmed guardsiffror i msd. Sifferposition 23 kommer därmed att fungera som styrsiffra för att kompensera för pseudo-overflow. Detta kommer garanterat att fungera ty om siffer- positionen 23 är +1 alternativt -1 kommer sifferposition 22 anta värdet -1 alternativt +1 för respektive fall. Med andra ord så tvingar vi sifferpositionen 22 att anta värdet ±1 när sifferposition 23 är ±1. Antalet guardsiffror på den minst signifikanta sidan av x- och y- operanderna sätts initialt till log(n)+2, dessa parametrar garanterar att n-bitars precision erhålls av n iterationer i framåtrotationsmoden, se sektion 3.2.1.

I p-datavägen är det absoluta största värdet π/2. Att värdet inte är 1.74 beror på att en konvergeringsrotation utförs i input steget. Därav sätts sifferpositionen 22 för att styra pseudo-overflow korregeringen och positionen 21 till guardsiffra. Den totala ordbredden på p-datavägen sätts initialt lika som x- och y-datavägarna. På grund av detta kommer en sifferposition mer i p-datavägen än i x/y-datavägarna att vara dedikerad till att representera noggrannheten.

Figur 8.2 Formatet på datavägarna/operanderna i CORDICen.

8.2.4 R2B- och B2R-konvertering

Inputformatet i CORDIC-processorn ska vara BSD. En enkel konverterings procedur från tvåkomplements representation till den redundanta representationen har använts, se sektion B.3.1. För redundant till tvåkomplements konvertering har kretsen i figur B.7 valts för implementation. R2B-konvertering är en av flaskhalsarna i en implementering och måste således pipelinas på ett effektivt sätt. Notera att ett n-siffrors binärt redundant tal konverteras till ett (n+1)-bitars tal i tvåkomplementsrepresentation. Emellertid då datavägen redan har utvidgas med en siffra i korrektionsrotationen, se sektion 8.2.5, kommer MSD i datavägen redan att ha värdet 22, vilket innebär att det största värdet som erhålls i p-datavägen kan representeras av de tillgängliga bitarna. Steget kommer med andra ord att konvertera ett n-siffrors redundant ord till ett n-bitars två komplement tal.

x0 max, ( )2 y0 max, ( )2 + 0.6073 --- 2 0.6073 --- 2.33 = =

Input siffror LSB guard siffror

8.2.5 Utvidgning av konvergensområdet

I DCORDIC-algoritmen måste inputoperanden till x-datavägen vara större än noll för att algoritmen ska konvergera. Därför har en enkel konvergensutvidgning implementerats. Detta går till genom att inputoperanden roteras initialt med ±90o beroende på i vilken kvadrant inputoperanden befinner sig. Tabell 8.2 illustrerar hur rotationen utförs.

Tabell 8.2

I output steget måste sedermera en korrektionsrotation utföras för att placera resultatet i rätt kvadrant. Detta genomförs genom att addera/subtrahera π/2 med resultatoperanden beroende på i vilken kvadrant inputvektorn befann sig. För att inte erhålla overflow i denna operation utvidgas datavägen med ytterligare en siffra i MSD.

8.2.6 Skalning

Skalning kommer ej att implementeras ty endast fasen är av intresse. Emellertid om mag- nituden är av intresse behöver endast skalning implementeras i x-blocket, ty y-operanden konvergerar mot noll när CORDIC-algoritmen opererar i bakåtrotationsmoden.

8.3 VERIFIERING

För att verifiera DCORDIC-algotimen har två stycken MATLAB-program utvecklats: (i) Program A är framtaget för att klargöra ordlängden som krävs för att erhålla önskad noggrannhet i resultaten samt för att verifiera VHDL-implementeringen. Programmet hanterar endast en beräkning åt gången, där resultatet är en respons av inputoperanden. (ii) Program B är ett program som simulerar en verklig implementation av DCORDIC- algoritmen. Programmet skevar inputoperanderna och data klockas in i CORDIC- processorn med en klockpuls mellanrum. Modellen har endast används till att få insikt hur DCORDIC-algoritmen exekverar och är uppbyggd. Se appendix D för Matlab-koden.

Kvadrant X0 = Y0 =

[0, π/2] +Xin +Yin

[ π/2, π] +Yin -Xin

[ π, 3π/2] -Yin +Xin [ 3π/2, 2π] +Xin +Yin

8.3.1 Verifierings strategi

Uttömmande simuleringar har använts för att verifiera resultaten i VHDL-modellen gentemot Matlab-modellen. Matlab-modellens resultat är i sin tur verifierade med de förväntade vinkelvärderna.

8.4 SIMULERING

Det följande avsnittet är tillägnat den numeriska noggrannheten i CORDIC-algoritmen. För att verifiera att begränsningarna som presenterades i kapitel 3 verkligen begränsar det totala felet i en normaliserad DCORDIC-implementation presenteras i denna sektion gränsvärden och fel som erhållits genom simulering.

Resultaten av simuleringarna illustreras i tabell 8.3. Det totala felet i resulatet har tolkats om till antal effektiva bitar (bråkbitar) i resultatet genom att beräkna följande uttryck: - log2(totalt fel).

Notera att antalet effektiva bitar ej är det samma som antalet exakta bitar. Om till exempel antalet effektiva bitar är 12 i ett resultat på 17 bitar betyder det inte att 12 bitar är exakta. Detta innebära att den tänkta precisionen förstörs om resultatet trunkeras till antalet önskade bitar. Det enda sättet att bevara noggrannheten är att se till att vi har ett exakt resultat. Det krävs med andra ord en avrundningsprocess som processerar resultatet från CORDICen. För att erhålla ett fel som är bundet av 2-b efter avrundning krävs det att vi startar med ett fel som är bundet av 2-(b+1).

Simuleringarna som utförts och presenteras i tabell 8.3 har genomförts på följande sätt: • Längden på inputvektorn har varierats mellan [2-15, 1) med steglängden 0,1 i expo-

nenten och för varje magnitud har vinkeln varierats mellan [-π/2, π /2] med steglängden 0.00873 radianer. På grund av kvantisering i konverteringen av de två ovan nämnda realvärda testvariablerna till tvåkomplementsrepresentation kommer emellertid ej de exakta vinklarna och magnituderna att antas. Detta spelar emellertid ingen roll då vi endast är intresserade av det största felet.

Om vi kan lita på simuleringarna kan en bra kompromiss vara att välja n = 16 och m = 21 alternativt n = 18 och m = 20 för 16 bitars outputoperander. En signbit, två heltalsbitar samt 13 bråkbitar. Simuleringar visar att antalet effektiva bråkbitar för de ovan nämnda parametrarna när vinkeln varierar mellan [0, 2π] blir i respektive fall 14.281 och 14.074 bitar.

Tabell 8.3 Antal effektiva bråkbitar i vinkeln.

Från tabellen kan vi dra slutsatsen av att det maximala felet, som presenterades i ekvation 3.9 verkligen binder felet och att resultatet från CORDICen blir bättre än väntat.

. Iterationer m = 18 m = 19 m = 20 m = 21 m = 22 m = 23 m = 24 n = 16 12.229 13.091 13.891 14.317 14.593 14.807 14.933 n = 17 12.229 13.19 14.058 14.777 15.223 15.603 15.848 n = 18 12.229 13.19 14.155 15.029 15.648 16.238 16.676 n = 19 12.229 13.19 14.155 15.124 15.878 16.668 17.354 n = 20 12.229 13.19 14.155 15.124 15.963 16.9 17.827 n = 21 12.299 13.19 14.155 15.124 15.963 16.987 18.089

Appendix A

CORDIC-funktioner

Från tabell 2.1 kan man med hjälp av inspektion inse vilka funktioner som kan beräknas med CORDIC-algoritmen. I följande undersektioner visas tydligare vilka funktioner som är möjliga att beräkna med CORDIC-algoritmen. Tabellerna är med för att underlätta för läsaren.

Related documents