history: testbench mit scanner und display instanz erweitert
[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 : 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_zeile => d_zeile,
40                 d_spalte => d_spalte,
41                 d_get => d_get,
42                 d_done => d_done,
43                 d_char => d_char,
44                 -- vga
45                 command => command,
46                 command_data => command_data,
47                 free => free
48         );
49
50         process
51         begin
52                 sys_clk <= '0';
53                 wait for 15 ns;
54                 sys_clk <= '1';
55                 wait for 15 ns;
56                 if stop = true then
57                         wait;
58                 end if;
59         end process;
60
61         process
62                 variable input : hstring := "123513                                                                  ";
63                 variable ctmp : character;
64
65                 variable checkall : boolean := true;
66                 variable i : integer := 1;
67         begin
68                 -- init & reset
69                 sys_res_n <= '0';
70                 d_new_eingabe <= '0';
71                 d_new_result <= '0';
72                 d_done <= '0';
73                 d_char <= x"00";
74                 free <= '1';
75
76                 icwait(sys_clk, 5);
77                 sys_res_n <= '1';
78
79                 while i <= 5 loop
80                         icwait(sys_clk, 10);
81                         d_new_eingabe <= '1';
82                         wait on d_get; -- = '1';
83                         icwait(sys_clk, 1);
84                         d_new_eingabe <= '0';
85
86                         ctmp := input(to_integer(unsigned(d_spalte)));
87                         d_char <= hbyte(to_unsigned(character'pos(ctmp),8));
88
89                         d_done <= '1';
90                         wait on d_get; -- = '0';
91                         icwait(sys_clk, 1);
92                         d_done <= '0';
93
94                         free <= '0';
95                         icwait(sys_clk, 1);
96                         free <= '1';
97                         icwait(sys_clk, 1);
98
99                         -- fuer NOP
100                         free <= '0';
101                         icwait(sys_clk, 1);
102                         free <= '1';
103                         icwait(sys_clk, 1);
104
105                         i := i + 1;
106                 end loop;
107
108                 icwait(sys_clk, 2);
109                 d_new_result <= '1';
110                 icwait(sys_clk, 2);
111                 d_new_result <= '0';
112
113                 -- fuer NOP
114                 free <= '0';
115                 icwait(sys_clk, 1);
116                 free <= '1';
117                 icwait(sys_clk, 2);
118
119                 -- fuer NOP
120                 free <= '0';
121                 icwait(sys_clk, 1);
122                 free <= '1';
123                 icwait(sys_clk, 1);
124                 icwait(sys_clk, 1);
125
126
127
128                 if checkall then
129                         report "alle testfaelle des Displays waren erfolgreich!";
130                 else
131                         report "nicht alle testfaelle des Displays waren erfolgreich!";
132                 end if;
133                 icwait(sys_clk, 10);
134                 stop <= true;
135                 wait;
136         end process;
137 end architecture sim;