Számlálók, adatfeldolgozó egységek F1. A LOGSYS kártya órajel generátora 16MHz frekvenciájú szimmetrikus négyszögjelet állít elő. Egy digitális stoppert szeretnénk készíteni. A stopper alapvetően a hagyományos mechanikus stopperekhez hasonló felhasználói interfésszel (egygombos kezelés) rendelkezzen, START-STOP- RESET, de képes legyen századmásodperc felbontással mérni, majdnem 10 perc időtartamig. F1.a Első lépésként készítsen egy ütem generátort, amely 0,01 mp gyakorisággal előállít egy 1 órajel széles pulzussorozatot az időalap órajel generátor 16MHz frekvenciájú jeléből. A feladat megoldásánál az időalap kiszámításából kell kiindulnunk. A 16MHz-es alapórajel periódusideje 62,5ns. A 0,01 mp-es ütemező jelhez egy 160000-es osztásra van szükségünk. Azaz egy bináris számlálóból pulzuskimenetű frekvenciaosztót készítünk, a modulus 160000, azaz a végérték jelzés dekódolását decimális 159999 értékre állítjuk. Ezt 18 bites bináris számlálót használva lehet a legegyszerűbben megoldani, melynek számolási tartománya 2 18-1, azaz 262143 (>159999). A decimális 159999 érték bináris megfelelője 10_0111_0000_1111_1111, azaz hexadecimálisan 18 h270ff, ezt az értéket kell a végérték jelzés figyeléséhez beállítani. Megjegyzés: 1. Lehetséges lenne 4 db 4 bites decimális BCD számláló és 1 db 4 bites bináris számláló kaszkádosításával is pontosan beállítani a 159999 osztási periódust, de ez a megoldás nagyon bonyolult lenne tervezési és megvalósítási szempontból is. Az időalap generátor Verilog kódja: Ez minden 160000.-ik órajel periódusban kiadja a tick01 nevű 62,5ns szélességű pulzust, ami engedélyezi majd a STOPPER teljes időmérő láncát egy számolási ciklusra.
F1.b Tervezze meg blokkszinten a stopperóra számláló láncát, ha PERC : TÍZMP_MP, TIZEDMP_SZÁZADMP formátumú kijelzést kell realizálni. Ez 5 digit, a LOGSYS kártyán esetleg éppen kijelezhető lenne... A teljes számolási lánc felépítését viszont a mérési és kijelzési formátum miatt már célszerűbb közvetlenül BCD dekadikus számlánccal felépíteni, mert így elkerülhetjük a BIN->BCD átalakítás bonyolult feladatát. A számlánc felépítéséhez 5 db azonos könyvtári BCD számláló elemet alkalmazunk, amelyet a 4 bites számlálóból alakítunk ki modulus csökkentéssel. Az 5 dekadikus helyiérték közül a TÍZMP számjegyen a számolás csak 0 5 ig terjed, ennek kezeléséről majd gondoskodni kell: 0 : 00,00 - tól 9 : 59,99 - ig F1.b Tervezze meg a szükséges számláló áramkör modulok Verilog HDL specifikációját, kialakítva a kaszkádosításhoz szükséges jeleket. Az egyszerű, törölhető felfelé számláló BCD dekadikus egység teljes Verilog HDL kódja a következő: Ebből építünk be 5 példányt, követve az egyszerű soros kaszkádosítási szabályt, ahol lehetséges. Az első fokozat engedélyező jele az állapotvezérlő RUN parancsjele és a tick01 ütemező jel.
A következő szinten, a tíz másodpercnél megtörik a dekadikus szabály, mert itt hatvanas számrendszer következik. Ezt a dekadikus számláló modulusának 6-ra csökkentésével, azaz az 5 állapot komparálásával/dekódolásával figyeljük, és két helyen avatkozunk be: egyrészt ebből származtatjuk a tick_tmp átviteljelet, másrészt ezzel a jellel kiegészítjük a vezérlő RESET pulzusának hatását, azaz 59,99- kor is nullázzuk a tíz másodperc számlálót. MEGJEGYZÉS: Természetesen itt használhatnánk a CNT10 modulhoz hasonlóan egy CNT6 modult és akkor a kétfajta modullal szabályosan folytatódhatna a számlánc felépítése, de a könyvtári elemek száma feleslegesen gyarapodna. A szimuláció könnyebb értékelhetősége érdekében bevezetünk egy 20 bites, 5 BCD digites változót, az időt és ez lesz a STOPPER kimenőjele. F1.c Tervezze meg a STOPPER vezérlő egységét, ami a START parancs 0 1 átmenetére elindítja a stoppert, a STOP parancs 0 1 átmenetére leállítja az órát. A RESET parancs pedig nullázza a számlálót, és a stoppert újra mérésre kész állapotba teszi.
A vezérlőegység két részletből áll. Az első a MOSI (a LOGSYS GUI 1 bites kimeneti adata) vezérlőjel felfutó él detektálása. A második egy 3 bites gyűrűs számláló, ami a 3 állapotot közvetlenül realizálja. Itt most az egyszerűbb felírás érdekében eltekintettünk a szokásos state <= next_state felírástól, közvetlenül a gyűrűs számlálót írjuk le, csak éppen egy state nevű változóval. A 3 bites state változó 1-az-N-ből kódolású, azaz egy-egy bitje közvetlenül a szükséges kimeneti jelet definiálja. Egy gyors szimulációs ábra a 9p59.99mp átfordulásról
A teljes terv blokkvázlata a következő (a kijelző hálózat megtervezésével nem foglalkoztunk): dig4 dig3 dig2 dig1 dig0 ou7seg in4 perc e (min) idõmultiplexált kijelzõ in3 in2 ticktmp tmp tickmp mp e (10s) (1s) e in1 tickmpt mpt e (0.1s) in0 tickmpsz mpsz e (0.01s) tick01 4 mod = 16x10 elõosztó rst (16MHz) tickmp tmp[2] tmp[0] RESET init run idle RESET=1 eou=1 eou=0 RESET RUN stopper vez. rst felfutó él figyelõ rst in rst 100 010 001 MOSI SZORGALMI FELADAT F2. Tervezzen egy adatfeldolgozó egységet, ami a két bemeneti 8 bites adatból képes kiválasztani a nagyobbikat és azt a kimenetre kapcsolni. Az adatábrázolási formátum előjel nélküli egész. F2.a Első lépésként tegyen javaslatot a tervezendő áramkörre. Milyen funkcionális egységeket használna a terv megvalósítására? Az első kérdésre a válasz egy nagyság szerint összehasonlító komparátor, aminek a kimenete egy 8 bites 2:1 méretű busz multiplexert vezérel. Legyen a két adatbemenet A[7:0] és B[7:0]. Ha ezek előjel nélküli 8 bites egész számok, akkor változtatás nélkül a komparátor bemenetére kapcsolhatók, (vagy egy kivonást végző modullal az A-B művelet utáni átvitel bit jelzi, ha A kisebb, mint B) és az A_GT_B kimenet felhasználható a kimeneti adatválasztó multiplexer vezérlésére. Az áramkör tisztán kombinációs hálózat, a kimeneti eredményt a tranziens jelterjedések lezajlása után azonnal megjeleníti. Az egyenlőség esete is beleérthető a kimenet előállításába, hiszen nincs más lehetőségünk, mint valamelyik bemeneti jelet kiadni, amelyik biztosan nem a kisebbik a kettő közül. Ez miatt a feltétel logikát bonyolítani egy kiegészítő egyenlőség vizsgálattal felesleges lenne.
F2.b Egészítse ki az áramkört úgy, hogy a bemenetére érkező adatokat sorba rendezve NAGYOBB- KISEBB módon kiadja a kimenetén. Milyen módon oldotta meg az újabb feladatot? Az előző megoldás egyszerűen kiegészíthető egy újabb, az előző áramkör kimenetét pont fordítva generáló multiplexerrel. Az egyenlőség esete itt is egyértelműen helyes kimeneti eredményként értékelhető. Olvassuk el a második megjegyzést a kódban! F2.c Az előző pontban kialakított egység felhasználásával tervezzen meg egy 3 pontos medián szűrőt. Medián szűrő: A bemeneti adatokat egy 3 fokozatú késleltető regiszter sor tárolja. A regiszterekben tárolt értékeket nagyság szerint sorba rendezve, a 3 közül mindig a középső elemet (medián) adja a kimenetre. Tesztelésként használja az elmúlt heti gyakorlat adatsorát: (Az előző héten 4 pontos átlagolással lineárisan szűrtünk.) x(0) = 21, x(1) = 19, x(2) = 22, x(3) = 20, x(4) = 27, x(5) = 22, x(6) = 20, x(7) = 21, x(8) = 18, x(9) = 22, A medián szűrő egy olyan nemlineáris szűrő, ami a bemeneti adatokat nem átlagolással (lásd előző heti feladat!), hanem egyszerű sorba rendezéssel és a középső elem kiválasztásával dolgozza fel. Az első feladat egy 3 fokozatú késleltető regiszter sor beépítése. A bemeneti x(t) adat mintáit órajelenként az R1, R2 és R3 regiszterekbe írjuk, úgy, hogy az X R1-be, az R1 R2-be, az R2 R3-ba másolódik minden órajelre. Így az R1, R2 és R3 regiszterek kimenetén mindig a legutóbbi 3 minta, azaz x(t-1), x(t-2), x(t-3) értéke lesz elérhető.
A szűrés ezeken az R1, R2, és R3-ban tárolt adatokon történik, páronkénti összehasonlítással. A SORTER modul mindig 2 adatot vizsgál és kimenetén a GT-LT viszony szerint rendezve adja ki őket. Tehát az első modul az R1 és R2-t vizsgálja és generálja a GT12, LT12 sorba rendezett adatpárost. Ezek a részeredmények még további feldolgozást, rendezést igényelnek. Ha az R1, R2 közüli kisebbet (LT12) rendezzük R3-al, akkor biztosan megkapjuk a 3 közül a legkisebbet LT123 és egy olyan eredményt, GT3LT12, ami még akár lehet a legnagyobb is. Ezért ezt újra vizsgáljuk az R1 és R2 közül nagyobbnak talált GT12-vel, ami alapján generálódik a GT123 és ennek a SORTER-nek az LT kimenetén pedig a MED123, hiszen a 3 adat közül, ha már megvan az LT123 és a GT123, akkor a maradék harmadik elem már csak a MED123 lehet. A 3 SORTER-ből álló adatfeldolgozó hálózat: A feladatkiírásban adott minta adatsorozatot alkalmazva x(0) = 21, x(1) = 19, x(2) = 22, x(3) = 20, x(4) = 27, x(5) = 22, x(6) = 20, x(7) = 21, x(8) = 18, x(9) = 22, a MEDIAN3 kimenete a következő eredményt adja:
A mintavevő regiszterek, a belső részeredmények és adatok részletes feltüntetése mutatja a rendezés folyamatát: F2.d Ha esetleg az elkészített egységet egy nagyobb méretű adatvektor (5,7,9 adat) medián szűrését vagy akár sorba rendezését elvégző feladatra szeretné használni, milyen topológiájú elrendezést kellene kialakítania? Hasonlítsa össze ezt a megoldást egy buborék jellegű rendezést végző algoritmussal? Szempontok: Erőforrás igény, végrehajtási idő, kialakítás komplexitása.. Nagyobb adatszám esetén N*(N-1)/2 SORTER egység kell, egy háromszögszerű elrendezésben. 5 adat 10, 7 adat 21, 9 adat 36 SORTER egységgel rendezhető ebben a párhuzamos felépítésben.