어플리케이션 노트

MathWorks HDL Coder를 사용한 Moku 클라우드 컴파일

Moku:Pro에서 배포 가능한 VHDL 코드 생성하기 1부 - MATLAB

Liquid Instruments의 Moku Cloud Compile 도구를 사용하면 사용자는 Moku:Pro FPGA에 자신만의 맞춤형 디지털 신호 처리(DSP)를 배포할 수 있습니다. FPGA 프로그래밍은 일반적으로 HDL(하드웨어 설명 언어)을 사용하여 수행됩니다. HDL 코딩의 학습 곡선은 소프트웨어 프로그래밍 언어에 비해 가파르기 때문에 이 튜토리얼에서는 Moku 플랫폼에서 구현할 VHDL 코드를 자동 생성하기 위해 MATLAB 및 Simulink를 사용하여 DSP 동작/알고리즘을 프로그래밍하고 구축하는 방법을 다룹니다. 이 튜토리얼의 1부에서는 MATLAB 스크립트를 VHDL 코드로 변환하는 방법을 보여줍니다. 파트 2 튜토리얼에서는 Simulink 모델을 VHDL 코드로 변환하는 방법을 보여줍니다.

인쇄 가능한 버전 다운로드


살펴보기

Moku 클라우드 컴파일

Liquid Instruments의 MCC(Moku Cloud Compile) 도구를 사용하면 사용자는 Moku 플랫폼에서 구현할 맞춤형 기기를 설계할 수 있습니다. CPU 및 ASIC(주문형 집적 회로) 기반 DSP 접근 방식과 비교할 때 FPGA는 CPU처럼 소프트웨어로 정의되고 재프로그래밍 가능하면서 ASIC 수준의 입력-출력 대기 시간을 제공합니다. FPGA 프로그래밍은 일반적으로 HDL(하드웨어 설명 언어)을 사용하여 수행됩니다. HDL 코딩의 학습 곡선은 소프트웨어 프로그래밍 언어에 비해 가파르지만 다른 프로그래밍 언어의 스크립트를 HDL로 변환하는 데 사용할 수 있는 몇 가지 도구가 있습니다. 이 튜토리얼에서는 MathWorks HDL 코더를 사용하여 Moku:Pro에서 구현하기 위해 MATLAB 코드를 HDL 코드로 변환하는 방법을 보여줍니다.

이 튜토리얼의 1부에서는 MATLAB HDL Coder를 사용한 VHDL 코드 생성에만 중점을 둘 것입니다. 이 방법은 이미 MATLAB 프로그래밍에 익숙한 사용자에게 권장됩니다. 이 튜토리얼의 2부에서는 Simulink 모델에서 VHDL 코드 생성을 다룹니다. Simulink 모델의 블록 다이어그램 형식을 사용하면 시스템과 데이터 흐름을 더 쉽게 시각화할 수 있으며 사용자는 MATLAB 기능 블록을 설계에 추가할 수도 있습니다. 보다 복잡한 시스템의 경우 두 도구를 모두 활용하면 설계 프로세스를 크게 간소화할 수 있습니다.

MATLAB HDL Coder 방법의 설계 프로세스는 그림 4에서 DSP 설계, 부동 소수점 시뮬레이션, HDL 생성, DSP 배포 및 검증의 1가지 최상위 단계로 나눌 수 있습니다. Moku:Pro에서 구현하기 위해 MATLAB HDL Coder를 사용하여 디지털 슈미트 트리거를 구축하려면 다음 단계를 따르세요.


그림 1: Cloud Compile + HDL Coder DSP 설계에 권장되는 워크플로.

슈미트 트리거

슈미트 트리거는 비교기 회로의 변형입니다. 입력이 특정 전압 임계값보다 높거나 낮은지 여부에 따라 1비트 디지털 출력을 제공합니다. 표준 연산 증폭기 기반 비교기에는 단일 임계값이 있습니다. 잡음이 많은 입력 신호의 경우 임계값 전압에서 점프하여 입력이 임계값에 가깝거나 임계값을 넘을 때 불안정한 출력을 생성할 수 있습니다. 슈미트 트리거에는 두 가지 임계값이 있는데, 켜기 위한 더 높은 임계값과 끄기 위한 더 낮은 임계값입니다. 이 경우 노이즈 입력이 스위치 켜기 임계값을 초과하고 다시 점프하더라도 더 높은 임계값과 낮은 임계값 사이의 간격이 "보호 영역"을 생성하여 디지털 출력을 변경하지 않고 유지합니다. 이 장치는 일반적으로 장치 트리거 또는 사인파-구형파 변환기로 사용됩니다.


그림 2: 비교기와 슈미트 트리거 간의 비교.

요구조건 니즈

슈미트 트리거 구축 및 구현을 시작하기 전에 시스템이 다음 요구 사항을 충족하는지 확인하십시오. MATLAB 스크립트에서 VHDL 코드를 생성하려면 HDL 코더 및 고정 소수점 변환기가 포함된 MATLAB이 필요합니다. 튜토리얼의 551부에서 Simulink를 사용하여 시스템을 구축하려면 Simulink가 필요합니다. 참고: Mac 사용자는 HDL Coder가 작동하려면 XCode도 설치해야 합니다. VHDL 코드를 컴파일하려면 Liquid Instruments Cloud Compile에 대한 액세스 권한이 필요합니다. 컴파일된 기기 비트스트림을 구현하려면 펌웨어 버전 XNUMX 이상을 실행하는 Moku:Pro, Moku: iPad 앱, Moku:Pro의 다중 기기 모드에 대한 액세스 권한이 필요합니다.

DSP 디자인

컨셉 디자인

슈미트 트리거에는 단일 입력과 출력이 있습니다. 아날로그 입력 신호는 상한 및 하한 임계값과 비교됩니다. 이 예에서 상한 임계값은 전체 양수 입력 범위의 1/10이고 하한 임계값은 전체 음수 범위의 1/10입니다. 입력 신호가 상한 임계값보다 높으면 출력은 2^15-1(출력이 생성할 수 있는 가장 큰 16비트 부호 있는 정수)로 설정됩니다. 입력 신호가 하한 임계값보다 낮으면 출력은 0으로 설정됩니다. 또는 이러한 조건 중 어느 것도 충족되지 않으면 이전 상태로 유지됩니다.

부동 소수점 DSP 설계

이 섹션에서는 영속 변수와 if-elseif 문을 사용하여 위의 개념 설계를 MATLAB 함수로 변환합니다.

 

슈미트 트리거 DSP 기능에서는 하나의 입력 채널(InputA)과 하나의 출력 채널(OutputA)만 필요합니다. 단일 입력과 출력을 갖는 MATLAB 'DSP'를 생성하겠습니다. DSP 모듈은 기능 형식으로 설계되어야 합니다.

함수 출력A = DSP(입력A)

그런 다음 영속 변수 out0과 논리 연산을 위한 if-elseif 문으로 함수를 채울 수 있습니다.

부동 소수점 시뮬레이션

시뮬레이션과 검증은 FPGA 설계에서 중요한 단계입니다. 시스템의 응답을 관찰하기 위해 시뮬레이션된 신호를 입력하는 "테스트벤치"를 구성하여 디지털 시스템의 응답을 검증하는 것이 일반적인 관행입니다. 부동소수점 설계를 고정소수점 설계로 변환하려면 테스트벤치가 필요합니다. 기본 고정 소수점 설계의 경우 테스트 벤치는 선택 사항입니다. 그러나 모든 설계에 대해 항상 테스트벤치 시뮬레이션을 실행하는 것이 좋습니다.

테스트벤치 구축

MATLAB에서 테스트벤치는 다양한 입력이 포함된 루프에서 함수(예: 이 자습서의 DSP 함수)를 호출하는 MATLAB 스크립트로 간주될 수 있습니다. 이 튜토리얼에서는 부동 소수점 설계, 고정 소수점 설계, HDL 설계라는 세 가지 테스트 벤치 검증을 수행합니다. 첫 번째 테스트벤치는 부동 소수점 모델을 검증하는 것이고, 두 번째는 고정 소수점 변환 후 시스템 동작을 검증하는 것이며, 마지막은 EDA 소프트웨어에서 VHDL 시뮬레이션을 통해 HDL 모델을 검증하는 것입니다.

테스트벤치의 처음 두 라운드는 MATLAB에서 동일한 테스트벤치 스크립트를 사용하여 시뮬레이션된 입력 신호로 수행됩니다. 시뮬레이션된 신호는 동적 범위 및 정밀도 측면에서 실제 입력 신호에 근접해야 합니다. 이는 MATLAB의 고정 소수점 도구가 고정 소수점 모델에 가장 적합한 정밀도를 결정하는 데 도움이 됩니다.

DSP 기능 테스트벤치는 예제 데이터 세트를 입력 신호로 로드하여 작동합니다. 이 신호는 튜토리얼 파트 II의 Simulink 모델과 일치합니다. 그런 다음 DSP 함수는 for 루프에서 호출되고 출력은 그림 3에 표시됩니다. 출력은 DSP 함수가 우리가 설계하려는 슈미트 트리거와 일치하는지 확인하므로 이제 MATLAB HDL Coder를 사용하여 HDL 코드 생성을 진행할 수 있습니다.


그림 3: MATLAB 시뮬레이션의 출력

HDL 코드 생성

MATLAB HDL Coder는 고정 소수점 변환, HDL 생성 및 HDL 테스트벤치 생성 프로세스가 포함된 Workflow Advisor를 통해 전체 HDL 코드 생성 프로세스를 통해 사용자를 안내합니다. DSP 기능을 HDL 코드로 변환하는 프로세스를 시작하려면 먼저 MATLAB에서 HDL Coder 앱을 시작하고 새 프로젝트를 만듭니다. 또는 MATLAB 명령 창에 "hdlcoder"를 입력할 수 있습니다.


그림 4: HDL Coder 앱은 앱 탭에서 찾아 새 HDL Coder 프로젝트를 생성할 수 있습니다.

HDL 코드 생성 창이 나타나면 MATLAB 함수(DSP)와 해당 테스트벤치를 추가할 수 있습니다. 여기에서 "자동 정의 유형"을 사용하여 함수의 입력 변수 유형을 정의하거나 워크플로 어드바이저에서 이를 완료할 수 있습니다. 대부분의 경우 입력 변수는 다음과 같이 정의할 수 있습니다. 더블, 이 시점에서 우리 모델은 부동 소수점이기 때문입니다.


그림 5: DSP.m 및 DSP_tb.m은 HDL 생성을 위한 소스로 사용됩니다.

이제 우리는 워크플로우 어드바이저 슈미트 트리거 HDL 코드를 생성합니다.

고정 소수점 변환

소프트웨어 모델과 FPGA 모델의 주요 차이점 중 하나는 소프트웨어 계산에는 일반적으로 부동 소수점 숫자가 사용되는 반면, 대부분의 FPGA 계산에는 고정 소수점 숫자가 필요하다는 것입니다. MATLAB의 기본 형식은 부동 소수점 숫자입니다. 따라서 우리는 이 부동 소수점 설계를 HDL 코드 생성을 위한 고정 소수점 모델로 변환해야 합니다.

MathWorks의 고정 소수점 도구는 테스트벤치 입력 데이터 범위를 기반으로 부동 소수점 모델을 고정 소수점 모델로 자동 변환합니다. 필요한 경우 사용자는 자동으로 정의된 범위를 수동으로 재정의할 수 있습니다. Moku Cloud Compile의 경우 입력, 출력 및 제어 신호 유형은 서명된 16비트 숫자인 Moku Cloud Compile 인터페이스와 일치해야 합니다. MATLAB은 이를 숫자 유형(1,16,0)으로 표시합니다. 여기서 "1"은 신호를 부호 있는 숫자로 지정하고, "16"은 단어 길이를 16비트로 지정하고, "0"은 이진 포인트 스케일링을 지정하지 않음을 의미합니다.

고정 소수점 변환을 시작하려면 먼저 "분석" 버튼을 클릭하고 HDL Coder가 테스트벤치 파일을 기반으로 데이터 유형과 범위를 결정하도록 합니다. 제안된 유형이 하드웨어 인터페이스 요구 사항(예: 숫자 유형(1,16,0))과 일치하지 않는 경우 변수에 대해 제안된 유형을 클릭하고 숫자 유형(1,16,0)을 입력하여 입력 및 출력 데이터 유형을 수동으로 재정의합니다. ). 그런 다음 "유형 검증"을 클릭하여 데이터 유형을 검증하고 고정 소수점 모델을 생성합니다.


그림 6: 1. 테스트벤치 입력 신호로 데이터 유형을 분석합니다. 2. 필요한 경우 데이터 유형을 수동으로 재정의합니다. 3. 설계를 검증하고 고정점 모델을 생성합니다.

고정점 모델 검증

고정 소수점 모델 변환 후에는 또 다른 시뮬레이션을 실행하여 고정 소수점 모델이 예상대로 작동하는지 확인하고 정밀도 손실을 평가해야 합니다. 고정 소수점 모델 검증은 “Test Numerics” 버튼을 통해 수행됩니다. 부동 소수점 모델의 변수를 고정 소수점 모델의 동일한 변수와 비교하기 위한 플롯이 생성되므로 "비교 플롯에 대한 로그 입력 및 출력"을 선택하십시오.


그림 7: 부동 소수점 모델과 고정 소수점 모델 간의 변수 OutputA 비교

허용할 수 없는 정밀도 손실이 관찰되면 가변 정밀도를 높인 다음 고정 소수점 변환을 반복하십시오. 입력, 출력 및 제어 신호의 정밀도는 하드웨어 인터페이스와 일치해야 합니다.

고정 소수점 모델이 테스트벤치 검증을 통과하면 슈미트 트리거 모델에 대한 VHDL 코드 생성을 진행할 수 있습니다.

VHDL 코드 생성

메뉴에서 “Select Code Generation Target”으로 진행하여 “Generic ASIC/FPGA”로 두겠습니다.

"HDL 코드 생성" 단계에서는 "대상"과 "클럭 및 포트"를 구성해야 합니다.

  • 목표:
    • 세트 지원하는 언어VHDL
  • 시계 및 포트:
    • 세트 리셋 타입동시의
    • 체크 시계 최소화 활성화
    • 세트 입력 데이터 유형서명됨/서명되지 않음
    • 세트 출력 데이터 유형서명됨/서명되지 않음

"실행"을 클릭하면 시스템의 VHDL 코드가 아래에 나타납니다. …\codegen\DSP\hdlsrc 폴더에 있습니다.


그림 8: VHDL에 대한 대상 언어를 선택하고 코드 생성을 실행합니다.

타사 도구를 사용한 VHDL 시뮬레이션(선택 사항)

HDL Coder는 EDA 소프트웨어에서 시뮬레이션을 실행하기 위한 HDL 테스트벤치 파일도 생성할 수 있습니다. 타사 HDL 시뮬레이터를 사용하여 모델을 검증하면 설계에 대한 추가 보안 계층이 제공됩니다. 이 단계는 선택 사항이지만 복잡한 시스템에는 적극 권장됩니다. 테스트벤치 파일은 "HDL 검증" 단계에서 생성될 수 있습니다. 워크플로우 어드바이저.


그림 9: (a) HDL Coder에서 HDL 테스트벤치 파일을 생성할 수 있습니다. (b) Xilinx Vivado를 사용한 HDL 레벨 시뮬레이션

컴파일 및 배포

이제 Schmitt 트리거용 VHDL 코드가 있으므로 Liquid Instruments의 Moku Cloud Compile을 사용하여 계측기를 컴파일한 다음 Moku:Pro에 배포할 준비가 되었습니다.

악기 포장지

Moku Cloud Compile에는 맞춤형 도구가 Moku의 다른 부분과 상호 작용할 수 있도록 표준 래퍼가 내장되어 있습니다. 표준 래퍼는 계측기의 입력 채널 4개와 출력 채널을 모두 사용합니다. 이는 입력 1개와 출력 1개만 있는 슈미트 트리거 예와 일치하지 않습니다. 따라서 계측기에 대한 사용자 정의 래퍼를 생성해야 합니다.

이 튜토리얼에서는 MATLAB에서 생성된 VHDL 코드에 대한 래퍼 템플릿이 제공됩니다. 세 가지 래퍼 템플릿이 제공됩니다. 하나는 MATLAB HDL Coder에서 생성된 VHDL 코드용으로 설계된 것(예: 이 튜토리얼), 하나는 Simulink에서 생성된 VHDL 코드용으로 설계된 것(예: 이 튜토리얼의 파트 II), 마지막으로 하나는 코드 사용을 위한 것입니다. 포함 퇴출 포트. 애플리케이션에 적합한 래퍼 템플릿을 선택하기 전에 VHDL 코드의 포트 정의 섹션을 검사하세요.

다음은 슈미트 트리거 장비를 컴파일하는 데 사용할 사용자 정의 래퍼입니다.

계측기 컴파일 및 배포

Moku Cloud Compile을 사용하여 계측기 비트스트림을 구축하고 계측기를 배포하는 방법에 대한 자세한 지침은 당사에서 찾을 수 있습니다. Moku 클라우드 컴파일 시작 가이드.

Schmitt 트리거를 컴파일하려면 Liquid Instruments의 Moku Cloud Compile에서 새 프로젝트를 만듭니다. 이 프로젝트에서는 슈미트 트리거용 VHDL 코드인 DSP_fixpt.vhd용 파일을 생성합니다. 또한 이전 섹션에서 사용자 정의 래퍼에 대한 래퍼 파일을 만듭니다. 4개의 슬롯이 있는 Moku:Pro로 대상 장치를 선택하고 프로젝트를 빌드합니다. 비트스트림이 구축되면 웹 인터페이스와 iPad 앱을 사용하여 Moku:Pro에 Schmitt Trigger를 배포할 수 있습니다.

처음부터 슈미트 트리거가 개념 설계로 작동하고 있음을 보여주기 위해 다중 계측기 모드에서 Moku: 앱을 사용하여 준수된 DSP를 시스템에 배치했습니다. 슬롯 1에서는 슈미트 트리거에 대한 입력 신호로 테스트 벤치에서 사용한 것과 동일한 신호를 생성하기 위해 임의 파형 발생기에 배치했습니다. 슬롯 2에서는 슈미트 트리거를 배치했습니다. 슬롯 3에는 오실로스코프를 배치했습니다. 입력 1은 슈미트 트리거의 출력을 표시하고 입력 2는 신호 비교를 위해 임의 파형 발생기의 신호 출력을 표시합니다. 신호가 110mV를 넘으면 슈미트 트리거의 출력이 하이로 전환되고 신호가 -110mV 아래로 떨어질 때까지 하이로 유지되는 것을 볼 수 있습니다. 이는 슈미트 트리거가 설계된 대로 작동하고 있음을 확인합니다.


그림 10: (a) 다중 계측기 시스템 구성. (b) 슈미트 트리거가 설계된 대로 작동하는지 확인하는 오실로스코프 측정.

결론

이 튜토리얼에서는 MATLAB 스크립트를 Moku 플랫폼에서 구현하기 위해 컴파일할 수 있는 VHDL 코드로 변환하는 자세한 프로세스를 다루었습니다. 이 프로세스에는 DSP 설계, 부동 소수점 시뮬레이션, HDL 생성, DSP 배포 및 검증이라는 4가지 최상위 프로세스가 포함됩니다. 이 프로세스를 통해 HDL 프로그래밍을 배울 필요가 없으며 사용자가 직접 맞춤형 계측기를 설계하고 제작할 수 있습니다.

코드 가용성

이 프로젝트의 소스 코드는 다음에서 다운로드할 수 있습니다. 이 링크.


질문이나 의견이 있으십니까?

support@liquidinstruments.com로 문의 부탁드립니다.