@@ -9,7 +9,9 @@ use ieee.std_logic_1164.all;
99
1010use work.queue_pkg.all ;
1111use work.logger_pkg.all ;
12+ use work.checker_pkg.all ;
1213use work.memory_pkg.all ;
14+ use work.sync_pkg.all ;
1315context work.com_context;
1416use work.axi_statistics_pkg.all ;
1517
@@ -29,9 +31,12 @@ package axi_slave_pkg is
2931 p_actor : actor_t;
3032 p_memory : memory_t;
3133 p_logger : logger_t;
34+ p_checker : checker_t;
35+ p_fail_on_unexpected_msg_type : boolean ;
3236 end record ;
3337
3438 constant axi_slave_logger : logger_t := get_logger(" vunit_lib:axi_slave_pkg" );
39+ constant axi_slave_checker : checker_t := new_checker(axi_slave_logger);
3540 impure function new_axi_slave(memory : memory_t;
3641 address_fifo_depth : positive := 1 ;
3742 write_response_fifo_depth : positive := 1 ;
@@ -41,7 +46,12 @@ package axi_slave_pkg is
4146 write_response_stall_probability : probability_t := 0.0 ;
4247 min_response_latency : delay_length := 0 ns ;
4348 max_response_latency : delay_length := 0 ns ;
44- logger : logger_t := axi_slave_logger) return axi_slave_t;
49+ logger : logger_t := axi_slave_logger;
50+ actor : actor_t := null_actor;
51+ checker : checker_t := null_checker;
52+ fail_on_unexpected_msg_type : boolean := true ) return axi_slave_t;
53+
54+ impure function as_sync(axi_slave : axi_slave_t) return sync_handle_t;
4555
4656 -- Get the logger used by the axi_slave
4757 function get_logger(axi_slave : axi_slave_t) return logger_t;
@@ -145,9 +155,29 @@ package body axi_slave_pkg is
145155 write_response_stall_probability : probability_t := 0.0 ;
146156 min_response_latency : delay_length := 0 ns ;
147157 max_response_latency : delay_length := 0 ns ;
148- logger : logger_t := axi_slave_logger) return axi_slave_t is
158+ logger : logger_t := axi_slave_logger;
159+ actor : actor_t := null_actor;
160+ checker : checker_t := null_checker;
161+ fail_on_unexpected_msg_type : boolean := true ) return axi_slave_t is
162+ variable p_memory : memory_t;
163+ variable p_actor : actor_t;
164+ variable p_checker : checker_t;
149165 begin
150- return (p_actor => new_actor,
166+ p_memory := memory when memory /= null_memory else to_vc_interface(new_memory, logger);
167+
168+ p_actor := actor when actor /= null_actor else new_actor;
169+
170+ if checker = null_checker then
171+ if logger = axi_slave_logger then
172+ p_checker := axi_slave_checker;
173+ else
174+ p_checker := new_checker(logger);
175+ end if ;
176+ else
177+ p_checker := checker;
178+ end if ;
179+
180+ return (p_actor => p_actor,
151181 p_initial_address_fifo_depth => address_fifo_depth,
152182 p_initial_write_response_fifo_depth => write_response_fifo_depth,
153183 p_initial_check_4kbyte_boundary => check_4kbyte_boundary,
@@ -156,8 +186,15 @@ package body axi_slave_pkg is
156186 p_initial_write_response_stall_probability => write_response_stall_probability,
157187 p_initial_min_response_latency => min_response_latency,
158188 p_initial_max_response_latency => max_response_latency,
159- p_memory => to_vc_interface(memory, logger),
160- p_logger => logger);
189+ p_memory => p_memory,
190+ p_logger => logger,
191+ p_checker => p_checker,
192+ p_fail_on_unexpected_msg_type => fail_on_unexpected_msg_type);
193+ end ;
194+
195+ impure function as_sync(axi_slave : axi_slave_t) return sync_handle_t is
196+ begin
197+ return axi_slave.p_actor;
161198 end ;
162199
163200 function get_logger(axi_slave : axi_slave_t) return logger_t is
0 commit comments