← 전체 글로 돌아가기
RTL & FPGA

𝗥𝗘𝗦𝗘𝗧 × 𝗘𝗡𝗔𝗕𝗟𝗘 │ 둘 다 1인 clock edge에서 레지스터는 어떻게 될까?

Reset versus clock-enable priority for AMD FPGA registers; simultaneous assertion changes function and mapping

Reset versus clock-enable priority for AMD FPGA registers; simultaneous assertion changes function and mapping 인포그래픽
Daily ASIC original infographic · English labels

합성 결과에서 reset이 flip-flop의 전용 입력으로 가지 않고 D 앞의 조합 논리에 섞여 있었습니다. RTL의 if 순서가 원인일 수 있습니다. 하지만 순서를 바꾸기 전에 먼저 확인할 게 있습니다. 두 코드가 같은 동작을 하는가?

상승 edge에서 동작하는 active-high 동기식 reset을 보겠습니다. if (rst) q <= 0; else if (en) q <= d; 는 reset 우선입니다. 반대로 if (en) q <= d; else if (rst) q <= 0; 는 enable 우선입니다. 둘 다 0이면 이전 값을 유지합니다.

차이는 rst=1, en=1에서 드러납니다. 직전 q=0, 입력 d=1이라면 reset 우선은 다음 edge에 q=0, enable 우선은 q=1입니다. 평소에는 두 신호가 겹치지 않아서 시뮬레이션에서 이 차이를 놓치기 쉽습니다.

AMD FPGA의 register primitive는 set/reset이 clock enable보다 우선하도록 만들어져 있습니다. 그래서 reset 우선 RTL이 그 제어 구조와 맞습니다. AMD UG949는 enable을 먼저 쓴 경우 reset을 데이터 경로로 옮겨 추가 로직이 생긴다고 설명합니다. 이 영향은 합성된 회로와 timing report에서 확인해야 하며, 모든 설계에서 같은 면적·지연 증가가 나온다고 단정할 수는 없습니다.

그렇다고 PPA를 위해 if 순서를 마음대로 바꿔서는 안 됩니다. 먼저 사양에서 두 신호가 동시에 1일 때 reset과 데이터 갱신 중 무엇이 이겨야 하는지 정하세요. ‘절대 겹치지 않는다’가 전제라면 그 조건을 검증에서 확인하세요. 의도한 우선순위가 정해진 뒤에 RTL을 쓰고, 합성 후 reset/CE가 어느 핀 또는 데이터 경로에 매핑됐는지 확인하는 순서가 안전합니다.

이 예시는 AMD FPGA의 상승 edge, active-high 동기식 reset을 기준으로 합니다. 다른 FPGA나 ASIC 라이브러리의 우선순위와 매핑은 해당 셀 자료로 다시 확인해야 합니다.

근거: AMD UG949 (2026.1), Reset and Clock Enable Precedence; AMD UG901 (2026.1), Flip-Flops, Registers, and Latches

https://docs.amd.com/r/en-US/ug949-vivado-design-methodology/Reset-and-Clock-Enable-Precedence
https://docs.amd.com/r/en-US/ug901-vivado-synthesis/Flip-Flops-Registers-and-Latches

ORIGINAL POSTLinkedIn에서 원문 보기 ↗
이전 글𝗙𝗣𝗚𝗔 𝗕𝗥𝗔𝗠 │ FIFO 리셋에서 메모리 전체를 0으로 지워야 할까?다음 글𝗦𝗧𝗔 │ WNS가 +0.30 ns인데, timing signoff를 끝내도 될까?