port (
sys_clk : in std_logic;
sys_res_n : in std_logic;
-
--button
btn_a : in std_logic;
-
--uart_tx
tx_data : out std_logic_vector(7 downto 0);
tx_new : out std_logic;
tx_done : in std_logic;
-
--uart_rx
rx_data : in std_logic_vector(7 downto 0);
rx_new : in std_logic;
-
-- History
pc_zeile : out hzeile;
pc_spalte : out hspalte;
signal tx_done_i, tx_done_i_next : std_logic;
signal tx_data_i, tx_data_i_next : std_logic_vector (7 downto 0);
- type STATE_PC is (IDLE, FETCH, FORWARD, WAIT_UART, UART_DONE, CR, CR_WAIT,
+ type STATE_PC is (IDLE, FETCH, FORWARD, UART_DONE, CR, CR_WAIT,
NL, NL_WAIT, PRINT_NO1, PRINT_NO1_WAIT, PRINT_NO2, PRINT_NO2_WAIT,
PRINT_NO3, PRINT_NO3_WAIT, PRINT_NO4, PRINT_NO4_WAIT, PRINT_NO5,
PRINT_NO5_WAIT, PRINT_NO6, PRINT_NO0_WAIT);
end process sync;
process (state, zeile, spalte, tx_data_i, tx_done_i, pc_char, rx_new, btn_a,
- pc_done)
+ pc_done, rx_data)
variable tmp : std_logic_vector(6 downto 0);
begin
get_next <= '0';
state_next <= state;
case state is
when IDLE =>
--- if (rx_new = '1' and rx_data = x"0a") or btn_a = '0' then
- if (rx_new = '1') or btn_a = '0' then
+ if (rx_new = '1' and rx_data = x"0a") or btn_a = '0' then
state_next <= PRINT_NO0_WAIT;
end if;
when FORWARD =>
tx_data_i_next <= pc_char;
new_i_next <= '1';
- -- halte pc_get weiterhin high sodass pc_char garantiert gleich bleibt
- get_next <= '1';
- state_next <= WAIT_UART;
- when WAIT_UART =>
- new_i_next <= '1';
+ -- halte pc_get weiterhin high sodass pc_char garantiert
+ -- gleicht bleibt (blockiert history!)
get_next <= '1';
if tx_done_i = '1' then
state_next <= UART_DONE;
end if;
when UART_DONE =>
- state_next <= FETCH;
- spalte_next <= spalte + 1;
- if spalte = HSPALTE_MAX + 1 then
- state_next <= NL;
- spalte_next <= 1;
- zeile_next <= zeile + 1;
+ if tx_done_i = '0' then
+ state_next <= FETCH;
+ spalte_next <= spalte + 1;
+ if spalte = HSPALTE_MAX + 1 then
+ state_next <= NL;
+ spalte_next <= 1;
+ zeile_next <= zeile + 1;
+ end if;
end if;
when NL =>
tx_data_i_next <= x"0a";
when CR_WAIT =>
tmp := std_logic_vector(to_unsigned(zeile,7));
if tmp(0) = '0' then
- -- es handelt sich um eingabe
+ -- es handelt sich um eingabe im naechsten schritt
-- => print zeilennummer
state_next <= PRINT_NO0_WAIT;
else