verilog - 如何为多个模块编写测试平台?
问题描述
我是这个领域的新手,我不知道他们之前是否被问过。我通过创建单独的模块来编写代码以适应大型项目。我创建模块没有问题,但我不知道如何创建测试平台。所以我应该根据主模块编写测试平台。但主模块是参考 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、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 案例的人立即清楚。
推荐阅读
- python-3.x - 字符串中的字节到字节
- r - 使用逗号分隔的标签列表拆分数据框列
- html - 锚标签 ( ) 上的 rel="home" 有什么帮助吗?
- intellij-idea - 在 Intellij 中隐藏方法的重载
- python - 在使用 Popen 创建的进程中使用 Popen 不会执行任何操作
- regex - 正则表达式 - 匹配集合必须使用整个字符串
- spring-annotations - 将值从 Spring 元注释传递到另一个注释
- react-native - 对版本的导航问题做出反应
- typo3 - TYPO3 扩展 - f:uri.resource 返回错误的路径
- hadoop - 如何将格式为“dd.mm.aaaa”的字符串转换为 Hive 中的数据类型?