Digital signalprocessor

Digital signalprocessor ( eng.  digital signal processor , DSP , digital signal processor (DSP) - en specialiserad mikroprocessor designad för att behandla digitaliserade signaler (vanligtvis i realtid ) [1] .

Arkitektoniska egenskaper

Arkitekturen för signalprocessorer, i jämförelse med mikroprocessorer för allmänt bruk, har vissa funktioner förknippade med önskan att påskynda utförandet av typiska digitala signalbehandlingsuppgifter så mycket som möjligt, såsom digital filtrering , Fourier-transform , signalsökning , etc. Matematiskt reduceras dessa uppgifter till elementvisa multiplikationselement av multikomponentvektorer av reella tal, följt av summering av produkterna (till exempel vid digital filtrering är utsignalen från ett filter med en finit impulssvar lika med summan av produkter av filterkoefficienterna av vektorn för signalsampel, utförs liknande beräkningar när man söker efter maxima för korrelations- och autokorrelationsfunktionerna för signalsampel). Därför är signalprocessorer optimerade för hastighet för att utföra just sådana operationer. Och DSP:er är först och främst inriktade på den upprepade exekveringen av multiplikation med beräkningen "i farten" av adresserna till arrayelementen som ska multipliceras:

De begränsade hårdvaruresurserna hos de första DSP:erna lämnade ett betydande avtryck på deras arkitektur:

I modern mikroelektronik innehåller processorer för generella ändamål ofta hårdvarustöd för typiska DSP-operationer. Särskilt tidskrävande DSP-uppgifter löses på basis av programmerbar logik , där det är möjligt att uppnå den yttersta optimeringen av utförandet av en viss operation. Specialiserade DSP-processorer görs alltmer vektor . Samtidigt tillhandahåller klassiska DSP:er avancerade instruktionsuppsättningar för generella processorer och jämnar ut funktionerna i mjukvarumodellen och positionerar dem som produkter för allmänna ändamål med accelererade DSP-funktioner. Alla dessa tendenser leder till att det klassiska konceptet DSP suddas ut.

Applikationer

Historik

Tidigare utvecklingar

Före 1980 producerade flera företag enheter som kan anses vara föregångare till DSP:er. Så 1978 släppte Intel den "analoga signalprocessorn" 2120. Den inkluderade en ADC , en DAC och en digital dataprocessor, men det fanns ingen hårdvarumultiplikationsfunktion. 1979 släppte AMI S2811, en kringutrustning som styrs av datorns huvudprocessor. Båda produkterna var inte framgångsrika på marknaden.

Första generationen (tidigt 1980-tal)

Huvudhistoriken för DSP:er räknas vanligtvis från 1979-1980, när Bell Labs introducerade den första Mac 4 enkelchips DSP, och även NEC :s µMPD7720 och AT&T :s DSP1 visades på IEEE International Solid-State Circuits Conference '80 , som dock inte fick stor spridning. De facto-standarden var Texas Instruments TMS32010-kristall som släpptes lite senare , som överträffar konkurrenternas produkter i många parametrar och framgångsrika tekniska lösningar. Här är några av dess egenskaper:

Andra generationen (mitten av 1980-talet)

På grund av framsteg inom halvledarteknologi under denna period släpptes produkter som hade förbättrade funktioner jämfört med den första generationen. Karakteristiska skillnader inkluderar:

Långt senare släpptes också enheter, formellt tillhörande den andra generationen, men med följande förbättringar:

Tredje generationen (slutet av 1980-talet)

Den tredje generationen av DSP:er är vanligtvis förknippad med produktionsstart av produkter som implementerar flyttalsaritmetik. Karakteristiska egenskaper hos de första släppta proverna:

Fjärde generationen

Den fjärde generationen av DSP:er kännetecknas av en betydande expansion av instruktionsuppsättningar, skapandet av VLIW och superskalära processorer. Klockfrekvenserna har ökat märkbart. Så, till exempel, exekveringstiden för MAC-instruktionen ( Y := X + A × B ) reducerades till 3 ns.

Moderna DSP:er

De bästa moderna DSP:erna kan karakteriseras av följande parametrar:

Grundläggande DSP-parametrar

DSP:ns integrerade egenskaper används också ofta, till exempel indikatorn "effekt / ström / hastighet", till exempel ma / MIPS (milliampere per 1 miljon instruktioner per sekund), vilket gör det möjligt att uppskatta den verkliga strömförbrukningen beroende på komplexiteten i uppgiften som löses av processorn vid ett visst tillfälle.

Valet av DSP bestäms helt av syftet med systemet som utvecklas. Till exempel är billiga processorer och låg strömförbrukning viktigt för massmobila enheter, medan kostnaden för att utveckla ett system tonar i bakgrunden. Å andra sidan, för mätutrustning, audio- och videoinformationsbearbetningssystem är processoreffektivitet, tillgången på avancerade verktyg, multiprocessing etc. viktiga.

Utvärdering och jämförelse av prestanda

Som noterats tidigare gör individuella egenskaper såsom klockfrekvens, MIPS, MOPS, MFLOPS det möjligt att utvärdera prestandan hos en DSP ganska tvetydigt. Därför, för att lösa problemet med att mäta och jämföra egenskaperna hos olika DSP: er, används speciella uppsättningar av tester som imiterar några vanliga digitala signalbehandlingsuppgifter. Varje test består av flera små program som är skrivna i assembler och optimerade för en given arkitektur. Dessa tester kan innefatta implementering av:

Det mest auktoritativa testpaketet idag är BTDImark2000-testet ( BDTI DSP Kernel Benchmarks™ (BDTImark2000™) Certified Results ), som förutom dessa algoritmer även inkluderar en bedömning av minnet som används av algoritmen, systemutvecklingstid och annat parametrar.

Enhet

Harvard-arkitektur

Digitala signalprocessorer är byggda på basis av den sk. "Harvard-arkitektur", ett utmärkande drag för det är att program och data lagras i olika minnesenheter - programminne och dataminne. Till skillnad från von Neumann-arkitekturen , där processorn behöver minst tre busscykler för att hämta en instruktion och två operander, kan en DSP göra samtidiga åtkomster till både instruktionsminne och dataminne, och ovanstående instruktion kan tas emot i två busscykler. I verkligheten, tack vare omtänksamheten i kommandosystemet och andra åtgärder, kan denna tid reduceras till en cykel. I riktiga enheter kan instruktionsminnet lagra inte bara program utan även data. I det här fallet sägs DSP vara byggd enligt en modifierad Harvard-arkitektur.

Instruktionsminne och dataminne finns vanligtvis på DSP-chippet. På grund av det faktum att detta minne har en relativt liten volym, blir det nödvändigt att använda externa (i förhållande till processorchippet) lagringsenheter. För sådana anordningar används inte separata kommando- och databussar, eftersom detta skulle kräva en betydande ökning av antalet externa kristallstift, vilket är dyrt och opraktiskt. Därför sker interaktionen av DSP med externa lagringsenheter över en uppsättning bussar utan separation i kommandon och data. Det bör också noteras att åtkomst till externt minne alltid tar mycket mer tid än internminne, så i applikationer som är kritiska för exekveringstiden måste sådana åtkomster minimeras.

Strukturdiagram

Pipeline exekvering av kommandon

Pipelinen är en beräkningstråd som utför en viss mikrooperation i varje steg , så det finns flera kommandon vid olika exekveringsstadier på pipelinen vid varje given tidpunkt. Detta förbättrar prestandan.

Närvaron av flera pipelines implementerar en superskalär arkitektur.

Med parallell bearbetning av kommandon på olika pipelines uppnås maximal effekt på samma typ av kommandon som inte är beroende av varandra. Om programmet innehåller kommandon av olika typer, så introduceras väntecykler på pipelinen.

För att optimera lastningen av transportörer krävs följande:

Som ett resultat exekveras inte kommandona i den ordning som programmeraren skrev ner dem.

Hårdvaruimplementering av huvudfunktionerna

Multiplikatorer

En hårdvarumultiplikator används för att minska exekveringstiden för en av de viktigaste DSP-operationerna - multiplikationsoperationen. I generella processorer implementeras denna operation i flera skift- och additionscykler och tar mycket tid, och i DSP, tack vare en specialiserad multiplikator, i en instruktionscykel.

Funktionellt är multiplikatorer uppdelade i två typer:

  • Enkel multiplikator. Utför en ordomfattande multiplikationsoperation. Resultatet är dubbelt ordbrett och lagras antingen i ett dubbelbreddsregister eller i två vanliga register (eller två minnesplatser).
  • Multiplikator-adderare (MAC - Multiplier / Accumulator). Utför en multiplicera-ackumuleringsoperation som används flitigt i många digitala signalbehandlingsalgoritmer. För detaljer om hur du använder det här kommandot, se #Classifying DSPs by Architecture .
Shifters

En shifter är både en enhet som utför en dataskiftoperation och ett register som lagrar resultatet av skiftet [2] .

När det gäller deras funktioner är växlarna indelade i:

  • Preshifters som utför ett skift innan operationen påbörjas eller under dess utförande;
  • Efterskiftare som utför ett skift efter att operationen har utförts.

I båda fallen är strukturen för registret som lagrar resultatet av skiftet densamma som strukturen för ackumulatorn .

Preshifter funktioner
  • preliminär skalning. Används i komplexa aritmetiska kommandon, till exempel, såväl som laddningskommandon med en förskjutning av formen ;
  • Skift innan du utför komplexa logiska operationer, till exempel ;
  • Aritmetiska, logiska och cykliska skift under utförandet av motsvarande kommandon.
Postshifter-funktioner
  • Skalningsresultat när du sparar i minnet. Samtidigt förblir innehållet i ackumulatorn (resultatet av huvudoperationen) oförändrat;
  • Ta bort skyltförlängningsbitar;
  • Normalisering;
  • Val av samma ordning.
Adressgenereringsenheter Hårdvaruorganisation av cykler

ALU

ALU är en processorenhet som, under kontroll av en instruktionsavkodare, utför aritmetiska och logiska transformationer på data, som i detta fall kallas operander. Bitbredden på operanderna brukar kallas maskinordets storlek.

Register

Batteri

En ackumulator är ett register som är utformat för att lagra resultat av operationer. Arkitekturen för många DSP:er har två ackumulatorer, vilket gör det möjligt att påskynda exekveringen av operationer som kräver lagring av mellanliggande resultat. Tekniskt sett kan en ackumulator bestå av flera register [2] :

  • EXT - förlängningsregister;
  • MSP - högordregister;
  • LSP - lågordregister.

Närvaron av EXT-registret gör att du kan öka noggrannheten vid beräkning av mellanresultat, samt öka lagringsområdet för värden som inte leder till översvämning. När ett ackumulatorvärde lagras i en minnescell eller ett vanligt register, avrundas dess värde till standardbredden för den cellen eller registret. Å andra sidan, vid behov, kan innehållet i EXT-registret lagras separat.

Adresseringsmetoder

Processorn stöder direkt adressering, indirekt adressering före och efter inkrement, och DSP-specifika cykliska adresseringar och adressbitomvändningsadresser.

Klassificering av DSP:er efter arkitektur

Det bör noteras att klassificeringen nedan [2] är ganska villkorad, eftersom de olika tekniska lösningarna ofta inte tillåter en entydigt att tillskriva varje specifik enhet till en av de angivna typerna. Därför bör följande snarare användas som ett material för att förstå funktionerna i DSP-arkitekturen än för en riktig klassificering av några produkter.

Det är bekvämt att överväga funktionerna i DSP-arkitekturen på exemplet på en specifik digital databehandlingsalgoritm, till exempel ett FIR-filter , vars utsignal kan skrivas som:

, var

  •  — avläsningar av insignalen.
  •  är filterkoefficienterna.

Som du lätt kan se är att beräkna resultatet ett klassiskt exempel på att använda multiplikations-ackumuleringsoperationen - MAC (Y := X + A × B) .

Standard DSPs

Figuren visar två alternativ för att exekvera en MAC-instruktion på en standard DSP. I den första varianten lagras båda operanderna i dataminnet, så det tar två cykler att hämta dem, det vill säga exekveringstiden för n tillägg är 2n . I det andra fallet lagras en av operanderna i programminnet, så instruktionen exekveras i en cykel, och den totala exekveringstiden för slingan kommer att vara lika med n cykler (det bör förtydligas att i verkligheten, för exekvering i en cykel måste MAC:n exekveras i en speciell loopinstruktion för att undvika återhämtning av själva instruktionskoden, vilket kräver en extra klockcykel). Det kan ses här att en effektiv implementering av algoritmen kräver användning av programminne för att lagra data.

Ett av alternativen som gör att du kan överge användningen av programminne för datalagring är användningen av den så kallade. "dual-port memory", det vill säga minne som har två uppsättningar ingångsbussar - två adress- och databussar. Denna arkitektur tillåter samtidig åtkomst till två adresser (de måste dock vara i olika adresserbara block). Denna lösning används i DSP:er från Motorola (DSP56000) och Lucent (DSP1600).

Med den här arkitekturen är det enda sättet att förbättra prestandan att öka klockfrekvensen.

Förbättrade standard-DSPs

"Enhanced Standard DSPs" använder följande parallellitetsförbättringstekniker för att förbättra systemets prestanda jämfört med standard DSP:er:

  • Öka antalet drift- och datorenheter;
  • Introduktion av specialiserade samprocessorer;
  • Bussexpansion för att öka mängden överförd data;
  • Användning av minne med flera åtkomster (flera åtkomster per cykel);
  • Komplikation av kommandosystemet;

Många av dessa metoder har funnits sedan de allra första processorerna, så det är ofta omöjligt att otvetydigt klassificera dem som "standard" eller "förbättrade".

Figuren visar ett exempel på implementeringen av beräkningen av två parallella MAC-kommandon. För att göra detta innehåller DSP två MAC-moduler och två batterier. MAC-block tar emot data på tre bussar samtidigt, och ett av värdena är gemensamt för dem. Således exekveras två kommandon samtidigt:

  • AK1 := AK1 + D1 × D2
  • AK2 := AK2 + D1 × D3

Det speciella med den visade lösningen är att många DSP-algoritmer kan reduceras till exekvering av två parallella kommandon med en gemensam faktor, till exempel:

  • FIR-filter med symmetriska koefficienter. Filterkoefficienter används som identiska faktorer, och två olika uppsättningar signalsampel matas till separata bussar, det vill säga två halvor av filtret beräknas parallellt, som sedan summeras.
  • Dubbelkanalsbehandling. Signalsampel matas till den gemensamma bussen och uppsättningar av koefficienter matas till separata bussar.

Vissa processorer (Lucent DSP16xxx, ADI ADSP-2116x) använder två identiska kärnor, var och en med sitt eget minne, det vill säga en instruktion exekveras samtidigt i två kärnor med olika data. Detta kringgår begränsningen av att använda helt oberoende data.

En karakteristisk nackdel med sådana processorer kan betraktas som behovet av en högt kvalificerad utvecklare, eftersom effektiv användning av dessa funktioner kräver programmering i assemblerspråk, en god kunskap om arkitekturen och kommandosystemet, det vill säga dessa enheter anses vara "ovänliga" till högnivåspråk.

DSP med VLIW-arkitektur

Den största skillnaden mellan VLIW- processorer är att instruktionskoderna sätts ihop till stora "superinstruktioner" vid kompileringsstadiet och exekveras parallellt. Typiskt använder sådana processorer en RISC-arkitektur med en fast instruktionslängd, där var och en av dem exekveras i en separat driftenhet. De karakteristiska egenskaperna hos sådana processorer inkluderar:

  • En stor uppsättning driftmoduler som fungerar oberoende av varandra. Dessa moduler kan inkludera:
    • Aritmetisk:
      • moduler för aritmetiska operationer och jämförelseoperationer;
      • moduler för logiska operationer;
      • moduler för att multiplicera tal med flytande och fast punkt;
      • konstant generationsmoduler.
    • Adressgenereringsmoduler, inklusive de för linjära och cykliska buffertar;
  • Behovet av att optimera kompilatorn för varje processormodell, eftersom beräkningsenheternas sammansättning och funktioner kan ändras mellan modeller, vilket medför en förändring i listan över kommandon som kan utföras samtidigt;
  • Behovet av ultravida databussar (ca 128 bitar) så att operationskoden, bestående av individuella kommandon (upp till 8), kan erhållas från minnet i ett samtal.
  • Höga krav på mängden programminne, vilket också är förknippat med en stor längd på operationen.

Vanligtvis, om processorn har flera identiska moduler, då när du skapar ett program i assembler, är det möjligt att endast specificera typen av den nödvändiga operationsmodulen, och den specifika enheten kommer att tilldelas av kompilatorn. Å ena sidan förenklar detta programmeringen av sådana enheter, och å andra sidan gör det det möjligt att använda sina resurser ganska effektivt.

Superscalar DSPs

Superskalära processorer kännetecknas också av en stor uppsättning parallella driftenheter och förmågan att utföra flera instruktioner samtidigt. Men jämfört med VLIW har de två framträdande egenskaper:

  • Processorinstruktioner är inte grupperade i block, var och en av dem går in i processorn oberoende;
  • Instruktioner för parallell exekvering är grupperade inom processorn baserat på sammansättningen och den aktuella arbetsbelastningen av operationsblock, såväl som förhållandet mellan data.

Med det beskrivna tillvägagångssättet kan du komma runt följande nackdelar med VLIW:

  • Ineffektiv minnesanvändning på grund av lång gruppdrift;
  • Beroendet av den kompilerade koden på sammansättningen av driftsmodulerna för en viss processor.

Priset för att lösa dessa problem är en betydande komplikation av processorkretsen, där en modul för att schemalägga instruktionsexekvering visas.

Superskalära processorer planerar utförandet av instruktioner inte bara baserat på information om arbetsbelastningen för operationsblock, utan också baserat på analys av beroenden mellan data. Till exempel kan en instruktion för att spara resultatet av en aritmetisk operation inte utföras före själva beräkningsoperationen, även om minnesåtkomstmodulen för närvarande är ledig. Denna funktion leder bland annat till att samma uppsättning instruktioner kan utföras olika på olika platser i programmet, vilket gör det omöjligt att exakt bedöma prestanda. Detta är särskilt viktigt för system som körs i realtid, eftersom det sämsta resultatet kommer att leda till att processorresurserna inte kommer att användas fullt ut. I dessa system förblir problemet med att noggrant uppskatta prestandan för superskalära DSP:er öppet.

Hybrid DSPs

Hybrid DSP:er förstås vanligtvis som specialiserade enheter som kombinerar funktionerna hos en mikrokontroller och en digital signalprocessor. Typiskt är sådana produkter utformade för att utföra en funktion - till exempel styrning av elmotorer eller andra objekt i realtid. Ett annat brett område av deras applikation har nyligen blivit mobiltelefoni, där två processorer tidigare användes - en konventionell för att styra enhetens funktioner (skärm, tangentbord) och den andra för bearbetning av röstsignaler (kodning, etc.).

Klassificering av DSP efter syfte

I allmänhet kan enligt syftet med DSP delas in i två grupper:

  • DSP allmänt ändamål;
  • Problemorienterade DSP:er.

"Problemorientering" syftar vanligtvis inte på ytterligare kommandon, utan till en uppsättning inbyggda specialiserade kringutrustning. Till exempel kan DSP:er utformade för att styra elektriska motorer innehålla on-chip PWM -signalgeneratorer , industriella LAN-kontroller, etc. Processorer som används för att behandla röstsignaler innehåller ofta bitmanipulationsenheter (BMU) och felkorrigeringssamprocessorer. Digitala foto- och videokameror använder DSP:er med MPEG1, MPEG4, JPG, MP3, AAC, etc. kodnings-/avkodningsmoduler.

DSP-programmering

För DSP-programmering används vanligtvis ett av två språk - assembly och C. Huvuddragen hos DSP-montörer är desamma som för konventionella mikroprocessorspråk och kan i allmänhet beskrivas som:

  • Assemblyspråket är maskinorienterat, det vill säga att varje familj av processorer har ett språk som skiljer sig från andra familjers språk;
  • En assemblerspråksinstruktion motsvarar vanligtvis en maskinspråksinstruktion;
  • Vid programmering i assembler har programmeraren tillgång till alla resurser i processorn och systemet, vilket gör att de kan användas så effektivt som möjligt;
  • Programmeraren måste ha goda kunskaper om arkitekturen för varje specifik processor som han arbetar med, det vill säga att personalens kvalifikationer måste vara tillräckligt hög;
  • Att skapa och felsöka program i assembler är en lång och mödosam process, som också kräver höga kvalifikationer.

Å andra sidan, när man använder mellan- och högnivåspråk, i synnerhet C, är det möjligt att avsevärt förenkla och påskynda skapandet av program, men systemresurserna kommer att användas mindre effektivt jämfört med ett program skrivet helt i assembler.

I verkligheten används vanligtvis ett tillvägagångssätt som kombinerar fördelarna med både högnivåspråk och effektiviteten hos monteringsprogram. Detta uttrycks i det faktum att standardbibliotek vanligtvis skapas i assembler, samt kritiska delar av koden vad gäller exekveringstid och minnesstorlek. Samtidigt kan hjälpmoduler skapas på ett högnivåspråk, vilket påskyndar och förenklar utvecklingen av ett mjukvarusystem som helhet.

Funktioner hos DSP-montörer

Intressanta funktioner hos DSP-montörer inkluderar följande:

  • Närvaron av två former av att skriva många kommandon - mnemonisk och algebraisk . Mnemonisk form liknar skrivkommandon för konventionella mikroprocessorer, till exempel ADD dst, src . En annan, algebraisk, används mer sällan i assemblerare av standardmikroprocessorer, medan i DSP-språket kan det nämnda kommandot skrivas som dst = dst + src . Vanligtvis förstår DSP-montörer båda formerna av notation, men till exempel använder Analog Devices och Lucent Technologies- montörer endast algebraisk notation.
  • Medel för att organisera standardstrukturer, till exempel speciella hårdvaruinstruktioner för att repetera en instruktion eller kodblock. Samtidigt, till skillnad från repetitionskommandona från konventionella processorer, kan DSP:n hoppa över cykeln att hämta koden för den upprepade instruktionen, vilket minskar exekveringstiden för varje upprepning med minst 1 busscykel, vilket med en två-cykel instruktion, ger dubbel vinst i tid.

Kompatibilitet inom DSP-familjer

Vanligtvis produceras DSP:er i familjer, och produkter inom familjer har liknande assemblerspråk, eller till och med kompatibilitet på maskinkodnivå. Inom en familj används vanligtvis samma uppsättningar av subrutinbibliotek. Som med konventionella mikroprocessorer kan äldre modeller av DSP ofta exekvera maskinkoden för lägre modeller, eller så inkluderar deras assembler alla instruktioner från lägre modeller som en delmängd av deras egen instruktionsuppsättning.

Felsökningsprogram

Vanligtvis görs felsökning av program skrivna för DSP med hjälp av specialverktyg, inklusive mjukvarusimulatorer och emulatorer . De inkluderar också ofta profileringsverktyg (mäter hastigheten för exekvering av kodblock).

Anteckningar

  1. Digitala signalprocessorer: en handbok. Under. ed. A. G. Ostapenko, M., Radio och kommunikation, 1994.
  2. 1 2 3 Solonina A. I., Ulakhovich D. A., Yakovlev L. A. Algoritmer och processorer för digital signalbehandling. - St Petersburg. : BHV-Petersburg, 2001. - 464 sid. — ISBN 5-94157-065-1 .

Litteratur

  • Solonina AI, Ulakhovich DA, Yakovlev LA Algoritmer och processorer för digital signalbehandling. - St Petersburg. : BHV-Petersburg, 2001. - 464 sid. — ISBN 5-94157-065-1 .
  • Tillämpning av digital signalbehandling \ Ed. E. Openheim - VÄRLDEN, 1980.
  • Digitala signalprocessorer. PC World, 5'93
  • Zilog digitala signalprocessorer och deras tillämpningar. CHIPNEWS, nr 2 (11) 1997
  • Markov. C. Digitala signalprocessorer. Bok 1. M .: Microart, 1996