Files
IC_PRJ/tb/tb_array_mux.v

100 lines
3.3 KiB
Coq
Raw Permalink Normal View History

`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