Files
IC_PRJ/tb/tb_array_mux.v

100 lines
3.3 KiB
Verilog
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

`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