Files
retroSoC/tests/rtl/mgmt_debug_reset_tb.sv
T
maksyuki 6cff6102a4 feat: add management debug reset and JTAG integration for Hazard3
- Implemented  module to handle debug reset requests, ensuring proper synchronization with the AHB-Lite bridge.
- Created  to integrate JTAG-DTM and Debug Module, facilitating abstract command exposure.
- Updated  and  modules to include JTAG interface signals.
- Enhanced the development environment with scripts for running debug sessions using OpenOCD and GDB.
- Added tests for management debug reset functionality and JTAG integration, ensuring correct behavior under various scenarios.
- Updated SDC generation to include JTAG clock domain and port requirements.
- Modified various scripts to support new debug features and ensure compatibility with the Hazard3 architecture.
2026-08-05 22:30:11 +08:00

74 lines
1.8 KiB
Systemverilog

`timescale 1ns / 1ps
module mgmt_debug_reset_tb;
logic s_clk;
logic s_rst_n;
logic s_reset_req;
logic s_bridge_idle;
logic s_core_rst_n;
logic s_reset_done;
always #5 s_clk = ~s_clk;
mgmt_debug_reset u_mgmt_debug_reset (
.clk_i (s_clk),
.rst_n_i (s_rst_n),
.reset_req_i (s_reset_req),
.bridge_idle_i(s_bridge_idle),
.core_rst_n_o (s_core_rst_n),
.reset_done_o (s_reset_done)
);
initial begin
s_clk = 1'b0;
s_rst_n = 1'b0;
s_reset_req = 1'b0;
s_bridge_idle = 1'b1;
repeat (2) @(posedge s_clk);
s_rst_n = 1'b1;
repeat (4) @(posedge s_clk);
#1;
assert (s_core_rst_n && s_reset_done)
else $fatal(1, "initial reset release failed");
s_bridge_idle = 1'b0;
s_reset_req = 1'b1;
@(posedge s_clk);
s_reset_req = 1'b0;
repeat (2) @(posedge s_clk);
#1;
assert (s_core_rst_n && !s_reset_done)
else $fatal(1, "request did not wait for idle");
s_bridge_idle = 1'b1;
@(posedge s_clk);
#1;
assert (!s_core_rst_n && !s_reset_done)
else $fatal(1, "core reset did not assert");
repeat (4) @(posedge s_clk);
#1;
assert (s_core_rst_n && s_reset_done)
else $fatal(1, "core reset did not release");
s_reset_req = 1'b1;
repeat (2) @(posedge s_clk);
#1;
assert (!s_core_rst_n && !s_reset_done)
else $fatal(1, "held reset did not assert");
repeat (3) @(posedge s_clk);
#1;
assert (!s_core_rst_n && !s_reset_done)
else $fatal(1, "held reset released too early");
s_reset_req = 1'b0;
repeat (4) @(posedge s_clk);
#1;
assert (s_core_rst_n && s_reset_done)
else $fatal(1, "held reset did not release");
$display("management debug reset test passed");
$finish;
end
endmodule