100 lines
3.3 KiB
Coq
100 lines
3.3 KiB
Coq
![]() |
`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
|