OpenCores
URL https://opencores.org/ocsvn/System09/System09/trunk

Subversion Repositories System09

[/] [System09/] [trunk/] [rtl/] [Testbench/] [vdu8_tb.vhd] - Blame information for rev 122

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 122 dilbert57
--===========================================================================--
2
--                                                                           --
3
--             TESTBENCH    vdu8_tb - VDU8 Testbench.                    --
4
--                                                                           --
5
--===========================================================================--
6
--
7
-- File name      : vdu8_tb.vhd
8
--
9
-- Purpose        : Test system09 VDU8 component
10
--
11
-- Dependencies   : ieee.Std_Logic_1164
12
--                  ieee.std_logic_unsigned
13
--                  ieee.std_logic_arith
14
--                  ieee.numeric_std
15
--
16
-- Uses           : vdu8     (..\VHDL\vdu8.vhd)              CPU core
17
--                  ram_2k   (..\Spartan3\ram2k_b16.vhd)      2KB block RAM
18
--                  char_rom (..\Spartan3\char_rom2k_b16.vhd) 2KB chracter block ROM
19
--                   
20
-- Author         : John E. Kent
21
--                  dilbert57@opencores.org      
22
-- 
23
--  Copyright (C) 2008 - 2011 John Kent
24
--
25
--  This program is free software: you can redistribute it and/or modify
26
--  it under the terms of the GNU General Public License as published by
27
--  the Free Software Foundation, either version 3 of the License, or
28
--  (at your option) any later version.
29
--
30
--  This program is distributed in the hope that it will be useful,
31
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
32
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
33
--  GNU General Public License for more details.
34
--
35
--  You should have received a copy of the GNU General Public License
36
--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
37
--
38
--===========================================================================--
39
--                                                                           --
40
--                                Revision History                           --
41
--                                                                           --
42
--===========================================================================--
43
--
44
-- Rev  Date       Author     Changes
45
-- 0.1  2008-07-30 John Kent  First version
46
-- 0.2  2011-10-09 John Kent  updated header & vdu component
47
--
48
--===========================================================================--
49
 
50
library ieee;
51
   use ieee.std_logic_1164.all;
52
   use IEEE.STD_LOGIC_ARITH.ALL;
53
   use IEEE.STD_LOGIC_UNSIGNED.ALL;
54
   use ieee.numeric_std.all;
55
library unisim;
56
   use unisim.vcomponents.all;
57
 
58
entity my_vdu8_tb is
59
end my_vdu8_tb;
60
 
61
architecture behavior of my_vdu8_tb is
62
 
63
constant CPU_FREQ             : natural := 25_000_000;  -- CPU Clock (Hz)
64
constant PIX_FREQ             : natural := 25_000_000;  -- VGA Pixel Clock
65
 
66
         -- CRTC output signals
67
signal    vga_vsync_n  : Std_Logic;
68
signal    vga_hsync_n  : Std_Logic;
69
signal    vga_blue     : std_logic;
70
signal    vga_green    : std_logic;
71
signal    vga_red      : std_logic;
72
 
73
-- CPU Debug Interface signals
74
signal    cpu_reset     : Std_Logic;
75
signal    cpu_clk       : Std_Logic;
76
signal    cpu_rw        : std_logic;
77
signal    cpu_addr      : std_logic_vector(2 downto 0);
78
signal    vdu_data_out  : std_logic_vector(7 downto 0);
79
signal    cpu_data_out  : std_logic_vector(7 downto 0);
80
signal    pix_clk       : std_logic;
81
signal    vdu_cs        : std_logic;
82
 
83
----------------------------------------
84
--
85
-- Video Display Unit.
86
--
87
----------------------------------------
88
component vdu8
89
  generic(
90
        VGA_CLK_FREQ           : integer := PIX_FREQ; -- HZ
91
             VGA_HOR_CHARS          : integer := 80; -- CHARACTERS 25.6us
92
             VGA_HOR_CHAR_PIXELS    : integer := 8;  -- PIXELS 0.32us
93
             VGA_HOR_FRONT_PORCH    : integer := 16; -- PIXELS 0.64us
94
             VGA_HOR_SYNC           : integer := 96; -- PIXELS 3.84us
95
             VGA_HOR_BACK_PORCH     : integer := 48; -- PIXELS 1.92us
96
             VGA_VER_CHARS          : integer := 25; -- CHARACTERS 12.8ms
97
             VGA_VER_CHAR_LINES     : integer := 16; -- LINES 0.512ms
98
             VGA_VER_FRONT_PORCH    : integer := 10; -- LINES 0.320ms
99
             VGA_VER_SYNC           : integer := 2;  -- LINES 0.064ms
100
             VGA_VER_BACK_PORCH     : integer := 34  -- LINES 1.088ms
101
  );
102
  port(
103
    -- control register interface
104
    vdu_clk      : in  std_logic;       -- 12.5/25 MHz CPU Clock
105
    vdu_rst      : in  std_logic;
106
    vdu_cs       : in  std_logic;
107
    vdu_rw       : in  std_logic;
108
    vdu_addr     : in  std_logic_vector(2 downto 0);
109
    vdu_data_in  : in  std_logic_vector(7 downto 0);
110
    vdu_data_out : out std_logic_vector(7 downto 0);
111
 
112
    -- vga port connections
113
    vga_clk      : in  std_logic;       -- 25MHz clock
114
    vga_red_o    : out std_logic;
115
    vga_green_o  : out std_logic;
116
    vga_blue_o   : out std_logic;
117
    vga_hsync_o  : out std_logic;
118
    vga_vsync_o  : out std_logic
119
    );
120
end component;
121
 
122
begin
123
----------------------------------------
124
--
125
-- Video Display Unit instantiation
126
--
127
----------------------------------------
128
my_vdu : vdu8
129
  generic map(
130
      VGA_CLK_FREQ           => PIX_FREQ, -- HZ
131
           VGA_HOR_CHARS          => 80, -- CHARACTERS
132
           VGA_HOR_CHAR_PIXELS    => 8,  -- PIXELS
133
           VGA_HOR_FRONT_PORCH    => 16, -- PIXELS
134
           VGA_HOR_SYNC           => 96, -- PIXELS
135
           VGA_HOR_BACK_PORCH     => 48, -- PIXELS
136
           VGA_VER_CHARS          => 25, -- CHARACTERS
137
           VGA_VER_CHAR_LINES     => 16, -- LINES
138
           VGA_VER_FRONT_PORCH    => 10, -- LINES
139
           VGA_VER_SYNC           => 2,  -- LINES
140
           VGA_VER_BACK_PORCH     => 34  -- LINES
141
  )
142
  port map(
143
 
144
                -- Control Registers
145
                vdu_clk       => cpu_clk,                                        -- 12.5 MHz System Clock in
146
      vdu_rst       => cpu_reset,
147
                vdu_cs        => vdu_cs,
148
                vdu_rw        => cpu_rw,
149
                vdu_addr      => cpu_addr(2 downto 0),
150
                vdu_data_in   => cpu_data_out,
151
                vdu_data_out  => vdu_data_out,
152
 
153
      -- vga port connections
154
      vga_clk       => pix_clk,                                  -- 25 MHz VDU pixel clock
155
      vga_red_o     => vga_red,
156
      vga_green_o   => vga_green,
157
      vga_blue_o    => vga_blue,
158
      vga_hsync_o   => vga_hsync_n,
159
      vga_vsync_o   => vga_vsync_n
160
   );
161
 
162
events : PROCESS(pix_clk)
163
variable count : integer := 0;
164
BEGIN
165
                if falling_edge(cpu_clk) then
166
                   case count is
167
                        --
168
                        -- reset VDU registers
169
                        --
170
                   when 0 =>
171
                          cpu_reset    <= '1';
172
                          vdu_cs       <= '0';
173
                          cpu_rw       <= '1';
174
                          cpu_addr     <= "000";
175
                          cpu_data_out <= "00000000";
176
         when  8 =>
177
                          cpu_reset <= '0';
178
         --
179
                        -- write data register
180
                        --
181
         when 10 =>
182
                          vdu_cs       <= '1';
183
                          cpu_rw       <= '0';
184
                          cpu_addr     <= "000";
185
                          cpu_data_out <= "01101001";
186
         when 11 =>
187
                          vdu_cs       <= '0';
188
                          cpu_rw       <= '1';
189
         --
190
                        -- write attribute register
191
                        --
192
         when 12 =>
193
                          vdu_cs       <= '1';
194
                          cpu_rw       <= '0';
195
                          cpu_addr     <= "001";
196
                          cpu_data_out <= "00000111";
197
         when 13 =>
198
                          vdu_cs       <= '0';
199
                          cpu_rw       <= '1';
200
         --
201
                        -- write cursor column ?
202
         when 14 =>
203
                          vdu_cs       <= '1';
204
                          cpu_rw       <= '0';
205
                          cpu_addr     <= "010";
206
                          cpu_data_out <= "00000001";
207
         when 15 =>
208
                          vdu_cs       <= '0';
209
                          cpu_rw       <= '1';
210
         --
211
                        -- write cursor row ?
212
                        --
213
         when 16 =>
214
                          vdu_cs       <= '1';
215
                          cpu_rw       <= '0';
216
                          cpu_addr     <= "011";
217
                          cpu_data_out <= "00000011";
218
         when 17 =>
219
                          vdu_cs       <= '0';
220
                          cpu_rw       <= '1';
221
         --
222
                        -- write vertical offset
223
                        --
224
         when 18 =>
225
                          vdu_cs       <= '1';
226
                          cpu_rw       <= '0';
227
                          cpu_addr     <= "100";
228
                          cpu_data_out <= "00001001";
229
         when 19 =>
230
                          vdu_cs       <= '0';
231
                          cpu_rw       <= '1';
232
         when others =>
233
                          null;
234
         end case;
235
                        count := count + 1;
236
       end if;
237
end process;
238
 
239
--
240
-- Generate a master clock for the SDRAM controller
241
--
242
   tb : PROCESS
243
        variable i : integer;
244
   BEGIN
245
                for i in 0 to 360000 loop
246
                        pix_clk <= '0';
247
                        cpu_clk <= '0';
248
                        wait for 20 ns;
249
                        pix_clk <= '1';
250
                        cpu_clk <= '1';
251
                        wait for 20 ns;
252
      end loop;
253
      wait; -- will wait forever
254
   end process;
255
 
256
-- *** End Test Bench - User Defined Section ***
257
 
258
end architecture;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.