𝗥𝗘𝗦𝗘𝗧 │ reset을 푸는 순간에도 timing check가 있습니다
시뮬레이션에서는 정상인데, 보드 전원을 켤 때만 상태 머신의 첫 사이클이 가끔 어긋납니다. 데이터 경로의 setup/hold는 통과했습니다. 그렇다면 asynchronous reset이 언제 해제됐는지부터 확인해 볼 만합니다.
글 읽기DAILY ASIC / ARCHIVE
RTL에서 타이밍, CDC와 프로토콜까지. 현장에서 마주치는 질문을 짧은 세미나처럼 풀어낸 기술 아카이브입니다.

THE COLLECTION
검토 후 LinkedIn에 게시된 글과 그림을 한곳에 모았습니다.
시뮬레이션에서는 정상인데, 보드 전원을 켤 때만 상태 머신의 첫 사이클이 가끔 어긋납니다. 데이터 경로의 setup/hold는 통과했습니다. 그렇다면 asynchronous reset이 언제 해제됐는지부터 확인해 볼 만합니다.
글 읽기
report_cdc에서 2비트 bus에 CDC-6 warning이 뜹니다. 각 bit에는 2FF synchronizer도 있고 ASYNC_REG도 붙어 있습니다. “필요한 건 다 했는데 왜 경고지?” 이 경고는 metastability 대책의 유무보다, 두 bit를 목적지에서 한 묶음의 값으로 읽어도 되는지를 묻습니다.
글 읽기
FPGA에서 외부 칩으로 내보내는 데이터의 hold violation을 잡다가 XDC에서 set_output_delay -min -0.7을 보면 멈칫하게 됩니다. “출력 지연이 음수라니, 데이터가 시간을 거슬러 가나?” 실제로 표현하는 것은 외부 칩의 hold 요구를 FPGA 출력 포트까지 거꾸로 환산한 값입니다.
글 읽기
FPGA 타이밍 요약에 WNS +0.30 ns가 보입니다. 빨간 경로가 없으니 끝난 것 같죠. 그런데 보드에서는 특정 동작만 간헐적으로 실패합니다. 이럴 때는 가장 느린 경로를 다시 보기 전에, 아예 분석 대상에서 빠진 경로가 없는지 확인해야 합니다.
글 읽기
합성 결과에서 reset이 flip-flop의 전용 입력으로 가지 않고 D 앞의 조합 논리에 섞여 있었습니다. RTL의 if 순서가 원인일 수 있습니다. 하지만 순서를 바꾸기 전에 먼저 확인할 게 있습니다. 두 코드가 같은 동작을 하는가?
글 읽기
FIFO를 넣은 뒤 합성 결과를 보니 BRAM 대신 레지스터가 크게 늘었습니다. 원인을 따라가면 reset 때 for 루프로 모든 mem[i]를 0으로 만드는 코드가 있을 때가 있습니다.
글 읽기
AHB-Lite slave가 연속 write A, B를 받습니다. 파형에서는 B의 HADDR가 이미 보이는데, A에 wait state가 들어간 뒤 B가 두 번 처리되거나 A의 데이터가 B 주소에 써집니다. 주소와 데이터가 한 cycle 어긋나는 AHB-Lite에서 흔한 디버깅 장면입니다.
글 읽기
외부 칩에서 들어오는 DIN의 setup 리포트가 정상입니다. XDC에는 set_input_delay -clock sysClk 4 [get_ports DIN] 한 줄이 있습니다. 그런데 보드와 외부 칩의 최소 지연을 확인하니, 데이터는 clock edge 이후 빠르면 1 ns에도 FPGA 입력 핀에 도착합니다. 이 제약으
글 읽기
타이밍 리포트에서 setup slack이 빠듯한 경로가 보입니다. capture FF에 clock이 조금 늦게 도착하도록 조정하니 setup은 좋아졌습니다. 그런데 같은 경로의 hold slack이 음수로 바뀝니다. 데이터 경로는 그대로인데 왜 그럴까요?
글 읽기
버스가 바쁠 때만 가끔 데이터가 사라진다고 해봅시다. 파형을 보니 VALID가 올라온 뒤 READY가 두 cycle 동안 0인데, 그 사이 VALID가 내려가거나 data가 바뀝니다. 평소에는 READY가 바로 1이라 지나쳤던 오류입니다.
글 읽기
레지스터 write가 가끔 멈추는 AXI4-Lite slave를 보게 됐다고 해봅시다. RTL에는 AWVALID && WVALID가 같은 cycle에 들어올 때만 write를 처리하는 조건이 있습니다. 얼핏 자연스럽지만, 이 조건이 문제의 시작일 수 있습니다.
글 읽기
CDC 리뷰에서 “2-FF synchronizer가 있으니 됐다”는 말을 듣곤 합니다. 그런데 배치 후 보고서를 보니 똑같은 2-FF 체인 두 개의 MTBF가 크게 다릅니다. RTL은 같은데, 무엇이 달라졌을까요?
글 읽기
DMA가 read A와 B를 차례로 요청했습니다. A는 응답이 늦고 B의 데이터는 먼저 준비됐는데, master 쪽에서는 B가 보이지 않습니다. 이럴 때는 메모리 지연만 볼 게 아니라 두 요청의 ARID부터 확인해야 합니다.
글 읽기
타이밍을 맞추려고 AXI W channel 중간에 register slice를 넣었습니다. 그런데 파형을 보니 보내는 쪽은 계속 VALID이고 받는 쪽도 계속 READY인데, 데이터가 한 clock 걸러 한 번씩 나갑니다. 어떤 설정을 봐야 할까요?
글 읽기
AXI4 INCR burst는 4 KB 주소 경계를 넘어서는 안 됩니다. 시작 주소가 unaligned일 때 AxADDR + (AxLEN+1)×2^AxSIZE로 끝을 검사하면, 합법적인 burst까지 막을 수 있습니다.
글 읽기
Pulse CDC에서 metastability 처리만 끝났다고 event delivery까지 보장되는 것은 아닙니다. AMD XPM_CDC_PULSE에는 연속 pulse의 최소 간격 조건이 있습니다.
글 읽기
Synchronous RAM에서 같은 rising edge에 address A를 write하면서 같은 address를 read할 때, Q가 무엇을 내보내는지는 구현 세부사항이 아니라 interface contract입니다. 기존 MEM[A]를 OLD, 입력 DIN을 NEW, 직전 출력 Q를 HELD라고 두면 세 모드는 이
글 읽기
기능상 데이터가 3번째 clock edge에서만 캡처되는 경로라면, setup 분석의 capture edge를 3-cycle 관계로 옮길 수 있습니다. 하지만 set_multicycle_path 3 -setup은 setup만 바꾸지 않습니다. setup과 연결된 hold 관계도 함께 움직여 기본적으로 hold가 2-cyc
글 읽기
gclk = clk & en만으로 clock을 끊으면, en이 CLK high 구간에 바뀔 때 짧은 펄스나 의도치 않은 edge가 생길 수 있습니다. 이건 downstream flop의 clock으로 쓰기엔 위험합니다.
글 읽기
해당하는 글이 없습니다. 다른 검색어나 주제를 선택해 보세요.