„Laboratórium 1 - 11. Mérés: Programozható perifériák mérése” 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|LaborI11esMérés}} ==Fontos megjegyzés== '''Ez a mérés tavaly óta egészen más. Az ide föltett segédanyagoknak közük nincs hoz…”)
 
 
(23 közbenső módosítás, amit 7 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
{{GlobalTemplate|Villanyalap|LaborI11esMérés}}
+
{{Vissza|Laboratórium 1}}
  
 +
__TOC__
  
 +
== A mérésről ==
  
==Fontos megjegyzés==
+
*Megismerkedtetek egy nehezebben érthető blokkvázlattal, és néhány soros kommunikációval: UART, SPI.
'''Ez a mérés tavaly óta egészen más. Az ide föltett segédanyagoknak közük nincs hozzá. Csak hogy ne lepődjetek meg.'''
+
*''' Előkészületkor megtanultátok: '''
 +
**UART paraméterei, sebesség, PARITÁS, melyik bit érkezik először, hány bitből áll egy adatátvitel (tipikus kérdés lehet, hogy mennyi időbe telik a neptun-kódod átvitele adott bitrátával, és start, stop és paritásbit számmal)
 +
**SPI kommunikáció, SPI topológia (milyen vezetékek vannak master és slave közt)
 +
**Hőmérő modul hőmérséklet kimenetének átszámítása ember által kezelhetővé ('''Nem felejtjük le az előjelet!''')
 +
*''' Tipikus beugró kérdések voltak: '''
 +
**UART kommunikáció paraméterei
 +
**SPI topológiája
 +
**Adott UART hullámforma milyen adatot vitt át  <--- felcserélitek a bitsorrendet
 +
**!!!!Verilog kód alapján kiegészíteni hullámformát!!!! <-- ezzel sokatoknak baja szokott lenni
 +
**Hőmérő modul <--- itt lefelejtitek az előjelet
 +
*''' Mérésen megtanultátok: ''' - Blokkvázlat megvalósítása:
 +
**SCLK előállítása (nem keveritek sem a rategen modullal, sem a testbench órajellel, ez egy harmadik dolog)
 +
**kommunikáció ütemezése
 +
**stabil kimenet létrehozása
 +
**kettes komplemens képzése
 +
**elméleti kérdések (írható-e egy regiszter több always blokkból, stb.)
  
 +
== Házihoz segítség ==
 +
*[[Media:Labor1_mérés11_házi1_2013.pdf|Kidolgozott házi feladat]]
  
=====Többen jelezték hogy a Beugró kidolgozás 1. kérdésre rossz a válasz =====
+
== Segédanyagok ==
a helyes válasz elvileg ez:
 
Az órajel 2O ns -os de a mintavételezés 4 ns-onként történik az órajel váltása így csak 4ns-onként lehetséges. Ezért létrejöhet
 
16ns-os periódusidő is ekkor természetesen a következő periódus 24 ns-os. A két órajelre ezek a mintavételi időpontok ráadásul
 
eltérőek lehetnek, így ezért láthatunk két különböző órajelet.
 
  
 +
* [[Media:idigit_verilog_utmutato.pdf | A Verilog nyelv részletesebb bemutatása]] - Az infósok első féléves digit tárgyához készült, de emészthetően leírja amit nekünk is tudni kell
  
==A mérésről==
+
=== Beugró kérdések kidolgozása: Ellenörző kérdések 2018 ===
=====Beugró=====
+
[[:File:Verilog beugrók.pdf| Nem hivatalos kidolgozás]]
A beugró 2 kérdésből állt.
 
* Az egyik az ellkérdésekből volt, a '''13''' -mas (_Mekkora átviteli sebesség érhető el EPP módban? Hasonlítsa össze a PC-n található külső interfészek átviteli kapacitásait (soros,párhuzamos,USB,Firewire)_.
 
* A másik kérdés pedig: adott volt egy átviteli sebesség ''bps'' -ben és, hogy 8N1 kódolású. Mennyi idő alatt lehet átvinni 10byte-ot.  
 
  
A mérés nem volt olyan érthetetlen, mint pl. a 3-mas bemutató mérés. Az anyagot érdemes alaposan átnézni, de sztem nem kell elveszni a részletekben. A mérés nagyjából megoldható, mi a 2. feladat elejéig jutottunk.
+
'''''<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>'''''
  
[http://www.mediatronix.com/pBlazeIDE.htm PicoBLaze-hez letöltés]
+
'''1. Egyetlen ASCII karakter UART átvitele hány bit kiküldését jelenti a házi feladatban adott paraméterek esetén? Pontosan hogy épül fel ez a keret, milyen sorrendben kell kiküldeni a biteket?'''
  
==Ellenőrző kérdésekre a válaszok:==
+
Az UART adatátvitel specifikációja szerint: 1 start bit + 8 adatbit + 1 paritásbit + 1 stopbit, összesen tehát 11 bit / 1db ASCII karakter.
Szilágyi Tamás ill. Nedi válaszai az [http://villany.sch.bme.hu/document.php?doc_id=9182 villanysite]-ról
 
<ol>
 
<li> Az analizátor max. 3ns csatorna-csatorna eltérési tűréssel dolgozik. Az 50MHz-es jel 20ns-os periódusidejéhez képest ez jelentős hibforrás. (Mert a hozzávezetések induktív és kapacitív tulajdonságai miatt különböző késleltetéseket szenved az órajel.)
 
<li> Az eltérés az analizátor mintavételezési hibájából fakad, a 4ns mintavételi sebesség esetén a számláló állapotait is megfigyelhetjük.
 
<li> A 32 bites számláló ciklusideje f=50MHz-es órajelet feltételezve: T = 2^32/50e6 = 85,988s. A "szívhang" kb másodpercenként villog, ezért 2^32/85 = 2^26, tehát a 26. bitről üzemelhet a szívhang.
 
<li> 85,988s. (lásd előző)
 
<li> Csak a bemeneti nyomógombok vannak pergésmentesítve, ezért a kapcsolóknál lehetséges pergés.
 
<li> HW üzemmódban, ha csak a BTN5 van megnyomva: 16 lassabb bittel változik: T = 2^16 * 20ns = 1,31ms a leggyorsabban változó szegmens periódusideje.
 
<li> Ha a PC kész az adatok küldésére, küld egy RTS (Request To Send) jelet a kártyának. Ha a kártya kész a fogadásra, akkor válaszol egy CTS (Clear To Send) jellel, ekkor megkezdődik a soros átvitel. 
 
<ul>
 
<li> ha van hardveres átvitelkezelés, akkor a CTS aktív állapotának hiányában a PC felfüggeszti az átvitelt addig, amíg a kártya újra kész nem lesz.
 
<li> ha nincs engedélyezve a hardveres átvitelkezelés, akkor a CTS jel értéke közömbös.
 
</ul> Hatásuk akkor érvényesül, ha az adó gyorsabban ad, és így a lassú vevő túlcsordul.
 
<li>
 
<ul>
 
<li> sebesség (bps)
 
<li> 8N1 (adatbitek száma:8/7/6/5, paritás:nincs/van, stopbitek száma: 1,1.5,2)
 
<li> átvitelvezérlés (hardveres, szoftveres, nincs)
 
</ul>
 
<li> 100B = 800b, Byte-onként 1 stopbittel + 1 startbit 1000b. t = 1000/115200 s
 
<li> ??? 115200 bps vagy 19200 bps
 
<li> A vevőoldali puffer szerepe: ha a kártyya foglalt, a küldött adatok nem vesznek el, hanem beíródnak a 16bites FIFO pufferbe. Az állapotjelző bitek (half/full) révén a szoftveres megvalósítás ezekkel tudja vezérelni az átvitelt a CTS változtatásával.
 
<li>
 
<ul>
 
<li> Standard Paralell Port
 
  <ul>
 
  <li> csak kimenő irányú adatátvitel
 
  <li> egyetlen 8bites kimeneti adatregiszter
 
  </ul>
 
<li> Extended Paralell Port
 
  <ul>
 
  <li> a cím és az adatkivitel mellett e paraméterek visszaolvasása is lehetséges
 
  <li> 8bites címregiszter, 256 egyedileg címezhető adatregiszter, az első 4 címhez egy-egy 8bites írható/olvasható adatregiszter van (a nem használt címekre írt adatok elvesznek, hiba nincs).
 
  </ul>
 
</ul>
 
<li>
 
<ul>
 
<li> Soros port: ~56 kbit/s
 
<li> EPP: ~2 Mbit/s
 
<li> USB 1.0,1.1: 12 Mbit/s
 
<li> USB 2.0: 480Mbit/s
 
<li> Firewire: 400Mbit/s
 
</ul>
 
<li> kb 40MIPS a segédlet szerint. Egy utasítás 2 órajel alatt megy végbe, tehát 25MIPS
 
<li> a Picoblaze processzor
 
<ul>
 
<li> memóriája 256B (programtár) és 16B univerzális regiszter
 
<li> I/O tartománya 256B (8bites I/O-busz)
 
<li> utasításcsoportjai: vezérlő, interrupt, logikai, aritmetikai, shiftelés/forgatás, I/O
 
<li> 8bites ALU, egyszintű INT, 15szintű stack
 
<li> beágyazott vezérlőként vagy oktatási célú processzorként használható
 
</ul>
 
<li> A végrehajtás minden utasítás után megáll. A regiszterek tartalma ekkor kiolvasható, megváltoztatható. Utána a program továbbléptethető.
 
<li> A töréspontoknál a program futása megszakítás hatására megáll. Így előre kijelölhetjük, hogy meddig fusson a program, majd leállás után kiolvashatjuk a memóriatartalmat és a regisztereket debugolás céljából.
 
<li> Csak olyanoknál, ahol a program megszakítható. Pl. hardveres adatkapcsolatok megvalósításakot egy-egy csomag vagy byte elküldése közben nincs értelme megállítani a programot. A belső számítások, feltételes elágazások helyessége viszont ellenőrizhető.
 
<li> Egyszintű, szintérzékeny: ha engedélyezve van, akkor a Picoblaze minden újabb utasítás elővétele előtt megvizsgálja az interrupt bemenet értékét. A megszakítási vektor: FF (ide általában egy ugró utasítást szokás tenni). Nem túl bonyolult feladatok megoldására való, mert nagyszámú interrupt kérés különválasztása már problémát jelenthet.
 
  
<li> A Picoblaze egy nagyon alapszintű processzor, melynél kisebbet semmihez nem érdemes használni. Microchip PIC mikrovezérlők gyártanak jóval nagyobb memóriával és hasznos portokkal, I/O egységekkel. Motorola ipari vezérlők is széles körben elterjedtek. Egyes helyeken még i386-ot is használnak beágyazott vezérlőként.
+
'''2. Hogy kapjuk meg egy 4 bites BCD számjegy 8 bites ASCII kódját? Mit mutat a paritásbit, milyen hardver elemmel számítható a legegyszerűbben, ha az összes adatbit rendelkezésre áll? Páros paritás esetén milyen paritás érték tartozik az ABh adathoz?'''
</ol> 
 
  
==Házik:==
+
*Az ASCII szabvány szerint egy „x” számjegy ASCII kódja 3xh alakban áll elő, pl. a 9-es számjegynek az ASCII kódja 39h = 0011.1001b.
====4-es====
+
*A paritásbitet arra használjuk, hogy egy bináris számot úgy egészítsünk ki vele, hogy az vagy páros darab, vagy páratlan darab 1-est tartalmazzon. A gyakorlatban ezt hibaészlelésre használjuk.
nekem ez volt, rövid, ezért leírom, meg azért, mert a villanysite-on több megoldást láttam, de mindegyikben volt vmi apró hiba. Ez nem jelenti, hogy az enyémben nem lesz.
+
*A paritás legegyszerűbben XOR kapuk segítségével határozható meg.
Készítsen egy számlálót felhasználva az f1~1Hz frekvenciájú jelet. A számláló állapotát a LED-eken jelenítse meg.
+
*ABh = 1010.1011b, mivel a bináris alak páratlan darab 1-est tartalmaz, így a paritásbit értéke 1-es lesz.
  
<pre>
+
'''3. Ha a rendszer órajele 16 MHz, mekkora a házi feladatként létrehozott UART modul sebességének hibája százalékosan kifejezve, a specifikált értékhez képest? Okozhat-e ez problémát? (Válaszát indokolja!)'''
-------------------------------------------------------------------------------------
 
LOAD   s1, 00
 
OUTPUT s1, 02 ; a ledek törlése
 
  
zero: ; itt nulla (lett) az f1 jel
+
Az UART modul rate generátorjának előállításához számlálós osztót alkalmazunk. A számlálós osztó működési elve, hogy ismerve a referencia órajelet, és ismerve a kívánt órajelet, a kettő hányadosának egészre kerekített nagyságával egyező méretű (vagy nagyobb) regisztert hozunk létre, melynek értékét minden egyes felfutó élkor növeljük eggyel. Ha a regiszter eléri a kerekített hányados értékét, akkor 1-es logikai szintű jelet adunk ki. Ez lesz a leosztott rate generátor felfutó éle.
INPUT s0, 01 ; nyomógombsor beolvasása
+
Lássuk, mekkora hibát okoz a fent említett hányados kerekítése!
AND s0, 04 ; f1 kimaszkolása
+
A számláló optimális mérete: 16Mhz⁄(57600Hz=277,77…)
JUMP   Z , zero   ; f1 még mindig nulla
+
Mivel csak egész számokat tudunk a számlálóval számolni, így a kerekített érték 278.
 +
Ezt visszaváltva frekvenciába: 16Mhz⁄(278=57553,3957Hz)
 +
A két frekvencia közötti bitidő eltérés: 1/57553,3957-1/57600=14.058ns
  
ADD s1, 01 ; f1 felfutott, a számláló inkrementálódik
+
Ahhoz, hogy az adatkeret átvitele hibátlan legyen, a stop bit 16 mintavételi pontjából a 8-as és 9-es mintavételi időpontok még ténylegesen a stop bitből kell, hogy mintát vegyenek. Ebből és a bitidőből kiszámolhatjuk, hogy mekkora lehet egy keret esetén a maximális hibánk:
OUTPUT s1, 02 ; új értékét ki is küldjük a led-sorra
+
A maximális hiba / keret: Bitidő×9/16=1/57553,3957×9/16=9,7735μs
  
notzero: ; itt egy (lett) az f1 jel
+
Ebből a maximális hiba / bitidő, 11 bit átvitele esetén: 9.7735μs/11=888,503ns
INPUT s0, 01 ; nyomógombsor beolvasása
 
AND s0, 04 ; f1 kimaszkolása
 
JUMP   NZ, notzero  ; f1 még mindig nulla
 
  
; ha a maszkolás után "nemnullát" kapunk (azaz f1 még mindig magas) akkor folytatja a lefutó él ellenőrzését
+
A számlálónál tett kerekítésből adódó frekvenciahibából adódó bithiba, és a maximálisan megengedett bithiba aránya százalékosan kifejezve:
  
JUMP zero
+
(számláló kerekítése miatti bithiba)/(maximálisan megengedett bithibas)=14,058ns/888,503ns×100=1.5822%
  
; különben meg f1 lefutó éle megjött, kezdhetjük előlről az egészet (feltétel nélkül)
+
Ez, ha a vevő fél hibája 0%, akkor a specifikáció által ajánlott 2%-os hibahatáron belül van. (A specifikáció az adó és a vevő, nem pedig az adó és a clk közötti frekvenciahibához köti a hibahatárt)
-------------------------------------------------------------------------------------
 
</pre>
 
  
-- [[KissGergely|Ger******]] - 2007.10.08.
+
'''4. Egy 115200 b/s, 8N1 beállítású UART átvitel esetén mekkora eltérés engedhető meg az adó és a vevő bitidejében, ha sikeres átvitelt szeretnénk?'''
  
====2-es====
+
A vevőnek elvileg bitidőnként, a bitidő közepén kellene mintavételezni az adatokat. Mivel az adó és a vevő frekvenciája kicsit eltér, ezért ez nem teljesül. Ha a hiba 1 bitidő alatt dt (delay time), akkor ez az N-edik bit mintavételezésekor N*dt-re nő, ami akkor okoz hibát, ha a legutolsó bitnél eléri a bitidő határát. Mivel a mintavételezés a bitidő közepén kezdődik, ezért N*dt < T/2-nek teljesülni kell (minden START bitnél újra szinkronizálódik a vevő).
Itt van a 2. házi feladat is, ami tesztelve volt mérésen, és jó!
+
Mindez számokkal: 8N1 beállításból tudjuk, hogy 1 Start bit + 8 Adat bit + 1 Stop bit == 10 bitet kell átküldeni. (N = 10)
 +
115200 b/s : 115200 bit megy át másodpercenként -> 1 bit: 1/115200 => 8.68 us.
 +
Képletbe behelyettesítve:
 +
10 * dt < 8.68/2
 +
dt < 0.434 us
 +
(0.434/8.86)*100 = 5% eltérés.
 +
Megj.: Sebességtől független, csak beállítástól függ, hiszen x bit/s esetén: t= 1/x, n db dt<1/x/2 ahol n a bitek száma, dt delay time, dt < 1/x/2/n. dt/t = (1/x/2/n)/(1/x)=1/2n 8N1 esetén n=10, így dt/t= 0,05 ami 5 %.
  
<pre>
+
'''5. A házi feladatként megvalósított UART adóval minimum mennyi időbe telne a neptun kódjának elküldése?'''
-------------------------------------------------------------------------------------
 
; Bagi Tamás Zoltán
 
; DBREBY
 
; 2007.10.07.
 
;
 
; Labor I. 11. mérés heti felkészülési feladata
 
; Egy nyomógomb megnyomására a LED-ekre kiírja a gomb sorszámát (1-5)
 
  
 +
Neptun kód 6 karakter, ennek elküldése 4800bps 8O1 (1 startbit, 8 adabit, páratlan paritás, 1 stopbit) esetén: (6*11bit)/(4800bit/s)=13,75ms
  
; Konstans definíciók:
+
'''6. Egy 100 byte méretű fájl átvitele aszinkron soros csatornán 115200 bps sebesség mellett 8N1 (8 bit adat, nincs paritás, 1 STOP bit) formátumban minimum menyi ideig tart?'''
  
CONSTANT bt, 01 ; Nyomógombok
+
100 byte = 800 bit, byte-onként 1 stopbit ÉS EGY START BIT = 200 bit, összesen 1000 bit, 115200 bit/sec sebességgel ez 1000bit/(115200bit/s)=8,68 ms alatt megy át
CONSTANT ld, 02 ; LED-ek
 
CONSTANT bt1, 80 ; 1-es gomb-maszk (1000 0000)
 
CONSTANT bt2, 40 ; 2-es gomb-maszk (0100 0000)
 
CONSTANT bt3, 20 ; 3-es gomb-maszk (0010 0000)
 
CONSTANT bt4, 10 ; 4-es gomb-maszk (0001 0000)
 
CONSTANT bt5, 08 ; 5-es gomb-maszk (0000 1000)
 
CONSTANT btm, F8 ; Nyomógomb-maszk (1111 1000)
 
  
; Regiszter elnevezések:
+
'''7. A megismert soros adatátviteli módszerek közül melyiknél nem szükséges az órajelet is továbbítani?'''
  
NAMEREG s0, w ; Munkaregiszter
+
Az UART-nál, ott az adategységek azonosítása a lokális rendszerórák használatán alapul.
NAMEREG s1, tmp   ; Segédregiszter
 
  
 +
'''8. Miért nem könnyű néhány Mbit/s sebességet elérni az UART típusú átvitelnél?'''
  
; Programtörzs:
+
Nem igényel külön dedikált órajelvezetéket, ez korlátozza az elérhető maximális sebességet.
  
LOAD w,  00 ; A LED kijelzo törlése
+
'''9. Melyik soros adatátviteli mód nem támogatja busz kialakítását?'''
OUTPUT   w,  ld ;
 
  
 +
Az UART, mivel ott a kapcsolat pont-pont típusú. (pl. számítógép-modem, számítógép-terminál)
  
Hurok: INPUT w, bt ; A gombok állapotának beolvasása
+
'''10. Milyen átviteli paraméterek állíthatók be a PC soros kommunikációs csatornáin?'''
AND   w, btm   ; f1, f50, f1k eltüntetése
 
LOAD   tmp, w ; Tisztázott (fxy nélküli) gombállapotok elmentése
 
  
XOR   w, bt1   ; Az 1-es gomb van-e lenyomva (kizárólag)?
+
bit/sec, adatbitek, paritás, stopbitek, átvitelvezérlés
JUMP Z, Gomb1 ; Ugrás, ha igen.
 
  
LOAD w, tmp   ; A munkaregiszter helyreállítása
+
'''11. Hasonlítsa össze sebesség szerint a soros adatátviteli módokat!'''
XOR   w, bt2   ; Az 2-es gomb van-e lenyomva (kizárólag)?
 
JUMP Z, Gomb2 ; Ugrás, ha igen.
 
  
LOAD w, tmp   ; A munkaregiszter helyreállítása
+
SPI 10 Mbit/sec > I²C 3400 Kbit/sec > UART 115 Kbit/sec
XOR   w, bt3   ; Az 3-as gomb van-e lenyomva (kizárólag)?
 
JUMP Z, Gomb3 ; Ugrás, ha igen.
 
  
LOAD w, tmp   ; A munkaregiszter helyreállítása
+
'''12. Mi alapján osztályozódik az SPI 4 átviteli módja?'''
XOR   w, bt4   ; Az 4-es gomb van-e lenyomva (kizárólag)?
 
JUMP Z, Gomb4 ; Ugrás, ha igen.
 
  
LOAD w, tmp   ; A munkaregiszter helyreállítása
+
Az adatok kiléptetése és a beérkezett adatok mintavételezése az órajel egymással ellentétes éleire történik. Ennek megfelelően, továbbá figyelembe véve az órajel kiindulási nyugalmi értékét is, alapvetően 4 fajta SPI átviteli ciklus definiálható.
XOR   w, bt5   ; Az 5-ös gomb van-e lenyomva (kizárólag)?
 
JUMP Z, Gomb5 ; Ugrás, ha igen.
 
  
LOAD w, 00 ; Vagy nincs lenyomva gomb, vagy több gomb van lenyomva ->
+
'''13. Hány vezeték kell 4 periféria SPI buszon történő használatához?'''
OUTPUT   w, ld ; -> A LED kijelzo törlése.
 
JUMP Hurok
 
  
Gomb1: LOAD w, 01 ; A LED kijelzon: 1 (0000 0001)
+
3+4 = 7 vezeték, mivel SPI esetén 3 + n kell, ahol n a perifériák száma. MISO, MOSI, SCK, SSn (n=0,1,2,3)
OUTPUT   w, ld ;
 
JUMP Hurok ; Vizsgálat kezdete elölrol.
 
  
Gomb2: LOAD w, 02 ; A LED kijelzon: 2 (0000 0010)
+
'''14. Írja fel a -42h értéket 2-es komplemens bináris formában 8 biten ábrázolva!'''
OUTPUT   w, ld ;
 
JUMP Hurok ; Vizsgálat kezdete elölrol.
 
  
Gomb3: LOAD w, 03 ; A LED kijelzon: 3 (0000 0011)
+
42h: 0100 0010
OUTPUT   w, ld ;
+
Negáljuk: 1011 1101
JUMP Hurok ; Vizsgálat kezdete elölrol.
+
Hozzáadunk 1-t: 1011 1110  -42h
  
Gomb4: LOAD w, 04 ; A LED kijelzon: 4 (0000 0100)
+
== Érdeklődőknek ==
OUTPUT   w, ld ;
 
JUMP Hurok ; Vizsgálat kezdete elölrol.
 
  
Gomb5: LOAD w, 05 ; A LED kijelzon: 5 (0000 0101)
+
Ha felkeltette az érdeklődésedet az FPGA programozás, ezeket a tárgyakat érdemes lehet hallgatni:
OUTPUT   w, ld ;
 
JUMP Hurok ; Vizsgálat kezdete elölrol.
 
-------------------------------------------------------------------------------------
 
</pre>
 
  
 +
*[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 jelenlegi, 2023. január 19., 16:49-kori változata

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

A mérésről

  • Megismerkedtetek egy nehezebben érthető blokkvázlattal, és néhány soros kommunikációval: UART, SPI.
  • Előkészületkor megtanultátok:
    • UART paraméterei, sebesség, PARITÁS, melyik bit érkezik először, hány bitből áll egy adatátvitel (tipikus kérdés lehet, hogy mennyi időbe telik a neptun-kódod átvitele adott bitrátával, és start, stop és paritásbit számmal)
    • SPI kommunikáció, SPI topológia (milyen vezetékek vannak master és slave közt)
    • Hőmérő modul hőmérséklet kimenetének átszámítása ember által kezelhetővé (Nem felejtjük le az előjelet!)
  • Tipikus beugró kérdések voltak:
    • UART kommunikáció paraméterei
    • SPI topológiája
    • Adott UART hullámforma milyen adatot vitt át <--- felcserélitek a bitsorrendet
    • !!!!Verilog kód alapján kiegészíteni hullámformát!!!! <-- ezzel sokatoknak baja szokott lenni
    • Hőmérő modul <--- itt lefelejtitek az előjelet
  • Mérésen megtanultátok: - Blokkvázlat megvalósítása:
    • SCLK előállítása (nem keveritek sem a rategen modullal, sem a testbench órajellel, ez egy harmadik dolog)
    • kommunikáció ütemezése
    • stabil kimenet létrehozása
    • kettes komplemens képzése
    • elméleti kérdések (írható-e egy regiszter több always blokkból, stb.)

Házihoz segítség

Segédanyagok

Beugró kérdések kidolgozása: Ellenörző kérdések 2018

Nem hivatalos kidolgozás

Ezt a részt még aktualizálni kell. Nem biztos, hogy még mindig ezek a beugrókérdések!

1. Egyetlen ASCII karakter UART átvitele hány bit kiküldését jelenti a házi feladatban adott paraméterek esetén? Pontosan hogy épül fel ez a keret, milyen sorrendben kell kiküldeni a biteket?

Az UART adatátvitel specifikációja szerint: 1 start bit + 8 adatbit + 1 paritásbit + 1 stopbit, összesen tehát 11 bit / 1db ASCII karakter.

2. Hogy kapjuk meg egy 4 bites BCD számjegy 8 bites ASCII kódját? Mit mutat a paritásbit, milyen hardver elemmel számítható a legegyszerűbben, ha az összes adatbit rendelkezésre áll? Páros paritás esetén milyen paritás érték tartozik az ABh adathoz?

  • Az ASCII szabvány szerint egy „x” számjegy ASCII kódja 3xh alakban áll elő, pl. a 9-es számjegynek az ASCII kódja 39h = 0011.1001b.
  • A paritásbitet arra használjuk, hogy egy bináris számot úgy egészítsünk ki vele, hogy az vagy páros darab, vagy páratlan darab 1-est tartalmazzon. A gyakorlatban ezt hibaészlelésre használjuk.
  • A paritás legegyszerűbben XOR kapuk segítségével határozható meg.
  • ABh = 1010.1011b, mivel a bináris alak páratlan darab 1-est tartalmaz, így a paritásbit értéke 1-es lesz.

3. Ha a rendszer órajele 16 MHz, mekkora a házi feladatként létrehozott UART modul sebességének hibája százalékosan kifejezve, a specifikált értékhez képest? Okozhat-e ez problémát? (Válaszát indokolja!)

Az UART modul rate generátorjának előállításához számlálós osztót alkalmazunk. A számlálós osztó működési elve, hogy ismerve a referencia órajelet, és ismerve a kívánt órajelet, a kettő hányadosának egészre kerekített nagyságával egyező méretű (vagy nagyobb) regisztert hozunk létre, melynek értékét minden egyes felfutó élkor növeljük eggyel. Ha a regiszter eléri a kerekített hányados értékét, akkor 1-es logikai szintű jelet adunk ki. Ez lesz a leosztott rate generátor felfutó éle. Lássuk, mekkora hibát okoz a fent említett hányados kerekítése! A számláló optimális mérete: 16Mhz⁄(57600Hz=277,77…) Mivel csak egész számokat tudunk a számlálóval számolni, így a kerekített érték 278. Ezt visszaváltva frekvenciába: 16Mhz⁄(278=57553,3957Hz) A két frekvencia közötti bitidő eltérés: 1/57553,3957-1/57600=14.058ns

Ahhoz, hogy az adatkeret átvitele hibátlan legyen, a stop bit 16 mintavételi pontjából a 8-as és 9-es mintavételi időpontok még ténylegesen a stop bitből kell, hogy mintát vegyenek. Ebből és a bitidőből kiszámolhatjuk, hogy mekkora lehet egy keret esetén a maximális hibánk: A maximális hiba / keret: Bitidő×9/16=1/57553,3957×9/16=9,7735μs

Ebből a maximális hiba / bitidő, 11 bit átvitele esetén: 9.7735μs/11=888,503ns

A számlálónál tett kerekítésből adódó frekvenciahibából adódó bithiba, és a maximálisan megengedett bithiba aránya százalékosan kifejezve:

(számláló kerekítése miatti bithiba)/(maximálisan megengedett bithibas)=14,058ns/888,503ns×100=1.5822%

Ez, ha a vevő fél hibája 0%, akkor a specifikáció által ajánlott 2%-os hibahatáron belül van. (A specifikáció az adó és a vevő, nem pedig az adó és a clk közötti frekvenciahibához köti a hibahatárt) 

4. Egy 115200 b/s, 8N1 beállítású UART átvitel esetén mekkora eltérés engedhető meg az adó és a vevő bitidejében, ha sikeres átvitelt szeretnénk?

A vevőnek elvileg bitidőnként, a bitidő közepén kellene mintavételezni az adatokat. Mivel az adó és a vevő frekvenciája kicsit eltér, ezért ez nem teljesül. Ha a hiba 1 bitidő alatt dt (delay time), akkor ez az N-edik bit mintavételezésekor N*dt-re nő, ami akkor okoz hibát, ha a legutolsó bitnél eléri a bitidő határát. Mivel a mintavételezés a bitidő közepén kezdődik, ezért N*dt < T/2-nek teljesülni kell (minden START bitnél újra szinkronizálódik a vevő). Mindez számokkal: 8N1 beállításból tudjuk, hogy 1 Start bit + 8 Adat bit + 1 Stop bit == 10 bitet kell átküldeni. (N = 10) 115200 b/s : 115200 bit megy át másodpercenként -> 1 bit: 1/115200 => 8.68 us. Képletbe behelyettesítve:

10 * dt < 8.68/2
dt < 0.434 us 
(0.434/8.86)*100 = 5% eltérés. 

Megj.: Sebességtől független, csak beállítástól függ, hiszen x bit/s esetén: t= 1/x, n db dt<1/x/2 ahol n a bitek száma, dt delay time, dt < 1/x/2/n. dt/t = (1/x/2/n)/(1/x)=1/2n 8N1 esetén n=10, így dt/t= 0,05 ami 5 %.

5. A házi feladatként megvalósított UART adóval minimum mennyi időbe telne a neptun kódjának elküldése?

Neptun kód 6 karakter, ennek elküldése 4800bps 8O1 (1 startbit, 8 adabit, páratlan paritás, 1 stopbit) esetén: (6*11bit)/(4800bit/s)=13,75ms

6. Egy 100 byte méretű fájl átvitele aszinkron soros csatornán 115200 bps sebesség mellett 8N1 (8 bit adat, nincs paritás, 1 STOP bit) formátumban minimum menyi ideig tart?

100 byte = 800 bit, byte-onként 1 stopbit ÉS EGY START BIT = 200 bit, összesen 1000 bit, 115200 bit/sec sebességgel ez 1000bit/(115200bit/s)=8,68 ms alatt megy át

7. A megismert soros adatátviteli módszerek közül melyiknél nem szükséges az órajelet is továbbítani?

Az UART-nál, ott az adategységek azonosítása a lokális rendszerórák használatán alapul.

8. Miért nem könnyű néhány Mbit/s sebességet elérni az UART típusú átvitelnél?

Nem igényel külön dedikált órajelvezetéket, ez korlátozza az elérhető maximális sebességet.

9. Melyik soros adatátviteli mód nem támogatja busz kialakítását?

Az UART, mivel ott a kapcsolat pont-pont típusú. (pl. számítógép-modem, számítógép-terminál)

10. Milyen átviteli paraméterek állíthatók be a PC soros kommunikációs csatornáin?

bit/sec, adatbitek, paritás, stopbitek, átvitelvezérlés

11. Hasonlítsa össze sebesség szerint a soros adatátviteli módokat!

SPI 10 Mbit/sec > I²C 3400 Kbit/sec > UART 115 Kbit/sec

12. Mi alapján osztályozódik az SPI 4 átviteli módja?

Az adatok kiléptetése és a beérkezett adatok mintavételezése az órajel egymással ellentétes éleire történik. Ennek megfelelően, továbbá figyelembe véve az órajel kiindulási nyugalmi értékét is, alapvetően 4 fajta SPI átviteli ciklus definiálható.

13. Hány vezeték kell 4 periféria SPI buszon történő használatához?

3+4 = 7 vezeték, mivel SPI esetén 3 + n kell, ahol n a perifériák száma. MISO, MOSI, SCK, SSn (n=0,1,2,3)

14. Írja fel a -42h értéket 2-es komplemens bináris formában 8 biten ábrázolva!

42h: 		0100 0010
Negáljuk: 	1011 1101
Hozzáadunk 1-t:	1011 1110  -42h

Érdeklődőknek

Ha felkeltette az érdeklődésedet az FPGA programozás, ezeket a tárgyakat érdemes lehet hallgatni: