코어와 선택 모듈을 구분합니다
Lattice RISC-V SM CPU IP v1.9.0은 RV32I 32비트 코어에 선택형 Timer와 Programmable Interrupt Controller(PIC)를 붙일 수 있습니다. 코어는 명령어 가져오기에 읽기 전용 AHB-L 포트를, 데이터 접근에 읽기·쓰기 AHB-L 포트를 사용합니다. PIC와 Timer 레지스터는 코어의 내부 AHB-L 경로로 접근합니다.
PIC가 없는 코어, PIC가 활성화된 설계, 외부 주변장치까지 결합한 SoC는 관찰할 수 있는 상태가 다릅니다. IP 기능 목록만으로 실제 보드에 어떤 모듈을 넣었는지 추정하지 않습니다.
레벨 인터럽트는 소스·PIC·코어를 나눠 봅니다
이 코어의 인터럽트는 레벨 감지형이며 코어 입력은 active-high입니다. 공식 가이드는 해당 인터럽트가 서비스 루틴에서 해제할 때까지 유지되어야 한다고 설명합니다. 코어는 인터럽트 진입 전 prefetch를 멈추고 뒤쪽 파이프라인 명령의 완료를 기다립니다. 따라서 신호가 한 번 올라왔다고 해서 handler가 즉시 실행된 것은 아닙니다.
PIC_STATUS는 pending 비트를 보여 주며 해당 비트에 1을 쓰면 상태를 지웁니다. PIC_ENABLE은 코어의 응답 허용을 제어하고 PIC_POL은 각 외부 입력의 극성을 정합니다. 서비스 루틴에서는 주변장치의 원인, PIC pending, enable과 코어의 machine interrupt enable을 서로 다른 계층으로 확인해야 합니다. 특히 외부 소스가 계속 활성인 상태라면 상태 비트만 지우는 행위를 모든 원인의 해제로 가정하지 않습니다. 마지막 문장은 레벨 신호와 PIC 상태 정의에서 도출한 진단 원칙입니다.
-
주변장치
인터럽트 원인과 입력 레벨
-
PIC
pending·enable·극성
-
코어
machine interrupt enable과 handler 진입
WFI 대기와 인터럽트 처리는 다른 단계입니다
가이드에 따르면 WFI 명령은 코어를 저전력 모드로 넣고 program counter를 멈춥니다. 외부 또는 timer 인터럽트가 들어오면 코어가 깨어납니다. 코어가 깨어나는 조건을 확인했다고 해서 특정 handler의 원인 비트까지 처리한 것은 아닙니다.
WFI를 쓰는 설계의 문제를 분석할 때는 외부 입력의 유효 레벨, PIC pending·enable, timer 비교값, 코어의 interrupt enable을 구분합니다. 이 글은 공식 IP 설명을 해석한 것이며 특정 bitstream에서 실제 저전력 소비나 wake latency를 측정한 결과가 아닙니다.
소프트웨어 중단점에는 명령 메모리 쓰기 경로가 필요합니다
가이드는 JTAG 디버그 로직에 하드웨어 중단점 두 개와 소프트웨어 중단점을 설명합니다. 소프트웨어 중단점은 대상 명령을 EBREAK로 바꾸는 방식이므로, SoC의 데이터 포트에서 명령 메모리로 쓰기가 가능해야 합니다. 읽기 전용 instruction fetch 포트만 연결했거나 명령 메모리가 단일 포트여서 데이터 쓰기 경로가 없다면 소프트웨어 중단점을 사용할 수 없습니다.
이 구분은 JTAG가 연결된다고 해서 코드를 수정하는 중단점까지 동작하는 것은 아님을 보여 줍니다. IP 가이드는 특정 기기군에 Soft JTAG 지원 조건도 따로 적으므로 대상 FPGA와 메모리 연결을 확인해야 합니다. 여기서는 디버그 실습이나 보드 동작을 재현했다고 주장하지 않습니다.