<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://ift.wiki.uib.no/index.php?action=history&amp;feed=atom&amp;title=VGA_controller_VHDL_code</id>
	<title>VGA controller VHDL code - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://ift.wiki.uib.no/index.php?action=history&amp;feed=atom&amp;title=VGA_controller_VHDL_code"/>
	<link rel="alternate" type="text/html" href="http://ift.wiki.uib.no/index.php?title=VGA_controller_VHDL_code&amp;action=history"/>
	<updated>2026-05-25T01:04:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>http://ift.wiki.uib.no/index.php?title=VGA_controller_VHDL_code&amp;diff=2245&amp;oldid=prev</id>
		<title>Nas005: Replaced content with &quot;:File:vga.txt&quot;</title>
		<link rel="alternate" type="text/html" href="http://ift.wiki.uib.no/index.php?title=VGA_controller_VHDL_code&amp;diff=2245&amp;oldid=prev"/>
		<updated>2016-03-02T22:57:24Z</updated>

		<summary type="html">&lt;p&gt;Replaced content with &amp;quot;&lt;a href=&quot;/File:Vga.txt&quot; title=&quot;File:Vga.txt&quot;&gt;File:vga.txt&lt;/a&gt;&amp;quot;&lt;/p&gt;
&lt;a href=&quot;http://ift.wiki.uib.no/index.php?title=VGA_controller_VHDL_code&amp;amp;diff=2245&amp;amp;oldid=2243&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Nas005</name></author>
	</entry>
	<entry>
		<id>http://ift.wiki.uib.no/index.php?title=VGA_controller_VHDL_code&amp;diff=2243&amp;oldid=prev</id>
		<title>Nas005: Created page with &quot;library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;    entity Vga is     Port ( clk_i : in  STD_LOGIC;            sw_i  :...&quot;</title>
		<link rel="alternate" type="text/html" href="http://ift.wiki.uib.no/index.php?title=VGA_controller_VHDL_code&amp;diff=2243&amp;oldid=prev"/>
		<updated>2016-03-02T22:51:24Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;    entity Vga is     Port ( clk_i : in  STD_LOGIC;            sw_i  :...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;library IEEE;&lt;br /&gt;
use IEEE.STD_LOGIC_1164.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_ARITH.ALL;&lt;br /&gt;
use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
entity Vga is&lt;br /&gt;
    Port ( clk_i : in  STD_LOGIC;&lt;br /&gt;
           sw_i  : in  STD_LOGIC_VECTOR (15 downto 0); -- (11 downto 8) is RED, (7 downto 4) is GREEN, (3 downto 0) is BLUE&lt;br /&gt;
                                                       -- Writing directly to RAM and from RAM to VGA interface.&lt;br /&gt;
                                                       -- Writing when sw_i(15) is high&lt;br /&gt;
           -- VGA Output Signals&lt;br /&gt;
           vga_hs_o : out  STD_LOGIC; -- Horizontal sync puls to VGA interface&lt;br /&gt;
           vga_vs_o : out  STD_LOGIC; -- Vertical sync puls to VGA interface&lt;br /&gt;
           vga_red_o    : out  STD_LOGIC_VECTOR (3 downto 0); -- Red to VGA interface&lt;br /&gt;
           vga_green_o  : out  STD_LOGIC_VECTOR (3 downto 0); -- Green to VGA interface&lt;br /&gt;
           vga_blue_o   : out  STD_LOGIC_VECTOR (3 downto 0) -- Blue to VGA interface&lt;br /&gt;
           );&lt;br /&gt;
end Vga;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
architecture Behavioral of Vga is&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
-- Component Declarations&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- 25.2MHz Clock &lt;br /&gt;
COMPONENT clk_wiz_25_2MHz &lt;br /&gt;
PORT (&lt;br /&gt;
      clk_in_100MHz:  in STD_LOGIC;&lt;br /&gt;
      clk_out_25_2: out STD_LOGIC;&lt;br /&gt;
      reset         : in STD_LOGIC;&lt;br /&gt;
      locked        : out STD_LOGIC &lt;br /&gt;
      );&lt;br /&gt;
END COMPONENT;&lt;br /&gt;
&lt;br /&gt;
-- Ram block for pixels&lt;br /&gt;
COMPONENT PIX_RAM&lt;br /&gt;
  PORT (&lt;br /&gt;
    clka : IN STD_LOGIC;&lt;br /&gt;
    ena : IN STD_LOGIC;&lt;br /&gt;
    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);&lt;br /&gt;
    addra : IN STD_LOGIC_VECTOR(18 DOWNTO 0);&lt;br /&gt;
    dina : IN STD_LOGIC_VECTOR(11 DOWNTO 0);&lt;br /&gt;
    douta : OUT STD_LOGIC_VECTOR(11 DOWNTO 0)&lt;br /&gt;
  );&lt;br /&gt;
END COMPONENT;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
-- Constants for VGA Resolutions&lt;br /&gt;
-------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
------640x480 60Hz-------  &lt;br /&gt;
constant WIDTH : natural := 640;&lt;br /&gt;
constant HEIGHT : natural := 480;&lt;br /&gt;
&lt;br /&gt;
constant H_FP : natural := 16; --H front porch width (pixels)&lt;br /&gt;
constant H_PW : natural := 96; --H sync pulse width (pixels)&lt;br /&gt;
constant H_TOT : natural := 800; --H total period (pixels)&lt;br /&gt;
&lt;br /&gt;
constant V_FP : natural := 10; --V front porch width (lines)&lt;br /&gt;
constant V_PW : natural := 2; --V sync pulse width (lines)&lt;br /&gt;
constant V_TOT : natural := 525; --V total period (lines)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
-- VGA signals: Counters, Sync, Red, Gree, Blue&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Activates the screen when it is in the frame area&lt;br /&gt;
signal SCREEN_ON  : std_logic;&lt;br /&gt;
&lt;br /&gt;
-- Horizontal and Vertical counters&lt;br /&gt;
signal h_count   : std_logic_vector(11 downto 0) := (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
signal v_count   : std_logic_vector(11 downto 0) := (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
-- signal for the VGA interface&lt;br /&gt;
signal vga_red   : std_logic_vector(3 downto 0);&lt;br /&gt;
signal vga_blue  : std_logic_vector(3 downto 0);&lt;br /&gt;
signal vga_green : std_logic_vector(3 downto 0);&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
-- CLOCK signals&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
signal pxl_clk: std_logic; -- pxl_clk is 25.2MHz&lt;br /&gt;
signal reset: std_logic := &amp;#039;0&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
-- RAM signals&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
signal data_out  : std_logic_vector(11 downto 0) := (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
signal data_inn  : std_logic_vector(11 downto 0) := (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
signal address   : std_logic_vector(18 downto 0) := (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
signal write     : std_logic_vector(0 downto 0) ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
 ---------------------------&lt;br /&gt;
 -- PORT MAPS&lt;br /&gt;
 --------------------------- &lt;br /&gt;
 &lt;br /&gt;
 -- PIXELGENERATOR - pxl_clk=25.2MHz&lt;br /&gt;
 PIXELGENERATOR : clk_wiz_25_2MHz PORT MAP&lt;br /&gt;
     (--clock inn&lt;br /&gt;
      clk_in_100MHz  =&amp;gt; clk_i,&lt;br /&gt;
      --clock out&lt;br /&gt;
      clk_out_25_2 =&amp;gt; pxl_clk,&lt;br /&gt;
      --reset active high&lt;br /&gt;
      reset          =&amp;gt; reset,&lt;br /&gt;
      --status and controll signals&lt;br /&gt;
      locked         =&amp;gt; open&lt;br /&gt;
     );&lt;br /&gt;
     &lt;br /&gt;
 -- RAM&lt;br /&gt;
      RAM : PIX_RAM PORT MAP&lt;br /&gt;
          (&lt;br /&gt;
           clka  =&amp;gt; clk_i,&lt;br /&gt;
           ena  =&amp;gt; &amp;#039;1&amp;#039;,&lt;br /&gt;
           wea  =&amp;gt; write,&lt;br /&gt;
           addra  =&amp;gt; address,&lt;br /&gt;
           dina  =&amp;gt; data_inn,&lt;br /&gt;
           douta  =&amp;gt; data_out&lt;br /&gt;
          );&lt;br /&gt;
     &lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
-- Generate Horizontal, Vertical counters and the Sync signals&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
  -- Horizontal counter&lt;br /&gt;
  process (pxl_clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if (rising_edge(pxl_clk)) then&lt;br /&gt;
      if (h_count = (H_TOT - 1)) then&lt;br /&gt;
        h_count &amp;lt;= (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
      else&lt;br /&gt;
        h_count &amp;lt;= h_count + 1;&lt;br /&gt;
      end if;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
  &lt;br /&gt;
  -- Vertical counter&lt;br /&gt;
  process (pxl_clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if (rising_edge(pxl_clk)) then&lt;br /&gt;
      if ((h_count = (H_TOT - 1)) and (v_count = (V_TOT - 1))) then&lt;br /&gt;
        v_count &amp;lt;= (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
      elsif (h_count = (H_TOT - 1)) then&lt;br /&gt;
        v_count &amp;lt;= v_count + 1;&lt;br /&gt;
      end if;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
    &lt;br /&gt;
  -- Horizontal sync&lt;br /&gt;
  process (pxl_clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if (rising_edge(pxl_clk)) then&lt;br /&gt;
      if (h_count &amp;gt;= (H_FP + WIDTH - 1)) and (h_count &amp;lt; (H_FP + WIDTH + H_PW - 1)) then&lt;br /&gt;
        vga_hs_o &amp;lt;= &amp;#039;1&amp;#039;;&lt;br /&gt;
      else&lt;br /&gt;
        vga_hs_o &amp;lt;= &amp;#039;0&amp;#039;;&lt;br /&gt;
      end if;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
  &lt;br /&gt;
  -- Vertical sync&lt;br /&gt;
  process (pxl_clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if (rising_edge(pxl_clk)) then&lt;br /&gt;
      if (v_count &amp;gt;= (V_FP + HEIGHT - 1)) and (v_count &amp;lt; (V_FP + HEIGHT + V_PW - 1)) then&lt;br /&gt;
        vga_vs_o &amp;lt;= &amp;#039;1&amp;#039;;&lt;br /&gt;
      else&lt;br /&gt;
        vga_vs_o &amp;lt;= &amp;#039;0&amp;#039;;&lt;br /&gt;
      end if;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
 -- RAM interface&lt;br /&gt;
------------------------------------------------------- &lt;br /&gt;
-- Synchronizing reading and writing of adresses with the VGA interface&lt;br /&gt;
  process (pxl_clk)&lt;br /&gt;
  begin&lt;br /&gt;
    if (rising_edge(pxl_clk)) then&lt;br /&gt;
      if h_count &amp;lt; WIDTH and v_count &amp;lt; HEIGHT then&lt;br /&gt;
        address &amp;lt;= address + 1;&lt;br /&gt;
      else&lt;br /&gt;
        address &amp;lt;= (others =&amp;gt;&amp;#039;0&amp;#039;);&lt;br /&gt;
      end if;&lt;br /&gt;
    end if;&lt;br /&gt;
  end process;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
--------------------&lt;br /&gt;
-- SCREEN ON&lt;br /&gt;
--------------------  &lt;br /&gt;
 -- screening signal&lt;br /&gt;
 SCREEN_ON &amp;lt;= &amp;#039;1&amp;#039; when h_count &amp;lt; WIDTH and v_count &amp;lt; HEIGHT&lt;br /&gt;
           else &amp;#039;0&amp;#039;;&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
-- Turn Off VGA RBG Signals if outside of the active screen&lt;br /&gt;
-- Make a 4-bit AND logic with the R, G and B signals&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
 vga_red_o &amp;lt;= (SCREEN_ON &amp;amp; SCREEN_ON &amp;amp; SCREEN_ON &amp;amp; SCREEN_ON) and vga_red;&lt;br /&gt;
 vga_green_o &amp;lt;= (SCREEN_ON &amp;amp; SCREEN_ON &amp;amp; SCREEN_ON &amp;amp; SCREEN_ON) and vga_green;&lt;br /&gt;
 vga_blue_o &amp;lt;= (SCREEN_ON &amp;amp; SCREEN_ON &amp;amp; SCREEN_ON &amp;amp; SCREEN_ON) and vga_blue;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 --------------------&lt;br /&gt;
 -- Rerouting signals&lt;br /&gt;
 --------------------&lt;br /&gt;
 vga_red   &amp;lt;= data_out(11 downto 8);&lt;br /&gt;
 vga_green &amp;lt;= data_out(7 downto 4);&lt;br /&gt;
 vga_blue  &amp;lt;= data_out(3 downto 0);&lt;br /&gt;
 &lt;br /&gt;
 data_inn &amp;lt;= sw_i(11 downto 0); -- (11 downto 8) is RED, (7 downto 4) is GREEN, (3 downto 0) is BLUE&lt;br /&gt;
 write &amp;lt;= sw_i(15 downto 15); -- Activ high when writing to BRAM&lt;br /&gt;
			&lt;br /&gt;
end Behavioral;&lt;/div&gt;</summary>
		<author><name>Nas005</name></author>
	</entry>
</feed>