Laboratórium 1 - 10. Mérés: Sorrendi hálózat vizsgálata
A mérésről
- Megismerkedtetek egy összetettebb tervvel és a ChipScope programmal
- Írtatok egy házit, amiben gyakoroltátok a dolgokat. Ilyen szintű feladat lehet gyakorlati mérésen.
- Milyen feladatok voltak:
- Blokkvázlat alapján hétszegmenses kijelző megvalósítása. Rategen, számláló, shiftregiszter, multiplexer. Nem sok új.
- ChipScope. Na ez az, amitől sokan tartotok, pedig nem rossz dolog.
- ChipScope - Két részből állt a mérésnek ez a része:
- Hozzáadtátok a ChipScope modult a tervhez (új forrásfileként), beállítottátok azt, hogy milyen jeleket akartok vizsgálni, hány mintát akartok venni, majd újrageneráltátok a programozófilet.
- Használtátok a ChipScope Analyzer-t, amivel megvizsgáltátok a rendszer jeleit.
- Miket tanultatok meg:
- Különféle triggerfeltételek: szint és élérzékeny triggerfeltételek, trigger sequence, egyes elborult csapatok storage qualificationt is.
- Miket szoktatok elrontani:
- Rögtön az elején feladjátok, ha ilyen feladatot kaptok :(
- Rosszul állítod be a ChipScope-ot, rossz jeleket köttök be, különös tekintettel az órajelre!
- Elfelejtitek, hogy milyen triggerfeltételt lehet beállítani a felfutó, lefutó, változó élre.
- Tipikus laborbeugró kérdések voltak:
- ChipScope-ról ez-az.
- Verilog modulok ("rategen" és testbench) írása
- Mintavételi frekvencia számítása
- Latch-ról mindenféle (okok, elkerülés, ezek) - Leírás - EZT GYAKRAN ELRONTOTTÁTOK BEUGRÓN!
- Miért nem használunk több órajelet egy FPGA-terven belül? EZT IS GYAKRAN ELRONTOTTÁTOK!
- (utóbbi két kérdésről: volt olyan verzió is, hogy ismerd fel, ez a Verilog-kód miért működhet hibásan FPGA-n belül, és akkor rámutathatsz, hogy latch, vagy több órajelet használsz).
- Fontos megjegyzések:
- Az itteni segédletek (főleg a megoldott házipéldák) elavultak, nektek már nem kell állapottáblázni meg ilyenek. Mérésvezetők jókat szoktak mosolyogni, ha valaki ilyet ad be...
- A beugrókérdések SEM ezek, és nem feltétlen az ellenőrző kérdések. A segédlet megértésével, készüléskor a mérés fejben végigpörgetésével teljesíthetőek. Nem szoktatok bukni rajta.
Házihoz segítség
A fenti házi jó kiindulópont, de nem egészen helyes, mert a kimenetnek azonnal 1-be kell váltania ha teljesül a specifikációban leírt feltétel (lásd a példának megadott 7-el oszthatóságnál). A kódban a kimenet állításánál tehát a feltételek közé vegyétek be a bemenet aktuális értékét is, hogy a kimenet annak megérkezésével egyidőben váltson!
Régi házik:
A mérés 2011 óta nagyot változott, már nem a Digitális technika 1 anyagát kéri számon (állapottábla és egyebek). Most már a magasabb szintű (számláló, shift regiszter, stb.) tervezést tekintjük célnak. Ha már ide jutottál, hogy nagyon elakadtál, egy olyan jótanács: ne állapottáblázz, meg Karnaugh-táblázz. A fél órás feladatot három napra hosszabbítod (tapasztalatból mondom). Inkább kérdezz a tárgy listáján és/vagy a mérésvezetőktől, segítünk.
- Kidolgozott házi feladat 1
- Megjegyzés: a mérésvezető szerint hiányzott a hasonló házimból a restart bemenet. A feladat nem írja, de digitális áramkörökbe tényleg illik tenni.
- Figyelmeztetés: ez a házi már elavult és abból a célból nagyon "hasznos", hogy lebukjanak azok, akik ez alapján csinálták meg a házijukat, súlyos elvi hibák vannak benne, egyáltalán nem érdemes ebből dolgozni!
- kidolgozott házi feladat 2
Beugró kérdések kidolgozása
Ellenörző kérdések 2018
Ezek eléggé elavult kidolgozások.
Néhány mérésvezetőknek van egy rossz szokása: a segédletben levő kérdést teszi fel, csak megváltoztat benne valamit. Vagy esetenként ugyanarra kérdez rá, csak másik irányból, más szavakkal. Tehát érdemes értve tanulni, nem bevágni.
Régi beugrókérdések
Ezt a részt még aktualizálni kell. Nem biztos, hogy még mindig ezek a beugrókérdések!
1. Mi a különbség a logikai analizátor állapotanalízis és időzítésanalízis üzemmódja közt? Mindkét üzemmódra alkalmas a ChipScope?
Állapotanalízis üzemmódban a bemenő jeleket a vizsgált hálózat órajelével szinkron mintavételezzük, így a vizsgált sorrendi hálózat (állapotgép) egymás utáni állapotai kerülnek az állapottárba. Időzítésanalízis üzemmódban a mintavételt egy nagypontosságú belső óra időzíti, így a vizsgált hálózat jeleinek időviszonyai is vizsgálhatók. A ChipScope CSAK állapotanalízisre alkalmas.
2. Mi a szerepe a triggerjelnek ill. a triggerszónak a közönséges analóg oszcilloszkópnál ill. a logikai állapotanalizátornál?
Az analóg oszcilloszkópban a triggerjel az időeltérítést indítja, ezért az analóg oszcilloszkóp gyakorlatilag csak a triggerjel utáni jeltartományt jeleníti meg.
A logikai analizátorban a triggerszó a mintavételezés/mintatárolás leállítását vezérli, a beállítástól függően az analizátor a triggeresemény előtti és utáni állapotokat is tárolni, megjeleníteni tudja.
3. A vizsgált szekvenciális hálózat egymás utáni állapotait akarjuk meghatározni. Milyen üzemmód ajánlott ebben az esetben, és mi legyen a mintavételező jel forrása?
Állapotanalízis üzemmód az ajánlott ebben az esetben. A mintavételezéshez a vizsgált hálózat órajelének azt az élét válasszuk, amelynél az állapotjelek már stabilak.
4. Egy hálózat terjedési késleltetését (Td) akarjuk meghatározni logikai analizátorral. Milyen üzemmódot használjunk ebben az esetben, mi legyen a mintavételező jel forrása, mekkora legyen a frekvenciája?
Időzítésanalízis üzemmódot használjunk, ebben az esetben a mintavételezést az analizátor belső órajele vezérli. A mintavételi frekvencia legyen az f = 1/Td érték többszöröse. Az, hogy legalább hányszorosa, a megkívánt mérési pontosságtól függ. A mért időszakasznak be kell férnie a mintatárba, ez (és az analizátor működési sebessége) korlátozza a maximális frekvenciát.
5. A logikai analizátorral vizsgált CMOS hálózat tápfeszültsége 3 V. Mekkora az ajánlott komparálási feszültség az analizátor bemenetén?
A CMOS logikai áramkörök komparálási feszültsége általában a tápfeszültség fele, ami a jelen esetben 1,5 V. A logikai analizátor bemenetein is ezt az értéket célszerű beállítani komparálási feszültségként.
6. Logikai analizátorral egy periodikus négyszögjelet vizsgálunk, melyről előzetesen azt tudjuk, hogy frekvenciája 5 kHz - 10 kHz, kitöltési tényezője pedig 20% és 50% közé esik. Mekkora legyen a mintavételi frekvencia minimális értéke, ha a jel L és H értékének időtartamát egyaránt legalább 5% pontossággal kívánjuk meghatározni. A számításnál tételezze fel, hogy csak egyetlen periódust mérünk az analizátorral és az analizátor belső mintavételi frekvenciájának bizonytalansága elhanyagolható.
A mintavételi frekvencia meghatározásánál a mérendő legkisebb időtartamból kell kiindulni. Ebben a példában ez a H állapot hossza, 20% kitöltési tényező és 10 kHz frekvencia esetén. Ennek értéke (1/10kHz) * 0,2 = 20 us. A megkívánt +- 5% mérési pontossághoz legalább 20 * 0,05 = 1 us-onként mintát kell venni. A mintavételi frekvencia minimális értéke 1 MHz. (Ha a belső óra frekvenciájának szokásos bizonytalanságát is figyelembe vesszük, akkor kicsit több mint 1 MHz kell.)
(Magyarázat: A legkisebb időtartamot úgy lehet elérni, hogy a legnagyobb frekit választjuk, és a legkisebb kitöltési tényezőt. Kitöltési tényező: azt határozza meg, hogy egy perióduson belül a négyszögjel a teljes periódusidő hány százalékában vesz fel logikai 1-es értéket. --> Logikai 1: H állapot.)
7. Miért nem ajánlott, hogy egy Verilog tervben több órajel forrást használjunk?
Az FPGA-ban az órajelnek egy speciális, "gyors vezeték" van dedikálva. Ha az órajelet pl. leosztva továbbítod, akkor mivel már nem fog a dedikált órajelvezetéken közlekedni, nem garantált, hogy az pontos lesz, azért könnyen hazárdokat idézhet elő.
8. Miért kerülendő a Latch-ek használata? Mire kell figyelni a Verilogban, ha if vagy case szerkezettel írunk le egy kombinációs logikát?
Pont amiatt, ami a kérdés második része - mert nagyon nagy az esélye, hogy kihagyunk egy if/else esetet a sok állapot közül, vagy egy case-t. És arra kell figyelni, hogy minden lehetséges állapot le legyen kódolva. (Verilog ismertetőben ez le van írva szépen)
9. Készítsen 3 bemenetű és/vagy kaput 2 bemenetű és/vagy kapuk (and2/or2) példányosításával!
module and2( input a, b, output z); assign z = a&b; endmodule module and3( input a,b,c, output z); wire x; and2 a1( .a(a), .b(b), .z(x)); and2 a2( .a(c), .b(x), .z(z)); endmodule
10. Adja meg azt a Verilog Test Fixture kódrészletet, ami 10 MHz frekvenciájú órajelet biztosít a vizsgálandó modul számára!
reg clk; initial clk=0; always #X clk <= ~clk;
Itt X értéke mondja meg, hogy az egy órajelen belüli élváltás hol van - tehát az órajel periódusideje ennek a kétszerese. Ez alapján már lehet számolni, és a megfelelő timescale alkalmazásával. Ha nem tévedek, akkor a 10 Mhz periódusideje 100 ns, tehát X megfelelő értéke 50ns. ( 'timescale 1ns/1ps sor a test fixtur elején)
Xilinx ISE bugok
Ide sorolhatjátok fel a Xilinx ISE használatakor felfedezett bugokat. A tárgy honlapján is van felsorolás, de ahhoz te nem tudsz írni..
- A Windows 8 a 14.2-es verziónál még nem támogatott, van, ami a 64 bites verzióval megy csak, van, ami a 32 bitessel. Nekem telepíteni sem sikerült.
- Telepítéskor a telepítési könyvtár ne tartalmazzon se szóközt, se számot, se ékezetes karaktert, a c: meghajtóra érdemes rakni. C:\Xilinx könyvtár menni szokott, Linux alatt pl. a /opt/Xilinx megfelelő
- Windows alatt ISE futása alatt ne válts billentyűkiosztást, lefagy a rendszer (évek óta nem javított ISE bug).
- Linux alatt érdemes az LC_ALL környezeti változót (meg a LANG-ot, meg a LOCALE-t) en_US-re vagy C-re állítani, különben vacakolhat. Mondjuk a Webpack-nál nem szokott előjönni.
- Van, hogy az ISE nem veszi észre, hogy egy UCF file-t hozzáadtál. Abban nyílvánul ez meg, hogy a jó kódod letöltve nem csinál semmit. Ilyenkor fogod, eltávolítod a projektből az ucf-et, aztán visszarakod. Illetve van, hogy nem a megfelelő modul alá húzza be az ucf-et, ilyenkor egy random verilog modult top modullá alakítasz (jobb egér, set as top module), majd az igazi top modulodat visszacsinálod top module-ra.
- Amikor első szimulációkor az ISIM hálózati kommunikációt akar nyitni, engedélyezni kell (lokális gépen nyit socketet saját magának, nem köszön ki a netre), különben nem fog működni.
Érdeklődőknek
Ha felkeltette az érdeklődésedet az FPGA programozás, ezeket a tárgyakat érdemes lehet hallgatni:
- Logikai tervezés: bővebben FPGA-ról, hardvertervezésről, perifériákról.
- Mikrorendszerek tervezése: mikroprocesszoros rendszerek tervezése FPGA-n belül.