Mikroprocesorová technika a embedded systémy. doc. Ing. Tomáš Frýza, Ph.D.

Podobné dokumenty
Mikroprocesorová technika a embedded systémy. doc. Ing. Tomáš Frýza, Ph.D.

Ústav radioelektroniky. 18. prosince 2007

PROCESOR. Typy procesorů

Charakteristika dalších verzí procesorů v PC

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Procesor. Procesor FPU ALU. Řadič mikrokód

Paralelní systémy. SIMD jeden tok instrukcí + více toků dat jedním programem je zpracováváno více různých souborů dat

Architektura počítače

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Architektury CISC a RISC, uplatnění v personálních počítačích

Intel (2) Intel (1) Intel (3) Intel (4) Intel (6) Intel (5) Nezřetězené zpracování instrukcí:

Technické prostředky počítačové techniky

Pohled do nitra mikroprocesoru Josef Horálek

Miroslav Tichý, tic136

Procesor z pohledu programátora

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Úvod do architektur personálních počítačů

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Základní deska (1) Parametry procesoru (2) Parametry procesoru (1) Označována také jako mainboard, motherboard

Základy digitální techniky

GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Přehled DSP, základní vlastnosti, rozdělení, architektura, typické výpočetní jednotky, aplikace DSP

FREESCALE KOMUNIKAČNÍ PROCESORY

Pojem architektura je převzat z jiného oboru lidské činnosti, než počítače.

V 70. letech výzkumy četnosti výskytu instrukcí ukázaly, že programátoři a

Inovace bakalářského studijního oboru Aplikovaná chemie. Reg. č.: CZ.1.07/2.2.00/

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

Paměti a jejich organizace

CHARAKTERISTIKA MODERNÍCH PENTIÍ. Flynnova klasifikace paralelních systémů

Představení a vývoj architektur vektorových procesorů

Výkonnostní srovnání DSP Jak optimalizovat výběr procesoru. Analog Devices, Texas Instruments Freescale

Procesory, mikroprocesory, procesory na FPGA O. Novák, CIE 11 1

SÁLOVÉ POČÍTAČE. Principy počítačů. Literatura. Harvard Mark I Grace Murray Hopper ENIAC

Struktura a architektura počítačů (BI-SAP) 1

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Struktura a architektura počítačů (BI-SAP) 7


Y36SAP

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Architektury VLIW M. Skrbek a I. Šimeček

PROCESORY. Typy procesorů

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Pokročilé architektury počítačů

Operační systémy. Přednáška 8: Správa paměti II

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

MSP 430F1611. Jiří Kašpar. Charakteristika

Procesor Intel Pentium (1) Procesor Intel Pentium (3) Procesor Intel Pentium Pro (1) Procesor Intel Pentium (2)

RISC a CISC architektura

Algoritmizace a programování

Paměti EEPROM (1) Paměti EEPROM (2) Paměti Flash (1) Paměti EEPROM (3) Paměti Flash (2) Paměti Flash (3)

Úvod do problematiky návrhu počítačových systémů. INP 2008 FIT VUT v Brně

Paralelní programování

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

x86 assembler and inline assembler in GCC

Von Neumannovo schema počítače

Architekura mikroprocesoru AVR ATMega ( Pokročilé architektury počítačů )

Přednáška - A3B38MMP Procesory s jádrem ARM. A3B38MMP 2015, J. Fischer, kat. měření, ČVUT-FEL Praha 1

HW počítače co se nalézá uvnitř počítačové skříně

OPS Paralelní systémy, seznam pojmů, klasifikace

Testování jednotky ALU a aplikace metody FMEA

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace

GPGPU. Jan Faigl. Gerstnerova Laboratoř pro inteligentní rozhodování a řízení České vysoké učení technické v Praze

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu

FPGA + mikroprocesorové jádro:

Princip funkce počítače

Algoritmizace a programování

Architektura procesoru ARM

Komunikační protokol MODBUS RTU v měřicích převodnících AD4xxx a Drak 4

Procesor. Základní prvky procesoru Instrukční sada Metody zvýšení výkonu procesoru

HISTORIE VÝPOČETNÍ TECHNIKY. Od abakusu k PC

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Pokročilé architektury počítačů

Hardwarové zpracování obrazu

Struktura a architektura počítačů

Y36SAP - aritmetika. Osnova

Architektura počítačů

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

PŘEDSTAVENÍ GRAFICKÉHO PROCESORU NVIDIA G200

Smart Sensors and Wireless Networks Inteligentní senzory a bezdrátové sítě


6. Procesory jiných firem... 1

Náplň přednášky 1. Vestavěný systém Výrobci technických řešení Mikrokontroléry ARM NXP Kinetis KL25Z Rapid prototyping Laboratorní vývojová platforma

Operační paměti počítačů PC

Rozhraní mikrořadiče, SPI, IIC bus,..

Úvod do informačních technologií

Charakteristika dalších verzí procesorů Pentium

a operačních systémů

Intel Procesor a jeho konstrukce. Vývojové typy, činnost procesoru

Struktura a architektura počítačů

Malý distribuovaný I/O modul

REKONFIGURACE FPGA. Božetěchova 1/2, Brno.

Workshop. Vývoj embedded aplikací v systému MATLAB a Simulink. Jiří Sehnal sehnal@humusoft.cz. info@humusoft.cz.

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Transkript:

Ústav radioelektroniky Vysoké učení technické v Brně Úvod do signálových procesorů Mikroprocesorová technika a embedded systémy Přednáška 11 doc. Ing. Tomáš Frýza, Ph.D. listopad 2012

Obsah přednášky Úvod do signálových procesorů Paralelní zpracování instrukcí a dat Architektura signálových procesorů typu VLIW Způsoby adresování operandů u signálových procesorů Programování signálových procesorů

Obsah přednášky Úvod do signálových procesorů Paralelní zpracování instrukcí a dat Architektura signálových procesorů typu VLIW Způsoby adresování operandů u signálových procesorů Programování signálových procesorů

Realizace algoritmů zpracování dat Libovolnou realizaci algoritmů číslicového zpracování dat lze provést několika způsoby s odlišnou efektivitou a náklady. Mikroprocesory pro všeobecné použití: CPU vyžadují externí paměti a podpůrné obvody (např. v PC). Mikrokontroléry. Pomocí mikroprocesorů s redukovanou instrukční sadou (RISC): Mikroprocesory využívají zřetězené zpracování (pipelining) s jednoduchými instrukcemi. Zákaznické obvody typu ASIC: Hardware jednotlivý obvodů je uzpůsoben jediné konkrétní funkci. Signálové procesory (DSP Digital Signal Processor): Největší výrobci: Texas Instruments, Analog Devices, Freescale, AT&T,... Paralelní systémy: Systémy typu MI/MD (Multiple Instruction Stream/Multiple Data Stream, viz níže), které umožňují paralelní zpracování jak instrukcí, tak i dat.

Realizace algoritmů zpracování dat Signálové procesory a procesory pro všeobecné použití (GPP General Purpose Processor) mají odlišné použití: DSP mají výrazně nižší spotřebu, proto odpadá nutnost chlazení jádra procesoru. GPP jsou určeny pro aplikace vyžadující velkou datovou pamět, příp. operační systém, běžící v reálném čase (RTOS Real Time Operation System). DSP jsou optimalizovány pro efektivní výpočet matematických operací součtu a součinu (viz tabulka). Tabulka: Vybrané algoritmy číslicového zpracování signálů. Typ algoritmu Způsob výpočtu NX Konvoluce signálů. y(l) = x(i) h(l i) i=0 MX Číslicová filtrace (FIR). y(l) = a(i) x(l i) i=0 N 1 X Diskrétní Fourierova transformace. X (l) = x(i) WN li i=0 N 1 X Diskrétní kosinová transformace. X (l) = x(i) CN li i=0......

Definice signálového procesoru Definice Signálový procesor (DSP Digital Signal Processor) je mikroprocesor, příp. mikroprocesorový systém uzpůsobený pro efektivní realizaci algoritmů číslicového zpracování signálů v reálném čase. To vše s nejmenšími vynaloženými náklady. Obrázek: Řetězec zpracování dat pomocí DSP. Vývoj DSP od konce 70. let rozdělit podle využívané architektury: von Neumannova, Harvardská, architektura typu VLIW (Very Long Instruction Word), umožňující vykonávat několik instrukcí současně, Fis83 FISHER, J.A. (Yale University, CO). Very Long Instruction Word Architectures and ELI-512. In Proceedings of the 10th Annual International Symposium on Computer Architecture ISCA 83. ISBN:0-89791-101-6.... superskalární. Vývoj DSP spěje k paralelním systémům, kdy je vykonávaná úloha rozdělena do dílčích celků a ty jsou zpracovány současně několika funkčními jednotkami, nebo celými procesorovými jádry. Fly66 FLYNN, M. J. Very High-Speed Computing Systems. Proceedings of the IEEE. 1966, vol. 54, no. 12, p. 1901 1909.

Obsah přednášky Úvod do signálových procesorů Paralelní zpracování instrukcí a dat Architektura signálových procesorů typu VLIW Způsoby adresování operandů u signálových procesorů Programování signálových procesorů

Dělení paralelních systémů Paralelní systémy lze dělit (viz Flynn) podle množství paralelně zpracovaných instrukcí a dat. Dělení podle počtu procesů (instrukcí), které jsou řešeny současně: SI Single Instruction Stream vykonává jen jeden proces, či instrukci. MI Multiple Instruction Stream vnitřní struktura umožňuje výkon několika odlišných instrukcí. Dělení podle počtu datových toků, které jsou zpracovány současně: SD Single Data Stream všechna data, se kterými procesor v daném okamžiku pracuje představují právě jeden zpracovávaný datový tok. MD Multiple Data Stream data, která jsou aktuálně zpracovávána představují několik nezávislých datových toků. Paralelní zpracování instrukcí: paralelní zpracování instrukcí je umožněno vnitřní strukturou procesoru, který obsahuje několik nezávislých funkčních jednotek, příp. celých jader. Každá jednotka má obvykle odlišnou funkci, pak je instrukce pro celý procesor tvořena z několika částí, a ty jsou vykonávány současně v těchto jednotkách, dílčí části instrukce mohou být jednoduché a proto i kompilační programy (nejčastěji z jazyka C) mohou být jednodušší a efektivně rozdělit kód do co možná nejvíce jednotek. Paralelní zpracování dat: tatáž instrukce (operace) se provádí se souborem nezávislých dat. Ta mohou být tvořena např. širokými registry (32 bitů), přičemž datová slova jsou pouze 8bitová, jednou operací (např. součet dvou 32bitových registrů) je tak ale realizován součet hned 4 dvojic odlišných operandů, tento způsob zpracování výrazným způsobem zvyšuje početní výkon procesorů, především při práci s vektory.

Paralelní zpracování instrukcí a dat Paralelní zprac. instrukcí nutnost více jednotek (např.: arit., log., násobička, FPU, transfer,...). Využití paralelního zpracování instrukcí i dat je přirozeně výhodný pouze v situaci, kdy je v daném okamžiku k dispozici více operandů pro zpracování. V případě, že výsledek jedné operace je vstupem operace následující (sériová podstata zpracování), tento postup efektivní být nemůže. Úkolem programátora je tedy uspořádat data tak, aby vyhovovala paralelní struktuře MI/SI. To může také znamenat přeprogramování celého algoritmu, a případnou nutnost vložení dodatečných instrukcí. Výhody dosahované metodou SI/MD jsou tak snižovány. Snaho o maximální vytížení jader procesoru, resp. funkčních jednotek. Rychlost zpracování algoritmů je možné ovlivnit zařazením rychlé paměti (nebo skupiny pamětí) typu cache jak pro instrukce, tak i pro data. (Zavedením cache pro instrukce vytvořila firma Texas Instruments nejvýkonnější DSP rodina TMS320C64xx.) 31 0 31 16 15 0 31 24 23 16 15 8 7 0 = = = (a) (b) Obrázek: Sériové (a) a paralelní zpracování dat (b, c). (c)

Obsah přednášky Úvod do signálových procesorů Paralelní zpracování instrukcí a dat Architektura signálových procesorů typu VLIW Způsoby adresování operandů u signálových procesorů Programování signálových procesorů

Signálové procesory firmy Texas Instruments TI uvedl první generaci DSP s označením TMS32010 v roce 1982, další (TMS320C25) v roce 1986, a TMS320C50 v 1991. Tyto 16bitové procesory pracují s pevnou řádovou čárkou (Fixed-point) a jsou kódově kompatibilní. x,c2x,c5x Procesory C1x, C2x a C5x jsou založeny na modifikované Harvard architektuře s odděleným pamět ovým prostorem pro data a instrukce. C30 První DSP s plovoucí řádovou čárkou (Floating-point) TMS320C30 byl představen na konci 80tých let. C6x První zástupce rodiny C6x s pevnou řádovou čárkou, tj. DSP TMS320C6201 byl zaveden v roce 1997. Na rozdíl od předešlých fixed-point procesorů (tj. C1x, C2x a C5x) byl C62x založen na tzv. VLIW architektuře (stále používaný oddělený prostor pro data a instrukce, jako u Harvard architektury). Signálové procesory firmy Texas Instruments patří do architektury VLIW (Very Long Instruction Word), tj. s velmi dlouhým instrukčním slovem. Poslední řada DSP má označení TMS320C6000 (32bitové DSP) a obsahuje 3 rodiny procesorů: plovoucí řádová čárka (Floating-point) obsahuje FPU (Floating-point Unit): C67xx, pevná řádová čárka (Fixed-point): C62xx a C64xx. První procesor z této řady byl TMS320C6202, využívající pouze paralelního zpracování instrukcí. C64xx je doplněn paralelním zpracováním dat. C62xx je kompatibilní s C64xx i C67xx (program určený pro C62xx na nich funguje; opačně to neplatí). Pozn.: Od října 2009 k dispozici také více-jádrové DSP.

Rodina DSP TMS320C6000 firmy TI Zástupci rodiny DSP TMS320C6000 mají v podstatě stejnou CPU, také nazývanou jádro DSP. CPU obsahuje architekturu velmi dlouhého instrukčního slova (VLIW Very Long Instruction Word), kterou TI nazývají VelociTI. CPU vždy načítá až osm 32bitových instrukcí najednou CPU obsahuje 256bitovou sběrnici pro interní programovou pamět. Každá skupina takových instrukcí se nazývá instrukční paket. CPU obsahuje osm funkčních jednotek (označení L,S,D,M), 2 registrové soubory (A0 Ax, B0 Bx), a dvě datové cesty (označení A a B). Pozn.: Všechny jednotky nemusí být vytíženy; proměnný počet 32bitových instrukcí odlišnost od jiných VLIW architektur.

Struktura signálového procesoru (TI) Obrázek: Jádro procesoru s plovoucí řádovou čárkou TMS320C6713.

Struktura signálového procesoru C67xx Pozn.: Následující platí pro C6713 (máme v laboratoři). Jádro DSP je rozděleno do 2 identických datových cest A, B. Každá cesta obsahuje 16 registrů pro obecné použití (32bitové) a 4 funkční jednotky:.l aritmetické operace,.s bitové operace,.d řízení přístupu do paměti,.m hardwarová násobička. Kromě své primární funkce, jsou některé funkční jednotky schopny provádět také aritmeticko-logické operace (viz tabulka). Pozn.: Signálové procesory rodiny C64xx obsahují 32 registrů pro obecné použití v každé datové cestě. Tabulka: Využití funkčních jednotek podle typu operace pro signálový procesor s pevnou řádovou čárkou C64xx. Typ operace.l.s.d.m 32bitové aritmetické operace. Dvě 16bitové nebo čtyři 8bitové aritmetické operace. 40bitové aritmetické operace. 32bitové logické operace. 32 nebo 40bitové posuny. 32bitové operace s jednotlivými bity. Násobení dvou 16bitových operandů. Dvě 16bitové nebo čtyři 8bitové násobení. Přístup do paměti čtení/zápis. Větvení programu.

Jádro signálového procesoru Jednotky ze sousední datové cesty mohou využívat i registrový soubor jiné datové cesty. Označení sběrnice: 1X a 2X (file cross). Vyšší počet datových sběrnic (32bitové): k uložení obsahu datových registrů do paměti slouží datové sběrnice ST1 a ST2 (store-to-memory), v opačném směru pak sběrnice LD1 a LD2 (load-from-memory). Adresní sběrnice (32bitové): Adresa požadovaných dat je generována jednou z jednotek.d na sběrnici DA1 a DA2 (data address). Pozn.: Schéma sběrnic a křížových cest na další stránce. On-chip pamět pro program i data lze v některých procesorech konfigurovat jako cache. Typické periferní obvody každého DSP jsou: řadič přímého přístupu do paměti DMA, řadič externí paměti EMIF, sériové porty, časovače/čítače,...

General-Purpose Register Files Pozn.: Sběrnice a křížové cesty mezi A a B [Tex07] Figure 2 1. TMS320C67x CPU Data Paths Data path A Data path B LD1 32 MSB ST1 LD1 32 LSB DA1 DA2 Á Á LD2 32 LSB Á src1 Á Á.L1 src2á Á dst Á8 long dst long src 8 Á 8 long srcá long dstá dst 8.S1 src1á src2 dstáá.m1 src1á src2áá Á Á dst.d1 src1á src2 Á src2á.d2 src1 Á dst src2á Á.M2 src1á Á dst Á src2 Á Á src1.s2 dstá 8 long dst 32 32 Register file A (A0 A15) 2X 1X Register file B (B0 B15)

Pracovní registry pro všeobecné použití Hodnoty, uložené v pracovních registrech obou sad (A i B) mohou představovat: 32bitová data, 40bitová data, ukazatele na operandy. Některé registry jsou navíc určeny pro podmíněné větvení programu (viz ukázka programu) testuje se, zda hodnota v registru je/není nulová: A1, A2, B0, B1, B2. Některé registry mohou být navíc použity pro kruhové adresování (viz adresování): A4 až A7 a B4 až B7. Pozn.: 40bitová data jsou vždy uložena v registrovém páru (64 bitů). 32 LSB jsou uloženy v sudém registru, zbývajících 8 bitů je pak uloženo ve vyšším (lichém) registru. Tyto registrové páry jsou také využity pro uložení hodnot floating-point Double Precision.

Časování funkce signálových procesorů Funkce signálových procesorů je charakterizována trojicí časových intervalů: Hodinový cyklus (takt) je doba periody hodinového signálu pro synchronizaci výkonu jádra DSP. Strojový cyklus odpovídá době provedení jedné fáze zřetězeného zpracování instrukcí (pipelining): určitý počet hodinových taktů např. pro dekódování operandů, jejich sečtení, generace adresy pro přístup do paměti,... u DSP s architekturou VLIW trvá jeden strojový cyklus právě jeden hodinový cyklus. Instrukční cyklus je doba provedení jedné instrukce nebo instrukčního paketu. Instrukční cyklus je závislý na typu instrukce. U VLIW (TI) jsou: jednoduché aritmetické operace složeny pouze z jednoho strojového cyklu, násobení (fixed-point): 2 cykly, násobení (single precision): 4 cykly, násobení (double precision): 9 cyklů, přístup do paměti: 5 cyklů.

Instrukční paket architektury VLIW Tvorbě instrukčních paketů je podřízeno programování v jazyce symbolických adres DSP: na jednotlivé pakety se lze odkazovat pomocí návěští (např. u podmíněných či nepodmíněných skoků), u dílčích instrukcí v paketu to nelze. Celý paket se chápe jako celek a stejně tak se načítá do řídicí jednotky při výkonu programu. Zápis instrukčního paketu v jazyce symbolických adres: 1 loop : ; návěští 2 LDDW. D1 A4++, A7 : A6 ; naplnění registrů A7 : A6 3 LDDW. D2 B4++, B7 : B6 ; naplnění registrů B7 : B6 4 MPYSP. M1X A6, B6, A5 ; A5 = A6 x B6 5 MPYSP. M2X A7, B7, B5 ; B5 = A7 x B7 6 [ A1 ] B. S2 loop ; pokud A1!=0 skoč na loop

Obsah přednášky Úvod do signálových procesorů Paralelní zpracování instrukcí a dat Architektura signálových procesorů typu VLIW Způsoby adresování operandů u signálových procesorů Programování signálových procesorů

Způsoby adresování operandů Výpočet adres pro čtení/zápis operandů v registrech nebo v paměti provádí jednotka generování adres AGU (Address Generation Unit): využívá se celočíselná aritmetika (tedy ne zlomkový tvar viz přednáška Číselné soustavy v mikroprocesorové technice), obsahuje vlastní ALU jednotku(y) a datové/řídicí registr(y) pro nastavení způsobu adresování, obecně nejčastější způsoby u DSP jsou: lineární adresování (přímé/nepřímé), adresování modulo, adresování v bitově reverzním pořadí. Přímé adresování operandů: operand instrukce obsahuje přímo zadanou adresu, kde v paměti se nachází hodnota pro výkon instrukce. Pozn.: U TMS320C6000 není tento způsob využit. Nepřímé adresování hodnot operandů: operand instrukce obsahuje adresu, kde je v paměti uložena hodnota pro výkon instrukce. Je to tedy ukazatel na hodnotu, označení: *nazev registru

Nepřímé adresování operandů Jako ukazatel může být použit libovolný registr. Při použití instrukcí pro přístup do paměti je možné měnit hodnotu ukazatele: inkrementace/dekrementace před/po vykonání adresace. relativní změna o větší počet pozic, adresace bez změny ukazatele. Tabulka: Změna hodnot ukazatelů při nepřímém adresování. Změna hodnoty Před adresací Po adresaci Inkrementace *++rx *rx++ Dekrementace *--rx *rx-- Větší zvýšení *+rx[konst] *rx+[konst] Větší zmenšení *-rx[konst] *rx-[konst] Beze změny *rx *rx

Příklad nepřímého adresování operandů Tabulka: Načtení dat z paměti do registru: LDW *A10, B1 (Load from memory), doba výkonu 5 cyklů. Název registru/pozice Před výkonem Po výkonu instrukce B1 0x0000 0000 0x0000 1234 A10 0x0000 0100 0x0000 0100 Pamět ová pozice 0x100 0x0000 1234 0x0000 1234 Tabulka: Uložení hodnoty do paměti: STB A1, *--A10 (Store to memory), 3 cykly. Název registru/pozice Před výkonem Po výkonu instrukce A1 0x0012 3456 0x0012 3456 A10 0x0000 0101 0x0000 0100 Pamět ová pozice 0x100 0x0000 1111 0x0012 3456 Pamět ová pozice 0x101 0x1111 1111 0x1111 1111

Adresování operandů modulo Kromě lineárního způsobu adresování (hodnota ukazatele se konstantně zvyšuje/snižuje) je u DSP častým způsobem adresování tzv. adresování modulo (kruhová pamět ): v datové paměti se vyhradí blok určité délky a pouze v něm se pohybuje ukazatel operandu, až ukazatel obsahuje nejvyšší možnou adresu a instrukcí se provede další zvýšení, je do ukazujícího registru automaticky nahrána nejnižší adresa ve vyčleněném bloku, velikost bloku je možné vybrat jen z pevně daných možností (viz registr AMR Addressing Mode Register). Příklad použití kruhové paměti: periodické čtení koeficientů filtru, dvojice ukazatelů pro ukládání přijatých/vyslaných dat do paměti.

Adresování operandů v bitově reverzním pořadí Generování adresy v bitově reverzním pořadí je nejméně běžný způsob adresování. Využívá se pouze u speciálních algoritmů, které vstupní/výstupní data přerovnávají z běžného pořadí do jiného. Příkladem je algoritmus rychlé Fourierovy transformace FFT (Fast Fourier Transform), která je často realizována pomocí DSP: jsou-li vstupní vzorky pro výpočet FFT v přirozeném pořadí, tj. 0, 1, 2,..., je pořadí bitů u indexu výstupních vzorků v obráceném pořadí (LSB na prvním místě, MSB poslední): 000 2 =0 001 2 =1 010 2 =2 011 2 =3... 111 2 =7. 000 2 =0 100 2 =4 010 2 =2 110 2 =6... 111 2 =7. Z důvodu usnadnění výpočtu FFT, obsahují DSP hardwarovou část, která realizuje toto přehození bez zásahu programátora tj. provádí adresování v bitově reverzním pořadí.

Princip algoritmu FFT x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(9) x(10) x(11) x(12) x(13) x(14) x(15) W 0 0 16 W 0 0 8 W 1 0 W 16 8 1 0 W 2 0 W 16 8 2 0 W 3 0 W 16 8 3 0 W 4 0 W 16 8 0 1 W 5 0 W 16 8 1 1 W 6 0 W 16 8 2 1 W 7 0 W 16 8 3 1 W 0 1 W 16 8 0 0 W 16 1 1 W 8 1 0 W 16 2 1 W 8 2 0 W 16 3 1 W 8 3 0 W 16 4 1 W 8 0 1 W 16 5 1 W 8 1 1 W 16 6 1 W 8 2 1 W 16 7 1 W 8 3 1 W 0 0 4 W 1 0 4 W 0 1 4 W 1 1 4 W 0 0 4 W 1 0 4 W 0 1 4 W 1 1 4 W 0 0 4 W 1 0 4 W 0 1 4 W 1 1 4 W 0 0 4 W 1 0 4 W 0 1 4 W 1 1 4 X(0) X(8) X(4) X(12) X(2) X(10) X(6) X(14) X(1) X(9) X(5) X(13) X(3) X(11) X(7) X(15) Obrázek: Struktura algoritmu pro výpočet FFT (N = 16).

Signálové procesory firmy Texas Instruments Dosažitelný početní výkon procesorů se udává v jednotkách: MIPS Milion Instructions Per Second pro fixed-point procesory. MFLOPS Million Floating point Operations Per Second pro floating-point procesory. MMACS Million Multiply-Accumulate Cycles per Second. BDTI Benchmarky od Berkeley Design Technology, Inc. Tabulka: Početní výkon vybraných signálových procesorů. Procesor f CPU [MHz] MIPS/MFLOPS MMACS C6203B 300 2 400 600 C6455 1 200 9 600 9 600 C6713B (float.) 300 2 400 MIPS/1 800 MFLOPS 600 C6727B (float.) 350 2 800 MIPS/2 100 MFLOPS 700 C6474 1 200 28 800 28 800 (1 jádro) (3 jádra) (3 jádra) C6678 1 000/1 250 160 GFLOP 1 320 GMAC 1 (1 jádro) (8 jader) (8 jader) C672x od roku 2005 3 jádra říjnu 2009 (TMS320CC6474) 8 jader listopad 2010 (TMS320C6678) 1 Patrně vztaženo na instrukční cyklus a nikoliv na sekundu?!

Benchmarky od Berkeley Design Technology, Inc. http://www.bdti.com/ BDTI DSP Kernel Benchmarks TM nejrozšířenější test algoritmů signálového zpracování dat: speed: BDTImark2000, memory use: BDTImemMark2000, cost efficiency: BDTImark2000/$, area efficiency: BDTImark2000/mm2, energy efficiency: BDTImark2000/Watt. Obsahuje 12 nejpoužívanějších algoritmů DSP (viz tabulka). Udává skóre procesoru. BDTI Video Kernel Benchmarks TM soubor 6 algoritmů používaných při zpracování video signálů; (uplatnění např. set-top boxy, multimediální mobilní tel., dohledové systémy, video konference,...); BDTI poskytuje referenční zdrojové kódy i testovací data: Deblocking filter, 8x8 inverse discrete cosine transform, 4x4 inverse integer transform, Motion compensation, Motion estimation, Image resize. BDTI Video Encoder/Decoder Benchmark video. BDTI H.264 Decoder Benchmark video. BDTI OFDM Receiver Benchmark komunikace. BDTI DQPSK Receiver Benchmark komunikace.

Algoritmy pro BDTI DSP Kernel Benchmarks Obrázek: Algoritmy používané v testu BDTI DSP Kernel Benchmarks TM.

Výsledky BDTI DSP Kernel Benchmarks (floating-point, Nov-2012)

Výsledky BDTI DSP Kernel Benchmarks (floating-point, Nov-2012)

Výsledky BDTI DSP Kernel Benchmarks (fixed-point, Nov-2012)

Výsledky BDTI DSP Kernel Benchmarks (fixed-point, Nov-2012)

Obsah přednášky Úvod do signálových procesorů Paralelní zpracování instrukcí a dat Architektura signálových procesorů typu VLIW Způsoby adresování operandů u signálových procesorů Programování signálových procesorů

Programování signálových procesorů Na rozdíl od programování 8bitových mikrokontrolérů je vývoj aplikací pro signálové procesory zahajován vždy ve vyšším jazyce. Postup při vývoji nové aplikace: (1) Naprogramovat celou aplikaci v jazyce C. 1 i n t main ( v o i d ){ 2 s h o r t a = 0 x40 ; // d e k l a r a c e l o k á l n í c h proměnných 3 s h o r t b = 0 x20 ; 4 i n t y ; 5 6 y = ( a + b ) << 1 ; // y = 2 x ( a+b ) 7 8 w h i l e ( 1 ) ; // nekonečná smyčka 9 r e t u r n ( 1 ) ; // v ý s t u p n í hodnota f u n k c e = 1 10 } (2) Provést analýzu real-time zpracování: ANO Konec vývoje aplikace. NE Využít optimalizační nástroje vývojového prostředí, příp. bod (3). (3) Přeprogramování časově náročné části pomocí speciálních funkcí pro překladač, příp. pomocí tzv. lineárního jazyka symbolických adres. (4) Provést analýzu real-time zpracování: ANO Konec vývoje aplikace. NE Bod (5). (5) Přeprogramovat kritickou pasáž v jazyce symbolických adres.

Programování v jazyce C Při programování v jazyce C lze kombinovat několik možností: celý kód v jazyce C, použití speciálních funkcí překladače tzv. intrinsic, kritické pasáže přepsat pomocí lineárního JSA (soubory *.sa) a ty volat z jazyka C, kritické pasáže přepsat pomocí funkcí v JSA (*.asm) a ty volat z jazyka C. Speciální funkce překladače intrinsic funkce překladač zamění jednou, příp. několika instrukcemi: 1 i n t abs ( i n t src ) ; // a b s o l u t n í hodnota 2 i n t add2 ( i n t src1, i n t src2 ) ; // s o u č e t 3 i n t mpy ( i n t src1, i n t src2 ) ; // n á s o b e n í

Kombinace zdrojového kódu v JSA a v jazyce C Obecně platí zásada, že vyšší programovací jazyk C se při programování DSP používá pro inicializaci aplikace a pro nekritické pasáže kódu (z pohledu velikosti nebo rychlosti). Kritické části je vhodné z hlediska absolutní kontroly rychlosti a velikosti přeloženého kódu programovat v jazyce symbolických adres, příp. v tzv. lineárním JSA: funkce v JSA i v C používají stejné registry. Mohou si také vyměňovat parametry/výsledné hodnoty, názvy veškerých proměnných či funkcí definovaných v C musí být v JSA uvozeny, Pozor registr B3 vždy obsahuje návratovou adresu z funkce v JSA. 1 i n t main ( void ){ // f u n k c e u l o ž e n á v souboru. c 2... 3 y = asmfunction ( a, b ) ; // v o l á n í f u n k c e v JSA 4... 5 } 1 _asmfunction : ; funkce uložená v souboru. asm 2... ; tělo funkce 3 B B3 ; skok na návratovou adresu

Vstupní parametry/výstupní hodnota funkce v JSA Funkce v JSA může obsahovat až 10 vstupních parametrů. Ty jsou vždy postupně uloženy v registrech A4, B4, A6, B6, A8, B8, A10, B10, A12 a B12. Pokud funkce vrací hodnotu, je nutné ji před návratem z funkce uložit do registru A4. Funkce se ukončí skokem na návratovou adresu, tj. B B3. Příklad Jaké hodnoty obsahují registry A4 a B4 před a po vykonání funkce y = asmfunction( a, b ), která realizuje operaci y = 2 (a + b)? Necht hodnoty a = 64 a b = 32.

Volání funkce v JSA z jazyka C 1 // SOUBOR: f 1. c 2 extern i n t asmfunction ( short, short ) ; // p r o t o t y p f u n k c e 3 // kód f u n k c e v j i n é m souboru 4 i n t main ( v o i d ){ 5 s h o r t a = 0 x40 ; // d e k l a r a c e l o k á l n í c h proměnných ; 8 b i t o v é 6 s h o r t b = 0 x20 ; 7 i n t y ; // 32 b i t o v á proměnná 8 9 y = asmfunction ( a, b ) ; // v o l á n í f u n k c e v JSA 10 11 w h i l e ( 1 ) ; // nekonečná smyčka 12 r e t u r n ( 1 ) ; // v ý s t u p n í hodnota f u n k c e = 1 13 } 1 ; SOUBOR : f2. asm 2. global _asmfunction ; definice globálního parametru NUTNÉ 3 4 _asmfunction : ; volaná funkce 5 ADD. D1x A4, B4, A4 ; A4 + B4 = A4 6 SHL. S1 A4, 1, A4 ; A4 << 1 = A4 7 B. S2 B3 ; skok na návratovou adresu, tj. na registr B3 8 NOP 4 ; časování instrukce B, která trvá 5 cyklů

Lineární jazyk symbolických adres TMS320C6000 Při programování v JSA signálového procesoru TMS320C6000 je potřeba specifikovat názvy registrů a především respektovat časování jednotlivých instrukcí: např. instrukci pro přístup do paměti je nutné doplnit 4 instrukce NOP, přístup do paměti trvá 5 strojových cyklů; 1. cyklus @ spuštění instrukce; načtená/uložená hodnota je k dispozici za další 4 cykly. Lineární JSA je jakýmsi mezikrokem mezi JSA a jazykem C. Umožňuje snadnější práci pro programátora, ale ponechává mu značnou kontrolu nad výsledným kódem: je možné používat symbolické názvy registrů, včetně předávaných parametrů (podobně jako proměnné v jazyce C), správné časování výkonu instrukcí provádí překladač automaticky, programuje se přímo pomocí instrukcí bez nutnosti specifikovat funkční jednotku. Kód je překladačem optimalizován mezi volné jednotky.

Ukázka aplikace v lineárním jazyce symbolických adres Zdrojový kód uložený v souboru s koncovkou *.sa musí obsahovat několik částí: identifikace symbolu/funkce definovaného v jiném zdrojovém souboru pomocí direktivy.global, specifikace začátku funkce prostřednictvím direktivy.cproc, konec funkce:.endproc, přiřazení vstupních hodnot proměnným za.cproc, deklarace proměnných (symbolické označení registrů):.reg, návratová hodnota funkce + ukončení funkce:.return. 1 ; SOUBOR : f2. sa 2. global _asmfunction ; definice globálního parametru NUTNÉ 3 4 _asmfunction :. cproc a, b ; přiřazení hodnot od vstupních operandů 5. reg y ; ekvivalent lokální proměnné 6 7 ADD a, b, y ; a + b = y 8 SHL y, 1, y ; y << 1 = y 9 10. return y ; funkce vrací hodnotu y 11. endproc ; konec funkce v LJSA

Kombinace programovacích jazyků Tabulka: Srovnání početní náročnosti 8bodového součtu součinů (SoP). Program. jazyk Číselná reprezentace Počty cyklů Jazyk C Floating-point 404 Jazyk C Fixed-point 352 LJSA Floating-point 203 LJSA Fixed-point 166 JSA Floating-point, VLIW 50 Tabulka: Optimalizační nástroje v prostředí Code Composer Studio (1-D FFT, 1-D DCT). Algoritmus Míra optimalizace Počty cyklů FFT, N = 8 855 FFT, N = 8 -o0 642 FFT, N = 8 -o1 288 DCT, C, N = 8 651 DCT, C, N = 8 -o0 591 DCT, C, N = 8 -o1 214 DCT, LJSA, N = 8 267 DCT, LJSA, N = 8 -o0 263 DCT, LJSA, N = 8 -o1 90

Implementace MAC Multiply-Accumulate (převzato: BROOKERS, M., WARD, W.) A0. A15 Fast MAC using Natural C Memory.D1.M1.L1.S1.D2.M2.L2.S2 Controller/Decoder B0. B15? J@5G(H7DFG(.(n? J@\G(H O DF]M? J@5G(H O =5]M-=7H5.(@7o5=7H p qd-=7h5-]m? J@5G(H7r(o5Dtsvu N?@7Adn-s\u N -Mwv.(@5o7=7HN -[\[7pCq r(o5dt[\scd j-k O = j-kn7xzy 4769698#L NO O >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>O N 8#P8#Q#)R456;698 Q#S+T!Q#4 47)+)!UWV)+X Y!Z([\[\]Y!^(LY+_ `` 47)+)!UWV)+a b!z([\[\]b!^(lb+_ `` 038#c#:d8eV03X(fgY!_(]b+_(]Y+h `` 038#c#:d8eV 03a(fgY!^(]b+^(] b+h `` Y+)+)!:#8eV47X Y!h(]Y+i(]Y+i `` Y+)+)!:#8eV47a b!h(]b+i(]b+i ``Mj Y+X(klb V:#a 456;698 ``MjY+X(kl:#m+b V:#X Y!X(]X(]Y!X NO O >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>O

Implementace MAC The Core of DSP : Sum of Products The C6000 Designed to handle DSP s math-intensive calculations Mult.M y = MPY.M a, x, prod ALU.L ADD.L y, prod, y 40 a n * x n n = 1 Note: You don t have to specify functional units (.M or.l) Where are the variables?

Implementace MAC Working Variables : The Register File 16 registers Register File A a x prod y..m.l y = 40 a n * x n n = 1 MPY.M a, x, prod ADD.L y, prod, y 32-bits How are the number of iterations specified?

Implementace MAC Loops: Coding on a RISC Processor 1. Program flow: the branch instruction B loop 2. Initialization: setting the loop count MVK 40, cnt 3. Decrement: subtract 1 from the loop counter SUB cnt, 1, cnt

Implementace MAC The S Unit : For Standard Operations 16 registers Register File A a x cnt prod y..s.m.l loop: y = 40 a n * x n n = 1 MVK.S 40, cnt MPY.M a, x, prod ADD.L y, prod, y SUB.L cnt, 1, cnt B.S loop 32-bits How is the loop terminated?

Implementace MAC Conditional Instruction Execution To minimize branching, all instructions are conditional [condition] B loop Execution based on [zero/non-zero] value of specified variable Code Syntax Execute if: [ cnt ] cnt 0 [!cnt ] cnt = 0

Implementace MAC Loop Control via Conditional Branch Register File A a x cnt prod y..s.m.l loop: y = 40 a n * x n n = 1 MVK.S 40, cnt MPY.M a, x, prod ADD.L y, prod, y SUB.L cnt, 1, cnt [cnt] B.S loop 32-bits How are the a and x array values brought in from memory?

Implementace MAC Memory Access via.d Unit 16 registers Register File A a x cnt prod y *ap *xp *yp.s.m.l.d loop: y = 40 a n * x n n = 1 MVK.S 40, cnt LDH.D *ap, a LDH.D *xp, x MPY.M a, x, prod ADD.L y, prod, y SUB.L cnt, 1, cnt [cnt] B.S loop Data Memory: x(40), a(40), y How do we increment through the arrays?

Implementace MAC Auto-Increment of Pointers 16 registers Register File A a x cnt prod y *ap *xp *yp.s.m.l.d loop: y = 40 a n * x n n = 1 MVK.S 40, cnt LDH.D *ap++, a LDH.D *xp++, x MPY.M a, x, prod ADD.L y, prod, y SUB.L cnt, 1, cnt [cnt] B.S loop Data Memory: x(40), a(40), y How do we store results back to memory?

Implementace MAC Storing Results Back to Memory Register File A a x cnt prod y *ap *xp *yp Data Memory: x(40), a(40), y.s.m.l.d loop: y = 40 a n * x n n = 1 MVK.S 40, cnt LDH.D *ap++, a LDH.D *xp++, x MPY.M a, x, prod ADD.L y, prod, y SUB.L cnt, 1, cnt [cnt] B.S loop STW.D y, *yp