summaryrefslogtreecommitdiffstats
path: root/lab4/VGA_lab.vhd
blob: 8d3c612526f50bc26a2f2d63299e6ce86747864e (plain) (blame)
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
--------------------------------------------------------------------------------
-- VGA lab
-- Anders Nilsson
-- 16-dec-2015
-- Version 1.0


-- library declaration
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;            -- basic IEEE library
use IEEE.NUMERIC_STD.ALL;               -- IEEE library for the unsigned type
                                        -- and various arithmetic operations

-- entity
entity VGA_lab is
  port ( clk                    : in std_logic;                              -- system clock
         rst                    : in std_logic;                              -- reset
         Hsync                  : out std_logic;                             -- horizontal sync
         Vsync                  : out std_logic;                             -- vertical sync
         vgaRed                 : out        std_logic_vector(2 downto 0);   -- VGA red
         vgaGreen               : out std_logic_vector(2 downto 0);          -- VGA green
         vgaBlue                : out std_logic_vector(2 downto 1);          -- VGA blue
         PS2KeyboardCLK         : in std_logic;                              -- PS2 clock
         PS2KeyboardData        : in std_logic);                             -- PS2 data
end VGA_lab;


-- architecture
architecture Behavioral of VGA_lab is

  -- PS2 keyboard encoder component
  component KBD_ENC
    port ( clk                  : in std_logic;                          -- system clock
           rst                  : in std_logic;                          -- reset signal
           PS2KeyboardCLK       : in std_logic;                          -- PS2 clock
           PS2KeyboardData      : in std_logic;                          -- PS2 data
           data                 : out std_logic_vector(7 downto 0);      -- tile data
           addr                 : out unsigned(10 downto 0);             -- tile address
           we                   : out std_logic);                        -- write enable
  end component;

  -- picture memory component
  component PICT_MEM
    port ( clk                  : in std_logic;                         -- system clock
         -- port 1
           we1                  : in std_logic;                         -- write enable
           data_in1             : in std_logic_vector(7 downto 0);      -- data in
           data_out1            : out std_logic_vector(7 downto 0);     -- data out
           addr1                : in unsigned(10 downto 0);             -- address
         -- port 2
           we2                  : in std_logic;                         -- write enable
           data_in2             : in std_logic_vector(7 downto 0);      -- data in
           data_out2            : out std_logic_vector(7 downto 0);     -- data out
           addr2                : in unsigned(10 downto 0));            -- address
  end component;
        
  -- VGA motor component
  component VGA_MOTOR
    port ( clk                  : in std_logic;                         -- system clock
           rst                  : in std_logic;                         -- reset
           data                 : in std_logic_vector(7 downto 0);      -- data
           addr                 : out unsigned(10 downto 0);            -- address
           vgaRed               : out std_logic_vector(2 downto 0);     -- VGA red
           vgaGreen             : out std_logic_vector(2 downto 0);     -- VGA green
           vgaBlue              : out std_logic_vector(2 downto 1);     -- VGA blue
           Hsync                : out std_logic;                        -- horizontal sync
           Vsync                : out std_logic);                       -- vertical sync
  end component;
        
  -- intermediate signals between KBD_ENC and PICT_MEM
  signal  data_s                : std_logic_vector(7 downto 0);         -- data
  signal  addr_s                : unsigned(10 downto 0);                -- address
  signal  we_s                  : std_logic;                            -- write enable
        
  -- intermediate signals between PICT_MEM and VGA_MOTOR
  signal  data_out2_s           : std_logic_vector(7 downto 0);         -- data
  signal  addr2_s               : unsigned(10 downto 0);                -- address
        
begin

  -- keyboard encoder component connection
  U0 : KBD_ENC port map(clk=>clk, rst=>rst, PS2KeyboardCLK=>PS2KeyboardCLK, PS2KeyboardData=>PS2KeyboardData, data=>data_s, addr=>addr_s, we=>we_s);

  -- picture memory component connection
  U1 : PICT_MEM port map(clk=>clk, we1=>we_s, data_in1=>data_s, addr1=>addr_s, we2=>'0', data_in2=>"00000000", data_out2=>data_out2_s, addr2=>addr2_s);
        
  -- VGA motor component connection
  U2 : VGA_MOTOR port map(clk=>clk, rst=>rst, data=>data_out2_s, addr=>addr2_s, vgaRed=>vgaRed, vgaGreen=>vgaGreen, vgaBlue=>vgaBlue, Hsync=>Hsync, Vsync=>Vsync);

end Behavioral;