Architektura Systemów Komputerowych - Instrukcja do laboratorium nr 6 i 7
Autor: Mariusz Wiśniewski


  1. Architektura systemu komputerowego - układ sterujący
    Jednym z elementów mikroprocesora jest układ sterujący, którego zadaniem jest odpowiednie włączanie lub wyłączanie rejestrów lub bloków funkcjonalnych. Najczęściej układ sterujący jest połączony z dekoderem instrukcji. Na podstawie pobieranych rozkazów układ sterujący podejmuje decyzję o tym jaki w danym momencie blok funkcjonalny ma być aktywny. Poniżej zostało przedstawione słowo instrukcji z pewnego procesora. Przy pomocy tego słowa zostały zakodowane następujące instrukcje:
    • dodawanie dwóch rejestrów wraz ze wskazaniem przeznaczenia wyniku,
    • odjęcie dwóch rejestrów wraz ze wskazaniem przeznaczenia wyniku,
    • dodanie liczby do rejestru,
    • odjęcie liczby od rejestru,
    • dodanie liczby do akumulatora,
    • odjęcie liczby od akumulatora,
    • wyzerowanie jednego z rejestrów,
    • negacja wartości jednego z rejestrów,
    • ładowanie danej zakodowanej w instrukcji do jednego z rejestrów lub akumulatora,
    • odczyt jednego z rejestrów lub akumulatora.

    Słowo instrukcji:

    |kkk|d|aa|bb|llllllll|

    gdzie:
    kkk- 3 bity oznaczające kod instrukcji,
    d- bit informujący o rozkazie z domyślnymi argumentami,
    aa- 2 bity oznaczające numer pierwszego rejestru,
    bb- 2 bity oznaczające numer drugiego rejestru,
    llllllll- 8 bitów oznaczających wartość natychmiastową,

    Wiadomo, że każdy rozkaz wykonuje się w 5 cyklach zegara. Z przedstawionych informacji należy zbudować fragment układu wykonawczego oraz wskazać sposób sterowania poszczególnych elementów tego układu. Z opisu instrukcji oraz opisu rozkazów wynika, że układ posiada 4 uniwersalne rejestry oraz akumulator. Do powyższych założeń został zaproponowany następujący układ:



    Do układu został zaproponowany następujący sposób kodowania instrukcji:

    kkk d aa bb llllllll Instrukcja
    000 0 aa bb - - - - - -l1l0 Rl1l0 = Raa+Rbb, gdzie nr rejestru określają l1l0 z pola wartości natychmiastowej
    001 0 aa bb - - - - - -l1l0 Rl1l0 = Raa-Rbb, gdzie nr rejestru określają l1l0 z pola wartości natychmiastowej
    010 0 -- -- - - - - - -l1l0 Rl1l0 = 0, gdzie nr rejestru określają l1l0 z pola wartości natychmiastowej
    011 0 -- -- - - - - - -l1l0 Rl1l0 = not Rl1l0, gdzie nr rejestru określają l1l0 z pola wartości natychmiastowej
    000 1 -- -- l7l6l5l4l3l2l1l0 A = A+L
    001 1 -- -- l7l6l5l4l3l2l1l0 A = A-L
    100 0 aa -- l7l6l5l4l3l2l1l0 Raa = Raa+L
    101 0 aa -- l7l6l5l4l3l2l1l0 Raa = Raa-L
    110 0 aa -- l7l6l5l4l3l2l1l0 Raa = L
    110 1 -- -- l7l6l5l4l3l2l1l0 A = L
    010 1 -- -- - - - - - - - - A = 0
    011 1 -- -- - - - - - - - - A = not A
    111 0 aa -- - - - - - - - - WY = Raa
    111 1 -- -- - - - - - - - - WY = A

    gdzie:
    aa- numer rejestru: 0 = R0, 1 = R1, 2 = R2, 3 = R3,
    bb- numer rejestru: 0 = R0, 1 = R1, 2 = R2, 3 = R3,
    lx- x-ty bit wartości natychmiastowej,
    -- wartość nieistotna,
    L- wartości natychmiastowa,

    Zaprojektowany układ posiada wejście z dekodera instrukcji, przez które podawana jest wartość natychmiastowa oraz wyjście w postaci magistrali. W zaprojektowanym układzie jest dodatkowo możliwe wykonywanie następujący operacji: wyzerowanie akumulatora oraz negacja akumulatora.

  2. Zadania do samodzielnego wykonania

    Do formatu instrukcji oraz wykonywanych operacji zaproponować układ wykonawczy oraz zakodować rozkazy, wskazać jakie są wejścia oraz wyjścia układu. Omówić możliwości rozszerzenia układu o nowe instrukcje bez zmian konstrukcyjnych układu.

    Uwaga!
    Nowe instrukcje nie powinny wyniknąć z powodu zbędnej nadmiarowości w układzie.

    1. Format instrukcji: |kk|aaa|llllllll|, operacje: wprowadzanie wartości natychmiastowej do rejestru, dodawanie wartości natychmiastowej do rejestru, dodawanie dwóch rejestrów, dodawanie/odejmowanie pamięci i wartości natychmiastowej, wprowadzanie wartości rejestru do pamięci.
      Ponadto należy określić, która część rozkazu i pod jakimi warunkami będzie określała adres pamięci.
    2. Format instrukcji: |kkkkk|llllllll|, operacje: wprowadzanie wartości natychmiastowej do jednego z trzech rejestrów lub akumulatora, dodawanie wartości natychmiastowej do rejestru, zerowanie rejestrów, odczyt i zapis pamięci.
      Ponadto należy określić tryby adresowania pamięci.
    3. Format instrukcji: |kk|llllllll|llllllll|, operacje: wprowadzanie wartości natychmiastowej do jednego z ośmiu rejestrów lub akumulatora, dodawanie/odejmowanie rejestrów od siebie, wykonywanie transferów pamięć-pamięć, wykonywanie sumy logicznej i różnicy symetrycznej na rejestrze i wartości natychmiastowej.
      Ponadto należy określić tryby adresowania pamięci.
    4. Format instrukcji: |kkkk|aa|bb|cccc|, operacje: wprowadzanie wartości natychmiastowej do jednego z czterech rejestrów lub akumulatora, dodawanie/odejmowanie rejestrów od siebie, wykonywanie transferów pamięć-pamięć w trybie adresowania rejestrowego z 4-bitowym selektorem segmentu danych dla miejsca przeznaczenia.
      Ponadto należy określić, która część rozkazu i pod jakimi warunkami będzie określała wartość natychmiastową.
    5. Format instrukcji: |kkk|aa|bb|llllllllllll|, operacje: wprowadzanie wartości natychmiastowej do jednego z czterech rejestrów o długości połowy słowa maszynowego lub jednego z dwóch rejestrów o długości tego słowa (słowo maszynowe ma długość 16 bitów), dodawanie/odejmowanie rejestrów, zapis/odczyt pamięci z selektorami segmentu wybieranymi z rejestrów.
      Ponadto należy określić, która część rozkazu i pod jakimi warunkami będzie określała wartość natychmiastową w przypadku odpowiednich rejestrów.
    6. Format instrukcji: |k|llllllll|, operacje: wprowadzanie wartości natychmiastowej do jednego z czterech rejestrów, dodawanie/odejmowanie rejestrów, wykonanie sumy logicznej, iloczynu logicznego na dwóch rejestrach, wykonanie negacji rejestru, transfer pamięć-rejestr.
      Ponadto należy określić, która część rozkazu i pod jakimi warunkami będzie określała wartość natychmiastową.
    7. Format instrukcji: |kkk|aaa|llllllll|, operacje: wprowadzanie wartości natychmiastowej do jednego z ośmiu rejestrów, dodawanie/odejmowanie rejestrów, porównanie rejestru i wartości natychmiastowej, porównanie rejestru z rejestrem, zapis/odczyt pamięci, transfer rejestr-pamięć.
      Ponadto należy określić, która część rozkazu i pod jakimi warunkami będzie określała wartość natychmiastową.
    8. Format instrukcji: |kk|llllllll|, operacje: wprowadzanie wartości natychmiastowej do rejestru lub akumulatora, zapis/odczyt pamięci adresowanej pośrednio, porównanie pamięci adresowanej pośrednio i wartości natychmiastowej, porównanie rejestru i akumulatora, dodawanie/odejmowanie rejestru i akumulatora.
      Ponadto należy określić, która część rozkazu i pod jakimi warunkami będzie określała wartość natychmiastową.

    * Układ porównujący posiada dwa wejścia oraz wyjścia informujące o wyniku porównania: >, < lub =.
    ** Pamięć posiada wejścia danych, wyjścia danych oraz wejścia adresowe i wejścia sterujące. Wejścia sterujące pamięci zazwyczaj są przyłączane do układu wyjść układu sterującego mikroprocesora, a wejścia/wyjścia danych i wejścia adresowe są połączone z magistralami mikroprocesora. Na potrzeby laboratorium można przyjąć, że pamięć zachowuje się jak adresowalny blok rejestrów, w którym wejścia sterujące są połączone z układem sterującym US.
    *** Pamięć może być adresowana także wartością pochodzącą z rejestrów.