JK触发器由于其灵活的逻辑功能,被广泛应用于数字电路设计中,如计数器、寄存器、序列信号发生器等。它可以通过改变J和K的输入来实现不同的逻辑操作,使得设计更加简洁高效。
在数字电子技术中,JK触发器的真值表是理解其工作原理和设计应用的基础。通过分析JK触发器的真值表,我们可以清晰地知道在不同输入条件下,触发器的输出状态如何变化,从而在实际电路设计中合理地应用JK触发器。
一、JK触发器的真值表
输入信号:置数端是;清零端r;时钟信号cp;J端和K端。输出信号:q,qn
二、电路符号
三、Verilog HDL语言
module JK(q,qn,j,k,r,s,cp);
output q,qn;
input j,k,r,s,cp;
reg q,qn;
always @(posedge cp)
begin
if({r,s}==2'b01)
begin
q<=0;qn<=1;end
else if({r,s}==2'b10)
begin
q<=1;qn<=0;end
else if({r,s}==2'b00)
begin
q<=q;qn<=qn;end
else if({r,s}==2'b11)
begin
if({j,k}==2'b00)
begin
q<=q;qn<=qn;end
else if({j,k}==2'b01)
begin
q<=0;qn<=1;end
else if({j,k}==2'b10)
begin
q<=1;qn<=0;end
else if({j,k}==2'b11)
begin
q<=~q;qn<=~qn;end
end
end
endmodule
四、Modelsim仿真代码
`timescale 1ns / 1ns
module JK_tb;
reg j;
reg k;
reg r;
reg s;
reg cp;
wire q;
wire qn;
// 实例化待测试模块
JK uut (
.q(q),
.qn(qn),
.j(j),
.k(k),
.r(r),
.s(s),
.cp(cp)
);
// 模拟时钟信号
initial begin
cp = 0;
forever #10 cp = ~cp; // 每10ns翻转一次,产生时钟信号
end
// 初始块,用于设置测试值
initial begin
// 初始化输入
j = 0; k = 0; r = 0; s = 0;
// 等待100ns让全局变量稳定
#20;
// 应用测试向量
// 测试向量1: r=0, s=1 (置0)
r = 0; s = 1;
#20; // 等待一个时钟周期
// 测试向量2: r=1, s=0 (置1)
r = 1; s = 0;
#20; // 等待一个时钟周期
// 测试向量3: r=0, s=0 (保持)
r = 0; s = 0;
#20; // 等待一个时钟周期
// 测试向量4: r=1, s=1 (通过j,k控制翻转)
r = 1; s = 1;
#20;
// 测试j,k的不同组合来观察翻转行为
// j=0, k=0 (保持)
j = 0; k = 0;
#20;
// j=0, k=1 (置0)
j = 0; k = 1;
#20;
// j=1, k=0 (置1)
j = 1; k = 0;
#20;
// j=1, k=1 (翻转)
j = 1; k = 1;
#20;
j = 0; k = 0;
#20;
// j=0, k=1 (置0)
j = 0; k = 1;
#20;
// j=1, k=0 (置1)
j = 1; k = 0;
#20;
// j=1, k=1 (翻转)
j = 1; k = 1;
#20;
// 测试完成,停止仿真
$finish;
end
// 显示变化的信号
initial begin
$monitor("Time=%t, j=%b, k=%b, r=%b, s=%b, cp=%b, q=%b, qn=%b",
$time, j, k, r, s, cp, q, qn);
end
endmodule