Podręcznik
4. Układy z pamięciami
4.2. Modyfikacja adresu
Niech A = áV, S, δ, lñ będzie automatem (zupełnym lub niezupełnym), gdzie: V – zbiór liter wejściowych, S – zbiór stanów wewnętrznych, d – funkcję przejść, a l – funkcja wyjść. Przyporządkujmy (w sposób wzajemnie jednoznaczny) elementowi (v, s) z dziedziny funkcji przejść automatu liczbę naturalną ze zbioru K = {1, …, <i>t </i>= </span><span style="line-height:150%"><span style="font-family:Symbol">ú</span></span><i><span style="line-height:150%">D</span></i><sub><span style="line-height:150%"><span style="font-family:Symbol">d</span></span></sub><span style="line-height:150%"><span style="font-family:Symbol">ú</span></span><span style="line-height:150%">}. Oznaczmy odwzorowanie Dd ® K przez K i określmy na zbiorze K podział charakterystyczny Pc w następujący sposób: do jednego bloku B podziału Pc zaliczamy te elementy z K, będące obrazami (przy odwzorowaniu K) takich par (v, s) z Dd, którym funkcja przejść d przyporządkowuje taki sam stan s' z S.
Na przykład dla automatu o tablicy przejść podanej w tablicy 4.35a i odwzorowania K podanego w tablicy 4.35b podział Pc ma następującą postać:
Tablica 4.35
Niech P = {<i>P</i><sub>1</sub>, …, <i>P<sub>w</sub></i>} będzie zbiorem dwublokowych podziałów na K, gdzie w spełnia nierówność:
élog2úSúù £ w < élog2úSúù + élog2úVúù
Oznaczmy przez (B1, …, Bi, …, Bt) bloki iloczynu podziałów P1 × P2 ×…× Pw . Ustalonej komórce pamięci (rys. 4.15) odpowiada zawsze jej adres w UMA – wektor (a1, …, aw), który tu będzie wyznaczany w sposób następujący: i-ta składowa wektora (a1, …, aw) odpowiadająca elementom k ze zbioru Bi jest 0, jeśli Bi należy do pierwszego bloku podziału Pi, natomiast 1 – jeśli Bi należy do drugiego bloku podziału Pi.
Zgodnie ze schematem z rys. 4.15 ustalonej komórce pamięci są przyporządkowane tylko takie elementy z K, którym odpowiadają pary (v, s) o tej samej wartości funkcji przejść d automatu. W związku z tym adresy komórek spełniających powyższy warunek wyznaczymy za pomocą podziałów ze zbioru P wtedy i tylko wtedy, gdy:
P = P1 × P2 ×…× Pi ×…× Pw £ Pc
przy czym liczba zajętych komórek (liczba słów) pamięci ROM będzie 2w ´ p, gdzie p = élog2÷S÷ù.
Poszczególnym podziałom Pi na K, spełniającym powyższy warunek, odpowiadają tym samym zmienne adresowe a1, …, aw , wytwarzane w układzie adresowania UMA. Przy ustalonym kodowaniu stanów wewnętrznych i liter wejściowych automatu, zmienne te są określonymi funkcjami zmiennych wewnętrznych q i zewnętrznych x tego automatu, a ustalenie podziałów Pi na K zapewniających najprostszy – przy danym w – układ adresowania nie sprawia trudności. Istotną rolę w syntezie układu UMA będzie spełniać pojęcie zgodności podziałów na zbiorze K z podziałami na zbiorze stanów S lub zbiorze wejść automatu A = áV, S, d, lñ.
Podział P na zbiorze K nazywamy zgodnym z podziałem p na zbiorze S wtedy i tylko wtedy, gdy dla dowolnych wejść va, vb warunek, że si i sj należą do jednego bloku podziału p implikuje warunek, że elementy z K przyporządkowane odpowiednio parom (va, si) oraz (vb, sj) należą do jednego bloku podziału P.
Podział P na K nazywamy zgodnym z podziałem q na V wtedy i tylko wtedy, gdy dla dowolnych stanów sa, sb warunek, że vi, vj należą do jednego bloku podziału q implikuje warunek, że elementy z K przyporządkowane parom (vi, sa) oraz (vj, sb) należą do jednego bloku podziału P. W szczególności podział P na zbiorze K może być zgodny ze zbiorem {</span><span style="line-height:150%"><span style="font-family:Symbol">p, q</span></span><span style="line-height:150%">}, jeśli jest zgodny zarówno z podziałem p, jak też q. Natomiast podział P będziemy nazywać zgodnym ze zbiorem {p<sub>1</sub>,</span></span><span style="line-height:150%"> …</span><span style="line-height:150%"><span style="font-family:Symbol">,</span></span> <span style="line-height:150%"><span style="font-family:Symbol">p<sub>a</sub>} podziałów na S ({</span><span style="line-height:150%"><span style="font-family:Symbol">q</span></span><sub><span style="line-height:150%">1</span></sub><span style="line-height:150%">, …, </span><span style="line-height:150%"><span style="font-family:Symbol">q<sub>b</sub></span></span><span style="line-height:150%">} podziałów na V) wtedy i tylko wtedy, gdy P jest zgodny z podziałem p: p = p1 × p2 ×…× pa (gdy P jest zgodny z podziałem q: q = q1 × q2 ×…× qb).
Na przykład dla automatu o tablicy przejść podanej w tablicy 4.35a i funkcji K podanej w tablicy 4.35b podział:
jest zgodny z podziałem natomiast:
jest zgodny ze zbiorem podziałów {</span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:Symbol"><span style="color:black">p, q</span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black">}: ,
Obecnie przedstawimy metodę selekcji podziałów na K umożliwiającą uproszczenie układu adresowania pamięci dla układu o schemacie blokowym pokazanym na rys. 4.15, w którym w (liczba zmiennych adresowych) spełnia warunek:
élog2úSúù £ w < élog2úSúù + élog2úVúù
Punktem wyjścia rozważań będzie zakodowana tablica przejść automatu A = áV, S, d, lñ, gdzie élog2úSúù = p, élog2úVúù = n. Załóżmy, że podziały kodujące stany wewnętrzne są p1, …, pp, natomiast podziały kodujące wejścia są q1, …, qn. Dla każdego podziału p i każdego podziału q znajdujemy zgodny z nimi podział P. W celu zapewnienia jednoznaczności kodowania zmiennych adresowych a1, …, aw i jednocześnie odpowiedniego przyporządkowania elementów ze zbioru K – przy ustalonej funkcji K –poszczególnym komórkom pamięci, należy utworzyć w podziałów P na zbiorze K takich, że:
P1 × P2 ×…× Pw £ Pc
gdzie Pc jest podziałem charakterystycznym automatu A.
Proces generacji podziałów P ułatwia pojęcie r-przydatności podziału (zbioru podziałów) P względem podziału Pc (porównaj rozdz. 3). Zauważmy bowiem, że warunek 4-1 mogą spełniać wyłącznie takie podziały P, które są r-przydatne względem Pc, gdzie r £ w.
Wszystkich podziałów P, zgodnych z podziałami p oraz q ustalonymi przez kodowanie automatu A, jest n + p. Oznaczmy je przez Pz = {<i>P</i><sub>1</sub>, …, <i>P<sub>n</sub></i></span><sub><span style="line-height:150%"><span style="font-family:Symbol">+</span></span></sub><i><sub><span style="line-height:150%">p</span></sub></i><span style="line-height:150%">}. Sytuacja optymalna będzie więc wtedy, gdy w zbiorze Pz istnieje w-przydatny (względem Pc) podzbiór. W tym przypadku każda zmienna adresowa a będzie funkcją jednej zmiennej – wewnętrznej q albo zewnętrznej x – automatu A. Jeśli ze zbioru Pz nie można wyselekcjonować w-elementowego podzbioru w-przydatnego względem Pc, to do dalszych obliczeń należy wybrać u-przydatny (względem Pc) podzbiór , gdzie u = max. Pozostałe w – u podziały należy dobrać tak, aby:
Oczywiście podziały nie należą do zbioru Pz. Odpowiednia realizacja automatu jest przedstawiona na rys. 4.16. W układzie z tego rysunku wejścia adresowe a1, …, au są funkcjami jednej zmiennej wewnętrznej q albo zewnętrznej x automatu, natomiast wejścia au+1, …, aw są funkcjami, których argumenty należą do zbioru {<i>q</i><sub>1</sub>, …, <i>q<sub>p</sub></i>, <i>x</i><sub>1</sub>, …, <i>x<sub>n</sub></i>}.
Przyjmijmy, że strukturę układu UMA będziemy określać układem liczb (b1, …, bi, …, bw), gdzie bi jest liczbą argumentów zmiennej adresowej ai.
Rys. 4.16. Realizacja automatu wg warunku 4-1
Dla schematu automatu z rys. 4.16 mamy więc (b1, …, bu, bu+1, …, bw), przy czym bj = 1 dla 1 £ j £ u oraz 1 < bj £ m+p dla u < j £ w. Przy ustalonym kodowaniu stanów wewnętrznych i liter wejściowych automatu, najprostszą strukturę UMA (dla danego w oraz u = max) uzyskamy wtedy, gdy zmienne adresowe będą dobrane tak, że:
Z powyższych rozważań wynika, że największy wpływ na stopień skomplikowania układu adresowania ma ta jego część, w której zmienne adresowe są zależne od więcej niż jednego argumentu. Dlatego też najistotniejszy jest taki dobór kodowań stanów wewnętrznych i liter wejściowych automatu, przy którym można uzyskać maksymalny zbiór podziałów P (zgodnych z p albo q) w-przydatny względem Pc Do kodowania należy więc wybierać takie podziały, których r-przydatność względem Pc jest równa co najwyżej w. Kodowania te będziemy generowali korzystając z faktu, że r-przydatność podziału P zgodnego z podziałem p = (B1, …, Bi, …, Ba) jest równa:
gdzie: Bi – blok podziału p, – globalna funkcja przejść, a symbol oznacza liczbę elementów w najliczniejszym zbiorze . Analogiczne zależności można wyprowadzić dla podziałów P zgodnych z q, jak też zgodnych z {</span><span style="line-height:150%"><span style="font-family:Symbol">p, q</span></span><span style="line-height:150%">}.
Z powyższego wynika, że na zbiorze K ponumerowanych komórek pamięci sposób postępowania jest analogiczny do dekompozycji funkcji boolowskiej i polega na wykonaniu następujących czynności:
1. Wybór zbioru U (wstępne kodowanie)
2. Określenie podziałów:
P(U), Pg = P(V)
3. Wyznaczenie podziału Pg ³ Pg
P(U) · Pg £ PF
(czasami istnieje potrzeba wprowadzenia zbioru W)
4. Obliczenie funkcji G reprezentującej układ modyfikacji adresu oraz funkcji H reprezentującej adresowanie pamięci ROM.