Laboratórium 1 - 11. Mérés: Programozható perifériák mérése

A VIK Wikiből
A lap korábbi változatát látod, amilyen Szikszayl (vitalap | szerkesztései) 2014. március 17., 12:43-kor történt szerkesztése után volt.


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

Beugró kérdések kidolgozása

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: