Finish top-module(axi_slave array_ctrl apb_cfg): 2025-08-13 16:39:12
This commit is contained in:
103
tb/tb_array_ref.v
Normal file
103
tb/tb_array_ref.v
Normal file
@@ -0,0 +1,103 @@
|
||||
`timescale 1ns/1ps
|
||||
|
||||
module tb_array_ref();
|
||||
|
||||
// 输入信号定义
|
||||
reg clk;
|
||||
reg rst_n;
|
||||
reg array_ref_start;
|
||||
reg [7:0] array_inner_tras;
|
||||
reg [7:0] array_inner_trp;
|
||||
|
||||
// 输出信号定义
|
||||
wire array_ref_done;
|
||||
wire array_ref_csn;
|
||||
wire [15:0] array_ref_raddr;
|
||||
|
||||
// 实例化待测试模块
|
||||
array_ref uut (
|
||||
.clk (clk),
|
||||
.rst_n (rst_n),
|
||||
.array_ref_start (array_ref_start),
|
||||
.array_ref_done (array_ref_done),
|
||||
.array_ref_csn (array_ref_csn),
|
||||
.array_ref_raddr (array_ref_raddr),
|
||||
.array_inner_tras (array_inner_tras),
|
||||
.array_inner_trp (array_inner_trp)
|
||||
);
|
||||
|
||||
// 时钟生成:10ns周期(100MHz)
|
||||
initial begin
|
||||
clk = 0;
|
||||
forever #1.25 clk = ~clk;
|
||||
end
|
||||
|
||||
// 主测试流程
|
||||
initial begin
|
||||
// 初始化信号
|
||||
rst_n = 0;
|
||||
array_ref_start = 0;
|
||||
array_inner_tras = 8'd2; // RAS周期为2个时钟
|
||||
array_inner_trp = 8'd1; // RP周期为1个时钟
|
||||
|
||||
// 复位释放
|
||||
#20;
|
||||
rst_n = 1;
|
||||
#10;
|
||||
|
||||
// 启动刷新操作
|
||||
@(posedge clk);
|
||||
array_ref_start = 1;
|
||||
@(posedge clk);
|
||||
array_ref_start = 0; // 释放启动信号
|
||||
|
||||
// 等待刷新完成(全地址遍历)
|
||||
wait(array_ref_done);
|
||||
$display("=== 第一次完整刷新完成 ===");
|
||||
#50;
|
||||
|
||||
// // 测试不同的tras和trp参数
|
||||
// array_inner_tras = 8'd3;
|
||||
// array_inner_trp = 8'd2;
|
||||
// @(posedge clk);
|
||||
// array_ref_start = 1;
|
||||
// @(posedge clk);
|
||||
// array_ref_start = 0;
|
||||
|
||||
// wait(array_ref_done);
|
||||
// $display("=== 第二次完整刷新完成 ===");
|
||||
// #50;
|
||||
|
||||
// // 测试中途复位
|
||||
// @(posedge clk);
|
||||
// array_ref_start = 1;
|
||||
// @(posedge clk);
|
||||
// array_ref_start = 0;
|
||||
// #30;
|
||||
// rst_n = 0;
|
||||
// #20;
|
||||
// rst_n = 1;
|
||||
// $display("=== 复位测试完成 ===");
|
||||
|
||||
// 结束仿真
|
||||
#100;
|
||||
$display("=== 仿真结束 ===");
|
||||
$finish;
|
||||
end
|
||||
|
||||
initial begin
|
||||
$fsdbDumpfile("tb.fsdb");
|
||||
$fsdbDumpvars(0,tb_array_ref,"+all");
|
||||
$vcdpluson;
|
||||
$vcdplusmemon;
|
||||
end
|
||||
// 监控信号变化
|
||||
initial begin
|
||||
$monitor(
|
||||
"Time: %0t, State: %b, raddr: %h, csn: %b, done: %b, ras_cnt: %h, rp_cnt: %h",
|
||||
$time, uut.cur_state, array_ref_raddr, array_ref_csn, array_ref_done,
|
||||
uut.ref_ras_cnt, uut.ref_rp_cnt
|
||||
);
|
||||
end
|
||||
|
||||
endmodule
|
Reference in New Issue
Block a user