14 / 37 · 개념
플립플롭, enable과 제어 우선순위
유지·적재·리셋을 다음 상태 식으로 정의하고 의도하지 않은 클록 게이팅을 피합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
레지스터는 다음 상태 함수를 저장합니다
클록 에지 직전 값을 , 에지에서 채택한 입력을 , 갱신 후 값을 로 표기합니다. reset 우선, 그다음 enable인 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기는 다음과 같습니다.
enable이 0일 때는 입력 D가 변해도 저장값은 유지됩니다. RTL에서 이 유지 경로를 생략하는 것과 조합회로에서 대입을 빠뜨리는 것은 다릅니다. 순차 블록의 유지 동작은 레지스터 명세의 일부입니다.
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 충돌입니다.
파형 데이터 보기
| 신호 | 파형 | 버스 값 |
|---|---|---|
| edge | 2345 | E0 → E1 → E2 → E3 |
| reset | 0.10 | |
| enable | 01.0 | |
| D | 2.34 | 3C → 99 → 77 |
| Q after | 234. | 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인 리셋을 놓칠 수 있으므로 해당 조합도 별도로 검사해야 합니다.