First working version with beh simulation
[hwmod.git] / src / beh_pc_communication_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 -- this is for test file io
10 use std.textio.all;
11
12 entity beh_pc_communication_tb is
13 end entity beh_pc_communication_tb;
14
15 architecture sim of beh_pc_communication_tb is
16                 type byte_file_type is file of hbyte;
17                 subtype my_string is string(1 to 720);
18                 signal sys_clk : std_logic;
19                 signal sys_res_n : std_logic;
20                 signal btn_a : std_logic;
21                 signal tx_new : std_logic;
22                 signal tx_done : std_logic;
23                 signal rx_new : std_logic;
24                 signal d_get : std_logic;
25                 signal d_done : std_logic;
26                 signal rx_data, tx_data : std_logic_vector(7 downto 0);
27
28                 signal d_zeile : hzeile;
29                 signal d_spalte : hspalte;
30                 signal d_char : hbyte;
31 begin
32         -- display
33         inst : entity work.pc_communication(beh)
34         port map (
35                 sys_clk => sys_clk,
36                 sys_res_n => sys_res_n,
37
38                 --button
39                 btn_a => btn_a,
40
41                 --uart_tx
42                 tx_data => tx_data,
43                 tx_new => tx_new,
44                 tx_done => tx_done,
45
46                 --uart_rx
47                 rx_data => rx_data,
48                 rx_new => rx_new,
49
50                 -- History
51                 d_zeile => d_zeile,
52                 d_spalte => d_spalte,
53                 d_get => d_get,
54                 d_done => d_done,
55                 d_char => d_char
56         );
57
58         clk : process
59         begin
60                 sys_clk <= '0';
61                 wait for 15 ns;
62                 sys_clk <= '1';
63                 wait for 15 ns;
64         end process clk;
65
66         stub_history : process
67                 file f : text open read_mode is "../../src/pc_communication.test";
68                 --variable rb : hbyte;
69                 variable rb : character;
70                 variable good : boolean;
71                 variable i : integer;
72                 variable buf : my_string;
73                 variable l : line;
74         begin
75                 --take control of the situation.
76                 d_char <= (others => '0');
77                 d_done <= '0';
78                 wait until sys_res_n = '1';
79
80                 while not endfile (f) loop
81                         readline(f, l);
82                         i := 1;
83                         while i < l'length loop
84                                 d_done <= '0';
85                                 wait until rising_edge(d_get);
86                                 d_char <= (others => '0');
87                                 wait for 300 ns;
88
89                                 d_char <= hbyte(std_logic_vector(to_unsigned(character'pos(buf(i)),8)));
90                                 d_done <= '1';
91                                 wait for 30 ns;
92                                 
93                         end loop;
94                 end loop;
95
96                 assert not endfile(f) report "test beendet" severity failure;
97         end process stub_history;
98
99         stub_uart : process
100         begin
101                 tx_done <= '0';
102                 wait until sys_res_n = '1';
103                 while true loop
104                         tx_done <= '0';
105                         wait until rising_edge(tx_new);
106                         wait for 300 ns;
107                         tx_done <= '1';
108                         wait for 30 ns;
109                 end loop;
110         end process stub_uart;
111
112         reset_and_button : process
113         begin
114                 -- init & reset
115                 -- we only simulate pressing of button a by now!
116                 sys_res_n <= '0';
117                 btn_a <= '0';
118                 tx_data <= ( others => '0');
119                 rx_data <= ( others => '0');
120                 rx_new <= '0';
121                 
122                 wait for 90 ns;
123                 sys_res_n <= '1';
124                 wait for 30 ns;
125                 btn_a <= '1';
126                 wait for 30 ns;
127                 btn_a <= '0';
128                 wait;
129                 --wait for 1000 ns;
130                 --assert false report "test beendet" severity failure;
131         end process reset_and_button;
132
133 end architecture sim;