history/display: backspace logic
[hwmod.git] / src / beh_display_tb.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
4 use work.gen_pkg.all;
5 use work.textmode_vga_component_pkg.all;
6 use work.textmode_vga_pkg.all;
7 use work.textmode_vga_platform_dependent_pkg.all;
8
9 entity beh_display_tb is
10 end entity beh_display_tb;
11
12 architecture sim of beh_display_tb is
13         -- system
14         signal sys_clk, sys_res_n : std_logic;
15         -- vga/display
16         signal free : std_logic;
17         signal command : std_logic_vector(COMMAND_SIZE - 1 downto 0);
18         signal command_data : std_logic_vector(3 * COLOR_SIZE + CHAR_SIZE -1 downto 0);
19         -- history/display
20         signal d_new_eingabe, d_new_result, d_new_bs : std_logic;
21         signal d_zeile : hzeile;
22         signal d_spalte : hspalte;
23         signal d_get, d_done : std_logic;
24         signal d_char : hbyte;
25         -- history/scanner
26         signal s_char : hbyte;
27         signal s_take, s_done, s_backspace : std_logic;
28
29         signal stop : boolean := false;
30 begin
31         -- display
32         inst : entity work.display(beh)
33         port map (
34                 sys_clk => sys_clk,
35                 sys_res_n => sys_res_n,
36                 -- history
37                 d_new_eingabe => d_new_eingabe,
38                 d_new_result => d_new_result,
39                 d_new_bs => d_new_bs,
40                 d_zeile => d_zeile,
41                 d_spalte => d_spalte,
42                 d_get => d_get,
43                 d_done => d_done,
44                 d_char => d_char,
45                 -- vga
46                 command => command,
47                 command_data => command_data,
48                 free => free
49         );
50
51         process
52         begin
53                 sys_clk <= '0';
54                 wait for 15 ns;
55                 sys_clk <= '1';
56                 wait for 15 ns;
57                 if stop = true then
58                         wait;
59                 end if;
60         end process;
61
62         process
63                 variable input : hstring := "123513                                                                  ";
64                 variable ctmp : character;
65
66                 variable checkall : boolean := true;
67                 variable i : integer := 1;
68         begin
69                 -- init & reset
70                 sys_res_n <= '0';
71                 d_new_eingabe <= '0';
72                 d_new_result <= '0';
73                 d_done <= '0';
74                 d_char <= x"00";
75                 free <= '1';
76
77                 icwait(sys_clk, 5);
78                 sys_res_n <= '1';
79
80                 while i <= 5 loop
81                         icwait(sys_clk, 10);
82                         d_new_eingabe <= '1';
83                         wait on d_get; -- = '1';
84                         icwait(sys_clk, 1);
85                         d_new_eingabe <= '0';
86
87                         ctmp := input(to_integer(unsigned(d_spalte)));
88                         d_char <= hbyte(to_unsigned(character'pos(ctmp),8));
89
90                         d_done <= '1';
91                         wait on d_get; -- = '0';
92                         icwait(sys_clk, 1);
93                         d_done <= '0';
94
95                         free <= '0';
96                         icwait(sys_clk, 1);
97                         free <= '1';
98                         icwait(sys_clk, 1);
99
100                         -- fuer NOP
101                         free <= '0';
102                         icwait(sys_clk, 1);
103                         free <= '1';
104                         icwait(sys_clk, 1);
105
106                         i := i + 1;
107                 end loop;
108
109                 icwait(sys_clk, 2);
110                 d_new_result <= '1';
111                 icwait(sys_clk, 2);
112                 d_new_result <= '0';
113
114                 -- fuer NOP
115                 free <= '0';
116                 icwait(sys_clk, 1);
117                 free <= '1';
118                 icwait(sys_clk, 2);
119
120                 -- fuer NOP
121                 free <= '0';
122                 icwait(sys_clk, 1);
123                 free <= '1';
124                 icwait(sys_clk, 1);
125                 icwait(sys_clk, 1);
126
127
128
129                 if checkall then
130                         report "alle testfaelle des Displays waren erfolgreich!";
131                 else
132                         report "nicht alle testfaelle des Displays waren erfolgreich!";
133                 end if;
134                 icwait(sys_clk, 10);
135                 stop <= true;
136                 wait;
137         end process;
138 end architecture sim;