From: Bernhard Urban Date: Tue, 25 May 2010 23:00:26 +0000 (+0200) Subject: uart_rx: bitorder fail X-Git-Tag: abgabe~38^2~2 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=hwmod.git;a=commitdiff_plain;h=a70c8de1c9738307fd2ba521b0f4916b0f8bf24b uart_rx: bitorder fail --- diff --git a/spec/speck.tex b/spec/speck.tex index 1622304..ebcd8d2 100644 --- a/spec/speck.tex +++ b/spec/speck.tex @@ -631,6 +631,7 @@ wirklich $\Rightarrow$ Tonne \item Display $\Rightarrow$ History: die Breite f\"ur \emph{d\_zeile} muss ebenfalls so breit wie \emph{p\_zeile} sein (zumindest vereinfacht das die Implementierung) +\item RS232: \emph{tx\_done} hinzugefuegt. \end{itemize} \end{document} diff --git a/src/beh_loopback_tb.vhd b/src/beh_loopback_tb.vhd index a44bdbd..5e040f0 100644 --- a/src/beh_loopback_tb.vhd +++ b/src/beh_loopback_tb.vhd @@ -99,12 +99,12 @@ begin -- 1. parameter: testfallnummer -- 2. parameter: STARTBIT (1 bit) - immer '0' | 8 DATENBITS | 1 STOPBIT - immer '1' -- 3. parameter: byte das rauskommen soll - exec_tc(1, b"0000011111", b"00001111"); - exec_tc(2, b"0101010101", b"10101010"); - exec_tc(3, b"0110011001", b"11001100"); - exec_tc(4, b"0001100111", b"00110011"); - exec_tc(5, b"0010101011", b"01010101"); - exec_tc(6, b"0100110111", b"10011011"); + exec_tc(1, b"0000011111", b"11110000"); + exec_tc(2, b"0101010101", b"01010101"); + exec_tc(3, b"0110011001", b"00110011"); + exec_tc(4, b"0001100111", b"11001100"); + exec_tc(5, b"0010101011", b"10101010"); + exec_tc(6, b"0100110111", b"11011001"); stop <= true; wait; diff --git a/src/beh_uart_rx_tb.vhd b/src/beh_uart_rx_tb.vhd index 26adbda..f5e3c69 100644 --- a/src/beh_uart_rx_tb.vhd +++ b/src/beh_uart_rx_tb.vhd @@ -75,13 +75,13 @@ begin -- 1. parameter: testfallnummer -- 2. parameter: STARTBIT (1 bit) - immer '0' | 8 DATENBITS | 1 STOPBIT - immer '1' - -- 3. parameter: byte das rauskommen soll - exec_tc(1, b"0000011111", b"00001111"); - exec_tc(2, b"0101010101", b"10101010"); - exec_tc(3, b"0110011001", b"11001100"); - exec_tc(4, b"0001100111", b"00110011"); - exec_tc(5, b"0010101011", b"01010101"); - exec_tc(6, b"0100110111", b"10011011"); + -- 3. parameter: byte das rauskommen soll (umgekehrte reihenfolge) + exec_tc(1, b"0000011111", b"11110000"); + exec_tc(2, b"0101010101", b"01010101"); + exec_tc(3, b"0110011001", b"00110011"); + exec_tc(4, b"0001100111", b"11001100"); + exec_tc(5, b"0010101011", b"10101010"); + exec_tc(6, b"0100110111", b"11011001"); stop <= true; wait; diff --git a/src/uart_rx.vhd b/src/uart_rx.vhd index cee42a3..0afc7d4 100644 --- a/src/uart_rx.vhd +++ b/src/uart_rx.vhd @@ -81,6 +81,7 @@ begin -- starbit (= '0')? dann kommen daten state_next <= DBITS; bitcnt_next <= 0; + baudcnt_next <= 0; else -- sonst war das nix... state_next <= IDLE; @@ -91,7 +92,8 @@ begin baudcnt_next <= baudcnt_int + 1; else baudcnt_next <= 0; - rx_data_next <= rx_data_int(6 downto 0) & rxd; + -- bitorder beachten + rx_data_next <= rxd & rx_data_int(7 downto 1); if bitcnt_int = 7 then state_next <= STOPBIT;