Advertisement
felixen98

Lab4 - SurHjalmKrutRot

Feb 23rd, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 19.10 KB | None | 0 0
  1. --------------------------------------------------------------------------------
  2. -- VGA MOTOR
  3. -- Anders Nilsson
  4. -- 16-feb-2016
  5. -- Version 1.1
  6.  
  7.  
  8. -- library declaration
  9. library IEEE;
  10. use IEEE.STD_LOGIC_1164.ALL;            -- basic IEEE library
  11. use IEEE.NUMERIC_STD.ALL;               -- IEEE library for the unsigned type
  12.  
  13.  
  14. -- entity
  15. entity VGA_MOTOR is
  16.   port ( clk            : in std_logic;
  17.      data           : in std_logic_vector(7 downto 0);
  18.      addr           : out unsigned(10 downto 0);
  19.      rst            : in std_logic;
  20.      vgaRed             : out std_logic_vector(2 downto 0);
  21.      vgaGreen           : out std_logic_vector(2 downto 0);
  22.      vgaBlue        : out std_logic_vector(2 downto 1);
  23.      Hsync              : out std_logic;
  24.      Vsync              : out std_logic);
  25. end VGA_MOTOR;
  26.  
  27.  
  28. -- architecture
  29. architecture Behavioral of VGA_MOTOR is
  30.  
  31.   signal    Xpixel          : unsigned(9 downto 0) := "0000000000";         -- Horizontal pixel counter
  32.   signal    Ypixel          : unsigned(9 downto 0) := "0000000000";     -- Vertical pixel counter
  33.   signal    ClkDiv          : unsigned(1 downto 0);     -- Clock divisor, to generate 25 MHz signal
  34.   signal    Clk25       : std_logic;            -- One pulse width 25 MHz signal
  35.        
  36.   signal    tilePixel       : std_logic_vector(7 downto 0); -- Tile pixel data
  37.   signal    tileAddr    : unsigned(10 downto 0);    -- Tile address
  38.  
  39.   signal        blank           : std_logic;                    -- blanking signal
  40.    
  41.  
  42.   -- Tile memory type
  43.   type ram_t is array (0 to 2047) of std_logic_vector(7 downto 0);
  44.  
  45. -- Tile memory
  46.   signal tileMem : ram_t :=
  47.         ( x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",      -- space
  48.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  49.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  50.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  51.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  52.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  53.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  54.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  55.  
  56.           x"FF",x"FF",x"00",x"00",x"00",x"FF",x"FF",x"FF"-- A
  57.           x"FF",x"00",x"00",x"FF",x"00",x"00",x"FF",x"FF",
  58.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  59.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  60.           x"00",x"00",x"00",x"00",x"00",x"00",x"00",x"FF",
  61.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  62.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  63.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  64.  
  65.           x"00",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",      -- B
  66.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  67.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  68.           x"00",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",
  69.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  70.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  71.           x"00",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",
  72.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  73.  
  74.           x"FF",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",      -- C
  75.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  76.           x"00",x"00",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  77.           x"00",x"00",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  78.           x"00",x"00",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  79.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  80.           x"FF",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",
  81.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  82.  
  83.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- D
  84.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  85.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  86.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  87.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  88.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  89.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  90.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  91.                  
  92.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- E
  93.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  94.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  95.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  96.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  97.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  98.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  99.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  100.  
  101.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- F
  102.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  103.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  104.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  105.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  106.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  107.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  108.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  109.  
  110.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- G
  111.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  112.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  113.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  114.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  115.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  116.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  117.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  118.  
  119.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- H
  120.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  121.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  122.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  123.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  124.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  125.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  126.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  127.  
  128.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- I
  129.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  130.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  131.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  132.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  133.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  134.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  135.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  136.  
  137.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- J
  138.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  139.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  140.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  141.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  142.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  143.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  144.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  145.  
  146.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- K
  147.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  148.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  149.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  150.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  151.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  152.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  153.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  154.  
  155.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- L
  156.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  157.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  158.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  159.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  160.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  161.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  162.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  163.  
  164.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- M
  165.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  166.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  167.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  168.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  169.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  170.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  171.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  172.  
  173.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- N
  174.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  175.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  176.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  177.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  178.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  179.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  180.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  181.  
  182.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- O
  183.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  184.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  185.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  186.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  187.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  188.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  189.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  190.  
  191.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- P
  192.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  193.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  194.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  195.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  196.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  197.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  198.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  199.  
  200.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- Q
  201.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  202.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  203.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  204.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  205.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  206.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  207.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  208.  
  209.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- R
  210.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  211.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  212.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  213.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  214.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  215.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  216.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  217.  
  218.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- S
  219.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  220.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  221.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  222.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  223.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  224.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  225.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  226.  
  227.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- T
  228.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  229.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  230.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  231.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  232.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  233.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  234.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  235.  
  236.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- U
  237.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  238.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  239.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  240.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  241.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  242.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  243.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  244.  
  245.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- V
  246.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  247.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  248.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  249.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  250.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  251.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  252.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  253.  
  254.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",  -- W
  255.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  256.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  257.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  258.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  259.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  260.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  261.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  262.  
  263.           x"E0",x"E0",x"FF",x"FF",x"FF",x"E0",x"E0",x"FF"-- X
  264.           x"FF",x"E0",x"E0",x"FF",x"E0",x"E0",x"FF",x"FF",
  265.           x"FF",x"FF",x"E0",x"E0",x"E0",x"FF",x"FF",x"FF",
  266.           x"FF",x"FF",x"E0",x"E0",x"E0",x"FF",x"FF",x"FF",
  267.           x"FF",x"E0",x"E0",x"FF",x"E0",x"E0",x"FF",x"FF",
  268.           x"E0",x"E0",x"FF",x"FF",x"FF",x"E0",x"E0",x"FF",
  269.           x"E0",x"FF",x"FF",x"FF",x"FF",x"FF",x"E0",x"FF",
  270.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  271.  
  272.           x"FF",x"1C",x"1C",x"FF",x"FF",x"1C",x"1C",x"FF",      -- Y
  273.           x"FF",x"1C",x"1C",x"FF",x"FF",x"1C",x"1C",x"FF",
  274.           x"FF",x"1C",x"1C",x"FF",x"FF",x"1C",x"1C",x"FF",
  275.           x"FF",x"FF",x"1C",x"1C",x"1C",x"1C",x"FF",x"FF",
  276.           x"FF",x"FF",x"FF",x"1C",x"1C",x"FF",x"FF",x"FF",
  277.           x"FF",x"FF",x"FF",x"1C",x"1C",x"FF",x"FF",x"FF",
  278.           x"FF",x"FF",x"FF",x"1C",x"1C",x"FF",x"FF",x"FF",
  279.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  280.  
  281.           x"03",x"03",x"03",x"03",x"03",x"03",x"03",x"FF",      -- Z
  282.           x"FF",x"FF",x"FF",x"FF",x"03",x"03",x"FF",x"FF",
  283.           x"FF",x"FF",x"FF",x"03",x"03",x"FF",x"FF",x"FF",
  284.           x"FF",x"FF",x"03",x"03",x"FF",x"FF",x"FF",x"FF",
  285.           x"FF",x"03",x"03",x"FF",x"FF",x"FF",x"FF",x"FF",
  286.           x"03",x"03",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  287.           x"03",x"03",x"03",x"03",x"03",x"03",x"03",x"FF",
  288.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  289.  
  290.           x"FF",x"FF",x"FF",x"00",x"FF",x"FF",x"FF",x"FF",      -- Å
  291.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  292.           x"FF",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",
  293.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  294.           x"00",x"00",x"00",x"00",x"00",x"00",x"00",x"FF",
  295.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  296.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  297.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  298.  
  299.           x"FF",x"FF",x"00",x"FF",x"00",x"FF",x"FF",x"FF",      -- Ä
  300.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  301.           x"FF",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",
  302.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  303.           x"00",x"00",x"00",x"00",x"00",x"00",x"00",x"FF",
  304.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  305.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  306.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  307.  
  308.           x"FF",x"FF",x"00",x"FF",x"00",x"FF",x"FF",x"FF",      -- Ö
  309.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  310.           x"FF",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",
  311.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  312.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  313.           x"00",x"00",x"FF",x"FF",x"FF",x"00",x"00",x"FF",
  314.           x"FF",x"00",x"00",x"00",x"00",x"00",x"FF",x"FF",
  315.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  316.  
  317.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  318.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  319.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  320.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  321.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  322.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  323.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  324.           x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",
  325.  
  326.           x"FF",x"FF",x"27",x"27",x"27",x"27",x"FF",x"FF",      -- PACMAN CURSOR
  327.           x"FF",x"27",x"27",x"27",x"27",x"27",x"27",x"FF",
  328.           x"27",x"27",x"27",x"27",x"E0",x"27",x"FF",x"FF",
  329.           x"27",x"27",x"27",x"27",x"27",x"FF",x"FF",x"FF",
  330.           x"27",x"27",x"27",x"27",x"27",x"FF",x"FF",x"FF",
  331.           x"27",x"27",x"27",x"27",x"27",x"27",x"FF",x"FF",
  332.           x"FF",x"27",x"27",x"27",x"27",x"27",x"27",x"FF",
  333.           x"FF",x"FF",x"27",x"27",x"27",x"27",x"FF",x"FF"
  334.  
  335.                   );
  336.          
  337. begin
  338.  
  339.   -- Clock divisor
  340.   -- Divide system clock (100 MHz) by 4
  341.   process(clk)
  342.   begin
  343.     if rising_edge(clk) then
  344.       if rst='1' then
  345.     ClkDiv <= (others => '0');
  346.       else
  347.     ClkDiv <= ClkDiv + 1;
  348.       end if;
  349.     end if;
  350.   end process;
  351.    
  352.   -- 25 MHz clock (one system clock pulse width)
  353.   Clk25 <= '1' when (ClkDiv = 3) else '0';
  354.    
  355.    
  356.   -- Horizontal pixel counter
  357.  
  358.   -- ***********************************
  359.   -- *                                 *
  360.   -- *  VHDL for :                     *
  361.   -- *  Xpixel                         *
  362.   -- *                                 *
  363.   -- ***********************************
  364.  
  365.     process(clk)
  366.   begin
  367.     if rising_edge(clk) then
  368.         if Clk25 = '1' then
  369.             if rst='1' then
  370.                     Xpixel <= "0000000000";
  371.                 elsif Xpixel = 799 then --800
  372.                     Xpixel <= "0000000000";
  373.             else
  374.                 Xpixel <= Xpixel + 1;
  375.             end if;
  376.         else
  377.             Xpixel <= Xpixel;
  378.         end if;
  379.     end if;
  380.   end process;
  381.  
  382.  
  383.  
  384.   -- Horizontal sync
  385.  
  386.   -- ***********************************
  387.   -- *                                 *
  388.   -- *  VHDL for :                     *
  389.   -- *  Hsync                          *
  390.   -- *                                 *
  391.   -- ***********************************
  392.     process(Xpixel)
  393.   begin
  394.     if Xpixel >= 657 and Xpixel <= 752 then --657 and 752
  395.         Hsync <= '0';
  396.     else
  397.         Hsync <= '1';
  398.     end if;
  399.   end process;
  400.  
  401.  
  402.   -- Vertical pixel counter
  403.  
  404.   -- ***********************************
  405.   -- *                                 *
  406.   -- *  VHDL for :                     *
  407.   -- *  Ypixel                         *
  408.   -- *                                 *
  409.   -- ***********************************
  410.     process(clk)
  411.   begin
  412.     if rising_edge(clk) then
  413.         if Clk25 = '1' then
  414.             if rst='1' then
  415.                     Ypixel <= "0000000000";
  416.             elsif Xpixel = 799 then -- 800
  417.                     Ypixel <= Ypixel + 1;
  418.                 else
  419.                     Ypixel <= Ypixel;
  420.             end if;
  421.         else
  422.             Ypixel <= Ypixel;
  423.         end if;
  424.     end if;
  425.   end process;
  426.    
  427.  
  428.   -- Vertical sync
  429.  
  430.   -- ***********************************
  431.   -- *                                 *
  432.   -- *  VHDL for :                     *
  433.   -- *  Vsync                          *
  434.   -- *                                 *
  435.   -- ***********************************
  436.     process(Ypixel)
  437.   begin
  438.     if Ypixel >= 491 and Ypixel <= 492 then -- 491 and 492
  439.         Vsync <= '0';
  440.     else
  441.         Vsync <= '1';
  442.     end if;
  443.   end process;
  444.  
  445.  
  446.  
  447.  
  448.   -- Video blanking signal
  449.  
  450.   -- ***********************************
  451.   -- *                                 *
  452.   -- *  VHDL for :                     *
  453.   -- *  Blank                          *
  454.   -- *                                 *
  455.   -- ***********************************
  456.     process(Xpixel, Ypixel)
  457.   begin
  458.     if Xpixel >= 641 and Xpixel <= 799 then --641 and 800
  459.         blank <= '1';
  460.     elsif Ypixel >= 481 and Ypixel <= 520 then --481 and 521
  461.         blank <= '1';
  462.         else
  463.             blank <= '0';
  464.     end if;
  465.   end process;
  466.  
  467.  
  468.  
  469.   -- Tile memory
  470.   process(clk)
  471.   begin
  472.     if rising_edge(clk) then
  473.       if (blank = '0') then
  474.         tilePixel <= tileMem(to_integer(tileAddr));
  475.       else
  476.         tilePixel <= (others => '0');
  477.       end if;
  478.     end if;
  479.   end process;
  480.    
  481.  
  482.  
  483.   -- Tile memory address composite
  484.   tileAddr <= unsigned(data(4 downto 0)) & Ypixel(4 downto 2) & Xpixel(4 downto 2);
  485.  
  486.  
  487.   -- Picture memory address composite
  488.   addr <= to_unsigned(20, 7) * Ypixel(8 downto 5) + Xpixel(9 downto 5);
  489.  
  490.  
  491.   -- VGA generation
  492.   vgaRed(2)     <= tilePixel(7);
  493.   vgaRed(1)     <= tilePixel(6);
  494.   vgaRed(0)     <= tilePixel(5);
  495.   vgaGreen(2)   <= tilePixel(4);
  496.   vgaGreen(1)   <= tilePixel(3);
  497.   vgaGreen(0)   <= tilePixel(2);
  498.   vgaBlue(2)    <= tilePixel(1);
  499.   vgaBlue(1)    <= tilePixel(0);
  500.  
  501.  
  502. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement