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)
beginif({r,s}==2'b01)beginq<=0;qn<=1;endelse if({r,s}==2'b10)begin q<=1;qn<=0;endelse if({r,s}==2'b00)begin q<=q;qn<=qn;endelse if({r,s}==2'b11)begin if({j,k}==2'b00)begin q<=q;qn<=qn;endelse if({j,k}==2'b01)begin q<=0;qn<=1;endelse if({j,k}==2'b10)begin q<=1;qn<=0;endelse if({j,k}==2'b11)begin q<=~q;qn<=~qn;endendend
endmodule
四、Modelsim仿真代码
`timescale 1ns / 1nsmodule 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 begincp = 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);endendmodule