• No results found

3.6 Ny flyttalsaccelerator

3.6.2 Design

Enligt krav K2.3 ska acceleratorn kunna utf¨ora addition, subtraktion och multiplikation. Varje s˚adan aritmetisk operation kan delas in i ett antal mindre operationer. Nedan redog¨ors de deloperationer som beh¨over g¨oras f¨or respektive aritmetisk operation. [4]

Addition

Uppackning av flyttalen

Byte av teckenbit vid subtraktion Denormalisering av det minsta flyttalet Addition/subtraktion av signifikanderna Normalisering av resultatet

Avrundning av resultatet

Generering och avrundning av eventuellt subnormalt resultat Generering av eventuellt specialtal

Multiplikation Uppackning av flyttalen Addition av exponenterna Multiplikation av signifikanderna Normalisering av resultatet Avrundning av resultatet

Generering och avrundning av eventuellt subnormalt resultat Generering av eventuellt specialtal

Packning av resultatet

F¨or en genomg˚ang i exakt hur de h¨ar deloperationerna g˚ar till h¨anvisas till [4], [7], [3] eller RTL-schemat f¨or resulterande flyttalsaccelerator som pre- senteras i bilagorna B.1–B.4.

Operationerna delades upp i fyra pipelinesteg med avsikt att h˚alla en kort kritisk v¨ag. Namngivning av signaler f¨oljer i stort den nomenklatur som anv¨ands i [7]. Bilagorna B.1–B.7 inneh˚aller ett RTL-schema f¨or funktionerna addition och subtraktion i flyttalsenheten. Nedan f¨oljer en beskrivning ¨over vad som ing˚ar i varje steg.

F¨orsta pipelinesteget P0

I f¨orsta pipelinesteget sker uppackningen av operanderna genom en uppdel- ning i signaler med namn som motsvarar de olika delarna. F¨or operand A heter exempelvis teckenbiten, exponenten och signifikanden Sa, Ea respekti- ve Fa. Ut¨over uppdelningen genereras ett par signaler som anv¨ands f¨or att detektera om operanden ¨ar ett specialtal. Infa, NaNa, Zroa respektive Suna ¨ar flaggor f¨or Inf, NaN, noll respektive subnormal. Vissa signaler propageras mellan flera pipelinesteg och identifieras d˚a med till¨agget pX p˚a signalnam- net, d¨ar X ¨ar 0,1,2 eller 3. Om ett tal ¨ar subnormalt justeras det s˚a att representationen ¨ar samma som f¨or en normaliserad operand.

Det f¨orsta som sker i f¨orsta pipelinesteget ¨ar att exponenterna j¨amf¨ors och differansen adderas till den minsta s˚a att exponenterna blir lika stora. Samtidigt justeras signifikanden s˚a att flyttalets v¨arde beh˚alls. Efter det h¨ar pipelinesteget byter operanderna namn s˚a att den minsta operanden ben¨amns tv˚a och den andra ett. F¨or subtraktion byts sign-biten p˚a operand B och operationstypen byts till addition f¨or efterf¨oljande pipelinesteg.

F¨or multiplikation ligger multiplikationsoperationen f¨ordelad ¨over pipeli- nesteg P0 och P1 f¨or att m¨ojligg¨ora pipelining av multiplikatorn.

Andra pipelinesteget P1

I andra pipelinesteget negeras inoperander med negativ teckenbit och sj¨alva additionen av signifikanderna utf¨ors. F¨or multiplikation sker andra pipeli- nesteget i multiplikatorn och resulterande teckenbit samt exponent ber¨aknas. Tredje pipelinesteget P2

I tredje pipelinesteget sker normalisering av resultatet genom att r¨akna an- talet nollor fr˚an v¨anster i den resulterande signifikanden (enheten CLZ). D¨arefter justeras exponenten och signifikanden s˚a att den mest signifikanta ettan i signifikanden hamnar p˚a 24:e bitpositionen. De fall d¨ar exponenten understiger noll efter normaliseringen detekteras.

Fj¨arde pipelinesteget P3

F¨or de fall d¨ar exponenten understiger noll i pipelinesteg P2 justeras detta genom att signifikanden h¨ogerskiftas igen i pipelinesteg P3 och ett subnor- malt tal genereras. I det h¨ar pipelinesteget utf¨ors ocks˚a en avrundning av signifikanden och sedan en avrundning av exponenten. F¨or utsignalen fr˚an flyttalsenheten v¨aljs sedan antingen ett specialtal om ett s˚adant genererats eller resultatet som ber¨aknats.

3.6.3

Testning

¨

Aven om teorin bakom flyttalsaritmetik ¨ar ganska enkel s˚a blir en implemen- tation i h˚ardvara snabbt komplex. Med ¨okad komplexitet ¨okar risken f¨or fel och d¨armed ¨aven vikten av genomg˚aende testning av implementationen. En utt¨ommande testning av alla indatakombinationer leder till ungef¨ar 3 · 264 testfall om man f¨oruts¨atter att pipelineuppdelningen ¨ar korrekt. En s˚adan testning av enheten ¨ar om¨ojlig, en annan testmetod beh¨ovs.

Den metod som valdes f¨or att testa den nya enheten bygger dels p˚a test- ning med hj¨alp av h¨ornfall och dels p˚a testning med hj¨alp av ett stort antal slumpm¨assiga tester. F¨or testning av flyttalsaritmetiken i biblioteket SoftFlo- at anv¨ands en testsvit vid namn TestFloat skriven i C. TestFloat inneh˚aller rutiner som genererar en m¨angd olika h¨ornfall f¨or flyttalsber¨akningar i olika format. Eftersom b˚ade SoftFloat och TestFloat ¨ar etablerade program med m˚anga ˚ars utveckling bakom sig verkade det l¨ampligt att dra nytta av det ¨aven f¨or testningen av en ny flyttalsenhet. Vid n¨armare unders¨okning av den flyttalsenhet som ursprungligen valdes f¨or projektet visar det sig att ¨aven den anv¨ander sig av TestFloats rutiner f¨or att generera testfall. I det fallet

anv¨ands programmet f¨or att generera indata till en testb¨ank i Verilog som sedan verifierar flyttalsenheten.

F¨or den nya flyttalsenheten skapades ett testsystem med hj¨alp av SystemC och ett program vid namn Verilator. Verilator kompilerar syntiserbar Verilog- kod till SystemC. [13] Den resulterande koden kan d¨arefter anv¨andas i ett SystemC-projekt. Eftersom SystemC-kod kan l¨ankas ihop med annan C-kod m¨ojligg¨or det att k¨allkoden fr˚an TestFloat ˚ateranv¨ands i testningen av flyt- talsacceleratorn utan stora f¨or¨andringar.

F¨or testningen i SystemC skrevs ett program som med hj¨alp av ruti- ner fr˚an TestFloat genererar 7,5 miljoner testfall. Ut¨over det genererar test- programmet ett godtryckligt antal slumpm¨assiga testfall och en serie med kombinationer av specialtal. Varje testfall ber¨aknas dels genom simulation i flyttalsenheten och dels p˚a v¨ardprocessorn. Resultaten j¨amf¨ors och varje skillnad rapporteras.

Testprogrammet utvecklades parallellt med den nya flyttalsenheten och kunde d¨arf¨or anv¨andas fr˚an och med f¨orsta utkastet f¨or att kontinuerligt ve- rifiera implementationen. Testningen exponerade ett par fel i designen som kunde ˚atg¨ardas. Ett av de uppt¨ackta felen visade sig ¨aven finnas i den flyt- talsenhet som ursprungligen anv¨andes.

3.6.4

Resultat

Flyttalsenheten som implementerades har de funktioner som projektet kr¨aver och uppfyller de ¨ovriga som sattes upp. Enheten ¨ar uppdelad i fyra pipeli- nesteg och kan klockas i samma hastighet som processorn. Enheten hante- rar ¨aven denormaliserade tal, en egenskap som MicroBlazes FPU saknar. K¨allkoden skrevs i Verilog och uppg˚ar till 620 rader kod. Alla signaler och interface ¨ar dokumenterade och ett komplett RTL-schema finns i bilaga B.1 till bilaga B.4.

Filteracceleration

I det h¨ar kapitlet s¨atts n˚agra krav upp f¨or implementationen av en accelerator f¨or FIR-filter. En introduktion ges av de aspekter av FIR-filtrering som ¨ar relevanta f¨or arbetet. D¨arefter beskrivs hur en FIR-acceleratorn designats. Till sist ges en beskrivning av de gr¨anssnitt acceleratorn har.

4.1

Specifikation

I det system d¨ar processorn ing˚ar ¨ar exekvering av FIR-filter en viktig funk- tionalitet. I kravspecifikationen f¨or processorn finns d¨arf¨or krav K1.5 som s¨ager att processorn ska ha funktioner f¨or att accelerera s˚adana ber¨akningar. Kravet s¨ager att en MAC-operation ska kunna utf¨oras per klockcykel. Det inkluderar tiden f¨or att skriva och l¨asa data till och fr˚an minnet. Med anled- ning av prestandakraven valdes i samr˚ad med handledaren att implementera funktionen som en separat FIR-accelerator.

En frist˚aende filteraccelerator ger andra m¨ojligheter till prestanda och funktionalitet ¨an en MAC-funktion hos processorn. Till exempel kan enhe- ten arbeta i en h¨ogre klockhastighet ¨an processorn och g¨ora en eller flera filterber¨akningar under tiden som processorn arbetar med annat.

N˚agra krav sattes upp p˚a filteracceleratorn.

K3.1 Indataord ska vara av 24 bitars precision. K3.2 Koefficienter ska vara av 18 bitars precision. K3.3 Ackumulering ska ske med 48 bitars precision.

K3.4 Acceleratorn ska kunna utf¨ora i snitt en MAC-operation per 10 ns.

K3.5 Acceleratorn ska kunna v¨axla mellan upp till 16 f¨ordefinerade filter.

K3.6 Acceleratorn ska kunna utf¨ora f¨oraddering f¨or ber¨akning av symmetriska och antisymmetriska filter.

K3.7 Acceleratorn ska kunna anv¨anda utdata fr˚an en filterk¨orning som indata till en annan.

K3.8 Acceleratorn ska kunna kontrolleras via Wishbonebussen. K3.9 Data- och koefficientminnena ska vara ˚atkomliga via Wishbo-

nebussen.

K3.10 Data- och koefficientminnena ska f¨orutom krav K3.9 ¨aven vara ˚atkomliga i full hastighet via ett separat minnesinterface. Flera av kraven ovan ¨ar h¨arledda fr˚an egenskaper hos m˚alplattformen. F¨or filteracceleratorn kommer MAC-enheten och n¨armare best¨amt multipli- katorn att s¨atta begr¨ansningarna f¨or prestandan. I kretsen Virtex5 SX50T finns flertalet funktioner implementerade som h˚arda block. Ett s˚adant ¨ar blocket DSP48E som inneh˚aller bland annat en multiplikator och en helad- derare. Blocket g˚ar att konfigurera s˚a att det implementerar en komplett MAC-enhet. [14] En MAC-enhet implementerad med hj¨alp av ett DSP48E- block kan utf¨ora en 25x18-bitars multiplikation med ackumulering i ett 48- bitars register. Kraven K3.2 och K3.3 kommer direkt fr˚an de h¨ar kretsegen- skaperna, dataordens bredd sattes till 24 bitar eftersom en guardbit beh¨ovs vid eventuell f¨oraddering av indatan. DSP48E-blocket kan klockas i maxi- malt 450MHz1 om alla interna pipelineregister anv¨ands. 450MHz ¨ar ocks˚a den maximala klockfrekvensen som kan anv¨andas f¨or blockminnena i kret- sen. F¨or att uppfylla krav K3.4 beh¨over acceleratorn kunna klockas i minst 100MHz, men f¨or ¨andam˚alet ¨ar en h¨ogre klockfrekvens bara b¨attre.

1

Maxfrekvensen g¨aller f¨or kretsversionen Speed Grade -1 som anv¨andes i det h¨ar pro- jektet.

H3 H4 H5 H1 H1 H2 X Y1 Y3 Y4 Y5 Y6 Y2

Figur 4.1: Exempel p˚a ett system med flera filter

Ett av anv¨andningsfallen som st¨alldes upp f¨or filteracceleratorn best˚ar i att ber¨akna resultatet i flera noder av ett filtertr¨ad, s˚asom i figur 4.1. Genom att som i krav K3.7 till˚ata att utdata fr˚an ett filter anv¨ands som indata till ett annat f˚ar man stor flexibilitet i konstruktionen av s˚adana filtersystem.

Krav K3.6 relaterar till speciella filtertyper som beskrivs n¨armre i avsnitt 4.2.1.

Genom krav K3.10 ges m¨ojlighet att l˚ata processorn arbeta mot filtrerad data som erh˚alls direkt fr˚an extern logik genom att anv¨anda filteraccelera- torns dataminne som ett delat minnesomr˚ade.

4.2

Design

4.2.1

Ber¨akning av FIR-filter

Funktionen som ska utf¨oras av acceleratorn ¨ar filtrering av data genom ett FIR-filter. Ber¨akningarna som utf¨ors utg¨or en faltning av tv˚a indata d¨ar den ena ¨ar FIR-filtrets koefficienter och den andra den data som ska filtreras. Faltningen uttrycks matematiskt som i ekvation 4.1, d¨ar m ¨ar filterl¨angden. [2] Y[n] = m−1 X k=0 H[k]X[n − k] (4.1)

I krav K3.6 n¨amns symmetriska och antisymmetriska filter. Med sym-

metriska filter avses filter som har den egenskapen att koefficienterna i andra

halvan av filtret ¨ar samma som de i f¨orsta halvan men i omv¨and ordning. Dvs. f¨or ett filter med l¨angden m ¨ar koefficient H[m1] = H[(m + 1) − m1] f¨or 0 ≤ m1 ≤ ⌈

m

(a) Olinj¨ar fas-filter (b) Symmetriskt filter med j¨amnt antal tappar

(c) Symmetriskt filter med udda antal tappar

(d) Antisymmetriskt filter med j¨amnt antal tappar

(e) Antisymmetriskt filter med udda antal tappar

Figur 4.2: Filtertyper

terna i andra halvan av filtret ist¨allet ¨ar negationen av de i f¨orsta halvan men i omv¨and ordning. Allts˚a, f¨or ett filter med l¨angden m ¨ar koefficient H[m1] = −H[(m + 1) − m1] f¨or 0 ≤ m1 ≤ ⌈m2⌉. En illustration av hur de h¨ar typerna av filter ser ut kan ses i figur 4.2 som visar exempel p˚a impulssvar fr˚an samtliga filtertyper.

Anledningen till att de h¨ar filtertyperna s¨arbehandlas ligger i att det i m˚anga applikationer ¨ar ¨onskv¨art att faskarakt¨aristiken har en konstant gruppl¨optid. FIR-filter g˚ar alltid att skapa i en form med konstant gruppl¨optid och ¨ar d˚a alltid symmetriska eller antisymmetriska. F¨or den h¨ar typen av fil- ter g˚ar det att f¨orenkla ber¨akningen avsev¨art. [2]

Ber¨akningen av utdataord i ekvation 4.1 motsvarar direkt funktionen hos en MAC-enhet. Koefficienterna och indataorden ges som indata och efter m operationer ges utdataordet av inneh˚allet i ackumulatorn. Man kan notera att 2m l¨asningar och en skrivning beh¨over g¨oras till minne.

F¨or faltning vid ber¨akning av symmetriska filter med ett j¨amnt antal ko- efficienter kan man g¨ora omskrivningar enligt ekvation 4.2. I omskrivningen tydligg¨ors att samma koefficient anv¨ands f¨or tv˚a indataord. Det g¨or att bara h¨alften av koefficienterna beh¨over lagras. Dessutom halveras antalet multipli- kationer som beh¨over utf¨oras f¨or ber¨akningen av varje utdataord. I geng¨ald m˚aste tv˚a indataord h¨amtas fr˚an minne f¨or varje multiplikation. P˚a samma s¨att kan antisymmetriska filter skrivas om med en subtraktion ist¨allet f¨or en

addition. Y[n] = m−1 X k=0 H[k]X[n − k] H[m1] = H[m − m1] m1 ∈ 0..m      ⇒ Y [n] = ⌊m 2⌋−1 X k=0 H[k] (X[n − k] + X[n − m + k]) (4.2)

Ekvation 4.2 ¨ar bara giltig f¨or filter med j¨amnt antal koefficienter. N¨ar det g¨aller symmetriska och antisymmetriska filter med ett udda antal koefficien- ter m˚aste ytterligare en term l¨aggas till s˚asom i ekvation 4.3. Tillsammans ger icke-symmetriska, symmetriska och antisymmetriska filter med udda och j¨amnt antal koefficienter fem fundamentala fall som m˚aste hanteras. Det ¨ar v¨art att notera att f¨or ett antisymmetriskt filter med udda antal koefficienter m˚aste koefficienten p˚a symmetripunkten enligt definitionen vara noll.

Vid implementation av FIR-filtrering i h˚ardvara motsvarar den nya ad- ditionen i ekvation 4.2 en f¨oradderare, som adderar b˚ada indatav¨ardena till dataing˚angen p˚a MAC-enheten.

Y[n] =   ⌊m 2−1⌋ X k=0 H[k] (X[n − k] + X[n − m + k])  + H h ⌊m 2⌋ i Xhn− ⌊m 2⌋ i (4.3)

4.2.2

Adressering

Ber¨akningen av en filterk¨orning i acceleratorn tar minst l · m cykler att utf¨ora, d¨ar l ¨ar antalet indataord och m ¨ar antalet filterkoefficienter. I varje ny cykel m˚aste r¨att indataord och koefficient finnas tillg¨anglig i respektive ing˚angsregister till MAC-enheten. I tabell 4.1 visas i vilken ordning v¨ardena ges som indata till MAC-enheten och f¨oradderaren f¨or ett symmetriskt filter med data {1, 2, 3} och koefficienter {1, 2, 3}. I tabell 4.2 visas motsvaran- de exempel f¨or ett filter som inte ¨ar symmetriskt, i det h¨ar fallet ges noll konstant som ena indata till f¨oradderaren.

F¨or att adressera koefficienterna i minnet anv¨ands en r¨aknare K som f¨ore varje nytt utdataord s¨atts till adressen f¨or sista koefficienten och sedan r¨aknas ned tills adressen f¨or f¨orsta koefficienten n˚as. Vid det tillf¨allet har ett nytt utdataord ber¨aknats.

Adressering av dataord sker p˚a olika s¨att beroende p˚a om filterk¨orningen ¨ar symmetrisk eller inte. F¨or symmetriska filter anv¨ands tv˚a r¨aknare U och

Utdataord 0 1 2 3 Tidssteg 0 1 2 3 4 5 6 7 8 9 10 11 Indata, ¨ovre 0 0 1 0 1 2 1 2 3 2 3 0 Indata, undre 0 0 0 0 0 0 0 0 0 1 0 0 Utdata, f¨oradd. 0 0 1 0 1 2 1 2 3 3 3 0 Koefficient 3 2 1 3 2 1 3 2 1 3 2 1 Utdata, MAC 0 0 1 0 2 4 3 7 10 9 15 15 Utdata, resultat 1 4 10 15 4 5 6 7 12 13 14 15 16 17 18 19 20 21 22 23 3 0 0 0 0 0 0 0 0 0 0 0 20 1 0 3 2 1 0 3 2 0 0 3 5 1 0 3 2 1 0 3 2 0 0 3 3 2 1 3 2 1 3 2 1 3 2 1 15 17 17 9 13 14 0 6 8 0 0 3 17 14 8 3

Tabell 4.1: Exempel p˚a ber¨akning av symmetriskt filter.

Utdataord 0 1 2 3 4 Tidssteg 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Indata, ¨ovre 0 0 1 0 1 2 1 2 3 2 3 0 3 0 0 Indata, undre 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Utdata, f¨oradd. 0 0 1 0 1 2 1 2 3 2 3 0 3 0 0 Koefficient 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 Utdata, MAC 0 0 1 0 2 4 3 7 10 6 12 12 9 9 9 Utdata, resultat 1 4 10 12 9

L som adresserar ¨ovre respektive undre delen av indatan. R¨aknaren L s¨atts f¨ore varje nytt indataord till A[k] − l d¨ar A[k] ¨ar adressen till indataordet med index k och l ¨ar antalet koefficienter. Adressen i L r¨aknas sedan upp tills utdataordet ber¨aknats. R¨aknaren U s¨atts f¨ore varje nytt indataord till A[k] − l − 1 och r¨aknas ned tills utdataordet ber¨aknats. F¨or alla indataord som adresseras utanf¨or filtrets indataomr˚ade genereras v¨ardet noll.

F¨or att initiera r¨aknarna U och L anv¨ands ocks˚a tv˚a r¨aknare L’ och U’ som initieras till A[0] − l respektive A[0] − l − 1 och sedan r¨aknas upp tills sista indataordet adresseras i U’. Vid det tillf¨allet ¨ar filterk¨orningen klar.

F¨or indata till f¨oradderaren kr¨avs att data l¨ases fr˚an adressen i U och L varje cykel. F¨orutsatt att minnet till˚ater en skrivning eller l¨asning per cykel kr¨avs d˚a ett tv˚aportsminne. S˚adana minnen finns ocks˚a tillg¨angliga i m˚alplattformen. F¨or att h˚alla implementationen generell nog att portas till en annan teknologi d¨ar tv˚aportsminnen inte finns tillg¨angliga undviks dock den h¨ar l¨osningen.2 Ist¨allet delas datan upp p˚a tv˚a minnen som kan l¨asas och skrivas till parallellt. En f¨oruts¨attning f¨or att det ska fungera ¨ar att l¨asningar och skrivningar ¨ar j¨amnt f¨ordelade mellan minnena ¨over tiden.

L¨asning av data vid filtreing sker fr˚an adresser som st¨andigt ¨okar respekti- ve minskar med ett f¨or varje cykel. Det inneb¨ar att f¨or icke-symmetriska filter kommer varannan adress att vara udda och varannan j¨amn. F¨or symmetriska och antisymmetriska filter g¨aller att f¨or fyra l¨asta indataord kommer h¨alften av adresserna att vara udda. Genom att dela upp datan p˚a tv˚a minnen d¨ar det ena inneh˚aller j¨amna adresser och det andra udda adresser g˚ar det d¨arf¨or att f˚a en j¨amn f¨ordelning av l¨asningar ¨over tiden.

Under en filterk¨orning sker tv˚a undantag fr˚an en s˚adan j¨amn f¨ordelning mellan udda och j¨amna minnesadresser. F¨or det f¨orsta m˚aste varje utdata- ord skrivas in till minnet under en cykel. Detta hanteras genom att stoppa filterk¨orningen helt under den cykeln. Det andra undantaget sker n¨ar mer ¨an tv˚a j¨amna eller udda adresser f¨oljer varandra. Det kan intr¨affa vid ¨overg˚angen mellan tv˚a utdataord. Om det faller sig s˚a att tre eller fyra av de avslutande och p˚ab¨orjade indataorden ¨ar av samma typ, j¨amna eller udda, kan inte alla indataord l¨asas samtidigt. F¨or att hantera en s˚adan situation utnyttjas det faktum att det f¨orsta indataordet, vid ber¨akningen av ett utdataord, alltid kommer att vara samma som det andra indataordet fr˚an ber¨akningen av f¨oreg˚aende utdataord. Ist¨allet f¨or att h¨amta det f¨orsta indataordet anv¨ands d¨arf¨or ist¨allet ett lagrat v¨arde fr˚an f¨orra utdataordet.3

2

M˚alet f¨or n¨asta portning, eAsic nextreme, erbjuder exempelvis inte tv˚aportsminnen.

3

Undantaget ¨ar det allra f¨orsta indataordet, d˚a inget ord fr˚an f¨oreg˚aende utdataord finns lagrat. Det indataordet kommer dock alltid att vara noll f¨or filter med mer ¨an en koefficient.

K o m m a n d o k ö W i s h b o n e - i n t e r f a c e A d d r e s s - g e n e r a t o r M A C K o e f f i c i e n t - m i n n e D a t a m i n n e P r e a d d e r a r e u C F I R - a c c e l e r a t o r E x t e r n l o g i k M i n n e s k o n t r o l l e r a r e

Figur 4.3: FIR-acceleratorn, toppniv˚a

4.3

Implementation

I figur 4.3 visas designen f¨or FIR-acceleratorn p˚a toppniv˚a. F¨or att m¨ojligg¨ora klockning av acceleratorn med en h¨og frekvens ¨ar designen indelad i en serie av pipelinesteg. Figur 4.4 visar hur den indelningen ser ut.

Alla register i figur 4.4 har inte till syfte att minska den kritiska v¨agen. De tv˚a register som f¨oljer ing˚angen av preproc-enheten anv¨ands som en tv˚astegs buffert f¨or att r¨atta till ordningen p˚a de dataord som kommer fr˚an ud- da respektive j¨amna dataminnet. De tv˚a register som f¨oljer utg˚angen fr˚an MAC-enheten anv¨ands f¨or att synkronisera skrivningen till dataminnet med addrgen-enheten.

I figur 4.5(a) visas kommandok¨on. N¨ar nya kommandon skrivs till k¨on propagerar de till registret f¨ore det sista icke-tomma registret i k¨on. Ett re- gister i k¨on signalerar med valid o fram˚at i k¨on att data o ¨ar giltig. Insignalen

propagate i inneb¨ar att registerv¨ardet har propagerat fram˚at i k¨on vilket i sin tur inneb¨ar registret ska ers¨atta nuvarande inneh˚all med data fr˚an ing˚angen om detta ¨ar giltigt. N¨ar det sker skickas propagate o till n¨asta register bak˚at

c m e m d m e m

p r e p r o c

m a c a d d r g e n

c q r e g c q r e g c q r e g n e w _ f i l t e r f i l t e r _ d a t a c q r e g n e x t _ f i l t e r v a l i d f i l t e r _ d a t a (a) Registerstruktur p r o p a g a t e _ i v a l i d _ i v a l i d _ o d a t a _ o d a t a _ i p r o p a g a t e _ o c q r e g 0 1 0 1 0 1 (b) RTL-schema, kommandok¨oregister

Figur 4.5: Kommandok¨on i FIR-acceleratorn i k¨on. I figur 4.5(b) visas RTL-schemat f¨or ett register i k¨on.

I de tv˚a sista stegen av kommandok¨on genereras ocks˚a, utifr˚an filter- gr¨anserna, stoppvillkor samt initieringsv¨arden f¨or adressgeneratorn. Stopp- villkoren anv¨ands f¨or att avg¨ora dels n¨ar varje nytt utdatav¨arde ber¨aknats, dels n¨ar sista utdatav¨ardet i filtret ber¨aknats. Det sistn¨amnda stoppvillkoret skapas i adressgeneratorn genom att j¨amf¨ora aktuell koefficientadress med en adress tv˚a ord ¨over bottenadressen. Som f¨oljd m˚aste ett filter ha tre eller fler koefficienter f¨or att kunna ber¨aknas i acceleratorn.

F¨or att dela upp indatal¨asningar mellan det udda och det j¨amna da- taminnet anv¨ands fyra adressregister. De inneh˚aller adresser f¨or nuvarande respektive n¨asta indataord b˚ade f¨or de ¨ovre och de undre indataorden. Den minst signifikanta biten i varje adress talar om ifall indataordet ¨ar udda eller j¨amnt. Utifr˚an den minst signifikanta biten i varje adress bildar arbitreraren en bitstr¨ang med fyra bitar som sedan anv¨ands f¨or att avg¨ora vilket indata- ord som ska l¨asas ut. Utifr˚an valet skapas ocks˚a en kontextsignal, som talar om vilket val som gjordes. I figur 4.6 visas hur data adresseras i det udda eller j¨amna dataminnet. Utifr˚an kontextsignalen kan dataorden placeras in i r¨att ordning senare i pipelinen. Ut¨over kontextsignalen finns ¨aven en signal

som talar om f¨or preproc-enheten att anv¨anda nollv¨arden ist¨allet f¨or inda- ta. Figur 4.7 visar mer specifikt hur preproc-enheten anv¨ander indata och

Related documents