verilog - 为什么 SR 锁存器输出总是 X?
问题描述
我正在使用 Verilog 实现没有时钟信号的 SR 锁存器。我正在尝试使用下面给出的代码,但我得到了Qb
X 的值。请帮助我。
// design.v file
module sr_latch(q,qb,s,r);// module declaration
input s,r;
output q,qb;
assign qb=~q;
nand (q,s,qb);
nand (qb,r,q);
endmodule
// testbench.v file
module stimulus;
reg set,reset;
wire Q,Qb;
sr_latch mylatch(Q,Qb,set,rest);
initial
begin
$dumpfile("dump.vcd");
$dumpvars;
$monitor($time,"set=%b,reset=%b,Q=%b,Qb=%b\n",set,reset,Q,Qb);
set=0; reset=0;
#5 set=0; reset=1;
#5 set=1; reset=0;
#5 set=1; reset=1;
end
endmodule
结果:
0set=0,reset=0,Q=1,Qb=x
5set=0,reset=1,Q=1,Qb=x
10set=1,reset=0,Q=x,Qb=x
15set=1,reset=1,Q=x,Qb=x
解决方案
您的代码中有 2 个错误。
在您的设计文件中,您有 2 个qb
信号驱动程序,但您应该只有 1 个。您应该删除以下行:
assign qb=~q;
您在测试台中有错字;我在 edaplayground 上的一个模拟器中收到了一个编译警告。你拼错reset
了rest
。改变:
sr_latch mylatch(Q,Qb,set,rest);
至:
sr_latch mylatch(Q,Qb,set,reset);
结果:
0set=0,reset=0,Q=1,Qb=1
5set=0,reset=1,Q=1,Qb=0
10set=1,reset=0,Q=0,Qb=1
15set=1,reset=1,Q=0,Qb=1
推荐阅读
- python - 将格式化为元组列表的字符串转换为元组列表
- php - 为什么我的 Laravel 8.0 会话不起作用?
- excel - 将点击事件添加到命令按钮
- php - 如何更改索引页面中包含的获取页面的 SQL 查询
- openoffice-calc - 如何从另一个文档运行脚本
- java - 如何在android studio的工作管理器类上添加一个带有onclicklistener的按钮?
- boto3 - Boto3 MTurk 具有资格的工人数量与网站上的不同
- asp.net - ASP.NET 位图转图像
- python - 根据模型中的数据在 django cms 中创建页面树节点
- javascript - 处理嵌套条件渲染的最佳方法是什么?