알고리즘·클록 모델·RTL은 서로 다른 기준입니다
Jie LEI의 QC-LDPC 설계 사례를 정리한 인계 원고는 알고리즘 참조, cycle-accurate Python 모델, cocotb를 통한 RTL 대조를 구분합니다. 여기서는 원본 그림과 실행 로그를 다시 관측하지 않았으며 그 구조를 검증 계획의 예로 다룹니다.
알고리즘 참조는 입력의 의미와 기대 결과를 정합니다. 클록 모델은 중간 상태가 언제 유효해야 하는지 정하고 RTL과 같은 관측점에서 비교합니다. cocotb는 이 비교를 HDL 시뮬레이터와 연결하는 수단입니다. 언어가 Python이라는 이유만으로 참조의 독립성이나 정확성이 보장되지는 않습니다.
수치와 제어를 하나의 항목으로 추적합니다
설명용 항목을 {value, valid, frame_id, code_point, iteration, flags}로 두면 어느 결과에 어떤 제어 상태가 붙어 있는지 함께 볼 수 있습니다. 실제 설계에 필요한 필드를 선택해야 하며 이 자료구조가 특정 구현의 인터페이스라는 뜻은 아닙니다.
| 상황 | 서로 비교할 값 | 놓치기 쉬운 오류 |
|---|---|---|
| 연속 프레임 | 값·frame ID·code point | 앞 프레임 결과에 뒤 프레임 플래그 결합 |
| bubble | valid와 해당 단계의 갱신 조건 | 무효 데이터를 새 결과로 판정 |
| backpressure | 전송 수락과 보존 상태 | 정지한 데이터와 진행한 제어 |
| reset·반복 피드백 | 무효화된 항목·주소·반복 번호 | 이전 상태 재사용과 저장소 충돌 |
고정 지연 관계 output(t+L)=model(input(t))는 그 L이 정의된 무정지 조건에서만 씁니다. 정지 가능한 파이프라인에서는 실제 경과 클록, clock enable과 valid/ready 수락을 기록해야 합니다. 첫 불일치의 프레임·클록·stage를 남기면 최종 출력만 비교할 때보다 원인을 좁히기 쉽습니다.
올바른 부호어와 경계 입력을 나눕니다
MathWorks WLAN LDPC Decoder는 부호 길이·코드율과 LLR 입력을 구분하고 반복별 parity 상태를 제공합니다. 같은 LDPC라는 이름이라도 code point, LLR 비트 폭·부호·양자화, 반복 상한과 종료 조건을 맞춰야 결과를 비교할 수 있습니다.
모두 0인 입력만으로 시작 검사를 끝내지 않습니다. 독립적으로 생성한 비영 유효 부호어, 잡음이 있는 LLR, 포화 경계, 연속 프레임과 reset 직후 입력을 구분합니다. 참조와 RTL이 같은 잘못된 회전·반올림 규칙을 공유하면 둘이 일치해도 틀릴 수 있으므로 별도 기준 벡터를 둡니다. parity 조건 충족과 원래 송신 정보의 복원도 구분해 평가합니다.
II와 latency의 분모를 명시합니다
II는 새 입력을 수락할 수 있는 간격이고 latency는 특정 입력부터 해당 출력까지의 지연입니다. 항목 단위가 샘플인지 한 프레임인지 먼저 정합니다. II=1이라는 설명만으로 한 프레임이 1클록에 끝난다고 할 수 없습니다.
입력 수락 클록: 0, 1, 2, 3 대응 출력 클록: 3, 4, 5, 6 마지막 출력 = 3 + (4-1) × 1 = 6
실제 LDPC 처리량은 정보 비트/부호화 비트 기준, 블록 길이, 코드율, 반복 횟수와 프레임 간격까지 적습니다. 클록·자원 비교는 같은 FPGA 세부 부품과 제약·빌드에서 합니다. AMD UG906은 timing signoff에 완전히 라우팅된 설계의 Timing Summary를 요구합니다. 합성 예상 지연을 routed 결과로 바꾸어 말하지 않습니다.
사례의 수치와 독립 측정을 구분합니다
보존 원고의 278→1,356 Mbps·312 MHz는 원저자 보고치이며 같은 빌드의 벡터·로그·타이밍 보고서를 확보하지 못했습니다. 여기서는 독립 성능 결과나 다른 설계의 목표치로 채택하지 않습니다. Python과 SystemVerilog의 속도 비교 실험, LDPC 디코딩·RTL 시뮬레이션·보드 시험을 수행하지 않았습니다.
English summary. Keep the algorithm reference, cycle model and RTL observations separate. Track data with frame identity and control, define stall behavior, and distinguish initiation interval from latency. The clock example is illustrative; reported source throughput was not independently reproduced.