Semestralni prace z predmetu POB


Vladimir Myslik 4/23 1998

1. prace
Generator 4PPM modulace pro IrDA prenos


Muj popis IrDA komunikace vcetne 4PPM modulace

Rozhodl jsem se vytvorit automat ktery ma za cil prevest 8 bitu paralelni informace na vstupu na seriovy tok dat v 4PPM modulaci. 4PPM modulace zakodovava vzdy dva bity informace do 1 pulsu, ktery se muze objevit na jedne ze 4 pozic v case (4 pozice=2 bity). Prijimac ovsem musi byt fazove zasynchronizovan, generator nikoli. Generator 4PPM kodu prevede na 16 taktu hodin paralelni 8 bitove slovo na seriovy tak dat. Interne je v generatoru 8 bitovy posuvny registr (posouva se vzdy o 2 bity) a prevodnik pulsni modulace 2bity -> 1puls ze 4 (2bitovy citac s komparatorem). Automat funguje tak, ze po prvnim startovacim pulsu zacne vysilat vzdy nejhorejsi 2 bity po dobu 4 taktu hodin, pak posune obsah registru a vysila dalsi 2 bity ktere se posunuly na nejvyssi pozice. Protoze se implementace jentaktak vesla do GAL22V10 a zbyl pouze jeden volny vstup, nevesel se do nej jiz interni 4 bitovy citac, takze detekce kdy uz bylo 8bitove slovo vyslano je nutno delat jinde a po 16 taktech hodin na vstup privest nova data (dalsi 8bitove slovo).

Soubory eqn vyrazu a testovaci vektory



2.prace
Fast Infrared 4PPM prijimac/vysilac


Cilem me prace s programovatelnymi hradlovymi poli xilinx bylo rozsirit modulator 4PPM modulace tak, aby umel vysilat a prijimat cele ramce dat. Ramec je pevne delky (delky mocniny 2) a je uvozen startovacim slovem (preamble) ktere se nikde v toku dat nemuze vyskytnout. Startovaci slovo lze zmenit ve schematu na jednom miste tak, ze bude pouzivano jak vysilacem tak prijimacem. Startovaci slovo je generovano posuvnym registrem a pri prijmu je detekovano pomoci posuvneho registru a na jeho vystupu 16bitovym komparatorem. Data jez se vysilaji je osmibitove slovo brane z DIP prepinacu na desce. Na prijmu se prijimane bity zobrazuji jako cislo 0-f (4 bity) a zbyle 4 bity rozsvecuji 4 LED diody. Pripravky jsou spolu propojeny pres nohy 20 a 22 obvodu XC3020. Kazdy pripravek je schopen zaroven vysilat i prijimat.

4PPM modulace je popsana v prilozenem clanku o IrDA komunikaci ktery jsem napsal.

Modulator (vysilaci cast) ma v sobe citac, ktery urcuje trvani ramce. Citac se nuluje jednim ze svych vyvodu (tedy cita vzdy pocet taktu hodin jez je mocninou 2). Prvnich 16 taktu hodin se vysila startovaci slovo, ktere se generuje v posuvnem registru 16 bitu. Zbytek delky ramce je vyplnen osmibitovymi slovy z prepinacu DIP. Osmibitove slovo z prepinacu je privedeno na 4PPM modulator, ktery je navrzen jako dva posuvne 4 bitove registry (protoze se vysila vzdy 2 bity najednou) a na jeho dvou nejvyssich bitech je jeste komparator s nejnizsimi 2 bity citace - generator 4PPM jako v 1.uloze. Na 16 taktu hodin se tak vygeneruje na vystupu cele osmibitove slovo (16 chipu ala IrDA tj. za 4 takty hodin se vyslou 2 bity v 4 chipech). Vygenerovany tok dat se posila pres pin 20 obvodu XC3020 do druheho pripravku.

Prijimaci cast (demodulator) ma citac, ktery je resetovan pokud je na vstupu detekovano startslovo. To se provadi tak, ze vstupni signal se privede do posuvneho registru 32 bitu a vsechny liche bity jsou komparovany zda neobsahuji startslovo. Hodiny prijimaci casti bezi 2* rychleji nez vysilaci a proto bylo nutno pouzit 32bitovy posuvny registr. demodulator resp. jeho citac se tak muze fazove zasynchronizovat na prichozi signal s polovicni dobou periody nez ma modulator (vysilaci cast). Po detekci startslova se vynuluje citac demodulatoru a prijimany tok dat se vede do dvoubitoveho D KO ktery do sebe zapise bity A1 a A2 citace v pripade, ze prijal jednickovy chip. Jednickovy chip je jen jeden za dobu 4 taktu vysilace resp. 8 taktu prijimace. Dva bity tohoto dual D KO se prepisi do dvou 4 bitovych posuvnych registru a za 32 taktu hodin prijimace je tak prijato 8bitove slovo, ktere se zobrazuje na alfanumerickem sedmisegmentovem displeji a na 4 LED diodach.

Podarilo se mi vmestnat prijimac(demodulator) i vysilac(modulator) do 62 z 64 CLB bloku obvodu XC3020. Bohuzel se mi uz nepodarilo vyvest ven adresy pro pamet (misto toho vysilam jedno slovo nastavene na DIP prepinacich v celem ramci). Ramce maji pouze fixni delku (ktera se da ve schematu menit) ale podarila se hlavni vec: odzkouset jestli dva pripravky s nezasynchronizovanymi hodinami budou schopny mezi sebou bezchybne prenaset data. Pokud se spoji vyvody 20 a 22 u jednoho pripravku, data se prenaseji bezchybne (cely navrh je synchronni). Ale mezi 2 pripravky dochazi k hazardum. Projevuje se to tak, ze na prijimaci (zobrazovaci) casti pripravku nesviti pouze ty LED diody ktere odpovidaji nastaveni prepinacu na druhem pripravku, ale lehce poblikavaji ci velmi slabe sviti i ostatni LED diody. Znamena to, ze obcas (male procento) ramcu je prijato chybne. Je to dano zpusobem synchronizace, ktery se zde pokusim nastinit.

Pro prijem synchronniho ramce je treba nejprve zasynchronizovat prijimaci hodiny (citac). Protoze se jedna o synchronni design, musi se pouzit digitalni fazovy zaves. Pokud bude vysilac vysilat data s maximalni frekvenci f, pak je treba prijimac ktery neni asynchronni zasynchronizovat s presnosti odpovidajici frekvenci minimalne 2*f. Zvolil jsem si tedy dvojnasobnou frekvenci za zaklad hodin citace prijimaci casti s tim, ze nejnizsi bit je vlastne fazovym posuvem. Pokud vysle vysilac bit (ci puls) o delce trvani 125 ns (coz by odpovidalo bitove rychlosti 4Mbps pri 4PPM modulaci) prijimac s polovicnim cyklem muze tento bit prijmout ve vetsine pripadu jako dva po sobe jdouci bity (tedy detekci jednicky) a v malem procentu pripadu jako tri po sobe jdouci jednicky. Problemem je ovsem to, kdyz je prijimac zasynchronizovan skoro presne na hranu prijimaneho signalu - pak se muze stat, ze v polovine vysilaneho bitu detekuje jednicku (zasynchronizuje svuj citac hodin) a na konci tohoto bitu kde se prijimana logicka uroven kontroluje se objevi hazard. Tuto situaci prehledneji dokumentuje obrazek.


V obrazku je zakreslen vysilany bit a dva mozne stavy pri synchronizaci demodulacni casti obvodu pri ruznych fazich signalu. Vlivem ruznych frekvenci krystalu a ruznych dob prebehu a ruseni se muze u startslova prijimaci cast zasynchronizovat chybne na hranu signalu, kde vznikaji hazardy.

Odstraneni problemu vidim v trojnasobne frekvenci s jakou se prijimaci strana zasynchronizovava na prijimany signal. V podstate se jedna o digitalni fazovy zaves s tremi urovnemi.

Bohuzel obvod XC3020 je velmi jednoduchy i pro tento modulator/demodulator. Zjednodusit schema by slo pouzitim jineho startslova, ktere bylo zbytecne zvoleno prilis slozite ve snaze zasynchronizovat prijimaci cast (demodulator) co nejpresneji. Presnejsi by bylo pouzit startslovo podle specifikace IrDA (pouze dlouhy puls) a zasynchronizovat se na nej s vetsi presnosti (3*frekvenci vysilace(modulatoru)). Tim by se vysetrilo znacne mnozstvi CLBcek ktere jsou nyni pouzivane pro posuvne registry a pro komparatory. Pokud modulator pracuje s cyklem 100ns (napr.), tak nejkratsi sled (puls) ktery se v datove casti ramce nemuze objevit a je tedy vhodny pro startovaci slovo je delky 3*100ns (protoze dva 100ns bity se v po sobe jdoucich cyklech mohou objevit, 3 uz nikoli).

Soucasny generator startslova je tvoren 16bitovym posuvnym registrem. Pro nove zvolene startslovo by slo udelat pouze RS KO ktery by se nastavil pri vynulovani citace vysilace a shodil pri hodnote 3 citace. Usetrilo by se tim minimalne 6 CLB, spise 7.

na strane detektoru by slo usetrit jeste vice, stacilo by posuvny registr puvodni delky 32 bitu nahradit 3bitovym citacem, ktery by se spoustel hodnotou prichoziho signalu. Tak by citac napocital do 8 a to jiz je indikace prichoziho startslova.

Bohuzel jsem jiz nestihl dodelat praci do stadia kdy by prenos mezi dvema pripravky fungoval bezchybne. Myslim si ale ze ucel predmetu byl splnen - poznatky ziskane pri praci s programovalenymi obvody XILINX i prace na designu jednoducheho modulatoru 4PPM modulace mi byly prinosem a rad bych si udrzel pristup do hardwarove dilny abych mohl tento modulator vylepsit a pripadne dodelat rozhrani pro externi pamet.

Schema zapojeni xintro a xintro2 (zaloha)