Forum Discussion
Altera_Forum
Honored Contributor
9 years agoSolved!
Rudimentary and newbie code, but it does generate position and lcd data enable for when to send pixel color :)LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
use ieee.numeric_std.all;
ENTITY lcd_driver IS
GENERIC (
hres : UNSIGNED (10 downto 0) := "01100100000"; -- 800
hbp : UNSIGNED (10 downto 0) := "00100000000"; -- 256
vres : UNSIGNED (10 downto 0) := "01001011000"; -- 600
vbp : UNSIGNED (10 downto 0) := "00000011100" -- 28
);
PORT (
dclk : IN STD_LOGIC;
en : IN STD_LOGIC;
de : OUT STD_LOGIC;
h_pos : OUT UNSIGNED (10 downto 0);
v_pos : OUT UNSIGNED (10 downto 0)
);
END lcd_driver ;
ARCHITECTURE arch_lcd_driver OF lcd_driver IS
SIGNAL v_counter : UNSIGNED (10 downto 0) := "00000000000";
SIGNAL h_counter : UNSIGNED (10 downto 0) := "00000000000";
BEGIN
PROCESS (dclk)
VARIABLE pv_counter : UNSIGNED (10 downto 0) := "00000000000";
VARIABLE ph_counter : UNSIGNED (10 downto 0) := "00000000000";
BEGIN
IF (dclk'EVENT AND dclk = '1') THEN
IF (en = '1') THEN
ph_counter := ph_counter + 1;
IF (ph_counter = hres + hbp) THEN
ph_counter := "00000000000";
pv_counter := pv_counter + 1;
END IF;
IF (pv_counter = vres + vbp) THEN
pv_counter := "00000000000";
END IF;
ELSE
ph_counter := "00000000000";
pv_counter := "00000000000";
END IF;
END IF;
v_counter <= pv_counter;
h_counter <= ph_counter;
END PROCESS;
de <= '1' WHEN (v_counter < vres AND h_counter < hres) ELSE '0';
v_pos <= v_counter WHEN (v_counter < vres AND h_counter < hres) ELSE "00000000000";
h_pos <= h_counter WHEN (v_counter < vres AND h_counter < hres) ELSE "00000000000";
END arch_lcd_driver ;