Laboratórium 1 - 10. Mérés: Sorrendi hálózat vizsgálata

A VIK Wikiből
A lap korábbi változatát látod, amilyen David14 (vitalap | szerkesztései) 2013. február 9., 19:24-kor történt szerkesztése után volt.

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 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.

Beugró kérdések kidolgozása

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?

Több órajel forrás esetén hazárd alakulhat ki esetlegesen.

  • Egy FPGA-ban véges számú alacsony késleltetésű órajelelosztó hálózat van, ha ezeket elhasználod, akkor már nem garantált, hogy tényleg úgy fog működni a terved, mint ahogy kéne
  • Több órajelnél probléma lehet az egyes FF-ok hold és setup time-jainak megtartása, ekkor a FF-ok metastabil állapotba kerülhetnek (nem definiált a kimenet)

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: