display/history: robuster, trotzdem funktioniert es noch nicht so wie ich moechte
authorBernhard Urban <lewurm@gmail.com>
Wed, 19 May 2010 14:33:25 +0000 (16:33 +0200)
committerBernhard Urban <lewurm@gmail.com>
Wed, 19 May 2010 14:33:25 +0000 (16:33 +0200)
src/beh_display_tb.vhd
src/display.vhd
src/history.vhd

index 707788b0fbebd156849e03960bce689cc46ddf79..166510a7f2f7f6afbdd94272ecd0ecb6e9078be0 100644 (file)
@@ -76,10 +76,12 @@ begin
                icwait(sys_clk, 5);
                sys_res_n <= '1';
 
-               while i <= 71 loop
+               while i <= 5 loop
+                       icwait(sys_clk, 10);
                        d_new_eingabe <= '1';
                        wait on d_get; -- = '1';
                        icwait(sys_clk, 1);
+                       d_new_eingabe <= '0';
 
                        ctmp := input(to_integer(unsigned(d_spalte)));
                        d_char <= hbyte(to_unsigned(character'pos(ctmp),8));
@@ -88,7 +90,6 @@ begin
                        wait on d_get; -- = '0';
                        icwait(sys_clk, 1);
                        d_done <= '0';
-                       d_new_eingabe <= '0';
 
                        free <= '0';
                        icwait(sys_clk, 1);
index 507c7397427c552f30c3cc342596e8a9fab302c5..8fca39cc8e8372b726ad4800811dfe7ff94be4b6 100644 (file)
@@ -93,7 +93,7 @@ begin
                        when S_COUNTUP =>
                                state_next <= S_GETCH;
                        when S_GETCH =>
-                               if free = '1' and d_done = '1' then
+                               if free = '1' and d_done = '1' and d_new_result = '0' and d_new_eingabe = '0' then
                                        state_next <= S_PUTCH1;
                                end if;
                        when S_PUTCH1 =>
index 4572456eccd9c9521ca0dc45786c6051198a886c..c9f56569de863af75217b29fb36f012542daf21f 100644 (file)
@@ -139,12 +139,12 @@ begin
 
        -- out
        process(state_int, s_cnt_int, d_spalte, data_out, s_char, address_int,
-               data_in_int)
+               data_in_int, d_new_result_int, d_new_eingabe_int)
        begin
                s_done_next <= '0';
                s_cnt_next <= s_cnt_int;
-               d_new_result_next <= '0';
-               d_new_eingabe_next <= '0';
+               d_new_result_next <= d_new_result_int;
+               d_new_eingabe_next <= d_new_eingabe_int;
                d_done_next <= '0';
                d_char_next <= (others => '0');
                finished_next <= '0';
@@ -179,6 +179,8 @@ begin
 
                        when S_D_INIT =>
                                address_next <= '0' & d_spalte;
+                               d_new_eingabe_next <= '0';
+                               d_new_result_next <= '0';
                        when S_D_WAIT =>
                                null;
                        when S_D_WRITE =>