Signálové procesory Analog Devices ADSP-21xx


Václav Doležal
e-mail: dolezv1@fel.cvut.cz


OBSAH:


Úvod

Charakteristickým znakem rodiny procesorů ADSP-21xx jsou shodná základní architektura pro všechny modely, která je optimalizována pro Digitální zpracování signálů (DSP) a další rychlé výpočetní aplikace. Jednotlivé typy se navzájem liší periferiemi, které jsou přidány na čipu (paměť, timer, sériové porty, paralelní rozhraní, A/D a D/A rozhraní).

Funkční jednotky

Procesory řady ADSP2100 se mohou chlubit vysokým stupněm paralelismu, který je šitý na míru DSP aplikacím. Během jednoho cyklu může ktrékoli zařízení řady:

V tom samém cyklu mohou procesory (které mají potřebné jednotky):

Paměť a systémový interface

Každý procesor obsahuje 4 vnitřní sběrnice, které propojují paměť a ostatní výpočetní jednotky. Ven z čipu je pak vyvedena jedna datová a jedna adresová sběrnice. Ty mohou být použity jak k přístupu do paměti programu tak i paměti dat.

Externí zařízení mohou převzít kontrolu na sběrnici pomocí příslušných signálů (bus request a bus grant). Procesor může v tomto případě dál pokračovat ve výpočtu (pokud není nutné přistupovat do vnější).

ADSP procesory podporují periferie mapované do paměti s možností generování různých čekacích stavů.

Bootovací obvod automaticky zajišťuje naplnění interní paměti po RESETu procesoru. To může být provedeno pomocí paměťového interfacu z levné paměti EPROM, pomocí host interface portu z hostitelského procesoru nebo pomocí BDMA portu čipu ADSP2181. Může být vybráno a nahráno několik různých programů bez nějakého přídavného hardware.

Procesory se dále liší podle reakce na přerušení. Přerušení mohou být vnořená a to bez nějaké dalšího zpoždění. Externí přerušení mohou být konfigurována citlivá na hranu nebo na úrověň. Vnitřní přerušení může genrovat timer, host interface port, seriové porty a BDMA port.

DSP výkon

DSP aplikace kladou na procesor větší nároky než aplikace obyčejné. U DSP procesoru nestačí jen rychlé vykonávání instrukcí. Procesor musí podávat výkony i v následujících oblastech:

 

 

Architektura procesorů pro DSP

Elementární matematickou operací v DSP je součet součinů. Tato operace je základem pro digitální filtraci, FFT a mnoho dalších aplikací pro zpracování signálů.
Tradiční mikroprocesory mají Von Neumannovu architekturu. Tato architektura je založena na jedné paměti, která obsahuje data i instrukce, a na jedné sběrnici pro přesuny dat a instrukcí mezi pamětí a procesorem. Násobení dvou čísel tak zabere tři cykly: Dva jsou nutné pro přesun dvou čísel z paměti a třetí pro přenos instrukce. Tato architektura je tedy dostačující pokud vše co potřebujeme můžeme provádět postupně.

 Pro rychlejší zpracování je ovšem vhodnější Harvardská architektura. Ta se vyznačuje tím, že data a instrukce mají oddělené paměti a sběrnice. Protože tyto sběrnice pracují nezávisle, mohou být data a instrukce přenášeny ve stejném časovém okamžiku, to vylepšilo rychlost oproti původní Von Neumannově koncepci.

Procesory od Analog Devices využívají modifikovanou Harvardskou architekturu která umožňuje mít instrukce i data  v programové paměti. Například digitální filtr má koeficienty uložené v programové paměti a vzorky signálů v datové paměti. Koeficienty a vzorky tak můžou být přeneseny v jednom cyklu. Navíc musí být z programové paměti přenesena instrukce. Procesory od Analog Devices to řeší dvěma různými způsoby:

  1. První metoda zpřístupňuje programovou paměť nadvakrát během jednoho instrukčního cyklu. Tuto metodu využívají procesory řady ADSP-218x. To je umožněno rychlostí paměti RAM umístěné přímo na čipu.

  2. Druhá metoda používá pro uchování instrukce Cache paměť v procesoru. Pokud je tedy instrukce potřeba tak se v prvním kroku načte do cache paměti, ve druhém kroku jsou pak načítány data. Při dalším použití instrukce se již nemusí konat první krok, protože instrukce se získá z této vyrovnávací paměti. Tuto metodu využívá rodina ADSP.219x.

 

Architektura jádra ADSP-21xx

Architektura jádra rodiny ASDP-21xx je optimalizovaná pro digitální zpracovávání signálů a jiné numerické aplikace náročné na rychlost zpracování. Tato rodina procesorů obsahuje kompletní architekturu jádra ADSP-2100 (tři výpočetní jednotky, generátor adresy dat a jednotku pro řízení toku programu) se dvěma seriovými porty, programovatelný čítač/časovač, který může periodicky generovat přerušení a datovou a programovou paměť RAM přímo na čipu.

 

Výpočetní jednotky

Každý procesor ADSP21xx obsahuje 3 nezávislé plně funkční výpočetní jednotky (viz obrázek): aritmetickou/logickou jednotku (ALU), násobičku s akumulátorem (MAC) a barrel shifter.

ALU provádí standartní sadu aritmetických a logických operací. MAC provádí jednocyklové násobení / násobení a sčítání / násobení a odečítání. Shifter má na starosti aritmetické a logické posuny, normalizaci a denormalizaci. Shifter implementuje kontrolu numerických formátů včetně reprezentace dat v plovoucí řádové čárce. Jednotky jsou zapojeny paralelně, aby bylo možné výsledek jedné jednotky použít v dalším cyklu v jiné jednotce. Toho je docíleno pomocí interní sběrnice pro přenos výsledků (Result Bus).

Všechny jednotky obsahují vstupní a výstupní registry, které jsou přístupné z interní datové sběrnice (Data Memory Data Bus). Operace vezme operandy ze vstupních registrů a uloží je do registrů výstupních. Registry jsou vlastně jakési mezipřistání dat na cestě z paměti do výpočetních jednotek. Tato vlastnost představuje jeden stupeň pipeliningu na  vstupu a jeden na výstupu. R-bus (Result Bus) pak umožňuje použít výsledek jedné operace okamžitě jako vstup jiné operace. Tím pádem je možné se vyhnout zbytečnému zpoždění pipelinu v případě, že jsou realizovány různé operace za sebou (nevyužívající tedy stejnou jednotku).

 

ALU

Aritmetickologická jednotka (ALU) provádí základní aritmetické a logické operace. Aritmetické operace jsou sčítání, odčítání, negace, inkrement, dekrement, absolutní hodnota. Ty jsou doplněny dvěma primitivními dělicími funkcemi, ze kterých může být zkonstruováno několikacyklové dělení. Logické funkce jsou AND, OR, XOR a NOT.

Vlastní ALU je 16-bitová. Má dvě vstupní brány X a Y a jednu bránu výstupní R. Dále je do ní zaveden přenos (Cl) ze stavového registru. ALU generuje 6 stavových signálů, které jsou programátorovi přístupné pomocí stavového registru.

Vstupní brána X může přijímat data ze dvou zdrojů - z registru AX nebo ze sběrnice R-bus. Soubor registrů AX je vyhrazen pro vstup X a sestává ze dvou registrů AX0 a AX1. Přístup k těmto registrům je pomocí sběrnice DMD. Instrukční soubor obsahuje sice instrukce pro přístup k těmto registrům pomocí sběrnice PMD, ale tento přístup je realizován přes PMD-DMD Exchange Unit. Výstup z registrového souboru AX je dvoubránový, takže můhou být současně data z jednoho registru posílána do ALU, zatímco je druhý registr posílán na DMD sběrnici.

Vstupní brána Y může také přijímat data ze dvou zdrojů - ze souboru registrů AY nebo z registru AF (ALU feedback). Registrový soubor AY se skládá stejně jako jeho x-ový protějšek ze dvou registrů. K těmto registrům je však možné přistupovat jak pomocí sběrnice DMD, tak i pomocí sběrnice PMD (pouze zápis; čtení pomocí PMD sběrnice je možné pouze za spolupráce PMD-DMD bus exchange unit, podobně jako v předchozím případě). A stejně jako v předešlém případě je i zde výstup ze souboru registrů dvoubránový. 

Výstup ALU je nahrán do ALU feedback (AF) registru a současně do registru výsledku (ALU result - AR). Registr AF je interní registr jednotky, který umožňuje použít výsledek hned v dalším kroku na vstupu Y ALU. Výstup z registru AR je možné poslat na DMD sběrnici a současně i na R-bus. Existuje instrukce pro čtení tohoto registru přes PMD sběrnici, ale stejně jako v předchozích případech se to děje pomocí DMD sběrnice, jelikož na PMD sběrnici neexistuje přímé propojení z tohoto registru.

Z kteréhokoli registru se může číst nebo do něj zapisovat ve stejném cyklu. Registry jsou čteny na začátku a je do nich zapisováno na konci cyklu. Při čtení registru dostaneme tedy hodnotu zapsanou na konci předchozího cyklu. Nová zapsaná hodnota nemůže být z registru přečtena dříve než v následujícím cyklu. Díky tomu je možné z registru přečíst na začátku cyklu data pro ALU a na konci cyklu do něj zapsat data nová. Stejně tak může být obsah registru AR uložen do paměti a uvolněn tak pro nová data, která přijdou na konci cyklu. K tomuto účelu obsahuje instrukční soubor specielní tzv. multifunkční instrukce.

ALU obsahuje duplikáty registrů (na obrázku znázorněno stínem). Přístupná je vždy pouze jedna banka. Druhá banka může být aktivována (např. přerušovací rutinou) v případě požadavku na rychlé přepnutí kontextu. Nová úloha (např. obsluha přerušení) tak může být odstartována bez ukládání předešlého stavu jednotky.

Výběr aktuální banky je prováděn pomocí stavového registru procesoru.

 

Multiplier / Accumulator (MAC)

Tato jednotka provádí funkce jako rychlé násobení, násobení s kumulativním sčítáním nebo násobení s kumulativním odečítáním. Funkce zpětné vazby (feedback) umožňuje použít výstup ze sčítačky jako jeden z činitelů při dalším násobení.

Násobička má dvě 16-bitové vstupní brány X a Y a 32-bitový výstup P. 32-bitový součin je posílán do 40-bitové sčítačky/odčítačky, která přičte/odečte součin k hodnotě ve výsledkovém registru (MR), případně data pošle přímo do tohoto registru. Registr MR je 40-bitový. Ve skutečnosti je však rozdělen na 3 menší (MR0, MR1, MR2) po 16, 16 a 8 bitech z důvodu omezené šířky sběrnic.

Sčítačka/odčítačka je více jak 32-bitová, aby bylo umožňeno pracovat s přetečením během sčítání jednotlivých položek. Příznak multiply overflow (MV) nastavuje násobička, přesáhne-li výsledek 32-bitovou hranici (počítá se ve dvojkovém doplňku).

Vstupní/výstupní registry jsou obdobné jako u ALU.

 

Barrel Shifter

Shifter provádí kompletní sadu posuvů pro 16-bitový vstup a vytváří 32-bitový výstup. To zahrnuje aritmetické a logické posuvy a normalizaci. Shifter dále provádí odvození exponentu a odvození společného exponentu pro určitý blok čísel. Tyto základní funkce mohou být kombinovány a je možné tak efektivně implementovat jakýkoli stupeň řízení numerického formátu včetně plné floating-point reprezentace.

Shifter můžeme rozdělit na několik částí (viz obrázek): posouvací pole (shifter array), logika OR/PASS, detektor exponentu a logika pro porovnávání exponentu.

Posouvací pole je barrel shifter o velikosti 16×32. Přijímá 16-bitový vstup a ten může umístit kamkoli ve 32-bitovém výstupním poli v jednom cyklu. Dostáváme tak 49 různých umístění ve 32-bitovém poli. Umístění 16 bitů je dáno řídícím kódem (C) a referenčním signálem HI/LO.

Posouvací pole společně s přidruženou logikou je obklopeno sadou registrů. Shifter input (SI) registr slouží jako vstup posouvacího pole a detektoru exponentu. Je 16-bitový a přistupuje se do něj pomocí sběrnice DMD. Jako vstupy do těchto jednotek však mohou sloužit i registry AR, MR a SR (s využitím sběrnice R-bus). Shifter result (SR) registr je 32-bitový a je rozdělen do dvou 16-bitových sekcí (SR0 a SR1). Data do SR registru mohou být zavedena ještě pomocí sběrnice DMD, čtení obsahu registru je možné pomocí sběrnice DMD R-bus. Obsah registru SR může být (díky zpětné vazbě) přiveden do bloku logiky OR/PASS a umožnit tak posuvné operace s dvojitou přesností.

Registr SE (Shifter Exponent) je 8-bitový a je v něm uložen exponent během normalizační a denormalizační fáze. Do registru je možné psát a číst z něj pomocí spodních 8 bitů sběrnice DMD.

Registr SB (Shifter Block) je důležitý při blokových operacích v plovoucí řádové čárce, kdy obsahuje hodnotu blokového exponentu, což je hodnota o kterou musí být blokové hodnoty posunuty při normalizaci. Registr je 5-bitový a obsahuje nejčastěji použitou hodnotu blokového exponentu. Přístup do registru je pomocí spodních 5 bitů sběrnice DMD.

Kterýkoli z registrů SI, SE, SR může být čten nebo do něj může být zapisováno v jednom cyklu. Čtení probíhá na začátku cyklu, zápis na konci, podobně jako u registrů ALU a MAC.

Stejně jako předchozí dvě jednotky obsahuje i shifter dvě shodné banky registrů.

Posun vstupní hodnoty je určen řídícím kódem (C) a referenčním signálem HI/LO. Řídící kód je 8-bitová hodnota se znaménkem, která indikuje počet míst a směr posunu. Kladné hodnoty znamenají posun vlevo, záporné posun vpravo. Hodnota řídícího kódu se může získat jako jedna ze tří možností: obsah registru SE, negovaný obsah registru SE a přímá hodnota přímo z instrukce.

Signál HI/LO určuje referenční bod pro posun. Při stavu HI jsou všechny posuny vztahovány k registru SR1, ve stavu LO k registru SR0. Tato vlastnost je užitečná při posuvech 32-bitových hodnot a umožňuje, aby byly obě poloviny posunuty se stejným řídícím kódem.

Shifter naplní všechny bity ve výstupním poli napravo od posunuté hodonty nulami, bity nalevo jsou nastaveny dle rozšiřujícího bitu. Ten může být určen nejvyšším bitem vstupu, příznakem AC aritmetického příznakového registru nebo může být nula.

Pomocí logiky OR/PASS je možné výstup z posouvacího pole logicky sečíst s hodnotou v registru SR nebo hodnotu uložit do registru SR beze změny.

Detektor exponentu odvozuje exponent jako vstupní hodnotu shifteru. Detektor pracuje v jednom ze třech stavů, které určují, jak bude exponent interpretován. Ve stavu HI je vstup interpretován jako číslo v jednoduché přesnosti nebo jako horní polovina čísla ve dvojité přesnosti. Detektor zjistí počet úvodních znaménkových bitů a generuje kód, který určuje, jak má být hodnota posunuta, aby se eliminovaly všechny znaménkové bity až na jeden. Kód je negativní, takže se může stát efektivním exponentem mantisy vytvořené odjmutím přebytečných znaménkových bitů.

Ve stavu HI-extend (HIX) je vstup interpretován jako výsledek sčítání nebo odečítání v ALU, při kterém mohlo vzniknou přetečení. Proto bere detektor exponentu hodnotu přetečení (bit AV) v úvahu. Je-li bit AV nastaven, je výstup o jedničku větší, čímž se indikuje další bit potřebný v normalizované mantise (carry bit ALU). Není-li bit AV nastaven, funguje tento stav stejně jako stav HI. Při odvozován exponentu ve stavech HI a HIX generuje detektor bit SS (shifter sign), který je součástí aritmetického stavového registru. Jeho hodnota je stejná jako hodnota nejvýznamějšího bitu (MSB) vstupu shifteru s vyjímkou případu, že je bit AV nastaven; je-li AV bit nastaven, MSB je invertován, aby se správně nastavilo znaménko přetečené hodnoty.

Ve stavu LO je vstup interpretován jako dolní polovina čísla s dvojitou přesností. V tomto stavu interpretuje detektor bit SS stavového registru jako znaménko čísla. Registr SE je naplněn hodnotou z detektoru pouze v případě, že obsahuje hodnotu -15. To se stane pouze v případě, že horní polovina obsahuje samé znaménkové bity. Výstup z detektoru je v tomto případě posunut o -16, jelikož na vstupu je dolní polovina čísla.

Logika pro porovnání exponentů se používá k nalezení hodnoty největšího exponentu v poli vstupů shifteru. Ve spolupráci s detektorem exponentu je tak nalezen blokový exponent. Komparátor porovná výstup z detektoru s hodnotou v registru SB a změní jeho obsah pouze v případě, že hodnota z detektoru je větší než hodnota uložená v registru SB.

 

Data Address Generators & Program Sequencer

Dva generátory datových adres (DAG) a program sequencer zajišťují efektivní využívání výpočetních jednotek. DAG zajišťují adresaci paměti v případech kdy jsou data přesouvána do vstupních registrů nebo z výstupních registrů. Každý DAG může uchovávat až 4 ukazatele. Je-li ukazatel použit pro nepřímé adresování je post modifikován hodnotou ve specifikovaném registru. Se dvěma nezávislými jednotkami DAG může procesor generovat současně dvě adresy a načíst tak současně dva operandy během jednoho cyklu.

S každým ukazatelem může být spojeno číslo udávající velikost a automaticky se tak implementuje adresování modulo n používané při realizaci kruhových bufferů (tato vlastnost je také používána seriovými porty pro realizaci automatických datových přenosů).

DAG1 může adresovat pouze paměť dat, zatímco DAG2 může adresovat paměti obě (tedy i paměť programu). Je-li nastaven odpovídající režim, je adresa před umístěním na adresovou sběrnici bitově reversována. Tato vlastnost odpovídá adresování v algoritmu pro Fast Fourier Transformation.

Program sequencer dodává adresy instrukcí v paměti programu. Sequencer je řízen registrem instrukce (instruction register), který uchovává právě prováděnou instrukci. Registr instrukce představuje jednu úroveň pipeliningu v programovém toku. Instrukce jsou přečteny z paměti a uloženy do instr. registru během jediného cyklu. Během následujícího cyklu jsou pak prováděny, zatímco je čtena další instrukce. Sequencer dále podporuje provádění podmíněných skoků, skoků do podprogramu a návratu z podprogramu během jediného cyklu. Stejně tak jsou efektivně zpracovávány i programové cykly.

 

Program Sequencer

Program sequencer řídí běh programu. Obsahuje řadič přerušení a stavovou a podmínkovou logiku.

Program sequencer generuje proud adres a zajišťuje flexibilní řízení běhu programu. Umožňuje sekvenční provádění instrukcí, provádění cyklů bez zbytečného zpoždění, propracovanou obsluhu přerušení a jednocyklové větvení se skoky a voláními (podmíněnými i nepodmíněnými).

Blokové schema jednotky vidíme na obrázku:

 

Next Address Select

Zatímco procesor provádí instrukci, program sequencer připravuje další instrukci. Logika pro výběr další adresy generuje adresu další instrukce z jednoho ze čtyř zdrojů:

Obvod pro výběr adresy se rozhodne na základě vstupů z instrukčního registru, loop komparátoru, podmínkové logiky a řadiče přerušení. Vybraná adresa je pak poslána na sběrnici PMA.

PC incrementer je vybrán v případě, že se jedná o sekvenční provádění instrukcí. Je vybrán i v případě, že se neskáče při podmíněném skoku a v případě, že končí smyčka DO UNTIL. Adresa je pak poslaná na sběrnici PMA a současně nahrána zpět do Program Counteru.

PC stack je použit v případě návratu z podprogramu nebo přerušovací rutiny. Hodnota v zásobníku se používá také v případě skoku na počátek smyčky DO UNTIL.

Registr instrukce poskytuje následující adresu v případě přímého skoku. 14-bitová cílová adresa je obsažena v instrukčním slově.

Řadič přerušení poskytuje adresu při obsluze přerušení. Rozezná-li procesor platné přerušení, provede se skok na adresu příslušející požadavku na přerušení.

V neposlední řadě může být zdrojem adresy DAG2, například v případě skoku s nepřímou adresou. Obsah Program Counteru je potom načten ze sběrnice PMA, kam adresu umístí DAG2.

 

Program Counter & PC stack

Program counter (PC) je 14-bitový registr, který obsahuje adresu právě prováděné instrukce. Výstup PC je veden do inkrementeru, který zvyšuje aktuální hodnotu čítače o 1 a může být vybrán adresovým multiplexorem jako zdroj adresy další instrukce.

S program counterem je spojen 14-bitový PC stack, který má kapacitu 16 slov. Hodnota PC je uložena vždy při vykonání instrukce CALL. PC je dále uložen v případě smyčky DO UNTIL a v případě obsluhy přerušení. Při přerušení je incrementer nefunkční a dojde díky tomu k uložení původní (neinkrementované) hodnoty PC. Díky tomu může být po ukončení obsluhy přerušení znovu přečtena instrukce, která byla přerušena a stornována. Mimo tyto automatické případy může být PC stack vybrán manuálně pomocí instrukce POP.

Vybraná adresa je z adresového multiplexoru vedena zpět do PC. V případě, že zdrojem adresy je DAG2, načte se nová hodnota PC ze sběrnice PMA.

 

Counter & Counter Stack

Counter a Counter Stack zajišťují silný mechanismus pro zpracování programových cyklů. Counter je 14-bitový registr s postdekrementací, který řídí tok programových cyklů, u nichž je znám počet opakování.

Před vstupem do smyčky je Counter inicializován počtem opakování cyklu ze spodních 14 bitů sběrnice DMD. Čítač je nastaven na skutečnou hodnotu N (počet průchodů smyčkou) a ne na hodnotu N-1, jak by se dalo očekávat. Děje se tak z důvodu funkce logiky kontrolující signál CE (Counter Expired), která testuje CE (a automaticky dektementuje Counter) na konci smyčky DO UNTIL, která používá CE jako svou ukončující podmínku. CE je testován na začátku procesorového cyklu a dektrementován na jeho konci. Proto je signál CE nastaven ve chvíli, kdy čítač dosáhne hodnoty 1 a smyčka díky tomu proběhne N-krát.

Counter může být také testován a automaticky dekrementován podmíněným skokem, který testuje CE. Counter není dekrementován v případě, že se CE testuje jako součást podmíněného návratu nebo podmíněné aritmetické operace.

Counter může být kdykoli přímo přečten pomocí sběrnice DMD bez vlivu na jeho obsah. Při čtení jsou horní 2 bity sběrnice DMD nastaveny na nulu.

Count Stack je 14-bitový s kapacitou 4 slova a dovoluje tak obsluhovat vložené smyčky uložením nepoužívaného stavu. Jakmile je do čítače nahrána nová hodnota stará hodnota je automaticky uložena do zásobníku. Stav Counteru je vybrán ze zásobníku v případě, že test signálu CE dopadne kladně, aby mohla pokračovat vnější smyčka (je-li nějaká). Count Stack je také možné vybrat manuálně (např. v případě předčasného ukončení smyčky).

Ve dvou případech však nedochází k automatickému uložení obsahu Counteru do zásobníku. Uložení nové hodnoty do Counteru ze sběrnice DMD nezpůsobí uložení v případě, že obsah Counteru není platný (nebeží žádná smyčka). Tím by totiž došlo ke zbytečnému plýtvání místem na ukládání neplatných a tedy nepotřebných hodnot. Neplatná hodnota je v Counteru po systémovém RESETu a po testování signálu CE v případě, že je zásobník prázdný (to je indikováno příslušným bitem ve stavovém registru).

Další možností jak změnit obsah Counteru bez uložení do zásobníku je pomocí speciální instrukce OWRCNTR (overwrite counter).

 

Loop Comprator & Loop Stack

Jedná se o další zařízení pro zkvalitnění a hlavně zrychlení obsluhy smyček.

Každý procesorový cykl porovnává Loop Comparator další adresu generovanou program sequencerem s adresou poslední instrukce ve smyčce. Adresa první instrukce smyčky je udržována v PC Stacku. Je-li prováděna poslení instrukce smyčky, procesor podmíněně skáče na její začátek a eliminuje tak zpoždění při větvení způsobené smyčkou.

Loop Stack uchovává adresy posledních instrukcí ve smyčkách a jejich ukončující podmínky. Mohou zde být uloženy až čtyři úrovně.

Jakmile je prováděna konstrukce DO UNTIL, je 14-bitová adresa poslední instrukce a 4-bitová ukončující podmínka uložena do Loop Stacku. Současně je výstup z PC incrementeru uložen do PC Stacku. PC Stack tedy obsahuje adresu první instrukce ve smyčce, zatímco Loop Stack obsahuje adresu instrukce poslední a ukončující podmínku smyčky. Je-li Loop Stack alespoň částečně naplněn (není prázdný), je aktivován Loop Comparator, který porovnává adresu na vrcholu zásobníku s adresou následující instrukce. V případě, že jsou adresy stejné, uvědomí Comparator jednotku pro výběr další adresy (Next Address Selector), že se bude vykonávat poslední instrukce ve smyčce.

V tomto okamžiku může nastat několik případů v závislosti na typu poslední instrukce v cyklu. My zde probereme nejčastější případ (další možnosti je možné nalézt v uživatelském manuálu procesorů ADSP21xx). Logika pro výběr adresy vybere následující adresu podle toho, jak se vyhodnotí podmínka na konci cyklu. Je-li podmínka nepravdivá, jako následující adresa se použije hodnota uložená na vrcholu PC Stacku. Jedná se vlastně o skok na počátek smyčky. Je-li podmínka pravdivá, použije se samotný PC a program tak vyběhne ven ze smyčky. Dříve uložené hodnoty v zásobnících jsou vybrány, aby se uvolnilo místo, prože jsou nepotřebné.

 

Datová výměna

Za řízení toku dat jsou zodpovědné generátory datových adres (DAG) a jednotka pro výměnu dat mezi sběrnicemi (PMD-DMD bus exchange unit).

 

Data Adress Generators

Každý procesor v rodině ADSP2100 obsahuje dva tyto generátory (DAG - Data Address Generator), takže může být současně přistupováno jak do paměti programu, tak do paměti dat. DAGy zajišťují nepřímé adresování. Přestože jsou DAGy dva, navzájem se liší. DAG1 může adresovat pouze paměť dat, ale umožňuje používat tzv. bit-reversed adresování. DAG2 může adresovat obě paměti, ale bez bit-reversed adresování.

Blokové schema generátoru vidíme na následujícím obrázku:

Registry

DAG obsahuje 3 soubory registrů: Index registry (I), modifikovací registry (M) a délkové registry (L). Každý soubor obsahuje 4 14-bitové registry.

Registry I obsahují adresu, která bude přímo použita k adresování paměti. U procesorů ADSP se používá k úpravě hodnoty registru postmodifikace. K registru I je připčtena hodnota některého z M registrů. Ke kterékolimu registru I lze přičíst obsah kteréhokoli registru M, ale pouze v rámci jednoho DAG (nelze tedy registry DAG1 modifikovat registry z DAG2). Hodnoty v M registrech jsou čísla se znaménkem, tudíž je možné adresu zvyšovat nebo snižovat.

Každému z registrů I je přiřazen jeden registr L, který umožňuje realizovat tzv. kruhové buffery (adresování modulo n). Chceme-li použít normální (lineární) adresování, nastavíme obsah registru L (tedy délku kruhového bufferu) na hodnotu 0. Ve spolupráci s logikou pro realizaci adresování modulo n (modulus logic) je pak nová adresa správně přepočítána.

Hodnoty v registrech I a L jsou bez znaménka.

 

Sběrnice

Procesory mají celkem pět vnitřních sběrnic. Program memory address bus (PMA Bus) a data memory address bus (DMA Bus) se používají pro distribuci adresy do paměti programu a dat. Program memory data bus (PMD Bus) a data memory data bus (DMD Bus) se používají pro transport dat do příslušných pamětí. Sběrnice jsou multiplexovány a ven z procesoru je vyvedena pouze jedna adresová a jedna datová sběrnice. Přístup k různým adresovým prostorům se v tomto případě specifikuje pomocí vnějších řídících signálů. R-bus slouží k okamžitému transportu výsledků mezi jednotlivými výpočetními jednotkami.

PMA sběrnice je 14 bitů široká a umožňuje tak adresovat 16K slov v paměti programu, kde jsou promíchané instrukce a data. Sběrnice PMD je široká 24 bitů a svou šířkou odpovídá šířce instrukčního slova.

Sběrnice DMA je široká 14 bitů a stejně jako PMA Bus umožňuje adresovat 16K slov v paměti dat. Sběrnice DMD je široká 16 bitů. Pomocí DMD sběrnice mohou být data s kteréhokoli registru přesunuta do jiného registru nebo na kreoukili pozici v paměti během jediného cyklu. Adresu datové paměti je možné získat ze dvou zdrojů: jako absolutní hodnotu specifikovanou v instrukci (přímé adresování) nebo jako výstup generátoru adres (nepřímé adresování). Při čtení dat z paměti programu je použitelné pouze nepřímé adresování.

Sběrnice PMD může být navíc použita k přesunu dat z a do výpočetních jednotek buď přímo nebo ve spolupráci s DMD Busem pomocí PMD-DMD Bus Exchange unit. Tato jednotka zajišťuje přesun dat z jedné sběrnice na druhou a naopak. Obshuje hardware, který se vypořádá s různou šířkou obou sběrnic je-li to třeba.

 

PMD-DMD Bus Exchange

PMD-DMD Bus Exchange Unit spojuje mezi sebou sběrnice PMD a DMD a umožňuje výměnu dat v obou směrech. Jelikož je sběrnice PMD 24-bitová a sběrnice DMD 16-bitová, je možné přímo propojit pouze horních 16 bitů. (viz obrázek). Výměnu zbylých 8 bitů zajišťuje speciální registr PX. Tento registr je možné číst a zipisovat do něj v případě, že je nutné použít 24 bitů.

První typ spojení je jednosměrná cesta z jedné sběrnice na druhou. Ten je zajištěn dvěma třístavovými buffery propojujících sběrnici DMD s horními 16-ti bity sběrnice PMD. Jeden z těchto bufferů je použit při výměně dat uložených v paměti programu a registrem připojeným ke sběrnici DMD. Tato cesta se používá při zápisu dat do paměti programu.

Druhé spojení přes registr PX. Registr je 8-bitový a může být naplněn ze spodních 8 bitů obou sběrnic. Stejně tak může být i čten.

K registru PX lze přistupovat takto:

Ze sběrnice PMD je registr PX:

  1. Naplněn automaticky kdykoli jsou data (ne instrukce) čtena z paměti programu do některého registru, například

AX0=PM(I4,M4)

Pozn: instrukce programu se u těchto procesorů zapisují poněkud nezvykle (v porovnání s procesory jinými). Firma Analog devices tvrdí, že tento způsob zpřehledňuje programy a já si myslím, že na tom něco bude. Jestli to programy skutečně zpřehledňuje musí však posoudit sám programátor (já jsem to nikdy neprogramoval). Některé algorimy zapsané přímo v assembleru jsou k dispozici v uživatelském manuálu k těmto procesorům, které najdete na WWW stránce Analog Devices.

V tomto příkladu je horních 16 bitů 24-bitového slova zapsáno do registru AX0, dolních 8 bitů je automaticky uloženo v registru PX.

  1. Automaticky čten jako dolních 8 bitů sběrnice PMD při zápisu dat do paměti programu, například

PM(I4,M4)= AX0

V tomto případě je 16 bitů registru AX uloženo jako horních 16 bitů 24-bitového paměťového slova. 8 bitů registru PX je automaticky uloženo na spodních 8 bitů paměťového slova.

Ze sběrnice DMD může být PX registr:

  1. Naplněn pomocí instrukce move, která explicitně specifikuje registr PX jako cíl. Je použito spodních 8 bitů dat, horních 8 bitů je zahozeno.

PX=AX0

  1. Přečten pomocí instrukce move, která explicitně specifikuje registr PX jako zdroj. Horních 8 bitů přečtených z registru je nulových.

AX0=PX

Kdykoli je obsah nějakého registru zapisován do paměti programu, je tato hodnota umístěna na horních 16 bitů slova. Spodních 8 bitů je automaticky vyplněno obsahem registru PX. Je-li těchto spodních 8 bitů důležitých, je možné před zápisem dat do paměti programu registr PX naplnit.

 

Přehled procesorů rodiny ADSP-21xx

Předností všech procesorů této řady je, že si všechny nové typy zachovávají kompatibilitu kódu. Procesory této rodiny se liší zejména ve velikosti integrované paměti, napájecím napětím, rychlostí a rozsahem provozních teplot. Všechny procesory řady ADSP-21xx používají shodnou architekturu a jazyk asembleru.

Procesory rodiny ADSP-218x nabízejí přímo na čipu 8k až 104k slov paměti, přičemž taktovací frekvence je až 80 MHz. Procesory ADSP-218xN jsou nízkopříkonové a pracují s napájecím napětím 1,8V. Tato řada je určena zejména do přenosných zařízení s bateriovým napájením. Novější řada ADSP-219x pracuje dokonce až na kmitočtu 160MHz, to přináší dvojnásobný výkon oproti původním modelům. ADSP-2195 a ADSP-2196 mají dokonce shodné rozložení pinů s procesorem ADSP-2191. Rodiny ADSP-219x a ADSP 2199x si zachovávají kódovou kompatibilitu s původní řadou ADSP-218x ovšem mají vylepšenou architekturu. Zvýšení výkonu se dosahuje také efektivnějším kompilátorem jazyku C. ADSP-219x podporují také komunikační standard JTAG, mají 24bitové adresování a instrukční cache. Řada ADSP-2199x se vyvíjí souběžně s řadou ADSP-219x, liší od ní tím, že je určena pro zpracování jak digitálních, tak analogových signálů. Tyto obvody mají totiž zabudovaný 8-kanálový, 14-bitový A/D převodník.

 

Přehled modelů řady ADSP-218x

Přehled modelů řady ADSP-219x

Modely ADSP-2199x

 


Tato práce vznikla jako semestrální práce pro předmět 31SCS (Speciální číslicové systémy).


Literatura:
[1]: http://www.analog.com/processors/processors/ADSP/
[2]: http://www.volny.cz/k.pohl/skola/adsp/adsp21xx.htm