„Laboratórium 1 - 11. Mérés: Programozható perifériák mérése” változatai közötti eltérés
(vitalap) (Ú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: | ||
− | {{ | + | {{Vissza|Laboratórium 1}} |
+ | __TOC__ | ||
+ | == 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 == | ||
+ | *[[Media:Labor1_mérés11_házi1_2013.pdf|Kidolgozott házi feladat]] | ||
− | ==== | + | == Segédanyagok == |
− | |||
− | |||
− | |||
− | |||
+ | * [[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 | ||
− | + | === Beugró kérdések kidolgozása: Ellenörző kérdések 2018 === | |
− | + | [[:File:Verilog beugrók.pdf| Nem hivatalos kidolgozás]] | |
− | |||
− | |||
− | |||
− | + | '''''<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>''''' | |
− | + | '''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?''' | |
− | ====2 | + | 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: | |
− | |||
− | |||
− | |||
− | |||
+ | *[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. | ||
− | [[ | + | [[Kategória:Villamosmérnök]] |
A lap jelenlegi, 2023. január 19., 16:49-kori változata
Tartalomjegyzék
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
- 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
Beugró kérdések kidolgozása: Ellenörző kérdések 2018
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:
- 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.