首页 > 解决方案 > 如何为多个模块编写测试平台?

问题描述

我是这个领域的新手,我不知道他们之前是否被问过。我通过创建单独的模块来编写代码以适应大型项目。我创建模块没有问题,但我不知道如何创建测试平台。所以我应该根据主模块编写测试平台。但主模块是参考 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

标签: verilogtest-bench

解决方案


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

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

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

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

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


推荐阅读