verilog - 线输出在verilog仿真代码中什么也不显示
问题描述
它是一个简单的异步 2 位计数器,使用了两个 JK 触发器。
这是我的 TwoBitCounter.v
脚本。
`timescale 1ns / 1ps
module TwoBitCounter(
input wire clk,
output wire q0,
output wire q1
);
JK jk1(1, 1, clk, q0);
JK jk2(1, 1, q0, q1);
endmodule
module JK(
input wire J,
input wire K,
input wire clk,
output reg out
);
always @(posedge clk) begin
if(J==0&&K==0)
begin end
else if(J==0&&K==1) begin
out <= 1'b0;
end else if(J==1&&K==0) begin
out <= 1'b1;
end else if(J==1&&K==1) begin
out <= ~out;
end
end
endmodule
这是我的模拟代码:
`timescale 1ns / 1ps
module TwoBitCounter_sim();
reg clk;
wire q0;
wire q1;
TwoBitCounter twoBitCounter(.clk(clk), .q0(q0));
initial clk = 1'b0;
always clk = #100 ~clk;
initial begin
#1000;
$finish;
end
endmodule
我已经检查过 JK 模块是否可以单独正常工作。我尝试禁用一个 JK 触发器,看看它在TwoBitCounter
模块中实现时是否没有错误,它也没有工作。虽然我已经检查了几次,看看算法本身是否有问题,但不知道根本问题是什么。
解决方案
在您的代码中J/K
,您只使用一种组合:1/1
. 在这种状态下,您只需反转out
(out <= ~out)。但是,您从未对其进行初始化。你out
最初是x
有价值的。的倒置x
也是x
。所以,它永远不会改变。
您需要找到一种方法来通过操纵 J/K 值或通过其他方式来初始化触发器。
举个例子,initial out = 0;
在JK模块中添加会改变图片,但是不能很好的配合合成。所以,你需要自己想办法。
推荐阅读
- python - 来自运行 LDA 模型的 gensim 的 AttributeError
- spring-boot - 我可以为一个场景禁用我的资源服务器并为同一项目中的其他场景启用它吗
- excel - 读取存储过程主体的工作表内容并在 oracle 中创建
- arrays - 如何将数组推送到嵌入式 mongo 集合?
- ajax - 在 Chrome 浏览器中加载 iframe 内容
- java - 为什么返回的通用列表在 intellij idea 中是合法的
- xamarin - Xamarin Android:导航单击侦听器停止处理方向更改
- c# - 复选框选中的更改将禁用另一个复选框
- jquery - Bootstrap 4,如何在从容器 1 中选择时显示容器 2 中的列表组项目
- javascript - 如何在 Angular 中将标签与它们之外的表单字段相关联?