Sunteți pe pagina 1din 20

1

Proiectarea automatelor
microprogramabile

1.1 INTRODUCERE

Arborii binari de decizie sunt reprezentări abstracte ale sistemelor automate


digitale. În acest capitol ne vom concentra asupra posibilităţilor concrete de
realizare a unor sisteme digitale pornind de la astfel de reprezentări.
Un arbore de decizie poate fi construit pornind de la o specificaţie a unui
sistem digital, după care se poate simplifica, astfel încât să îndeplinească
anumite condiţii de cost, sau descompune în mai mulţi arbori parţiali. Un arbore
de decizie poate fi implementat sub forma unui sistem hardware (cu
multiplexoare sau demultiplexoare) sau în manieră software. pentru ultima
modalitate se introduce limbajul L1, bazat pe două instrucţiuni: una de test şi
una de asignare. Acest limbaj este interpretat de un automat special: o maşină de
decizie binară.
În continuare se dezvoltă un limbaj L2 care poate fi folosit pentru
implementarea sistemelor iterative. Noul limbaj este format din L1 la care se
adaugă două noi instrucţiuni şi este interpretat de un alt automat: maşină de
decizie binară cu stivă.

1
1.2 IPOTEZE DE LUCRU

Ipoteza 1: Execuţie secvenţială

Vom considera, într-o primă etapă, exemplul unui comparator pentru două
cuvinte binare de câte doi biţi. Sistemul este de tip combinaţional dar
organigrama (Figura 1.1) sugerează faptul că ea este parcursă în timp, adică
secvenţial. Ne putem imagina un sistem secvenţial sincron care, la fiecare
semnal de ceas, interpretează un bloc al organigramei şi execută instrucţiunea pe
care acest bloc o conţine (instrucţiune de test sau de asignare). Execuţia unei
instrucţiuni de test determină citirea unei intrări, în timp ce execuţia unei
asignări conduce la furnizarea unei ieşiri. Spunem că testarea şi asignarea
constituie două primitive din specificaţia sistemului.
Cele două cuvinte binare sunt A  A1 A0 şi B  B1 B0 . Studiul organigramei din
Figura 1.1 ne conduce la concluzia că, după ce s-a determinat ieşirea
( A  B, A  B sau A  B ) pentru o anumită intrare dată ( A1 , B1 , A0 , B0 )
comparaţia se opreşte. În mod normal, procesul trebuie să se reia considerând
alte intrări, iar organigrama trebuie să conţină căi de revenire în momentul iniţial
cu luarea în considerare a altor variabile, după cum se arată în Figura 1.2.
Execuţia organigramei complete, adică determinarea valorii Z pentru o
anumită intrare, necesită cel mult 5 semnale de tact (se efectuează o singură
primitivă la un impuls de tact) şi cel puţin 3. De exemplu, pentru A1 B1 A0 B0 ,
rezultatul este [] şi sunt necesare cinci semnale de tact.

Z  pp  COMP( A, B )

A1
1
COMP( Ak , Bk )(k  0)
sp
B1 B1
2 3

A0
4
S
S B0 B0 S
6 7

> = <

Fig. 1.1 Organigrama unui comparator binar.

2
Z  COMP( A, B )
A1
0

B1 B1
1 2

A0
3

B0 B0
4 5

> = <
6 7 8

Fig. 1.2 Secvenţierea ciclului pentru un comparator binar.

Ipoteza 2: Sistem logic microprogramabil (SLμP)

Orice ansamblu de elemente logice, fie ele combinaţionale (MUX, DMUX,


porţi de tip NOT, AND, OR etc.) sau secvenţiale (LATCH- uri, circuite
bistabile, registre) constituie un sistem logic (cablat) hardware. Dacă în plus se
include cel puţin un element de memorie, atunci sistemul devine un sistem logic
cu memorie. În cazul în care conţinutul memoriei este alcătuit din primitive
(asignare, test) atunci avem un sistem logic microprogramabil.

1.3 REALIZAREA SOFTWARE A ARBORILOR


ŞI A ORGANIGRAMELOR

Fiind cunoscute conceptele de execuţie secvenţială şi sistem


microprogramabil, putem construi o realizare a arborilor de decizie şi a
organigramelor numită realizare software. Pentru aceasta, sunt necesare etapele
enumerate în continuare.
1. Definirea detaliată a primitivelor şi realizarea acestora în memorie ca
microinstrucţiuni.
2. Reprezentarea arborelui sau a diagramei ca un ansamblu de
microinstrucţiuni (organigrama).
3. Translatarea schemei logice în mnemonica de microprogram şi
obţinerea codurilor binare şi hexazecimale ale microprogramului.

3
4. Realizarea hardware a sistemului care se poate utiliza pentru execuţia
microprogramului (sistem secvenţial hardware).
Conţinutul fiecărui element de test sau asignare trebuie să fie codificat în
binar, scris în memorie la o adresă dată şi, în final, executat de un automat
secvenţial proiectat pentru acest scop. Realizarea în memorie a unui element
presupune execuţia unei microinstrucţiuni de test sau asignare.
Microinstrucţiunea de test (Figura 1.3) este definită printr-o adresă ADR şi o
variabilă de test xi ; fiecare asemenea microinstrucţiune are o intrare şi două
ieşiri care conduc la următoarele instrucţiuni de executat: una la ADR1 , când
xi  1, cealaltă la ADR 2 , când xi  0 . Acest proces poate fi scris sub formă
simbolică (mnemonică):

IF xi THEN ADR1 ELSE ADR0 (1.1)

Microinstrucţiunea de asignare (Figura 1.4) este definită printr-o adresă


ADR şi o asignare de tip sincron REG  OUT . Prin REG este desemnat un
registru, iar OUT este o combinaţie binară de ieşire. Fiecare asemenea
microinstrucţiune are o intrare şi o ieşire către adresa instrucţiunii următoare.
Mnemonica acestei instrucţiuni este:

DO REG ← OUT GO TO ADR + (1.2)

Un ansamblu de microinstrucţiuni de test şi de asignare poate fi reprezentat


grafic cu ajutorul simbolurilor anterioare. Această reprezentare se numeşte
organigrama microprogramului (Figura 1.2). Mulţimea celor 2 instrucţiuni de
test şi asignare formează limbajul L1:
Dacă fiecărei instrucţiuni din Figura 1.2 i se atribuie o adresă (0,1, …, 8 în
acest caz) atunci putem obţine microprogramul pentru comparatorul anterior,
scris în limbajul L1, sub forma prezentată în Figura 1.5.

L1 = {IF...THEN...ELSE..., DO...GO TO...}. (1.3)

ADR
ADR REG ← OUT
xi

ADR1 ADR0 ADR+


IF xi THEN ADR1 ELSE ADR0 DO REG ← OUT GO TO ADR +

Fig. 1.3 Microinstrucţiune de Fig. 1.4 Microinstrucţiune de


testare. asignare.

4
ADR L1
0 IF A1 THEN 1 ELSE 2
1 IF B1 THEN 3 ELSE 6
2 IF B1 THEN 8 ELSE 3
3 IF A0 THEN 4 ELSE 5
4 Fig. 1.5 Microprogramul L1 pentru
IF B0 THEN 7 ELSE 6
un comparator binar.
5 IF B0 THEN 8 ELSE 7
6 DO REG ← [>] GO TO 0
7 DO REG ← [=] GO TO 0
8 DO REG ← [>] GO TO 0

1.4 REPREZENTAREA BINARĂ ŞI


HEXAZECIMALĂ A UNUI MICROPROGRAM

Pentru a scrie microinstrucţiunile în memorie trebuie să avem:


− codificări pentru variabila de test xi şi pentru asignările REG  OUT ;
− o organizare a elementelor componente din fiecare microinstrucţiune.
Aceasta va fi reprezentată de formatul instrucţiunii şi constă dintr-un anumit
număr de câmpuri.
O codificare minimală binară a celor 4 variabile de test xi  A1 , B1 , A0 , B0
necesită 2 biţi i1 ,i0 pentru a obţine indicele (indexul) i , ca în Figura 1.6.
Combinaţiile de ieşire Z pot fi reprezentate cu cel puţin 2 biţi, dar vom alege
o reprezentare 1 din 3 cu 3 biţi, OUT2:0 (Figura 1.7).
Cele 9 instrucţiuni ale programului necesită cel puţin 4 biţi de adrese ADR3:0 .
Trebuie să distingem cele 2 tipuri de microinstrucţiuni ale limbajului L1, iar
aceasta se poate face cu ajutorul codului operaţiei OPC sub forma unui singur
bit T : T  1 identifică o instrucţiune de test iar T  0 o asignare.
Acum, putem defini un format pentru fiecare instrucţiune, ca în Figura 1.8.
Utilizând acest format, microprogramul (în binar) pentru comparator este
prezentat în Figura 1.9.

xi i i1 i0 Z OUT2:0
A1 0 0 0 [>] 1 0 0
B1 1 0 1 [=] 0 1 0
2 1 0 [<] 0 0 1
A0
B0 3 1 1

Fig. 1.6 Codificarea variabilelor Fig. 1.7 Codificarea variabilelor


de test. de ieşire.

5
T=1
1 0 3 2 1 0 3 2 1 0

OPC i ADR1 ADR0

IF xi THEN ADR1 ELSE ADR0

T=0 − − −
3 2 1 0 2 1 0

OPC ADR+ OUT

DO REG  OUT GO TO ADR 

Fig. 1.8 Formatul microinstrucţiunilor pentru limbajul L1.

ADR T i1:0 ADR1 ADR 0 ADR T,i ADR1 ADR 0


ADR  OUT ADR  OUT
0000 1 00 0001 0010 0 4 1 2
0001 1 01 0011 0110 1 5 3 6
0010 1 01 1000 0011 2 5 8 3
0011 1 10 0100 0101 3 6 4 5
0100 1 11 0111 0110 4 7 7 6
0101 1 11 1000 0111 5 7 8 7
0110 0 −− 0000 − 100 6 0 0 4
0111 0 −− 0000 − 010 7 0 0 2
1000 0 −− 0000 − 001 8 0 0 1

Fig. 1.9 Microprogramul scris Fig. 1.10 Microprogramul scris


în formă binară. în formă hexazecimală.

Necesitatea ca microinstrucţiunile să fie executate de o maşină proiectată


special impune anumite restricţii ale formatelor. Astfel, pentru exemplul nostru,
cele două tipuri de microinstrucţiuni trebuie să aibă aceeaşi lungime (11 biţi) şi
trebuie să existe corespondenţe între locaţiile câmpurilor ( ADR1 şi ADR 
trebuie să fie în aceleaşi poziţii în memorie). Rezultă că, anumiţi biţi nu vor fi
definiţi şi vor corespunde variabilelor de tip "don't care" ( − ). Dacă pentru
variabile "don't care" se consideră valoarea 0, atunci microprogramul convertit
în hexazecimal pentru comparatorul anterior este cel din Figura 1.10.

6
1.5 REALIZARE HARDWARE:INTERPRETOR
PENTRU LIMBAJUL L1

Sistemul secvenţial sincron care execută cele două tipuri de instrucţiuni ale
limbajului L1 se numeşte maşină de decizie binară sau interpretor pentru
limbajul L1, pe scurt INT 1. Pentru că, în plus, el conţine o memorie ce
recunoaşte cele două primitive ale limbajului, acest sistem va fi un sistem
microprogramabil.
O astfel de maşină este cea din Figura 1.11 care conţine următoarele
elemente:
− o memorie program (la acest exemplu conţine 16 cuvinte de câte 11 biţi
fiecare) compatibilă cu formatul celor două instrucţiuni IF, …, DO.... Această
memorie poate fi de tip RAM sau ROM; dacă este de tip ROM, atunci
comportarea ei este pur combinaţională şi poate fi descrisă prin ecuaţia

OUT10:0  ROM [ ADR] (1.4)

− un registru de adrese sau de instrucţiuni, ADR, al cărui conţinut ( ADR )


reprezintă o adresă de memorie. Este un caz particular al unui registru bi-
direcţional care este utilizat în modul LOAD şi descris prin ecuaţia

ADR  ADR  (1.5)

− un multiplexor MUX1 controlat prin variabila y . Scopul acestuia este acela


de a selecta adresa următoare ADR  în diferite câmpuri ale instrucţiunii
( ADR1  ROM 7:4 , ADR0  ROM 3:0 , ADR   ROM 7:4 ).
− un al doilea multiplexor MUX2 controlat de variabila T din codul operatiei
şi de variabilele i1 , i 0 ale indexului. Scopul acestuia este selectarea variabile de
test xi ( xi  A1 , A0 , B1 sau B0 ) .
− un registru de asignare sau de ieşire REG, de asemenea bi-direcţional,
utilizat în modurile HOLD ( S1  S 0  LD  0 ) şi LOAD ( S1  S 0  LD  1 ):

REG  REG ( S1  S 0  LD  0) (1.6)


REG  REG  ( S1  S 0  LD  1) (1.7)

Tabelul operaţiilor pentru această maşină este prezentat în Figura 1.12.


Acesta descrie comportarea generală a maşinii precum şi transferurile care au
loc în registrele ADR şi REG pentru fiecare instrucţiune de test (OP1, OP2) şi
de asignare (OP3).

7
REG 4

ADR
MUX2
CK LD=T'
1 T
ADR REG
1 0
0 00 CLR'
0 01 ADR+ REG+
10
0 11 y 1 0 MUX1
x0 1 00
01
x1 1 10
xi
x2 1 11
x3 1 4
4 4
T
10 9 8 7 4 3 0
OUT10:0
ADR3:0
IF... 1 i1:0 ADR13:0 ADR03:0
L1
DO... 0 – ADR+3:0 OUT3:0
ROM

INT1

Fig. 1.11 INT1, interpretor pentru limbajul L1.

OPERAŢIA DESCRIERE: ADR, REG T xi


OP1=IF 0 ELSE ADR0 ADR  ADR 0, REG  REG 1 0
OP2=IF 1 ELSE ADR1 ADR  ADR1, REG  REG 1 1
OP3=DO REG  OUT ADR  ADR , REG  OUT 0 −
GO TO ADR 

Fig. 1.12 Tabelul operaţiilor pentru INT1.

OPERAŢIA T xi ADR  y REG  LD


OP1 1 0 ADR0  ROM 3:0 0 REG 0
OP2 1 1 ADR1  ROM 7:4 1 REG 0
OP3 0 − ADR   ROM 7:4 1 OUT  ROM 3:0 1

Fig. 1.13 Tabelul de adevăr pentru INT1.

Din tabelul operaţiilor se obţine tabelul de adevăr (Figura 1.13) care indică
valorile pentru y (comanda pentru MUX1) şi LD (comanda pentru REG) ca
funcţii de T (codul operaţiei) şi xi (variabila de test).
În continuare, se obţin expresiile (simplificate) pentru y şi LD ca funcţii
de T şi xi .

8
y  T  xi (1.8)

LD  T (1.9)

Pentru realizarea relaţiei (1.8) se utilizează multiplexorul MUX2: dacă T  1


(indică o instrucţiune de test) atunci y  xi , iar dacă T  0 (o asignare) atunci
y  1.
Maşina INT1 a fost dimensionată pentru exemplul unui comparator şi are cel
puţin
24=16 instrucţiuni înscrise la ROM 10:0 cu adresele ADR3:0 ,
22=4 variabile de intrare xi , cu indexul i1:0 şi
24=16 combinaţii diferite de ieşire OUT3:0 .
Maşina conţine un singur registru de asignare REG.
Semnalul de ceas CK controlează cele două registre sincrone ADR şi REG şi
astfel dictează viteza cu care se execută instrucţiunile programului. Putem
presupune că perioada ceasului este mult mai mică decât durata dintre orice
schimbări ale variabilei de intrare astfel încât o tranziţie, de exemplu
A1 B1 A0 B0  0000  0001  0000 , va conduce la obţinerea rezultatelor
corespunzătoare [=]  [<]  [=].
Scopul semnalului CLR este acela de a permite resetarea registrelor ADR şi
REG în mod asincron, adică acel semnal are prioritate faţă de semnalul de ceas.
Aceasta permite ca primei instrucţiuni din microprogram să i se atribuie adresa
ADR3:0  0000 .

1.6 REALIZAREA HARDWARE A ARBORILOR


ŞI A ORGANIGRAMELOR

Între realizarea soft şi cea hardware există o echivalenţă şi vom lua în


considerare mai multe realizări hardware sub forma unor automate realizate din
DMUX şi MUX.

A Implementarea cu DMUX cu o singură variabilă de selecţie

Schema logică din Figura 1.14 (DMUX şi operatori OR) se obţine din
arborele binar de decizie din Figura 1.1, în felul următor:
− fiecare element de test este implementat cu un DMUX care are o singură
variabilă de selecţie (acea variabilă care este testată la instrucţiunea respectivă);
− fiecare legatură dintre două elemente ale organigramei este realizată
hardware sub forma unei conexiuni fizice (un conductor);
− fiecare convergentă de k săgeţi este implementată sub forma unei porţi
OR care are k intrări;
− terminalul de intrare în schema logică este cablat la 1.

9
Z 1
A1
1 0

B1 B1
1 0 1 0
COMP( Ak , Bk )(k  0)

1 OR

A0 1 0

B0 B0
1 0 1 0

1 1 1

G E L

Fig. 1.14 Implementarea cu demultiplexoare cu o singură


variabilă de selecţie.

Ieşirile celor trei porţi OR din Figura 1.14 sunt realizări ale celor trei funcţii
logice G , E , L , care constituie comparatorul pentru două cuvinte binare de câte
doi biţi. O analiză a acestei scheme logice va conduce la expresii logice
echivalente cu funcţiile care implementează acest tip de comparator.
B Implementarea cu DMUX cu selecţie multiplă
În cazul particular când toate elementele de test operează la fiecare nivel cu
aceeaşi variabilă, se poate obţine o realizare echivalentă cu cea din Figura 1.14,
în care un anumit număr de demultiplexoare cu o singură variabilă de selecţie se
pot înlocui printr-un singur DMUX cu mai multe variabile de selecţie. Se obţine
schema logică din Figura 1.15.
C Implementarea cu multiplexoare
Dualitatea dintre DMUX şi MUX sugerează posibilitatea de realizare a unei
structuri echivalente cu cele anterioare cu ajutorul MUX. Aceasta se poate face
pornind de la următoarele reguli:
− fiecare element de test se implementează printr-un MUX cu o intrare de
selecţie (de adresă).

10
Z
1
A1 1 1 0 0
B1 0 1 0 1


Fig. 1.15 Implementarea cu
A0 demultiplexoare cu selecţie multiplă.
1 1 0 0
B0 0 1 0 1

  

G E L

− legătura de informaţie din diagramă se implementează prin intermediul unui


BUS (magistrală); pentru o codificare minimală a celor trei ieşiri sunt necesari
doi biţi dar, în cazul nostru, s-a utilizat o codificare pe trei biţi 1 din 3, astfel
încât BUS-ul va avea dimensiunea 3;
− acest automat are trei terminale de intrare, la fiecare dintre acestea fiind
aplicat codul de trei biţi corespunzător funcţiilor [>], [<] şi [=], adică 100, 010,
001.
Schema logică este prezentată în Figura 1.16.

1.7 SUBPROGRAME ŞI PROCEDURI

Organigrame liniare

Numărătoarele precum şi sistemele combinaţionale iterative pot fi


descompuse în subsisteme mai simple. Studiul acestui proces conduce la unul
din conceptele fundamentale din software şi anume acela de subprogram cu sau
fără parametri de transfer. Ne vom baza studiul pe un numărător cu şase stări şi
vom arăta că diagrama de stări poate fi realizată sub forma unei organigrame
liniare care constă dintr-un ansamblu de instrucţiuni de test IF..THEN..ELSE şi
DO...GO TO din L1. Dacă se pune în evidenţă o zonă sau o parte repetitivă (un
subprogram) organigrama liniară se poate transforma într-un arbore binar de
decizie, care la rândul lui este programat în L1 şi realizează diagrama de stări a
numărătorului. Execuţia subprogramelor poate fi făcută mai eficientă dacă L1
este extins prin adăugarea a două noi instrucţiuni pentru apelarea unui
subprogram şi pentru întoarcerea la programul apelant. Se obţine în acset fel
limbajul L2 {IF...THEN...ELSE, DO...GOTO, CALL...RET TO, RET} iar
acesta va trebui să fie interpretat de o maşină de decizie binară dotată cu
memorie auxiliară de tip stivă.

11
3 Z  G, E , L
A1 1 0

COMP( Ak , Bk )(k  0)
B1 B1
1 0 1 0

Zk
A0 1 0

B0 B0 1 0
1 0

3 Z k 1 3 3

[>]=100 [=]=010 [<]=001

Fig. 1.16 Implementarea cu multiplexoare.

Se oferă în acest fel noi posibilităţi de tratare a sistemelor care pot fi


descompuse în blocuri mai simple cum ar fi: numărătoare complexe şi ceasuri
digitale (descompunere serială), orice sistem combinaţional care poate fi
reprezentat printr-un arbore de decizie binară (descompunera în arbore principal
şi sub-arbori) şi sisteme combinaţionale iterative (descompunere în sub-
programe).
Exemplul 1.1 Numărător cu şase stări
Un numărător sincron cu şase stări (Figura 1.17) este comandat de un semnal
extern de ceas, H , şi oferă la ieşire un ciclu de stări codificate binar:
Q2 Q1Q0  000  001  010  011  100  101  000  ...
Această funcţionare poate fi exprimată sub forma unei asignări sincrone,
Q  Q  1 (mod 6) ,ceea ce înseamnă că la fiecare tact starea numărătorului se
incrementează cu 1, de la Q  0 la Q  5  p  1( p este scala sau modulul
numărătorului). Diagrama şi tabelul de stări sunt prezentate în Figura 1.18.

Q Q2 Q1 Q0

p=6 H p=6 H

Fig. 1.17 Scheme bloc ale unui numărător


sincron cu şase stări.

12
În Figura 1.19 este reprezentat semnalul de ceas H : fiecare tranziţie pozitivă
H  0  1 determină schimbarea din starea curentă Q în starea următoare Q  .
Prin organigramă liniară vom înţelege o realizare software directă a
diagramei de stări, care conţine instrucţiuni de test şi de asignare din limbajul
L1. În Figura 1.20 este prezentată o organigramă liniară pentru numărătorul
modulo 6; se poate verifica faptul că fiecare stare a grafului de stări (adică
fiecare cerc din Figura 1.18) generează o instrucţiune de asignare şi fiecare
tranziţie de la starea curentă Q la cea următoare Q  implică două teste
succesive asupra variabilei de ceas H , conform Figurii 1.19.
Putem atribui o câte o adresă (hexazecimal) ADR  00...11 fiecărei
instrucţiuni din Figura 1.20, după care putem obţine programul scris în limbajul
L1 pentru numărătorul considerat (Figura 1.22).
Fiecare program din acest capitol va fi evaluat prin calculul a doi parametri
care exprimă respectiv costurile temporale şi pe cele spaţiale; primul este dat de
numărul c al instrucţiunilor din program şi determină necesarul de memorie, al
doilea este reprezentat de numărul d al instrucţiunilor care trebuie executate
între două fronturi pozitive ale variabilei de ceas H , adică, pe durata unui ciclu
de ceas. Aceşti doi parametri depind de numărul p al stărilor numărătorului.
Din Figura 1.20 găsim:
c( p)  3 p , (1.10)

d ( p)  constant  3 . (1.11)

000
Q2 Q1 Q0 Q2 Q1 Q0
101 001 0 0 0 0 0 1
0 0 1 0 1 0
0 1 0 0 1 1
0 1 1 1 0 0
100 010 1 0 0 1 0 1
1 0 1 0 0 0
011

Fig. 1.18 Diagrama de stări şi tabelul de tranziţie a stărilor


pentru un numărător modulo şase.

TH
1
Fig. 1.19 Semnal de ceas H:
t
0
pentru comanda numărătorului. t t 

Q2 Q1Q0 Q Q1 Q0



2

13
00 000 Q2 Q1Q0
SP

H H
01 02

03
001

H H
04 05
d=3

06 010

H H
07 08

09
011

H H
0A 0B Q3

0C 100

H H
0D 0E

101
0F

H H
10 11

Fig. 1.20 Organigrama liniară pentru numărătorul modulo şase.

Acum, putem defini un factor de merit pentru program sub forma produsului
c  d ; pentru exemplul nostru:

cd  9p. (1.12)

14
În cele ce urmează vom presupune că perioada TCLK a ceasului intern CLK al
maşinii de decizie binară din Figura 1.11 este întotdeauna mai mic decât
perioada TH a oricărui ceas extern H ; adică, în toate cazurile

d  TCLK  TH . (1.13)

Astfel, ciclul de ceas d este o măsură a vitezei sistemului microprogramabil:


cu cât d este mai mic, cu atât mai mică trebuie să fie frecvenţa minimă a
ceasului intern CLK pentru o frecvenţă dată a ceasului extern H .
O maşină de decizie binară similară cu cea din Figura 1.11 (INT1) poate
executa programul L1 din Figura 1.22, singurele modificări pot apărea în
formatele instrucţiunilor de test şi de asignare. Lăsăm ca exerciţiu stabilirea
noilor formate şi a structurii acestei maşini.
Organigrama liniară din Figura 1.20, codificată şi apoi executată de o maşină
de decizie binară cum este interpretorul INT1, este echivalentă cu un sistem
logic hardware care implementează un numărător sincron în cod 1-din-6, adică
un numărător în inel. Fiecare grup de trei instrucţiuni succesive din Figura 1.20
este echivalent cu un bistabil D, comandat de ceasul H , în sistemul logic din
Figura 1.21: de exemplu, grupul instrucţiunilor de la adresele 09 (asignare), 0A
(test) şi 0B (test) sunt echivalente cu Q3 .

Subprograme şi arbori de decizie

Orice organigramă care are un singur terminal de intrare şi un singur terminal


de ieşire reprezintă un subprogram. Astfel, în Figura 1.20, organigrama notată
SP şi alcătuită din două instrucţiuni de test aflate la adresele 01 şi 02 este un
subprogram.
Subprogramul SP este repetat de şase ori în Figura 1.20, sugerând faptul că
organigrama iniţială ar putea fi simplificată astfel încât SP să apară numai o
singură dată, ca în Figura 1.23. Totuşi, mulţimea de instrucţiuni care se
formează în acest mod nu mai defineşte complet o organigramă pentru că nu
este specificat modul în care ieşirea lui SP se transmite la cele şase instrucţiuni
de asignare. Există două posibilităţi de soluţionare a acestei probleme: pe cale
software, cu ajutorul unui arbore binar de decizie − soluţie pe care o vom aborda
în continuare − sau pe cale hardware, cu ajutorul unei stive − pe care o vom lua
în considerare în paragraful următor.
Starea curentă a numărătorului determină starea următoare, de exemplu,
Q2 Q1Q0  000 este urmată de Q2 Q1 Q0  001; această informaţie este conţinută
în diagrama şi tabelul de stări din Figura 1.18. Astfel, putem construi un arbore
binar de decizie cu variabilele de test Q2 , Q1 , Q0 , cu ajutorul căruia să
determinăm, la ieşirea din SP , starea următoare Q2 Q1 Q0 .

15
H

D
CK
Q
Q0(=000)
D
CK
Q
Q1(=001)
D
CK
Fig. 1.21 Implementarea cu bistabile D Q
a numărătorului descris în Figura 8.21.
Q2(=010)
D
CK
Q
Q3(=011)
D
CK
Q
Q4(=100)
D
CK
Q
Q5(=101)

ADR L1
00 DO REG ← 000 GO TO 01
01 IF H THEN 01 ELSE 02
02 IF H THEN 03 ELSE 02
03 DO REG ← 001 GO TO 04
04 IF H THEN 04 ELSE 05
05 IF H THEN 06 ELSE 05
06 DO REG ← 010 GO TO 07
07 IF H THEN 07 ELSE 08
08 IF H THEN 09 ELSE 08
09 DO REG ← 011 GO TO 0A
0A IF H THEN 0A ELSE 0B
0B IF H THEN 0C ELSE 0B
0C DO REG ← 100 GO TO 0D
0D IF H THEN 0D ELSE 0E
0E IF H THEN 0F ELSE 0E
0F DO REG ← 101 GO TO 10
10 IF H THEN 10 ELSE 11
11 IF H THEN 00 ELSE 11

Fig. 1.22 Programul L1 pentru numărătorul descris


în Figura 8.21.

16
Tabelul iniţial de stări din Figura 1.18 se transformă într-o diagramă
Karnaugh, ca în Figura 1.24. Prezenţa variabilelor "don't care" pentru
Q2 Q1Q0  110, 111 conduce la simplificarea expresiilor logice; arborele de
decizie pentru Q  , reprezentat în Figura 1.25 este minimal. Combinarea acestui
arbore cu subprogramul SP conduce la organigrama din Figura 1.25, care este o
posibilă realizare a Figurii 1.23; SP apare o singură dată dar această
simplificare s-a obţinut pe seama utilizării a cinci instrucţiuni de test în arbore.
În Figura 1.26 este prezentat programul corespunzător Figurii 1.25.
Pentru cazul general al unui numărător cu p stări vor exista p instrucţiuni de
asignare şi p  1 instrucţiuni de test în arborele minimal şi două instrucţiuni de
test în subprogram; aşadar numărul total de instrucţiuni este

c( p)  2 p  1 . (1.14)

000 SP

H
001 Q  ?
H
010

011

100

101

Fig. 1.23 Organigrama simplificată a numărătorului modulo şase.

Q2

Fig. 1.24 Tranziţia stărilor pentru Q1 − − − − − − 1 0 0 0 1 1


numărărtorul modulo şase. 101 000 010 001

Q   Q2 Q1 Q0 Q0

17
SP

H
1
Fig. 1.25 Arborele minimal de decizie
pentru numărătorul modulo şase.
2 H

Q2 Q   Q  1 (mod 6)
3
Q1
4

Q0 Q0 Q0
7 6 5
 Q2 Q1 Q0
000 101 100 011 010 001
0 C B A 9 8

ADR L1
0 DO REG ← 000 GO TO 1
1 IF H THEN 1 ELSE 2
2 IF H THEN 3 ELSE 2
3 IF Q2 THEN 7 ELSE 4
4 IF Q1 THEN 6 ELSE 5
5 IF Q0 THEN 9 ELSE 8
6 IF Q0 THEN B ELSE A
7 IF Q0 THEN 0 ELSE C
8 DO REG←001 GO TO 1
9 DO REG←010 GO TO 1
A DO REG←011 GO TO 1
B DO REG←100 GO TO 1
C DO REG←101 GO TO 1

Fig. 1.26 Programul L1 pentru numărătorul modulo şase


reprezentat prin arborele de decizie din Figura 1.26.

Ciclul de ceas depinde de dimensiunea arborelui. În cazul cel mai defavorabil


(arbore canonic) se obţine

d ( p)  3  log 2 p  , (1.15)

18
unde x  înseamnă cel mai mic întreg mai mare sau egal cu x . Se obţine
factorul de merit

c  d  (2 p  1)(3  log 2 p   p (6  2 log 2 p ) . (1.16)

Programul scris în limbajul L1 (Figura 1.26) ar putea fi executat de o maşină


de decizie binară INT1 a cărei structură a fost prezentată în Figura 1.11. Lăsăm
ca exerciţiu pentru studenţi verificarea faptului că nu sunt necesare schimbări în
formatele din Figura 1.8 pentru instrucţiunile de test şi de asignare.
Variabilele de test ale maşinii vor fi Q2 , Q1 , Q0 ; în acest caz, spre deosebire
de organigrama liniară, există o reacţie (hardware) între ieşirile
REG2:0  Q2 Q1Q0 şi intrările variabilelor de test xi ale multiplexorului MUX2
(Figura 1.11).
Organigrama din Figura 1.25, codificată şi apoi executată de o maşină de
decizie binară ca INT1 este echivalentă cu sistemul hardware din Figura 1.27.

1 Q   Q  1 (mod 6)
Q
INC
Q2 1 0 =
Q  Q 1
(mod 6)
Q1 1 0
REG
H
Q0 Q0
Q0 1 0 1 0 1 0 Q

>=1 >=1 >=1

Q2  D2 Q1  D1 Q0  D0


H
CK D CK D CK D

Q Q Q
Q2 Q1 Q0

Fig. 1.27 Implementarea cu demultiplexoare a numărătorului


modulo şase descris prin organigrama din Figura 1.26.

19
20

S-ar putea să vă placă și