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;
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;
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;
process(state_int, d_get, do_it, s_take, s_backspace, was_bs_int)
begin
state_next <= state_int;
- was_bs_next <= was_bs_int;
case state_int is
when SIDLE =>
state_next <= S_S_DONE;
when S_S_BS =>
state_next <= S_S_DONE;
- was_bs_next <= '1';
when S_S_FIN =>
if do_it = '0' then
state_next <= SIDLE;
when S_S_DONE =>
if s_take = '0' then
state_next <= SIDLE;
- was_bs_next <= '0';
end if;
when S_D_INIT =>
-- out
process(state_int, s_cnt_int, d_spalte, data_out, s_char, address_int,
data_in_int, d_new_result_int, d_new_eingabe_int, d_new_bs_int,
- was_bs_int)
+ was_bs_int, s_take)
variable addr_tmp : std_logic_vector(H_RAM_WIDTH - 1 downto 0);
begin
s_done_next <= '0';
s_cnt_next <= s_cnt_int;
+ was_bs_next <= was_bs_int;
d_new_result_next <= d_new_result_int;
d_new_eingabe_next <= d_new_eingabe_int;
d_new_bs_next <= '0';
when S_S_INIT =>
null;
when S_S_WRITE =>
- wr_next <= '1';
- address_next <= s_cnt_int;
- data_in_next <= s_char;
- s_cnt_next <= std_logic_vector(unsigned(s_cnt_int) + 1);
+ -- nur bei < 71 weiter machen
+ -- TODO: '/=' billiger als '<' ?
+ if unsigned(s_cnt_int) /= 71 then
+ wr_next <= '1';
+ address_next <= s_cnt_int;
+ data_in_next <= s_char;
+ s_cnt_next <= std_logic_vector(unsigned(s_cnt_int) + 1);
+ else
+ -- was_bs hier missbrauchen, um ein d_new_eingabe zu verhindern
+ was_bs_next <= '1';
+ end if;
when S_S_BS =>
-- ab 1 darf nicht mehr dekrementiert werden
if unsigned(s_cnt_int) /= 1 then
wr_next <= '1';
address_next <= addr_tmp;
data_in_next <= (others => '0');
+ was_bs_next <= '1';
when S_S_FIN =>
finished_next <= '1';
s_cnt_next <= (0 => '1', others => '0');
if was_bs_int = '0' then
d_new_eingabe_next <= '1';
end if;
+ if s_take = '0' then
+ was_bs_next <= '0';
+ end if;
when S_D_INIT =>
address_next <= d_spalte;