`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