Vlastnosti jádra 16 bitových procesorů PIC24 a DsPIC

Komentáře

Transkript

Vlastnosti jádra 16 bitových procesorů PIC24 a DsPIC
Úvod
Tento
článek se pokusí čtenáře seznámit s některými vlastnostmi jádra 16 bitových MCU PIC24 a
DSC dsPIC.
Historie
Návrh je optimalizován na snadno předvídatelné chování v čase, snadno rozšiřitelné o DSP
funkce, kompatibilitu s předcházejícím 8 bitovým jádrem PIC18 a maximální výkon programů
kompilovaných z vyšších jazyků.
První byla představena v roce 2001 řada dsPIC30, která se do hromadné výroby dostala v roce
2004. V roce 2005 byly představeny řady dsPIC33, PIC24F a PIC24H.
Stručný popis jádra
Jádro využívá modifikovanou Harvardskou architekturu se šestnáctibitovými daty a dvaceti
čtyřbitovou velikostí instrukce. Čítač instrukcí (registr PC) je 24bitový a umožňuje adresaci
programu o délce 4M instrukcí. Jedno cyklové (prefetch) předzpracování instrukce pomáhá zvýšit
propustnost a zároveň příliš neovlivňuje předvídatelnost chování. Většina instrukcí se provádí v
jednom strojovém cyklu. Strojový cyklus je dlouhý 2 hodinové takty kromě 4 taktového dsPIC30F.
Jádro disponuje 16 16bitovými pracovními registry W0 až W15. W15 se využívá obvykle jako
ukazatel zásobníku a W14 může být použit jako Stack Frame Pointer, což znamená ukazatel na
blok dat v zásobníku a využívají tohoto překladače pro umístění lokálních proměnných.
Datová paměť má 16bitovou adresu a je rozdělena na 2 části. Prvních 32KB adresuje RAM a
oblast horních 32KB je mapovatelná do oblasti programu, rozšířené interní RAM od 32KB výše
nebo externí paměti.
Do dalšího vybavení jádra patří násobička a stínování registrů. Násobička je 17bitová s podporou
znamének a dělička 32bitového čísla 16bitovým. Registry W0-W3 a některé bity STATUS registru
se při přerušení zkopírují do stínové sady, kterou lze uložit nebo načíst ze zásobníku.
Modifikovaná harvardská architektura znamená, že jádro může načítat instrukce i data zároveň.
Instrukční soubor
Instrukční sada obsahuje 83 instrukcí a téměř všechny mají stejnou délku 24 bitů s výjimkou
volání a skoku s absolutní 24bitovou adresou, které jsou 48 bitové. Sada obsahuje instrukce pro
tradiční mikrořadičové aplikace a zároveň sadu pro podporu intenzivních matematických výpočtů.
Při použití maker je kompatibilní s instrukční sadou PIC18. Dále jsou podporovány až tří
parametrové instrukce typu A+B=C.
Většina instrukcí je jednocyklových s dále uvedenými výjimkami. Dvoucyklové instrukce upravují
registr PC (goto, call atd.), přesouvají 32bitové číslo nebo přistupují do paměti Flash. Třícyklové
jsou instrukce návratu z podprogramu a někdy instrukce typu SKIP, když přeskakují instrukci
dvojnásobné délky (call a goto na abs. Adresu). Vícecyklové provádění instrukce je též obvyklé při
použití instrukce REPEAT n, která řekne jádru, že následující instrukci má provést n+1 krát. Tato
operace je přerušitelná, takže není třeba se obávat opožděné reakce na přerušení. Například
instrukce dělení trvá 18 cyklů a příklad jejího zápisu je:
REPEAT #17
DIV.S W3, W4
; Provede DIV.S 18x
; Vypočítá W3 / W4 – výsledek uloží do W0 a zbytek do W1
Podrobný popis je v dokumentu 16-bit MCU and DSC Programmer’s Reference Manual.
ECOM s.r.o., A.Jiráska 384, 517 71 České Meziříčí, tel: 494 661 511, 494 661 188, fax: 494 661 202, http://www.ecom.cz, e-mail: [email protected]
Vylepšení dsPIC oproti PIC24
Funkce jádra PIC24 jsou podmnožinou funkcí dsPIC. Do jádra přibyly registry ACCA a ACCB
(akumulátory MAC jednotky), DCOUNT, DOSTART a DOEND a přidané instrukce, které je
využívají. Matematické softwarové výjimce přibyly zdroje chyb od MAC jednotky, které v některých
případech mají vlastní vektor.
Registry D... se vyplňují instrukcí DO, která se podobá příkazu for ve většině vyšších
programovacích jazyků, a slouží ke tvorbě smyček se známým počtem průchodů. Při provádění
poslední instrukce se automaticky načítá první instrukce a tím se ušetří několik instrukčních cyklů
ve smyčce.
Registry ACCA a ACCB jsou 40 bitové a jsou propojené se 40 bitovou ALU jednotkou a posuvným
registrem s posunem o 16 bitů libovolným směrem v jednom cyklu. Obvykle se k ALU přičítá
(odečítá) výsledek z násobičky a zároveň se načítají data z paměti v jednom instrukčním cyklu.
Pipeline – řetězení instrukcí
Většina instrukcí jsou jednoslovná (24bitů) a provádějí se za jeden strojový cyklus. Fáze prefetch
trvá u všech instrukcí 1 cyklus, ale provádění u některých instrukcí trvá 2 nebo 3 cykly. Následují
ukázky několika možností toku programu. V některých případech může dojít k zablokování (stall)
pipeline na jeden cyklus obvykle, když registr použitý pro adresaci zdroje dat je v předchozí
instrukci adresou cíle a pak ještě modifikován. Zbývající možnosti řetězení instrukcí a pravidla pro
blokování pipeline lze najít v dokumentu PIC24F Family Reference Manual – CPU.
1. 1 word délka jednocyklové instrukce
První instrukce uloží číslo 350 do registru W0. Druhá zvýší hodnotu W0 o 1 a uloží do W2 a třetí
instrukce inkrementuje hodnotu z adresy ve W0 (351), uloží do W2 a W0 zvýší o 2.
2. 1 word délka dvoucyklové instrukce
1. instrukce načte do W0 hodnotu 55, další přeskočí následující instrukci, je-li na pinu 3 brány A
log.0. Přeskočená třetí instrukce přičte nižší bajt z W0 k hodnotě PORTB a uloží na PORTB.
Následuje nepodmíněný relativní skok. 5. nedokončená instrukce je součet hodnoty W0 a hodnoty
na adrese ve W1 s uložením výsledku na adresu ve W2.
ECOM s.r.o., A.Jiráska 384, 517 71 České Meziříčí, tel: 494 661 511, 494 661 188, fax: 494 661 202, http://www.ecom.cz, e-mail: [email protected]
3. 1 word délka dvoucyklové instrukce čtení z paměti programu
V tomto příkladu všechny instrukce MOV přesouvají konstanty do registru. Instrukce TBLRDL
načte z paměti programu z adresy ve W0 + nastavená stránka a uloží do W1.
Přerušení
Řadič přerušení přiřazuje každému přerušení vlastní vektor, celkem 118, s nastavitelnou úrovní
priority od 1 do 7. Dále jsou podporovány výjimky, které jsou nemaskovatelné a každá má vlastní
vektor. Při ladění se využívá alternativní tabulka vektorů přerušení. Největší výhoda jsou stejně
dlouhé časy pro vstup a ukončení přerušení.
Zdroji výjimek jsou chyby software a hardware. Mezi softwarové patří přetečení a podtečení
zásobníku a dělení 0. K hardwarovým se řadí chyba oscilátoru a přístup mimo datovou nebo
programovou paměť.
Ve druhém cyklu přerušení je prováděný NOP, protože instrukce, která byla ve fázi fetch během
přerušení, je pouze jednocyklová. Kdyby byla dvoucyklová prováděla by se. Ve 4. cyklu se provádí
další NOP, protože je první instrukce přerušovací rutiny (ISR) ve fázi fetch.
V případě, že přerušení přijde v 1. cyklu dvojcyklové instrukce, je tato instrukce dokončena a další
ECOM s.r.o., A.Jiráska 384, 517 71 České Meziříčí, tel: 494 661 511, 494 661 188, fax: 494 661 202, http://www.ecom.cz, e-mail: [email protected]
se již nezačíná a místo ní se provede NOP.
Otestovat si to lze na vývojové desce Explorer 16 s demo aplikací k RT operačnímu systému
FreeRTOS, která měří rozptyl (jitter) přerušení vůči konstantnímu zdroji. Rozptyl dosahuje při
32MHz max. 125 ns. Měřené přerušení má nejvyšší prioritu a pod systémem běží několik úloh a
další přerušení.
Porovnání s ostatními jádry
BDTI.com
Na těchto stránkách lze nalézt porovnání jader DSP a DSC v testu BDTIMark2000. Výsledné
skóre je tvořeno výsledkem ve 12 různých DSP algoritmů. Testu se zúčastnila jádra dsPIC a to
pouze ve fixpoint testu. Výkonově je srovnatelná s řadou DSP568xx od Freescale, což jsou též
DSC. DSC kombinuje v sobě DSP a mikrořadič.
Efektivita kódu patří k nejlepším spolu s již uvedeným DSP568xx a OMAP35x od TI. Z
licencovaných jader dosahuje obdobné efektivity kódu pouze nejnovější ARM Cortex-A8.
Coremark.org
Na tomto serveru se zaměřují na testování výkonu CPU. Po zaregistrování jsou dostupné
zdrojové kódy tohoto testu. V tabulce jsou uvedeny výkonově nejbližší MCU s výjimkou Am386.
MCU/CPU
Výrobce
Kmitočet Překladač
[MHz]
Parametry
překladu
Coremark Coremark
/MHz
ATMega644
Atmel
20
Avr-gcc-4.3.2
-O2
0,541
10,81
MSP430F5438
TI
18
Code
composer
studio 4.1.2
-O3
0,616
--opt_for_spe
ed=5
11,10
PIC24FJ64GA004
Microchip 32
MPLAB C for
-Os -mpa
DsPIC30 v3.20
0,746
23,87
Am386DX
AMD
Gcc 4.2.4
0,607
24,27
PIC24FJ64GA004
Microchip 32
MPLAB C for
-O3 -funrollDsPIC30 v3.20 loops
0,931
29,80
LPC1114
(Cortex M0)
NXP
48
Gcc 4.3.3
-O3
0,978
46,93
LPC1114
(Cortex M0)
NXP
48
Keil ARMcc
v4.0.0.524
-O3 -Otime
1,059
50,83
MCF52233
Freescale 60
IAR EW for
ColdFire 1.20
-Ohs --isa
1,038
isa_a+
--code_model
far
--data_model
far
62,28
40
-O3
PIC24HJ128GP2021 Microchip 80
MPLAB C for
-O3 -funroll- 0,931
74,49
DsPIC30 v3.12 loops
1
U toho typu byla změněna frekvence na 80MHz z původních 40MHz. Dle mého názoru došlo k
chybě při zadávání a není rozdílu v běhu kódu mezi PIC24F a PIC24H.
Ve výsledcích je vidět vliv kompilátoru a jeho nastavení na výsledek testu. Zajímavé jsou obdobné
výkony 32bitový jader Cortex M0 a ColdFire v2. MSP430F5438 je 16 bitový MCU a ATMega
ECOM s.r.o., A.Jiráska 384, 517 71 České Meziříčí, tel: 494 661 511, 494 661 188, fax: 494 661 202, http://www.ecom.cz, e-mail: [email protected]
nejvýkonnější 8 bitový v tomto testu.
Závěr
Jak je patrné, tak 16bit MCU/DSC mohou konkurovat nejslabším 32 bitovým typům. Výhodou je
snadný přechod od MCU k DSC a obráceně, protože DSC jádra navíc obsahují MAC jednotku a
navíc několik instrukcí. Velice dobrý překladač C a současně relativně málo instrukcí umožňují psát
dobře programy v assembleru, v C a nebo je kombinovat. Výhoda psaní v assembleru je úplná
kontrola nad činností MCU a možnost snadného a přesného časování instrukcí.
Zdroje
Veškerá dokumentace je dostupná z každého 16bitového DSC/MCU např. PIC24FJ32GA104
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en536115
Stránky testu BDTIMark2000
http://www.bdti.com/bdtimark/BDTImark2000.htm
Stránky testu Coremark
http://www.coremark.org/benchmark/index.php?pg=benchmark
RTOS FreeRTOS
http://www.freertos.org/
Prodejce PIC24/dsPIC
http://www.ecom.cz/
ECOM s.r.o., A.Jiráska 384, 517 71 České Meziříčí, tel: 494 661 511, 494 661 188, fax: 494 661 202, http://www.ecom.cz, e-mail: [email protected]

Podobné dokumenty

Jádra MIPS pro MCU a jejich historie

Jádra MIPS pro MCU a jejich historie použili ke splnění jiných cílů. V současné době se oblasti aplikací pro tato jádra stále více překrývají.

Více

Nová série 16 bitových MCU s velice nízkou spotřebou

Nová série 16 bitových MCU s velice nízkou spotřebou Ilustrace 1: Blokové schéma ECOM s.r.o., A.Jiráska 384, 517 71 České Meziříčí, tel: 494 661 511, 494 661 188, fax: 494 661 202, http://www.ecom.cz, e-mail: [email protected]

Více

pickyour boty

pickyour boty (kód o 30% kratší, snížení výkonu okolo 2% oproti MIPS32) Zřetězení přerušení Nepřerušitelné bitové operace nad RAM – zjednodušení a urychlení práce se semafory DSP jednotka, podpora SIMD instrukcí...

Více

SQI (Quad SPI) flash EEPROM paměti

SQI (Quad SPI) flash EEPROM paměti Jak je z příkladu patrno, přenos je rychlejší (10 cyklů) než přes klasické softwérově vytvořené SPI (32 cyklů), ale pomalejší než hardwarové SPI (8 cyklů přenos). 2. Připojení pro rychlejší přenos ...

Více

Prvohory - infomise

Prvohory - infomise V Německu vyrobil Konrad Zuse a Helmut Schreyer v roce 1938 prototyp mechanického binárního programovatelného kalkulátoru. Ten se původně jmenoval V1, ale, stejně jako u všech jeho následovníků, by...

Více

Sborník XXXIV. Seminář ASŘ 2015 - Fakulta strojní - VŠB

Sborník XXXIV. Seminář ASŘ 2015 - Fakulta strojní - VŠB public partial class Program, je hlavní třída aplikace, ve které je uložen veškerý vývojářský kód. Aplikace začíná metodou void ProgramStarted() ve které provádíme hlavní inicializaci a práci se za...

Více

Programovatelné automaty

Programovatelné automaty 1 Úvod Programovatelné automaty (Programmable Logic Controlers PLC) se staly nejvýznamnějším řídicím prostředkem pro řízení technologických procesů, výrobních linek a strojů již během první polovin...

Více

PC hardware

PC hardware 40 MB (40 MB, to už byla nějaká velikost, a pokud si matně vzpomínám na cenu, pak byste za jeden takový disk dnes pořídili asi dva celé nové počítače), kapacita disket vzrostla na 360KB a také poně...

Více