SoC 설계/Verilog, SystemVerilog

Glitch free selection in Clock Mux

yztech 2025. 2. 1. 08:41
반응형

Clock Mux의 sel 신호에 Glitch 발생 시 문제점 및 해결 방법

Clock Mux(clk_mux)는 두 개 이상의 클럭 신호 중 하나를 선택하는 역할을 합니다. 그러나 sel 신호에 글리치(Glitch)가 발생하면 예기치 않은 클럭 전환, 메타스테빌리티, 타이밍 위반 등의 문제가 발생할 수 있습니다.


문제점 (Issues)

1. Glitch로 인한 짧은 Clock Pulse 발생

  • sel 신호가 글리치로 인해 빠르게 변하면, Clock Mux의 출력이 순간적으로 잘못된 클럭을 선택할 수 있습니다.
  • 이로 인해 짧은 클럭 펄스(Glitch Clock Pulse)가 생성되어, 플립플롭(FF)이 비정상적인 동작을 하거나 타이밍 위반을 유발할 수 있습니다.

2. Metastability (메타스테빌리티)

  • sel 신호가 비동기적으로 전환되면, Mux 내부에서 클럭이 비정확한 타이밍에 바뀔 수 있습니다.
  • 결과적으로 일부 레지스터가 새로운 클럭에서 setup/hold violation을 일으켜 불안정한 동작을 초래할 수 있습니다.

3. Clock Domain Crossing (CDC) 문제

  • sel 신호가 다른 클럭 도메인에서 오면 동기화 없이 사용할 경우, Clock Mux가 비정상적으로 전환되면서 데이터 손실이 발생할 수 있습니다.

해결 방법 (Solutions)

1. sel 신호를 동기화(Synchronization)

  • sel 신호가 다른 클럭 도메인에서 오는 경우, 반드시 플립플롭을 이용한 동기화 회로를 사용해야 합니다.
  • 예제: 2단계 동기화 회로
  module sync_sel (
      input logic clk,
      input logic async_sel,
      output logic sync_sel
  );
      logic sel_ff1;
      always @(posedge clk) begin
          sel_ff1  <= async_sel;
          sync_sel <= sel_ff1;
      end
  endmodule
  • async_sel을 두 개의 플립플롭(FF) 단계를 거쳐 sync_sel로 변환하여 메타스테빌리티 및 글리치 방지.

2. Glitch-Free Mux 설계

  • 글리치 없는 클럭 전환을 위해 래치(Latch) 기반 Mux 또는 Clock Switch Cell을 사용.
  • 예제: 래치 기반 Clock Mux
  module glitch_free_clock_mux (
      input logic clk1, clk2, 
      input logic sel, 
      output logic clk_out
  );
      logic sel_latch;

      always @(clk1 or clk2 or sel) begin
          if (!clk1 && !clk2) sel_latch = sel; // 클럭이 LOW일 때만 변경
      end

      assign clk_out = sel_latch ? clk2 : clk1;
  endmodule
  • 클럭이 LOW일 때만 sel 신호를 업데이트하여 글리치를 방지.

3. Clock Gating을 활용한 안전한 전환

  • ASIC 설계에서는 전용 Clock Gating Cell을 사용하여 안전하게 클럭을 전환해야 합니다.
  • Clock Gating 기반 안전한 전환 예제
  module safe_clock_mux (
      input logic clk1, clk2,
      input logic sel, 
      output logic clk_out
  );
      logic gated_clk1, gated_clk2;

      assign gated_clk1 = clk1 & ~sel;
      assign gated_clk2 = clk2 & sel;

      assign clk_out = gated_clk1 | gated_clk2;
  endmodule
  • 두 클럭을 AND 게이팅 후 OR 연산하여 안전하게 전환.

요약 (Summary)

문제 영향 해결 방법
sel 신호의 글리치 짧은 클럭 펄스 발생 sel 신호를 클럭 도메인에 동기화
비동기 sel 전환 메타스테빌리티, 타이밍 위반 2단계 동기화 플립플롭 사용
CDC 문제 예측 불가능한 동작 래치 기반 또는 Clock Switch Cell 사용
잘못된 Clock Mux 설계 데이터 손실 및 전력 문제 전용 Clock Gating Cell 또는 안전한 전환 기법 활용

결론

  • sel 신호에 글리치가 발생하면 잘못된 클럭 선택 및 짧은 펄스 생성 문제가 발생할 수 있습니다.
  • 이를 방지하기 위해:
    1. sel 신호를 동기화하고,
    2. 글리치 프리 Mux 설계(래치 기반) 또는 전용 Clock Gating Cell을 사용해야 합니다.
  • 특히 ASIC/FPGA 설계에서는 Clock Gating을 활용한 안전한 전환 방식을 고려하는 것이 중요합니다.
반응형