-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathpsi_common_axilite_slave_ipif.vhd
128 lines (124 loc) · 5.49 KB
/
psi_common_axilite_slave_ipif.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
------------------------------------------------------------------------------
-- Copyright (c) 2020 by Enclustra GmbH, Switzerland
-- All rights reserved.
-- Authors: Oliver Bruendler
------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.psi_common_array_pkg.all;
use work.psi_common_math_pkg.all;
use work.psi_common_logic_pkg.all;
-- $$ processes=axi,ip $$
-- $$ tbpkg=work.psi_tb_txt_util,work.psi_tb_compare_pkg,work.psi_tb_activity_pkg $$
entity psi_common_axilite_slave_ipif is
generic(
-- IP Interface Config
num_reg_g : integer := 32; -- $$ export=true $$
rst_val_g : t_aslv32 := (0 => (others => '0')); -- $$ constant=(X"0001ABCD", X"00021234") $$
use_mem_g : boolean := true; -- $$ export=true $$
-- AXI Config
axi_addr_width_g : integer := 8);
port(
--------------------------------------------------------------------------
-- AXI Slave Bus Interface
--------------------------------------------------------------------------
-- System
s_axilite_aclk : in std_logic; -- $$ type=clk; freq=100e6 $$
s_axilite_aresetn : in std_logic; -- $$ type=rst; clk=s_axi_aclk; lowactive=true $$
-- Read address channel
s_axilite_araddr : in std_logic_vector(axi_addr_width_g - 1 downto 0); -- $$ proc=axi $$
s_axilite_arvalid : in std_logic; -- $$ proc=axi $$
s_axilite_arready : out std_logic; -- $$ proc=axi $$
-- Read data channel
s_axilite_rdata : out std_logic_vector(31 downto 0); -- $$ proc=axi $$
s_axilite_rresp : out std_logic_vector(1 downto 0); -- $$ proc=axi $$
s_axilite_rvalid : out std_logic; -- $$ proc=axi $$
s_axilite_rready : in std_logic; -- $$ proc=axi $$
-- Write address channel
s_axilite_awaddr : in std_logic_vector(axi_addr_width_g - 1 downto 0); -- $$ proc=axi $$
s_axilite_awvalid : in std_logic; -- $$ proc=axi $$
s_axilite_awready : out std_logic; -- $$ proc=axi $$
-- Write data channel
s_axilite_wdata : in std_logic_vector(31 downto 0); -- $$ proc=axi $$
s_axilite_wstrb : in std_logic_vector(3 downto 0); -- $$ proc=axi $$
s_axilite_wvalid : in std_logic; -- $$ proc=axi $$
s_axilite_wready : out std_logic; -- $$ proc=axi $$
-- Write response channel
s_axilite_bresp : out std_logic_vector(1 downto 0); -- $$ proc=axi $$
s_axilite_bvalid : out std_logic; -- $$ proc=axi $$
s_axilite_bready : in std_logic; -- $$ proc=axi $$
--------------------------------------------------------------------------
-- Register Interface
--------------------------------------------------------------------------
o_reg_rd : out std_logic_vector(num_reg_g - 1 downto 0); -- $$ proc=ip $$
i_reg_rdata : in t_aslv32(0 to num_reg_g - 1) := (others => (others => '0')); -- $$ proc=ip $$
o_reg_wr : out std_logic_vector(num_reg_g - 1 downto 0); -- $$ proc=ip $$
o_reg_wdata : out t_aslv32(0 to num_reg_g - 1); -- $$ proc=ip $$
--------------------------------------------------------------------------
-- Memory Interface
--------------------------------------------------------------------------
o_mem_addr : out std_logic_vector(axi_addr_width_g - 1 downto 0); -- $$ proc=ip $$
o_mem_wr : out std_logic_vector(3 downto 0); -- $$ proc=ip $$
o_mem_wdata : out std_logic_vector(31 downto 0); -- $$ proc=ip $$
i_mem_rdata : in std_logic_vector(31 downto 0) := (others => '0') -- $$ proc=ip $$
);
end psi_common_axilite_slave_ipif;
architecture struct of psi_common_axilite_slave_ipif is
begin
i_interface : entity work.psi_common_axi_slave_ipif
generic map(
num_reg_g => num_reg_g,
rst_val_g => rst_val_g,
use_mem_g => use_mem_g,
axi_id_width_g => 1,
axi_addr_width_g => axi_addr_width_g
)
port map(
s_axi_aclk => s_axilite_aclk,
s_axi_aresetn => s_axilite_aresetn,
s_axi_arid => "0",
s_axi_araddr => s_axilite_araddr,
s_axi_arlen => X"00",
s_axi_arsize => "010",
s_axi_arburst => "01",
s_axi_arlock => '0',
s_axi_arcache => "0011",
s_axi_arprot => "000",
s_axi_arvalid => s_axilite_arvalid,
s_axi_arready => s_axilite_arready,
s_axi_rid => open,
s_axi_rdata => s_axilite_rdata,
s_axi_rresp => s_axilite_rresp,
s_axi_rlast => open,
s_axi_rvalid => s_axilite_rvalid,
s_axi_rready => s_axilite_rready,
s_axi_awid => "0",
s_axi_awaddr => s_axilite_awaddr,
s_axi_awlen => x"00",
s_axi_awsize => "010",
s_axi_awburst => "01",
s_axi_awlock => '0',
s_axi_awcache => "0011",
s_axi_awprot => "000",
s_axi_awvalid => s_axilite_awvalid,
s_axi_awready => s_axilite_awready,
s_axi_wdata => s_axilite_wdata,
s_axi_wstrb => s_axilite_wstrb,
s_axi_wlast => '1',
s_axi_wvalid => s_axilite_wvalid,
s_axi_wready => s_axilite_wready,
s_axi_bid => open,
s_axi_bresp => s_axilite_bresp,
s_axi_bvalid => s_axilite_bvalid,
s_axi_bready => s_axilite_bready,
o_reg_rd => o_reg_rd,
i_reg_rdata => i_reg_rdata,
o_reg_wr => o_reg_wr,
o_reg_wdata => o_reg_wdata,
o_mem_addr => o_mem_addr,
o_mem_wr => o_mem_wr,
o_mem_wdata => o_mem_wdata,
i_mem_rdata => i_mem_rdata
);
end architecture;