FPGA 프로그래밍

FPGA 프로그래밍이란?

FPGA(Field-Programmable Gate Array)는 프로그래밍을 통해 기능을 사용자 지정할 수 있는 디지털 논리 회로가 포함된 전자 소자입니다. FPGA의 논리는 사용자의 특정 애플리케이션을 수행하도록 프로그래밍되어 있으므로 범용 애플리케이션 프로세서에서 실행되는 소프트웨어 명령어보다 더 빠르고 더 적은 전력으로 이러한 기능을 실행할 수 있습니다. 또한 소자에 프로세서가 있는 FPGA는 시스템 온 칩 또는 SoC FPGA라고 부릅니다.

FPGA를 프로그래밍하는 방법

MATLAB® 또는 Simulink®에서 알고리즘부터 시작하는 경우 먼저 인가 및 분석에서 설계를 분할하여 하드웨어 파티션의 입력과 출력을 정의해야 합니다.

하드웨어 타겟팅을 위한 알고리즘에서 테스트 벤치 요소 분할.

하드웨어 타겟팅을 위한 알고리즘에서 테스트 벤치 요소 분할.

FPGA 프로그래밍의 주요 단계:

  1. 하드웨어 아키텍처 설계. SoC FPGA의 경우에는 하드웨어-소프트웨어 SoC 아키텍처입니다.
  2. 설계. 하드웨어 논리 자체를 생성하는 과정입니다. 일반적으로 VHDL® 또는 Verilog®와 같은 하드웨어 기술 언어(HDL)를 사용하여 레지스터 전달 논리(RTL)를 작성합니다. 이 단계의 목표는 효율성을 위해 고정소수점 연산을 이용하여 지속적인 데이터 스트림에 대해 연산하면서 알고리즘의 기능을 일치시키는 것입니다.
  3. 검증. 이 단계에서는 FPGA 프로그래밍 전에 설계가 의도한 대로 작동하는지 확인합니다. 확인 과정은 VHDL 테스트 벤치 또는 Verilog 테스트 벤치와 같이 단순할 수 있습니다. 상업용 프로젝트에서는 일반적으로 UVM(Universal Verification Methodology)과 같은 방법론을 이용합니다.
  4. 합성. 이 기술을 통해서는 RTL이 디지털 논리 게이트로 변환되고 FPGA에서 리소스의 사용을 최소화하면서 레지스터-레지스터 클럭 주파수 목표가 충족되도록 시도합니다.
  5. 통합. FPGA에는 핀, 클럭 신호, 아날로그-디지털 변환기(ADC)와 같은 입출력 처리 및 보드의 오프칩 메모리와 다른 기기 인터페이스 등의 여러 전용 리소스가 이미 포함되어 있습니다. SoC FPGA에도 하드웨어와 소프트웨어에서 서로 통신하는 데 이용할 수 있는 전용 레지스터가 포함되어 있습니다. 사용자의 설계를 이 "참조 설계"에 맞춰 연결해야 합니다.
  6. 구현. 어떤 논리로 FPGA에서 어떤 물리적 리소스를 프로그래밍할지와 이를 연결(라우팅)하는 방법을 결정하는 과정입니다. 이를 통해 FPGA 프로그래밍을 위해 소자로 불러오는 비트스트림이 생성됩니다.
  7. 랩 테스트 및 디버그. FPGA 프로그래밍 후 실제 입력 또는 테스트 입력을 사용하여 실행할 수 있습니다. 처음 몇몇 시도에서는 대개 작동하지 않는 이유와 수정하는 방법을 알아보게 될 것입니다. 이는 대부분 검증 단계에서 식별되지 않은 설계 단계에서의 문제로 인해 생긴 것입니다.
알고리즘 설계부터 FPGA 프로그래밍까지 진행되는 일반적인 워크플로.

알고리즘 설계부터 FPGA 프로그래밍까지 진행되는 일반적인 워크플로.

MATLAB 및 Simulink를 사용한 FPGA 프로그래밍

MATLAB 및 Simulink에서 알고리즘을 모델링하면 알고리즘과 하드웨어 아키텍처 설계에 집중할 수 있습니다. MATLAB 및 Simulink를 사용한 FPGA 프로그래밍의 주요 단계는 다음과 같습니다.

  1. 하드웨어 아키텍처 추가. 일반적으로 고정소수점 데이터형을 사용하여 지속적인 데이터 스트림을 처리하려면 하드웨어 아키텍처를 추가하도록 알고리즘을 변경해야 합니다. Simulink는 하드웨어 아키텍처 설계 를 위한 시간 기반 시각적 환경을 제공합니다. 이 버전의 설계를 시뮬레이션한 후 골든 알고리즘 결과와 비교하는 것이 이상적인 방식입니다.
  2. 코드 생성. 하드웨어에 대해 준비된 설계를 얻으면 HDL Coder™는 DO-254 및 ISO 26262 와 같은 기능 안전 워크플로에 대한 추적성과 디버깅을 위한 모델까지의 링크가 포함된 타겟 독립적인 Verilog 또는 VHDL RTL을 생성합니다.
  3. 통합. HDL Coder로 FPGA 프로그래밍을 위해 알고리즘을 연결하려면 참조 설계가 여전히 필요합니다. 다수의 참조 설계가 하드웨어 지원 패키지를 통해 또는 FPGA 보드 공급업체에서 제공됩니다.
  4. 합성 및 구현. HDL Coder는 RTL 합성을 위한 스크립트와 프로젝트를 생성할 수 있으며, 자동화된 FPGA 프로그래밍 워크플로를 제공하기 위해 AMD, Intel 및 Microsemi의 합성 및 구현 툴과 통합됩니다.
하드웨어 세부 사항으로 알고리즘을 미세 조정한 후 합성 가능한 RTL을 생성하여 FPGA 개발 키트 또는 사용자 지정 보드를 타겟팅합니다.

하드웨어 세부 사항으로 알고리즘을 미세 조정한 후 합성 가능한 RTL을 생성하여 FPGA 개발 키트 또는 사용자 지정 보드를 타겟팅합니다.

  1. 확인. RTL이 알고리즘과 동일하게 기능하는지 확인하는 가장 간단한 방법은 HDL Verifier™를 사용하여 Mentor Graphics® Questa® 또는 Cadence® Xcelium™에서 실행되는 RTL을 MATLAB 및 Simulink의 설계 및 테스트 벤치와 함께 시뮬레이션하는 것입니다. FPGA에서의 디버깅은 가시성이 훨씬 더 낮고 더 긴 반복을 필요로 하므로 FPGA 프로그래밍 전에 가능한 한 많은 시나리오와 코너 케이스를 테스트하십시오. Simulink Test™를 사용하여 테스트 케이스를 프로그래밍 방식으로 실행 및 관리할 수 있고, Simulink Coverage™를 사용하여 설계를 얼마나 잘 검증했는지 측정할 수 있습니다.
  2. 랩 테스트 및 디버그. HDL Verifier를 사용하여 AXI 마스터로 사용되는 MATLAB에서 FPGA로 데이터를 분산하는 논리를 삽입하고, 디버그를 위해 FPGA 내부 신호에서 데이터를 캡처하는 논리를 삽입할 수 있습니다. FPGA 프로그래밍 워크플로를 위해 사용하는지 여부와는 상관없이 FPGA를 직접 디버그하기 위해 MATLAB 및 Simulink를 사용할 수 있습니다.
MATLAB 및 Simulink를 지원되는 시뮬레이터 또는 FPGA 보드에서 실행되는 구현된 설계와 함께 시뮬레이션.

MATLAB 및 Simulink를 지원되는 시뮬레이터 또는 FPGA 보드에서 실행되는 구현된 설계와 함께 시뮬레이션.

참조: HDL Coder, HDL Verifier