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.
W użyciu jest prawa połowa
(4 cyfry) wyświetlacza 7-segmentowego (lewa połowa może także coś wyświetlać –
ignorujemy to).
Wejścia i wyjścia układu:
clk_i - zegar 100MHz,
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.
Aby wysyłać dane na płytkę
należy uruchomić program Putty, wybrać połączenie „Serial”, wpisać prędkość
(9600) oraz port: COMx (x to numer portu, należy go odczytać w programie
„device manager” (program ten można łatwo znaleźć na zdalnym komputerze za
pomocą klawisza szukania „lupa”) – pod pozycją „Ports (COM&LPT)” należy
znaleźć urządzenie o nazwie „USB serial Port” – numer portu będzie podany
obok). Należy jeszcze włączyć echo lokalne, aby znaki wysyłane do płytki były
widoczne na ekranie – trzeba kliknąć w kategorię „Terminal” i zaznaczyć opcję
„Force on” dla „Local echo”. Potem kliknąć w klawisz „Open” w celu otwarcia
połączenia.
Naciśnięcie klawisza na
klawiaturze powinno spowodować wyświetlenie jego kodu ASCII 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.
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
Minimalne wymagania
dotyczące symulacji: wykonać reset
na początku symulacji, podczas symulacji wysłać daną z przykładu (Rys. 1) trzy
razy, za pierwszym razem z prędkością nominalną (9600 bps), za drugim z
prędkością mniejszą o 4% od nominalnej, za trzecim z prędkością większą o 4% od
nominalnej.
Uwaga! W projekcie
musi być zawarty przerzutnik synchronizujący sygnał RXD_i z zegarem!
Fragment głównego pliku
projektowego VHDL z deklaracją sygnałów:
entity top is
Port ( clk_i : in STD_LOGIC;
rst_i : in STD_LOGIC;
RXD_i : in STD_LOGIC;
led7_an_o : out STD_LOGIC_VECTOR (3
downto 0);
led7_seg_o : out STD_LOGIC_VECTOR
(7 downto 0));
end top;
Plik z ograniczeniami projektowymi dla płytki Nexys-A7 (układ FPGA
xc7a100tcsg324-1): isp4.xdc