Vladimir Myslik 4/23 1998
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
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.