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
|