library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; --use work.math_pkg.all; use work.common_pkg.all; use work.core_pkg.all; use work.mem_pkg.all; use work.extension_pkg.all; use work.extension_7seg_pkg.all; architecture behav of extension_7seg is signal s_state, s_state_nxt : sseg_state_rec; signal ext_reg_r : extmod_rec; begin seg_syn: process(sys_clk, sys_res_n) begin if (sys_res_n = RESET_VALUE) then s_state.digit0 <= (others => '0');--set(0,7); s_state.digit1 <= (others => '0');--set(0,7); s_state.digit2 <= (others => '0');--set(0,7); s_state.digit3 <= (others => '0');--set(0,7); ext_reg_r.sel <='0'; ext_reg_r.wr_en <= '0'; ext_reg_r.byte_en <= (others => '0'); ext_reg_r.data <= (others => '0'); ext_reg_r.addr <= (others => '0'); elsif rising_edge(sys_clk) then s_state <= s_state_nxt; ext_reg_r <= ext_reg; end if; end process; seg_asyn: process(s_state, ext_reg_r) variable tmp_data : byte_t; begin s_state_nxt <= s_state; tmp_data := (others =>'0'); if ext_reg_r.sel = '1' and ext_reg_r.wr_en = '1' then tmp_data(byte_t'range) :=ext_reg_r.data(byte_t'range); s_state_nxt.digit0 <= digit_decode('0' & ext_reg_r.data(3 downto 0)); s_state_nxt.digit1 <= digit_decode('0' & ext_reg_r.data(7 downto 4)); s_state_nxt.digit2 <= digit_decode('0' & ext_reg_r.data(11 downto 8)); s_state_nxt.digit3 <= digit_decode('0' & ext_reg_r.data(15 downto 12)); case ext_reg_r.byte_en(1 downto 0) is when "01" => s_state_nxt.digit3 <= digit_decode("11111"); when "00" => null; when "10" => null; when "11" => null; when others => null; end case; end if; end process; --ps2_next seg_out: process(s_state) begin o_digit0 <= not(s_state.digit0); o_digit1 <= not(s_state.digit1); o_digit2 <= not(s_state.digit2); o_digit3 <= not(s_state.digit3); end process; end behav;