SlideShare a Scribd company logo
3
Most read
13
Most read
20
Most read
Interfacing FPGA to LCD 16x2
Problem and Solution




              Akhmad Hendriawan
              hendri@eepis-its.edu
You are free:

to Share — to copy, distribute and transmit the work

Under the following conditions:

Attribution — You must attribute the work in the manner specified by the author or
licensor (but not in any way that suggests that they endorse you or your use of the
work).

Noncommercial — You may not use this work for commercial purposes.

No Derivative Works — You may not alter, transform, or build upon this work.
Block Diagram
Pin Description
Write Timing Diagram
LCD Command
LCD initialize Procedure from Datasheet
Implement to FPGA
NET "en" LOC = P62;
NET "dataLCD<0>" LOC = P72;
NET "dataLCD<1>" LOC = P73;
NET "dataLCD<2>" LOC = P83;
NET "dataLCD<3>" LOC = P84;
NET "rs" LOC = p61;
NET "clock" LOC = P43;
NET "reset" LOC = P44;
Recommendate Data sheet
       Init LCD
Behaviour Simulation
Post Route Simulation




It shown that thereis many unknown data that differ from behaviour simulation
Post route Simulation




Unknown Condition
My testbench
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;                                     -- Instantiate the Unit Under Test (UUT)
                                                                      uut: LCDTest PORT MAP (
-- Uncomment the following library declaration if using
                                                                          dataLCD => dataLCD,
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;                                               en => en,
                                                                          rs => rs,
ENTITY LCDTestBench IS                                                    reset => reset,
END LCDTestBench;                                                         clock => clock
                                                                         );
ARCHITECTURE behavior OF LCDTestBench IS


  -- Component Declaration for the Unit Under Test (UUT)              -- Clock process definitions
                                                                      clock_process :process
  COMPONENT LCDTest                                                   begin
  PORT(                                                          clock <= '0';
     dataLCD : OUT std_logic_vector(3 downto 0);
                                                                 wait for clock_period/2;
     en : OUT std_logic;
                                                                 clock <= '1';
     rs : OUT std_logic;
     reset : IN std_logic;                                       wait for clock_period/2;
     clock : IN std_logic                                             end process;
     );
  END COMPONENT;

                                                                      -- Stimulus process
                                                                      stim_proc: process
 --Inputs
 signal reset : std_logic := '0';                                     begin
 signal clock : std_logic := '0';                                      -- hold reset state for 100 ns.
                                                                 --      wait for 100 ns;
 --Outputs
 signal dataLCD : std_logic_vector(3 downto 0);
                                                                 --      wait for clock_period*10;
 signal en : std_logic;
 signal rs : std_logic;
                                                                       -- insert stimulus here
 -- Clock period definitions
 constant clock_period : time := 83.3 ns;                        --      wait;
                                                                      wait for 500ns;
BEGIN
                                                                 reset <= '1';
                                                                      end process;
                                                                 END;
Onother approach(succeed)
●   Using 8 bit Data-line(pin) instead
    of 4 bit
●   ROM based model. Before that I
    used State machine model.
LCD Initializations
8 bit instead of 4 bit
TestBench Simulation
Test with Logic Analyzer




Testing LCD controller with logic analyzer I've got good Result
OK
VHDL
library IEEE;                                                       begin
use IEEE.STD_LOGIC_1164.ALL;                                        PSC : process(clk)
use IEEE.std_logic_unsigned.all;                                    variable prescaller : integer range 0 to 60000 := 0;
                                                                    begin
-- Uncomment the following library declaration if using             if (clk'event and clk = '1') then
-- arithmetic functions with Signed or Unsigned values              if prescaller < 60000 then
--use IEEE.NUMERIC_STD.ALL;                                         prescaller := prescaller + 1;
                                                                    else
-- Uncomment the following library declaration if instantiating     prescaller := 0;
-- any Xilinx primitives in this code.                              pscOut      <= not pscOut;
library UNISIM;                                                     end if;
use UNISIM.VComponents.all;                                         end if;
                                                                    end process PSC;
entity ROM is
Port(dataOut : out STD_LOGIC_VECTOR(7 downto 0);                    BUFG_inst : BUFG
reset : in std_logic;                                               port map(
Rs     : out STD_LOGIC;                                             O => pscClk,             -- Clock buffer output
En     : out STD_LOGIC;                                             I => pscOut              -- Clock buffer input
clk    : in STD_LOGIC);                                             );
end ROM;
                                                                    MYCNT : process(pscClk,reset)
architecture Behavioral of ROM is                                   begin
signal cntOut : integer := 0;                                       if (pscClk'event and pscClk = '1') then
signal pscOut : std_logic                := '0';                    if (reset = '0') then
signal pscClk : std_logic                := '0';                    cntOut <= 0;
elsif (cntOut /= 22) then
cntOut <= cntOut + 1;                        when 11 => --display clear
end if;                                      En<='1'; Rs <= '0'; dataOut <= "00000001";
end if;
                                             when 12 => --display clear
end process MYCNT;
                                             En<='0'; Rs <= '0'; dataOut <= "00000001";
ROM : process(pscClk, cntOut)
begin                                        when 13 => --entry mode
if (pscClk'event and pscClk = '1') then      En<='1'; Rs <= '0'; dataOut <= "00000110";
case cntOut is                               when 14 => --entry mode
when 0 => --delay
                                             En<='0'; Rs <= '0'; dataOut <= "00000110";
En<='1'; Rs <= '0'; dataOut <= "00110000";
                                             when 15 => --display on
when 1 => --function set 1
En<='1'; Rs <= '0'; dataOut <= "00110000";   En<='1'; Rs <= '0'; dataOut <= "00001110";
when 2 => --function set 1                   when 16 => --display on
En<='0'; Rs <= '0'; dataOut <= "00110000";   En<='0'; Rs <= '0'; dataOut <= "00001110";

when 3 => --function set 1
                                             when 17 => -- 'O'
En<='1'; Rs <= '0'; dataOut <= "00110000";
when 4 => --function set 1
                                             En<='1'; Rs <= '1'; dataOut <= "01001111";
En<='0'; Rs <= '0'; dataOut <= "00110000";   when 18 => -- 'O'
                                             En<='0'; Rs <= '1'; dataOut <= "01001111";
when 5 => --function set 1
En<='1'; Rs <= '0'; dataOut <= "00110000";
                                             when 19 => -- 'K'
when 6 => --function set 1
                                             En<='1'; Rs <= '1'; dataOut <= "01001011";
En<='0'; Rs <= '0'; dataOut <= "00110000";
                                             when 20 => -- 'K'
when 7 => --function set 8 bit               En<='0'; Rs <= '1'; dataOut <= "01001011";
En<='1'; Rs <= '0'; dataOut <= "00111001";
when 8 => --function set 8 bit               when others =>
En<='0'; Rs <= '0'; dataOut <= "00111001";
                                             dataOut <= "00000000";
                                             end case;
when 9 => --display off
En<='1'; Rs <= '0'; dataOut <= "00001000";   end if;
when 10 => --display off                     end process ROM;
En<='0'; Rs <= '0'; dataOut <= "00001000";
                                             end Behavioral;
elsif (cntOut /= 22) then
cntOut <= cntOut + 1;                        when 11 => --display clear
end if;                                      En<='1'; Rs <= '0'; dataOut <= "00000001";
end if;
                                             when 12 => --display clear
end process MYCNT;
                                             En<='0'; Rs <= '0'; dataOut <= "00000001";
ROM : process(pscClk, cntOut)
begin                                        when 13 => --entry mode
if (pscClk'event and pscClk = '1') then      En<='1'; Rs <= '0'; dataOut <= "00000110";
case cntOut is                               when 14 => --entry mode
when 0 => --delay
                                             En<='0'; Rs <= '0'; dataOut <= "00000110";
En<='1'; Rs <= '0'; dataOut <= "00110000";
when 1 => --function set 1
                                             when 15 => --display on
En<='1'; Rs <= '0'; dataOut <= "00110000";   En<='1'; Rs <= '0'; dataOut <= "00001110";
when 2 => --function set 1                   when 16 => --display on
En<='0'; Rs <= '0'; dataOut <= "00110000";   En<='0'; Rs <= '0'; dataOut <= "00001110";

when 3 => --function set 1
                                             when 17 => -- 'O'
En<='1'; Rs <= '0'; dataOut <= "00110000";
when 4 => --function set 1                   En<='1'; Rs <= '1'; dataOut <= "01001111";
En<='0'; Rs <= '0'; dataOut <= "00110000";   when 18 => -- 'O'
                                             En<='0'; Rs <= '1'; dataOut <= "01001111";
when 5 => --function set 1
En<='1'; Rs <= '0'; dataOut <= "00110000";
                                             when 19 => -- 'K'
when 6 => --function set 1
                                             En<='1'; Rs <= '1'; dataOut <= "01001011";
En<='0'; Rs <= '0'; dataOut <= "00110000";
                                             when 20 => -- 'K'
when 7 => --function set 8 bit               En<='0'; Rs <= '1'; dataOut <= "01001011";
En<='1'; Rs <= '0'; dataOut <= "00111001";
when 8 => --function set 8 bit
                                             when others =>
En<='0'; Rs <= '0'; dataOut <= "00111001";
                                             dataOut <= "00000000";
when 9 => --display off                      end case;
En<='1'; Rs <= '0'; dataOut <= "00001000";   end if;
when 10 => --display off                     end process ROM;
En<='0'; Rs <= '0'; dataOut <= "00001000";

                                             end Behavioral;

More Related Content

What's hot (20)

PDF
SPI Protocol
Anurag Tomar
 
PDF
Embedded linux network device driver development
Amr Ali (ISTQB CTAL Full, CSM, ITIL Foundation)
 
ODP
Basics of boot-loader
iamumr
 
PPTX
SATA Protocol
Nirav Desai
 
PDF
PCI Drivers
Anil Kumar Pugalia
 
PPT
Introduction to HDLs
IndiraPriyadarshini30
 
PPT
Pcie drivers basics
Venkatesh Malla
 
PDF
Uboot startup sequence
Houcheng Lin
 
PPTX
RISC-V Introduction
Yi-Hsiu Hsu
 
PPTX
Raspberry pi ppt
PavanKumar3601
 
PPTX
I2 c protocol
Azad Mishra
 
PPT
8 interrupt 8051
daniemol
 
PPTX
ASIC Design Flow | Physical Design | VLSI
Jayant Suthar
 
PPTX
What is Bootloader???
Dinesh Damodar
 
PDF
Board Bringup
Anil Kumar Pugalia
 
PPTX
Linux I2C
KaidenYu
 
PPT
FPGA Configuration
Amirali Sharifian
 
PPTX
Spyglass dft
kumar gavanurmath
 
PPT
Bidirectional Bus Modelling
Arrow Devices
 
PDF
Exploring Your Apple M1 devices with Open Source Tools
Koan-Sin Tan
 
SPI Protocol
Anurag Tomar
 
Embedded linux network device driver development
Amr Ali (ISTQB CTAL Full, CSM, ITIL Foundation)
 
Basics of boot-loader
iamumr
 
SATA Protocol
Nirav Desai
 
PCI Drivers
Anil Kumar Pugalia
 
Introduction to HDLs
IndiraPriyadarshini30
 
Pcie drivers basics
Venkatesh Malla
 
Uboot startup sequence
Houcheng Lin
 
RISC-V Introduction
Yi-Hsiu Hsu
 
Raspberry pi ppt
PavanKumar3601
 
I2 c protocol
Azad Mishra
 
8 interrupt 8051
daniemol
 
ASIC Design Flow | Physical Design | VLSI
Jayant Suthar
 
What is Bootloader???
Dinesh Damodar
 
Board Bringup
Anil Kumar Pugalia
 
Linux I2C
KaidenYu
 
FPGA Configuration
Amirali Sharifian
 
Spyglass dft
kumar gavanurmath
 
Bidirectional Bus Modelling
Arrow Devices
 
Exploring Your Apple M1 devices with Open Source Tools
Koan-Sin Tan
 

Viewers also liked (20)

DOCX
Uart
cs1090211
 
PPTX
Calculator design with lcd using fpga
Hossam Hassan
 
ODP
Fpga creating counter with internal clock
Politeknik Elektronika Negeri Surabaya
 
PDF
Spartan-3A/3AN FPGA Starter Kit Board User Guide
Remmy Fuentes Telleria
 
ODP
Fpga creating counter with external clock
Politeknik Elektronika Negeri Surabaya
 
PPT
Dsp Based Field Programable Gate Array
decebems
 
PDF
Spartan 3e用户手册
zhaojk90
 
PPTX
Acceleration of stochastic algorithm on fpga system
Sheela Arokia Mary
 
ODP
Interfacing to lcd with arduino
Politeknik Elektronika Negeri Surabaya
 
PDF
Lcd 16x2
Vinodh Kumar
 
PPT
GPS time transfer
Yatish Bathla
 
PPTX
Implementation of Soft-core Processor on FPGA
Deepak Kumar
 
PPTX
DSP / Filters
Artem Sunduchkov
 
PPT
использование .Net framework
jskonst
 
PPTX
динамическое управление частотой выборки ацп с помощью фапч
Andrey Skladchikov
 
PDF
снк передачи данных Atl186 ofdm-share
Pavel Ivanov
 
PPT
04.02 Marsohod
Alexander Chemeris
 
PPTX
2011 Никифоров А.А. доклад " Применение алгоритма DELAY AND MULTIPLY APPROACH...
RF-Lab
 
PDF
Mastering FPGA Design through Debug, Adrian Hernandez, Xilinx
FPGA Central
 
ODP
02 История Open-Source Hardware - Олег Садов
Alexander Chemeris
 
Uart
cs1090211
 
Calculator design with lcd using fpga
Hossam Hassan
 
Fpga creating counter with internal clock
Politeknik Elektronika Negeri Surabaya
 
Spartan-3A/3AN FPGA Starter Kit Board User Guide
Remmy Fuentes Telleria
 
Fpga creating counter with external clock
Politeknik Elektronika Negeri Surabaya
 
Dsp Based Field Programable Gate Array
decebems
 
Spartan 3e用户手册
zhaojk90
 
Acceleration of stochastic algorithm on fpga system
Sheela Arokia Mary
 
Interfacing to lcd with arduino
Politeknik Elektronika Negeri Surabaya
 
Lcd 16x2
Vinodh Kumar
 
GPS time transfer
Yatish Bathla
 
Implementation of Soft-core Processor on FPGA
Deepak Kumar
 
DSP / Filters
Artem Sunduchkov
 
использование .Net framework
jskonst
 
динамическое управление частотой выборки ацп с помощью фапч
Andrey Skladchikov
 
снк передачи данных Atl186 ofdm-share
Pavel Ivanov
 
04.02 Marsohod
Alexander Chemeris
 
2011 Никифоров А.А. доклад " Применение алгоритма DELAY AND MULTIPLY APPROACH...
RF-Lab
 
Mastering FPGA Design through Debug, Adrian Hernandez, Xilinx
FPGA Central
 
02 История Open-Source Hardware - Олег Садов
Alexander Chemeris
 
Ad

Similar to FPGA Tutorial - LCD Interface (20)

TXT
Digital Voltmeter displaying voltage level on a seven segment display and com...
Karthik Rathinavel
 
PPTX
Bcd counter with mode control & parallel load capability
Gaurang Rathod
 
TXT
Loopback.vhd
sachindb9
 
PDF
Day4 Lab
Ron Liu
 
TXT
RAM Source code and Test Bench
Raj Mohan
 
DOCX
Reporte vhdl9
Miguel Angel Peña
 
PDF
Verilog_Examples (1).pdf
DrViswanathKalannaga1
 
DOCX
Reporte vhd10
Miguel Angel Peña
 
PDF
VHDL Practical Exam Guide
Eslam Mohammed
 
PDF
Vhdl practical exam guide
Eslam Mohammed
 
PDF
DHow2 - L6 VHDL
Marco Santambrogio
 
PDF
Project single cyclemips processor_verilog
Harsha Yelisala
 
DOCX
Solucion de practica1 calificada microcontroladores
25tineo
 
PPT
One day-workshop on tms320 f2812
Pantech ProLabs India Pvt Ltd
 
PPTX
Timer ppt
ChethaSp
 
PPT
W8_2: Inside the UoS Educational Processor
Daniel Roggen
 
PPTX
Uart
Indra Shukla
 
PDF
m4_VHDL_ED.pdf
JonGarciario
 
DOCX
Real Time Clock Interfacing with FPGA
Mafaz Ahmed
 
PPT
Clockless design language - ilia greenblat
chiportal
 
Digital Voltmeter displaying voltage level on a seven segment display and com...
Karthik Rathinavel
 
Bcd counter with mode control & parallel load capability
Gaurang Rathod
 
Loopback.vhd
sachindb9
 
Day4 Lab
Ron Liu
 
RAM Source code and Test Bench
Raj Mohan
 
Reporte vhdl9
Miguel Angel Peña
 
Verilog_Examples (1).pdf
DrViswanathKalannaga1
 
Reporte vhd10
Miguel Angel Peña
 
VHDL Practical Exam Guide
Eslam Mohammed
 
Vhdl practical exam guide
Eslam Mohammed
 
DHow2 - L6 VHDL
Marco Santambrogio
 
Project single cyclemips processor_verilog
Harsha Yelisala
 
Solucion de practica1 calificada microcontroladores
25tineo
 
One day-workshop on tms320 f2812
Pantech ProLabs India Pvt Ltd
 
Timer ppt
ChethaSp
 
W8_2: Inside the UoS Educational Processor
Daniel Roggen
 
m4_VHDL_ED.pdf
JonGarciario
 
Real Time Clock Interfacing with FPGA
Mafaz Ahmed
 
Clockless design language - ilia greenblat
chiportal
 
Ad

FPGA Tutorial - LCD Interface

  • 1. Interfacing FPGA to LCD 16x2 Problem and Solution Akhmad Hendriawan [email protected]
  • 2. You are free: to Share — to copy, distribute and transmit the work Under the following conditions: Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). Noncommercial — You may not use this work for commercial purposes. No Derivative Works — You may not alter, transform, or build upon this work.
  • 7. LCD initialize Procedure from Datasheet
  • 9. NET "en" LOC = P62; NET "dataLCD<0>" LOC = P72; NET "dataLCD<1>" LOC = P73; NET "dataLCD<2>" LOC = P83; NET "dataLCD<3>" LOC = P84; NET "rs" LOC = p61; NET "clock" LOC = P43; NET "reset" LOC = P44;
  • 12. Post Route Simulation It shown that thereis many unknown data that differ from behaviour simulation
  • 14. My testbench LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- Instantiate the Unit Under Test (UUT) uut: LCDTest PORT MAP ( -- Uncomment the following library declaration if using dataLCD => dataLCD, -- arithmetic functions with Signed or Unsigned values --USE ieee.numeric_std.ALL; en => en, rs => rs, ENTITY LCDTestBench IS reset => reset, END LCDTestBench; clock => clock ); ARCHITECTURE behavior OF LCDTestBench IS -- Component Declaration for the Unit Under Test (UUT) -- Clock process definitions clock_process :process COMPONENT LCDTest begin PORT( clock <= '0'; dataLCD : OUT std_logic_vector(3 downto 0); wait for clock_period/2; en : OUT std_logic; clock <= '1'; rs : OUT std_logic; reset : IN std_logic; wait for clock_period/2; clock : IN std_logic end process; ); END COMPONENT; -- Stimulus process stim_proc: process --Inputs signal reset : std_logic := '0'; begin signal clock : std_logic := '0'; -- hold reset state for 100 ns. -- wait for 100 ns; --Outputs signal dataLCD : std_logic_vector(3 downto 0); -- wait for clock_period*10; signal en : std_logic; signal rs : std_logic; -- insert stimulus here -- Clock period definitions constant clock_period : time := 83.3 ns; -- wait; wait for 500ns; BEGIN reset <= '1'; end process; END;
  • 15. Onother approach(succeed) ● Using 8 bit Data-line(pin) instead of 4 bit ● ROM based model. Before that I used State machine model.
  • 16. LCD Initializations 8 bit instead of 4 bit
  • 18. Test with Logic Analyzer Testing LCD controller with logic analyzer I've got good Result
  • 19. OK
  • 20. VHDL library IEEE; begin use IEEE.STD_LOGIC_1164.ALL; PSC : process(clk) use IEEE.std_logic_unsigned.all; variable prescaller : integer range 0 to 60000 := 0; begin -- Uncomment the following library declaration if using if (clk'event and clk = '1') then -- arithmetic functions with Signed or Unsigned values if prescaller < 60000 then --use IEEE.NUMERIC_STD.ALL; prescaller := prescaller + 1; else -- Uncomment the following library declaration if instantiating prescaller := 0; -- any Xilinx primitives in this code. pscOut <= not pscOut; library UNISIM; end if; use UNISIM.VComponents.all; end if; end process PSC; entity ROM is Port(dataOut : out STD_LOGIC_VECTOR(7 downto 0); BUFG_inst : BUFG reset : in std_logic; port map( Rs : out STD_LOGIC; O => pscClk, -- Clock buffer output En : out STD_LOGIC; I => pscOut -- Clock buffer input clk : in STD_LOGIC); ); end ROM; MYCNT : process(pscClk,reset) architecture Behavioral of ROM is begin signal cntOut : integer := 0; if (pscClk'event and pscClk = '1') then signal pscOut : std_logic := '0'; if (reset = '0') then signal pscClk : std_logic := '0'; cntOut <= 0;
  • 21. elsif (cntOut /= 22) then cntOut <= cntOut + 1; when 11 => --display clear end if; En<='1'; Rs <= '0'; dataOut <= "00000001"; end if; when 12 => --display clear end process MYCNT; En<='0'; Rs <= '0'; dataOut <= "00000001"; ROM : process(pscClk, cntOut) begin when 13 => --entry mode if (pscClk'event and pscClk = '1') then En<='1'; Rs <= '0'; dataOut <= "00000110"; case cntOut is when 14 => --entry mode when 0 => --delay En<='0'; Rs <= '0'; dataOut <= "00000110"; En<='1'; Rs <= '0'; dataOut <= "00110000"; when 15 => --display on when 1 => --function set 1 En<='1'; Rs <= '0'; dataOut <= "00110000"; En<='1'; Rs <= '0'; dataOut <= "00001110"; when 2 => --function set 1 when 16 => --display on En<='0'; Rs <= '0'; dataOut <= "00110000"; En<='0'; Rs <= '0'; dataOut <= "00001110"; when 3 => --function set 1 when 17 => -- 'O' En<='1'; Rs <= '0'; dataOut <= "00110000"; when 4 => --function set 1 En<='1'; Rs <= '1'; dataOut <= "01001111"; En<='0'; Rs <= '0'; dataOut <= "00110000"; when 18 => -- 'O' En<='0'; Rs <= '1'; dataOut <= "01001111"; when 5 => --function set 1 En<='1'; Rs <= '0'; dataOut <= "00110000"; when 19 => -- 'K' when 6 => --function set 1 En<='1'; Rs <= '1'; dataOut <= "01001011"; En<='0'; Rs <= '0'; dataOut <= "00110000"; when 20 => -- 'K' when 7 => --function set 8 bit En<='0'; Rs <= '1'; dataOut <= "01001011"; En<='1'; Rs <= '0'; dataOut <= "00111001"; when 8 => --function set 8 bit when others => En<='0'; Rs <= '0'; dataOut <= "00111001"; dataOut <= "00000000"; end case; when 9 => --display off En<='1'; Rs <= '0'; dataOut <= "00001000"; end if; when 10 => --display off end process ROM; En<='0'; Rs <= '0'; dataOut <= "00001000"; end Behavioral;
  • 22. elsif (cntOut /= 22) then cntOut <= cntOut + 1; when 11 => --display clear end if; En<='1'; Rs <= '0'; dataOut <= "00000001"; end if; when 12 => --display clear end process MYCNT; En<='0'; Rs <= '0'; dataOut <= "00000001"; ROM : process(pscClk, cntOut) begin when 13 => --entry mode if (pscClk'event and pscClk = '1') then En<='1'; Rs <= '0'; dataOut <= "00000110"; case cntOut is when 14 => --entry mode when 0 => --delay En<='0'; Rs <= '0'; dataOut <= "00000110"; En<='1'; Rs <= '0'; dataOut <= "00110000"; when 1 => --function set 1 when 15 => --display on En<='1'; Rs <= '0'; dataOut <= "00110000"; En<='1'; Rs <= '0'; dataOut <= "00001110"; when 2 => --function set 1 when 16 => --display on En<='0'; Rs <= '0'; dataOut <= "00110000"; En<='0'; Rs <= '0'; dataOut <= "00001110"; when 3 => --function set 1 when 17 => -- 'O' En<='1'; Rs <= '0'; dataOut <= "00110000"; when 4 => --function set 1 En<='1'; Rs <= '1'; dataOut <= "01001111"; En<='0'; Rs <= '0'; dataOut <= "00110000"; when 18 => -- 'O' En<='0'; Rs <= '1'; dataOut <= "01001111"; when 5 => --function set 1 En<='1'; Rs <= '0'; dataOut <= "00110000"; when 19 => -- 'K' when 6 => --function set 1 En<='1'; Rs <= '1'; dataOut <= "01001011"; En<='0'; Rs <= '0'; dataOut <= "00110000"; when 20 => -- 'K' when 7 => --function set 8 bit En<='0'; Rs <= '1'; dataOut <= "01001011"; En<='1'; Rs <= '0'; dataOut <= "00111001"; when 8 => --function set 8 bit when others => En<='0'; Rs <= '0'; dataOut <= "00111001"; dataOut <= "00000000"; when 9 => --display off end case; En<='1'; Rs <= '0'; dataOut <= "00001000"; end if; when 10 => --display off end process ROM; En<='0'; Rs <= '0'; dataOut <= "00001000"; end Behavioral;