[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 댓글