Translate

2021년 8월 23일 월요일

2장. 실습1/단계 2: C 소스코드 검증 (Validate the C Source Code)

2장. 실습1/단계 2:  C 소스코드 검증 (Validate the C Source Code)

이 단계에서는 C 코드를 컴파일하고 실행시켜 무결성을 검증한다.  C 검증(C Validation) 또는 C 모의실험(C Simulation) 이라 한다. 검증 기법은 다양하나 이번 프로젝트는 설계된 C 코드 출력과 검증을 위해 준비한 기준값(golden reference)을 비교한다.

1. 설계 탐색창에서 'Test Bench' 항목을 내려 테스트벤치 파일 fir_test.c 을 더블 클릭 하면 정보창에 편집이 가능한 상태로 파일 내용을 보여준다.

2. 디자인 소스 파일이 열리면 부가 창(Auxiliary pane)에 해당 소스 파일에 포함된 디자인 모듈(C의 경우 함수)들을 나열해 주어서 여러 모듈들을 포함하는 경우 쉽게 검색할 수 있다.

설계 모듈의 탐색 뿐만 아니라 모듈에서 사용되고 있는 자원들을(resources) 나열해 준다. 모듈의 자원 으로는 입출력(in-output), 정적 자료(statics), 라벨이 붙은 제어 블럭(labeled control block)들을 보여준다. 합성 결과를 분석하고 생성된 RTL 과 비교할 때 매우 유용하다.

아울러 각 자원들에 합성 지정자(synthesis directives)를 설정해 주는 경우에 매우 유용하다.

3. 테스트 벤치 fir_test.c 의 최상위 모듈 명은 main() 이다. 설계 모듈 fir() 을 테스트 하기 위해,
    - 환경을 구축: 필터계수를 배열 변수 tabs[N] 로 구현
    - 테스트 입력 발생: 단순증감 형태로 주어지는 시험 입력신호 signal
    - 설계 모듈을 호출: for-loop 내에서 스트림 형식의 테스트 입력에 대하여 반복적으로 호출
    - 설계 모듈 fir()이 반환하는 출력을 파일 out.dat 에 기록
    - 테스트 완료 후 표준 파일 out.gold.dat 과 비교
    - 검증 결과를 성공 또는 실패로 판단하여 결과 메시지 출력

C 로 작성된 테스트 벤치 fir_test.c 의 내용은 다음과 같다.

C 로 작성된 테스트 벤치는 향후 RTL 검증을 위한 시뮬레이션에서도 재사용된다. 위의 C 테스트 벤치의 예 처럼 실행중 검증의 성패를 자체 검사(self-checking) 할 수 있도록 작성되었다면 RTL 시뮬레이션에서도 자동 검사 될 것이다.

비바도 HLS 검증 툴은 검증이 성공한 경우 main()은 0을 반환하며 그 외 값이나 반환 값이 없을 경우 검증 실패 했음을 알리는 것으로 정했다.

비바도 HLS 도구는 C 로부터 RTL 테스트 벤치를 자동생성 해주는 툴을 가지고 있다. C 테스트 벤치가 위의 작성요건을 갖춘다면 다른 수고 없이 RTL 테스트 벤치를 자동생성 해준다. 따라서 C 시뮬레이션과 RTL 시뮬레이션이 일치하게 된다. 아주 탄탄 하면서 생산적인 검증 환경이라고 할 만 하다.

GCC 의 디버그 옵션을 주고 컴파일 하면 여러가지 일을 수행 할 수 있다. 시험 대상이 되는  DUT (Design Under Test)인 fir()과 테스트 환경 사이에 주고받는(transaction) 모든 인수 값을 캡춰해서 파일로 저장해 두고 이를 RTL 시뮬레이션 수행용 시험 벡터로 활용한다. 이런 테스트 벡터 자동 생성 기법(Automatic Test Pattern/Vector Generation)을 통하면 RTL 시뮬레이션에 필요한 테스트 벡터 생성시 오류가 끼어들 여지가 없다. 하지만 진정한 Co-Simulation이라고 할 수 없다.

4. 설계 플로우 탐색창(Flow Explore)에서 'C Simulation' 을 클릭 하여 C 코드 검증을 실시한다.

GCC 컴파일러로 C 소스 파일과 테스트 벤치를 컴파일 하여 실행 파일을 생성하고 실행 하여 결과를 보여줄 것이다.

만일 C 시뮬레이션 실패 메시지를 보게 된다면 디버거를 띄워 오류를 추적 해 볼 수 있다. 컴파일 후 디버거 실행을 하려면 'Launch Debugger' 옵션을 선택 한다. [주의: GNU GCC 디버거 GDB는 사용 방법이 매우 어렵다.]

---------------------------------------------------------------------------------
고위 합성 튜토리얼(High-Level Synthesis Tutorial)

댓글 없음:

댓글 쓰기