📜  JK触发器|计算机组织和架构教程(1)

📅  最后修改于: 2023-12-03 15:16:40.238000             🧑  作者: Mango

JK触发器 | 计算机组织和架构教程

JK触发器是最常用的触发器之一,也是最基本的一种触发器。它是由两个J-K触发器和一些逻辑门构成的,可以用来存储一个比特位。

J-K触发器的原理

在J-K触发器中,J,K分别是输入端。当J=1,K=0时,触发器会置位(set),将Q的输出设为1;当J=0,K=1时,触发器会复位(reset),将Q的输出设为0;当J=K=1时,触发器会反转(toggle),即将Q的输出反转。当J=K=0时,触发器不受影响。这种特性可以很方便的用来实现计数器、状态机等电路。

JK触发器电路图

JK触发器电路图

JK触发器的真值表

| J | K | Q(t) | Q(t+1) | | --- | --- | --- | --- | | 0 | 0 | Q(t) | Q(t) | | 0 | 1 | Q(t) | 0 | | 1 | 0 | Q(t) | 1 | | 1 | 1 | Q(t) | ~Q(t) |

JK触发器的使用

JK触发器可以用来实现各种逻辑电路,比如计数器、状态机等。下面是一个基于JK触发器实现的二进制计数器的代码片段:

module binary_counter(input wire clock, output reg [3:0] count);

reg [1:0] state;
reg [3:0] next_count;

always @ (posedge clock) begin
    case(state)
        0: begin
            next_count <= count;
            state <= 1;
        end
        1: begin
            next_count <= next_count + 1;
            state <= 2;
        end
        2: begin
            next_count <= next_count;
            state <= 3;
        end
        3: begin
            next_count <= next_count + 1;
            state <= 0;
        end
    endcase
end

JKFF jk_0(.J(next_count[0]), .K(count[0]), .CLK(clock), .Q(count[0]));
JKFF jk_1(.J(next_count[1]), .K(count[1]), .CLK(clock), .Q(count[1]));
JKFF jk_2(.J(next_count[2]), .K(count[2]), .CLK(clock), .Q(count[2]));
JKFF jk_3(.J(next_count[3]), .K(count[3]), .CLK(clock), .Q(count[3]));

endmodule

module JKFF(input wire J, input wire K, input wire CLK, output reg Q);

nand n1(.A(J), .B(Q), .Y(n1_1));
nand n2(.A(K), .B(n1_), .Y(n2_1));
nand n3(.A(n1_), .B(K), .Y(n3_1));
nand n4(.A(n2_), .B(n3_), .Y(n4_1));

always @ (posedge CLK) begin
    Q <= ~n4_1;
end

endmodule
总结

JK触发器是最常用的触发器之一,具有置位、复位和反转三种控制方式,可以用来实现各种逻辑电路。在计算机组织和架构中,JK触发器被广泛应用于计数器、状态机等电路的实现。