Files
retroSoC/tests/rtl/hp_lifecycle_controller_tb.sv
T
maksyuki 62d112c4e6 feat: add testbenches for on-chip RAM and resource controller, enhance AXI4 and APB4 support
- Introduced  to validate AXI4 interface for 64-bit on-chip SRAM.
- Added  to test resource controller functionality including ownership, IRQ handling, and cache handshake.
- Updated  to include resource controller interface.
- Enhanced  to cover additional IRQ scenarios.
- Added new tests in  for AXI4 target guard timeout and isolation.
- Updated  to reflect changes in the high-performance profile.
- Modified  to verify on-chip SRAM bank configurations.
- Added  for directed verification of resource controller.
- Updated  to check SDRAM mapped window coverage.
- Enhanced  to ensure correct IRQ mappings and APB target generation.
2026-08-30 19:50:22 +08:00

87 lines
2.3 KiB
Systemverilog

`timescale 1ns / 1ps
module hp_lifecycle_controller_tb;
logic clk_i = 1'b0;
logic rst_n_i = 1'b0;
logic release_req_i = 1'b0;
logic hp_idle_i = 1'b0;
logic flush_busy_i = 1'b0;
logic cache_clean_i = 1'b0;
logic hp_release_o;
logic block_new_o;
logic flush_o;
logic cache_request_o;
logic draining_o;
logic forced_fault_o;
always #5 clk_i = ~clk_i;
hp_lifecycle_controller u_dut (
.clk_i (clk_i),
.rst_n_i (rst_n_i),
.release_req_i (release_req_i),
.hp_idle_i (hp_idle_i),
.flush_busy_i (flush_busy_i),
.cache_clean_i (cache_clean_i),
.timeout_i (16'd4),
.hp_release_o (hp_release_o),
.block_new_o (block_new_o),
.flush_o (flush_o),
.cache_request_o(cache_request_o),
.draining_o (draining_o),
.forced_fault_o (forced_fault_o)
);
task automatic complete_flush;
begin
wait (flush_o);
@(negedge clk_i);
flush_busy_i = 1'b1;
wait (!flush_o);
repeat (2) @(negedge clk_i);
flush_busy_i = 1'b0;
wait (!hp_release_o);
end
endtask
initial begin
repeat (2) @(posedge clk_i);
rst_n_i = 1'b1;
@(negedge clk_i);
release_req_i = 1'b1;
wait (hp_release_o);
if (block_new_o || draining_o) $fatal(1, "released HP was unexpectedly blocked");
@(negedge clk_i);
release_req_i = 1'b0;
wait (cache_request_o);
if (block_new_o || !hp_release_o) begin
$fatal(1, "cache-maintenance phase blocked HP before acknowledgement");
end
cache_clean_i = 1'b1;
@(posedge clk_i);
@(negedge clk_i);
cache_clean_i = 1'b0;
repeat (2) @(negedge clk_i);
if (!block_new_o || !draining_o || !hp_release_o) begin
$fatal(1, "normal shutdown did not enter drain while HP remained released");
end
hp_idle_i = 1'b1;
complete_flush();
if (forced_fault_o || block_new_o) $fatal(1, "normal shutdown reported a forced fault");
@(negedge clk_i);
hp_idle_i = 1'b0;
release_req_i = 1'b1;
wait (hp_release_o);
@(negedge clk_i);
release_req_i = 1'b0;
wait (flush_o);
if (!forced_fault_o) $fatal(1, "quiesce timeout did not record a forced fault");
complete_flush();
$display("HP lifecycle drain, flush, and forced reset test passed");
$finish;
end
endmodule