我如何为多个模块编写测试平台?

How can i writing test bench for multiple module?

我是这个领域的新手, 我不知道他们以前是否被问过。 我正在通过创建单独的模块来编写代码以适应大型项目。 我创建模块没有问题,但我不知道如何创建 testbench.So 我应该根据主模块编写测试平台。 但主模块是参考 3 个独立模块创建的。 以下代码的测试平台应该如何? 你能帮我看看这段代码吗?

//location of the main program

module circuit1_main(A,sel_m,Q);

input [2:0]A;
input sel_m;
output Q;
wire clk_m,reset_m,ud_m,load_m;

wire [2:0]A;
wire sel_m;
wire Q;

wire internal1;
wire internal2;
wire internal3;
wire internal4;

circuit1_counter cnt1(.clk(clk_m),.reset(reset_m),
                 .en(1'b1),.ud(ud_m),.load(load_m),
                      .d(A),.cnt(internal1));

assign internal2 = ~internal1;


circuit1_mux mux1(.a(internal1),.b(internal2),
                  .sel(sel_m),.out(internal3));


circuit1_shiftreg shiftreg1(.clk(clk_m),.reset(reset_m),
                            .sin(internal3),.sout(internal4));

assign Q = internal4;

endmodule

我有一些坏消息要告诉你:你真的不能为你的 'circuit1_main' 写一个测试平台,因为它已经坏了。

您的模块有许多内部信号:clk_m,reset_m,ud_m,load_m; 应该都来自外部。它们都应该是您必须从测试台驱动的输入端口。

我怀疑,从名称 'main' 的用法来看,您更习惯于使用 C、C++ 或其他标准编程语言。认识到编写 HDL 是相当不同的,这一点非常重要。因此,我建议您查看一些现有的 HDL 代码。
我知道互联网上到处都是 FIFO、UART、计数器等的 HDL 示例,但是测试平台很少而且相差甚远,Here 是一个代码为 的平台随附的测试台。

我还建议您不要将代码拆分成非常非常小的模块:您的 circuit1_mux 将是一行代码:assign out = sel ? a : b ;1 编写一个模块并将其连接起来比使用那一行代码多十倍的工作量并且更少混淆。当 sel_m 为高时,out 等于 ab 吗?

1替换您的端口名称可以使它`assign internal3 = sel_m?内部1:内部2;这让任何人立即清楚 sel_m 选择了 internal1 案例。