Skip to content

Commit 27b8794

Browse files
committedMay 20, 2022
Add Avalon->AXI and AXI->Avalon converters
1 parent 4ddef7c commit 27b8794

5 files changed

+700
-0
lines changed
 

‎Makefile

+3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ SRC += avm_master.vhd
33
SRC += avm_memory.vhd
44
SRC += avm_pause.vhd
55
SRC += burst_ctrl.vhd
6+
SRC += axi_avalon.vhd
7+
SRC += avalon_axi.vhd
68

79
TB = tb_burst_ctrl
810
TB = tb_avm_decrease
11+
TB = tb_avalon_axi
912

1013
SRC += $(TB).vhd
1114
WAVE = $(TB).ghw

‎avalon_axi.vhd

+163
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
library ieee;
2+
use ieee.std_logic_1164.all;
3+
use ieee.numeric_std.all;
4+
5+
-- This allows a Avalon Master to be connected to an AXI Slave
6+
7+
entity avalon_axi is
8+
generic (
9+
G_ADDR_SIZE : integer;
10+
G_DATA_SIZE : integer
11+
);
12+
port (
13+
clk_i : in std_logic;
14+
rst_i : in std_logic;
15+
16+
-- Avalon Memory Map interface (slave)
17+
s_avm_write_i : in std_logic;
18+
s_avm_read_i : in std_logic;
19+
s_avm_address_i : in std_logic_vector(G_ADDR_SIZE-1 downto 0);
20+
s_avm_writedata_i : in std_logic_vector(G_DATA_SIZE-1 downto 0);
21+
s_avm_byteenable_i : in std_logic_vector(G_DATA_SIZE/8-1 downto 0);
22+
s_avm_readdata_o : out std_logic_vector(G_DATA_SIZE-1 downto 0);
23+
s_avm_readdatavalid_o : out std_logic;
24+
s_avm_waitrequest_o : out std_logic;
25+
s_avm_writeresponsevalid_o : out std_logic;
26+
s_avm_response_o : out std_logic_vector(1 downto 0);
27+
28+
-- AXI Lite interface (master)
29+
m_axil_awready_i : in std_logic;
30+
m_axil_awvalid_o : out std_logic;
31+
m_axil_awaddr_o : out std_logic_vector(G_ADDR_SIZE-1 downto 0);
32+
m_axil_awprot_o : out std_logic_vector(2 downto 0);
33+
m_axil_awid_o : out std_logic_vector(7 downto 0);
34+
m_axil_wready_i : in std_logic;
35+
m_axil_wvalid_o : out std_logic;
36+
m_axil_wdata_o : out std_logic_vector(G_DATA_SIZE-1 downto 0);
37+
m_axil_wstrb_o : out std_logic_vector(G_DATA_SIZE/8-1 downto 0);
38+
m_axil_bready_o : out std_logic;
39+
m_axil_bvalid_i : in std_logic;
40+
m_axil_bresp_i : in std_logic_vector(1 downto 0);
41+
m_axil_bid_i : in std_logic_vector(7 downto 0);
42+
m_axil_arready_i : in std_logic;
43+
m_axil_arvalid_o : out std_logic;
44+
m_axil_araddr_o : out std_logic_vector(G_ADDR_SIZE-1 downto 0);
45+
m_axil_arprot_o : out std_logic_vector(2 downto 0);
46+
m_axil_arid_o : out std_logic_vector(7 downto 0);
47+
m_axil_rready_o : out std_logic;
48+
m_axil_rvalid_i : in std_logic;
49+
m_axil_rdata_i : in std_logic_vector(G_DATA_SIZE-1 downto 0);
50+
m_axil_rresp_i : in std_logic_vector(1 downto 0);
51+
m_axil_rid_i : in std_logic_vector(7 downto 0)
52+
);
53+
end entity avalon_axi;
54+
55+
architecture synthesis of avalon_axi is
56+
57+
signal alm_awvalid : std_logic;
58+
signal alm_awaddr : std_logic_vector(G_ADDR_SIZE-1 downto 0);
59+
signal alm_wvalid : std_logic;
60+
signal alm_wvalid_d : std_logic;
61+
signal alm_wdata : std_logic_vector(G_DATA_SIZE-1 downto 0);
62+
signal alm_wstrb : std_logic_vector(G_DATA_SIZE/8-1 downto 0);
63+
signal avs_response : std_logic_vector(1 downto 0);
64+
signal avs_writeresponsevalid : std_logic;
65+
66+
signal avs_readdata : std_logic_vector(G_DATA_SIZE-1 downto 0);
67+
signal avs_readdatavalid : std_logic;
68+
signal alm_arvalid : std_logic;
69+
signal alm_araddr : std_logic_vector(G_ADDR_SIZE-1 downto 0);
70+
71+
begin
72+
73+
-- Handle write
74+
75+
m_axil_awvalid_o <= alm_awvalid;
76+
m_axil_awaddr_o <= alm_awaddr;
77+
m_axil_wvalid_o <= alm_wvalid_d;
78+
m_axil_wdata_o <= alm_wdata;
79+
m_axil_wstrb_o <= alm_wstrb;
80+
m_axil_bready_o <= '1';
81+
82+
m_axil_awprot_o <= (others => '0');
83+
m_axil_awid_o <= (others => '0');
84+
m_axil_arprot_o <= (others => '0');
85+
m_axil_arid_o <= (others => '0');
86+
87+
s_avm_response_o <= avs_response;
88+
s_avm_writeresponsevalid_o <= avs_writeresponsevalid;
89+
90+
91+
p_write : process (clk_i)
92+
begin
93+
if rising_edge(clk_i) then
94+
alm_wvalid_d <= alm_wvalid;
95+
if m_axil_awready_i = '1' then
96+
alm_awvalid <= '0';
97+
end if;
98+
99+
if m_axil_wready_i = '1' then
100+
alm_wvalid <= '0';
101+
end if;
102+
103+
if m_axil_wready_i = '1' then
104+
alm_wvalid <= '0';
105+
end if;
106+
107+
if s_avm_write_i = '1' then
108+
alm_awaddr <= s_avm_address_i;
109+
alm_awvalid <= '1';
110+
111+
alm_wdata <= s_avm_writedata_i;
112+
alm_wvalid <= '1';
113+
alm_wstrb <= s_avm_byteenable_i;
114+
end if;
115+
116+
if m_axil_bvalid_i = '1' then
117+
avs_response <= m_axil_bresp_i;
118+
avs_writeresponsevalid <= '1';
119+
else
120+
avs_response <= (others => '0');
121+
avs_writeresponsevalid <= '0';
122+
end if;
123+
end if;
124+
end process p_write;
125+
126+
127+
-- Handle read
128+
129+
s_avm_readdata_o <= avs_readdata;
130+
s_avm_readdatavalid_o <= avs_readdatavalid;
131+
s_avm_waitrequest_o <= '0';
132+
m_axil_rready_o <= '1';
133+
m_axil_arvalid_o <= alm_arvalid;
134+
m_axil_araddr_o <= alm_araddr;
135+
136+
p_r : process (clk_i)
137+
begin
138+
if rising_edge(clk_i) then
139+
if m_axil_arready_i = '1' then
140+
alm_arvalid <= '0';
141+
end if;
142+
143+
if s_avm_read_i = '1' then
144+
alm_araddr <= s_avm_address_i;
145+
alm_arvalid <= '1';
146+
end if;
147+
end if;
148+
end process p_r;
149+
150+
p_read : process (clk_i)
151+
begin
152+
if rising_edge(clk_i) then
153+
avs_readdatavalid <= '0';
154+
155+
if m_axil_rvalid_i = '1' and m_axil_rready_o = '1' then
156+
avs_readdata <= m_axil_rdata_i;
157+
avs_readdatavalid <= '1';
158+
end if;
159+
end if;
160+
end process p_read;
161+
162+
end architecture synthesis;
163+

‎axi_avalon.vhd

+157
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
library ieee;
2+
use ieee.std_logic_1164.all;
3+
use ieee.numeric_std.all;
4+
5+
-- This allows a Avalon Slave to be connected to an AXI Master
6+
7+
entity axi_avalon is
8+
generic (
9+
G_ADDR_SIZE : integer;
10+
G_DATA_SIZE : integer
11+
);
12+
port (
13+
clk_i : in std_logic;
14+
rst_i : in std_logic;
15+
16+
-- AXI Lite interface (slave)
17+
s_axil_awready_o : out std_logic;
18+
s_axil_awvalid_i : in std_logic;
19+
s_axil_awaddr_i : in std_logic_vector(G_ADDR_SIZE-1 downto 0);
20+
s_axil_awprot_i : in std_logic_vector(2 downto 0);
21+
s_axil_awid_i : in std_logic_vector(7 downto 0);
22+
s_axil_wready_o : out std_logic;
23+
s_axil_wvalid_i : in std_logic;
24+
s_axil_wdata_i : in std_logic_vector(G_DATA_SIZE-1 downto 0);
25+
s_axil_wstrb_i : in std_logic_vector(G_DATA_SIZE/8-1 downto 0);
26+
s_axil_bready_i : in std_logic;
27+
s_axil_bvalid_o : out std_logic;
28+
s_axil_bresp_o : out std_logic_vector(1 downto 0);
29+
s_axil_bid_o : out std_logic_vector(7 downto 0);
30+
s_axil_arready_o : out std_logic;
31+
s_axil_arvalid_i : in std_logic;
32+
s_axil_araddr_i : in std_logic_vector(G_ADDR_SIZE-1 downto 0);
33+
s_axil_arprot_i : in std_logic_vector(2 downto 0);
34+
s_axil_arid_i : in std_logic_vector(7 downto 0);
35+
s_axil_rready_i : in std_logic;
36+
s_axil_rvalid_o : out std_logic;
37+
s_axil_rdata_o : out std_logic_vector(G_DATA_SIZE-1 downto 0);
38+
s_axil_rresp_o : out std_logic_vector(1 downto 0);
39+
s_axil_rid_o : out std_logic_vector(7 downto 0);
40+
41+
-- Avalon Memory Map interface (master)
42+
m_avm_write_o : out std_logic;
43+
m_avm_read_o : out std_logic;
44+
m_avm_address_o : out std_logic_vector(G_ADDR_SIZE-1 downto 0);
45+
m_avm_writedata_o : out std_logic_vector(G_DATA_SIZE-1 downto 0);
46+
m_avm_byteenable_o : out std_logic_vector(G_DATA_SIZE/8-1 downto 0);
47+
m_avm_readdata_i : in std_logic_vector(G_DATA_SIZE-1 downto 0);
48+
m_avm_readdatavalid_i : in std_logic;
49+
m_avm_waitrequest_i : in std_logic;
50+
m_avm_writeresponsevalid_i : in std_logic;
51+
m_avm_response_i : in std_logic_vector(1 downto 0)
52+
);
53+
end entity axi_avalon;
54+
55+
architecture synthesis of axi_avalon is
56+
57+
signal avm_read_address : std_logic_vector(G_ADDR_SIZE-1 downto 0);
58+
signal avm_write_address : std_logic_vector(G_ADDR_SIZE-1 downto 0);
59+
signal avm_byteenable : std_logic_vector(G_DATA_SIZE/8-1 downto 0);
60+
signal avm_read : std_logic;
61+
signal avm_write : std_logic;
62+
signal avm_writedata : std_logic_vector(G_DATA_SIZE-1 downto 0);
63+
64+
signal aw_stored : std_logic;
65+
signal w_stored : std_logic;
66+
67+
signal s_axil_rvalid : std_logic;
68+
signal s_axil_rdata : std_logic_vector(G_DATA_SIZE-1 downto 0);
69+
signal s_axil_rresp : std_logic_vector(1 downto 0);
70+
71+
begin
72+
73+
-- Handle write
74+
75+
m_avm_address_o <= avm_write_address when avm_write = '1' else avm_read_address;
76+
m_avm_byteenable_o <= avm_byteenable;
77+
m_avm_read_o <= avm_read;
78+
m_avm_write_o <= avm_write;
79+
m_avm_writedata_o <= avm_writedata;
80+
81+
p_read : process (clk_i)
82+
begin
83+
if rising_edge(clk_i) then
84+
avm_read <= '0';
85+
86+
if s_axil_arvalid_i = '1' and s_axil_arready_o = '1' then
87+
avm_read_address <= s_axil_araddr_i;
88+
s_axil_rid_o <= s_axil_arid_i;
89+
avm_read <= '1';
90+
end if;
91+
end if;
92+
end process p_read;
93+
94+
s_axil_awready_o <= not aw_stored;
95+
s_axil_wready_o <= not w_stored;
96+
avm_write <= aw_stored and w_stored and not avm_read;
97+
98+
p_stored : process (clk_i)
99+
begin
100+
if rising_edge(clk_i) then
101+
if s_axil_awvalid_i = '1' and s_axil_awready_o = '1' then
102+
avm_write_address <= s_axil_awaddr_i;
103+
s_axil_bid_o <= s_axil_awid_i;
104+
aw_stored <= '1';
105+
end if;
106+
107+
if s_axil_wvalid_i = '1' and s_axil_wready_o = '1' then
108+
avm_writedata <= s_axil_wdata_i;
109+
avm_byteenable <= s_axil_wstrb_i;
110+
w_stored <= '1';
111+
end if;
112+
113+
if avm_write = '1' or rst_i = '1' then
114+
aw_stored <= '0';
115+
w_stored <= '0';
116+
end if;
117+
end if;
118+
end process p_stored;
119+
120+
p_b : process (clk_i)
121+
begin
122+
if rising_edge(clk_i) then
123+
if s_axil_bready_i = '1' then
124+
s_axil_bvalid_o <= '0';
125+
end if;
126+
127+
if m_avm_writeresponsevalid_i = '1' then
128+
s_axil_bvalid_o <= '1';
129+
s_axil_bresp_o <= m_avm_response_i;
130+
end if;
131+
end if;
132+
end process p_b;
133+
134+
135+
-- Handle read response
136+
137+
s_axil_rvalid_o <= s_axil_rvalid;
138+
s_axil_rdata_o <= s_axil_rdata;
139+
s_axil_rresp_o <= s_axil_rresp;
140+
s_axil_arready_o <= '1';
141+
142+
p_r : process (clk_i)
143+
begin
144+
if rising_edge(clk_i) then
145+
if s_axil_rready_i = '1' then
146+
s_axil_rvalid <= '0';
147+
end if;
148+
149+
if m_avm_readdatavalid_i = '1' then
150+
s_axil_rdata <= m_avm_readdata_i;
151+
s_axil_rvalid <= '1';
152+
end if;
153+
end if;
154+
end process p_r;
155+
156+
end architecture synthesis;
157+

‎tb_avalon_axi.gtkw

+109
Large diffs are not rendered by default.

‎tb_avalon_axi.vhd

+268
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
library ieee;
2+
use ieee.std_logic_1164.all;
3+
use ieee.numeric_std.all;
4+
5+
entity tb_avalon_axi is
6+
end entity tb_avalon_axi;
7+
8+
architecture simulation of tb_avalon_axi is
9+
10+
-- Clock and reset
11+
signal clk : std_logic;
12+
signal rst : std_logic;
13+
14+
constant HALF_PERIOD : natural := 5; -- 100 MHz
15+
16+
-- Avalon Memory Map
17+
signal avmm_address : std_logic_vector(19 downto 0);
18+
signal avmm_byteenable : std_logic_vector(7 downto 0);
19+
signal avmm_read : std_logic;
20+
signal avmm_readdata : std_logic_vector(63 downto 0);
21+
signal avmm_readdatavalid : std_logic;
22+
signal avmm_waitrequest : std_logic;
23+
signal avmm_write : std_logic;
24+
signal avmm_writedata : std_logic_vector(63 downto 0);
25+
signal avmm_response : std_logic_vector(1 downto 0);
26+
signal avmm_writeresponsevalid : std_logic;
27+
28+
-- AXI-Lite
29+
signal axil_awready : std_logic;
30+
signal axil_awvalid : std_logic;
31+
signal axil_awaddr : std_logic_vector(19 downto 0);
32+
signal axil_awprot : std_logic_vector(2 downto 0);
33+
signal axil_awid : std_logic_vector(7 downto 0);
34+
signal axil_wready : std_logic;
35+
signal axil_wvalid : std_logic;
36+
signal axil_wdata : std_logic_vector(63 downto 0);
37+
signal axil_wstrb : std_logic_vector(7 downto 0);
38+
signal axil_bready : std_logic;
39+
signal axil_bvalid : std_logic;
40+
signal axil_bresp : std_logic_vector(1 downto 0);
41+
signal axil_bid : std_logic_vector(7 downto 0);
42+
signal axil_arready : std_logic;
43+
signal axil_arvalid : std_logic;
44+
signal axil_araddr : std_logic_vector(19 downto 0);
45+
signal axil_arprot : std_logic_vector(2 downto 0);
46+
signal axil_arid : std_logic_vector(7 downto 0);
47+
signal axil_rready : std_logic;
48+
signal axil_rvalid : std_logic;
49+
signal axil_rdata : std_logic_vector(63 downto 0);
50+
signal axil_rresp : std_logic_vector(1 downto 0);
51+
signal axil_rid : std_logic_vector(7 downto 0);
52+
53+
signal mem_address : std_logic_vector(19 downto 0);
54+
signal mem_byteenable : std_logic_vector(7 downto 0);
55+
signal mem_read : std_logic;
56+
signal mem_readdata : std_logic_vector(63 downto 0);
57+
signal mem_readdatavalid : std_logic;
58+
signal mem_waitrequest : std_logic;
59+
signal mem_write : std_logic;
60+
signal mem_writedata : std_logic_vector(63 downto 0);
61+
signal mem_response : std_logic_vector(1 downto 0);
62+
signal mem_writeresponsevalid : std_logic;
63+
64+
begin
65+
66+
p_test : process is
67+
variable data : std_logic_vector(63 downto 0);
68+
69+
procedure write_avmm(addr : std_logic_vector(19 downto 0); data : std_logic_vector(63 downto 0)) is
70+
begin
71+
avmm_byteenable <= (others => '1');
72+
avmm_address <= addr;
73+
avmm_read <= '0';
74+
avmm_write <= '1';
75+
avmm_writedata <= data;
76+
wait until clk = '1';
77+
78+
while avmm_write = '1' and avmm_waitrequest = '1' loop
79+
wait until clk = '1';
80+
end loop;
81+
82+
avmm_read <= '0';
83+
avmm_write <= '0';
84+
avmm_address <= (others => '0');
85+
avmm_writedata <= (others => '0');
86+
wait until clk = '1';
87+
end procedure write_avmm;
88+
89+
procedure read_avmm(addr : std_logic_vector(19 downto 0); data : out std_logic_vector(63 downto 0)) is
90+
begin
91+
avmm_address <= addr;
92+
avmm_read <= '1';
93+
avmm_write <= '0';
94+
wait until clk = '1';
95+
96+
while avmm_read = '1' and avmm_waitrequest = '1' loop
97+
wait until clk = '1';
98+
end loop;
99+
100+
avmm_address <= (others => '0');
101+
avmm_read <= '0';
102+
avmm_write <= '0';
103+
avmm_writedata <= (others => '0');
104+
wait until clk = '1';
105+
106+
while avmm_readdatavalid = '0' loop
107+
wait until clk = '1';
108+
end loop;
109+
110+
data := avmm_readdata;
111+
end procedure read_avmm;
112+
113+
begin -- p_test
114+
report "Test started!";
115+
116+
avmm_read <= '0';
117+
avmm_write <= '0';
118+
wait for 500 ns;
119+
wait until clk = '1';
120+
121+
write_avmm(X"01234", X"deadbeefb00bcafe");
122+
wait for 100 ns;
123+
wait until clk = '1';
124+
125+
write_avmm(X"00123", X"cafebabedeadb00b");
126+
wait for 500 ns;
127+
wait until clk = '1';
128+
129+
read_avmm(X"01234", data);
130+
assert data = X"deadbeefb00bcafe";
131+
wait for 100 ns;
132+
wait until clk = '1';
133+
134+
read_avmm(X"00123", data);
135+
assert data = X"cafebabedeadb00b";
136+
wait for 100 ns;
137+
wait until clk = '1';
138+
139+
report "Test finished!";
140+
wait;
141+
end process p_test;
142+
143+
p_clk : process
144+
begin
145+
clk <= '1';
146+
wait for HALF_PERIOD * 1 ns;
147+
clk <= '0';
148+
wait for HALF_PERIOD * 1 ns;
149+
end process p_clk;
150+
151+
p_rst : process
152+
begin
153+
rst <= '1';
154+
wait for 100 ns;
155+
wait until clk = '1';
156+
157+
rst <= '0';
158+
wait until clk = '1';
159+
wait;
160+
end process p_rst;
161+
162+
i_avalon_axi : entity work.avalon_axi
163+
generic map (
164+
G_ADDR_SIZE => 20,
165+
G_DATA_SIZE => 64
166+
)
167+
port map (
168+
clk_i => clk,
169+
rst_i => rst,
170+
s_avm_address_i => avmm_address,
171+
s_avm_byteenable_i => avmm_byteenable,
172+
s_avm_read_i => avmm_read,
173+
s_avm_readdata_o => avmm_readdata,
174+
s_avm_readdatavalid_o => avmm_readdatavalid,
175+
s_avm_waitrequest_o => avmm_waitrequest,
176+
s_avm_write_i => avmm_write,
177+
s_avm_writedata_i => avmm_writedata,
178+
s_avm_response_o => avmm_response,
179+
s_avm_writeresponsevalid_o => avmm_writeresponsevalid,
180+
m_axil_awready_i => axil_awready,
181+
m_axil_awvalid_o => axil_awvalid,
182+
m_axil_awaddr_o => axil_awaddr,
183+
m_axil_awprot_o => axil_awprot,
184+
m_axil_awid_o => axil_awid,
185+
m_axil_wready_i => axil_wready,
186+
m_axil_wvalid_o => axil_wvalid,
187+
m_axil_wdata_o => axil_wdata,
188+
m_axil_wstrb_o => axil_wstrb,
189+
m_axil_bready_o => axil_bready,
190+
m_axil_bvalid_i => axil_bvalid,
191+
m_axil_bresp_i => axil_bresp,
192+
m_axil_bid_i => axil_bid,
193+
m_axil_arready_i => axil_arready,
194+
m_axil_arvalid_o => axil_arvalid,
195+
m_axil_araddr_o => axil_araddr,
196+
m_axil_arprot_o => axil_arprot,
197+
m_axil_arid_o => axil_arid,
198+
m_axil_rready_o => axil_rready,
199+
m_axil_rvalid_i => axil_rvalid,
200+
m_axil_rdata_i => axil_rdata,
201+
m_axil_rresp_i => axil_rresp,
202+
m_axil_rid_i => axil_rid
203+
); -- i_avalon_axi
204+
205+
i_axi_avalon : entity work.axi_avalon
206+
generic map (
207+
G_ADDR_SIZE => 20,
208+
G_DATA_SIZE => 64
209+
)
210+
port map (
211+
clk_i => clk,
212+
rst_i => rst,
213+
s_axil_awready_o => axil_awready,
214+
s_axil_awvalid_i => axil_awvalid,
215+
s_axil_awaddr_i => axil_awaddr,
216+
s_axil_awprot_i => axil_awprot,
217+
s_axil_awid_i => axil_awid,
218+
s_axil_wready_o => axil_wready,
219+
s_axil_wvalid_i => axil_wvalid,
220+
s_axil_wdata_i => axil_wdata,
221+
s_axil_wstrb_i => axil_wstrb,
222+
s_axil_bready_i => axil_bready,
223+
s_axil_bvalid_o => axil_bvalid,
224+
s_axil_bresp_o => axil_bresp,
225+
s_axil_bid_o => axil_bid,
226+
s_axil_arready_o => axil_arready,
227+
s_axil_arvalid_i => axil_arvalid,
228+
s_axil_araddr_i => axil_araddr,
229+
s_axil_arprot_i => axil_arprot,
230+
s_axil_arid_i => axil_arid,
231+
s_axil_rready_i => axil_rready,
232+
s_axil_rvalid_o => axil_rvalid,
233+
s_axil_rdata_o => axil_rdata,
234+
s_axil_rresp_o => axil_rresp,
235+
s_axil_rid_o => axil_rid,
236+
m_avm_address_o => mem_address,
237+
m_avm_byteenable_o => mem_byteenable,
238+
m_avm_read_o => mem_read,
239+
m_avm_readdata_i => mem_readdata,
240+
m_avm_readdatavalid_i => mem_readdatavalid,
241+
m_avm_waitrequest_i => mem_waitrequest,
242+
m_avm_write_o => mem_write,
243+
m_avm_writedata_o => mem_writedata,
244+
m_avm_response_i => mem_response,
245+
m_avm_writeresponsevalid_i => mem_writeresponsevalid
246+
); -- i_axi_avalon
247+
248+
i_avm_memory : entity work.avm_memory
249+
generic map (
250+
G_ADDRESS_SIZE => 20,
251+
G_DATA_SIZE => 64
252+
)
253+
port map (
254+
clk_i => clk,
255+
rst_i => rst,
256+
avm_address_i => mem_address,
257+
avm_byteenable_i => mem_byteenable,
258+
avm_burstcount_i => X"01",
259+
avm_read_i => mem_read,
260+
avm_readdata_o => mem_readdata,
261+
avm_readdatavalid_o => mem_readdatavalid,
262+
avm_waitrequest_o => mem_waitrequest,
263+
avm_write_i => mem_write,
264+
avm_writedata_i => mem_writedata
265+
); -- i_avm_memory
266+
267+
end architecture simulation;
268+

0 commit comments

Comments
 (0)
Please sign in to comment.