„Laboratórium 1 - 10. Mérés: Sorrendi hálózat vizsgálata” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
(Új oldal, tartalma: „{{GlobalTemplate|Villanyalap|LaborI10esMérés}} ==Xilinx ISE bugok== Ide sorolhatjátok fel a Xilinx ISE használatakor felfedezett bugokat. A tárgy honlapján is …”)
 
(24 közbenső módosítás, amit 11 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
{{GlobalTemplate|Villanyalap|LaborI10esMérés}}
+
{{Vissza|Laboratórium 1}}
  
 +
__TOC__
  
==Xilinx ISE bugok==
+
== A mérésről ==
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.
+
*Megismerkedtetek egy összetettebb tervvel és a ChipScope programmal
* 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ő
+
*Írtatok egy házit, amiben gyakoroltátok a dolgokat. Ilyen szintű feladat lehet gyakorlati mérésen.
* Windows alatt ISE futása alatt ne válts billentyűkiosztást, lefagy a rendszer (évek óta nem javított ISE bug).
+
*'''Milyen feladatok voltak:'''
* 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.
+
**Blokkvázlat alapján hétszegmenses kijelző megvalósítása. Rategen, számláló, shiftregiszter, multiplexer. Nem sok új.
* 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.
+
**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) - [http://www.velocityreviews.com/forums/t371968-what-is-the-problem-with-latch-inference.html 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).
 +
*'''<span style="color: red">Fontos megjegyzések:</span>'''
 +
** 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 ==
 +
 
 +
 
 +
 
 +
*[[Media:labor1_10mérés_házi.pdf‎|Kidolgozott házi feladat]]
 +
 
 +
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|2020_meres10_hf]]
 +
 
 +
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.
 +
 
 +
*[[Media:Labor1_mérés10_házi1.pdf‎|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!
 +
*[[Media:Labor1_mérés10_házi2.pdf‎|kidolgozott házi feladat 2]]
 +
 
 +
== Beugró kérdések kidolgozása ==
  
==Fontos megjegyzés==
+
=== Ellenörző kérdések 2018 ===
* '''Az itteni segédletek (főleg a megoldott házipéldák) elavultak, nektek már nem kell állapottáblázni meg ilyenek (bezzeg az én időmben...). Mérésvezetők jókat szoktunk mosolyogni, ha valaki ilyet ad be... :-).'''
+
[[:File:Verilog beugrók.pdf| Nem hivatalos kidolgozás]]
* '''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.'''
 
-- Main.wachag - 2012.10.08.
 
  
==Beugró==
 
 
Ezek eléggé elavult kidolgozások.
 
Ezek eléggé elavult kidolgozások.
* [https://wiki.sch.bme.hu/pub/Villanyalap/LaborI10esM%e9r%e9s/10_ellkerdesek.pdf Ellenőrző kérdések]
+
*[[Media:Labor1 mérés10 ellkérd.pdf|Ellenörző kérdések kidolgozva]]
  
 
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.
 
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 ===
  
==Mérésről==
+
'''''<span style="color: red"> Ezt a részt még aktualizálni kell. Nem biztos, hogy még mindig ezek a beugrókérdések! </span>'''''
* Nálunk úgy volt, hogy le kellett csekkolni a verilogos progjaink szintaktikailag helyesek e! AZtán ki kellett választanunk az egyikőnkét, majd azt kellett
 
tesztelni a Wave valamivel(Nem kellett túl cifráznunk)! Azt létre kellett hozni egy topmodult, azaz egy tokot a készülékünknek amit terveztél
 
azt össze kell kötni egy előre definiált kézi clock-al, erre írni ucf fájlt, amit a mérési jegyzőkönyv segédletben találsz.
 
Amúgy a Webpack bevezető hasznos, annak a lépései alapján kell haladni. Ja és a végén ezt fel kellett tölteni FPGA-ra, és ott nyomógombokkal tesztelgetni!
 
Aki idáig eljutott az 5-öst kapott, aki nem az 4-est!
 
  
'''Jah és nálunk nem volt beugró, de ez tanárfüggő mert a hétfőiek írtak!''' ''by Szabi 2010''
+
'''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?'''
  
* Volt beugró az ellkérdésekből kaptunk kettőt, különböző párosításban. (pl. siznkron sorrendi hálózat tervezése + kritikus versenyhelyzet vagy setup time + Mealy és Moore közötti különbség). Sajnos mi csak 3.3-ig jutottunk, mert a 3.4nél nem tudtuk kicsalni az analizátorra az FPGA-ból az órajelet. Érdemes átnézni előtte, hogy hogy kell toplevel modult csinálni, azaz hogy kell két modult összekötni (verilog bevezetőben van egy nand kapus példa). Összességében jó jegyeket kaptunk, mert a mérésvezető sem tudta, hogy miért nem működik az elvárásainknak megfelelően az analizátor. 2010
+
Á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.
  
==Segítségek==
+
'''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?'''
* amennyiben ISE Webpack beépített szimulátorával szeretnéd tesztelni a házid win7 alatt, valószínű megakad a szimuláció elindításánál a következő üzenettel: This is a LITE version of ... MEGOLDÁS: winXP, ott működik, ahogy kell.
 
-- [[BucsiAndor|Bandi]] - 2010.11.22.
 
  
 +
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.
  
* [https://wiki.sch.bme.hu/pub/Villanyalap/LaborI10esM%e9r%e9s/aszi_sorr_halo.pdf Aszinkron sorrendi hálózatok - összefoglaló]
+
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.  
* [https://wiki.sch.bme.hu/pub/Villanyalap/LaborI10esM%e9r%e9s/szink_sorr_halo.pdf Szinkron sorrendi hálózatok - összefoglaló]
+
 
* [https://wiki.sch.bme.hu/pub/Villanyalap/LaborI10esM%e9r%e9s/allapotmin.pdf Állapotminimalizálás]
+
'''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?'''
* Digit gyakok: (felh:digit, jelszó:vifo1016) [http://bagira.iit.bme.hu/~tom/digit/digit_I/gyak/bsc1gy05.pdf 5.gyak - hazárd], [http://bagira.iit.bme.hu/~tom/digit/digit_I/gyak/gyak7.pdf#7 7. gyak - Sorrendi hálózatok], [http://bagira.iit.bme.hu/~tom/digit/digit_I/gyak/gyak_9.pdf 9.gyak - előzetes állapottábla felvétele], [http://bagira.iit.bme.hu/~tom/digit/digit_I/gyak/gyak_11.pdf 11.gyak - állapotösszevonás], [http://bagira.iit.bme.hu/~tom/digit/digit_I/gyak/gyak_12.pdf 12.gyak - állapotkódolás]
+
 +
Á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.  
  
* '''Topmodul tervezéshez''' ''by Csebisev''
+
'''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?'''
<pre>
 
module topmodule(Z,X,NY,kezi,clk,res, state); //egy ún. topmodulba fogjuk össze a kézi órajelet és az elkészült házi feladatot
 
output Z; //ugyanúgy kell bánni vele, mint bármelyik modullall, vannak kimenetei, bemenetei
 
input  X,NY,kezi,clk,res;
 
output wire [2:0] state;
 
Moore m1(clk, res, X, Z, enout, state); //példányosítás, itt konkrétan veszünk a készmodulokból egy-egy "példányt" és beleillesztjük
 
kezi_clk kezi2 (NY,kezi,clk,res,enout); //a topmodulba.
 
endmodule
 
</pre>
 
==Hivatkozások==
 
* [http://bme.ysolt.net/Torlesre_kerulo_anyagok/S1_Digit1/Arato_Peter-Logikai_rendszerek_tervezese.pdf Arató Péter - Logikai rendszerek tervezése]
 
  
* [https://wiki.sch.bme.hu/pub/Villanyalap/DigitII/BenesczkyZoltn-Digitlistervezsfunkcionliselemekkelsmikroprocesszorokkal.pdf Benesóczky ZOltán - Digitális tervezés funkcionális elemekkel]
+
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.  
  
* [http://www.mit.bme.hu/oktatas/targyak/vimia304/jegyzet MIT-es anyagok]
+
'''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.
  
==Házik villanysiteról==
+
'''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ó.'''
  
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, általában segítünk.
+
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.)
 
  
* [https://wiki.sch.bme.hu/pub/Villanyalap/LaboRI/hazi_10_perpernorbi.pdf Koszó Norbert_hazi_10_perpernorbi.pdf]
+
(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.)
* [https://wiki.sch.bme.hu/pub/Villanyalap/LaborI10esM%e9r%e9s/10eshazi.pdf HF]
 
* [https://wiki.sch.bme.hu/pub/Villanyalap/LaborI10esM%e9r%e9s/sokHF.pdf több HF]
 
  
Egy  4 < n < 8  állapotú,  egyetlen  X  bementtel  rendelkező sorrendi automata a következő képpen működik. Bekapcsolás után a kezdő állapotban marad mindaddig, amíg az X bemenete 1-nem lesz, itt Z=0-át ad. Ezután minden órajelre újabb állaptba lép, és egy n-1 hosszúságú kimeneti sorozat következő  elemét adja a Z kimenetén. Ezt mindaddig folytatja, míg az n-edik állapotba nem lép, de X=1 esetén itt marad s a sorozat utolsó elemét adja a kimeneten, X=0 esetén pedig a kezdő állapotba lép és 0-át ad. A kimeneti sorozat természetesen nem lehet konstans és az utolsó bitje mindig 1.
+
'''7. Miért nem ajánlott, hogy egy Verilog tervben több órajel forrást használjunk?'''
  
Példa Mealy modell esetén, ha n=5 és a megadott kimeneti sorozat 1101:
+
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ő.
X:001xxxx1110001x?
 
Z:000110111100001?
 
n=5, x=1011
 
  
b. Kapcsolási rajz Mealy modell szerinti automatához, Verilog leírás Moore modell szerintihez
+
'''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?'''
<pre>
 
module Moore(X,Z,clk,RESET);
 
  input clk;
 
  input X;
 
  input RESET;
 
output reg Z;
 
  reg[2:0] S;
 
parameter a=3'b000;
 
parameter b=3'b001;
 
parameter c=3'b011;
 
parameter d=3'b010;
 
parameter e=3'b110;
 
parameter f=3'b100;
 
parameter g=3'b101;
 
always@(posedge clk or posedge RESET)
 
begin
 
if(RESET)
 
begin
 
S<=a;
 
Z<=0;
 
end
 
else
 
begin
 
case(S)
 
  a: begin if (X==1) S<=b; else S<=a; Z<=0; end
 
b: begin S<=c; Z<=1; end
 
c: begin S<=d; Z<=0; end
 
d: begin S<=e; Z<=1; end
 
e: begin S<=f; Z<=1; end
 
f: begin if (X==0) S<=g; else S<=f; Z<=1; end
 
g: begin S<=a; Z<=0; end
 
default: begin S<=a; Z<=0; end
 
endcase
 
  
end
+
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)
end
 
endmodule
 
</pre>
 
----
 
<pre>
 
/*****************************************************************
 
* *
 
*  Sorrendi automata, x=0 esetén marad alapállapotban, z=0.   *
 
*  x=1 esetén z=0, majd sorban kiadja a kimenetre az 1101 *
 
*  sorozatot x értékétől függetlenül. A kimeneten ezután addig  *
 
*  marad z=1, amíg x=1, ezután alapállapotba kerül. *
 
* *
 
*  Máté Miklós VZ7YRO *
 
* *
 
*****************************************************************/
 
  
 +
'''9. Készítsen 3 bemenetű és/vagy kaput 2 bemenetű és/vagy kapuk (and2/or2) példányosításával!'''
  
module automata(clk, reset, x, z);
+
module and2(
  input clk;
+
            input a, b,
  input reset;
+
            output z);
  input x;
+
assign z = a&b;
  output z;
+
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
  
  reg [2:0] y;  // Állapot
+
'''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 [2:0] Y;  // Új állapot
 
  
  // Paraméterekkel állapotkódolás
+
  reg clk;
  parameter a = 3'b000;
+
initial clk=0;
  parameter S1 = 3'b001;
+
always #X clk <= ~clk;  
  parameter S2 = 3'b101;
 
  parameter S3 = 3'b110;
 
  parameter S4 = 3'b111;
 
  
  // Állapotregiszter (D tároló)
+
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.
  always @(posedge clk or posedge reset)
+
Ha nem tévedek, akkor a 10 Mhz periódusideje 100 ns, tehát X megfelelő értéke 50ns.
if (reset) y <= a;
+
( 'timescale 1ns/1ps sor a test fixtur elején)
else y <= Y;
 
  
  // Állapotlogika
+
== Xilinx ISE bugok ==
  always @(x or y)
 
case (y)
 
a:  if (x) Y <= S1;
 
else Y <= a;
 
S1:   Y <= S2;
 
S2:   Y <= S3;
 
S3:   Y <= S4;
 
S4: if (x) Y <= S4;
 
else Y <= a;
 
default: Y <= a;
 
endcase
 
  
  // Kimeneti logika
+
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..
  assign z = y[0];
+
* 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.
  
endmodule
+
== Érdeklődőknek ==
</pre>
 
  
-- [[MolnarGabika|GAbika]] - 2010.
+
Ha felkeltette az érdeklődésedet az FPGA programozás, ezeket a tárgyakat érdemes lehet hallgatni:
  
 +
*[http://www.mit.bme.hu/oktatas/targyak/vimim286 Logikai tervezés]: bővebben FPGA-ról, hardvertervezésről, perifériákról.
 +
*[http://www.mit.bme.hu/oktatas/targyak/vimim363 Mikrorendszerek tervezése]: mikroprocesszoros rendszerek tervezése FPGA-n belül.
  
[[Category:Villanyalap]]
+
[[Kategória:Villamosmérnök]]

A lap 2020. november 7., 11:54-kori változata

← Vissza az előző oldalra – Laboratórium 1

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

Beugró kérdések kidolgozása

Ellenörző kérdések 2018

Nem hivatalos kidolgozás

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: