Technika cyfrowa

Technika cyfrowa – PIC16F84 – Architektura procesora

Procesor zbudowany jest w oparciu o harwardzka architekturę, która w przeciwieństwie do tradycyjnej (von Neumann´a) posiada rozdzielona magistrale programu i danych. Dzięki temu pamięć danych została zorganizowana jako słowa 8-bitowe, natomiast pamięć programu posiada 14-bitową długość słowa. Zwiększenie długości słowa pamięci programu umożliwiło, przy jednoczesnym zmniejszeniu liczby instrukcji procesora, zmniejszenie czasu wykonywania większości instrukcji do jednego cyklu maszynowego gdyż wszystkie instrukcje mieszczą się w jednym słowie pamięci i nie jest potrzebny dodatkowy cykl odczytu celem pobrania argumentów rozkazu. Dalsze skrócenie czasu wykonywania instrukcji przyniósł zastosowany w procesorze flow/pipelining to znaczy podczas cyklu wykonywania jednej instrukcji następuje pobranie kodu następnej instrukcji. Uzyskano tu dwukrotny wzrost prędkości pracy procesora. Metoda ta nie sprawdza się podczas wykonywania instrukcji sterujących programem typu CALL lub GOTO, gdyż nie jest wtedy pobierany kod następnej instrukcji. Zastosowanie w procesorze wspomnianych mechanizmów doprowadziło do 4-taktowego cyklu maszynowego. Na uwagę zasługuje fakt, iż w procesorze nie występują tradycyjne instrukcje warunkowe typu skocz gdy…, które nie zmieściły by się w jednym słowie pamięci programu. W ich miejsce zastosowano grupę instrukcji typu testuj bit i nie wykonaj następnej instrukcji gdy…. Listę rozkazów uzupełniają instrukcje pętli iteracyjnych typu zmniejsz-zwieksz komórkę pamięci i omiń następną instrukcje gdy komórka pamięci jest równa zero.
Procesor posiada standardowa jednostkę arytmetyczno-logiczna (ALU), która potrafi wykonywać podstawowe operacje arytmetyczne (dodawanie, odejmowanie), logiczne (i, lub, alternatywę, przesunięcia bitowe). Z jednostka arytmetyczno-logiczna związany jest rejestr W (ang. working register), w którym to pamiętany jest jeden z argumentów operacji 2-argumentowych. Nie należy jednak utożsamiać tego rejestru ze znanym powszechnie rejestrem akumulatora w procesorach konwencjonalnych, gdyż pamiętany jest w nim 2-gi argument operacji. Rzadko spotykana cecha procesora jest to, ze wynik operacji może być zapamiętany w rejestrze W bądź komórce pamięci (rejestrze) biorącej udział w operacji.
Podobnie jak w procesorach serii MCS51, wszystkie rejestry procesora (w tym rejestr znaczników) leża w przestrzeni adresowej pamięci RAM lub inaczej w przestrzeni file registers. Procesor posiada 8-poziomowy sprzętowy stos dla instrukcji typu CALL oraz wykorzystywany w systemie przerwań mikrokontrolera. Interesującym może także być fakt, ze procesor nie posiada tradycyjnego trybu adresowania pośredniego. W przestrzeni adresowej rejestrów zaimplementowano specjalny, nieistniejący fizycznie rejestr (INDF), do którego wpis lub odczyt powoduje fizyczny wpis lub odczyt komórki pamięci o adresie zawartym w specjalnym rejestrze FSR. Ponieważ rejestry te są 8-bitowe, a komórek pamięci może być więcej niż 256, wiec ewentualne brakujące bity adresu pobierane są z innego rejestru (STATUS- bit IRP). Ilustruje to rys.10.
Z inna sytuacja mamy do czynienia w przypadku adresowania bezpośredniego. Pamięć danych (rejestry ogólnego i specjalnego przeznaczenia) podzielona jest na 128 bajtowe banki, gdyż w kodzie operacji mikrokontrolera przewidziano tylko 7-bitów na adres bezpośredni. Dodatkowe, brakujące bity adresu są uzupełnione podobnie jak w przypadku adresowania pośredniego bitami zawartymi w rejestrze STATUS (bity IRP1,IRP0).
Lista rozkazów mikrokontrolerów tej rodziny nie jest zbyt duża, ale została dobrana w taki sposób, aby możliwie najbardziej ułatwić pisanie prostych aplikacji dla celów sterowania. Nie brakuje tu rozkazów operujących na pojedynczych bitach, oraz rozkazów pętli iteracyjnych będących podstawa implementacji algorytmów sterowania.