OpenCores
URL https://opencores.org/ocsvn/lxp32/lxp32/trunk

Subversion Repositories lxp32

[/] [lxp32/] [trunk/] [rtl/] [lxp32_execute.vhd] - Diff between revs 2 and 6

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 6
Line 32... Line 32...
                cmd_div_mod_i: in std_logic;
                cmd_div_mod_i: in std_logic;
                cmd_cmp_i: in std_logic;
                cmd_cmp_i: in std_logic;
                cmd_jump_i: in std_logic;
                cmd_jump_i: in std_logic;
                cmd_negate_op2_i: in std_logic;
                cmd_negate_op2_i: in std_logic;
                cmd_and_i: in std_logic;
                cmd_and_i: in std_logic;
                cmd_or_i: in std_logic;
 
                cmd_xor_i: in std_logic;
                cmd_xor_i: in std_logic;
                cmd_shift_i: in std_logic;
                cmd_shift_i: in std_logic;
                cmd_shift_right_i: in std_logic;
                cmd_shift_right_i: in std_logic;
 
 
                jump_type_i: in std_logic_vector(3 downto 0);
                jump_type_i: in std_logic_vector(3 downto 0);
Line 64... Line 63...
 
 
                jump_valid_o: out std_logic;
                jump_valid_o: out std_logic;
                jump_dst_o: out std_logic_vector(29 downto 0);
                jump_dst_o: out std_logic_vector(29 downto 0);
                jump_ready_i: in std_logic;
                jump_ready_i: in std_logic;
 
 
                interrupt_return_o: out std_logic;
                interrupt_return_o: out std_logic
                interrupts_enabled_o: out std_logic_vector(7 downto 0);
 
                interrupts_blocked_o: out std_logic_vector(7 downto 0)
 
        );
        );
end entity;
end entity;
 
 
architecture rtl of lxp32_execute is
architecture rtl of lxp32_execute is
 
 
Line 114... Line 111...
signal dst_reg: std_logic_vector(7 downto 0);
signal dst_reg: std_logic_vector(7 downto 0);
 
 
-- Signals related to interrupt handling
-- Signals related to interrupt handling
 
 
signal interrupt_return: std_logic:='0';
signal interrupt_return: std_logic:='0';
signal interrupts_enabled: std_logic_vector(7 downto 0):=(others=>'0');
 
signal interrupts_blocked: std_logic_vector(7 downto 0):=(others=>'0');
 
 
 
begin
begin
 
 
-- Pipeline control
-- Pipeline control
 
 
Line 146... Line 141...
                cmd_div_i=>cmd_div_i,
                cmd_div_i=>cmd_div_i,
                cmd_div_mod_i=>cmd_div_mod_i,
                cmd_div_mod_i=>cmd_div_mod_i,
                cmd_cmp_i=>cmd_cmp_i,
                cmd_cmp_i=>cmd_cmp_i,
                cmd_negate_op2_i=>cmd_negate_op2_i,
                cmd_negate_op2_i=>cmd_negate_op2_i,
                cmd_and_i=>cmd_and_i,
                cmd_and_i=>cmd_and_i,
                cmd_or_i=>cmd_or_i,
 
                cmd_xor_i=>cmd_xor_i,
                cmd_xor_i=>cmd_xor_i,
                cmd_shift_i=>cmd_shift_i,
                cmd_shift_i=>cmd_shift_i,
                cmd_shift_right_i=>cmd_shift_right_i,
                cmd_shift_right_i=>cmd_shift_right_i,
 
 
                op1_i=>op1_i,
                op1_i=>op1_i,
Line 180... Line 174...
begin
begin
        if rising_edge(clk_i) then
        if rising_edge(clk_i) then
                if rst_i='1' then
                if rst_i='1' then
                        jump_valid<='0';
                        jump_valid<='0';
                        interrupt_return<='0';
                        interrupt_return<='0';
 
                        jump_dst<=(others=>'-');
                else
                else
                        if jump_valid='0' then
                        if jump_valid='0' then
 
                                jump_dst<=op1_i(31 downto 2);
                                if can_execute='1' and cmd_jump_i='1' and jump_condition='1' then
                                if can_execute='1' and cmd_jump_i='1' and jump_condition='1' then
                                        jump_valid<='1';
                                        jump_valid<='1';
                                        jump_dst<=op1_i(31 downto 2);
 
                                        interrupt_return<=op1_i(0);
                                        interrupt_return<=op1_i(0);
                                end if;
                                end if;
                        elsif jump_ready_i='1' then
                        elsif jump_ready_i='1' then
                                jump_valid<='0';
                                jump_valid<='0';
                                interrupt_return<='0';
                                interrupt_return<='0';
Line 260... Line 255...
 
 
sp_we_o<=result_valid;
sp_we_o<=result_valid;
sp_waddr_o<=result_regaddr;
sp_waddr_o<=result_regaddr;
sp_wdata_o<=result_mux;
sp_wdata_o<=result_mux;
 
 
process (clk_i) is
 
begin
 
        if rising_edge(clk_i) then
 
                if rst_i='1' then
 
                        interrupts_enabled<=(others=>'0');
 
                        interrupts_blocked<=(others=>'0');
 
                else
 
                        if result_valid='1' and result_regaddr=X"FC" then
 
                                interrupts_enabled<=result_mux(7 downto 0);
 
                                interrupts_blocked<=result_mux(15 downto 8);
 
                        end if;
 
                end if;
 
        end if;
 
end process;
 
 
 
interrupts_enabled_o<=interrupts_enabled;
 
interrupts_blocked_o<=interrupts_blocked;
 
 
 
end architecture;
end architecture;
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.