prenos 16 bitovych dat po seriovej linke

balu@home daniel.valuch na orange.fr
Čtvrtek Prosinec 22 20:10:59 CET 2011


rozmyslam nad implementaciou jedneho problemu. Potreboval by som 
prenasat data z AD prevodnika, asi najskor 12 bitove slova, tusim tam je 
16 kanalov, par desiatok ksps na kanal. Celkovy datovy tok do 100Mbps, 
prenos po jednom drate, resp. optickom kabli.

Primitivny problem, ale ked sa zamyslim nad detailami tak je tam par 
otazok :-)

Ide o jednosmerny prenost bez akehokolvek handshake, t.j. linka by sa 
mala vediet sama zasynchronizovat a obnovit po preruseni media.
Ak by som implementoval prenos na sposob uart tak by bol asi 
najjednoduchsi. Neviem si ale predstavit synchronizaciu na zaciatok 
packetu efektivnejsie ako ze sa vysle vela nul ("start bit" o dlzke min. 
jedneho paketu) cim sa mi samozrejme znizi prenosova rychlost.
Ako sa to potom prijima? Posuvny register pozera ci je plny nul a na 
prvu zmenu sa zasynchronizuje?

Velmi atraktivna varianta je pouzit 16b20b kodovanie, Xilinx dokonca 
ponuka na stiahnutie koder aj dekoder. Otazka ale zostava, ako seriovy 
prijimac vie kedy sa mu zacina packet? Pozera sa v posuvnom registri ci 
tam najde comma character?
Ako sa z toho signalu zrekonstruuju hodiny ktore vzorkuju vstup? Na 
oboch stranach bude rovnaky krystalovy oscilator ale faza je samozrejme 
nedefinovana takze sa musi "nejak" zasynchronizovat.

Ku prevodniku je nalepene male cpld ktore by to malo zvladnut poslat.

Najjednoduchsie riesenie je pouzit dve vlakna a obdobu spi, ale ak by sa 
to dalo vyriesit jednym za menej ako 2-3 tyzdne kodovania bolo by to 
samozrejme efektivnejsie.

dik za nazory,
b.


Další informace o konferenci Hw-list