X-akták - avagy a digitális áramkörök rejtelmei

Noha az "digitális elektronika" mint olyan arról lehet nevezetes hogy egyik állapotot egyértelműen kell kövesse a következő állapot, a hardver-leíró nyelvek közül is a Verilog szereti használni a sztenderd "0" es "1" (és "z") állapotokon felül az "x"-et. Ami... ami úgy van definiálva mint: nem tudjuk, nem érdekel, nem érint, vagy ennek valamiféle kombinációja. Szeretjük is használni az "x"-et már "beugró szinten is", már a legegyszerűbb igazságtábláknál is megjelenhetnek.
 

Jó példa erre, mind a "nem érint", mind a "nem érdekel" állapotokra például egy prioritás-kódoló: ha van négy (azaz 4 bitnyi) bemenetünk, akkor az egyik 2 bites kimenet (O) legyen a legelső pozíció amin 1-es van, a másik 1 bites kimenete pedig az hogy van-e egyátalán 1-es  a bemenetek között (V). A V állapot lényegében a 4 bemenet logikai "vagy" kapcsolata, az O állapot pedig V=1 esetén egyértelmű, V=0 esetén meg... hát, mindegy, akkor tulajdonképpen nem érdekel. És ha a 4 bemenet közül a legelső már 1 (azaz V=1, O=0), akkor valójában nem érint minket hogy a többi három bemenet az mennyi. Ha az első két bemenet az 0, a harmadik pedig 1 (azaz V=1, O=2), akkor meg az nem érint és/vagy érdekel hogy a negyedik bemenet az mi. Hasonló jellegű a "nem érdekel" állapotra pl egy memória modul meghajtása: ha olvasnánk a memóriából és a "read enable" az 0, akkor tökmindegy hogy mi van a címvezetéken, a modul úgysem ad vissza adatot.

Elektronikai/logikai szintézisben azt hinnénk hogy ez az egész nem definiáltság egy jól definiált dolog és az "x"-ek megfelelő használata még segít is a logika egyszerűsítésében (pl a fenti prioritás-kódoló esetében lehet hogy egyszerűbb az az áramkör ami V=0 esetén nem egy előre megadott, definiált O értéket ad vissza, hanem valamit). Ugyanakkor már korábban feltűnt hogy a gyakorlatban, egy RTL szintézis során amikor ezt így vagy úgy megpróbálnánk kihasználni, akkor a kapott logika nemhogy egyszerűbb lenne de néha még bonyolultabb is(!), ha megengedőbbek vagyunk és lehet itt-ott "x" is a kimenet az adott/megfelelő esetekben.

Próbáltam felturni az interneteket hogy ezt így hogy, hátha találok valami értelmeset. És mindeközben egyenesen az ARM egyik fejlesztőjétől eme írás jött szembe: https://developer.arm.com/documentation/arp0009/a/. Kicsit hosszú (30+ oldal) de nagyon tanulságos ha valakit érdekel a téma. Az is látszik hogy pont 20 év alatt ez szinte semmit sem fejlődött... Cserébe azért minden is gyorsul és/vagy kevesebbet fogyaszt, legyen az ARM vagy nem ARM, szóval csakcsak tudnak valamit :)

Hozzászólások

"arról lehet nevezetes hogy egyik állapotot egyértelműen kell kövesse a következő állapot"

Követi is, ne aggódj.

Ha a tervezőt nem érdekli a "következő" állapot, attól a fizika még működik, és lesz ott egy állapot. Az pedig az előzőtől (és a bemenő jelektől) függ.

Amit hiányolok a szösszenetedből, hogy nemcsak magas és alacsony jelszint létezik a digitális technikában, hanem egy harmadik, "lebegő" állapot is. Tehát ha a memóriádnak elfelejtesz aktív CS (chip select) jelet adni, akkor a kimeneteit elengedi, hogy helyette másik chip hajthassa meg a buszt.

"Normális ember már nem kommentel sehol." (c) Poli

Amit hiányolok a szösszenetedből, hogy nemcsak magas és alacsony jelszint létezik a digitális technikában, hanem egy harmadik, "lebegő" állapot is.

Pedig ottan megemlitettem hogy van "z" is :] Csak ugye az van hogy míg RTL-ben ugyan használhatsz "z"-t, például egy FPGA pl nem igazán tudja ezt. Azaz "belül" nincsenek is "z" állapotba hozható LC-k, "kívülre" meg az egyedi pin-ekhez tartozó I/O cell az ilyen "2 output, 1 input" jellegű absztrakciót ad általában. Szintúgy valamelyik internetekben azt a javallatot olvastam annó hogyha tisztán FPGA-n belüli összeköttetésre akarnánk olyan buszt csinálni amit diszkrét komponensek esetén z-vel csinálnánk, akkor használjunk ottan "wired and" meg "wired or" jellegű megoldásokat (wand, wor). Azóta ezt használom én is. Asszem valami olyasmi a háttere hogy a z-ket multiplexereken keresztül, a wand/wor-okat pedig közvetlenül a LUT-okra szintetizálja - és ezutóbbi hatékonyabb. És ezutóbbinál az "erősebb kutya" jellegű elektronikai probléma sem játszik :)