que tal compañeros, este codigo lo encontre y pues note que en la parte de de los WHEN la señal sale mal un ejemplo: when "010111" => ossz <= "101000";-- H (no se supone que H es 011000 en bcd 6 bits por lo tanto esa linea quedaria when "010111" => ossz <= "011000";-- H
me corrigen si estoy mal.... gracias)asi como esa linea creeria q casi todas tineen ese problema....en si lo que hace el codigo es mostrar HELLO WORLD en una la fgpa... pero bueno este es el codigo.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.my_package.all; --PAQUETE CREADO PREVIAMENTE
entity lcd_6 is
Port ( clk,rst,ce : in STD_LOGIC;
sf_ce0 : out STD_LOGIC;
rs : out STD_LOGIC;
rw : out STD_LOGIC;
en : out STD_LOGIC;
out0,out1,out2,out3 : out STD_LOGIC);
end lcd_6;
architecture Behavioral of lcd_6 is
signal ossz : STD_LOGIC_VECTOR (5 downto 0);
signal ora : STD_LOGIC := '0';
signal lcd_stb : STD_LOGIC := '0';
signal lcd_stuff : STD_LOGIC_VECTOR (6 downto 0) := "0000000";
signal count : STD_LOGIC_VECTOR(26 downto 0) := "000000000000000000000000000";
signal b: STD_LOGIC := '1';
signal Q1,Q2,Q3:STD_LOGIC_VECTOR(3 downto 0):="0000";
begin
Q:COMPONENT BCD_3 PORT MAP(CLK,CE,RST,Q1,Q2,Q3);
process (clk) begin
if clk'event and clk='1' then
count <= count + 1;
sf_ce0 <= '1';
-------------------LCD initialization process -------------------------------
case (count(25 downto 20)) is
when "000000" => ossz <= "000011"; --X"03"
when "000001" => ossz <= "000011"; --X"03"
when "000010" => ossz <= "000000"; --X"03"
when "000011" => ossz <= "000010"; --X"02"
when "000100" => ossz <= "000010"; --X"02" function set
when "000101" => ossz <= "001000"; --X"08"
when "000110" => ossz <= "000000";-- X"00" entry mode
when "000111" => ossz <= "000110"; --X"06"
when "001000" => ossz <= "000000"; -- display on/off
when "001001" => ossz <= "001100";
when "001010" => ossz <= "000000"; -- display clear
when "001011" => ossz <= "000001";
when "001100" => ossz <= "000000"; -- Take cursor home
when "001101" => ossz <= "001111";
------------- Data operation for LCD ----------------------------------
when "001110" => ossz <= "100011"; -- Drive with the counter o/p
when "001111" => ossz(5 downto 4) <= "10";
ossz(3 downto 0) <= Q3;
when "010000" => ossz <= "100011";
when "010001" => ossz(5 downto 4) <= "10";
ossz(3 downto 0) <= Q2;
when "010010" => ossz <= "100011";
when "010011" => ossz(5 downto 4) <= "10";
ossz(3 downto 0) <= Q1;
when "010100" => ossz <= "101011";
when "010101" => ossz <= "100000";
-- ossz(3 downto 0) <= Q1;
when "010110" => ossz <= "100100";
when "010111" => ossz <= "101000";-- H
when "011000" => ossz <= "100100";
when "011001" => ossz <= "100101";-- E
when "011010" => ossz <= "100100";
when "011011" => ossz <= "101100";-- L
when "011100" => ossz <= "100100";
when "011101" => ossz <= "101100";-- L
when "011110" => ossz <= "100100";
when "011111" => ossz <= "101111";-- O
when "100000" => ossz <= "101010";
when "100001" => ossz <= "100000";--
when "100010" => ossz <= "100101";
when "100011" => ossz <= "100111";-- W
when "100100" => ossz <= "100100";
when "100101" => ossz <= "101111";-- O
when "100110" => ossz <= "100101";
when "100111" => ossz <= "100010";-- R
when "101000" => ossz <= "100100";
when "101001" => ossz <= "101100";-- L
when "101010" => ossz <= "100100";
when "101011" => ossz <= "100100";-- D
when "101100" => ossz <= "100100";
when "101101" => ossz <= "100100";-- D
when others => ossz <= "010000";
end case;
if ora='1' then
ora <= '0';
else
ora <= '1';
end if;
b <= count(19) or count(18);
lcd_stb <= b and NOT ossz(4);
lcd_stuff(6) <= lcd_stb;
lcd_stuff(5 downto 0) <= ossz;
(en, rs, rw,out3,out2,out1,out0 ) <= lcd_stuff;
end if;
end process;
end Behavioral;
me corrigen si estoy mal.... gracias)asi como esa linea creeria q casi todas tineen ese problema....en si lo que hace el codigo es mostrar HELLO WORLD en una la fgpa... pero bueno este es el codigo.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.my_package.all; --PAQUETE CREADO PREVIAMENTE
entity lcd_6 is
Port ( clk,rst,ce : in STD_LOGIC;
sf_ce0 : out STD_LOGIC;
rs : out STD_LOGIC;
rw : out STD_LOGIC;
en : out STD_LOGIC;
out0,out1,out2,out3 : out STD_LOGIC);
end lcd_6;
architecture Behavioral of lcd_6 is
signal ossz : STD_LOGIC_VECTOR (5 downto 0);
signal ora : STD_LOGIC := '0';
signal lcd_stb : STD_LOGIC := '0';
signal lcd_stuff : STD_LOGIC_VECTOR (6 downto 0) := "0000000";
signal count : STD_LOGIC_VECTOR(26 downto 0) := "000000000000000000000000000";
signal b: STD_LOGIC := '1';
signal Q1,Q2,Q3:STD_LOGIC_VECTOR(3 downto 0):="0000";
begin
Q:COMPONENT BCD_3 PORT MAP(CLK,CE,RST,Q1,Q2,Q3);
process (clk) begin
if clk'event and clk='1' then
count <= count + 1;
sf_ce0 <= '1';
-------------------LCD initialization process -------------------------------
case (count(25 downto 20)) is
when "000000" => ossz <= "000011"; --X"03"
when "000001" => ossz <= "000011"; --X"03"
when "000010" => ossz <= "000000"; --X"03"
when "000011" => ossz <= "000010"; --X"02"
when "000100" => ossz <= "000010"; --X"02" function set
when "000101" => ossz <= "001000"; --X"08"
when "000110" => ossz <= "000000";-- X"00" entry mode
when "000111" => ossz <= "000110"; --X"06"
when "001000" => ossz <= "000000"; -- display on/off
when "001001" => ossz <= "001100";
when "001010" => ossz <= "000000"; -- display clear
when "001011" => ossz <= "000001";
when "001100" => ossz <= "000000"; -- Take cursor home
when "001101" => ossz <= "001111";
------------- Data operation for LCD ----------------------------------
when "001110" => ossz <= "100011"; -- Drive with the counter o/p
when "001111" => ossz(5 downto 4) <= "10";
ossz(3 downto 0) <= Q3;
when "010000" => ossz <= "100011";
when "010001" => ossz(5 downto 4) <= "10";
ossz(3 downto 0) <= Q2;
when "010010" => ossz <= "100011";
when "010011" => ossz(5 downto 4) <= "10";
ossz(3 downto 0) <= Q1;
when "010100" => ossz <= "101011";
when "010101" => ossz <= "100000";
-- ossz(3 downto 0) <= Q1;
when "010110" => ossz <= "100100";
when "010111" => ossz <= "101000";-- H
when "011000" => ossz <= "100100";
when "011001" => ossz <= "100101";-- E
when "011010" => ossz <= "100100";
when "011011" => ossz <= "101100";-- L
when "011100" => ossz <= "100100";
when "011101" => ossz <= "101100";-- L
when "011110" => ossz <= "100100";
when "011111" => ossz <= "101111";-- O
when "100000" => ossz <= "101010";
when "100001" => ossz <= "100000";--
when "100010" => ossz <= "100101";
when "100011" => ossz <= "100111";-- W
when "100100" => ossz <= "100100";
when "100101" => ossz <= "101111";-- O
when "100110" => ossz <= "100101";
when "100111" => ossz <= "100010";-- R
when "101000" => ossz <= "100100";
when "101001" => ossz <= "101100";-- L
when "101010" => ossz <= "100100";
when "101011" => ossz <= "100100";-- D
when "101100" => ossz <= "100100";
when "101101" => ossz <= "100100";-- D
when others => ossz <= "010000";
end case;
if ora='1' then
ora <= '0';
else
ora <= '1';
end if;
b <= count(19) or count(18);
lcd_stb <= b and NOT ossz(4);
lcd_stuff(6) <= lcd_stb;
lcd_stuff(5 downto 0) <= ossz;
(en, rs, rw,out3,out2,out1,out0 ) <= lcd_stuff;
end if;
end process;
end Behavioral;