Files
retroSoC/tests/rtl/mgmt_debug_reset_tb.sv
T
maksyuki b5cbc89928 feat: add Tiny R2 reset distribution and feasibility analysis
- Implemented a new TCL script for Tiny R2 feasibility checks, reporting clock properties, path delays, and reset loads.
- Created a SystemVerilog module for the Tiny R2 reset tree, managing multiple reset signals for the system and its leaves.
- Developed a Python script for capturing and analyzing feasibility metrics, ensuring compliance with reset-load and clock frequency requirements.
- Added testbenches for the Tiny R2 reset tree and FIFO, validating reset behavior and timing contracts.
- Introduced unit tests for feasibility analysis, ensuring correct handling of clock rates and reset load conditions.
2026-10-06 14:28:52 +08:00

78 lines
1.9 KiB
Systemverilog

`timescale 1ns / 1ps
module mgmt_debug_reset_tb #(
parameter int ResetSyncStages = 3
);
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 #(
.ResetSyncStages(ResetSyncStages)
) 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 (ResetSyncStages + 1) @(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 (ResetSyncStages + 1) @(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 (ResetSyncStages + 1) @(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