Asynchronni logika -- simulace/analyza (konkretne: hranovy R-S klopny obvod); postesk a prozatimni vysledky

Marek Peca marek na duch.cz
Pátek Květen 31 13:52:14 CEST 2013


Zdravim vas,

v ramci slozitejsiho FPGA obvodu jsem narazil na nutnost v jednom miste 
tvorit cosi malickym asynchronnim automatem. Zjednodusena podmnozina ulohy 
nakonec ukazuje na neco, cemu jsme neformalne rikali "hranovy R-S klopny 
obvod". Popisu tezkosti, ktere jsem potkal pri pokusu to odsimulovat a 
zkusenosti s tim, jak se to nakonec aspon trochu povedlo v detskem 
simulatoru Logisim. Uzavru dotazem, zda nekdo zkusenejsi v asynchronismech 
poradi, kam pro lepsi SW nastroje.

/* Uvodni poznamka s podekovanim: async logika me vzdy uvadela v uzas, 
stejne jako analogove pocitani; zpocatku jsem se ji snazil ovladnout, ale 
nikdy na to nedoslo. Diky konfere 
http://list.hw.cz/pipermail/hw-list/2005-September/251339.html
a naslednem vyvoji na FPGA jsem vlastne nikdy async logiku nepouzil, vzdy 
jsem se snazil o prisne synchronni navrh a pro naprostou vetsinu uloh to 
vyhovelo vyborne. V FPGA nam posledni dobou funguji rekl bych az dost 
netrivialni veci (patrne za obzorem predstavivosti vyrobce) a vse ciste 
na hranovych D-klopnych obvodech, vzacne nejake osamocene RSko u vstupu.

Formalne jsem absolvoval logicke obvody u Doc.Bayera na katedre ridici 
techniky, ale nikdy v skutecnem zivote jsem metodiku asynchronniho navrhu 
nepouzil.
*/

Cilem hry je tedy hranovy R-S klopny obvod -- vzestupna na S nahodi do 1, 
vzestupna na R shodi do 0, zadna omezeni na signaly nejsou (vyjma 
tradicniho zakazu soucasne hrany, jedineho hazardu, ktery nejde nijak 
osetrit).

Zde 3-4 ruzne podoby obvodu, ke kterym jsem dosel:
http://rtime.felk.cvut.cz/~pecam1/logisim/edge_rs.png
(Bloky [F] ignorujte, jako by to byl kus dratu; bude vysvetleno nize.)

1. byl prvotni navrh s ohledem na bezne pouzivane dlazdicky z 3-LUT FPGA: 
hranovy D-k.o. a mux.

2. je totez co (1.), ale D-k.o. je rozepsan jako dve D-latche za sebou.

3. je uz vysledek systematickeho navrhu podle skolni kucharky s tim, ze 
jako pametovy clen bylo zvoleno samotne zpozdeni hradel/dratu.
/* Kucharka v strucnosti: FSM diagram -> slouceni stavu -> sousednost 
stavu a s ni souvisejici kodovani, pripadna zmena prechodu ci pridani 
pruchoziho stavu tak, aby kodovani rozumne vyslo -> prepis symbolu do 0/1 
-> implementace pro konkretni druh pametovych clenu */
(Priznavam, ze jsem zde nedoresil, zda je komb.logika bezhazardni...)

4. vysledek tehoz systematickeho navrhu, ale jako pametove cleny zvoleny 
obycejne (urovnove) R-S klopne obvody.

Pri simulaci (viz dale) se zda, ze se vsechny implementace chovaji shodne. 
Prijemne zjisteni a pro me dulezite bylo, ze ackoli se (2.) lisi od (4.), 
ve skutecnosti jsou logicke mapy (2.) i (4.) jen ruznymi realizacemi zcela 
totoznych prechodu. Jedna se o tak trochu ovlivnovanou stastnou nahodu, ze 
mi takova "ekvivalence" vysla, ale myslim, ze to tak dopadnout nemuselo, 
pri trochu jinem kodovani.


Obvod (1.) v FPGA funguje, zda se, dobre, coz asi nikoho neprekvapi.

Podelim se nyni o zkusenosti se simulaci. Nejprve jsem vyexportoval z 
fyzicky syntetizovaneho obvodu FPGA (tj. s odhady zpozdeni) strukturu 
maker do VHDL. Podobvod, zobrazeny na (1.), byl realizovan na fyzicke 
urovni naprosto shodne s obrazkem.

To jsem pak zkousel simulovat v GHDL. Bez uspechu, vadilo mu porad, ze tam 
ma same nedefinovane hodnoty ('X'). Trochu ho chapu, snazil jsem se mu 
pomoct a zadat nejaky pocatecni stav, ale bud jsem to delal spatne, nebo 
to nepomohlo. Co bylo zajimave, ze mezi temi 'X' obcas problikly nejake 
zive urovne '0'/'1' a pak se to zas vratilo do 'X'.

Zkusil jsem to tedy v mene experimentalnim ModelSimu, vysledek byl na 
pohled shodny.

Zasmusil jsem se a stahl Logisim: http://ozark.hendrix.edu/~burch/logisim/
V Logisimu jsem pred 3 lety videl hranovy R-S jednomu geniovi ve skole 
pres rameno, ale bohuzel jsem si nezapamatoval podrobnosti.

Zajimave bylo, ze krome (1.) v nem nefungovalo nic z (2.,3.,4.). Duvod byl 
zase ten, ze signaly byly ve stavu Error a odmitaly se z nej vyhrabat.
Co je zvlastni, tak nektere asynchronni struktury v tom funguji dobre -- 
zahada. Po neschopnosti nalezt reseni v Logisimu samotnem jsem vyuzil 
moznosti doprogramovat si do nej v Jave mini-knihovnicku soucastek a 
doplnil jsem soucastku "Force" [F], ktera nedela nic moudrejsiho, nez ze 
pripadny Error ci Uknown nahradi nulou.

Pro pripadne zajemce ke stazeni zde:
http://rtime.felk.cvut.cz/~pecam1/logisim/lgsim-force.jar
a obvod:
http://rtime.felk.cvut.cz/~pecam1/logisim/edge_rs.circ
(Po otevreni .circ se Logisim zrejme zepta, kde je knihovna s Force, staci 
ukazat ten .jar a melo by to chodit.)

Napsal jsem autorovi Logisimu, jestli je to nejaka moje blbost, ze to 
nechodilo, nebo zda je opravdu nutno vyforcovat ten chybovy stav pryc.


Nevim, jak by si s ulohou poradilo tkgate, ale nezkousel jsem to.


K teto situaci se vazi me dotazy na zaver:

a) mate nejaky osvedceny program na simulaci asynchronnich automatu?

b) vite o nejakem SW nastroji, ktery by umel cloveku pomoci se syntezou 
asynchronniho automatu, tj. vyresit redukci FSM, kodovani stavu s 
trampolinami a pomocnymi stavy? Idealne pak i na nejakou mnozinu logickych 
clenu namapovat funkce (ale to se obecne resit moc neda, tak klidne i bez 
tohoto posledniho kroku)?

c) vite o nejakem SW nastroji, ktery by umel opak, a sice ze zakresleneho 
async. obvodu by vyhodnotil, kolik ma stavovych bitu, pro vsechny 
kombinace vstupu by spocital, ktere stavy mohou byt stabilni, urcil jejich 
prechody a zpetne vyplivnul tabulku FSM s komentarem, zda kodovani samotne 
obsahuje hazard pri prechodu mezi stavy, nebo ne?


Obzvlaste c) by se hodilo pro validaci automatu navrzenych stylem 
tuzka&papir. Mozna to nejde resit v kratsim nez exp case, ale pro takove 
mrnave automaty o par bitech by to asi melo cenu.

Urcite by si clovek pral jeste mnohem vymakanejsi nastroje na async 
logiku, ale vzhledem k tomu, ze doposud jsem o zadnem poradnem 
syntetizacnim nastroji neslysel, zrejme je tezke vubec vymyslet smysluplne 
zadani pro takovy syntetizer. Ale (b,c) podle me smysl dava a v O(2^n) 
bych to snad nabastlil i sam, ale jelikoz by se to ve FIFU pitomosti asi 
nedostalo do cela ani do smrti, radsi bych hotove reseni od nekoho, kdo 
tomu navic rozumi nesrovnatelne lip.


Dekuji a preji pekny den,
Marek


Další informace o konferenci Hw-list