用JK触发器实现Verilog分频器
这是我的JK_FF代码:用JK触发器实现Verilog分频器,verilog,computer-architecture,Verilog,Computer Architecture,这是我的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
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),结果是:
使用JK触发器,并且
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型完成。实际上有一点点。或其他网站
基本上每个触发器都将D连接到Q_条。Q_栏成为下一阶段的时钟。您的测试台是什么样子的?内部信号j2如何工作?为什么模块和原理图之间的
k
连接不同?@JoeHass O!!!:-哦!!你的权利,我混淆了VCC和JND:-O!!我现在能做什么?我应该删除我的问题吗??!!这么愚蠢的问题!!:((:'(顺便说一句,谢谢Joe;)如果我将.k(0)改为.k(1)它像原理图一样吗?@DEopen,k应该以的形式连接。k(1'b1)
.k(1)
将给出正确的结果,但应该给出宽度不匹配警告,因为它推断.k(32'd1)
(连接到1位端口的32位输入)。建议在您的设计中使用显式宽度和基数。您应该在用于模拟触发器的always块中使用非阻塞语句。谢谢@Morgan,事实上,我的老师让我为该原理图编写verilog描述,我将.k(0)更改为.k(1),它现在可以工作了,犯了一个愚蠢的错误,将VCC与JND混淆了!!!