Files
retroSoC/tests/rtl/tc_sram_1024x32_tb.sv
T
maksyuki 71d52f357e feat: Add support for SKY130 OpenRAM SRAM integration
- Introduced  to handle the preparation of the SKY130 OpenRAM SRAM views.
- Updated  to download and prepare the SRAM archive during PDK setup.
- Enhanced OpenSTA and Yosys configurations to accommodate SRAM macro integration.
- Added Verilog simulation models for GF180 and SKY130 SRAM macros.
- Implemented tests for SRAM setup and validation, ensuring correct integration and functionality.
- Updated various Makefiles and scripts to support SRAM size and macro configurations.
2026-08-25 12:55:47 +08:00

86 lines
2.2 KiB
Systemverilog

`timescale 1ns / 1ps
module tc_sram_1024x32_tb;
logic clk_i = 1'b0;
logic cs_i = 1'b0;
logic [ 9:0] addr_i = '0;
logic [31:0] data_i = '0;
logic [ 3:0] mask_i = '0;
logic wren_i = 1'b0;
logic [31:0] data_o;
always #5 clk_i = ~clk_i;
tc_sram_1024x32 u_dut (
.clk_i (clk_i),
.cs_i (cs_i),
.addr_i(addr_i),
.data_i(data_i),
.mask_i(mask_i),
.wren_i(wren_i),
.data_o(data_o)
);
task automatic write_word(input logic [9:0] address, input logic [31:0] data,
input logic [3:0] mask);
begin
@(negedge clk_i);
cs_i = 1'b1;
addr_i = address;
data_i = data;
mask_i = mask;
wren_i = 1'b1;
@(posedge clk_i);
@(negedge clk_i);
cs_i = 1'b0;
wren_i = 1'b0;
mask_i = '0;
end
endtask
task automatic read_word(input logic [9:0] address, input logic [31:0] expected);
begin
@(negedge clk_i);
cs_i = 1'b1;
addr_i = address;
wren_i = 1'b0;
@(posedge clk_i);
@(negedge clk_i);
if (data_o !== expected) begin
$fatal(1, "1024x32 SRAM data=%08x expected=%08x", data_o, expected);
end
cs_i = 1'b0;
end
endtask
task automatic expect_read_hold(input logic [9:0] idle_address, input logic [31:0] expected);
begin
@(negedge clk_i);
cs_i = 1'b0;
addr_i = idle_address;
@(posedge clk_i);
@(negedge clk_i);
if (data_o !== expected) begin
$fatal(1, "1024x32 SRAM held data=%08x expected=%08x", data_o, expected);
end
end
endtask
initial begin
write_word(10'h000, 32'hCAFE_BABE, 4'hF);
write_word(10'h155, 32'h1122_3344, 4'hF);
write_word(10'h155, 32'hAABB_CCDD, 4'b0101);
write_word(10'h1FF, 32'h0102_0304, 4'hF);
write_word(10'h200, 32'h1122_3344, 4'hF);
write_word(10'h3FF, 32'hA5A5_5A5A, 4'hF);
read_word(10'h000, 32'hCAFE_BABE);
read_word(10'h155, 32'h11BB_33DD);
read_word(10'h1FF, 32'h0102_0304);
expect_read_hold(10'h200, 32'h0102_0304);
read_word(10'h200, 32'h1122_3344);
read_word(10'h3FF, 32'hA5A5_5A5A);
$display("1024x32 SRAM wrapper test passed");
$finish;
end
endmodule