글│Glenn Steiner, Kunal Shenoy, Dan Isaacs, David Pellerin, 자일링스
C Code-to-HDL 변환
C-to-HDL 도구를 사용하여 C 코드를 HDL 가속기로 변환함으로써 하드웨어 코프로세서를 효율적으로 작성할 수 있다. 이러한 C-to-HDL 변환 프로세스는 그림 3과 아래 단계를 통해 쉽게 이해할 수 있다.
1. 표준 C 도구를 사용하여 애플리케이션 또는 알고리즘을 구현한다. 성능 및 정확도의 기준이 되는 소프트웨어 테스트 벤치를 개발한다(호스트 또는 데스크탑 시뮬레이션). 프로파일러(예: gprof)를 사용하여 중요 기능을 식별한다.
2. 부동 소수점 대 고정 소수점 간 변환이 올바른지 확인한다. 라이브러리 또는 매크로를 사용하여 이러한 변환을 지원한다. 기준 테스트 벤치를 사용하여 성능과 정확도를 분석한다. 프로파일러를 사용하여 중요 기능을 재평가한다.
3. Impulse C와 같은 C-to-HDL 도구를 사용하여 다음과 같은 중요 기능을 각각 반복한다.
․알고리즘을 병렬 프로세스로 분할한다.
․하드웨어/소프트웨어 프로세스 인터페이스를 만든다(스트림, 공유 메모리, 신호).
․중요 코드 섹션(예: 내부 코드 루프)을 자동으로 최적화하고 병렬화한다.
․데스크탑 시뮬레이션, 주기별 C 시뮬레이션 및 실제 시스템 내부 테스트를 통해 결과 병렬 알고리즘을 테스트하고 확인한다.
4. C-to-HDL 도구를 사용하여 중요한 코드 세그먼트를 HDL 코프로세서로 변환한다.
5. 코프로세서를 APU 인터페이스에 연결하여 최종 테스트한다.
Impulse C는 데이터플로우 지향 애플리케이션에 맞게 설계되었지만 유연성이 뛰어나 다른 프로그래밍 모델도 지원할 수 있다.
Impulse: C-to-HDL 도구
Impulse C(그림 4)를 사용하는 임베디드 시스템 설계자는 C 호환 라이브러리 기능과 Impulse CoDeveloper C-to-hardware 컴파일러를 함께 사용함으로써 병렬형 FPGA 가속 애플리케이션을 만들 수 있다.
Impulse C는 올바르게 정의된 데이터 통신, 메시지 전달 및 동기화 메커니즘을 사용함으로써 혼합 하드웨어/소프트웨어 애플리케이션의 설계 작업을 단순화한다. 또한 Impulse C는 자동화된 C 코드 최적화 기능(예: 루프 파이프라인, 전개 및 연산자 스케줄링)과 대화식 도구를 제공하므로 하드웨어 작동을 주기별로 분석할 수 있다.
Impulse C는 데이터플로우 지향 애플리케이션에 맞게 설계되었지만 유연성이 뛰어나 공유 메모리 사용과 같은 다른 프로그래밍 모델도 지원할 수 있다. 이러한 특징은 FPGA 기반 애플리케이션에 따라 성능 및 데이터 요구 사항이 다르다는 점에서 중요하다. 일부 애플리케이션의 경우 블록 메모리 읽기 및 쓰기를 통해 임베디드 프로세서와 FPGA 간에 데이터를 이동하는 것이 효과적인 반면 스트리밍 통신 채널을 통해 보다 우수한 성능을 제공하는 경우도 있다. 특정 애플리케이션에 대한 최상의 결과를 얻기 위해서는 다른 알고리즘 접근 방식을 빠르게 모델링, 컴파일 및 평가하는 기능이 반드시 필요하다.
이를 위해 Impulse C 라이브러리는 새로운 데이터 유형 및 사전 정의된 함수 호출의 형태로 C 언어에 대한 최소 확장으로 구성된다. 즉, C 함수 호출을 사용함으로써 여러 병렬 프로그램 세그먼트(프로세스)를 정의할 수 있으며, 스트림, 신호 및 기타 메커니즘을 사용하여 세그먼트 간 상호 연결을 설명할 수 있다. Impulse C 컴파일러는 이러한 C 언어 프로세스를 다음과 같은 형태로 변환하여 최적화한다.
․FPGA로 통합할 수 있는 하위 레벨 HDL
․널리 사용되는 C 교차 컴파일러를 사용하여 지원되는 마이크로프로세서로 컴파일이 가능한 표준 C(관련 라이브러리 호출 포함)
전체 CoDeveloper 개발 환경에는 Microsoft Visual Studio 및 GCC/ GDB를 포함하여 표준 C 컴파일러 및 디버거와 호환되는 데스크탑 시뮬레이션 라이브러리가 포함된다.
Impulse C 프로그래머는 이러한 라이브러리를 사용함으로써 알고리즘 검증 및 디버그 목적으로 해당 애플리케이션을 컴파일하고 실행할 수 있다. C 프로그래머는 또한 병렬 프로세스를 검사하고 데이터 이동을 분석하며, Co-Developer 애플리케이션 모니터를 사용하여 프로세스 간 통신 문제를 해결할 수 있다.
Impulse C 애플리케이션 결과를 컴파일하면 일련의 하드웨어 및 소프트웨어 소스 파일이 생성되며 이러한 파일은 FPGA 통합 도구로 가져올 수 있다. 이러한 파일의 예는 다음과 같다.
․컴파일된 하드웨어 프로세스를 나타내며 자동으로 생성된 HDL 파일
․하드웨어 프로세스를 시스템 버스에 연결하는 데 필요한 스트림, 신호 및 메모리 구성 요소를 나타내며 자동으로 생성된 HDL 파일
․하드웨어/소프트웨어 스트림 연결의 소프트웨어 측면을 구성하며 자동으로 생성된 소프트웨어 구성 요소(런타임 라이브러리 포함)
․생성된 애플리케이션을 대상 FPGA 위치 및 라우트 환경으로 가져오기 위한 추가 파일(스크립트 파일 포함)
이 컴파일 프로세스를 수행하면 필요한 하드웨어/소프트웨어 인터페이스를 포함하여 FPGA 기반 프로그램 가능 플랫폼에서 구현할 수 있는 완벽한 애플리케이션이 생성된다.
설계 예
그림 5의 Mandelbrot 이미지는 과학 및 엔지니어링 분야에서 날씨와 같이 정형화되지 않은 현상을 시뮬레이션하기 위해 일반적으로 사용하는 프랙탈 기하학의 표준 예이다. 이러한 프랙탈 예는 비디오 렌더링 애플리케이션에서 텍스처 및 이미징을 생성하는 데도 사용된다. Mandelbrot 이미지는 자기 유사(Self-Similar)라는 표현으로 설명된다. 즉, 이미지의 일부를 확대하면 전체 이미지와 유사한 다른 이미지가 생성된다.
Mandelbrot 이미지는 단일 계산 중심(Computation-Intensive) 기능이 있다는 점에서 하드웨어/소프트웨어 공동 설계를 설명하는데 이상적이다. 이러한 중요 기능을 하드웨어 도메인에 구현하면 속도가 개선도어 전체 시스템의 속도 또한 현저히 증가하게 된다. 또한 Mandelbrot 이미지를 적용하면 하드웨어 프로세스와 소프트웨어 프로세스 간의 차이가 제거되어 C-to-HDL 도구를 사용한 구현이 쉬어진다.
이 설계 예에서는 CoDeveloper 도구 세트를 C-to-HDL 도구 세트로 사용했으며, 소프트웨어 전용 Mandelbrot C 프로그램이 C-to-HDL 도구와 호환되도록 수정했다. 또한 소프트웨어 프로젝트를 개별 프로세스(독립적인 순차 실행 단위)로 분할하고 기능 인터페이스(하드웨어 대 소프트웨어)를 스트림으로 변환했으며 생성된 하드웨어를 최적화하기 위해 컴파일러 지시문을 추가했다. 이어 CoDeveloper 도구 세트를 사용하여 XPS(Xilinx Platform Studio)로 가져온 Pcore 코프로세서를 만들었다. XPS는 파워PC APU 제어기 인터페이스에 PC를 연결하고 시스템을 테스트하는데 사용했다.
성능 개선 예
Mandelbrot 이미지 텍스처링 문제, 이미지 필터링 애플리케이션 및 3자리 DES 암호화에 대한 성능 개선 효과를 측정했다. 표 2는 이 측정 결과를 나타내며 가속화 범위는 소프트웨어 가속 속도의 11배에서 34배 수준이다.
결론
시스템 설계자는 전력, 공간 및 비용의 제약으로 인해 적합하지 않은 프로세서를 선택해야 하는 경우가 있으며 이러한 경우 프로세서가 제공하는 필요한 성능보다 낮은 것이 일반적이다. 소프트웨어 코드가 필요한 속도로 실행되지 않는 경우 코프로세서 코드 가속기를 통해 효과적인 솔루션을 제공할 수 있다. 즉, HDL로 가속기를 직접 만들거나 C-to-HDL 도구를 사용하여 C 코드를 HDL로 자동 변환시킬 수 있다.
이 때 Impulse C와 같은 C-to-HDL 도구를 사용하면 가속기를 빠르고 쉽게 생성할 수 있다. 버텍스-4 FX FPGA에는 하나 또는 두 개의 임베디드 파워PC가 프로세서 명령 파이프라인과 소프트웨어 가속기를 확고하게 결합할 수 있다.
앞에서 설명한 것처럼, 이를 통해 핵심 소프트웨어 루틴의 속도를 10배에서 30배 이상 향상시킴으로써 300MHz 파워PC가 기가헤르츠급의 고성능 프로세서와 같거나 그 이상의 성능을 제공할 수 있다. 위의 예는 각각 며칠 동안 생성된 예로서, C-to-HDL 플로우를 통해 실현할 수 있는 신속한 설계, 구현 및 테스트 과정을 보여준다.
<자료제공: 월간 반도체네트워크 2006년 10월호>