[VerilogHDL] 18_래치(Latch)

18_래치

verilogHDL

[VerilogHDL] 18_래치(Latch)

Verilog HDL에서 Sequential Logic Latch(레치)는 이전 상태의 출력을 기억하고 다음 상태로 전달하는 순차 논리 회로입니다. 레치는 시퀀셜 논리 회로의 기본 요소 중 하나로, 입력이 바뀌지 않는 한 출력을 유지합니다. Verilog HDL에서 레치를 구현하는 방법에는 다양한 유형이 있지만, 가장 일반적으로 사용되는 SR 레치, D 레치, JK 레치가 있습니다.

1. SR 래치 (Set-Reset Latch)

  • SR 레치는 S (Set) 입력과 R (Reset) 입력을 가지며, 출력은 Q와 Q’로 구성됩니다.
  • S 입력이 1이면 출력 Q는 1이 되고, R 입력이 1이면 출력 Q는 0이 됩니다.
  • S와 R이 모두 0인 경우 이전 상태를 유지합니다.
module sr_latch(input wire s, input wire r, output reg q, output reg q_bar);
    always @(s or r)
    begin
        if (s && ~r)
        begin
            q <= 1;
            q_bar <= 0;
        end
        else if (~s && r)
        begin
            q <= 0;
            q_bar <= 1;
        end
    end
endmodule

SR 레치는 S (Set) 입력과 R (Reset) 입력을 받아서 출력을 제어하는 순차 논리 회로입니다. S 입력이 1인 경우 출력 Q는 1이 되고, R 입력이 1인 경우 출력 Q는 0이 됩니다. S와 R이 모두 0인 경우 이전 상태를 유지합니다.

  • input wire s, r: S와 R 입력
  • output reg q, q_bar: 출력 Q와 Q의 보수

always @(s or r) 블록 내에서 조건문을 사용하여 입력에 따라 출력을 갱신합니다. 입력의 변화를 감지하고, 조건에 따라 출력 값을 변경합니다.

2. D 래치 (Data Latch)

  • D 레치는 단일 입력 D와 출력 Q로 구성됩니다.
  • D 입력이 1이면 출력 Q는 1이 되고, D 입력이 0이면 출력 Q는 0이 됩니다.
  • D 입력이 바뀌지 않는 한 출력 Q는 이전 상태를 유지합니다.
module d_latch(input wire d, input wire enable, output reg q, output reg q_bar);
    always @(posedge enable)
    begin
        if (enable)
        begin
            q <= d;
            q_bar <= ~d;
        end
    end
endmodule

D 레치는 단일 입력 D를 받아서 출력을 제어하는 순차 논리 회로입니다. D 입력이 1인 경우 출력 Q는 1이 되고, D 입력이 0인 경우 출력 Q는 0이 됩니다. D 입력이 바뀌지 않는 한 출력 Q는 이전 상태를 유지합니다.

  • input wire d: D 입력
  • input wire enable: 동작을 제어하는 enable 신호
  • output reg q, q_bar: 출력 Q와 Q의 보수

always @(posedge enable) 블록 내에서 posedge 클럭 이벤트를 감지하여 동작을 수행합니다. enable 신호가 활성화된 상황에서 D 입력에 따라 출력을 갱신합니다.

3. JK 래치

  • JK 레치는 J (Set) 입력과 K (Reset) 입력을 가지며, 출력은 Q와 Q’로 구성됩니다.
  • J 입력이 1이면 출력 Q는 1이 되고, K 입력이 1이면 출력 Q는 0이 됩니다.
  • J와 K가 모두 0인 경우 이전 상태를 유지합니다. J와 K가 모두 1인 경우 이전 상태가 반전됩니다.
module jk_latch(input wire j, input wire k, input wire enable, output reg q, output reg q_bar);
    always @(posedge enable)
    begin
        if (enable)
        begin
            if (j && ~k)
            begin
                q <= 1;
                q_bar <= 0;
            end
            else if (~j && k)
            begin
                q <= 0;
                q_bar <= 1;
            end
            else if (j && k)
            begin
                q <= ~q;
                q_bar <= q;
            end
        end
    end
endmodule

JK 레치는 J (Set) 입력과 K (Reset) 입력을 받아서 출력을 제어하는 순차 논리 회로입니다. J 입력이 1인 경우 출력 Q는 1이 되고, K 입력이 1인 경우 출력 Q는 0이 됩니다. J와 K가 모두 0인 경우 이전 상태를 유지합니다. J와 K가 모두 1인 경우 이전 상태가 반전됩니다.

  • input wire j, k: J와 K 입력
  • input wire enable: 동작을 제어하는 enable 신호
  • output reg q, q_bar: 출력 Q와 Q의 보수

always @(posedge enable) 블록 내에서 posedge 클럭 이벤트를 감지하여 동작을 수행합니다. enable 신호가 활성화된 상황에서 J와 K 입력에 따라 출력을 갱신합니다. J와 K가 모두 0인 경우 이전 상태를 유지하며, J와 K가 모두 1인 경우 이전 상태를 반전시킵니다.

4. 정리

각 레치는 입력과 출력 포트를 가지며, 동작을 나타내기 위해 always 블록 내에 조건문을 사용합니다. SR 레치와 JK 레치는 비동기적인 동작을 수행하기 위해 always 블록 내에서 조건에 따라 출력 값을 갱신합니다. 반면에 D 레치는 posedge 클럭 이벤트에 동작하도록 설정되어 동기적인 동작을 수행합니다.

이러한 예제 코드를 사용하여 SR 래치, D 래치, JK 래치를 구현할 수 있으며, 시뮬레이션 도구나 FPGA 등에서 동작을 확인할 수 있습니다. 다양한 입력 조합을 통해 래치의 동작을 검증하고, 상태 변화를 관찰하여 순차 논리 회로의 동작을 이해할 수 있습니다.

댓글 쓰기

0 댓글