Vlastnosti jádra 16 bitových procesorů PIC24 a DsPIC
Transkript
Ú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
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í.
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]
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í...
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
...
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...
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...
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...
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ě...