Monitor portu RS-232

Zadanie: Należy zaprojektować moduł odbiornika danych w standardzie RS-232 dla następujących parametrów transmisji: 8 bitów danych, bez bitu parzystości, jeden bit stopu, szybkość transmisji 9600bps bez sprzętowej kontroli przepływu.
Moduł należy połączyć z modułem display z poprzedniego zadania tak, aby odbiornik RS232 po otrzymaniu danych wyświetlał je na wyświetlaczu LED w postaci heksadecymalnej (2 cyfry hex). Do wyświetlania odebranego kodu wykorzystać dowolnie wybrane dwie kolejne cyfry wyświetlacza.

Wejścia i wyjścia układu:
clk_i - zegar 50MHz,
rst_i - reset asynchroniczny,
RXD_i - wejście danych RS232,
led7_an_o – wyjście sterujące anodami wyświetlaczy LED.

led7_seg_o – wyjście sterujące segmentami wyświetlaczy LED.

Należy wykonać symulację funkcjonalną oraz zweryfikować układ praktycznie poprzez zaprogramowanie płytki testowej. Weryfikacja praktyczna polega na podłączeniu wyprowadzeń zaprojektowanych modułów do portu COM1 komputera PC i uruchomieniu programu MINICOM (program jest domyślnie skonfigurowany na 9600bps, 8 bitów danych, 1 bit stopu, bez parzystości).
Naciśnięcie klawisza na klawiaturze powinno spowodować wyświetlenie jego kodu na wyświetlaczu LED.

Nadawanie i odbiór sygnałów w standardzie RS232

Nadawanie i odbiór sygnałów w standardzie RS232 odbywa się w sposób szeregowy, oddzielnie na dwóch liniach w kierunkach do i od urządzenia. W czasie braku transmisji sygnał na danej linii jest w stanie wysokim. Rozpoczęcie transmisji inicjowane jest przez tzw. bit startu będący "0" logicznym, który powinien trwać przez okres równy odwrotności prędkości transmisji, w naszym przypadku wynoszący 1/9600 [sekund]. Wszystkie następne informacje są przesyłane z identycznym okresem trwania. Następnie nadawane są szeregowo dane począwszy od najmniej znaczącego bitu aż do bitu najbardziej znaczącego (D0-D7). Później występuje bit parzystości, będący operacją logiczną XOR na danych D0-D7. Bit parzystości jest opcjonalny i w przypadku niniejszego zadania nie występuje. Zakończenie transmisji sygnalizowane jest bitami stopu, w ilości zazwyczaj od 1 do 2. Przykład sygnału, zgodnego z wymaganiami zadania, przenoszącego kod 01010011 przedstawiony jest na poniższym rysunku.

Transmisja RS-232
Rys.1 Przykładowa transmisja kodu 01010011 przez RS-232


Informacje dodatkowe o standardzie RS232:
http://www.fizyka.umk.pl/~ptarg/labview/folie/RS232.pdf
http://pl.wikipedia.org/wiki/RS-232


Plik ucf do zadania, płytka Digilent Spartan-3, układ Spartan-3 3S200 FT256-4:

# Clock:
NET "clk_i" LOC = "T9" ; # 50 MHz clock
# Push-buttons:
NET "rst_i" LOC = "L14" ; # pressed high BTN3
# RS232:
NET "RXD_i" LOC = "T13" ; # RS 232 RXD
# Seven-segment LED display:
NET "led7_an_o<3>" LOC = "E13" ; # leftmost digit, active low
NET "led7_an_o<2>" LOC = "F14" ; # active low
NET "led7_an_o<1>" LOC = "G14" ; # active low
NET "led7_an_o<0>" LOC = "D14" ; # rightmost digit, active low
#
NET "led7_seg_o<7>" LOC = "E14" ; # segment 'a', active low
NET "led7_seg_o<6>" LOC = "G13" ; # segment 'b', active low
NET "led7_seg_o<5>" LOC = "N15" ; # segment 'c', active low
NET "led7_seg_o<4>" LOC = "P15" ; # segment 'd', active low
NET "led7_seg_o<3>" LOC = "R16" ; # segment 'e', active low
NET "led7_seg_o<2>" LOC = "F13" ; # segment 'f', active low
NET "led7_seg_o<1>" LOC = "N16" ; # segment 'g', active low
NET "led7_seg_o<0>" LOC = "P16" ; # segment 'dp', active low
#