Jag sitter med en CPLD och försöker skriva ett tecken på en Noritake VFD display med i80 cpu type mode.
Displayen är en CU20045SCPB-U1J, datablad hittas här: http://www.elfa.se/pdf/75/07556087.pdf
Jag har skrivit en liten VHDL kod för att testa att skriva ett tecken till displayen men jag får det inte att funka. Har redan kört testsekvensen för displayen så jag vet att den funkar. CPLDn jag använder är en Xilinx 9572 med 44 portar.
Koden ser ut som följer:
[kod]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;
entity display is
Port ( clk : in std_logic;
rst : in std_logic;
data : out std_logic_vector(7 downto 0);
RW : out std_logic;
RS : out std_logic);
end display;
architecture Behavioral of display is
-- 512 räknare
signal R512 : std_logic_vector(0 to 9);
signal R512RCO : std_logic;
-- 12 räknare
signal R12 : std_logic_vector(0 to 2);
signal R12RCO : std_logic;
--Ovrigt
signal softrst : std_logic;
signal flag : std_logic;
signal PC : std_logic_vector(0 to 2);
signal PC2 : std_logic_vector(0 to 3);
signal init : std_logic;
begin
--Klockor för att användas vid initiering av display samt utskrift av tecken
process(clk,rst)
begin
--kör delay för att displayen ska hinna starta.
if rst = '1' or softrst = '1' then
R512 <= "0000000000";
elsif rising_edge(clk) then
if R512 < 510 then
R512 <= R512 + 1;
R512RCO <= '0';
else
R512 <= "0000000000";
R512RCO <= '1';
end if;
end if;
--12 räknare(120us)
if rst = '1' or softrst = '1' then
R12 <= "000";
elsif rising_edge(clk) then
if R12 < 11 then
R12 <= R12 + 1;
R12RCO <= '0';
else
R12 <= "000";
R12RCO <= '1';
end if;
end if;
if rst = '1' then
PC <= "000";
PC2 <= "0000";
flag <= '0';
rs <= '0';
RW <= '1';
data <= "00000000";
init <= '1';
elsif rising_edge(clk) and init = '1' then
--Initieringsfasen behöver ej köras då det är en power on reset som sköter detta
--det enda som måste göras är att sätta display on
--Steg 1
if PC = "000" then
--kör delay
if flag = '0' then
flag <= '1';
softrst <= '1';
elsif R512RCO = '1' then
--Lägger data på utgångar(display on)
data <= "00001100";
rs <= '0';
PC <= "001";
PC <= "001";
flag <= '0';
else
softrst <= '0';
end if;
elsif PC = "001" then
--Sätter RW till låg(skriv) under 1 klockpuls(10us)
RW <= '0';
PC <= PC + 1;
elsif PC = "010" then
--sätter RW till hög igen
RW <= '1';
PC <= PC + 1;
elsif PC = "011" then
--Lägger data på utgångarna(tecknet A - "01000001") (rs <= 1 ger ascii-tecken)
data <= "01000001";
rs <= '1';
--Kör delay på 120us
if flag = '0' then
softrst <= '1';
flag <= '1';
else
if R12RCO = '1' then
PC <= PC + 1;
flag <= '0';
end if;
end if;
elsif PC = "100" then
--Sätter RW till låg(skriv) under 1 klockpuls(10us)
RW <= '0';
PC <= PC + 1;
elsif PC = "101" then
--sätter RW till hög(läs) igen
RW <= '1';
PC <= PC + 1;
end if;
end if;
end process;
end Behavioral;
[/kod]
Kan påpekas igen att jag kör i80 cpu bus mode då jag har lödit samman JP4 "bryggan".
Är väldigt tacksam för svar då jag har sysslat med detta ett bra tag utan att lyckas

Tack