Tegemist on uue näitega, mis proovib katta ka need küsimused, mis esimesest välja jäid - kaks tingimuslikku plokki järjest ja realisatsioon Moore automaadina (vt. allpool). Mealy automaat. Kasutatav elementbaas - 2-AND, 3-AND, 2-OR, 3-OR, 2-XOR, NOT, JK-triger. Algoritmi realiseerimiseks Mealy automaadina piisab kolmest
olekust - S1, S2, S3. Siirete kontroll näitab, et ühest
olekust teise minnes läbitakse täpselt üks
operatsioonide plokk. Samuti pole konflikte tingimuslike plokkide
läbimisel. |
|
|
|
|
|
|
|
|
x1 & x2 x1 & !x2 |
|
S2 S3 |
y2, y3 y1, y4 |
x3 |
|
S1 |
y1, y3 |
|
|
|
|
Kuna kasutusedl on JK-trigerid, siis oleks hea kasutada naaberkodeeringut (või sellele lähedast kodeeringut). Siis muutuks siirdel võimalikult vähe olekubitte ja selle tõttu peaks ka siirdefunktsioon lihtsam tulema. Antud juhul on naaberkodeerimine võimalik, sest olekuid on ainult kolm ja siirded toimuvad olekust S1 ja tagasi (vt. ka olekudiagrammi). Vaja läheb kahte bitti (q1, q2). Valin koodid järgmiselt: S1 "00", S2 "01" ja S3 "10" (kood "11" jääb kasutamata). Muuseas, kui valida koodid nii, et S2 "10" ja S3 "01", ei muutuks sisuliselt mitte midagi, ainult q1 ja q2 oleksid vahetuses.
Kodeeritud automaadi tabel:
|
|
|
|
|
|
0-- |
S1 | 00 |
S1 |
00 |
1010 |
--0 |
S2 | 01 |
S2 |
01 |
0101 |
--- |
S3 | 10 |
S1 |
00 |
1010 |
|
|
|
|
0 1 1 |
1 0 1 |
1 - - |
- 1 0 |
Automaadi tabel ja signaalide nimed:
xxx |
|
|
|
|
jk jk |
yyyy |
0-- |
S1 | 00 |
S1 |
00 |
0- 0- |
1010 |
--0 |
S2 | 01 |
S2 |
01 |
0- -0 |
0101 |
--- |
S3 | 10 |
S1 | 00 |
-1 0- |
1010 |
Selle tabeli põhjal on võimalik välja kirjutada siirde- ja väljundfunktsioonid. Unustada ei tohi, et kasutamata olekukoodi ("11") korral pole funktsioonide väljundite väärtused olulised. Minimeerimisel on kasutatud espresso erinevaid võtmeid, et võimalusel realiseerida mõni funktsioonidest inverteeritult - "-Dopoall" ja valitud kolm väiksemate kuupide/implikantide arvuga tulemust.
funktsioonid | espresso sisend | tulemus #1 | #2 | #3 | #4 |
xxx qq | jkjk yyyy 123 12 | 1122 1234 ================== 0-- 00 | 0-0- 1010 11- 00 | 0-1- 0110 10- 00 | 1-0- 1001 --0 01 | 0--0 0101 --1 01 | 0--1 1010 --- 10 | -10- 1010 --- 11 | ---- ---- |
.i 5 .o 8 0--00 0-0-1010 11-00 0-1-0110 10-00 1-0-1001 --001 0--00101 --101 0--11010 ---10 -10-1010 ---11 -------- .e |
.i 5 .o 8 11-00 00100110 10-00 10001001 --0-1 00000101 0---0 00001010 --1-1 00011010 ---1- 01001010 .e |
.i 5 .o 8 #faas 10110101 --1-- 00010000 11-00 00101100 10-00 10000011 --0-1 00001111 .e |
.i 5 .o 8 #faas 11100101 11-00 00101100 10-00 10000011 ----- 01000000 --0-1 00011111 .e |
.i 5 .o 8 #faas 10100101 11-00 00101100 10-00 10000011 --0-1 00011111 .e |
Tulemus #1:
[ j1 = x1 x2'q1'q2' ] [ k1 = q1 ]
[ j2 = x1 x2 q1'q2' ] [ k2 = x3 q2 ]
[ y1 = q1 + x1 x2'q1'q2' + x3 q2 + x1'q2' ]
[ y2 = x1 x2 q1'q2' + x3'q2 ]
[ y3 = q1 + x1 x2 q1'q2' + x3 q2 + x1'q2' ]
[ y4 = x1 x2'q1'q2' + x3'q2 ]
Tulemus #2:
[ j1 = x1 x2'q1'q2' ] [ k1'= 0 ]
[ j2 = x1 x2 q1'q2' ] [ k2 = x3 ]
[ y1'= x1 x2 q1'q2' + x3'q2 ] [ y2 = x1 x2 q1'q2' + x3'q2 ]
[ y3'= x1 x2'q1'q2' + x3'q2 ] [ y4 = x1 x2'q1'q2' + x3'q2 ]
Tulemus #3:
[ j1 = x1 x2'q1'q2' ] [ k1 = 1 ]
[ j2 = x1 x2 q1'q2' ] [ k2'= x3'q2 ]
[ y1'= x1 x2 q1'q2' + x3'q2 ] [ y2 = x1 x2 q1'q2' + x3'q2 ]
[ y3'= x1 x2'q1'q2' + x3'q2 ] [ y4 = x1 x2'q1'q2' + x3'q2 ]
Tulemus #4:
[ j1 = x1 x2'q1'q2' ] [ k1'= 0 ]
[ j2 = x1 x2 q1'q2' ] [ k2'= x3'q2 ]
[ y1'= x1 x2 q1'q2' + x3'q2 ] [ y2 = x1 x2 q1'q2' + x3'q2 ]
[ y3'= x1 x2'q1'q2' + x3'q2 ] [ y4 = x1 x2'q1'q2' + x3'q2 ]
Esimene variant on selgelt kehvem, kui on ülejäänud. Sealjuures on #3 ja #4 sisuliselt samad (k1'=0 & k1=1) ning on #2-st ainult natuke kehvemad, sest k2 vajab täiendavat invertorit.
Variant #5 - Karnaugh kaardi abil (sisuliselt praktikumis tehtu):
Automaadi tabelit analüüsides on näha, et k1=1 (ainult
'-' ka '1'). Samuti sõltub k2 x3-st ainult olekus S2, muidu
võib olla suvalise väärtusega. Seega k2=x3
(vrdl. #2). Ka on näha, et y2 on '1', kui y1 on '0', ja
vastupidi. Sama kehtib ka y3 ja y4 suhtes. Seega võib kirja
panna, et y2=y1' ja y4=y3'. Ülejäänud neli funktsiooni
- j1, j2, y1 ja y3 - tuleb siiski minimeerida.
[ j1 = x1 x2'q2' ] [ j2 = x1 x2 q1' ]
[ y1 = q1 + x3 q2 + x1'q2' + x2'q2' ]
[ y3 = q1 + x3 q2 + x1'q2' + x2 q2' ] - y1 ja y3 pole just parimad.
Kui minimeerida y1 ja y3 0-de järgi (punased kontuurid),
st. sisuliselt y2 ja y4, on tulemuseks variantides #2-#4 saadud
funktsioonid -
[ y1'= x3'q2 + x1 x2 q1'q2' ]
[ y3'= x3'q2 + x1 x2'q1'q2' ] .
Variante omavahel võorreldes on osade funktsioonidega asi selge: [ k1 = 1 ] , [ k2 = x3 ] , [ y1 = y2' ] ja [ y3 = y4' ] (y1 ja y3 vajaksid rohkem implikante). Ülejäänutel on kattuvusi, mis aitavad leevendada piirangut, et AND/OR elementidel on kuni kolm sisendit.
[ j1 = x1 x2'q2' ] või [ j1 = x1 x2'q1'q2' ]
ja [ y4 = x1 x2'q1'q2' + x3'q2 ] -->
[ j1 = x1 x2'q2' ] [ y4 = j1 q1' + x3'q2 ] ;
[ j2 = x1 x2 q1' ] või [ j2 = x1 x2 q1'q2' ]
ja [ y2 = x1 x2 q1'q2' + x3'q2 ] -->
[ j2 = x1 x2 q1' ] [ y2 = j2 q2' + x3'q2 ] .
Lõoplik skeem oleks siis järgmine:
[ j1 = x1 x2'q2' ] - 3-AND, NOT;
[ k1 = 1 ] ;
[ j2 = x1 x2 q1' ] - 3-AND;
[ k2 = x3 ] ;
[ t1 = x3'q2 ] - 2-AND, NOT;
[ y2 = j2 q2' + t1 ] - 2-AND, 2-OR;
[ y4 = j1 q1' + t1 ] - 2-AND, 2-OR;
[ y1 = y2' ] - NOT;
[ y3 = y4' ] - NOT.
Kokku seega kaks 3-AND, kolm 2-AND, kaks 2-OR ja neli NOT-elementi. Põhimõtteliselt võiks ju proovida ka DeMorgani seaduse abil invertorite arvu vähendamist, kuid selline peenhäälestus pole selles töös enam oluline.
Üks kontrolli võimalus on simuleerimine VHDL abil (simulaatorite kohta vt. 1. kodutöö näidislahendusest). Praeguses näites on toodud automaadi nii käitumuslik kui ka struktuurne mudel. Võrrelge kirjeldusi automaadi tabeli ja skeemiga eespool. Selle võrdluse põhjal peaks olema lihtne oma tabelile vastav kirjeldus teha. Skeemi tegemisel peate arvestama, milliseid tegelikke signaale vaja läheb. Tähelepanu tuleks pöörata sellele, et osa signaale on justkui dubleeritud (nt. y2 ja y2b). Põhjuseks on VHDL iseärasus, mis ei luba väljundeid lugeda ja selle pärast tulebki kasutata nn. signaalide koopiaid. Vajalikud trigerite mudelid leiab vastavatest failidest (D-triger ja JK-triger).
Automaatide kontrollimisel osutub kõige keerumakas ülesandeks vajadus katta kõik olekud ja siirded võimalikult väheste sammudega. Läbimistee leidmiseks võib kasutada nii graafskeemi kui ka olekudiagrammi. Antud näites alustatakse S1-st, kust liigutakse kõigepealt tagasi S1-le (x1=0). Seejärel S2-le (x1=1 & x2=1), siis tsüklis tagasi S2-le (x3=0) ja uuesti tagasi S1 (x3=1). Olekusse S3 saab S1-st (x1=1 & S2=0), kust tullakse tagasi algusesse, st S1 (alati tõene).
Sisuliselt tekib eespool toodud siirete loetelu, mis võib
olla osaliselt teises järjestuses ja kus mõned siirded
võivad korduda:
S1 -> S1: !x1 / y1, y3
S1 -> S2: x1 & x2 / y2, y3
S2 -> S2: !x3 / y2, y4
S2 -> S1: x3 / y1, y3
S1 -> S3: x1 & !x2 / y1, y4
S3 -> S1: 1 / y1, y3
Sellise jada genereerib testpink, mis on iga automaadi jaoks pisut erinev, kuigi põhiosad langevad kokku. Muuta tuleks ainult sisendsignaale muutvat protsessi, täpsemalt seda, millisel taktil millist x-i muudetakse. Ka tuleks vastavalt vajadusele samme lisada või eemaldada. Biti-vektorid x ja y on kasutuse tulemuse paremaks vaatamiseks. Simuleerimise kestuseks peaks piisama 1-st mikrosekundist (10 sammu): "run 1 us".
Käitumuslikku kirjeldust simuleerides on tulemusel näha, kuidas muutuvad olekud ja signaalid. Juhiks tähelepanu veel sellele, et kuna testpingis muudetakse sisend-signaale taktsignaali langeval frondil, kuid automaadi mälu-elemendid töötavad tõusva frondiga, ja et tegu on Mealy automaadiga, siis võivad väljundid takti jooksul muutuda. Moore automaadi korral sellist pilti ei tohi tekkida.
Struktuurse kirjelduse simuleerimise tulemusel on näha ainult üksikud signaalid, sest olekud on "peidetud" signaalide q1 ja q2 sisse. Mõlema tulemuse võrdlemisel on oluline saavutada seda, et kui x-de muutumine langeb kokku, siis peab seda tegema ka y-te muutumine. See aga tähendabki seda, et struktuurses kirjelduses esitatud skeem käitub just selliselt, kuidas on kirjeldatud käitumuslikus mudelis.
Sarnaselt 1. kodutööga on ka siin võimalik simuleerida korraga mõlemat automaadi mudelit. Vajalik on muudetud testpink, et tulemusel oleks näha m&otulde;lema automaadi välajundid (y1-y4 ja y1s-y4s) ning nende võrdlus (y1x-y4x).
Moore automaat. Kasutatav elementbaas - 2-NOR, 3-NOR, 4-NOR, NOT, D-triger. Algoritmi realiseerimiseks Moore automaadina on vaja neli
olekut - S1, S2, S3, S4 (iga väljundplokk on olek). Siirete
kontroll näitab, et tsüklid sisaldavad (vähemalt
ühte) olekut. Samuti pole konflikte tingimuslike plokkide
läbimisel. |
|
|
|
|
|
|
|
|
x1 & x2 x1 & !x2 |
|
S2 S4 |
|
x3 |
|
S1 |
|
x3 |
|
S1 |
|
|
|
|
|