summaryrefslogtreecommitdiff
path: root/bench/vhdl/TestBench32.vhd
blob: af4189b28b6411805a9768a336945f63413c3b94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
library IEEE;
use IEEE.std_logic_1164.all;
use work.StimLog.all;

entity TestBench32 is
end TestBench32;

architecture behaviour of TestBench32 is

	signal CLK_I		: std_logic := '0';
	signal RST_I		: std_logic := '1';
	signal ACK_I		: std_logic;
	signal TAG0_O		: std_logic;
	signal CYC_O		: std_logic;
	signal STB_O		: std_logic;
	signal WE_O			: std_logic;
	signal ADR_O		: std_logic_vector(15 downto 0);
	signal ADR_O_r		: std_logic_vector(15 downto 0);
	signal DAT_I		: std_logic_vector(7 downto 0);
	signal DAT_O		: std_logic_vector(7 downto 0);
	signal ROM_D		: std_logic_vector(7 downto 0);
	signal RAM_D		: std_logic_vector(7 downto 0);
	signal CS_n			: std_logic;
	signal WE_n			: std_logic;
	signal RXD			: std_logic;
	signal RXD_IsOut	: std_logic;
	signal RXD_Out		: std_logic;
	signal TXD			: std_logic;
	signal INT0			: std_logic := '0';
	signal P0			: std_logic_vector(7 downto 0);
	signal P1			: std_logic_vector(7 downto 0);
	signal P2			: std_logic_vector(7 downto 0);
	signal P3			: std_logic_vector(7 downto 0);
	signal p3_out	: std_logic_vector(7 downto 0);

begin

	u0 : entity work.T8032
		port map(
			CLK_I => CLK_I,
			RST_I => RST_I,
			ACK_I => ACK_I,
			TAG0_O => TAG0_O,
			CYC_O => CYC_O,
			STB_O => STB_O,
			WE_O => WE_O,
			ADR_O => ADR_O,
			DAT_I => DAT_I,
			DAT_O => DAT_O,
			P0_in => P0,
			P1_in => P1,
			P2_in => P2,
			P3_in => P3,
			P0_out => P0,
      P1_out => P1,
      P2_out => P2,
      P3_out => P3_out,
			INT0 => INT0,
			INT1 => '1',
			T0 => '1',
			T1 => '1',
			T2 => '1',
			T2EX => '1',
			RXD => RXD,
			RXD_IsO => RXD_IsOut,
			RXD_O => RXD_Out,
			TXD => TXD);

	rom : entity work.ROM52
		port map(
			Clk	=> CLK_I,
			A => ADR_O(12 downto 0),
			D => ROM_D);

	WE_n <= WE_O nand ACK_I;
	CS_n <= '0' when ADR_O(15 downto 11) = "00000" and TAG0_O = '1' else '1';

	ram : entity work.SSRAM
		generic map(
			AddrWidth => 11)
		port map(
			Clk => CLK_I,
			CE_n => '0',
			WE_n => WE_n,
			A => ADR_O(10 downto 0),
			DIn => DAT_O,
			DOut => RAM_D);

	DAT_I <= ROM_D when TAG0_O = '0' else RAM_D when ADR_O(15 downto 11) = "00000" else "11111111";
	ACK_I <= '1' when ADR_O_r = ADR_O else '0';

	P3(0) <= RXD;
  P3(7 downto 1) <= P3_out(7 downto 1);
  
	process (CLK_I)
	begin
		if CLK_I'event and CLK_I = '1' then
			ADR_O_r <= ADR_O;
		end if;
	end process;

	as : AsyncStim
		generic map(FileName => "BASIC.txt", InterCharDelay => 5000 us, Baud => 57600, Bits => 8)
		port map(RXD);


	al : AsyncLog
		generic map(FileName => "RX_Log.txt", Baud => 57600, Bits => 8)
		port map(TXD);

	CLK_I <= not CLK_I after 45 ns;
	RST_I <= '0' after 200 ns;

	INT0 <= not INT0 after 100 us;

end;