Finish top-module(axi_slave array_ctrl apb_cfg): 2025-08-13 16:39:12
This commit is contained in:
100
tb/tb_array_mux.v
Normal file
100
tb/tb_array_mux.v
Normal file
@@ -0,0 +1,100 @@
|
||||
`timescale 1ns/1ps
|
||||
|
||||
module tb_array_mux;
|
||||
|
||||
// 输入信号定义
|
||||
reg array_wr_csn; // 写操作片选
|
||||
reg [15:0] array_wr_raddr; // 写操作地址
|
||||
reg array_rd_csn; // 读操作片选
|
||||
reg [15:0] array_rd_raddr; // 读操作地址
|
||||
reg array_ref_csn; // 刷新操作片选
|
||||
reg [15:0] array_ref_raddr; // 刷新操作地址
|
||||
reg [1:0] array_mux_sel; // 选择控制信号
|
||||
|
||||
// 输出信号定义
|
||||
wire array_csn; // 输出片选
|
||||
wire [15:0] array_raddr; // 输出地址
|
||||
|
||||
// 例化被测试模块
|
||||
array_mux uut (
|
||||
.array_wr_csn (array_wr_csn),
|
||||
.array_wr_raddr (array_wr_raddr),
|
||||
.array_rd_csn (array_rd_csn),
|
||||
.array_rd_raddr (array_rd_raddr),
|
||||
.array_ref_csn (array_ref_csn),
|
||||
.array_ref_raddr (array_ref_raddr),
|
||||
.array_mux_sel (array_mux_sel),
|
||||
.array_csn (array_csn),
|
||||
.array_raddr (array_raddr)
|
||||
);
|
||||
|
||||
// 初始化测试向量
|
||||
initial begin
|
||||
// 初始值设置
|
||||
array_wr_csn = 1'b0;
|
||||
array_wr_raddr = 16'h1234;
|
||||
array_rd_csn = 1'b1;
|
||||
array_rd_raddr = 16'h5678;
|
||||
array_ref_csn = 1'b0;
|
||||
array_ref_raddr = 16'h9ABC;
|
||||
array_mux_sel = 2'b00;
|
||||
|
||||
// 等待10ns,确保初始状态稳定
|
||||
#10;
|
||||
|
||||
// 测试场景1:选择刷新操作(2'b01)
|
||||
array_mux_sel = 2'b01;
|
||||
#10;
|
||||
$display("Test Case 1 (sel=01): csn=%b, addr=%h (Expected: csn=%b, addr=%h)",
|
||||
array_csn, array_raddr, array_ref_csn, array_ref_raddr);
|
||||
|
||||
// 测试场景2:选择写操作(2'b10)
|
||||
array_mux_sel = 2'b10;
|
||||
#10;
|
||||
$display("Test Case 2 (sel=10): csn=%b, addr=%h (Expected: csn=%b, addr=%h)",
|
||||
array_csn, array_raddr, array_wr_csn, array_wr_raddr);
|
||||
|
||||
// 测试场景3:选择读操作(2'b11)
|
||||
array_mux_sel = 2'b11;
|
||||
#10;
|
||||
$display("Test Case 3 (sel=11): csn=%b, addr=%h (Expected: csn=%b, addr=%h)",
|
||||
array_csn, array_raddr, array_rd_csn, array_rd_raddr);
|
||||
|
||||
// 测试场景4:默认情况(2'b00)
|
||||
array_mux_sel = 2'b00;
|
||||
#10;
|
||||
$display("Test Case 4 (sel=00): csn=%b, addr=%h (Expected: csn=1, addr=0000)",
|
||||
array_csn, array_raddr);
|
||||
|
||||
// 测试场景5:动态改变输入值,验证实时性
|
||||
array_ref_csn = 1'b1;
|
||||
array_ref_raddr = 16'hDEF0;
|
||||
array_mux_sel = 2'b01;
|
||||
#10;
|
||||
$display("Test Case 5 (sel=01 updated): csn=%b, addr=%h (Expected: csn=%b, addr=%h)",
|
||||
array_csn, array_raddr, array_ref_csn, array_ref_raddr);
|
||||
|
||||
// 测试场景6:覆盖所有可能的选择信号
|
||||
array_mux_sel = 2'b00; #5;
|
||||
array_mux_sel = 2'b01; #5;
|
||||
array_mux_sel = 2'b10; #5;
|
||||
array_mux_sel = 2'b11; #5;
|
||||
|
||||
// 结束仿真
|
||||
$finish;
|
||||
end
|
||||
|
||||
initial begin
|
||||
$fsdbDumpfile("tb.fsdb");
|
||||
$fsdbDumpvars(0,tb_array_mux,"+all");
|
||||
$vcdpluson;
|
||||
$vcdplusmemon;
|
||||
end
|
||||
|
||||
// 监控信号变化(可选,用于波形分析)
|
||||
initial begin
|
||||
$monitor("Time: %0t, sel=%b, csn=%b, addr=%h",
|
||||
$time, array_mux_sel, array_csn, array_raddr);
|
||||
end
|
||||
|
||||
endmodule
|
Reference in New Issue
Block a user