논문 읽기 · 스펙 해석과 RTL 검증
SpecRead가 스펙 해석을 따로 평가하는 방법, 그리고 정상 RTL 대조군이 드러낸 맹점.
생성 RTL이 실패했다. 스펙 해석이 틀렸는지, 구현이 틀렸는지 알 수 있을까. SpecRead는 이 구분에서 출발한다.
모델은 RTL을 생성하지 않고, 발췌문에서 답과 근거를 낸다. 스펙 해석을 RTL 구현 능력과 별도로 묻는다.
공개 문항은 네 갈래다.
‘가득 찼을 때’가 빠지면
정상 수신도 오버플로가 된다
OpenTitan UART의 수신 동작은 유효한 바이트를 RX FIFO에 넣는다. 여유 공간이 있을 때의 정상 경로다. 반면 rx_overflow 규칙에는 ‘FIFO가 가득 찬 상태에서 추가 쓰기 요청을 받으면’이라는 조건이 붙는다. 그때는 인터럽트를 발생시키고 해당 문자를 버린다.
문항에는 오버플로 규칙과 바이트를 FIFO에 넣는 수신 설명이 함께 주어진다. 두 문장을 연결하면, 조건이 빠진 규칙이 정상 수신까지 오류로 취급한다는 모순이 드러난다. ‘rx_overflow’라는 이름을 찾아내는 것과, 그 신호가 언제 발생해야 하는지 이해하는 것은 다르다.
OpenTitan RTL의 버그가 아니다. Type 3은 변형된 문서의 모순을, Type 4는 스펙과 코드의 관계를 묻는다.
모델이 시뮬레이션하는 실험은 아니다
Type 4는 저자가 만든 변이 문항을 모델이 읽고 판정하는 실험이다.
TYPE 4 · 문항 제작과 모델 평가
문항은 저자가 만들고,
모델은 판정한다
저자의 문항 제작
모델 평가 변이 + 정상 대조군
채점기는 판정·근거 위치·오류 범주를 구분한다.
스펙이 정하지 않은 동작도 달라질 수 있다. 파형 차이 외에, 변경이 어긴 조항이 필요하다.
또 하나, 공개 RTL 입력에는 변경 줄에 MUTATED 주석과 위치를 붙인 문항이 다수 있다. 위치를 알려 주지 않은 설계에서 버그를 찾아내는 시험으로 읽어서는 안 된다. 표시된 변경이 스펙과 어떤 관계인지 설명하는 과제에 가깝다.
논문이 보고한 Ministral-3B의 Type-4 판정·위치 정답률
변이 96건 중 63건 · 보수적 채점
이때 ‘위치가 맞다’는 점수도 의미를 알아야 한다. 채점 코드는 정답 위치의 특징적인 토큰이 응답 전체에 얼마나 들어 있는지 본다. 애매한 중첩이나 지나치게 넓은 인용은 보수적으로 오답 처리한다. 응답의 근거를 사람이 읽고 설계 의도까지 검증한 비율은 아니다.
정상 RTL을 통과시킬 수 있는가
변이 문제만으로는 이 질문에 답할 수 없다. 41개 RTL 대조군은 제시된 스펙 발췌문과 일치하는 코드다. 여기서 ‘정상’은 그 요구사항과 일치한다는 뜻이지, 설계 전체에 결함이 없다는 보증은 아니다.
공개 응답에서 위반으로 분류된 답을 집계해, 두 집단을 나란히 놓아 보자.
MINISTRAL-3B · 공개 응답의 이진 판정 재계산
위반이 있어도, 없어도 울린 경고
위반을 넣은 RTL
스펙과 일치하는 RTL
균형 정확도
49.5%
위반 탐지율과 정상 통과율의 평균
(95/96 + 0/41) ÷ 2
위반 클래스의 F1
81.9%
탐지·오탐·누락으로 계산
2 × 95 ÷ (2 × 95 + 41 + 1)
F1이 높은 것은 정상 판정까지 잘했기 때문이 아니다. 위반 사례가 더 많은 이 구성에서 거의 전부 경고하면 재현율이 높아진다. F1도 오탐에 벌점을 주지만, 정상 통과 건수는 식에 직접 들어가지 않는다. 균형 정확도는 위반 탐지율 약 99%와 정상 통과율 0%를 같은 비중으로 반영한다. 두 수치는 서로 다른 질문에 답한다.
변이의 나머지 1건은 응답이 잘려 위반으로 분류되지 않았다. 명시적인 정상 판정은 아니다.
사람은 버그 후보를 검토하고 버릴 수 있다. 자동 리뷰어가 경고만으로 수정을 시작한다면 정상 코드도 수정 대상이 된다. 위치 점수만으로 맡길 수 없는 역할이다.
생성 성적표 옆에 필요한 질문
실험은 한 3B 모델과 OpenTitan에 한정된다. SpecRead 점수가 RTL 생성 성공률을 예측하는지도 아직 측정하지 않았다.
그래도 실패를 진단할 질문은 선명해졌다. 요구사항을 해석했는가, 그 요구를 구현했는가. 서로 다른 시험으로 물어야 한다.
의심스러운 줄을 찾았다는 답만으로는 부족하다. 그 줄이 어떤 조건에서 어떤 요구를 어기는지 설명하고, 어긴 것이 없다면 그대로 둘 수 있어야 한다.
답글 남기기