-- See the file "LICENSE" for the full license governing this code. -- LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; USE work.lt16x32_global.all; USE work.wishbone.all; USE work.config.all; ENTITY wb_lcd IS generic( memaddr : generic_addr_type; addrmask : generic_mask_type ); port( clk : IN std_logic; rst : IN std_logic; dataLCD : INOUT std_logic_vector(7 downto 0); enableLCD : OUT std_logic; rsLCD : OUT std_logic; rwLCD : OUT std_logic; wslvi : IN wb_slv_in_type; wslvo : OUT wb_slv_out_type ); END ENTITY; ARCHITECTURE behav OF wb_lcd IS signal lcd_reg : std_logic_vector(10 downto 0); signal ack : std_logic; BEGIN process(clk) begin if clk'event and clk='1' then if rst = '1' then ack <= '0'; lcd_reg <= (others => '0'); else if wslvi.stb = '1' and wslvi.cyc = '1' then if wslvi.we = '1' then lcd_reg <= dec_wb_dat(wslvi.sel,wslvi.dat)(10 downto 0); end if; if ack = '0' then ack <= '1'; else ack <= '0'; end if; else ack <= '0'; end if; end if; end if; end process; wslvo.dat(10 downto 0) <= lcd_reg when wslvi.adr(2) = '0' else "000" & dataLCD when wslvi.adr(2) = '1' and lcd_reg(8) = '1' else (others => '0'); wslvo.dat(31 downto 11) <= (others=>'0'); wslvo.wbcfg <= wb_membar(memaddr, addrmask); wslvo.ack <= ack; enableLCD <= lcd_reg(10); rsLCD <= lcd_reg(9); rwLCD <= lcd_reg(8); dataLCD <= lcd_reg(7 downto 0) when lcd_reg(8) = '0' else "ZZZZZZZZ"; END ARCHITECTURE;