JK触发器(Quartus与Modelsim联合仿真)

        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

五、仿真结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值