这是我的JK_FF代码:
module JK_FF(j,k,clk,Q);
input j,k,clk;
output reg Q;
always @(posedge clk)
begin
if (j==0 && k==0)
Q=Q;
else if (j==0 && k==1)
Q=0;
else if (j==1 && k==0)
Q=1;
else
Q=~Q;
end
endmodule
这是我的分频器
module freqDivider(clk,Q);
input clk;
output reg Q;
reg j2;
JK_FF f1(.j(~Q),.k(0),.clk(clk),.Q(j2));
JK_FF f2(.j(j2),.k(0),.clk(clk),.Q(Q));
endmodule
这是电路:
输出不正确,总是1:
我的代码出了什么问题?
在答复后编辑(已解决):
如此愚蠢的错误,让VCC与JND混淆!!我将.k(0)改为.k(1),结果如下:
答案 0 :(得分:1)
使用JK-FlipFlop,并且k
绑定为0,您只能设置输出或维持状态。
JK状态表是:
J K | Q
--------
0 0 | Q (Maintain)
0 1 | 0 (Reset)
1 0 | 1 (Set)
1 1 | ~Q (Toggle)
将k绑定为0,您现在拥有:
J K | Q
--------
0 0 | Q (Maintain)
1 0 | 1 (Set)
这就是为什么一旦你的输出达到1,它就会停留在那里。
虽然可以使用标准D类型轻松完成数字分频器。实际上是一个很好的小animation on wikipedia。或其他网站here。
基本上每个翻牌都将D连接到Q_BAR。和Q_BAR成为下一阶段的时钟。