Hlavní navigace

Instrukční sada digitálních signálových procesorů řady TMS320

Pavel Tišnovský

Ve druhé části článku si podrobněji popíšeme instrukční sadu DSP TMS32010. Tato zajímavě navržená instrukční sada tvoří základ pro instrukční sady dalších DSP vyráběných společností Texas Instruments.

Obsah

1. Instrukční sada digitálních signálových procesorů řady TMS320

2. Formát instrukčních slov

3. Použití registru DP při adresování operandů

4. Použití registrů AR0 a AR1 při adresování operandů

5. Aritmetické a logické operace

6. Instrukce pro manipulaci s akumulátorem

7. Násobička a instrukce pro práci s registry TP

8. Skokové instrukce

9. Instrukce typu load & store, práce s registry použitými při adresování

10. Operace se stavovým a řídicím registrem

11. Ostatní instrukce

12. Odkazy na Internetu

1. Instrukční sada digitálních signálových procesorů řady TMS320

V první části článku o digitálních signálových procesorech řady TMS320 jsme si popsali vnitřní uspořádání čipů TMS32010, které tvoří základ dalších generací DSP vyráběných společností Texas Instruments. Dnes se seznámíme s instrukční sadou těchto DSP. V porovnání se všemi doposud popsanými mikroprocesory a mikrořadiči je instrukční sada TMS32010 v mnoha ohledech odlišná, což však nemusí být příliš překvapivé, zvláště když si uvědomíme, k čemu byly tyto čipy určeny – k rychlému provádění operací typu konvoluce či korelace s celočíselnými hodnotami popř. hodnotami uloženými ve formátu s pevnou řádovou čárkou. Nejdůležitější tedy byla implementace rychlého násobení, 32bitového akumulátoru, adresování prvků uložených v polích atd. Méně podstatné operace, které například vyžadují složité adresování, nebyly prioritou a proto je v instrukční sadě nenalezneme.

S určitou nadsázkou je možné říct, že úkolem celého TMS32010 byl pouze sběr dat a jejich posílání do násobičky, protože právě násobička na tomto DSP zabrala největší plochu čipu. Na druhou stranu právě tato v době vzniku neobyčejná architektura umožnila velký rozmach digitálního zpracování signálu, a to v mnoha oblastech (včetně zvukové syntézy atd.)

2. Formát instrukčních slov

Většina instrukcí, které jsou na DSP řady TMS32010 implementovány, má jednotnou šířku šestnáct bitů, což znamená, že je možné je načíst v jediném cyklu. Šířka sběrnice interní paměti ROM/EPROM je totiž taktéž šestnáct bitů, a i šířka externí datové sběrnice je shodná. Jedinou výjimkou jsou skoky, které jsou uloženy ve dvou po sobě jdoucích slovech (16+16 bitů), přičemž ve druhém slovu je uložen dvanáctibitový cíl skoku (nejvyšší čtyři bity jsou nulové). Podívejme se, jaké jsou formáty instrukcí a jak je rozděleno instrukční slovo do jednotlivých bitových polí.

U několika instrukcí je možné do vybraného registru načíst osmibitovou konstantu. Jedná se o instrukce LACK a LARK, jejichž instrukční slovo vypadá následovně

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |     osmibitová konstanta      |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

O významu operace násobení v oblasti DSP snad nejvíce vypovídá existence instrukce MPYK, která jako jediná umožňuje specifikovat konstantu o šířce třinácti bitů:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |            třináctibitová konstanta               |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Relativně velké množství instrukcí obsahuje adresu druhého operandu uloženou ve spodních sedmi bitech. Tato adresa je zkombinována s registrem DP:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   | 0 |           adresa          |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Ty stejné instrukce, které dokážou využít sedmibitovou adresu operandu, mohou alternativně použít adresování s využitím registrů AR0 či AR1. Podrobnosti jsme si již řekli v předchozích kapitolách:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   | 1 | 0 |INC|DEC|NAR| 0   0 |ARP|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Další formát je použit u instrukcí LAC, ADD a SUB, protože tyto instrukce dokážou načíst operand a před jeho přivedením do ALU ho ještě posunout v prvním shifteru. Z tohoto důvodu bylo nutné do instrukčního slova vložit hodnotu posunu:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |     shift     | I |           adresa          |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Jediná instrukce SASH používá druhý shifter a její formát vypadá následovně:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   shift   | I |        adresa         |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Poslední formát využívají skoky, u nichž je adresa skoku uložena ve spodních dvanácti bitech druhého slova (povšimněte si, že u modernějších čipů lze bez problémů využít čtyři horní nuly pro rozšíření adresy):

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | adresa cíle nepodmíněného či podmíněného skoku|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

3. Použití registru DP při adresování operandů

Většina operací používá jako svůj první operand akumulátor, zatímco druhý operand je načítán z datové paměti o kapacitě 144 nebo 256 slov. V instrukčním slovu je pro adresu operandu vyhrazeno pouze sedm bitů, takže kód instrukce vypadá následovně:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   | 0 |           adresa          |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Pro adresaci operandů v paměti dat je zapotřebí osm bitů. Z tohoto důvodu se adresa rozděluje na 1+7 bitů, přičemž první (nejvyšší) bit je uložen v registru DP (data page). U původních čipů obsahovala nultá stránka 128 slov a první stránka jen 16 slov (144–128), u čipů s větší RAM měly obě stránky shodně 128 slov:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   | 0 |       adresa 0..127       |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                                  :   :   :   :   :   :   :   :
                               +-----+:   :   :   :   :   :   :
                               |  DP |:   :   :   :   :   :   :
                               +-----+:   :   :   :   :   :   :
                                  :   :   :   :   :   :   :   :
                                  v   v   v   v   v   v   v   v
                                +---+---+---+---+---+---+---+---+
                                |         adresa 0..255         |
                                +---+---+---+---+---+---+---+---+

Obsah registru DP se nastavuje instrukcí LDP (z paměti je načten operand a použije se jen jeho nejnižší bit) nebo LDPK (jednobitová konstanta je přímo součástí instrukce).

4. Použití registrů AR0 a AR1 při adresování operandů

Již minule jsme si řekli, že DSP TMS32010 obsahují dva adresové registry nazvané AR0 a AR1, přičemž vždy jeden z těchto registrů je aktivní (jeho index je uložen v jednobitovém registru ARP). Tyto adresové registry mají hned několik využití, protože je lze použít jak pro klasické adresování operandů uložených v RAM (kapacita 144 nebo 256 slov), tak i pro průchody polem (zde se využije možnost autoinkrementace a autodekrementace), popř. pro realizaci počítaných programových smyček realizovaných instrukcí BANZ. Podívejme se na některé možnosti poskytované assemblerem při volání instrukce ADD (* značí nepřímé adresování):

ADD *         ; načtení z adresy, na níž ukazuje vybraný AR0/1
 
ADD *, 4      ; načtení z adresy, na níž ukazuje vybraný AR0/1
              ; posun načítané hodnoty o 4 bity doleva
 
ADD *+, 4     ; načtení z adresy, na níž ukazuje vybraný AR0/1
              ; posun načítané hodnoty o 4 bity doleva
              ; autoinkrementace vybraného registru AR0/1
 
ADD *-, 4     ; načtení z adresy, na níž ukazuje vybraný AR0/1
              ; posun načítané hodnoty o 4 bity doleva
              ; autodekrementace vybraného registru AR0/1
 
ADD *-, 4, 0  ; načtení z adresy, na níž ukazuje vybraný AR0/1
              ; posun načítané hodnoty o 4 bity doleva
              ; autodekrementace vybraného registru AR0/1
              ; do ARP je uložena nula (aktivní se tedy stane AR0)
 
ADD *-, 4, 1  ; načtení z adresy, na níž ukazuje vybraný AR0/1
              ; posun načítané hodnoty o 4 bity doleva
              ; autodekrementace vybraného registru AR0/1
              ; do ARP je uložena jednička (aktivní se tedy stane AR1)

Podobný způsob adresování (většinou bez bitových posunů) podporují i mnohé další instrukce, takže sice na první pohled malý instrukční soubor s pouhými šedesáti instrukcemi je ve skutečnosti poměrně všestranný (i když ne tak univerzální jako instrukční sady s dvouadresovým či tříadresovým kódem).

V instrukčním slovu se při použití adresních registrů v sedmém bitu nachází 1 a bity 5, 4, 3 a 0 mají speciální význam:

  15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   |   | 1 | 0 |INC|DEC|NAR| 0   0 |ARP|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Bit Význam
INC pokud je 1, vybraný AR se inkrementuje po provedení operace
DEC pokud je 1, vybraný AR se dekrementuje po provedení operace
NAR povolení či zákaz změny registru ARP podle bitu 0
ARP změna ARP na 0 (výběr AR0) či 1 (výběr AR1), lze maskovat bitem NAR

Poznámka: specifikace popisuje chování bitů INC a DEC pro kombinace bitové 00 (vybraný AR se nezmění), 10 (inkrementace) a 01 (dekrementace). Teoreticky by kombinace 11 měla být stejná jako 00, assemblery však tuto kombinaci nevygenerují.

5. Aritmetické a logické operace

V této kapitole jsou zmíněny všechny aritmetické a logické operace prováděné v aritmeticko-logické jednotce (nikoli tedy v samostatně pracující násobičce). Všechny dále zmíněné instrukce jako jeden svůj zdrojový operand vždy načítají akumulátor, druhým operandem je šestnáctibitová hodnota načtená z paměti dat (RAM). Tato hodnota je buď posunuta a následně využita jako 32bitová hodnota (první shifter), popř. je použita a načtena přímo nebo je znaménkově rozšířena na 32 bitů. Výsledek je ve všech případech uložen zpět do akumulátoru, který je umístěn na výstupu z aritmeticko-logické jednotky:

# Instrukce Délka Počet cyklů Operandy Význam
1 ABS 1 1 × výpočet absolutní hodnoty s uložením zpět do akumulátoru
           
2 ADD 1 1 shift, adresa přičtení posunuté hodnoty k akumulátoru
3 ADDH 1 1 adresa přičtení hodnoty k horním 16 bitům akumulátoru
4 ADDS 1 1 adresa přičtení hodnoty k akumulátoru (operand není znaménkově rozšířen)
           
5 SUB 1 1 shift, adresa odečtení posunuté hodnoty od akumulátoru
6 SUBC 1 1 adresa posun popř. i rozdíl (použito jako jeden krok při dělení)
7 SUBH 1 1 adresa odečtení hodnoty od horních 16 bitů akumulátoru
8 SUBS 1 1 adresa odečtení hodnoty od akumulátoru (operand není znaménkově rozšířen)
           
9 AND 1 1 adresa logický součin bit po bitu (použije se jen na 16 bitů)
10 OR 1 1 adresa logický součet bit po bitu (použije se jen na 16 bitů)
11 XOR 1 1 adresa logická nonekvivalence bit po bitu (použije se jen na 16 bitů)

Nejsložitější je instrukce SUBC, protože ta je navržena takovým způsobem, aby mohla být použita pro celočíselné dělení dvou čísel bez znaménka. Na začátku je nutné do spodní poloviny akumulátoru uložit dělenec, na zadané adrese je uložen dělitel a po provedení šestnácti instrukcí SUBC bude v horních šestnácti bitech akumulátoru uložen zbytek po dělení a ve spodních šestnácti bitech pak podíl. Celý podprogram pro dělení dvou šestnáctibitových čísel může být implementován takto:

        LARP AR0       ; další operace budou používat adresový registr AR0
        LARK AR0, 15   ; načtení konstanty 15 (počitadla iterací)
OPAK    SUBC dělitel   ; jedna iterace celočíselného dělení
        BANZ OPAK      ; opakování smyčky

6. Instrukce pro manipulaci s akumulátorem

Poměrně rozsáhlá skupina instrukcí pracuje s akumulátorem připojeným na vstup i na výstup ALU. Vybrané instrukce navíc používají již popsané shiftery, z nichž jeden je umístěný na vstupu ALU, druhý naopak na jeho výstupu:

# Instrukce Délka Počet cyklů Operandy Význam
1 LAC 1 1 shift, adresa načtení operandu, jeho posun v prvním shifteru a uložení do akumulátoru
2 LACK 1 1 konstanta do akumulátoru je načtena osmibitová konstanta (ta je znaménkově rozšířena)
           
3 SACH 1 1 shift, adresa horní polovina akumulátoru je posunuta ve druhém shifteru a uložena na zadanou adresu
4 SACL 1 1 adresa spodní polovina akumulátoru (16 bitů) je uložena na zadanou adresu
           
5 ZAC 1 1 × vynulování celého akumulátoru
6 ZALH 1 1 × vynulování akumulátoru a načtení hodnoty do jeho horní poloviny (16 bitů)
7 ZALS 1 1 × vynulování akumulátoru a načtení hodnoty do jeho spodní poloviny (16 bitů)

Povšimněte si, jakým způsobem se museli tvůrci procesorů TMS32010 vyrovnat s faktem, že akumulátor je 32bitový, zatímco datová paměť (144 nebo 256 slov) obsahuje šestnáctibitové operandy a tudíž i datová sběrnice je šestnáctibitová.

7. Násobička a instrukce pro práci s registry TP

Minule jsme si řekli, že TMS32010 obsahuje výkonnou násobičku, která dokáže vynásobit dva šestnáctibitové operandy s 32bitovým výsledkem, který je dále zpracován v ALU. Před násobičkou je umístěn registr T (temporary) s šířkou šestnácti bitů, do kterého se ukládá jeden z činitelů instrukcemi LT, LTA a LTD. Druhý činitel je načten buď z datové paměti (16 bitů, instrukce MPY), nebo je možné použít konstantu o šířce třinácti bitů, která je uložena přímo v kódu instrukce (MPYK). Součin se ukládá do registru P (product) a pomocí instrukcí PAC, APAC a SPAC se buď může výsledek uložit do akumulátoru nebo se může provést operace acc+P či acc-P.

# Instrukce Délka Počet cyklů Operandy Význam
1 LT 1 1 adresa načtení registru T z paměti
2 LTA 1 1 adresa kombinace instrukcí LT+APAC (načtení + součet)
3 LTD 1 1 adresa kombinace instrukcí LT+APAC+DMOV
           
4 PAC 1 1 × uložení obsahu registru P do akumulátoru
5 APAC 1 1 × přičtení obsahu registru P k akumulátoru
6 SPAC 1 1 × odečtení obsahu registru P od akumulátoru
           
7 MPY 1 1 adresa provedení operace P=T×(adresa)
8 MPYK 1 1 konstanta provedení operace P=T konstanta

Obrázek 1: Násobička v blokovém schématu TSM32010.

Poznámka: povšimněte si, že samotné násobení lze provést v jediném taktu a že ho lze snadno použít v operacích typu „multiply accumulate“ (korelace, konvoluce atd.).

8. Skokové instrukce

Na DSP samozřejmě nalezneme instrukci nepodmíněného skoku a taktéž několik skoků s podmínkou. Povšimněte si, že šest podmíněných skoků pouze porovnává hodnotu akumulátoru s nulou, není tedy nutné používat klasické příznakové bity. Jedinou instrukcí pracující s příznakovým bitem, je podmíněný skok BV. Skok BIOZ slouží pro testování pinu BIO (je negovaný), nejsložitější je pak instrukce BANZ, která testuje nulovost vybraného adresního registru a provede skok ve chvíli, kdy je registr nenulový (tento registr je navíc vždy dekrementován, což je ideální pro různé typy programových smyček):

# Instrukce Délka Počet cyklů Operandy Význam
1 B 2 2 adresa nepodmíněný skok
2 BANZ 2 2 adresa skok za podmínky AR0!=0 nebo AR1!=0 + dekrementace obsahu registru
           
3 BGEZ 2 2 adresa skok za podmínky add ≥ 0
4 BGZ 2 2 adresa skok za podmínky add > 0
5 BLEZ 2 2 adresa skok za podmínky add ≤ 0
6 BLZ 2 2 adresa skok za podmínky add < 0
7 BZ 2 2 adresa skok za podmínky add = 0
8 BNZ 2 2 adresa skok za podmínky add ≠ 0
           
9 BV 2 2 adresa skok pokud došlo v předešlé operaci k přetečení
10 BIOZ 2 2 adresa test vstupního pinu BIO a skok za podmínky, že je nulový

TMS32010 obsahuje i základní podporu pro volání podprogramů (ovšem jen do čtyř úrovní). Zajímavá je především instrukce CALA, která využívá adresu uloženou v akumulátoru. Takto lze realizovat například některé konstrukce typu switch-case, „počítané goto“ atd.:

# Instrukce Délka Počet cyklů Operandy Význam
1 CALA 1 2 × skok na adresu subrutiny uloženou v akumulátoru
2 CALL 2 2 adresa skok na adresu subrutiny uloženou v dalším slovu
3 RET 1 2 × návrat ze subrutiny

Poznámka: povšimněte si, že všechny skokové instrukce (které musí manipulovat s obsahem registru PC) trvají dva cykly, nehledě na jejich skutečnou délku.

9. Instrukce typu load & store, práce s registry použitými při adresování

S registry DP, ARP, AR0 a AR1 jsme se již seznámili ve třetí a ve čtvrté kapitole. V následující tabulce jsou uvedeny instrukce, které dokážou tyto registry načíst či uložit. Zmíněna je i instrukce MAR, která se chová podobně jako ADD (čtvrtá kapitola), ovšem jejím výsledkem je pouze inkrementace/dekrementace jednoho z registrů AR0 či AR1, popř. i změna obsahu registru ARP. Pokud je u této instrukce použita přímá adresa, chová se tato instrukce jako NOP:

# Instrukce Délka Počet cyklů Operandy Význam
1 LAR 1 1 registr,adresa načtení registru AR0/AR1
2 LARK 1 1 registr,konstanta načtení registru AR0/AR1
3 LARP 1 1 registr změna obsahu ARP (0 nebo 1)
           
4 LDP 1 1 adresa načtení registru DP
5 LDPK 1 1 konstanta uložení 0 nebo 1 do registru DP
           
6 MAR 1 1 adresa úprava ARP, AR0 či AR1, viz též kapitolu číslo 4
7 SAR 1 1 registr,adresa uložení AR0/AR1 do RAM

10. Operace se stavovým a řídicím registrem

Další skupina instrukcí nějakým způsobem pracuje s řídicím registrem, popř. s jeho vybraným bitem. Největší vliv má bit OVM, jehož hodnota určuje, zda se budou výpočty provádět s přetečením (jak je zvykem na běžných mikrořadičích a mikroprocesorech) nebo se saturací (což je naopak obvyklé v DSP algoritmech):

# Instrukce Délka Počet cyklů Operandy Význam
1 DINT 1 1 × zákaz maskovatelných přerušení (nastaví bit INTM na 1)
2 EINT 1 1 × povolení maskovatelných přerušení (nastaví bit INTM na 0)
           
3 ROVM 1 1 × zákaz režimu výpočtů s přetečením (nastaví bit OVM na 0)
4 SOVM 1 1 × povolení režimu výpočtů s přetečením (nastaví bit OVM na 1)
           
5 LST 1 1 adresa načtení stavového registru z datové RAM
6 SST 1 1 adresa uložení stavového registru do datové RAM

Obrázek 2: Zdrojový rastrový obrázek (známá fotografie Lenny), který tvoří zdroj pro jednoduchý konvoluční (FIR) filtr, jenž zvyšuje hodnoty pixelů o pevně zadanou konstantu (offset).

Obrázek 3: Pokud je pro přičtení offsetu použita operace součtu se zanedbáním přenosu (carry), tj. když se počítá systémem „modulo N“, dochází při překročení maximální hodnoty pixelu (čistě bílá barva) k jasně viditelným chybám.

Obrázek 4: Při použití operace součtu se saturací sice taktéž dojde ke ztrátě informace (vzniknou oblasti s pixely majícími hodnotu 255), ovšem viditelná chyba je mnohem menší, než na předchozím obrázku.

11. Ostatní instrukce

Z instrukčního souboru DSP TMS32010 si zbývá popsat pouhých osm instrukcí. Tyto instrukce je možné rozdělit do tří oblastí – uložení akumulátoru na zásobník či naopak obnova akumulátoru ze zásobníku, instrukce NOP, která pouze zvyšuje obsah registru PC a konečně pětice instrukcí určených pro přenosy dat mezi RAM a ROM/PROM, práci s externími porty atd. Podívejme se na následující tabulku:

# Instrukce Délka Počet cyklů Operandy Význam
1 PUSH 1 2 × uložení spodních šestnácti bitů akumulátoru na zásobník
2 POP 1 2 × obnova spodních šestnácti bitů akumulátoru ze zásobníku
           
3 NOP 1 1 × pouze zvýší obsah registru PC
           
4 IN 1 2 adresa přečtení úrovně na vstupním portu, uložení do paměti
5 OUT 1 2 adresa změna úrovní na výstupním portu
5 DMOV 1 1 adresa přesun dat ze zadané adresy na nejbližší vyšší adresu
7 TBLR 1 3 adresa přesun dat z paměti programu do RAM
8 TBLW 1 3 adresa přesun dat z RAM do paměti programu

Poznámky:

  1. Povšimněte si, že operace se zásobníkem jsou provedeny ve dvou taktech, tedy pomaleji, než například vynásobení dvou čísel.
  2. Instrukce DMOV se typicky používá s adresními režimy používajícími registr AR0 či AR1
  3. Instrukce DMOV se používá pro implementaci zpoždění ve zpracovávaném signálu (z-1)
  4. Instrukce TBLR a TBLW jsou zvláštní tím, že pro adresaci hodnoty v paměti programu používají spodních dvanáct bitů akumulátoru. Navíc se pro adresaci ve skutečnosti používá PC, který je před provedením instrukce uložen na zásobník a po provedení instrukce zase obnoven. To znamená, že tyto dvě instrukce potřebují mít alespoň jedno volné místo na zásobníku (s kapacitou čtyř prvků).

Blokový přesun dat může vypadat například takto:

MOVTBL  TBLR    *-         ; přesun jednoho slova na adresu uloženou v AR0/AR1
        SUB     ONE        ; odečtení jedničky od akumulátoru (ten obsahuje adresu zdrojových dat v ROM)
        BANZ    MOVTBL     ; test na nulovost registru AR0/AR1, skok a dekrementace, pokud se nedosáhlo nuly

12. Odkazy na Internetu

  1. Digital Signal Processors (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/overview.page
  2. Introduction to DSP
    http://www.ti.com/lit/wp/spry281/spry­281.pdf
  3. The Evolution of TMS (Family of DSPs)
    http://www.slideshare.net/mo­to_modx/theevo1
  4. Datasheet k TMS32010
    http://www.datasheetarchi­ve.com/dlmain/49326c32a52050140ab­ffe6f0ac4894aa09889/M/TMS32010
  5. 1979: Single Chip Digital Signal Processor Introduced
    http://www.computerhistory­.org/siliconengine/single-chip-digital-signal-processor-introduced/
  6. The TMS32010. The DSP chip that changed the destiny of a semiconductor giant
    http://www.tihaa.org/histo­rian/TMS32010–12.pdf
  7. Texas Instruments TMS320 (Wikipedia)
    https://en.wikipedia.org/wi­ki/Texas_Instruments_TMS320
  8. Great Microprocessors of the Past and Present: Part IX: Signetics 8×300, Early cambrian DSP ancestor (1978):
    http://www.cpushack.com/CPU/cpu2­.html#Sec2Part9
  9. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko.sasktelwebsi­te.net/cpu.html
  10. Introduction to DSP – DSP processors:
    http://www.bores.com/courses/in­tro/chips/index.htm
  11. The Scientist and Engineer's Guide to Digital Signal Processing:
    http://www.dspguide.com/
  12. Digital signal processor (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/Digital_signal_processor
  13. Digitální signálový procesor (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Digitální_signálový_pro­cesor
  14. Digital Signal Processing FAQs
    http://dspguru.com/dsp/faqs
  15. Reprezentace numerických hodnot ve formátech FX a FP
    http://www.root.cz/clanky/fixed-point-arithmetic/
  16. IEEE 754 a její příbuzenstvo: FP formáty
    http://www.root.cz/clanky/norma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/
  17. Čtyři základní způsoby uložení čísel pomocí FX formátů
    http://www.root.cz/clanky/binarni-reprezentace-numerickych-hodnot-v-fx-formatu/
  18. Základní aritmetické operace prováděné v FX formátu
    http://www.root.cz/clanky/zakladni-aritmeticke-operace-provadene-ve-formatu-fx/
  19. Aritmetické operace s hodnotami uloženými ve formátu FP
    http://www.root.cz/clanky/aritmeticke-operace-s-hodnotami-ve-formatu-plovouci-radove-carky/
  20. FIR Filter FAQ
    http://dspguru.com/dsp/faqs/fir
  21. Finite impulse response (Wikipedia)
    http://en.wikipedia.org/wi­ki/Finite_impulse_response
  22. DSPRelated
    http://www.dsprelated.com/
  23. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  24. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  25. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  26. TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
    https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423
Našli jste v článku chybu?
22. 12. 2016 16:21

Díky za tyhle články, jsem rád, že je tu odborný obsah.

Ale často mi u nich chybí nějaký závěr – shrnutí, ve kterém by se řeklo, o čem to bylo a hlavně k čemu je to dobré + zasazení do současného kontextu. Ono lidí programujících nějaké historické čipy nebo herní konsole asi moc nebude, ale tyhle články by s patřičným kontextem mohly být užitečné i pro ostatní.

Nebo nějaký praktický návod typu: vezměte motorolu 68000 (jedna se mi válí doma), přidejte další součástky a postavte si počítač :-)

22. 12. 2016 17:58

Díky za feedback. O kontextu se doufám zmíním příště (mám připravený takový stromeček generací TMS, něco podobného jako bylo u řady 6800 až HC08), protože TI zkoušelo u svých DSPček různé cesty, jak zvýšit výkon. Například poměrně úspěšná řada používala VLIW, to je dneska už trošku rarita (pro lidi, co programují x86, ARMy atd. určitě :-)