cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
4,831 Views
Registered: ‎03-12-2015

need example vhdl design for vc707 Lcd dispkay

We have to display of board details like board no.etc on LCD display. Can anybody share example design files of vc707 LCD display?

Need suggestions, guidance.

0 Kudos
2 Replies
Highlighted
Moderator
Moderator
4,807 Views
Registered: ‎02-16-2010

Whether the post below is also for the same request?
http://forums.xilinx.com/t5/Xilinx-Boards-and-Kits/LED-glow-on-vc707/m-p/623808
------------------------------------------------------------------------------
Don't forget to reply, give kudo and accept as solution
------------------------------------------------------------------------------
0 Kudos
Highlighted
Anonymous
Not applicable
598 Views

This might be an old thread, but as I found it looking around others may too so I share this anyway. Maybe it helps someone. This drives the LCD on my VC707 just by feeding it a std_logic_vector for each line with 8 bits ascii code per character. It's simple and gets the job done, though FSM coding might have made it more readable. The code is below and the testbench attached.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity lcd_control is
    Port ( clk : in STD_LOGIC;  --built for 10MHz
           rst : in STD_LOGIC;
           line_1 : in STD_LOGIC_VECTOR (127 downto 0);
           line_2 : in STD_LOGIC_VECTOR (127 downto 0);
           lcd_rs : out STD_LOGIC;
           lcd_rw : out STD_LOGIC;
           lcd_e : out STD_LOGIC := '0';
           lcd_data : out STD_LOGIC_VECTOR(7 downto 4));
end lcd_control;

architecture Behavioral of lcd_control is

signal sequence : std_logic_vector(0 to 307);
signal adr : natural range 0 to 76 := 0;
signal timer : unsigned(18 downto 0) := (others => '1');    -- about 100ms after powerup
signal hi_lo : std_logic := '0';    --transmitting high or low byte

begin

--             0       1    2       3    4       5     6       7    8     9    10    11-42     43   44     45-76
sequence <= "0010" & "00101000"  & "00001100" & "00000110" & "00000001" & "00000010" & line_1 & "11000000" & line_2;
--           4bit    4Bit+Setup   Display On  Entry Mode    Clear         Home         Data    line 2 adr   Data

lcd_rw <= '0';
lcd_rs <= '0' when (adr < 11 or adr = 43 or adr = 44) else '1';
lcd_data <= sequence(adr*4 to adr*4+3);
lcd_e <= '1' when timer < 32768 and timer > 32735 else '0';

process(clk)
begin
    if(rising_edge(clk)) then
        if rst = '1' then
            timer <= (others=>'1');
            adr <= 0;
            hi_lo <= '0';
        else
            if timer = 0 or (timer = 32671 and hi_lo = '1') then
                timer(14 downto 0) <= (others=>'1'); -- 2^15 = 32768
                hi_lo <= not hi_lo;
            else
                timer <= timer-1;
            end if;
            if timer = 64 or (timer = 32703 and hi_lo = '1') then
                if adr < 76 then
                    adr <= adr+1;
                else
                    adr <= 9;
                end if;
            end if;            
        end if;
    end if;
end process;

end Behavioral;

0 Kudos