Laboratórium 1 - 11. Mérés: Programozható perifériák mérése
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
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:
- Logikai tervezés: bővebben FPGA-ról, hardvertervezésről, perifériákról.
- Mikrorendszerek tervezése: mikroprocesszoros rendszerek tervezése FPGA-n belül.