Advertisement
thibthibaut

VGA_Driver

Nov 28th, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.08 KB | None | 0 0
  1.  ----------------------------------------------------------------------------------
  2.  -- Company:
  3.  -- Engineer:
  4.  --
  5.  -- Create Date:    09:55:25 11/21/2014
  6.  -- Design Name:
  7.  -- Module Name:    Counter - Behavioral
  8.  -- Project Name:
  9.  -- Target Devices:
  10.  -- Tool versions:
  11.  -- Description:
  12.  --
  13.  -- Dependencies:
  14.  --
  15.  -- Revision:
  16.  -- Revision 0.01 - File Created
  17.  -- Additional Comments:
  18.  --
  19.  ----------------------------------------------------------------------------------
  20.  library IEEE;
  21.  use IEEE.STD_LOGIC_1164.ALL;
  22.  use ieee.std_logic_unsigned.all;
  23.  
  24.  -- Uncomment the following library declaration if using
  25.  -- arithmetic functions with Signed or Unsigned values
  26.  use IEEE.NUMERIC_STD.ALL;
  27.  
  28.  -- Uncomment the following library declaration if instantiating
  29.  -- any Xilinx primitives in this code.
  30.  --library UNISIM;
  31.  --use UNISIM.VComponents.all;
  32.  
  33.  entity VGADriver is
  34.       Port ( Reset : in  STD_LOGIC;
  35.                 CLK50 : in  STD_LOGIC;
  36.                 Up, Left, Down, Right : in STD_LOGIC;
  37.                 R, G, B, Hsync, Vsync : out STD_LOGIC);
  38.  end VGADriver;
  39.  
  40.  architecture Behavioral of VGADriver is
  41.  
  42.  signal Add1, Add2 : STD_LOGIC_VECTOR(9 downto 0);
  43.  signal Reg1, Reg2 : STD_LOGIC_VECTOR(9 downto 0);
  44.  signal Mux1, Mux2 : STD_LOGIC_VECTOR(9 downto 0);
  45.  signal Cmp1, Cmp2 : STD_LOGIC;
  46.  
  47.  signal Rows : STD_LOGIC_VECTOR(9 downto 0) := "1100100000";
  48.  signal Columns : STD_LOGIC_VECTOR(9 downto 0) := "1000001001";
  49.  
  50.  signal CLK : STD_LOGIC;
  51.  
  52.  signal posX : STD_LOGIC_VECTOR(9 downto 0) := "0010010000";
  53.  signal posY : STD_LOGIC_VECTOR(9 downto 0) := "0000011111";
  54.  
  55.  
  56.  begin
  57.  
  58.  
  59. --posX <= posX + 1 when Right = '1' else posX - 1 when Left = '1';
  60. --posY <= posY + 1 when Down = '1'  else posY - 1 when Up = '1';
  61.  
  62. CLK <= not(CLK) when rising_edge(CLK50);
  63.  
  64. Hsync <= '0' when 0 <= Reg1 and Reg1 < 94 else '1';
  65.  
  66. Vsync <= '0' when 0 <= Reg2 and Reg2 < 2 else '1';
  67.  
  68. R <= '0' when (0 <= Reg1 and Reg1 < 144) OR (144+640 <= Reg1 and Reg1 < 144+640+16) OR (0 <= Reg2 and Reg2 < 31) OR (31+480 <= Reg2 and Reg2 < 31+480+10);
  69. B <= '0' when (0 <= Reg1 and Reg1 < 144) OR (144+640 <= Reg1 and Reg1 < 144+640+16) OR (0 <= Reg2 and Reg2 < 31) OR (31+480 <= Reg2 and Reg2 < 31+480+10);
  70. G <= '0' when (0 <= Reg1 and Reg1 < 144) OR (144+640 <= Reg1 and Reg1 < 144+640+16) OR (0 <= Reg2 and Reg2 < 31) OR (31+480 <= Reg2 and Reg2 < 31+480+10) else
  71.         '1' when (posX <= Reg1 and Reg1 < posX+16) and (posY <= Reg2 and Reg2 < posY+16) else
  72.         '0';
  73.                                        
  74.  
  75. ----------------------------------------
  76.  
  77.  Add1 <= Reg1 + "0000000001";
  78.  
  79.  Mux1 <= Add1 when Cmp1 = '0' else "0000000000" when Cmp1 = '1';
  80.  
  81.  Cmp1 <= '1' when Add1 > Rows else '0';
  82.  
  83.  Reg1 <= "0000000000" when Reset = '0' else Mux1 when rising_edge(CLK);
  84.  
  85. -----------------------------------------
  86.  
  87.  Add2 <= Reg2 + "0000000001";
  88.  
  89.  Mux2 <= "0000000000" when Cmp2 = '1' and Cmp1='1' else
  90.          Add2 when Cmp2 = '0' and Cmp1 = '1' else
  91.             Reg2;
  92.  
  93.  Cmp2 <= '1' when Add2 > Columns else '0';
  94.  
  95.  Reg2 <= "0000000000" when Reset = '0' else Mux2 when rising_edge(CLK);
  96.  
  97. -----------------------------------------
  98.  
  99.  end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement