verilog - 我如何编写这个 verilog 测试平台?
问题描述
我正在使用 Vivado 尝试为我为 FSM 编写的一些 Verilog 代码编写测试平台。这是我从状态图中得出的时序图:
.
以下是我到目前为止的内容:
module testbench();
reg X_tb, clk_tb, rstn_tb;
wire S_tb, V_tb;
statemachine statemachine_tb(X_tb, clk_tb, rstn_tb, S_tb, V_tb);
initial begin
#10 X_tb = 0;
end
endmodule
如果X_tb
和clk_tb
是输入并且S_tb
和V_tb
是输出,我如何包括时间S_tb
和V_tb
?我不断收到错误消息,说我不能使用wire
变量。
解决方案
S_tb
并且V_tb
是由设计模块断言的预期输出,在这种情况下是“状态机”。测试台包含设计,它充当您设计的激励。在这种情况下,您将应用输入,例如
initial
begin
rstn_tb = 0; //assuming an active low reset
clk_tb = 0;
#10 X_tb = 0;
end
always
#5 clk_tb = ~clk_tb; //generates a clock having a frequency of 100MHz
上述输入被传递到状态机模块,并响应状态机模块生成一些结果,该结果在端口S_tb
&处接收V_tb
。
此外,在实例化模块时,最好使用点名约定,例如
module half_add(a,b,sum,carry); //half adder, partially written
input a,b;
output sum,carry;
//logic
endmodule
module full_add(a,b,cin,sum,carry)
input a,b,cin;
output sum,carry;
//wires are not declared
//instantiating half_add
half_add h1(.a(w1),
.b(w2),
.sum(sum1),
.carry(carry1)
);
half_add h2(
//similar call as h1 instance
);
endmodule
如果我像下面这样实例化模块,上述类型的实例现在可以避免错误
half_add h1(w1,
w2,
sum1,
carry1
);
这里的端口是根据位置连接的,写这个的时候可能会出错,就像不小心写的一样
half_add h1(w1,
w2,
carry1,
sum1
);
这将导致carry1
连接到半加器模块的和端口,从而导致错误输出。因此,我建议您避免这种类型的实例调用。我想这可能是错误的原因。
推荐阅读
- asp.net-mvc - 如何在 Asp.net MVC 中更新列表视图模型
- swift - EXC_BAD_ACCESS 在设备上,但在模拟器上工作
- linux - 使用 printf linux 格式化
- python - 使用 Flask Python 将图像从目录显示到 html 页面
- angular - 带有撇号的角度电子邮件模式正则表达式验证,即'
- azure - 条件依赖
- python - 停止 PabotLib 进程后,Jenkins 工作卡住了
- android - 在 Android Studio 上工作时自定义首选项没有自动完成功能?重构不适用于自定义视图属性
- excel - 从不同的单元格中查找值并将它们存储在一个单元格中
- android - 为什么我的设备总是从 Android Studio 中消失?