Xilinx FPGA가 FLASH를 통해 프로그램을 로드하는 타이밍 시퀀스는 무엇인가요?

발행: (2025년 12월 11일 오후 05:47 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

1. Global power‑up & FPGA initialization

전원이 인가된 후, 모든 FPGA 전원(VCCINT, VCCAUX, VCCO_0 등)이 램프업됩니다.

POR / 설정 재시작 시:

  • PROG_B가 Low로 내려가면 FPGA는 설정 메모리를 클리어합니다.
  • DONEINIT_B가 Low로 구동됩니다.

내부 메모리 클리어가 끝나면 INIT_B가 (외부 풀‑업에 의해) High로 해제되어 “비트스트림을 받을 준비가 됨”을 나타냅니다. 이 상승 엣지에서 FPGA는 모드 핀 **M[2:0]**와 변형 핀 **VS/FS[2:0]**을 샘플링하여 어떻게 구성할지 결정합니다(SPI vs. BPI, x1 vs. x4, 어떤 opcode 등).

많은 설계에서 “POR 대기 + INIT_B High” 전체가 필요합니다. XAPP951은 플래시가 깨우는 데 > 2 ms가 필요하면 그때까지 INIT_B를 Low로 유지할 수 있다고 명시합니다.

INIT_B가 High로 올라가면 FPGA는 즉시 플래시에서 구성 단계로 진행합니다.

3. Actual configuration from SPI Flash

이제 FPGA는 SPI‑마스터 구성 모드에 들어갑니다.

Mode pins for SPI

  • Virtex‑5 예시: M[2:0] = 0 0 1, INIT_B 상승 시 샘플링됩니다.
  • 7‑Series도 유사한 인코딩을 사용합니다( UG470 참고).

Variant pins VS/FS[2:0]

이 핀들은 FPGA가 사용할 SPI opcode를 지정합니다. 예:

VS/FS 값Opcode주소 폭Dummy 바이트
FAST READ (0x0B)24‑bit1
READ (0x03)24‑bit0

Configuration transaction (simplified)

  1. FPGA가 CSO_B / FCS_B를 Low로 내립니다(플래시 칩‑셀렉트).
  2. FPGA 내부 오실레이터가 CCLK를 생성하고 CCLK 핀으로 출력합니다(플래시도 이 클럭으로 동작).
  3. MOSI에서 FPGA는 다음을 전송합니다:
    • 8‑bit READ 명령(0x03 또는 0x0B).
    • 24‑bit 시작 주소(보통 0x000000).
    • FAST‑READ 사용 시 필요한 Dummy 바이트.
  4. 플래시는 MISO → DIN / D_IN으로 비트스트림 데이터를 스트리밍합니다.
  5. FPGA는 전체 비트스트림을 받을 때까지 CCLK를 계속 클럭하고 데이터를 시프트합니다(헤더 + 동기 워드 + 길이 및 CRC로 끝을 인식).

비트스트림이 유효(CRC OK)하면 장치는 구성을 마치고 스타트업 단계로 이동합니다.

버스 폭(SPI의 1/2/4, BPI의 8/16 등)으로 구성 시간을 추정할 수 있으며, 이는 Xilinx 문서에 명시되어 있습니다.

4. Startup sequence & DONE

비트스트림이 로드되고 검증된 후 FPGA는 내부 스타트업 시퀀스를 실행합니다. 일반적인(단순화된) 순서는 UG470의 비트스트림 옵션에 따라 구성 가능하지만 대략은 다음과 같습니다:

  1. GSR(전역 셋/리셋) 해제.
  2. GTS(트라이스테이트) 해제 → I/O가 활성화.
  3. DONE을 High로 구동(외부 풀‑업이 있는 오픈‑드레인).
  4. 필요에 따라 패브릭 내부에서 EOS(End‑Of‑Startup)를 어설트.

주요 외부 핀 동작

구성 중 상태성공적인 스타트업 후 상태
DONELowHigh(외부 풀‑업 필요; 구형 패밀리는 ~330 Ω, 최신은 kΩ)
INIT_B초기화 및 CRC/구성 오류 시 Low초기화 완료·구성 성공 시 High

CRC 등 오류가 감지되면 FPGA는:

  • INIT_B를 Low로 내리고,
  • 구성을 중단하고,
  • 필요 시 다음 시도에서 다른 플래시 주소로 MultiBoot할 수 있습니다.

5. Putting it all together – textual timing sketch (Master SPI)

Power rails:   ----ramp----> [all above POR] ---------------------------

PROG_B:        ---------L (clear config) ---- H ------------------------>

INIT_B:        L (clear mem) ------H (mode pins sampled) ----- H ------->
               ^ rises when rails are good

M[2:0]/VS[2:0]:       (must be stable BEFORE INIT_B rises) -------------

CSO_B/FCS_B:                           H -----L-----------------H------->
               ^ low during the read transaction

CCLK:                                  idle  clock...clock...  idle ---->

MOSI:                                  cmd  + addr + dummy + ...  ------>

DIN (D_IN):                                   

DONE:        L.............................L..............H(user mode)->

INIT_B가 상승한 시점부터 DONE가 상승할 때까지가 비트스트림 로드 + 스타트업 시간입니다.
플래시가 준비되지 않았거나 비트스트림이 손상된 경우 INIT_B가 다시 Low로 떨어지고 DONE는 절대 High가 되지 않습니다.

6. Board‑level design tips

보드 설계·디버깅 시 체크리스트:

  1. 모든 FPGA 레일에 대해 POR을 기다린다.
  2. INIT_B가 High가 될 때까지 기다린다.
  3. 플래시에서 비트스트림을 전송한다( CCLK, CS, MOSI, DIN  확인).
  4. DONE가 High가 되고 사용자 로직이 시작되는지 확인한다.

Oscilloscope‑debug recipe

다음 신호들을 프로브한다: VCCINT, VCCAUX, VCCO_0, INIT_B, CCLK, CSO_B/FCS_B, DIN, DONE.

확인 항목:

  • 레일이 정상이면 INIT_B가 상승하는가?
  • FPGA가 실제로 CCLKCS를 토글하는가?
  • DIN에 데이터가 흐르는가?
  • 최종적으로 DONE가 High가 되는가?

구성 실패 시 대처

  • 플래시 내용과 주소를 검증한다(비트스트림은 보통 0x0 주소에 있어야 함).
  • 선택한 플래시 명령과 버스 폭에 맞게 **M[2:0] / VS[2:0]**가 올바르게 설정됐는지 확인한다.
  • 플래시의 tPU가 충분히 빠른지, 필요하면 INIT_B / PROG_B를 적절히 게이트한다.
Back to Blog

관련 글

더 보기 »