[VerilogHDL] 23_동기 및 비동기 시퀀셜 논리 설계

23_동기 및 비동기 시퀀셜 논리 설계

verilogHDL

[VerilogHDL] 23_동기 및 비동기 시퀀셜 논리 설계

1. 동기 시퀀셜 논리 설계 (Synchronous Sequential Logic Design)

  • 동기 시퀀셜 논리 설계는 시계 신호에 의해 제어되는 논리 회로를 의미합니다.
  • 시계 신호를 기반으로 상태 전이가 발생하며, 시계 신호의 상승 에지나 하강 에지에 의해 동작이 트리거됩니다.
  • 동기 시퀀셜 논리 설계에서는 주로 레지스터를 사용하여 현재 상태를 저장하고, 조건부 로직으로 상태 전이를 구현합니다.
  • 동기 시퀀셜 논리 설계는 동작의 동기화와 타이밍 문제를 다루기 쉽고, 설계가 안정적이고 예측 가능합니다.
  • 대표적인 예로는 시계, 타이머, 카운터 등이 있습니다.

1.1 동기 리셋 예제 (동기 리셋 D 플립 플롭)

module SyncResetDFF (
  input wire clk,
  input wire reset,
  input wire d,
  output reg q
);

  always @(posedge clk) begin
    if (reset)
      q <= 1'b0;
    else
      q <= d;
  end

endmodule

2. 비동기 시퀀셜 논리 설계 (Asynchronous Sequential Logic Design)

  • 비동기 시퀀셜 논리 설계는 특정 신호의 상태 변화에 따라 동작하는 논리 회로를 의미합니다.
  • 비동기 시퀀셜 논리 설계에서는 클럭 신호를 사용하지 않고, 입력 신호의 변화에 의해 직접 동작이 트리거됩니다.
  • 상태 전이는 조건부 로직이 아닌 입력 신호의 변화에 따라 결정됩니다.
  • 비동기 시퀀셜 논리 설계는 설계가 복잡하고, 경합 조건 및 메타스터빙과 같은 문제를 다루어야 합니다.
  • 대표적인 예로는 버튼 입력, 상태 감지, 비동기 통신 등이 있습니다.

2.1 비동기 리셋 예제 (비동기 리셋 D 플립 플롭)

module AsyncResetDFF (
  input wire clk,
  input wire reset,
  input wire d,
  output reg q
);

  always @(posedge clk or posedge reset) begin
    if (reset)
      q <= 1'b0;
    else
      q <= d;
  end

endmodule

3. 정리

동기 리셋에서는 리셋 신호가 클럭의 상승 에지와 함께 처리됩니다. 비동기 리셋에서는 리셋 신호가 클럭 신호와 독립적으로 처리됩니다. 비동기 리셋에서는 posedge resetposedge clk 두 가지 조건을 모두 사용하여 리셋 시점과 클럭 동기화를 수행합니다.

동기 및 비동기 시퀀셜 논리 설계는 각각 다른 설계 요구 사항에 적합한 상황에서 사용됩니다. 동기 시퀀셜 논리 설계는 시계 동기화와 타이밍에 엄격한 요구 사항이 있는 경우에 유용하며, 비동기 시퀀셜 논리 설계는 입력 신호의 변화에 따른 동작이 필요한 경우에 적합합니다.

댓글 쓰기

0 댓글