laboratorium
Synteza strukturalna uk∏adów scalonych Materia∏y pomocnicze do çwiczeƒ 5 i 6
dr in˝. Adam Wojtasik
W konstrukcji wspó∏czesnych uk∏adów i systemów cyfrowych podstawowà zasadà jest za∏o˝enie, ˝e ka˝dy taki uk∏ad mo˝na zdekomponowaç na dwie wspó∏pracujàce ze sobà cz´Êci: cz´Êç operacyjnà (wykonawczà) i cz´Êç sterujàcà. Cz´Êç wykonawcza odpowiedzialna jest za przechowy-wanie i przesy∏anie danych oraz za przeprowadzanie wszelkich operacji na tych danych (operacjami tymi sà przede wszystkim ró˝nego rodzaju obliczenia – np. dodawanie, mno˝enie, porównywanie itd. W cz´Êci sterujàcej podejmowane sà decyzje dotyczàce sposobu dzia∏ania uk∏adu czyli ustalanie rodzaju i kolejnoÊci wykonania operacji oraz momentów czasowych, w których powinny one zostaç przeprowadzone. Cz´Êci sk∏adowe uk∏adu komunikujà si´ przesy∏ajàc mi´dzy sobà sygna∏y – uk∏ad operacyjny informuje uk∏ad sterujàcy o rezultatach wykonanych operacji (tzw. sygna∏y predykatowe), a uk∏ad sterujàcy w odpowiednich momentach wysy-
∏a do uk∏adu operacyjnego sygna∏y w∏àczajàce lub wy∏àczajàce wykonywa-nie poszczególnych operacji.
dane wejÊciowe
sterowanie
Uk∏ad
Uk∏ad
sterujàcy
operacyjny
predykaty
dane wyjÊciowe
Cz´Êç operacyjna uk∏adu cyfrowego budowana jest z bloków funkcjonalnych. Sà to uk∏ady cyfrowe wykonujàce pod wp∏ywem odpowiednich sygna∏ów sterujàcych pewne elementarne operacje na danych. Podstawo-wymi prostymi blokami funkcjonalnymi sà: 1) Multipleksery – przekazujà informacjź wybranego wejÊcia informa-cyjnego na wyjÊcie.
3) Komparatory – badajà relacje zachodzàce mi´dzy sygna∏ami poda-nymi na dwa wejÊcia (mniejszoÊci, wi´kszoÊci lub równoÊci).
4) Sumatory – dodajà do siebie liczby podane na ich wejÊcia.
5) Liczniki – zwi´kszajà lub zmniejszajà (liczniki rewersyjne) swà zawartoÊç w kolejnych taktach zegara. Zwykle liczniki majà tak˝e mo˝liwoÊç zerowania zawartoÊci i wpisywania liczby do wn´trza.
5) Rejestry – s∏u˝à do przechowywania informacji. Podobnie jak liczniki rejestry mo˝na na ogó∏ zerowaç. Odmianà rejestrów sà rejestry przesuw-ne majàce mo˝liwoÊç bitowego przesuwania swej zawartoÊci, co mo˝e byç wykorzystane na przyk∏ad do dzielenia lub mno˝enia przez 2, 4, 8 itd.
W uk∏adach cyfrowych mogà równie˝ byç stosowane bardziej z∏o˝one bloki funkcjonalne. Wymieniç mo˝na tu zarówno typowe bloki, takie jak
– 1 –
uk∏ady mno˝àce czy jednostki arytmetyczno-logiczne, jak i bloki specjali-zowane, niestandardowe, budowane na potrzeby danego uk∏adu.
Wszystkie rodzaje bloków funkcjonalnych mogà wyst´powaç w bardzo wielu wersjach ró˝niàcych si´ mi´dzy sobà listà wymaganych sygna∏ów sterujàcych, rodzajem zastosowanych szyn danych, trybem i sposobem reagowania na poszczególne sygna∏y, wyborem aktywnego zbocza zegara itp. Szczegó∏y projektu struktury uk∏adu cyfrowego sà zatem konse-kwencjà biblioteki bloków dost´pnej w stosowanej technice i technologii wytwarzania uk∏adu. (UWAGA! Bloki funkcjonalne dost´pne do wykonania niniejszego çwiczenia znajdujà si´ w bibliotekach stosowanego symulatora logicznego. Przed przystàpieniem do rozwiàzywania zadania studenci powinni zapoznaç siź listà tych bloków i ich specyfikacjà funkcjonalnà).
Budowa uk∏adu operacyjnego polega na doborze i odpowiednim po∏àczeniu bloków funkcjonalnych tak, by zapewniony by∏ prawid∏owy przep∏yw danych mi´dzy blokami i mo˝liwe wykonanie wszystkich potrzebnych operacji.
Ogólna zasada dzia∏ania uk∏adu to zapisywanie danych do rejestrów, przesy∏anie ich do bloków przetwarzajàcych (dodawanie, porównywanie itp.) i zapisywanie w rejestrach wyników tych przetworzeƒ. Zestaw takich czyn-noÊci nosi nazw´ przes∏aƒ mi´dzyrejestrowych (RTL – z ang. Register Transfer Level). O omawianym sposobie projektowania mówimy wić, ˝e jest to projektowanie na poziomie przes∏aƒ mi´dzyrejestrowych (na poziomie RTL).
Cz´Êç sterujàca systemu cyfrowego opisywana jest przez algorytm cha-rakteryzujàcy jej dzia∏anie. Najcz´Êciej algorytm ten przedstawiany jest graficznie w postaci sieci dzia∏aƒ. Mo˝emy wyró˝niç tu dwa rodzaje elementów sieci: wykonawcze i decyzyjne. W elementach wykonawczych umieszcza siśygna∏y sterujàce, które powinny byç wys∏ane do uk∏adu operacyjnego. Elementy decyzyjne s∏u˝à do wyboru kierunku dzia∏ania algorytmu. Kierunek zale˝y od stanu w jakim znajduje siúk∏ad operacyjny, czyli od wartoÊci predykatów dostarczonej przez ten uk∏ad. Jednà z naj-wa˝niejszych spraw zwiàzanych z projektowaniem uk∏adu sterujàcego i odpowiadajàcego mu algorytmu jest zapewnienie pobierania wartoÊci predykatów i wysy∏ania sygna∏ów sterujàcych w odpowiednich chwilach czasowych.
Sprz´towa realizacja uk∏adu sterujàcego mo˝e byç ró˝na, poczàwszy od zwyk∏ego uk∏adu sekwencyjnego (jeden ze sposobów syntezy takiego uk∏adu by∏ przedmiotem çwiczenia 3) przez tzw. rozdzielacz sterujàcy po specjalizowanà standardowà strukturź pamićià.
Rozdzielacz sterujàcy jest uk∏adem bardzo ∏atwym do zaprojektowania
– polega na zbudowaniu uk∏adu sterujàcego przez „mechaniczne” od-zwierciedlenie poszczególnych fragmentów sieci dzia∏aƒ z u˝yciem stan-dardowych uk∏adów sk∏adajàcych siź przerzutnika i kilku bramek.
Ogromnà wadà tego rozwiàzania jest jednak to, ˝e wymaga ono zastosowania jednego przerzutnika do ka˝dego stanu automatu, co niepotrzebnie znacznie zwi´ksza rozmiary uk∏adu. Praktyczne zastosowanie tego rozwià-
– 2 –
zania ogranicza si´ wić wy∏àcznie do bardzo ma∏ych uk∏adów i stosowane jest wy∏àcznie do szybkiego przetestowania koncepcji (do realizacji niniejszego çwiczenia u˝ycie rozdzielacza sterujàcego nie jest zalecane).
Projektowanie uk∏adu sterujàcego jako klasycznego uk∏adu sekwencyjnego polega na opisaniu i minimalizacji automatu, dla którego sygna∏ami wejÊciowymi sà predykaty, a sygna∏ami wyjÊciowymi – sygna∏y sterowania uk∏adem operacyjnym (patrz instrukcja do çwiczenia 3 – Uk∏ady synchro-niczne). Nale˝y tu jednak zauwa˝yç, ˝e post´powanie takie nastrćza sporo problemów w przypadku zwi´kszania siĺiczby sygna∏ów predykato-wych i liczby stanów automatu (w mniejszym stopniu wp∏ywa tu wzrost liczby sygna∏ów sterujàcych). Przy wzroÊcie stopnia z∏o˝onoÊci uk∏adu sterujàcego stosuje siźatem jego automatycznà syntez´ przez definiowanie go w jźyku opisu sprz´tu (VHDL, Verilog itp.).
Uk∏ad cyfrowy stosujàcy dla
uk∏adu sterujàcego standardo-
wà strukturź pamićià nosi
nazwúk∏adu mikroprogramo-
walnego (od mikroprogramu, ja-
licznik adresowy
predykaty
ki zapisywany jest w pamići).
Mo˝na wyró˝niç wiele struktur
uk∏adu sterujàcego z pamićià
– podstawowà jest pokazana
pami´ç
na rysunku obok. Sk∏ada sióna z pamići, licznika adreso-C
Y
B
wego i multipleksera predyka-
tów. Wiersze w pamići odpo-
wiadajà kolejnym stanom auto-
matu sterujàcego. To, w którym
sterowanie
stanie automat siźnajduje de-
terminowane jest przez zawartoÊç licznika adresowego wybierajàcà aktyw-ny wiersz pamići. Licznik mo˝e w kolejnym takcie zegara zwi´kszaç swój stan o jeden, co powoduje przejÊcie automatu do nast´pnego stanu (na-st´pny wiersz pamići). Do licznika mo˝na te˝ wpisaç z zewnàtrz nowy adres wskazujàcy dowolny wiersz pamići. Jest to równowa˝ne wykonaniu skoku w algorytmie. Wybór pomi´dzy inkrementacjà zawartoÊci licznika a wpisaniem tam liczby z zewnàtrz dokonywany jest przez wartoÊç podawanà z multipleksera predykatów – jeden z predykatów podawany jest na wyjÊcie multipleksera. W pamići znajdujà si´ trzy pola C, B i Y. W polu C zapisany jest multiplekserowy adres predykatu, który w danym stanie ma sterowaç licznikiem. Pole B zawiera adres skoku jaki ma byç wykonany w danym stanie automatu. ZawartoÊç tego pola przekazywana jest na wejÊcie licznika adresowego. W polu Y znajdujà siśygna∏y sterujàce, jakie w danym stanie powinny byç przekazane do uk∏adu wykonawczego.
Zdefiniowana w powy˝szy sposób struktura uk∏adu sterujàcego narzuca pewne ograniczenia co do sposobu budowania sieci dzia∏aƒ. Zauwa˝my,
– 3 –
˝e w ka˝dym wierszu pamići wyst´pujà pola C, B i Y, czyli inaczej mó-
wiàc w ka˝dym stanie automatu mamy do czynienia z wyborem predykatu, mo˝liwoÊcià wykonania skoku oraz z wysy∏aniem sygna∏ów sterujà-
cych. W ka˝dym stanie zatem musi wystàpiç zarówno element decyzyjny jak i element wykonawczy sieci dzia∏aƒ. Ponadto je˝eli uk∏ad nie wykonuje skoku zawsze przechodzi do nast´pnego stanu reprezentowanego przez nast´pny wiersz pamići. Oznacza to, ˝e zawsze stan nast´pny w automacie musi mieç numer o jeden wi´kszy od stanu aktualnego. Wszystkie te ograniczenia muszà byç Ai
uwzgl´dnione przy konstruowaniu sieci dzia∏aƒ i przy-sygna∏ sterujàcy
dzielaniu stanów automatu poszczególnym jej punktom.
tak
predy-
Reasumujàc sieç dzia∏aƒ mo˝e sk∏adaç si´ wy∏àcznie ze Ak
kat
nie
ÊciÊle okreÊlonych fragmentów zwanych mikroinstrukcja-A
mi. W rozwa˝anej przez nas strukturze uk∏adu sterujàce-i+1
go dozwolona jest tylko jedna mikroinstrukcja pokazana obok.
UWAGA! Do wykonania niniejszego çwiczenia studenci mogà wybraç dowolny sposób realizacji uk∏adu sterujàcego.
Szczegó∏owy sposób post´powania przy syntezowaniu uk∏adu cyfrowego podany zostanie na przyk∏adzie rozwiàzania prostego zadania. Zade-monstrowano tu sposób myÊlenia, jaki trzeba zastosowaç.
Zadanie: Zrealizowaç uk∏ad dzielenia ca∏kowitoliczbowego binarnych liczb A( x 0, x 1, ..., x ) i B(
). Dost´pne sà wy∏àcznie uk∏ady
n
x 0, x 1, ..., xn
wymienione wczeÊniej jako podstawowe proste bloki funkcjonalne.
(UWAGA! W bibliotece symulatora DesignWorks dost´pnych jest równie˝
kilka innych bloków funkcjonalnych – mo˝na je stosowaç przy rozwiàzywa-niu zadaƒ w trakcie çwiczenia).
W celu rozwiàzania zadania nale˝y opracowaç algorytm, który wspó∏-
gra∏by z naszymi mo˝liwoÊciami sprz´towymi. Oznacza to, ze wszystkie operatory zastosowane w algorytmie (a dok∏adniej w implementacji algorytmu) muszà odpowiadaç funkcjonalnie jakiemuÊ dost´pnemu elementowi elektronicznemu (blokowi funkcjonalnemu).
W przypadku gdybyÊmy chcieli napisaç program komputerowy rozwià-
zujàcy nasze zadanie (np. w jźyku C) algorytm wyglàda∏aby nast´pujàco (Algorytm 1):
1) int a = wczytaj wartoÊç liczby A;
2) int b = wczytaj wartoÊç liczby B;
3) int c = a/b; (podziel a przez b i wynik wpisz do c) W algorytmie tym zastosowano dwa typy operatorów: „=” (operator podstawienia) i „/” (operator dzielenia). Operator podstawienia jest równowa˝-
ny zastosowaniu w uk∏adzie wykonawczym rejestru (podstawienie wartoÊci zmiennej = wpisywanie liczby do rejestru), natomiast w dost´pnym nam
– 4 –
zestawie elementów nie ma bloku wykonujàcego dzielenie. Zatem budowa uk∏adu cyfrowego stosujàcego przedstawiony wy˝ej algorytm nie jest w naszym przypadku mo˝liwa.
Nie mo˝emy wprost zastosowaç operacji dzielenia, a zatem musimy od-powiedzieç na pytanie, czym mo˝emy to dzielenie zastàpiç. Inaczej mó-
wiàc jaki zestaw innych ni˝ dzielenie operacji mo˝na zastosowaç jako substytut dzielenia. Dzielenie liczby A przez liczb´ B odpowiada na pytanie ile razy B mieÊci si´ w A, czyli dzielenie mo˝emy zamieniç na zlicza-nie wystàpieƒ dzielnika w p´tli. Algorytm mo˝e polegaç na kolejnym odejmowaniu od liczby A liczby B a˝ do osiàgnićia zera. Liczba „odj´ç” jest wynikiem dzielenia. Zatem algorytm wyglàda nast´pujàco (Algorytm 2): 1) int a = wczytaj wartoÊç liczby A;
2) int b = wczytaj wartoÊç liczby B;
3) int licznik = 0;
4) je˝eli a < b skoƒcz;
5) a = a – b; (pomniejsz a o b)
6) licznik++; (zwi´ksz wartoÊç licznika o 1) 7) skocz do 4;
W algorytmie 2, w stosunku do algorytmu 1, zastosowanych zosta∏o kilka nowych operatorów: „<” (operator porównania), „++” (operator inkrementacji) i „–” (operator odejmowania). W zestawie dost´pnych bloków funkcjonalnych znajdujà si´ bloki odpowiadajàce dwóm z nich: komparator, który porównuje dwie liczby, oraz licznik, którego zawartoÊç mo˝na zwi´kszaç o 1 (ponadto licznik na ogó∏ ma mo˝liwoÊç zerowania, czyli operacj´ wstawiania liczby 0 do niego mo˝na zrealizowaç stosujàc odpowiedni sygna∏ sterujàcy – krok 3 algorytmu). Trzeci operator zastosowany w algorytmie 2 – odejmowanie – nie ma odpowiednika sprz´towego, co powoduje koniecznoÊç dalszych zmian algorytmu.
Jednym z mo˝liwych rozwiàzaƒ jest zamiana kroku 5 algorytmu 2 na ja-kiÊ ciàg operacji równowa˝nych odejmowaniu. Jest to mo˝liwe, lecz w naszym przypadku zbytnio skomplikowa∏oby i rozbudowa∏oby uk∏ad. Znacznie bardziej efektywna jest niewielka modyfikacja algorytmu polegajàca na zamianie odejmowania na dodawanie (Algorym 3): 1) int a = wczytaj wartoÊç liczby A;
2) int b = wczytaj wartoÊç liczby B;
3) int c = 0;
4) int licznik = 0;
5) je˝eli a < c skocz do 9;
6) c = c + b; (zwi´ksz c o b)
7) licznik++;
8) skocz do 5;
9) licznik--;
10) skoƒcz
– 5 –
Dodawanie („+”) ma swój odpowiednik sprz´towy – jest nim sumator, a zatem znikn´∏a koniecznoÊç budowania elementu odejmujàcego. Pojawi-
∏a si´ jednak pewna niedogodnoÊç, gdy˝ algorytm po przejÊciu wszystkich p´tli dodajàcych wyka˝e rezultat wi´kszy o 1 od wyniku dzielenia. Zasz∏a wić koniecznoÊç zastosowania do-
êród∏o wartoÊci A
êród∏o wartoÊci B
datkowego kroku (krok 9) w celu
zmniejszenia zawartoÊci licznika
RA
RB
przed wyprowadzeniem wyniku.
rejestr przechowujàcy
rejestr przechowujàcy
liczbÁ
liczb´ B
Skutkiem tego jest potrzeba u˝ycia
nieco bardziej skomplikowanego licz-
nika, który prócz zerowania i inkre-
∑
mentacji potrafi∏by równie˝ wykony-
sumator dodajàcy liczb´ B
do sumy czàstkowej C
waç funkcj´ dekrementacji. Osta-
tecznie jednak w algorytmie 3 wyst´-
RC
pujà ju˝ wy∏àcznie operatory, które
rejestr przechowujàcy
sumćzàstkowà C
mogà byç zrealizowane przez do-
st´pne bloki funkcjonalne. Mo˝na
zatem przystàpiç do projektowania
> <
L
struktury uk∏adu operacyjnego, który
komparator porównujàcy
licznik p´tli
sumĆ z liczbà A
przybiera kszta∏t podany na rysunku.
start
Sieç dzia∏aƒ odpowiadajàca algorytmowi 3, wspó∏pracujàca z pokazanym uk∏adem operacyj-RA := A
nym przedstawiona jest na rysunku obok.
RB := B
L := 0
RC := 0
W algorytmie nie zosta∏y uwzgl´dnione sygna∏y, które zwykle powinny wyst´powaç w budowanych tak
przez nas uk∏adach cyfrowych. Nie zosta∏y one RA < RC
wymienione w treÊci zadania, natomiast ich obec-nie
L := L – 1
noÊç z regu∏y jest potrzebna do prawid∏owego RC := RC + RB
L := L + 1
dzia∏ania uk∏adu. Mowa tu o sygna∏ach startu i za-stop
koƒczenia obliczeƒ. Projektowany przez nas uk∏ad powinien zaczàç obliczenia dopiero wtedy, gdy na wejÊciach pojawià si´ wartoÊci liczb A i B. Trzeba zatem dostarczyç mu dodatkowy sygna∏ mówiàcy o zaistnieniu tego faktu. Czas obliczania wyniku jest silnie zale˝ny od wartoÊci podanych liczb. Przyk∏adowo dzielenie 1000 przez 2 b´dzie trwa∏o oko∏o 10 razy nie
start ?
d∏u˝ej ni˝ dzielenie 100 przez 2. Konieczne za-tak
tem jest, by uk∏ad poda∏ do wiadomoÊci (na przy-RA := A
k∏ad stosujàc krótki impuls na odpowiednim wyj-RB := B
L := 0
Êciu) fakt zakoƒczenia obliczeƒ i ustalenia siŔC := 0
wyniku.
Zmodyfikowana sieç dzia∏aƒ uwzgl´dniajàca tak
RA < RC
sygna∏y startu i gotowoÊci oraz umo˝liwiajàca nie
L := L – 1
zastosowanie uk∏adu do wielokrotnych dzieleƒ
RC := RC + RB
podana jest na rysunku obok.
L := L + 1
wynik gotowy
– 6 –
Zaprojektowany uk∏ad znajduje wynik dzielenia ca∏kowitoliczbowego, czyli rozwiàzuje problem postawiony w treÊci zadania. Bli˝sza analiza wskazuje jednak, ˝e uk∏ad ma pewne w∏aÊciwoÊci, które rzutujà na mo˝li-woÊci wykorzystywania takiego uk∏adu jako elementu wi´kszego systemu cyfrowego. WspomnieliÊmy ju˝, ˝e zachodzi koniecznoÊç dekrementacji licznika po zakoƒczeniu obliczeƒ. Oznacza to,
˝e zawsze p´tla wykonuje si´ „o jeden raz za du˝o”, czyli czas obliczeƒ jest zawsze za d∏ugi nie
start ?
o czas potrzebny na wykonanie p´tli i dekre-tak
mentacji licznika. Nasuwa siźatem pytanie, RA := A
czy mo˝liwa jest taka modyfikacja uk∏adu, która RB := B
L := 0
usuwa∏aby tńiedogodnoÊç. Patrzàc na algo-RC := B
rytm i sieç dzia∏aƒ stwierdzamy, ˝e drobna zmiana polegajàca na inicjalizacji sumy czàst-tak
RA < RC
kowej (RC) wartoÊcià liczby B zamiast zerem nie
wyeliminowa∏aby koniecznoÊç wykonania do-RC := RC + RB
datkowej p´tli. Sieç dzia∏aƒ wyglàda∏aby wtedy L := L + 1
wynik gotowy
jak na rysunku obok.
Jak widaç zmiana w sieci dzia∏aƒ polega∏a wy∏àcznie na zmianie jednego znaku (0 na B). Zmiana ta jednak ma ogromny wp∏yw na uk∏ad operacyjny, gdy˝ w wersji przez nas zaprojektowanej nie ma mo˝liwoÊci zreali-zowania algorytmu zapisanego takà siecià dzia∏aƒ. Algorytm wymaga wykonania operacji RC := B. Wykonanie jej nie jest mo˝liwe, gdy˝ w uk∏adzie nie ma Êcie˝ki przekazujàcej sygna∏ mi´dzy êród∏em B a rejestrem C. Na-le˝y zatem zmodyfikowaç uk∏ad operacyjny dodajàc takà Êcie˝k´. W kon-sekwencji wyst´puje koniecznoÊç
dodania nowego bloku funkcjonal-
êród∏o wartoÊci A
êród∏o wartoÊci B
nego – multipleksera, który pozwa-
la∏by na wprowadzanie do rejestru
RA
RB
rejestr przechowujàcy
rejestr przechowujàcy
C wymiennie sygna∏u B lub sygna∏u
liczbÁ
liczb´ B
z sumatora. Zmodyfikowany uk∏ad
operacyjny przedstawiony jest obok.
Jak widzimy przyÊpieszenie obli-
∑
sumator dodajàcy liczb´ B
czeƒ przez nasz uk∏ad odby∏o si´
do sumy czàstkowej C
kosztem jego komplikacji i zwi´k-
szenia liczby zastosowanych ele-
mentów. Owocuje to zwi´kszeniem
multiplekser
pobieranej mocy, zajmowanej po-
wierzchni w uk∏adzie scalonym lub
na p∏ycie drukowanej itd. Przy reali-
RC
rejestr przechowujàcy
sumćzàstkowà C
zacji systemów cyfrowych takie sy-
tuacje sà czśte i zawsze projektant
musi wybieraç jakieÊ rozwiàzanie
lepiej od innych pasujàce do warun-
> <
L
komparator porównujàcy
licznik p´tli
sumĆ z liczbà A
ków pracy ca∏ego systemu. Do dal-
– 7 –
szych rozwa˝aƒ przyjmijmy, ˝e decydujemy sińa rozwiàzanie wi´ksze, ale za to szybsze.
Po zaprojektowaniu uk∏adu
operacyjnego i
zdefiniowaniu
rb – wczytywanie do RB
RA
RB
sieci dzia∏aƒ algorytmu sterujà-
cego tym uk∏adem przyst´puje-
ra – wczyty-
wanie do RA
my do realizacji uk∏adu sterujà-
cego. W tym celu najpierw musi-
∑
my okreÊliç liczbí rodzaj sy-
gna∏ów dochodzàcych do tego
m – wybór wejÊcia
uk∏adu (predykatów) oraz liczbí rodzaj sygna∏ów, które ten rc – wczytywanie do RC
uk∏ad powinien wysy∏aç. Prze-
RC
analizujmy pod tym kàtem bloki
funkcjonalne wchodzàce w sk∏ad
uk∏adu operacyjnego. Do uk∏adu
lc – zerowanie licznika
> <
L
tego powinniÊmy dostarczyç sy-
l+ – incrementacja licznika
gna∏y sterujàce zerowaniem re-
k – wynik porównania
jestru C i licznika, wczytywa-
niem do rejestrów, inkrementa-
cjà licznika oraz wyborem szyny danych w multiplekserze (patrz rysunek).
Ponadto konieczne jest generowanie sygna∏u gotowoÊci po zakoƒczeniu obliczeƒ (got). Ostatecznie ustalamy, ˝e wektor wyjÊciowy z uk∏adu sterujàcego musi mieç siedem bitów Y(ra,rb,rc,m,lc,l+,got). Uk∏ad operacyjny wysy∏a do uk∏adu sterujàcego sygna∏ b´dàcy wynikiem porównywania w komparatorze. Dodajàc do tego sygna∏ startu obliczeƒ stwierdzamy, ˝e do uk∏adu sterujàcego dochodzà dwa sygna∏y predykatowe.
Realizacja uk∏adu sterujàcego wymaga okreÊlenia stanów automatu w algorytmie dzia∏ania tego uk∏adu. W zale˝noÊci od tego, czy decydujemy sińa wersj´ Moore’a, czy Meally’ego, sposób zaznaczania stanów w sieci dzia∏aƒ jest nieco ró˝ny. Za∏ó˝my, ˝e w dalszym projektowaniu przyjmiemy wersj´ Moore’a (procedura budowy klasycznego automatu sekwencyjnego w tej wersji jest nieco ∏atwiejsza koncepcyjnie, a przedstawiona wczeÊniej struktura uk∏adu sterujàcego z pamićià dostosowana jest w∏aÊnie do wersji Moore’a).
Podstawowà zasadà przy zaznaczaniu stanów w algorytmie jest to, ˝e w automacie Moore’a poszczególne stany muszà „rozdzielaç” miejsca, gdzie wyst´pujà ró˝ne zawartoÊci wektora wyjÊciowego (ró˝ne wartoÊci sygna∏ów sterowania), a wartoÊci predykatów decydujà o przechodzeniu automatu mi´dzy stanami – trzeba zatem wpisaç stan równie˝ wsz´dzie tam, gdzie dochodzi jakaÊ strza∏ka wychodzàca z bloku decyzyjnego (z wyjàtkiem przypadku, gdy strza∏ka ta jest jedynà strza∏kà dochodzàcà do innego bloku decyzyjnego). Dla uk∏adu dzielenia ca∏kowitoliczbowego post´powanie wed∏ug powy˝szej zasady powoduje wpisanie do algorytmu pićiu stanów. Rysunek pokazuje sieç dzia∏aƒ uk∏adu sterujàcego z zazna-
– 8 –
Y0
Y0 – nic nie rób
(ra=0, rb=0, rc=0, m=–, lc=0, l+=0, got=0) nie
s
Y0
tak
0–
0
1
1–
Y1
Y1 – inicjuj rejestry i licznik
1
Y1
(ra=1, rb=1, rc=1, m=1, lc=1, l+=0, got=0)
– –
– –
2
2
Y2
Y2
Y2 – nic nie rób
(ra=0, rb=0, rc=0, m=0, lc=0, l+=0, got=0)
– –
–0
tak
k
Y4
–1
3
4
nie
4
Y3
3
Y4 – wynik obliczeƒ jest gotowy
Y4
(ra=0, rb=0, rc=0, m=–, lc=0, l+=0, got=1) Y3
Y3 – oblicz kolejnà sumí zwi´ksz zawartoÊç licznika (ra=0, rb=0, rc=1, m=0, lc=0, l+=1, got=0) czonymi stanami oraz wpisanymi wartoÊciami poszczególnych sygna∏ów sterujàcych. Obok przedstawiony jest odpowiadajàcy sieci dzia∏aƒ graf automatu, a poni˝ej zrealizowany w symulatorze DesignWorks schemat uk∏a-du sterujàcego zbudowanego z u˝yciem trzech przerzutników (patrz instrukcja do çwiczenia 3).
0
1
0
1
s
k
0
1
1
Q1
S
0
r a
D
Q
C
0
R Q
r b
0
r c
0
m
1
Q2
0
lc
S
D
Q
0
l+
C
Q
0
got
R
1
Q3
S
D
Q
C R Q
– 9 –
Realizacja uk∏adu sterujàce-
go z u˝yciem standardowej
Y0
Y0 – nic nie rób
(ra=0, rb=0, rc=0, m=–, lc=0, l+=0, got=0) struktury z pamićià wyma-tak
s
ga wprowadzenia do sieci
nie
dzia∏aƒ stanów w taki spo-
1
sób, by znalaz∏y si´ w tam
Y1
Y1 – inicjuj rejestry i licznik
wy∏àcznie struktury odpo-
(ra=1, rb=1, rc=1, m=1, lc=1, l+=0, got=0) tak
wiadajàce dost´pnym mi-
0
kroinstrukcjom. Tak zmody-
nie
fikowanà sieç dzia∏aƒ uk∏a-
2
du dzielenia przedstawiono
Y2
Y2 – nic nie rób
(ra=0, rb=0, rc=0, m=0, lc=0, l+=0, got=0) na rysunku.
tak
k
W stanie zerowym uk∏ad
nie
4
sterujàcy oczekuje na sy-
3
Y4 – wynik obliczeƒ jest gotowy
Y4
gna∏ rozpoczćia obliczeƒ.
(ra=0, rb=0, rc=0, m=–, lc=0, l+=0, got=1) Y3
tak
Y3 – oblicz kolejnà sumí zwi´ksz zawartoÊç licznika Poniewa˝ w dost´pnej mi-1
(ra=0, rb=0, rc=1, m=0, lc=0, l+=1, got=0) tak
1
kroinstrukcji przejÊcie do
nast´pnego stanu nast´pu-
je pod wp∏ywem zera w wartoÊci predykatu konieczne jest zanegowanie sygna∏u startu. W stanie pierwszym uk∏ad inicjuje zawartoÊç rejestrów wczytujàc liczby A i B. Multiplekser musi byç tak ustawiony, by liczba B przekazana zosta∏a na wejÊcie rejestru C. Budowa mikroinstrukcji wymaga sprawdzenia wartoÊci predykatu w ka˝dym stanie uk∏adu, mimo ˝e z sieci dzia∏aƒ nie wynika taka koniecznoÊç. W stanie pierwszym musimy zatem podaç jako predykat „0” po to, by mo˝na by∏o bezwarunkowo przejÊç do stanu o numerze nast´pnym. W stanie drugim dla odmiany we-d∏ug algorytmu nale˝y wy∏àcznie sprawdziç predykat k. Uk∏ad wykonawczy nie powinien nic w tym czasie robiç. Je˝eli predykat k nie jest spe∏niony uk∏ad przechodzi do stanu trzeciego, w którym zostaje obliczona nowa su-ma czàstkowa i powi´kszona zawartoÊç licznika. Po wykonaniu tych czyn-noÊci konieczne jest bezwzgl´dne przejÊcie do stanu drugiego by za-mknàç p´tl´. Skok bezwzgl´dny uzyskujemy podajàc „1” jako wartoÊç predykatowà. Stan czwarty, do którego uk∏ad przechodzi po spe∏nieniu wa-runku k, jest stanem sygnalizacji koƒca obliczeƒ. Po nim uk∏ad wraca (skok bezwzgl´dny) do stanu zerowego i ponownie oczekuje na rozpocz´-
cie dzia∏ania.
Uk∏ad sterujàcy jest zatem automatem o pićiu sta-nach (wymagane sà trzy bity do ich zakodowania), stan
predykat
adres skoku
wyjÊcie
czterech predykatach (dwa bity) i siedmiobitowym s∏o-0
0 0
0 0 0
0 0 0 – 0 0 0
wie wyjÊciowym. Potrzebna jest zatem dwunastobitowa 1
1 0
– – –
1 1 1 1 1 0 0
pami´ç o pićiu wierszach. Ostatnim etapem projekto-2
0 1
1 0 0
0 0 0 0 0 0 0
3
1 1
0 1 0
0 0 1 0 0 1 0
wania jest zapisanie mikroprogramu w tej pamići. Po 4
1 1
0 0 0
0 0 0 – 0 0 1
zakodowaniu predykatów (np. s => 00, k => 01,
„0” => 10, „1” => 11) zawartoÊç tablicy pokazana jest na rysunku obok.
c1 c0
b2
b1
b0
ra
rb
rc
m lc l+
got
– 10 –
¸atwo zauwa˝yç, ˝e cz´Êç kolumn w tablicy jest 0
0 0
0 0 0
0 0
identyczna (z dok∏adnoÊcià do kresek). Mo˝na zatem 1
1 0
– 1 1
0 0
2
0 1
1 0 0
0 0
usunàç je redukujàc tym samym rozmiar potrzebnej 3
1 1
0 1 0
1 0
pamići (rysunek obok).
4
1 1
0 0 0
0 1
Projekt uk∏adu operacyjnego i projekt uk∏adu sterujàcego (w przyk∏adzie realizowana w dwóch wersjach) c1 c0
b2
b1
b0
ra
rb
rc
m lc l+
got
jest rozwiàzaniem naszego zadania – uk∏ad zbudowa-ny wed∏ug tych danych b´dzie uk∏adem wykonujàcym dzielenie ca∏kowitoliczbowe.
– 11 –