6b0b19b762e273a991ed33afb4b6c0255d0bcb7c
[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_new_bs <= '0';
74                 d_done <= '0';
75                 d_char <= x"00";
76                 free <= '1';
77
78                 icwait(sys_clk, 5);
79                 sys_res_n <= '1';
80
81                 while i <= 5 loop
82                         icwait(sys_clk, 10);
83                         d_new_eingabe <= '1';
84                         wait on d_get; -- = '1';
85                         icwait(sys_clk, 1);
86                         d_new_eingabe <= '0';
87
88                         ctmp := input(to_integer(unsigned(d_spalte)));
89                         d_char <= hbyte(to_unsigned(character'pos(ctmp),8));
90
91                         d_done <= '1';
92                         wait on d_get; -- = '0';
93                         icwait(sys_clk, 1);
94                         d_done <= '0';
95
96                         free <= '0';
97                         icwait(sys_clk, 1);
98                         free <= '1';
99                         icwait(sys_clk, 1);
100
101                         -- fuer NOP
102                         free <= '0';
103                         icwait(sys_clk, 1);
104                         free <= '1';
105                         icwait(sys_clk, 1);
106
107                         i := i + 1;
108                 end loop;
109
110                 icwait(sys_clk, 2);
111                 d_new_result <= '1';
112                 icwait(sys_clk, 2);
113                 d_new_result <= '0';
114
115                 -- fuer NOP
116                 free <= '0';
117                 icwait(sys_clk, 1);
118                 free <= '1';
119                 icwait(sys_clk, 2);
120
121                 -- fuer NOP
122                 free <= '0';
123                 icwait(sys_clk, 1);
124                 free <= '1';
125                 icwait(sys_clk, 1);
126                 icwait(sys_clk, 1);
127
128
129
130                 if checkall then
131                         report "alle testfaelle des Displays waren erfolgreich!";
132                 else
133                         report "nicht alle testfaelle des Displays waren erfolgreich!";
134                 end if;
135                 icwait(sys_clk, 10);
136                 stop <= true;
137                 wait;
138         end process;
139 end architecture sim;