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 Karaffa Levente Benjámin (vitalap | szerkesztései) 2023. január 19., 17:49-kor történt szerkesztése után volt. (→‎Segédanyagok)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)


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!


2020 őszi házi amit el is fogadtak: Fájl:Labor10 HFkidolgozás.pdf

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

Segédanyagok

Ellenörző kérdések 2018

Néhány mérésvezető 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

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: