NPU 프론트엔드 모듈¶
GitHub RTL 원본
이 페이지가 참조하는 SystemVerilog 원본 파일:
hw/rtl/NPU_Controller/NPU_frontend/AXIL_CMD_IN.sv— GitHub에서 보기hw/rtl/NPU_Controller/NPU_frontend/AXIL_STAT_OUT.sv— GitHub에서 보기hw/rtl/NPU_Controller/NPU_frontend/ctrl_npu_frontend.sv— GitHub에서 보기hw/rtl/NPU_Controller/npu_interfaces.svh— GitHub에서 보기
역할¶
NPU 프론트엔드는 PS↔PL 경계의 AXI-Lite 진입점이다.
호스트 드라이버 HAL은 0x000 주소에 ISA 워드를 기록하고 0x008에 kick을 기록하며,
완료 상태는 같은 인터페이스의 읽기 채널로 폴링한다.
AXIL_CMD_IN은 호스트 write 트랜잭션을 FIFO에 수신하고,
AXIL_STAT_OUT은 엔진 완료 상태를 FIFO를 통해 호스트 읽기로 반환한다.
계층적으로 ctrl_npu_frontend의 상위는 AXI-Lite 버스, 하위는 컨트롤러의
디코더/디스패처(NPU 컨트롤러 모듈)이다.
AXIL_CMD_IN¶
호스트 write 트랜잭션을 수신하여 명령어를 CMD_IN FIFO에 저장한다.
파라미터 FIFO_DEPTH(기본값 8)가 FIFO 깊이를 결정한다.
FIFO가 가득 차면 s_awready가 자동으로 디어서트되어 호스트에 백프레셔를 건다.
등록 주소는 두 곳이다: 0x000은 ISA 명령어 워드를 직접 FIFO에 삽입하고,
0x008은 bit63 = 1인 kick 마커를 삽입한다.
kick 마커는 하위 디스패처가 배치 경계를 감지하는 데 사용된다.
OUT_valid && IN_decoder_ready 핸드셰이크가 성립하는 사이클마다 FIFO에서 팝이 일어난다.
AXIL_STAT_OUT¶
엔진 완료 시 상위 모듈이 IN_valid를 어서트하여 상태 워드를 STAT_OUT FIFO에 푸시한다.
파라미터 FIFO_DEPTH(기본값 8)가 적용된다.
FIFO가 가득 차면 IN_valid가 무시된다. 완료 워드는 엔진에서 동일한 값으로 재전송되므로
누락은 재폴링으로 복구된다.
호스트가 AR 채널로 읽기를 요청하면 FIFO 헤드를 rdata_r에 래치하고 s_rvalid를
어서트한다. s_rready가 도착하면 rvalid를 해제한다.
s_arready는 FIFO가 비어 있거나 R 응답이 아직 진행 중일 때 디어서트된다.
ctrl_npu_frontend¶
ctrl_npu_frontend는 axil_if.slave 인터페이스를 통해 AXI-Lite 신호를
AXIL_CMD_IN(write 채널)과 AXIL_STAT_OUT(read 채널)에 배선하는 wrapper 모듈이다.
CMD_IN의 출력(cmd_data, cmd_valid)은 OUT_RAW_instruction과 OUT_kick으로
컨트롤러에 전달된다. OUT_kick은 cmd_valid & IN_fetch_ready의 조합논리로 생성된다.
STAT_OUT 방향은 IN_enc_stat / IN_enc_valid를 인코더 FSM으로부터 직접 수신한다.
ctrl_npu_interface.sv는 향후 코어별 인터페이스 집계를 위한 플레이스홀더다.
인터페이스 명세¶
npu_interfaces.svh에 axil_if와 axis_if 두 인터페이스가 정의된다.
axil_if는 ADDR_W=12, DATA_W=64 기본값으로 AW/W/B/AR/R 5개 채널을 모두 포함하고,
slave와 master modport를 제공한다.
ctrl_npu_frontend는 axil_if.slave modport를 사용한다.
axis_if는 tdata/tvalid/tready/tlast/tkeep의 AXI-Stream 인터페이스로,
데이터 경로 모듈이 사용한다.
마지막 검증 대상
커밋 8c09e5e @ pccxai/pccx-FPGA-NPU-LLM-kv260 (2026-04-29).