Altifigence Academy

14 / 37 · 개념

플립플롭, enable과 제어 우선순위

유지·적재·리셋을 다음 상태 식으로 정의하고 의도하지 않은 클록 게이팅을 피합니다.

레지스터는 다음 상태 함수를 저장합니다

클록 에지 직전 값을 QkQ_k, 에지에서 채택한 입력을 DkD_k, 갱신 후 값을 Qk+1Q_{k+1}로 표기합니다. reset 우선, 그다음 enable인 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기는 다음과 같습니다.

Qk+1={0rk=1Dkrk=0, ek=1Qkrk=0, ek=0Q_{k+1}=\begin{cases} 0 & r_k=1\\ D_k & r_k=0,\ e_k=1\\ Q_k & r_k=0,\ e_k=0 \end{cases}

enable이 0일 때는 입력 D가 변해도 저장값은 유지됩니다. RTL에서 이 유지 경로를 생략하는 것과 조합회로에서 대입을 빠뜨리는 것은 다릅니다. 순차 블록의 유지 동작은 레지스터 명세의 일부입니다.

SystemVerilog
module enabled_register (
  input logic clk, rst, en,
  input logic [7:0] d,
  output logic [7:0] q
);
  always_ff @(posedge clk) begin
    if (rst) q <= 8'b0;
    else if (en) q <= d;
  end
endmodule

이 회로는 동기식 active-high reset입니다. reset과 enable이 동시에 1인 에지에서는 0이 저장됩니다. 순서를 바꾸면 다른 기능이 되므로 우선순위를 주석에만 쓰지 말고 코드와 테스트에 함께 남겨야 합니다.

각 열은 한 상승 에지상승 에지 클록이 0에서 1로 바뀌는 순간입니다. CLK=1인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기의 관찰 기록입니다. 입력은 에지 직전, 이름에 after가 붙은 상태는 갱신 직후 값입니다. 열의 정렬은 샘플 순서를 나타내며 물리적인 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 그린 것이 아닙니다. 초기 Q=0xA5입니다. 첫 열은 유지, 두 번째는 쓰기, 세 번째는 reset과 enable 충돌입니다.

reset·enable·hold 우선순위
파형 데이터 보기
파형 데이터: 각 문자는 한 구간, 점은 이전 상태 유지, p는 클록 한 주기입니다.
신호파형버스 값
edge2345E0 → E1 → E2 → E3
reset0.10
enable01.0
D2.343C → 99 → 77
Q after234.A5 → 3C → 00

enable은 클록을 직접 자르는 신호가 아닙니다

gated_clk = clk & en 같은 조합식을 임의로 만들어 클록으로 쓰면 en의 변화가 짧은 펄스나 예상하지 못한 에지를 만들 수 있습니다. clock enable RTL이 어떤 셀로 매핑되는지는 합성·구현 흐름의 책임입니다. 전력 절감을 위한 clock gating은 적절한 셀과 타이밍 검증을 전제로 별도로 설계합니다.

검증할 우선순위는 reset, load, enable 같은 제어가 겹칠 때 드러납니다. 단일 제어만 하나씩 켜 보는 것으로는 충분하지 않습니다. 예를 들어 q=A5에서 en=0, d=3C이면 유지하고, 다음 에지에 en=1이면 3C를 저장해야 합니다.

직접 생각해 보기

q=0xA5에서 rst=1, en=1, d=0x3C인 에지를 지나고, 그다음 rst=0, en=0으로 두면 두 에지 뒤 q는 무엇인가요?

해설 보기

첫 에지에는 reset 우선이므로 0, 다음 에지에는 enable이 0이므로 그대로 0입니다. reset을 en 안쪽 조건으로 구현했다면 en=0인 리셋을 놓칠 수 있으므로 해당 조합도 별도로 검사해야 합니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.