X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=hwmod.git;a=blobdiff_plain;f=src%2Fbeh_scanner_tb.vhd;h=d9b7bb4610d4942cf4ee31cca788896c29e9cdf3;hp=e904d76024c941a461b090932b5742f68b5403ab;hb=HEAD;hpb=89a2f3f4045a6d92e25cb1a62438ed8b08a1f90e diff --git a/src/beh_scanner_tb.vhd b/src/beh_scanner_tb.vhd index e904d76..d9b7bb4 100644 --- a/src/beh_scanner_tb.vhd +++ b/src/beh_scanner_tb.vhd @@ -21,7 +21,7 @@ architecture sim of beh_scanner_tb is signal stop : boolean := false; begin - inst : entity work.scanner(beh) + inst : scanner port map ( sys_clk => sys_clk, sys_res_n => sys_res_n, @@ -50,51 +50,6 @@ begin end process; process - function ascii2sc (x : hbyte) return hbyte is - variable y : hbyte; - begin - case x is - when x"30" => y := SC_KP_0; - when x"31" => y := SC_KP_1; - when x"32" => y := SC_KP_2; - when x"33" => y := SC_KP_3; - when x"34" => y := SC_KP_4; - when x"35" => y := SC_KP_5; - when x"36" => y := SC_KP_6; - when x"37" => y := SC_KP_7; - when x"38" => y := SC_KP_8; - when x"39" => y := SC_KP_9; - when x"2b" => y := SC_KP_PLUS; - when x"2d" => y := SC_KP_MINUS; - when x"2a" => y := SC_KP_MUL; - when x"2f" => y := SC_KP_DIV; - when x"20" => y := SC_SPACE; - when x"1c" => y := SC_ENTER; - when x"0e" => y := SC_BKSP; - when others => y := x"41"; - end case; - return y; - end function; - - function valid_char (x : std_logic_vector(7 downto 0); last : std_logic_vector(7 downto 0)) return boolean is - variable y : boolean; - begin - case x is - -- nur gueltig wenn davor ein numpad-mod byte gekommen ist - when SC_KP_DIV => y := last = x"e0"; - - -- immer gueltig - when SC_KP_0 | SC_KP_1 | SC_KP_2 | SC_KP_3 | - SC_KP_4 | SC_KP_5 | SC_KP_6 | SC_KP_7 | - SC_KP_8 | SC_KP_9 | SC_KP_PLUS | - SC_KP_MINUS | SC_KP_MUL | SC_SPACE | - SC_BKSP | SC_ENTER => - y := true; - when others => y := false; - end case; - return y; - end function; - -- textio stuff use std.textio.all; file f : text open read_mode is "../../src/scanner.test"; @@ -107,7 +62,6 @@ begin variable checkall : boolean := true; variable run_tc, run_inner : boolean := true; variable i, j, k, y : natural; - variable last : std_logic_vector(7 downto 0); begin -- init & reset sys_res_n <= '0'; @@ -127,7 +81,7 @@ begin f1_loop : while not endfile(f) loop readline (f, l); input := (others => nul); - if (l'length <= 71) then + if (l'length <= HSPALTE_MAX+1) then input(1 to l'length) := l.all; if (input(1) = '#') then next f1_loop; @@ -143,7 +97,7 @@ begin f2_loop : while not endfile(f) loop readline (f, l); expectedresult := (others => nul); - if (l'length <= 71) then + if (l'length <= HSPALTE_MAX+1) then expectedresult(1 to l'length) := l.all; if (expectedresult(1) = '#') then next f2_loop; @@ -168,7 +122,6 @@ begin j := 0; k := 1; mainl : while run_tc loop - last := data; icwait(sys_clk, 1); j := j + 1; @@ -179,18 +132,24 @@ begin end if; new_data <= '1'; + case input(j) is when nul => data <= ascii2sc(x"1c"); -- $ (enter) when '!' => data <= ascii2sc(x"0e"); -- ! (backspace) - when '.' => data <= x"e0"; -- . (modifier fuer Numpad) + when '/' => + data <= x"e0"; + icwait(sys_clk, 1); + new_data <= '0'; + icwait(sys_clk, 1); + new_data <= '1'; + data <= SC_KP_DIV; when others => data <= ascii2sc(std_logic_vector(to_unsigned(character'pos(input(j)),8))); end case; icwait(sys_clk, 1); new_data <= '0'; - -- ack'en skippen, falls es ein "spezielles" zeichen ist (steht - -- in abhaengigkeit zum vorherigen zeichen) - if(not valid_char(data, last)) then + -- ack'en skippen, falls es ein "spezielles" zeichen ist + if(not valid_char(data)) then next mainl; end if;