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

Subversion Repositories System09

[/] [System09/] [trunk/] [rtl/] [Testbench/] [vdu8_tb.vhd] - Rev 138

Go to most recent revision | Compare with Previous | Blame | View Log

--===========================================================================--
--                                                                           --
--             TESTBENCH    vdu8_tb - VDU8 Testbench.                    --
--                                                                           --
--===========================================================================--
--
-- File name      : vdu8_tb.vhd
--
-- Purpose        : Test system09 VDU8 component
--
-- Dependencies   : ieee.Std_Logic_1164
--                  ieee.std_logic_unsigned
--                  ieee.std_logic_arith
--                  ieee.numeric_std
--
-- Uses           : vdu8     (..\VHDL\vdu8.vhd)              CPU core
--                  ram_2k   (..\Spartan3\ram2k_b16.vhd)      2KB block RAM
--                  char_rom (..\Spartan3\char_rom2k_b16.vhd) 2KB chracter block ROM
--                   
-- Author         : John E. Kent
--                  dilbert57@opencores.org      
-- 
--  Copyright (C) 2008 - 2011 John Kent
--
--  This program is free software: you can redistribute it and/or modify
--  it under the terms of the GNU General Public License as published by
--  the Free Software Foundation, either version 3 of the License, or
--  (at your option) any later version.
--
--  This program is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--  GNU General Public License for more details.
--
--  You should have received a copy of the GNU General Public License
--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
--
--===========================================================================--
--                                                                           --
--                                Revision History                           --
--                                                                           --
--===========================================================================--
--
-- Rev  Date       Author     Changes
-- 0.1  2008-07-30 John Kent  First version
-- 0.2  2011-10-09 John Kent  updated header & vdu component
--
--===========================================================================--
 
library ieee;
   use ieee.std_logic_1164.all;
   use IEEE.STD_LOGIC_ARITH.ALL;
   use IEEE.STD_LOGIC_UNSIGNED.ALL;
   use ieee.numeric_std.all;
library unisim;
   use unisim.vcomponents.all;
 
entity my_vdu8_tb is
end my_vdu8_tb;
 
architecture behavior of my_vdu8_tb is
 
constant CPU_FREQ             : natural := 25_000_000;  -- CPU Clock (Hz)
constant PIX_FREQ             : natural := 25_000_000;  -- VGA Pixel Clock
 
	 -- CRTC output signals
signal    vga_vsync_n  : Std_Logic;
signal    vga_hsync_n  : Std_Logic;
signal    vga_blue     : std_logic;
signal    vga_green    : std_logic;
signal    vga_red      : std_logic;
 
-- CPU Debug Interface signals
signal    cpu_reset     : Std_Logic;
signal    cpu_clk       : Std_Logic;
signal    cpu_rw        : std_logic;
signal    cpu_addr      : std_logic_vector(2 downto 0);
signal    vdu_data_out  : std_logic_vector(7 downto 0);
signal    cpu_data_out  : std_logic_vector(7 downto 0);
signal    pix_clk       : std_logic;
signal    vdu_cs        : std_logic;
 
----------------------------------------
--
-- Video Display Unit.
--
----------------------------------------
component vdu8
  generic(
        VGA_CLK_FREQ           : integer := PIX_FREQ; -- HZ
	     VGA_HOR_CHARS          : integer := 80; -- CHARACTERS 25.6us
	     VGA_HOR_CHAR_PIXELS    : integer := 8;  -- PIXELS 0.32us
	     VGA_HOR_FRONT_PORCH    : integer := 16; -- PIXELS 0.64us
	     VGA_HOR_SYNC           : integer := 96; -- PIXELS 3.84us
	     VGA_HOR_BACK_PORCH     : integer := 48; -- PIXELS 1.92us
	     VGA_VER_CHARS          : integer := 25; -- CHARACTERS 12.8ms
	     VGA_VER_CHAR_LINES     : integer := 16; -- LINES 0.512ms
	     VGA_VER_FRONT_PORCH    : integer := 10; -- LINES 0.320ms
	     VGA_VER_SYNC           : integer := 2;  -- LINES 0.064ms
	     VGA_VER_BACK_PORCH     : integer := 34  -- LINES 1.088ms
  );
  port(
    -- control register interface
    vdu_clk      : in  std_logic;       -- 12.5/25 MHz CPU Clock
    vdu_rst      : in  std_logic;
    vdu_cs       : in  std_logic;
    vdu_rw       : in  std_logic;
    vdu_addr     : in  std_logic_vector(2 downto 0);
    vdu_data_in  : in  std_logic_vector(7 downto 0);
    vdu_data_out : out std_logic_vector(7 downto 0);
 
    -- vga port connections
    vga_clk      : in  std_logic;       -- 25MHz clock
    vga_red_o    : out std_logic;
    vga_green_o  : out std_logic;
    vga_blue_o   : out std_logic;
    vga_hsync_o  : out std_logic;
    vga_vsync_o  : out std_logic
    );
end component;
 
begin
----------------------------------------
--
-- Video Display Unit instantiation
--
----------------------------------------
my_vdu : vdu8 
  generic map(
      VGA_CLK_FREQ           => PIX_FREQ, -- HZ
	   VGA_HOR_CHARS          => 80, -- CHARACTERS
	   VGA_HOR_CHAR_PIXELS    => 8,  -- PIXELS
	   VGA_HOR_FRONT_PORCH    => 16, -- PIXELS
	   VGA_HOR_SYNC           => 96, -- PIXELS
	   VGA_HOR_BACK_PORCH     => 48, -- PIXELS
	   VGA_VER_CHARS          => 25, -- CHARACTERS
	   VGA_VER_CHAR_LINES     => 16, -- LINES
	   VGA_VER_FRONT_PORCH    => 10, -- LINES
	   VGA_VER_SYNC           => 2,  -- LINES
	   VGA_VER_BACK_PORCH     => 34  -- LINES
  )
  port map(
 
		-- Control Registers
		vdu_clk       => cpu_clk,					 -- 12.5 MHz System Clock in
      vdu_rst       => cpu_reset,
		vdu_cs        => vdu_cs,
		vdu_rw        => cpu_rw,
		vdu_addr      => cpu_addr(2 downto 0),
		vdu_data_in   => cpu_data_out,
		vdu_data_out  => vdu_data_out,
 
      -- vga port connections
      vga_clk       => pix_clk,					 -- 25 MHz VDU pixel clock
      vga_red_o     => vga_red,
      vga_green_o   => vga_green,
      vga_blue_o    => vga_blue,
      vga_hsync_o   => vga_hsync_n,
      vga_vsync_o   => vga_vsync_n
   );
 
events : PROCESS(pix_clk)
variable count : integer := 0;
BEGIN
		if falling_edge(cpu_clk) then
		   case count is
			--
			-- reset VDU registers
			--
		   when 0 =>
			  cpu_reset    <= '1';
			  vdu_cs       <= '0';
			  cpu_rw       <= '1';
			  cpu_addr     <= "000";
			  cpu_data_out <= "00000000";
         when  8 =>
			  cpu_reset <= '0';
         --
			-- write data register
			--
         when 10 =>
			  vdu_cs       <= '1';
			  cpu_rw       <= '0';
			  cpu_addr     <= "000";
			  cpu_data_out <= "01101001";
         when 11 =>
			  vdu_cs       <= '0';
			  cpu_rw       <= '1';
         --
			-- write attribute register
			--
         when 12 =>
			  vdu_cs       <= '1';
			  cpu_rw       <= '0';
			  cpu_addr     <= "001";
			  cpu_data_out <= "00000111";
         when 13 =>
			  vdu_cs       <= '0';
			  cpu_rw       <= '1';
         --
			-- write cursor column ?
         when 14 =>
			  vdu_cs       <= '1';
			  cpu_rw       <= '0';
			  cpu_addr     <= "010";
			  cpu_data_out <= "00000001";
         when 15 =>
			  vdu_cs       <= '0';
			  cpu_rw       <= '1';
         --
			-- write cursor row ?
			--
         when 16 =>
			  vdu_cs       <= '1';
			  cpu_rw       <= '0';
			  cpu_addr     <= "011";
			  cpu_data_out <= "00000011";
         when 17 =>
			  vdu_cs       <= '0';
			  cpu_rw       <= '1';
         --
			-- write vertical offset
			--
         when 18 =>
			  vdu_cs       <= '1';
			  cpu_rw       <= '0';
			  cpu_addr     <= "100";
			  cpu_data_out <= "00001001";
         when 19 =>
			  vdu_cs       <= '0';
			  cpu_rw       <= '1';
         when others =>
			  null;
         end case;
			count := count + 1;
       end if;
end process;
 
--
-- Generate a master clock for the SDRAM controller
--
   tb : PROCESS
	variable i : integer;
   BEGIN
		for i in 0 to 360000 loop
			pix_clk <= '0';
			cpu_clk <= '0';
			wait for 20 ns;
			pix_clk <= '1';
			cpu_clk <= '1';
			wait for 20 ns;
      end loop;
      wait; -- will wait forever
   end process;
 
-- *** End Test Bench - User Defined Section ***
 
end architecture;
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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