FPGA 프로그래밍이란?
FPGA(Field-Programmable Gate Array)는 프로그래밍을 통해 기능을 사용자 지정할 수 있는 디지털 논리 회로가 포함된 전자 소자입니다. FPGA의 논리는 사용자의 특정 애플리케이션을 수행하도록 프로그래밍되어 있으므로 범용 애플리케이션 프로세서에서 실행되는 소프트웨어 명령어보다 더 빠르고 더 적은 전력으로 이러한 기능을 실행할 수 있습니다. 또한 소자에 프로세서가 있는 FPGA는 시스템 온 칩 또는 SoC FPGA라고 부릅니다.
FPGA를 프로그래밍하는 방법
MATLAB® 또는 Simulink®에서 알고리즘부터 시작하는 경우 먼저 인가 및 분석에서 설계를 분할하여 하드웨어 파티션의 입력과 출력을 정의해야 합니다.
FPGA 프로그래밍의 주요 단계:
- 하드웨어 아키텍처 설계. SoC FPGA의 경우에는 하드웨어-소프트웨어 SoC 아키텍처입니다.
- 설계. 하드웨어 논리 자체를 생성하는 과정입니다. 일반적으로 VHDL® 또는 Verilog®와 같은 하드웨어 기술 언어(HDL)를 사용하여 레지스터 전달 논리(RTL)를 작성합니다. 이 단계의 목표는 효율성을 위해 고정소수점 연산을 이용하여 지속적인 데이터 스트림에 대해 연산하면서 알고리즘의 기능을 일치시키는 것입니다.
- 검증. 이 단계에서는 FPGA 프로그래밍 전에 설계가 의도한 대로 작동하는지 확인합니다. 확인 과정은 VHDL 테스트 벤치 또는 Verilog 테스트 벤치와 같이 단순할 수 있습니다. 상업용 프로젝트에서는 일반적으로 UVM(Universal Verification Methodology)과 같은 방법론을 이용합니다.
- 합성. 이 기술을 통해서는 RTL이 디지털 논리 게이트로 변환되고 FPGA에서 리소스의 사용을 최소화하면서 레지스터-레지스터 클럭 주파수 목표가 충족되도록 시도합니다.
- 통합. FPGA에는 핀, 클럭 신호, 아날로그-디지털 변환기(ADC)와 같은 입출력 처리 및 보드의 오프칩 메모리와 다른 기기 인터페이스 등의 여러 전용 리소스가 이미 포함되어 있습니다. SoC FPGA에도 하드웨어와 소프트웨어에서 서로 통신하는 데 이용할 수 있는 전용 레지스터가 포함되어 있습니다. 사용자의 설계를 이 "참조 설계"에 맞춰 연결해야 합니다.
- 구현. 어떤 논리로 FPGA에서 어떤 물리적 리소스를 프로그래밍할지와 이를 연결(라우팅)하는 방법을 결정하는 과정입니다. 이를 통해 FPGA 프로그래밍을 위해 소자로 불러오는 비트스트림이 생성됩니다.
- 랩 테스트 및 디버그. FPGA 프로그래밍 후 실제 입력 또는 테스트 입력을 사용하여 실행할 수 있습니다. 처음 몇몇 시도에서는 대개 작동하지 않는 이유와 수정하는 방법을 알아보게 될 것입니다. 이는 대부분 검증 단계에서 식별되지 않은 설계 단계에서의 문제로 인해 생긴 것입니다.
MATLAB 및 Simulink를 사용한 FPGA 프로그래밍
MATLAB 및 Simulink에서 알고리즘을 모델링하면 알고리즘과 하드웨어 아키텍처 설계에 집중할 수 있습니다. MATLAB 및 Simulink를 사용한 FPGA 프로그래밍의 주요 단계는 다음과 같습니다.
- 하드웨어 아키텍처 추가. 일반적으로 고정소수점 데이터형을 사용하여 지속적인 데이터 스트림을 처리하려면 하드웨어 아키텍처를 추가하도록 알고리즘을 변경해야 합니다. Simulink는 하드웨어 아키텍처 설계 를 위한 시간 기반 시각적 환경을 제공합니다. 이 버전의 설계를 시뮬레이션한 후 골든 알고리즘 결과와 비교하는 것이 이상적인 방식입니다.
- 코드 생성. 하드웨어에 대해 준비된 설계를 얻으면 HDL Coder™는 DO-254 및 ISO 26262 와 같은 기능 안전 워크플로에 대한 추적성과 디버깅을 위한 모델까지의 링크가 포함된 타겟 독립적인 Verilog 또는 VHDL RTL을 생성합니다.
- 통합. HDL Coder로 FPGA 프로그래밍을 위해 알고리즘을 연결하려면 참조 설계가 여전히 필요합니다. 다수의 참조 설계가 하드웨어 지원 패키지를 통해 또는 FPGA 보드 공급업체에서 제공됩니다.
- 합성 및 구현. HDL Coder는 RTL 합성을 위한 스크립트와 프로젝트를 생성할 수 있으며, 자동화된 FPGA 프로그래밍 워크플로를 제공하기 위해 AMD, Intel 및 Microsemi의 합성 및 구현 툴과 통합됩니다.
- 확인. RTL이 알고리즘과 동일하게 기능하는지 확인하는 가장 간단한 방법은 HDL Verifier™를 사용하여 Mentor Graphics® Questa® 또는 Cadence® Xcelium™에서 실행되는 RTL을 MATLAB 및 Simulink의 설계 및 테스트 벤치와 함께 시뮬레이션하는 것입니다. FPGA에서의 디버깅은 가시성이 훨씬 더 낮고 더 긴 반복을 필요로 하므로 FPGA 프로그래밍 전에 가능한 한 많은 시나리오와 코너 케이스를 테스트하십시오. Simulink Test™를 사용하여 테스트 케이스를 프로그래밍 방식으로 실행 및 관리할 수 있고, Simulink Coverage™를 사용하여 설계를 얼마나 잘 검증했는지 측정할 수 있습니다.
- 랩 테스트 및 디버그. HDL Verifier를 사용하여 AXI 마스터로 사용되는 MATLAB에서 FPGA로 데이터를 분산하는 논리를 삽입하고, 디버그를 위해 FPGA 내부 신호에서 데이터를 캡처하는 논리를 삽입할 수 있습니다. FPGA 프로그래밍 워크플로를 위해 사용하는지 여부와는 상관없이 FPGA를 직접 디버그하기 위해 MATLAB 및 Simulink를 사용할 수 있습니다.
예제 및 방법
비디오
뉴스 및 문서
참조: HDL Coder, HDL Verifier