-- system
signal sys_clk, sys_res_n : std_logic;
-- history/display
- signal d_new_eingabe, d_new_result : std_logic;
+ signal d_new_eingabe, d_new_result, d_new_bs : std_logic;
signal d_zeile : hzeile;
signal d_spalte : hspalte;
signal d_get, d_done : std_logic;
signal free : std_logic;
signal command : std_logic_vector(COMMAND_SIZE - 1 downto 0);
signal command_data : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE -1 downto 0);
-
- -- tmp: history<>scanner
+ -- history/parser
+ signal p_rget : std_logic;
+ signal p_rdone : std_logic;
+ signal p_read : hbyte;
+ signal p_wtake : std_logic;
+ signal p_wdone : std_logic;
+ signal p_write : hbyte;
+ signal p_finished : std_logic;
+ -- parser/scanner
signal do_it, finished : std_logic;
signal stop : boolean := false;
-- display
d_new_eingabe => d_new_eingabe,
d_new_result => d_new_result,
+ d_new_bs => d_new_bs,
d_zeile => d_zeile,
d_spalte => d_spalte,
d_get => d_get,
d_done => d_done,
d_char => d_char,
- -- TODO: tmp only!
- do_it => do_it,
- finished => finished
+ -- parser
+ p_rget => p_rget,
+ p_rdone => p_rdone,
+ p_read => p_read,
+ p_wtake => p_wtake,
+ p_wdone => p_wdone,
+ p_write => p_write,
+ p_finished => p_finished
);
-- display
-- history
d_new_eingabe => d_new_eingabe,
d_new_result => d_new_result,
+ d_new_bs => d_new_bs,
d_zeile => d_zeile,
d_spalte => d_spalte,
d_get => d_get,
free => free
);
+ -- parser
+ inst_parser : entity work.parser(beh)
+ port map (
+ sys_clk => sys_clk,
+ sys_res_n => sys_res_n,
+ -- history
+ p_rget => p_rget,
+ p_rdone => p_rdone,
+ p_read => p_read,
+ p_wtake => p_wtake,
+ p_wdone => p_wdone,
+ p_write => p_write,
+ p_finished => p_finished,
+ -- scanner
+ do_it => do_it,
+ finished => finished
+ );
+
-- scanner
inst_scan : entity work.scanner(beh)
port map (
process
begin
free <= '0';
- icwait(sys_clk, 2);
+ wait for 15 ns;
free <= '1';
- icwait(sys_clk, 2);
+ wait for 30 ns;
if stop = true then
wait;
end if;
return y;
end function;
- function valid_char (x : std_logic_vector(7 downto 0); last : std_logic_vector(7 downto 0)) return boolean is
+ function valid_char (x : std_logic_vector(7 downto 0)) return boolean is
variable y : boolean;
begin
case x is
file f : text open read_mode is "../../src/history.test";
variable l : line;
- variable input : hstring;
+ variable input : string(1 to 100);
variable run_tc, run_inner : boolean := true;
variable i, j, y : natural;
- variable last : std_logic_vector(7 downto 0);
begin
-- init & reset
sys_res_n <= '0';
new_data <= '0';
data <= (others => '0');
- s_done <= '0';
- finished <= '0';
- icwait(sys_clk, 5);
+ icwait(sys_clk, 20);
sys_res_n <= '1';
i := 1;
f1_loop : while not endfile(f) loop
readline (f, l);
input := (others => nul);
- if (l'length <= 72) then
+ if (l'length <= 100) then
input(1 to l'length) := l.all;
if (input(1) = '#') then
next f1_loop;
j := 0;
mainl : while run_tc loop
- last := data;
- icwait(sys_clk, 1);
+ icwait(sys_clk, 10);
j := j + 1;
- if j = 73 then
+ if j = 101 then
run_tc := false;
assert(false) report "wtf @ schleife";
next mainl;
-- ack'en skippen, falls es ein "spezielles" zeichen ist (steht
-- in abhaengigkeit zum vorherigen zeichen)
- if(not valid_char(data, last)) then
+ if(not valid_char(data)) then
next mainl;
end if;
wait on do_it; -- = '0'
icwait(sys_clk, 1);
finished <= '0';
+ icwait(sys_clk, 850);
run_tc := false;
else
report "==================";
end loop f_loop;
- icwait(sys_clk, 20);
+ icwait(sys_clk, 850);
stop <= true;
wait;
end process;