started default slave that is accessed on decerr, write read error
This commit is contained in:
parent
3d7b14c6ff
commit
8ebb16e4d8
64
src/axi3-interconnect-decerr.vhd
Normal file
64
src/axi3-interconnect-decerr.vhd
Normal file
@ -0,0 +1,64 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.numeric_std.all;
|
||||
use work.axi3intercon_pkg.all;
|
||||
|
||||
entity filename is
|
||||
port(
|
||||
clk : in std_logic;
|
||||
rst : in std_logic;
|
||||
slave_in : in axi_slave_in_t;
|
||||
slave_out : out axi_slave_out_t
|
||||
);
|
||||
end entity filename;
|
||||
|
||||
architecture RTL of filename is
|
||||
type r_state_t is (R_READY, R_ERROR);
|
||||
signal r_state : r_state_t;
|
||||
signal r_len : unsigned(7 downto 0);
|
||||
begin
|
||||
read_error : process(clk, rst) is
|
||||
begin
|
||||
if rst = '1' then
|
||||
slave_out.ar.arready <= '0';
|
||||
slave_out.r.rdata <= (others => '0');
|
||||
slave_out.r.rid <= (others => '0');
|
||||
slave_out.r.rlast <= '0';
|
||||
slave_out.r.rresp <= (others => '0');
|
||||
slave_out.r.ruser <= (others => '0');
|
||||
slave_out.r.rvalid <= '0';
|
||||
elsif rising_edge(clk) then
|
||||
case r_state is
|
||||
when R_READY =>
|
||||
slave_out.r.rlast <= '0';
|
||||
if slave_in.ar.arvalid = '1' then
|
||||
slave_out.ar.arready <= '1';
|
||||
r_state <= R_ERROR;
|
||||
slave_out.r.rid <= slave_in.ar.arid;
|
||||
slave_out.r.rresp <= AXI_RESP_DECERR;
|
||||
slave_out.r.rvalid <= '1';
|
||||
if unsigned(slave_in.ar.arlen) = 1 then
|
||||
slave_out.r.rlast <= '1';
|
||||
else
|
||||
slave_out.r.rlast <= '0';
|
||||
end if;
|
||||
r_len <= unsigned(slave_in.ar.arlen);
|
||||
end if;
|
||||
when R_ERROR =>
|
||||
slave_out.ar.arready <= '0';
|
||||
slave_out.r.rvalid <= '1';
|
||||
if slave_in.r.rready = '1' then
|
||||
r_len <= r_len - 1;
|
||||
if r_len = 2 then
|
||||
slave_out.r.rlast <= '1';
|
||||
end if;
|
||||
if r_len = to_unsigned(1, r_len'length) then
|
||||
r_state <= R_READY;
|
||||
slave_out.r.rvalid <= '0';
|
||||
end if;
|
||||
end if;
|
||||
end case;
|
||||
end if;
|
||||
end process read_error;
|
||||
|
||||
end architecture RTL;
|
Loading…
Reference in New Issue
Block a user