Skip to content

Commit 5a9b915

Browse files
Added areset_n signal to axi_master write
1 parent cf81eda commit 5a9b915

File tree

2 files changed

+45
-18
lines changed

2 files changed

+45
-18
lines changed

vunit/vhdl/verification_components/src/axi_master.vhd

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ begin
230230
drive_ar_invalid;
231231

232232
elsif is_write(msg_type) then
233-
while rnd.Uniform(0.0, 1.0) > axi_master_handle.p_write_high_probability loop
234-
wait until rising_edge(aclk);
233+
while rnd.Uniform(0.0, 1.0) > axi_master_handle.p_write_high_probability and areset_n = '1' loop
234+
wait until rising_edge(aclk) or areset_n = '0';
235235
end loop;
236236

237237
addr := pop_std_ulogic_vector(request_msg);
@@ -287,7 +287,11 @@ begin
287287
wlast <= '1' when len = 0 else '0';
288288

289289
while not (w_done and aw_done) loop
290-
wait until ((awvalid and awready) = '1' or (wvalid and wready) = '1') and rising_edge(aclk);
290+
wait until (((awvalid and awready) = '1' or (wvalid and wready) = '1') and rising_edge(aclk)) or areset_n = '0';
291+
292+
if areset_n = '0' then
293+
exit;
294+
end if;
291295

292296
if (awvalid and awready) = '1' then
293297
awvalid <= '0';
@@ -319,10 +323,12 @@ begin
319323

320324
end loop;
321325

322-
push_std_ulogic_vector(request_msg, addr);
323-
push_std_ulogic_vector(request_msg, id);
324-
push_std_ulogic_vector(request_msg, resp);
325-
push(write_reply_queue, request_msg);
326+
if areset_n = '1' then
327+
push_std_ulogic_vector(request_msg, addr);
328+
push_std_ulogic_vector(request_msg, id);
329+
push_std_ulogic_vector(request_msg, resp);
330+
push(write_reply_queue, request_msg);
331+
end if;
326332

327333
else
328334
unexpected_msg_type(msg_type);
@@ -417,18 +423,20 @@ begin
417423

418424
bready <= '1';
419425
wait until (bvalid and bready) = '1' and rising_edge(aclk);
420-
bready <= '0';
426+
if areset_n = '1' then
427+
bready <= '0';
421428

422-
request_msg := pop(write_reply_queue);
423-
msg_type := message_type(request_msg);
424-
addr := pop_std_ulogic_vector(request_msg);
425-
id := pop_std_ulogic_vector(request_msg);
426-
resp := pop_std_ulogic_vector(request_msg);
429+
request_msg := pop(write_reply_queue);
430+
msg_type := message_type(request_msg);
431+
addr := pop_std_ulogic_vector(request_msg);
432+
id := pop_std_ulogic_vector(request_msg);
433+
resp := pop_std_ulogic_vector(request_msg);
427434

428-
check_axi_id(axi_master_handle.p_bus_handle, bid, id, "bid");
429-
check_axi_resp(axi_master_handle.p_bus_handle, bresp, resp, "bresp");
435+
check_axi_id(axi_master_handle.p_bus_handle, bid, id, "bid");
436+
check_axi_resp(axi_master_handle.p_bus_handle, bresp, resp, "bresp");
430437

431-
delete(request_msg);
438+
delete(request_msg);
439+
end if;
432440
end process;
433441

434442
end architecture;

vunit/vhdl/verification_components/test/tb_axi_master.vhd

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,31 @@ begin
277277
wait until rising_edge(arvalid);
278278
areset_n <= '0' after 2ns;
279279
wait until rising_edge(clk);
280-
check_equal(arvalid, '0', "ARVALID not 0 when ARESET_N low");
280+
check_equal(arvalid, '0', "ARVALID 0 when ARESET_N low");
281281
wait until rising_edge(clk);
282282
info(tb_logger, "Release reset asyncron...");
283283
areset_n <= '1' after 0ps;
284284
wait until rising_edge(clk);
285-
check_equal(arvalid, '0', "ARVALID not 0 after ARESET_N low");
285+
check_equal(arvalid, '0', "ARVALID 0 after ARESET_N low");
286+
elsif run("Test write asyncron reset") then
287+
info(tb_logger, "Setup...");
288+
burst := 1;
289+
setup_and_set_random_data_write_memory(memory, burst, wdata'length, memory_data_queue);
290+
info(tb_logger, "Reading...");
291+
write_axi(net, axi_master_handle.p_bus_handle, x"00000000", pop(memory_data_queue), "001", x"25", axi_resp_okay);
292+
info(tb_logger, "Sync on clk edge...");
293+
wait until rising_edge(clk);
294+
info(tb_logger, "Set reset asyncron...");
295+
wait until rising_edge(awvalid);
296+
areset_n <= '0' after 2ns;
297+
wait until rising_edge(clk);
298+
check_equal(arvalid, '0', "AWVALID 0 when ARESET_N low");
299+
wait until rising_edge(clk);
300+
info(tb_logger, "Release reset asyncron...");
301+
areset_n <= '1' after 0ps;
302+
wait until rising_edge(clk);
303+
check_equal(awvalid, '0', "AWVALID 0 after ARESET_N low");
304+
check_equal(wvalid, '0', "WVALID 0 after ARESET_N low");
286305
end if;
287306

288307
wait for 100 ns;

0 commit comments

Comments
 (0)