erster versuch das ganze mal zu flashen -> es blinkt!!111
[calu.git] / cpu / src / rs232_tx_arc.vhd
index 188566a79baef5fcad03b6661f3e1789a681562b..c7dc886f5e26c2230b6fa62bf7e6df31489edfc5 100755 (executable)
----------------------------------------------------------------------------------\r
--- Filename : rs232_tx_arc.vhd\r
--- ========== \r
--- \r
--- Beschreibung : Versand von Daten ueber die RS232 Schnittstelle\r
--- ==============\r
---\r
--- Autoren : Martin Perner, Schwarz Manfred\r
--- =========\r
-----------------------------------------------------------------------------------\r
-\r
-library IEEE;\r
-use IEEE.std_logic_1164.all;\r
-use IEEE.numeric_std.all;\r
-\r
-use work.common_pkg.all;\r
-use work.core_pkg.all;\r
-use work.extension_uart_pkg.all;\r
-\r
-architecture beh of rs232_tx is\r
-       -- definierern der intern verwendeten Signale\r
-       type STATE_TYPE is (IDLE,SEND);\r
-       signal state, state_next : STATE_TYPE;\r
-       signal bus_tx_int, bus_tx_nxt : std_logic := '1';\r
-       signal baud_cnt,baud_cnt_next : integer := CLK_PER_BAUD;\r
-       signal cnt, cnt_next : natural range 0 to 11 := 0;\r
-       signal idle_sig, idle_sig_next : std_logic := '0';\r
-       \r
-begin\r
-       -- syncronisierungs Prozess\r
-       rs232_tx_syn : process(sys_clk, sys_res_n)\r
-       begin\r
-               if (sys_res_n = RESET_VALUE) then\r
-                       -- reset\r
-                       cnt <= 0;\r
-                       baud_cnt <= 0;\r
-                       state <= IDLE;\r
-                       idle_sig <= '0';\r
-                       bus_tx_int <= '1';\r
-               elsif rising_edge(sys_clk) then\r
-                       -- sync Zustand, uebernehmen der next-Signale\r
-                       baud_cnt <= baud_cnt_next;\r
-                       cnt <= cnt_next;\r
-                       state <= state_next;\r
-                       idle_sig <= idle_sig_next;\r
-                       bus_tx_int <= bus_tx_nxt;\r
-               end if;\r
-       end process;\r
-\r
-       bus_tx <= bus_tx_int;\r
-\r
-       -- Zustandsmaschienen Prozess\r
-       rs232_tx_state : process(state, new_tx_data, idle_sig)\r
-       begin\r
-               state_next <= state;\r
-               case state is\r
-                       when IDLE =>\r
-                               -- wenn neue Sendedaten anliegen wird in den Zustand SEND gewechselt\r
-                               if new_tx_data = '1' then\r
-                                       state_next <= SEND;\r
-                               end if;\r
-                       when SEND =>\r
-                               -- wenn das Byte inklusive Start- und Stopbit versendet wurde, geht \r
-                               -- der Prozess wieder in den IDLE Zustand.\r
-                               if idle_sig = '1' then\r
-                                       state_next <= IDLE;\r
-                               end if;\r
-                       end case;\r
-       end process;\r
-\r
-       -- Ausgabe Logik\r
-       rs232_tx_baud : process(sys_clk, sys_res_n, state, baud_cnt, cnt, tx_data, bus_tx_int)\r
-       begin \r
-               -- Solang idle_sig auf 0 ist wird im SEND Zustand verblieben\r
-               idle_sig_next <= '0';\r
-               bus_tx_nxt <= bus_tx_int;\r
-               cnt_next <= cnt;\r
-               baud_cnt_next <= baud_cnt;\r
-\r
-               case state is\r
-                       when IDLE =>\r
-                               -- tx-Signale im idle Zustand halten\r
-                               tx_rdy <= '1';\r
-                               baud_cnt_next <= CLK_PER_BAUD;\r
-                       when SEND =>\r
-                               -- Signalisiert dass gerade ein Byte versendet wird \r
-                               tx_rdy <= '0';\r
-                               -- Counter erhoehen um die Zeit einer Bitdauer abzuwarten\r
-                               baud_cnt_next <= baud_cnt + 1;\r
-                               if baud_cnt = CLK_PER_BAUD then \r
-                                       -- wenn die Bitdauer erreicht ist, Counter reseten\r
-                                       baud_cnt_next <= 0;\r
-                                       -- Counter um die einzelen Bits zu versenden\r
-                                       cnt_next <= cnt + 1;\r
-                                       case cnt is\r
-                                               when 0 =>\r
-                                                       -- counter = 0 => Startbit versenden\r
-                                                       bus_tx_nxt <= '0';\r
-                                               when 9 =>\r
-                                                       -- counter = 9 => Stopbit versenden\r
-                                                       bus_tx_nxt <= '1';\r
-                                                       -- stop_bit 0 heißt 1 stop bit\r
-                                                       if stop_bit = '0' then \r
-                                                               cnt_next <= 0;\r
-                                                               idle_sig_next <= '1';\r
-                                                       end if;         \r
-                                               when 10 =>\r
-                                                       bus_tx_nxt <= '1';\r
-                                                       -- stop_bit 1 heißt 2 stop bits\r
-                                                       if stop_bit = '1' then \r
-                                                               cnt_next <= 0;\r
-                                                               -- Signalisieren dass der Sendevorgang beendet ist\r
-                                                               idle_sig_next <= '1';\r
-                                                       end if;\r
-                                               when others =>\r
-                                                       -- counter von 1 bis 8 => Datenbits versenden\r
-                                                       bus_tx_nxt <= tx_data(cnt-1);\r
-                                       end case;\r
-                               end if;\r
-               end case;\r
-       end process;\r
-\r
-end architecture beh;\r
+---------------------------------------------------------------------------------
+-- Filename : rs232_tx_arc.vhd
+-- ========== 
+-- 
+-- Beschreibung : Versand von Daten ueber die RS232 Schnittstelle
+-- ==============
+--
+-- Autoren : Martin Perner, Schwarz Manfred
+-- =========
+----------------------------------------------------------------------------------
+
+library IEEE;
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+use work.common_pkg.all;
+use work.core_pkg.all;
+use work.extension_uart_pkg.all;
+
+architecture beh of rs232_tx is
+       -- definierern der intern verwendeten Signale
+       type STATE_TYPE is (IDLE,SEND);
+       signal state, state_next : STATE_TYPE;
+       signal bus_tx_int, bus_tx_nxt : std_logic := '1';
+       signal baud_cnt,baud_cnt_next : integer := CLK_PER_BAUD;
+       signal cnt, cnt_next : natural range 0 to 11 := 0;
+       signal idle_sig, idle_sig_next : std_logic := '0';
+       
+begin
+       -- syncronisierungs Prozess
+       rs232_tx_syn : process(sys_clk, sys_res_n)
+       begin
+               if (sys_res_n = RESET_VALUE) then
+                       -- reset
+                       cnt <= 0;
+                       baud_cnt <= 0;
+                       state <= IDLE;
+                       idle_sig <= '0';
+                       bus_tx_int <= '1';
+               elsif rising_edge(sys_clk) then
+                       -- sync Zustand, uebernehmen der next-Signale
+                       baud_cnt <= baud_cnt_next;
+                       cnt <= cnt_next;
+                       state <= state_next;
+                       idle_sig <= idle_sig_next;
+                       bus_tx_int <= bus_tx_nxt;
+               end if;
+       end process;
+
+       bus_tx <= bus_tx_int;
+
+       -- Zustandsmaschienen Prozess
+       rs232_tx_state : process(state, new_tx_data, idle_sig)
+       begin
+               state_next <= state;
+               case state is
+                       when IDLE =>
+                               -- wenn neue Sendedaten anliegen wird in den Zustand SEND gewechselt
+                               if new_tx_data = '1' then
+                                       state_next <= SEND;
+                               end if;
+                       when SEND =>
+                               -- wenn das Byte inklusive Start- und Stopbit versendet wurde, geht 
+                               -- der Prozess wieder in den IDLE Zustand.
+                               if idle_sig = '1' then
+                                       state_next <= IDLE;
+                               end if;
+                       end case;
+       end process;
+
+       -- Ausgabe Logik
+       rs232_tx_baud : process(sys_clk, sys_res_n, state, baud_cnt, cnt, tx_data, bus_tx_int,stop_bit)
+       begin 
+               -- Solang idle_sig auf 0 ist wird im SEND Zustand verblieben
+               idle_sig_next <= '0';
+               bus_tx_nxt <= bus_tx_int;
+               cnt_next <= cnt;
+               baud_cnt_next <= baud_cnt;
+
+               case state is
+                       when IDLE =>
+                               -- tx-Signale im idle Zustand halten
+                               tx_rdy <= '1';
+                               baud_cnt_next <= CLK_PER_BAUD;
+                       when SEND =>
+                               -- Signalisiert dass gerade ein Byte versendet wird 
+                               tx_rdy <= '0';
+                               -- Counter erhoehen um die Zeit einer Bitdauer abzuwarten
+                               baud_cnt_next <= baud_cnt + 1;
+                               if baud_cnt = CLK_PER_BAUD then 
+                                       -- wenn die Bitdauer erreicht ist, Counter reseten
+                                       baud_cnt_next <= 0;
+                                       -- Counter um die einzelen Bits zu versenden
+                                       cnt_next <= cnt + 1;
+                                       case cnt is
+                                               when 0 =>
+                                                       -- counter = 0 => Startbit versenden
+                                                       bus_tx_nxt <= '0';
+                                               when 9 =>
+                                                       -- counter = 9 => Stopbit versenden
+                                                       bus_tx_nxt <= '1';
+                                                       -- stop_bit 0 heißt 1 stop bit
+                                                       if stop_bit = '0' then 
+                                                               cnt_next <= 0;
+                                                               idle_sig_next <= '1';
+                                                       end if;         
+                                               when 10 =>
+                                                       bus_tx_nxt <= '1';
+                                                       -- stop_bit 1 heißt 2 stop bits
+                                                       if stop_bit = '1' then 
+                                                               cnt_next <= 0;
+                                                               -- Signalisieren dass der Sendevorgang beendet ist
+                                                               idle_sig_next <= '1';
+                                                       end if;
+                                               when others =>
+                                                       -- counter von 1 bis 8 => Datenbits versenden
+                                                       bus_tx_nxt <= tx_data(cnt-1);
+                                       end case;
+                               end if;
+               end case;
+       end process;
+
+end architecture beh;