WYKŁAD 2.
Mikrokomputer -powstaje przez przyłączenie do mikroprocesora pamięci oraz jednostek sterujących urządzeniami wejścia-wyjścia za pomocą magistrali systemowej (sterującej).
Magistrala systemowa -podzielona jest na trzy magistrale: adresową, danych i sterującą.
Magistrala adresowa -(w mikroprocesorach jednoukładowych) połączona z licznikiem rozkazów i licznikiem danych, przeznaczona do przekazywania adresów od mikroprocesora do pamięci i urządzeń peryferyjnych. Ponieważ jedynym źródłem adresów jest mikroprocesor to magistrala jest zwykle jednokierunkowa. Potrzeba sterowania dwukierunkowych magistrali adresowych występuje w przypadku rozbudowanych typów mikroprocesorów zaopatrzonych w cache.
Magistrala danych -(połączona z akumulatorem, rejestrami uniwersalnymi i rejestrem rozkazów). Dla umożliwienia przekazywania danych w obydwu kierunkach, magistrala ta z reguły powinna być dwukierunkowa. Jeśli adres znajdujący się na magistrali adresowej pochodzi z licznika rozkazów, to po odebraniu wpisywany jest on do rejestru rozkazów.
Magistrala sterowania -(połączona jest z układem sterowania mikroprocesora) przeznaczona jest do przesyłania sygnałów sterujących pamięcią (zapis-odczyt) i urządzeniami peryferyjnymi (wejście-wyjście) oraz sygnałów specjalnych wykorzystywanych w operacjach obsługi przerwań i bezpośredniego dostępu do pamięci. Zawiera też sygnały oddziałujące na stan mikroprocesora. Część sygnałów magistrali to sygnały wejściowe mikroprocesora, a część to sygnały wyjściowe.
Schemat blokowy mikrokomputera. RYS.
W przypadku połączenia magistrali adresowych i danych konieczne jest sterowanie zewnętrznych układów rozdzielających.
Schemat funkcjonalny mikrokomputera. RYS.
Do rozdzielania magistral wykorzystywane są dwa sygnały sterujące:
ALE -adres latch enable
DEN -data enable
Sygnał ALE -ustala moment czasu, w którym na wspólnej magistrali znajduje się adres i wykorzystywany jest do załadowania go do pomocniczego rejestru adresowego.
Sygnały DEN -ustalają moment czasu, w którym na wspólnej magistrali znajdują się dane; wykorzystywane są do otwarcia dwukierunkowych wzmacniaczy magistrali danych.
Adres wysyłany jest zwykle na wspólną magistralę w pierwszej części cyklu wymiany informacji. Sterowanie magistralowej struktury mikrokomputera pozwala na uzyskanie prostych i przejrzystych układów logicznych oraz na dołączenie praktycznie dowolnej liczby urządzeń peryferyjnych.
Klasyfikacja mikrokomputerów
Są one klasyfikowane wg trzech następujących kryteriów:
1.Architektura wewnętrzna.
2.Długość słowa maszynowego.
3.Technologia.
Mikroprocesorem -nazywamy układ odpowiadający funkcjonalnie jednostce centralnej komputera (Central Proces Unit) zgrupowanej w jednym układzie scalonym (lub niewielkiej liczbie w przypadku procesorów systemowych). Mikroprocesor (zgodnie z wolą jednostki centralnej w systemie komputerowym) spełnia funkcje:
pobranie rozkazów z pamięci,
pobranie danych z pamięci lub urządzenia wejściowego,
wykonanie operacji arytmetyczno-logicznych lub sterujących określonych przez rozkaz,
zapis wyniku w pamięci lub przesłanie go do urządzenia wyjściowego.
Aby wykonanie tych funkcji było możliwe każdy mikroprocesor musi zawierać co najmniej następujące bloki funkcjonalne:
jednostkę arytmetyczno-logiczną ALU,
akumulator ACC,
licznik rozkazów (programar counter PC),
licznik danych (data counter DC),
rejestr rozkazów (instructor register IR),
licznik sterowania (control unit CU).
Wewnętrzna struktura większości mikroprocesorów charakteryzuje się następującymi cechami:
wymiana informacji między blokami funkcjonalnymi mikroprocesora odbywa się za pomocą magistrali wewnętrznej,
sterowanie wymianą informacji między blokami funkcjonalnymi odbywa się metodą mikroprogramową (układ sterowania zawiera z reguły pamięć mikroprogramów realizujących rozkazy programu),
mikroprocesor podobnie jak każda jednostka centralna pracuje w sposób sekwencyjny.
Tryb MAX i MIN. RYS.
Rozkład wyprowadzeń procesora 8086. Znaczenie poszczególnych wyprowadzeń: ADQ-AD15 -16 bitowa magistrala danych procesora oraz jednocześnie 16 mniej znaczących bitów 20 bitowej (ADQ-AD19) magistrali adresowej. W obsłudze magistrali wykorzystany jest proces zwany multipleksowaniem: końcówki AD15-ADQ są wykorzystane do wystawienia.
Rozkład wyprowadzeń procesora 8086. RYS.
Mikroprocesor 18086.
W 1978 r opracowano w firmie Intel 16-bitowy mikroprocesor 18086. Składa się on ze współpracujących ze sobą dwóch zespołów:
zespołu wykonawczego -jednostki wykonawczej (execution unit EU),
zespołu łącza z magistralą systemową -jednostką interfejsu (Bus Interface Unit BIU).
Zespół wykonawczy EU składa się z:
bloku arytmetyczno-logicznego ALU,
rejestru znaczników (flag register FR),
bloku rejestrów ogólnego przeznaczenia (general register GR),
rejestru indeksowego (indexing register IR),
bloku sterowania (control system CS).
Blok ALU dołączony jest do magistrali wewnętrznej mikroprocesora. Z magistrali tej pobiera się argumenty operacji, a także wysyłany jest na nią wynik operacji. Na magistralę wysyłana też może być zawartość rejestru znaczników. Rejestr ten (9 bitowy, którego kolejne bity są ustawiane w zależności od zaistnienia jakiegoś zjawiska) umożliwia kontrolę pracy procesora. Znaczenie bitów jest następujące:
S -znacznik znaku (sign flag);'0'-liczba dodatnia, `1'-ujemna.
Z -znacznik zera (zero flag);'0'-wynik operacji różny od 0,'1'-równy zero.
P -znacznik parzystości (parity flag);'0'-liczba jedynek w wyniku nieparzysta,'1'-parzysta.
A -przeniesienie pomocnicze (auxiliary carry) jest ustawiane, gdy powstaje przeniesienie między tetradami tzn. Czwórkami bitów mniej znaczącego bajtu.
C -przeniesienie (carry) jest ustawiane, gdy wynik operacji arytmetycznej powoduje powstawanie przeniesienia z najbardziej znaczącego bajtu.
O -nadmiar, przepełnienie (overflow) jest ustawiany, gdy suma modulo2 przeniesienia z przedostatniej i najbardziej znaczącej pozycji jest równa 1(przekroczenie zakresu w kodzie U2).
J -znacznik zezwolenia na przerwanie (interrupt) ustawiany w stan `1' świadczy o zezwoleniu na przyjmowanie przerwań z INT.
D -znacznik kierunku (direction) ustawiany rozkazem STD, a zerowany CLD. Wskazuje czy zawartości rejestrów SI i DI mają być zwiększone o 1, czy zmniejszone podczas wykonywania operacji na ciągach.
T -znacznik pułapki(trap) umożliwiający pracę krokową. Wskaźnik może być ustawiany w słowie stanu programu (program status word PSW) przez zapis jedynki na pozycję odpowiedniego bitu. Można to zrobić rozkazem push PSW, wpisaniem 1 i rozkazem pop PSW.
Procesor, a ściślej ALU pracuje jedynie na danych zgromadzonych w rejestrach. Aby procesor wykonywał jakieś działanie, trzeba najpierw załadować rejestry. Do grupy rejestrów ogólnego przeznaczenia należą cztery rejestry 16-bitowe:
dwa rejestry wskaźnikowe:
SP -wskaźnik stosu (stack pointer).
BP -wskaźnik bazowy (base register), adres początku rejestru.
Oba rejestry używane są do adresowania pamięci.
dwa rejestry indeksowe:
DI -rejestr adresu przeznaczenia (destination indeks).
SI -rejestr adresu argumentu (source indeks).
Rejestry te służą do adresowania danych w zasięgu segmentu (64 kB).
rejestr indeksowy IP -stosowany przy adresowaniu indeksowym.
Zespół łącza z magistralą systemową BIU zawiera:
Blok rejestrów segmentowych (zespół rejestrów relokacji CS, DS, SS, ES).
Licznik adresów PC.
Sumator do obliczenia adresu fizycznego.
Układ kolejki i rozkazów.
Blok sterowania.
Architektura mikroprocesowa 8086/88.
RYS.
Wyodrębnienie zespołu BIU spowodowało przyspieszenie pracy, co jest efektem nałożenia się w czasie wykonywania i pobierania rozkazów. Jednocześnie pobieranie rozkazów z pamięci operacyjnej i ich wykorzystanie jest możliwe dzięki zastosowaniu kolejki rozkazów. Procesor 8086 zawiera układ kolejki o długości 6 bajtów.
BIU realizuje mechanizm segmentacji w celu oderwania logicznych obszarów pamięci od ich fizycznych adresów oraz w celu łatwej relokacji tych obiektów.
Procesor 8086 rozróżnia cztery logiczne obszary pamięci. Każdemu z nich przypisany jest jeden rejestr segmentowy.
CS - rejestr adresu segmentacji programu (code segment) wskazuje segment programu, z którego pobierane są adresy do wykonania.
DS. - Rejestr adresu przeznaczenia (destination indeks) wskazuje segment, w którym znajdują się dane deklarowane w programie.
SS - rejestr adresu segmentu stanu (stack segment) wskazuje segment, w którym zdefiniowany jest stos.
ES - rejestr adresu segmentu dodatkowego (extra segment) wskazuje dodatkowy segment danych
PC - licznik rozkazów zawiera adres następującej instrukcji, która ma być wykonana
Długość każdego segmentu jest stała i wynosi 64kB, dlatego adres wewnętrzny w segmencie jest 16 - bitowy. Rejestr wskazuje adres fizyczny początku segmentu z przestrzeni adresowej pamięci.
WYKŁAD 3
Adres fizyczny
Przestrzeń adresowa procesora 8086 ma pojemność 1MB. Jest podzielona na segmenty po 64kB.
Organizacja pamięci mikroprocesora 8086/88 rys
Procesor operuje 16 - bitowymi danymi, a zatem może w sposób bezpośredni adresować tylko 64kB pamięci, więc dla zwiększenia przestrzeni adresowej do pojemności 1MB wprowadzono w układzie procesora dodatkowe rozwiązanie układowe.
Rys. Sposób adresowania
15
Adres offsetu
15
Adres segmentowy
19 0
Adres fizyczny
Struktura funkcjonalna mikroprocesora 16 - bitowego rys
Układ ten pozwala tworzyć 20 - bitowy adres fizyczny. Najbardziej znaczące 16 bitów adresu każdego bieżącego segmentu (programu, danych, stosu) 16 - bitowych rejestrów adresów segmentowych. Słowa wewnątrz segmentu są adresowane przez 16 - bitowe słowa adresu „efektywnego”.
20-bitowy adres początku segmentu powstaje przez złożenie 16-bitowego adresu segmentowego (16-bitów zawartości rejestru segmentowego) i zer na czterech najmniej znaczących pozycjach. Stąd segmenty mogą być rozmieszczone w pamięci w dowolny sposób ale z...(nic nie ma).
Obliczanie zakresu fizycznego odbywa się przez sumowanie 16-bitowego słowa adresu i 20-bitowego słowa złożonego z zawartości jednego z czterech rejestrów segmentowych oraz zer na czterech najmniej znaczących pozycjach.
Poszczególne przestrzenie adresowe są wyznaczone przez rejestry segmentów CS,DS.,SS,ES.
Na zawartości segmentu nie są nakładane żadne ograniczenia. Przestrzenie adresowe mogą więc zachodzić na siebie lub nawet reprezentować to samo miejsce w pamięci fizycznej.
Wszystkie wykonywane przez procesor 8086 operacje dostępu do pamięci odbywają się z użyciem rejestrów segmentu.
CS- dla programu, DS.,SS,ES dla danych.
Przyjęcie takiego rozwiązania zapewnia możliwość relokacji wszystkich programów.
Źródło przesunięcia jest różne dla różnych programów:
dla segmentu kodu programu CS jest nim licznik rozkazów IP
dla segmentu stosu SS wskaźnik stosu SP
dla segmentu danych DS. jest to wartość wynikająca z trybu adresowania wyliczona przez zespół EU na podstawie kodu rozkazu i zawartości odpowiednich rejestrów EU.
Tryby adresowania
Trybem adresowania nazywamy sposób wyznaczania adresu argumentu lub wyniku.
Od różnorodności trybów adresowania zależy efektywność procesora. Wprowadzone przez firmę INTEL możliwości generowania adresu efektywnego (przesunięcia) można sprowadzić do sześciu podstawowych trybów:
1. Natychmiastowy-dana jest podawana w programie wraz z kodem rozkazu (argument może być pobierany bezpośrednio z kodu rozkazu)
2. Rejestrowy-dana jest umieszczona w jednym z rejestrów roboczych procesora (wykonywane są najszybciej),
3. Bezpośredni-adres argumentu podawany jest bezpośrednio w treści rozkazu (określa lokalizację danej w pamięci)
4. Indeksowy-w tym ttrybie adres efektywny jest sumą zawartości rejestru indeksowego SI lub DI i lokalnego przesunięcia (podanym za kodem rozkazu przemieszczeniem). Jest to tryb adresowania przeznaczony do realizacji dostępu do elementów tablic.
5. Bazowy- w adresowaniu bazowym rozkaz wskazuje na jeden z rejestrów bazowych BX lub BP i ewentualnie zsumowany z zawartością rejestru indeksowego DI lub SI, jest adresem „efektywnym”. Adresowanie bazowe jest szczególnie przydatne przy realizacji dostępu do elementów danych strukturalnych np. pół rekordu.
6. Stosowy - adres jest zabierany z rejestru wskaźnika bazy BP i ewentualnie sumowany z zawartością rejestru indeksowego DI lub SI lub podanym za kodem rozkazu przemieszczeniem.
Rozkazy operujące na rejestrach we/wy, zawierające adres we/wy (adres natychmiastowy) lub posługują się zawartością rejestru DX (adres pośredni).
Wszystkie wymienione tryby adresowania standardowego odwołują się do rejestru segmentu danych z wyjątkiem trybu stosowego, w którym standardowo wykorzystuje się rejestr segmentu stosu SS.
Kod programu jest zawsze odczytywany za pomocą rejestru segmentu kodu. Zastosowanie segmentowej organizacji logicznej przestrzeni adresowej ma następujące zalety:
pozwala na dowolne umieszczenie kodu i danych przogramu w pamięci fizycznej (realizacja)
umożliwia odseparowanie przestrzeni adresowych programu, danych i stosu
ustawia gospodarkę zasobami pamięci fizycznej przy pracy wieloprogramowej.
Ma też wady:
długość modułu programowego nie może przekroczyć 64 kB
realizowanie struktur danych o rozmiarach przekraczających 64 kB jest bardzo skomplikowane
czas dostępu do pamięci wydłuża się o okres potrzebny na zsumowanie zawartości rejestru segmentów z adresem „efektywnym”.
RYS. Metoda wyznaczania adresu fizycznego przy operacji dostępu do pamięci
Odwołania do przestrzeni we/wy mogą być realizowane przez podanie adresu fizycznego za kodem rozkazu lub przez adres fizyczny umieszczony w rejestrze DX. W przypadku przesrzeni we/wy nie przewidziano możliwości stosowania złożonych trybów adresowania pośredniego.
Odwołania realizowane z użyciem rejestru DX, pozwalają na wykorzystanie pełnych rozmiarów przestrzeni we/wy tj. 64 kB.
Budowa rozkazu
Procesor 8086 ma bogaty zestaw rozkazów, obejmujący następujące grupy funkcjonalne:
Przesyłanie danych - MOV,PUSH,POP....
Operacje arytmetyczne- ADD,SUB,MUL,DIV....
Operacje logiczne- AND,OR,NOT,NOR...
Operacje blokowe - LODS,MOVS....
Operacje przesunięcia- RCL, RCR....
Operacje sterujące- CALL,JMP,LOPP...
Operacje przerwania- INT,IRET...
Operacje we/wy- IN,OUT....
Stanu procesora- NOP,WAIT,HTL,LOCK...
Rozkazy procesora 8086 są zasadniczo 2-bajtowe. Istnieją jednak rozkazy zarówno 1-bajtowe jak i 6-bajtowe (patrz rys).
Pierwszy bajt zawiera w większości 6 bitowy kod operacji oraz dwa znaczniki D i W. Wskaźnik D (direction) określa kierunek transmisji:
„0”-wynik operacji jest przesyłany z rejestru do pamięci
„1”-wynik operacji jest przesyłany z pamięci do rejestru
Wskaźnik W(word) określa długość słowa pobieranego do operacji:
„0”-wskazuje operacje na słowie 1-bajtowym
„1”-wskazuje operacje na słowie 2-bajtowym
Jeśli rozkaz jest więcej niż jednobajtowy, to drugi bajt rozkazu najczęściej określa sposób adresowania argumentów(tab. 1)
Zawiera on trzy grupy bitów:
2-bitowa grupa MOD (Mode)- określa tryb adresowania
3-bitowa grupa REG określa wybór rejestru lub rozszerzenie kodu
3-bitowa grupa R/M. - wybór rejestru dla danej lub adresu.
bajt 1 |
|
|
bajt 2 |
|
|
kod operacji |
D |
W |
MOD |
REG |
R/M. |
Tab 1. Format rozkazu mikroprocesora 8086.
Jeżeli operandy znajdują się w rejestrach procesora to MOD=11, a pola REG i R/M. Stanowią ich adresy.
bity |
W=0 |
W=1 |
000. |
AL. |
AX |
001. |
CL |
CX |
010. |
DL |
DX |
011. |
BL |
BX |
100. |
AH |
SP |
101. |
CH |
BP |
110. |
DH |
SI |
111. |
BH |
DI |
Tab 2. Przyporządkowanie rejestrów procesora wartościom pól REG i R/M w kodzie rozkazu.
Jeżeli jeden z operandów znajduje się w pamięci to pola MOD i R/M. określają jego adres (tab. 3)
R/M. |
MOD 00 |
MOD 01 |
MOD 11 |
|
000. |
BX+SI |
BX+SI +przes. 8 bit. |
BX+SI +przes. 16 bit. |
|
001. |
BX+DI |
BX+DI+przes. 8 bit. |
BX+DI+przes. 16 bit. |
|
010. |
BP+SI |
BP+SI+przes. 8 bit. |
BP+SI+przes. 16 bit. |
|
011. |
BP+DI |
BP+DI+przes. 8 bit. |
BP+DI+przes. 16 bit. |
|
100. |
SI |
SI+przes. 8 bit. |
SI+przes. 16 bit. |
|
101. |
DI |
DI+przes. 8 bit. |
DI+przes. 16 bit. |
|
110. |
2 bajt.przes |
BP+przes. 8 bit |
BP+przes. 16 bit |
|
111. |
BX |
BX+przes. 8 bit. |
BX+przes. 16 bit. |
Tab. 3 Sposób wyznaczania adresu operandu na podstawie wartości pól MOD i R/M. kodu rozkazu (przesunięcie- wartość podano bezpośrednio w treści rozkazu)
Grupa bitów REG określa jeden z ośmiu rejestrów, w których umieszczony jest operand danej operacji. Jeżeli znacznik W=0 to są to 8-bitowe rejestry: AL.,AH,BL,BH,CL,CH,DL,DH.
Jeżeli W=1 to są to rejestry 16-bitowe: AX,BX,CX,DX,SP,BP,SI,DI.
Grupa R/M. określa rejestry adresujące:
-jeśli MOD != 11 (nie równa się) to mogą to być rejestry: BX,BP,SI,DI,BP+DI,BP+SI,BX+SI,BX+DI
-jeśli MOD=11 to wówczas R/M. określa rejestr (jak REG) dla którego będzie przesłany wynik operacji.
Obok opisanego formatu występują także rozkazy jednobajtowe, czego przykładem może być rozkaz XCHE, tj. wymiany zawartości akumulatora z wybranym rejestrem.
W kodzie tego rozkazu 5 bitów stanowi kod operacji, a 3 bity wskazują rejestr, którego ten rozkaz dotyczy.
Lista rozkazów procesora 8086 zawiera także rozkaz z argumentem natychmiastowym, umieszczonym bezpośrednio po kodzie operacji.
bajt młodszy |
|
bajt starszy |
|
||
kod operacji |
D |
W |
MOD |
REG |
R/M. |
młodszy bajt przesunięcia |
starszy bajt przesunięcia |
||||
młodszy bajt danej |
|
starszy bajt danej |
|
Tab. 4. Budowa rozkazu 6-bitowego
Współpraca mikroprocesora z otoczeniem.
Mikroprocesor 0886 umieszczony w 40-wyprowadzeniowej obudowie DIL. Procesor ten był przeznaczony do sterowania zasobami w dużych systemach wieloprocesorowych, jak i w prostych urządzeniach o minimalnym stopniu złożoności.
Ponieważ zbiór sygnałów wymagany do obu realizacji przekracza liczbę wyprowadzeń obudowy 40-nóżkowej, więc układ ten jest konfigurowany w jednym z dwóch trybów pracy: tzw. Minimalnym lub maksymalnym.
RYS. Topografia wyprowadzeń mikroprocesora 8086 z uwzględnieniem dwóch trybów pracy: minimalnego i maksymalnego.
Na ośmiu wyprowadzeniach (od 24 do 31) procesora zmieniają się funkcje realizowane przez te wyprowadzenia w zależności od ustawionego trybu pracy. W trybie minimalnym procesor sam generuje sygnały sterujące występujące na magistrali sterującej, natomiast w trybie maksymalnym generuje słowo stanu, które jest dekodowane przez jeden lub kilka sterowników szyn (np. układ 8288). Wybór trybu pracy nie ma wpływu na sposób współpracy układu z otoczeniem.
Wejściowe sygnały sterujące, wspólne dla obydwu trybów pracy:
MN/MX-„1” procesor pracuje w trybie minimalnym
„0” procesor pracuje w trybie maksymalnym
CLK- sygnał zegara
READY- sygnał wprowadzający do cyklu maszynowego takty oczekiwania
RESET- sygnał zerujący licznik rozkazów, rejestry DS.,SS,ES i rejestr znaczników (flag), natomiast rejestr CS jest ustawiony w FFFon,
INTR-sygnał zgłoszenia przerwania podawany zwykle ze sterownika przerwań (ukł.8259A). Przerwanie to jest maskowalne np. rozkazem CLI
NMI-sygnał zgłoszenia przerwania nie maskowalnego (Non Maskable Interrupt)
TEST-sygnał uruchamiający program po rozkazie WAIT, używany do synchronizacji pracy z koprocesorem.
Procesor 8086 jest wyposażony w 16-bitową multipleksowaną magistralą danych i adresów (AD0-AD15), ale adresowanie fizyczne jest 20 bitowe i dlatego magistrala adresowa jest uzupełniona o 4 bity podawane na wyprowadzenia A16-A19/S3-S6.
Wyjściowe sygnały sterujące wspólne dla obu trybów pracy:
BHE/S7- umożliwia pracę z pamięcią operacyjną zarówno w trybie bajtowym jak i ze słowem o długości 2 bajtów.
AD i BHE- określająca sposób wykorzystania pamięci:
AD=1, BHE=0 procesor korzysta z bloku pamięci A,
AD=0, BHE=1 procesor korzysta z bloku pamięci B,
AD=0, BHE=0 procesor wspólpracuje z dwoma blokami pamięci przesyłając magistralą słwa 2- bajtowe
RD- strobowanie odczytu (otwarcie bufora wewnętrznego)
RYS. Podstawowy cykl dostępu mikroprocesora
WR- sygnał strobujący zapis
MI/IO- synał określający rodzaj odwołania
M/10=1 dostęp do pamięci
M/10=0 dostęp do urządzeń zewnętrznych
ALE- potwierdzenie ważności adresu adresem na magistrali (adres latch enable). Sygnał wpisujący adres do zewnętrznych rejestrów (zboczem opadającym)
INTA- potwierdzenie przyjęcia przerwania (interrupt acknowledge).
Sygnał strobujący odczytu w cyklu potwierdzającym przyjęcie przerwania maskowalnego (odczytywany jest wektor przerwania podawany przez kontrolera przerwań).
RYS. Przerwania w mikroprocesorze 8086
HOLD - sygnał żądania zwolnienia magistrali procesora (w trybie maksymalnym jest to wyprowadzenie dwukierunkowe)
DEN - sygnał wykorzystywany jest do sterowania buforami magistrali danych (otwiera je tylko na czas przesyłania danych na multipleksowanej magistrali)
DT/R - sygnał określający kierunek przesyłania danych przez bufory
DT/R=1 transmisja od procesora do pamięci lub urządzeń zewnętrznych
DT/R=0 transmisja do procesora z pamięci lub urządzeń zewnętrznych
Procesor pracujący w konfiguracji minimalnej nie wymaga dodatkowych układów do generacji sygnałów dostępu. W trybie tym jedynie układ sterowania bezpośrednim dostępem do pamięci DMA (Direct Memory Access) np.8257, może na pewien czas przyjąć sterowanie magistralą systemu, nie jest natomiast przewidziane stosowanie koprocesora.
W trybie maksymalnym generacja sygnałów (realizujących analogiczne funkcje do wymienionych dla trybu minimalnego z wyjątkiem HOID i HLDA) przejmuje układ sterowania magistralą np.8288.
Zwolnione w ten sposób wyprowadzenia realizują następujące funkcje S0,S1 i S2, które wskazują na jeden z ośmiu cykli maszynowych procesora. Podawany na tych wyprowadzeniach status jest wykorzystywany przez układ sterownika magistrali do generowania sygnałów sterujących pracą układów zewnętrznych. W tabeli 5 zestawiono kody poszczególnych typów operacji procesora 8086.
Tab 5. Kody operacji wykonywanych przez procesor (cykle maszynowe)
S2 |
S1 |
S0 |
Operacja |
0 |
0 |
0 |
Potwierdzenie przyjęcia zewnętrznego przerwania |
0 |
0 |
1 |
Odczyt z przestrzeni adresowej we/wy |
0 |
1 |
0 |
Zapis w przestrzeni adresowej we/wy |
0 |
1 |
1 |
Stan wstrzymania pracy procesora (halt) |
1 |
0 |
0 |
Pobieranie kodu rozkazu |
1 |
0 |
1 |
Odczyt z przestrzeni adresowej pamięci |
1 |
1 |
0 |
Zapis do przestrzeni adresowej pamięci |
1 |
1 |
1 |
Przejściowy stan pasywny (bierny bez przesyłania) |
RQ/GT0 , RQ/GT1 - linie służące do współpracy procesora z dwoma koprocesorami. Tymi dwukierunkowymi liniami przesyłane są : żądanie przejęcia magistrali i zezwolenia na jej przyjęcie.
LOCK - blokada arbitrażu na magistrali wieloprocesorowej. LOCK=0 wskazuje, że czas następnego rozkazu przejęcia magistrali przez innego użytkownika będzie niemożliwe.
QS1 , QS2 - informują o stanie wewnętrznej kolejki rozkazów. Są cztery możliwe przypadki stanu układu kolejki.
Tab 6. Wartości wyjść QS i określające stan układu kolejki.
QS1 |
QS2 |
Stan kolejki |
0 |
0 |
Bez operacji |
0 |
1 |
Pobranie do wykonania pierwszego bajtu rozkazu |
1 |
0 |
Kolejka pusta |
1 |
1 |
Pobranie kolejnego bajtu rozkazu |
Niezależnie od trybu pracy procesora (minimalny czy maksymalny) dodatkowe informacje są dostępne jeszcze na liniach statusu S3 - S7.
Sygnały S3 - S6 są multipleksowane z informacjami adresowymi A16 - A19 i pojawiają się na magistrali A16 - A19 wówczas, gdy magistralą AD przesyłane są dane S3 - S4 - identyfikują segment bazowy, do którego odwołuje się procesor w bieżącym cyklu dostępu
Tab 7. Wartości sygnałów S3 i S4 określające adresowany segment
S4 |
S3 |
Segment |
0 |
0 |
Dodatkowy - danych |
0 |
1 |
Stosu |
1 |
0 |
Programu |
1 |
1 |
Danych |
Wykład 4
Cykl wykonywania rozkazów
Każdy cykl transmisji danych na magistrali procesora 8086, zwany cyklem dostępu, składa się z czterech podstawowych taktów (okresów zegara)(patrz rys. 8):
pierwszy takt jest przeznaczony do wystawienia adresu pamięci lub urządzenia zewnętrznego na magistralę
drugi takt jest przeznaczony na przełączenie magistrali (po ukazaniu się adresu multipleksowana magistrala AD musi zostać przełączona do stanu, w którym będzie po niej przesyłana dana)
trzeci i czwarty takt służy do przesyłania danych
Jeżeli zaadresowana pamięć lub urządzenia we/wy jest wolne i wymaga więcej czasu na wystawienie lub odbiór danej, to sygnał gotowości jest wycofywany REDY i wówczas między takt T3 i T4 będą wstawiane takty oczekiwania Tw. Ponieważ część rozkazów procesora8086 jest wykonywana w wielu taktach zegara, więc w tym czasie wewnętrzna kolejka procesora jest zapełniana kolejnymi rozkazami z pamięci programu.
Załóżmy, że wykonywany jest rozkaz 2-bitowy, gdzie po bajcie będącym kodem operacyjnym pobierany jest bajt trybu adresowania.
Niech MOD (patrz budowa rozkazu) wskazuje, że będzie to rozkaz bez bajtów przesunięcia
Niech REG dotyczy dowolnego rejestru
Niech grupa R/M określa rejestry BX + SI
Po dwóch cyklach pobrania rozkazu musi zostać wyliczony adres, co trwa w tym przypadku od 6 - 12 taktów. Zatem przez 2 lub 3 cykle maszynowe procesor nie korzysta z pamięci operacyjnej. Czas ten jest jednak wykorzystywany do odczytu kolejnych bajtów programu i układ BIU zapełnia 6-cio bajtową kolejkę.
Taki sposób pracy przyspiesza wykonanie programów, gdyż część wykonawcza procesora przetwarza rozkaz równocześnie z pobraniem kolejnych rozkazów z pamięci przez układ BIU. Rozkazy sterujące np. tMP opóźniają układ kolejki, który po wykonaniu skoku musi być ładowany nową sekwencją rozkazów.
System przerwań (patrz tab.3)
Przeniesieniami nazywamy zdarzenia przerywające normalny tryb pracy procesora (tj. wykonywanie bieżącego programu), wymagające specjalnej obsługi - wykonywanie programu obsługi przerwania. Źródłem przerwań mogą być elementy systemu zewnętrzne względem procesora jak np. sterownik bezpośredniego dostępu do pamięci DMA informujący o zakończeniu transmisji, układ odbierający znak z klawiatury, czy też układ wykrywający zanik napięcia zasilającego. Innym źródłem przerwań mogą być szczególne zdarzenia zachodzące wewnątrz procesora, takie jak odczyt kodu nieistniejącego rozkazu, czy próba dzielenia przez zero. Wykonywanie procedury obsługi przerwania może wynikać z treści programu - źródłem przerwania jest wówczas pracujący program.
Przerwania mogą pochodzić z następujących źródeł :
z układów zewnętrznych : przerwania maskowalne INTR (Interrupt Request), przerwania niemaskowalne NMI (Non Maskable Interrupt)
będące wynikiem zrealizowania operacji - przerwania programowe
Przerwania programowe mają najwyższy priorytet, przerwania maskowalne - najniższy.
Mikroprocesor 8086 wyposażony jest w dwa wejścia żądania przerwania :
jedno do przerwania maskowalnego INTR. Przyjęcie zgłoszenia z liniiINTR zależy od ustawienia wskaźnika I w rejestrze flag. Zgłaszane jest wysokim poziomem.
drugie dla przerwania niemaskowalnego NMI. Żądanie przerwania zgłaszane jest narastającym zboczem sygnału.
Przerwanie niemaskowalne charakteryzuje krótki czas potrzebny na przejście do procedury obsługi.
W przypadku przerwania maskowalnego jeżeli poziom zgłoszenia zmieni się (przed rozpoczęciem obsługi przerwania przez procesor) z powrotem na niski, to zgłoszenie zostanie zignorowane. Poziom wysoki musi trwać aż do momentu potwierdzenia przez procesor przyjęcia przerwania, bądź sygnałem INTA (w przypadku konfiguracji maksimum).
Po przyjęciu żądania przerwania INTR procesor wykonuje dwa cykle maszynowe, w których generuje sygnał INTA. Na czas wykonywania tych cykli procesor generuje sygnał LOCK celem uniemożliwienia przejęcia magistrali przez inne układy.
Pierwszy z tych cykli jest wykorzystywany do poinformowania sterownika przerwań (np.8259A) o gotowości do obsługi przerwania, a drugi cykl jest do przesłania magistralą AD0-AD7, który wysyła sterownik jako numer przerwania. Czas pierwszego cyklu przewidziany jest na dokonanie arbitrażu (jeżeli układów 8259A jest więcej).
Po przyjęciu przerwania procesor wykonuje następujące operacje :
wysyła na stos zawartość rejestru znaczników (flag)
zeruje znacznik zezwolenia przerwań I
zeruje znacznik pracy krokowej T
zawartość rejestrów CS (rejestr kodu segmentu programu) i PC (IP) (rejestr rozkazu) są wysyłane na stos, a z tablicy wektorów przerwań są pobierane nowe wartości dla tych rejestrów.
W ten sposób następuje przejście do programu obsługi zgłoszonego przerwania. Program ten standardowo kończy rozkaz IRET (Interrupt Return). Wykonanie rozkazu IRET powoduje pobranie ze stosu zawartości rejestru CS,PC i rejestru znacznika.
Obsługa przerwań jest realzowana za pośrednictwem tablicy wektorów przerwań. W pamięci operacyjnej komputera zajmuje ona pierwszy 1kB (adresy od 00000h do 003FEh). Tablica ta składa się z 256 wektorów 4-bajtowych :
pierwsze dwa bajty stanowią zawartość licznika rozkazów PC
drugie dwa bajty stanowią zawartość rejestru CS
Indeksem 2-bajtowych elementów w tej tablicy jest numer przyjętego przerwania.
Procesor 8086 ma na stałe przypisane niektóre numery przerwań (elementy tablicy) określonym źródłem przerwań(tab.3).
wektor 1 do realizacji pracy krokowej
wektor 2 dla NMI
wektor 3 jest przeznaczony do wspomagania uruchamiania programów (jest to jednobitowy rozkaz INT3)
wektor 4 jest zarezerwowany dla błędu nadmiaru
Źródłem przerwania jest wykonanie rozkazu INT0, wtedy gdy wstawiany jest znacznik nadmiaru.
Rozkaz INT0 jest zwykle stosowany jako następnik operacji arytmetycznych. Dalsze 27 ektorów jest zarezerwowane. Pozostałe 224 wektory są dostępne dla systemu przerwań, który użytkownik może sobie sam zorganizować (patrz rys. Schemat blokowy komputera XT).
Elementy składowe architektury komputera.
Centralną częścią komputera jest procesor (CPU).
Wszystkie elementy składowe komputera kontaktują się z procesorem poprzez magistralę.
Wyróżniamy następujące magistrale :
Magistralę lokalną - obejmuje ona 16-bitową magistralę danych i 20-bitową magistralę adresową (procesor 8086)
Magistralę systemową - sprzężona jest ona z magistralą lokalną poprzez rejestry zatrzaskowe sterowane sygnałem ALE. 20 bitów adresu i 8 bitów systemowej magistrali danych wyprowadzane jest do gniazd rozszerzających. Magistrala systemowa dostarcza zestawu sygnałów sterujących takich jak : IOR, IOW, MEMR, IRV, DRQ, DACV itd.
Magistralę X - do komunikacji z pamięcią ROM zawierającą systemy BIOS oraz portami układów na płycie głównej
Magistralę pamięciową - łączy ona magistrale systemowe z obwodami pamięci dynamicznej poprzez układy adresowania wierszy i kolumn pamięci
Magistralę zewnętrzną - stanowi ona wyprowadzenia 20-bitowej systemowej magistrali adresowej i 8-bitowej magistrali danych oraz większych sygnałów systemowej magistrali sterującej
Do poprawnej pracy komputera procesor 8086 wymaga dodatkowych układów peryferyjnych, umieszczonych na płycie głównej, jak i na kartach rozszerzających (sterowniki dysków, łącz szeregowych, równoległych itd.).
Mają one ściśle określone obszary adresowe w przestrzeni we/wy, w której widoczne są ich rejestry sterujące.
Układy peryferyjne to :
Układ zegara systemowego (8284)
Układ kontrolera magistrali (8288)
Układ kontrolera bezpośredniego dostępu do pamięci DMA (8257)
Układ kontrolera przerwań sprzętowych (8259A)
Układ programowalnego interfejsu równoległego PIO (8255)
Układ programowalnego interfejsu szeregowego SIO (8250)
Układ programowalnego układu czasowego CTC (8253)
Ad.1.
Podstawową funkcją układu 8284 jest dostarczenie impulsów taktujących pracę mikroprocesora i synchronizacja niektórych sygnałów zewnętrznych RESET, Ready (patrz rys Zegar 8284A).
Układ może pracować w dwóch trybach wybieranych stanem logicznym na wejściu F/C :
F/C=0 - generacja sygnału przez kwarc, dołączy do wejść x1,x2
F/C=1 - generacja sygnału zegara z sygnału zewnętrznego podanego na wejście EFI (External Frequency Input)
Sygnał zewnętrzny jest stosowany w systemach wieloprocesorowych do synchronizacji pracy poszczególnych procesorów. Dzięki czemu można uniknąć opóźnień w dostępie do wspólnej magistrali.
W układzie są trzy wyjścia sygnałów zegarowych : OSC, CLK i PCLK.
OSC - na tym wyjściu przebieg jest zgodny z częstotliwością dołączonego kwarcu (sygnał ten może być użyty synchronizacji innych układów 8284)
CLK - sygnał z tego wyjścia (sygnał zegarowy) przeznaczony jest do taktowania procesora
PCLK - na tym wyjściu występuje sygnał o częstotliwości dwukrotnie mniejszej (CLK/2). Służy do sterowania pracujących w systen\mie układów liczników odmierzających czas (8253)
READY - służy do ewentualnego wydłużenia cyklu maszynowego przez współpracujące z procesorem bloki funkcjonalne. Generowanie sygnału potwierdzającego operacje wiąże się z koniecznością multipleksowania wielu sygnałów pochodzących z różnych ( źródeł ) bloków funkcjonalnych systemu. Przewidziano cztery wejścia umożliwiające multipleksowanie sygnałów pochodzących z różnych źródeł:
RDY, AEN1 -pierwsze źródło
RDY, AEN2 -drugie źródło
W zależności od polaryzacji sygnału potwierdzającego można użyć wejść RDY (aktywne dla 1 ) lub AEN ( aktywne przy 0). Jeżeli do zgłoszenia potwierdzenia operacji jest wykorzystywane wejście RDY, to odpowiadające mu wejście AEN powinno mieć stan 0. Gdy potwierdzenie podawane na wejście AEN, to na wejście RDY należy wymusić poziom wysoki:
W nowej generacji zegara ( 8284 ) jest dodatkowe wejście ASYNC, które umożliwia przesuwanie w pełni asynchronicznego zgłoszenia na wejściach RDY.
Ad 2
Układ 8288 ( rys. 3 ) spełnia rolę pośrednika między samym procesorem, a systemową magistralą sterującą. Jest wykorzystywany w systemach, w których procesor 8086 pracuje w trybie maksymalnym ( MN-MX jest dołączony do masy ). Jego głównym zadaniem jest zamiana sygnałów statusu SO, S1, S2 ( TAB1 ) na sygnały składowe magistrali sterującej tj. IOWC, IORC, MWTC, MRDC, INTA oraz statusu procesora. Steruje on również pracą rejestrów zatrzaskowych buforów magistrali adresowej i danych. Sterowanie tego rodzaju rejestrów jest niezbędne, bowiem dane i adresy muszą być utrzymywane na magistrali tak długo, jak długo jest to potrzebne dla prawidłowego zakończenia operacji transmisji danych lub adresów. W przeciwnym przypadku mogłoby się zdarzyć, że wystawione przez pamięć lub układy WE/WY na magistralę danych słowa zniknęłoby z niej , zanim procesor zdążyłby ją przejąć. To samo obowiązuje przy operacji wysyłania danych przez procesor.
Wejścia sygnałów sterujących.
Układ 8288 może pracować w dwóch trybach wybieranych przez stan logiczny podany na wejście IOB
wymusza pracę w trybie sterownika magistrali lokalnej dla sygnałów strobujących operację WE/WY, dopuszczając równocześnie wykorzystanie sygnałów strobujących odwołania do pamięci dla magistrali wieloprocesowej.
wymusza pracę w trybie, w którym sygnały strobujące operację WE/WY i odwołania do pamięci sterują tą samą magistralą.
Stosując pojedynczy układ 8288 można więc wydzielić dwie przestrzenie adresowe, do których odwołuje się współpracujący procesor. CLK -wejście oprowadzające sygnał zegara systemowego z układu 8284. Do sterowania generacją sygnałów strobujących są dwa wejścia:
AEN- ( Adres Enable ) jest wykorzystywane przy dołączeniu układu do magistrali wieloprocesowej lub przy współpracy z układem DMA.
Jeżeli na wejściu :
to wyjścia sygnałów strobujących przejdą w stan wysokiej impedancji. Umożliwia to przejęcie sterowania magistrali przez inny układ.
powoduje uaktywnienie wyjść sterujących magistralami.
CEN - jest wykorzystywane do blokowania generacji systemów strobujących. Powoduje ono wymuszenie ( stanem niskim na wejściu ) na wyjściach sygnałów strobujących poziomu nieaktywnego ( wejścia sterujące oraz wyjścia DEN i PDEN ). Wejście to jest wykorzystywane gdy układ steruje pracą magistrali lokalnej ( sterowanie linii kontrolnych magistrali lokalnej poziomem nieaktywnym zwiększa odporność systemu na zakłócenia zewnętrzne w porównaniu z sytuacją, w której linie te znajdowałyby się w stanie wysokiej impedancji ).
Wyjścia sterowania buforów i układów przerwań :
AT/R - (Auto Transmit / Reveive ) informuje o pracy magistrali:
zapis z procesora;
odczyt przez procesor
DEN - ( Data Enable ) : 0- jest sygnałem dla rejestru zatrzaskowego bufora magistrali danych, powodującym „zamrożenie” w nim aktualnego stanu tej magistrali.
ALE - (Adres Latch Enable ) : 0- jest sygnałem dla rejestru zatrzaskowego bufora magistrali danych powodującym „zamrożenie” aktualnego stanu magistrali.
MCE/PDEN (Master Cascade / Pheripherial Data Enable ) w zależności od stanu wejścia IOB ( MB ), wyjście to służy do obsługi priorytetu przerwań lub komunikacji z urządzeniami WE/WY ( WXT nie jest wykorzystywane )
Wyjścia strobujące komend :
MRDS - ( Memory Read ) ustala kierunek przesyłania danych: 0 - przesyłanie z pamięci do procesora
AMWC- (Advanced Memory Write ) sygnał na tym wyjściu uprzedza układy o mającej nastąpić operacji zapisu
MWTC - (Memory Write ) ustala kierunek przesyłania danych:
kierunek przesyłania od procesora do pamięci
IOWC- (Input/Output Write ) ustala kierunek przesyłania danych
kierunek przesyłania od procesora do układów WE/WY
AIOWC- ( Advanced I/O Write Command ) sygnał na tym wyjściu uprzedza układy o mającej nastąpić operacji zapisu
IORC - ( I/O Read ) ustala kierunek przesyłania danych :
0-kierunek przesyłania z układów WE/WY do procesora
INTA - sygnał potwierdzenia przyjęcia przerwania sprzętowego przez procesor
Strona 28 - pusta
Wykład 5
Ad. 3
Kontroler DMA (Direct Memory Acces ) 8257A
Kontoler ten ( 8257A ) umożliwia bezposredni dostęp do pamięci urządzeń peryferyjnych (we/wy ) np. kontroler napędu dysków elastycznych, kontroler dysków twardych lub inne urządzenia.
Układ ten może obsługiwać cztery strumienie ( kanały ). Możliwe jest też kaskadowe łączenie kontrolerów. Takie rozwiązanie stosowane jest w komputerach AT i udostępnia 7 kanałów DMA .
Po otrzymaniu żądania bezpośredniego dostępu do pamięci od urządzenia zewnętrznego, kontroler wykonuje następujące czynności :
- przejmuje kontrolę nad magistralą systemową
- potwierdza żądanie dostępu do pamięci przez to urządzenie, które ma największy priorytet
- generuje potrzebny adres i sygnały sterujące dla pamięci i urządzenia zewnętrznego, umożliwiające wymianę słowa pomiędzy zaadresowaną komórką pamięci, a urządzeniami zewnętrznymi, czynność ta , zwana cyklem DMA jest powtarzana dotąd dopóki urządzenie zewnętrzne podtrzymuje żądanie bezpośredniego dostępu do pamięci
- po zmianie żądanej ilości słów sygnalizuje zakończenia cyklu.
Rys. 5 pokazuje uproszczony schemat 8257A
Kanały DMA
Układ zawiera cztery kanały oznaczone symbolami CH0- CH3.
Każdy kanał zawiera dwa 16- bitowe rejestry : - rejestr adresu
- rejestr liczby słów
Rejestry te wymagają ładowania przed rozpoczęciem pracy układu, przy czym :
- Rejestr adresu jest ładowany adresem pierwszej komórki pamięci, z którą zostanie przeprowadzona wymiana danych.
- Czternaście mniej znaczących bitów rejestru liczby słów jest ładowanych zmniejszaną o jeden liczbą czyli DMA , po wykonaniu których element zasygnalizuje sygnałem TC=1 zakończenie wymiany
Jeżeli więc chcemy wymienić N- słów, należy rejestr liczby słów załadować do liczby N-1.
- Dwa najbardziej znaczące bity rejestru liczby słów określają rodzaj wykonanej operacji (tab. 2)
Możliwe są następujące operacje :
-DMA READ - przesłanie danych x pamięci do urządzenia zewnętrznego;
-DMA WRITE - przesłanie danych z urządzenia zewnętrznego do pamięci.
-DMA VERIFY - weryfikowanie danych już przesłanych np. na drodze kontroli parzystości. Urządzenie zewnętrzne wykorzystuje do tego celu sygnały potwierdzające DACK generowane przez układ DMA ( aczkolwiek nie zachodzi wtedy wymiana danych )
Każdy kanał DMA ma :
Wejście :
DRQ-( DMA Request )
DRQ=1-jest żądaniem bezpośredniego dostępu do pamięci, wysłanym przez odpowiednie urządzenie zewnętrzne
Sygnał ten zostaje wyzerowany:
- z chwilą generacji przez układ DMA potwierdzenia DACK, co występuje przy wymianie typu bajt za bajtem;
- po zakończeniu wymiany całego bloku danych, co ma zastosowanie przy wymianie blokowej (Burst Mode)
Wyjście :
DACK-(DMA Acnowledge) :
DACK=0 informuje urządzenie zewnętrzne, że udostępniono mu magistralę danych do wykonania przesłania jednego słowa.
Rejestr buforowy danych.
Jest to dwukierunkowy trójstanowy rejestr buforowy o komórkach D0=D7 i służy do :
-programowania układu DMA (tzn. do przekazywania zawartości rejestru, adresu, liczby słów i słowa sterującego )
- odczytywanie przez procesor zawartości rejestru adresu, rejestru liczby słów i rejestru statusowego
- wyprowadzenia na początku cyklu DMA najbardziej znaczącego bajtu adresu.
Rejestr buforowy danych nie służy nigdy do przekazywania danych pomiędzy pamięcią a urządzeniami zewnętrznymi, do tego celu służy magistrala systemowa.
Ad. 4
Programowalny sterownik przerwań 8259- PIC
Układ ten ( rys. 6 ) jest przeznaczony do :
Przeprowadzenia arbitrażu pomiędzy zgłoszeniami przerwań z ośmiu różnych źródeł;
Maskowanie wybranych zgłoszeń przerwań
Generacja żądania przerwania dla systemu mikroprocesorowego
Przekazywanie procesorowi rozkazu CHU do programu obsługi dla niemaskowalnego zgłoszenia przerwania o największym priorytecie.
Programowalność umożliwia sterownikowi przeprowadzenie arbitrażu według szeregu różnych zasad, zależnie od potrzeb użytkownika.
Zasady arbitrażu mogą być zmieniane programowo na bieżąco, w dowolnym miejscu realizowanego programu.
Układ zawiera osiem programowalnych sterowników przerwań.
Może przeprowadzić arbitraż i przekazywać rozkazy skoku do programu obsługi przerwań dla sześćdziesięciu czterech różnych źródeł przerwań ( rys. 7 - przedstawia schemat blokowy układu PIC 8259 )
W układzie tym można wyróżnić : trzy rejestry :
1.IRR- (Interrupt Request Register) - rejestr zgłoszeń przerwań.
W rejestrze tym są zapamiętywane wszystkie zgłoszenia przerwań (IRO-IR7) generowane przez urządzenia zewnętrzne.
2.ISR - (Interrupt Service Register) rejestr przerwań obsługiwanych.
W tym rejestrze znajdują się wszystkie zgłoszenia przerwań, które są obsługiwane
3.IMR - (Interrupt Mask Register) rejestr maskowania przerwań.
W rejestrze tym są ustawione bity odpowiadające tym zgłoszeniom przerwań, które powinny zostać zablokowane ( tab. 3 ).
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
Tab. 3 ( 1- zablokowana linia zgłoszeń przerwania )
Maksymalne zgłoszenia przerwania o wyższym priorytecie nie wpływa na obsługę przerwań o niższym priorytecie.
Inne ważne bloki układu to:
Arbiter priorytetu - określa on priorytety zgłoszeń przerwań na podstawie przekazanych do układu słów sterujących. Zgłoszenie o najwyższym priorytecie jest wprowadzone do rejestru przerwań obsługiwanych w chwili gdy INTA = 0.
Rejestr buforowy danych - jest to dwukierunkowy rejestr służący do sprzęgnięcia układu 8259 z magistralą danych(D0....D7)w celu wpisywania do niego słów sterujących i odczytu słów statusowych.
Układ czytania / pisania - steruje wpisywaniem danych w trakcie programowania rejestrów układu oraz odczytywania zawartości rejestrów w trakcie ich testowania.
Układ ten ma następujące wejścia:
CS(Chip Select) - wybieranie układu. CS = 0 - wybiera układ do celów programowania lub czytania zawartości jego rejestrów przez procesor.
WR(Write) - wpisywanie. WR = 0 - umożliwia procesorowi odczytanie zawartości rejestru zgłoszeń przerwań, rejestru przerwań obsługiwanych, rejestru maskowania przerwań oraz odczytywanie kodu BCD zgłoszenia przerwania o najwyższym priorytecie;
A0 - jest zwykle sprzęgane z jedną***************************
Kaskadowy bufor / komparator - jest stosowany w przypadku kaskadowego połączenia wielu układów 8259 do obsługi więcej niż 8 liczby zgłoszeń przerwań. Jeden z układów jest zawsze nadrzędny (master) a pozostałe są układami podrzędnymi (slave).
Posiada on następujące wyprowadzenia:
CAS0 ... CAS2 (Cascade Lines) są one wyjściami jeżeli układ jest nadrzędny, a wejściami jeżeli jest podrzędny. Jako element nadrzędny wyprowadza on bity (trzy) elementu podporządkowanego zgłaszającego przerwanie na wyjścia CAS0 ...CAS2 wszystkich elementów podporządkowanych. Ten spośród elementów podporządkowanych, który rozpozna swoje bity identyfikacyjne, wysyła w odpowiedzi rozkaz skoku do podprogramu obsługi przerwania.
SP (Slave Program ) - wejście:
SP = 1 - układ jest nadrzędny
SP = 0 - układ jest podporządkowany
Współpraca z procesorem:
Na jednym lub kilku wejściach IR0 - IR7 pojawiają się zgłoszenia przerwania (IR = 0
w wyniku czego zostają ustawione odpowiednie bity rejestru zgłoszeń przerwań)
2. W odpowiedzi układ 8259 dokonuje arbitrażu priorytetów zgłoszeń i przesyła procesorowi sygnał INT = 1.
3. Procesor potwierdza otrzymanie tego sygnału za pomocą sygnału INTAΦ.
4. Po otrzymaniu sygnału INTA = Φ układ 8259 wstawi bit rejestru przerwań obsługiwanych dla zgłoszenia o najwyższym priorytecie zerując odpowiadający mu bit w rejestrze zgłoszeń przerwań. Następnie układ 8259 wprowadza na magistralę danych kod operacyjny (pierwszy bajt) rozkazu (CALL) skoku do programu obsługi przerwania dla zgłoszenia o najwyższym priorytecie.
5. W odpowiedzi na kod operacyjny CALL system procesora generuje odpowiednio dwa sygnały INTA = Φ.Każdy z tych sygnałów sprawia , że układ wprowadza na magistralę danych kolejne bajty zaprogramowanego adresu programu obsługi przerwania:
pierwszy sygnał INTA = Φ powoduje wyprowadzenie bajtu najmniej znaczącego.
drugi sygnał INTA = Φ powoduje wyprowadzenie bajtu najbardziej znaczącego.
6. Procesor rozpoczyna wykonanie programu obsługi przerwania. Ustawiony bit rejestru przerwań obsługiwanych zostaje wyzerowany dopiero po zakończeniu przez procesor w słowie OCW2 odpowiednio ustawionego bitu EOI (End of Interrupt).
7. Jeżeli w trakcie przerwania o niższym priorytecie pojawi się zgłoszenie przerwania o wyższym priorytecie, program obsługi przerwania o niższym priorytecie zostanie przerwany. Arbitraż priorytetów wykracza poza fazę wyboru żądania przerwania o najwyższym priorytecie, obejmuje również cały czas realizacji dowolnego programu obsługi żądania przerwania.
Ad. 5.
Układ równoległego interfejsu programowalnego (PIO) 8255:
Jest to układ WE/WY (rys 9b) umożliwiający równoległe dwukierunkowe przesyłanie danych w trzech trybach. Układ ten zawiera trzy 8-bitowe rejestry WE/WY A,B i C (zwane bramami - portami),bufor magistrali danych, rejestr sterujący (rys 9a)
Rejestr C - może być używany również jako dwa - niezależnie sterowane rejestry 4-bitowe
Grupa A - to brama A oraz górna część rejestru C (bity bardziej znaczące PC7..PC4)
Grupa B - to brama B oraz dolna część rejestru C (bity mniej znaczące PC4..PC0)
Każda z wymienionych bram może mieć różne właściwości w zależności od trybu pracy (rys10). Wyboru trybu pracy dokonuje się poprzez programowanie tzn. przez wprowadzenie odpowiedniego słowa sterującego do rejestru sterującego (format słowa sterującego i sposób programowania poszczególnych trybów pokazuje tablica 4).
Od strony procesora układ 8255 ma 8 wyprowadzeń dwukierunkowej buforowej, trójstanowej magistrali danych. Wymiana danych między procesorem, a tym buforem albo na drodze realizacji rozkazów WE/WY, albo na drodze realizacji czytania pamięci i pisania do pamięci. Wówczas przyporządkowuje się układowi cztery komórki przestrzeni adresowej - trzy dla bram(A,BiC), czwarta dla rejestru sterującego. Sposób sterowania układu 8255 przedstawia tab 11.2.
Widać, że uaktywnienie układu dokonuje się za pomocą trzech sygnałów
CS - CS = 0 - wybór układu (sygnał podstawowy)
CS = 1 - układ jest odłączony od magistrali danych
A0 i A1 - umożliwiają adresowanie jednej z trzech bram A,B,C lub rejestru sterującego. Przy adresowaniu rejestru sterującego jest możliwe tylko wpisywanie do niego słowa, natomiast nie jest możliwe odczytywanie.
Inne sygnały to:
RD = 0 ten sygnał, umożliwia czytanie zawartości zaadresowanej bramy.
WR = 0 umożliwia wpisywanie z magistrali danych na zaadresowaną bramę lub do rejestru
sterowania.
RESET zeruje wszystkie rejestry, czyli umożliwia ustawienie układu w stan początkowy, w którym wszystkie rejestry WE/WY układu są układami wejściowymi.
Charakterystyki trybu pracy układu 8255
MODΦ - jest przeznaczony do realizacji bezwarunkowej WE/WY. Pracujący w tym trybie układ ma :
dwie bramy 8-bitowe i dwie bramy 4-bitowe,które mogą pracować jak układy wejściowe
lub wyjściowe
wyjściowe z rejestrami zatrzaskowymi
wejściowe bez rejestrów zatrzaskowych
możliwość realizacji szesnastu różnych kombinacji wejść i wyjść
MOD1 - przeznaczony jest do realizacji WE/WY z przerwaniem przy jednym kierunku przesyłania danych. Potrzebne do tego celu sygnały żądania przerwania, strobu i trybu są wyprowadzane lub wprowadzane z wykorzystaniem linii bramy C.
Pracujący w tym trybie układ ma :
dwie grupy końcówek, grupą A i B, każda z nich składa się z odpowiedniej bramy 8-bitowej do przesyłania danych i z pomocniczej bramy 4- bitowej przeznaczonej do przesyłania sygnałów sterujących
możliwość zaprogramowania każdej 8- bitowej bramy jako wejścia lub wyjścia, przy czym zarówno wejścia jak i wyjścia mają rejestry zatrzaskowe.
Możliwość zaprogramowania wejścia lub wyjścia tych linii bramy C, które nie służą do przesyłania sygnałów sterujących.
Przeznaczenie tych linii bramy C, które służą do przekazywania sygnałów sterujących pokazuje rys 11.
MOD2 - jest przeznaczony do realizacji operacji WE/WY z przerwaniem poprzez (TYLKO)
bramę A, przy dwóch kierunkach przesyłania danych z elementem zewnętrznym za pomocą jednej 8- bitowej dwukierunkowej magistrali danych. Potrzebne do tego celu sygnały żądania przerwania, statusu strobu są również wyprowadzane przez bramę C.
Pracując w tym trybie układ ma :
Tylko jedna grupę końcówek (grupę A) składającą się z dwukierunkowej bramy A oraz pięciu bitów bramy C;
Możliwość zaprogramowania bramy A jako wejścia i wyjścia równocześnie, przy czym zarówno wejście jak i wyjście mają rejestry zatrzaskowe;
Możliwość zaprogramowania jako wejścia lub wyjścia (NIE RÓWNOCZŚNIE)tych linii bramy C, które służą do przekazywania sygnałów sterujących.
Rys 12 wyjaśnia przeznaczenie linii bramy C, które służą do przekazywania sygnałów sterujących.
Zarówno przy pracy w trybie 1 jak i w 2, poszczególne bity bramy C mogą być ustawione lub zerowane na drodze przesyłu do rejestru sterowania układu 8255 słowa sterującego o odpowiedniej budowie (rys 13 ).
Z możliwości tej korzysta się w celu programowego blokowania i odblokowywania żądań przerwań pracy w trybie 1 lub 2, ustawiając lub zerując odpowiednie przerzutniki maskujące INTE.
W tab 4 zestawiono wszystkie możliwe sposoby pracy układu 8255.Możliwośc programowania sprawia, że układ 8255 może być stosowany do sprzęgania z procesorem bardzo dużej liczby różnych układów zewnętrznych.
WYKŁAD 6
Układ szeregowego intrfejsu programowalnego 8250;
Jest to układ (rys 14) przetwarzający dane z postaci szeregowej na równoległą (dla przychodzących) i z równoległej na szeregową (dla wychodzących)Układ określa się ogólną nazwą UART (Uniwersal Asynchronous Reciver -Transmiter)
Skomplikowana struktura tego układu ma szerokie możliwości programowej adaptacji:
rodzaj transmisji - asynchroniczna lub synchroniczna
prędkość transmisji
rodzaj i liczbę znaków synchronizujących dla transmisji asynchronicznej
rodzaj kontroli parzystości i inne parametry transmisji
Wewnątrz sterownika można wyróżnić 6 zasadniczych bloków funkcjonalnych (rys 15).
Są to:
jednostka współpracy z procesorem, która zawiera bufor danych oraz dekoder adresów i sterowań
blok nadawania
generator sygnału zegarowego
blok współpracy z modemem
układ przerwań
Wszystkie bloki posiadają rejestry służące do zapisywania (definiowania trybu pracy
danego bloku) i do odczytu jego stanu. Wszystkie rejestry dołączone są do wewnętrznej magistrali danych. Procesor uzyskuje dostęp do tej magistrali za pośrednictwem trójstanowego bufora danych, wówczas gdy układ zostanie wybrany.
Przeznaczenie poszczególnych wyprowadzeń :
DΦ...D7 - 8- bitowa, dwukierunkowa, trójstanowa magistrala danych, służąca do
przekazywania danych, rozkazów i bajtów statusowych pomiędzy procesorem a
układem.
RCLK (Receiver Clock) - wejście sygnału synchronizującego, tor odbiorczy o częstotliwości
16 razy większej od zadanej prędkości transmisji.
SIN (Serial Input) - wejście toru odbiorczego
SOUT (Serial Output ) - wyjście toru nadawczego
CSΦ...CS2(Chip Solect)- wyjście sygnału wyboru elementu (CSΦ = 1, CS1 = 1, CS2 = 0 oznacza wybranie układu)
BAUDOUT - wyjście sygnału synchronizującego tor nadawczy o częstotliwości 16 razy większej od zadanej prędkości transmisji. Jeżeli połączymy wyjście BAUDOUT z wejściem RCLK to nadajnik i odbiornik pracują z tą samą prędkością.
DISTR (Data In Strobe ) - wejściowy sygnał sterujący, umożliwiający w stanie aktywnym (DISTR =1 lub ~DISTR=0) odczyt wewnętrznych rejestrów.
DOSTR (Data Out Strobe) - wejściowy sygnał strobujący, umożliwiający w stanie aktywnym (DOSTR=1 lub ~DOSTR=0) zapis rejestrów wewnętrznych.
DDIS (Driver Disable) - na wyjściu tym stan równy 0 sygnalizuje, że trwa odczyt rejestrów wewnętrznych.
CSOUT (Chip Select Out) - jest aktywne, jeżeli procesor wybrał układ liniami CS0, CS1, CS2.
ADS (Adres Strobe) - na wyjściu stan równy 0 sygnalizuje, że adres na liniach A0...A2 jest ustawiony i może być dekodowany przez układ.
A0, A1, A2 - linie adresujące rejestry wewnętrzne umożliwiające dostęp do nich procesorowi (stany na tych liniach decydują o wyborze rejestru do odczytu lub zapisu). Można zaadresować 8 rejestrów (w rzeczywistości więcej, bo rolę czwartej linii adresowej pełni siódmy bit rejestru parametrów transmisji DLAB).
INTRPT (Interrupt) - stan 1 na tym wyjściu sygnalizuje spełnienie warunków wywołania przerwań.
OUT1, OUT2 - wyjścia, które mogą być swobodnie programowane, OUT2 steruje kluczem blokującym przerwania pochodzące od układu 8250.
RTS (Request To Send) - wyjście sterujące stanem linii, stan 0 oznacza żądanie przesłania danych bitowo - szeregowych.
DTR (Data Terminal Ready) wyjście sterujące stanem linii, stan=0 oznacza gotowość układu 8250.
MR (Master Reset) - wejście uaktywniające, podanie sygnału równego 1 na to wejście powoduje inicjalizację wszystkich rejestrów wewnętrznych układu, z wyjątkiem buforów nadajnika, odbiornika i rejestru podzielnika.
CTS (Clear To Send) - wyjście odpowiadające stanowi linii DSR, stan=0 na tym wejściu oznacza gotowość układu zewnętrznego np. modemu.
RLSD (Received Line Sygnal Defect) wejście odpowiadające stanowi linii DCD, stan=0 - aktywny poziom sygnału odbieranego.
RI (Ring Indicator) - wyjście odpowiadające stanowi linii RI, 0 - wskaźnik wywołania..
XTAL1, XTAL2 - końcówki do przyłączenia rezonatora kwarcowego, a do XTAL2 można przyłączyć zewnętrzny sygnał synchronizujący. Szeregowy strumień danych na wejściu SIN podlega rozłożeniu na bity: danych, startu, stopu i ewentualnie parzystości. Przesyłane dane w formie szeregowej otrzymują (przed wysłaniem) pewien rodzaj „opakowania” tzw. ramki. Właśnie ramka a nie bit jest najmniejszą porcją przekazywaną jednorazowo przez łącze informacji(rys.16).
Rys.16
cisza |
start |
7 |
lub |
8 bit |
ów |
pole |
dan |
ych |
Bit p |
bit |
stop |
cisza |
Czynność wydzielenia z ramki poszczególnych bitów realizuje specjalny rejestr przesuwny. Dla użytkownika istotne jest wydzielenie bajtu danych i złożenie w rejestrze buforowym odbiornika, skąd może być pobrany przez mikroprocesor. Po stronie nadawczej pracuje podobny rejestr przesuwny, pobierający dane równoległe z rejestru buforowego nadajnika. Dane do tego bufora dostarczane są przez procesor. Układ dodaje (stosowanie do formatu) bity startu, stopu i parzystości, po czym całość jest ekspediowana zgodnie z ustaloną prędkością transmisji do wyjścia SOUT ( po wywołaniu ramki wyjście przyjmuje stan wysoki). Układ ten posiada rozbudowany mechanizm przerwań sprzętowych. Kontroluje zmiany poziomów na liniach sterujących, stan rejestrów buforowanych nadajnika i odbiornika, stan linii danych i jakość połączenia z korespondentem. Zależnie od zaprojektowania maski rejestru przerwań zaistnienie określonej sytuacji wywołuje przerwanie sprzętowe (na wyjściu INTRPT pojawia się impuls dodatni)
Ad.7
Układ interwałów czasowych 8253.
Komputery PC zawierają programowany generator interwałów czasowych 8253 lub 8254 (rys.17). jest on przeznaczony do generacji periodycznych żądań przerwań (może służyć jako tzw. „zegar czasu rzeczywistego” ), do generacji żądań przerwań po upływie określonej liczby impulsów, do generacji ciągów impulsów o różnych częstotliwościach. Np.: czas wykonywania pewnych fragmentów programu musi być niezależny od obecnego w danym systemie procesora i szybkości jego taktowania. Wiele programów, w tym gry, wymagają wbudowanych opóźnień lub kontroli upływu czasu rzeczywistego.
W oparciu o zegar czasu rzeczywistego system operacyjny prowadzi ewidencję plików dyskowych i katalogów, posługując się między innymi datą i czasem ich założenia lub modyfikacji.
Wiele funkcji systemowych np.: odświeżanie pamięci dynamicznej wymaga określonego wykonywania odświeżania , z dokładnie określoną częstotliwością.
Mechanizmy napędowe stacji dysków elastycznych wymagają podawania bardzo precyzyjnych impulsów.
Rys. 18 przedstawia uproszczony schemat blokowy układu 8253.
D0 - D7 (Data) - 8-bitowa (trójstanowa) dwukierunkowa magistrala danych
A0 - A1(Address) - wejścia adresujące jeden z liczników (generatorów) 0, 1, 2 lub rejestr stanu układu (możliwość programowania układu pokazuje tab.5)
A0 |
A1 |
Adresowany rejestr |
0 |
0 |
Licznik CE0 |
1 |
0 |
Licznik CE1 |
0 |
1 |
Licznik CE2 |
1 |
1 |
Rejestr stanu |
CLK0 - CLK2 (Clock) - wejścia sygnałów zliczanych przez licznik 0, 1, 2,]
GATE0 - GATE2 (gate) wejścia sygnałów aktywujących (bramkujących) sterowane zliczaniem
RD (Read) - na tym wejściu procesor wymusza niski poziom chcąc odczytywać dane z wewnętrznych rejestrów.
WR (Write) - na tym wejściu procesor wymusza niski poziom chcąc zapisać dane do rejestrów wewnętrznych
CS (chip select) - wejście wyboru elementów (niski poziom wybiera układ),
OUT0 - OUT2 (output) - wyjścia liczników (generatorów).
Rejestr buforowy danych służy do:
programowania układu,
ładowania liczników układu,
odczytywania zawartości liczników14.
Wszystkie możliwości sterowania za pomocą pamięci sygnałów sterujących przedstawia tabela 6.
Układ 8253 ma trzy 16 - bitowe liczniki odejmujące, których zawartości początkowe można ustawić. Każdy licznik może być indywidualnie zaprogramowany do liczenia w kodzie binarnym prostym lub w kodzie BCD. Zliczaniu podlegają opadające zbocza sygnałów wprowadzanych na wejścia CLK. Sygnały te mogą być zarówno sygnałami wyjściowymi generatora impulsów (licznik pracuje wtedy jako zegar odmierzający żądane przedziały czasu) jak i od sygnałów generowanych operiodycznie przez łatwe elementy zewnętrzne jak przyciski lub czujniki położenia (licznik pracuje wtedy jako licznik zdarzeń).
Zliczaniem impulsów można sterować za pomocą sygnału wejściowego GATE ( 1-zlicza).
Sposób generowania sygnału wyjściowego out każdego z liczników jest również programowany zgodnie z jednym z sześciu modułów (trybów). Tylko dwa z nich znajdują zastosowanie w Pe. Programowanie jest wykonywane na drodze wprowadzania do układu 8253 słowa sterującego. Format tego słowa przedstawia rys.19
MOD0 - żądanie przerwania po wyzerowaniu licznika. Po zaprogramowaniu trybu OUT=0. Po załadowaniu wybranego licznika pozostaje OUT=0, do chwili wyzerowania licznika sprawia, że OUT=1 jest do chwili ponownego załadowania licznika.
MOD1 - pojedynczy impuls o programowanej długości. Impuls następujący za zboczem narastającym (GATE ) sprawia, że OUT=0. wyzerowanie licznika sprawia, że OUT=1. zerowy impuls wyjściowy może być wydłużony przez następne zbocze narastające na wejściu CATE. Po każdym takim zboczu OUT=0 dla całkowitej liczby impulsów wprowadzonej do licznika.
MOD2 - dzielnik impulsów. OUT=1 dla jednego okresu sygnału CLK, przy czym między kolejnymi impulsami OUT=0 musi znajdować się u impulsów CLK, gdzie jest zawartością początkową licznika.
MOD3 - generator impulsów. MOD3 jest podobny do MOD2 z tą różnicą, że OUT=1 jest po chwili zmniejszenia początkowej zawartości licznika do połowy, lub w przypadku nieparzystej zawartości początkowej do wartości (n-1)/2
MOD4 - programowo generowany pojedynczy impuls jednostkowy. Po zaprogramowaniu modu OUT=1. po załadowaniu licznika rozpoczyna się zmniejszanie jego zawartości. Wyzerowanie licznika generuje pojedynczy impuls OUT=0.
MOD5 - sygnałowo generowany pojedynczy impuls jednostkowy. W odróżnieniu od MOD4 zmniejszenie zawartości licznika odbywa się po narastającym zboczu sygnału GATE. Wyzerowanie licznika generuje pojedynczy impuls jednostkowy OUT=0. Chwila pojawienia się tego impulsu może być oddalona przez następne zbocza narastające GATE. Po każdym takim zboczu OUT=1 dla całkowitej liczby impulsów wprowadzonej do licznika.
Po wpisaniu słowa sterującego wybranego licznika należy wpisać jeden lub dwa bajty jego zawartości początkowej. Wpisywanie to musi się odbywać zgodnie z deklaracjami przedstawionymi przez bity RL1 i RL0 słowa sterującego. Załadowanie licznika bajtami zerowymi sprawi, że będzie on zliczał impulsy od ponownego wyzerowania a więc do 216 impulsów w przypadku kodu binarnego prostego lub do 104 dla kodu BCD.
Odczyt stanów liczników może być wykonany na dwa sposoby:
z uprzednim wstrzymaniem zliczania impulsów na czas odczytu za pomocą sygnałów GATE.
Wykorzystuje się w tym celu sygnału I/OR, przy czym:
pierwszy sygnał I/OR do najmniej znaczący bajt licznika;
drugi sygnał I/OR dostarcza najbardziej znaczący bajt licznika;
bez wstrzymania zliczania impulsów na czas odczytu. W tym celu należy zawartość licznika przed jej odczytaniem wprowadzić do odpowiedniego rejestru zatrzaskowego, co zapewnia bezbłędny odczyt. Dokonuje się to automatycznie, jeżeli tylko w słowie sterującym tego zażądamy na drodze odpowiedniego wyboru bitu RL0 iRL1. Należy zawsze wykonać wszystkie zaprogramowane w słowie sterującym operacje czytania przed przystąpieniem do zmiany zawartości początkowej licznika.
WYKŁAD 7
KOPROCESORY ARYTMETYCZNE
Wstęp.
Koprocesor arytmetyczny jest układem, który przyspiesza wykonywanie obliczeń arytmetycznych. Wspomaga procesor centralny, którym może być mikroprocesor 8086, 80286, 80386. Koprocesor 8087, mimo że wyposażony jest w zestaw rejestrów dostępnych programowo, oraz realizuje zestaw rozkazów, nie jest zdolny do samodzielnego wykonywania programu. Jest on jedynie rozszerzeniem procesora centralnego. W połączeniu z układem 8086 tworzy jeden procesor, którego lista rozkazów oraz lista rejestrów są złożeniem list rozkazów został podkreślony w nazwie -koprocesor. Tak więc dołączenie układu 8087 do układu 8086 daje procesor dwuukładowy, który z punktu widzenia programisty powinien być uważany za całość, gdyż program dla takiego procesora zawiera ustawione w dowolnym porządku rozkazy realizowane bądź przez 8086, bądź przez 8087. Jednak podział procesora na dwa układy jest widziany przez programistę z dwóch przyczyn:
Bezpośredni przepływ danych między rejestrami 8086 i 8087 jest niemożliwy. Jeżeli także przesłanie jest konieczne, powinno być wykonane za pośrednictwem pamięci.
Oba układy mogą pracować równocześnie. Niektóre operacje wykonywane przez 8087 są czasochłonne (przykładowo kilkadziesiąt mikrosekund). W tym czasie układ 8086 może realizować ciąg rozkazów. Takie rozwiązanie zmusza do stosowania synchronizacji widocznej z poziomu asemblera (instrukcja WAIT).
Schemat blokowy
Schemat blokowy układu 8087 przedstawia rys.1. Układ składa się z:
Bloku współpracy z magistralą -zapewnia pobieranie rozkazów i argumentów ,wysyłanie wyników do pamięci, a także pozwala wysyłać do pamięci stan układu i odtwarzać go.
Bloku wykonawczego -wykonuje operacje na argumentach, które są umiejscowione w bloku rejestrów zorganizowanym w stos. Rejestry stosowane są rejestrami 80 -bitowymi.
Duża szerokość szyn wewnętrznych i układów arytmetycznych pozwala uzyskać dużą szybkość przy zachowaniu bardzo dobrej precyzji obliczeń. 16 -bitowy rejestr znaczników podzielony jest na osiem dwubitowych pól, charakteryzujących zawartości rejestrów stosu.
Zasady współpracy z procesorem
Lista rozkazów układu 8086 zawiera rozkaz ESC (Escape) umożliwiający rozszerzenie listy rozkazów o rozkazy realizowane w koprocesorze.
Instrukcja ESC z punktu widzenia mikroprocesora 8086 jest instrukcją o postaci:
1 |
1 |
0 |
1 |
1 |
X X X |
MOD |
X X X |
R/M |
Postać kodu instrukcji Escape.
Pięć najstarszych bitów stanowi kod instrukcji Esc. W drugim bajcie występują pola MOD i R/M.
Pole MOD informuje o ewentualnym istnieniu kolejnych bajtów instrukcji wykorzystywanych przy obliczaniu adresu argumentu.
Pole R/M opisuje tryb adresowania.
Pozostałe bity nie są analizowane przez układ 8086 i są używane do zakodowania rozkazu dla układu 8087.
Przebieg wykonywania programu:
Mikroprocesor 8086 kolejno pobiera i wykonuje rozkazy. W momencie napotkania instrukcji ESC na podstawie bitów z pól MOD i R/M pobiera ewentualnie jeszcze jeden lub dwa bajty parametru DISP i oblicza adres fizyczny danej. Po obliczeniu adresu wysyła go na szynę adresową i wykonuje tzw. sztuczny odczyt z pamięci. Odczyt ten jest sztuczny, gdyż układ 8086 nie wykorzystuje danej pobranej w ten sposób z pamięci. Lecz przechodzi do wykonania następnego rozkazu. W czasie wykonywania programu przez układ 8086, układ 8087 analizuje strumień instrukcji wychwytując instrukcję ESC. Jest to czynność złożona, ponieważ ze względu na istnienie kolejki rozkazów w układzie 8086 moment pobrania instrukcji ESC nie jest momentem jej wykonania. W tym celu układ 8087 ,poza obserwacją szyny danych o cyklach maszynowych FETCH musi znać sygnały S2 S1 S0(stan 100). Stan kolejki rozkazów jest podawany przez układ 8086 na liniach 0S1 i 0S0. Dodatkowo układ 8087 bada także sygnał A19/S6 za pomocą którego może odróżnić cykle FETCH mikroprocesora 8086 od cyklu FETCH, które mogą być ewentualnie generowane przez dołączony do szyny lokalnej procesor we/wy. Dla 8086 sygnał S6 jest =0. Jeżeli koprocesor zaobserwuje że układ 8086 wykonuje rozkaz ESC, to w czasie sztucznego odczytu pobiera pierwszy bajt lub słowo danej, a jednocześnie zapamiętuje adres, dzięki czemu w czasie wykonywania rozkazu może sprowadzić kolejne bajty słowa danej z pamięci. Należy tu zauważyć ,że danymi dla koprocesora są przeważnie liczby, reprezentowane w pamięci ciągami wielobajtowymi. Niektóre rozkazy ESC rozkazują koprocesorowi przesłanie danej do pamięci. Także i wówczas układ 8086 wykonuje sztuczny odczyt, dzięki czemu koprocesor może zapamiętać adres wyliczony w układzie 8086, pod który następnie prześle dane.
Reasumując, można powiedzieć, że z punktu widzenia układu 8086, rozkaz ESC jest równoznaczny rozkazowi „nie rób nic”, gdyż nie zmienia stanu zasobu, jednak mikroprocesor wyznacza adres fizyczny pobierając w tym celu (jeżeli potrzebuje) jeden lub dwa kolejne bajty parametru DISP (rys.2). Adres ten jest przechwytywany przez koprocesor i umożliwia pobranie lub wysłanie danej do pamięci, w zależności od kodu rozkazu dla układu 8087, zawartego na bitach zawartego symbolami x (rys.2). Rys. 4 pokazuje sposób dołączenia koprocesora. Po pobraniu i zdekodowaniu rozkazu, koprocesor przechodzi do wykonywania go. W tym czasie 8086 pobiera kolejny rozkaz. Jeżeli pobrany przez koprocesor rozkaz wymaga współpracy z pamięcią, koprocesor musi ubiegać się o dostęp do magistrali lokalnej. Koprocesor wysyła żądanie dostępu do magistrali za pomocą końcówki RQ/GT0. Końcówka RG/GT1 8086 nie może być w tym celu użyta. Jest ona przeznaczona do przyjmowania żądań dostępu do innych procesorów dołączonych do szyny lokalnej. Dołączenie drugiego koprocesora 8087 nie ma sensu, natomiast możliwe jest dołączenie jeszcze jednego lub dwóch procesorów we/wy RQ/GT0 koprocesora 8087, a drugi do we/wy RQ/GT1 mikroprocesora 8086. Jeżeli w czasie realizacji rozkazu koprocesor 8087 potrzebuje współpracy z pamięcią musi uzgodnić chwilę przejęcia magistrali za pomocą we/wy RQ/GT0. Jeżeli inny procesor zgłosi do 8087 żądanie dostępu do magistrali za pomocą końcówki RQ/GT1 to jeżeli koprocesor nie korzystał w danej chwili z magistrali -przekaże to żądanie do układu 8086. Zgłaszanie żądania dostępu przez układ 8087 wydłuża czas oczekiwania na dostęp o dwa takty zegara w stosunku do zgłoszenia żądania bezpośredniego do układu 8086.
Zgłoszenia dostępu do magistrali przesyłane z zewnątrz mają dla koprocesora wyższy priorytet niż jego własny. Tak więc w przypadku, gdy żądanie zewnętrzne przyjdzie w czasie, gdy koprocesor będzie korzystał z magistrali, zakończy on bieżący cykl współpracy z pamięcią i przekaże magistralę procesorowi przesyłającemu żądanie z zewnątrz. Koprocesor automatycznie dokonuje właściwej rekonfiguracji swoich układów współpracy z szyną. W tym celu, w czasie trwania pierwszego cyklu FETCH po ustąpieniu sygnału RESET bada stan sygnału na swojej końcówce BHE/S7, która jest połączona z końcówką 34 mikroprocesora. W mikroprocesorze 8086 jest to wyjście BHE/S7.
1.4 Synchronizacja programowa.
Adres efektywny
Rejestr segmentowy 0000
Sumator
Rejestr adresu pamięci