2016-11-21 2 views
5

저는 FPGA에서 실행되는 신경망을 구축하고 있으며 퍼즐의 마지막 부분은 하드웨어에서 시그 모이 드 기능을 실행하고 있습니다. 이 중 하나입니다시스템 Verilog의 float 값에 대해 e^x를 계산 하시겠습니까?

1/(1 + e^-x) 

또는

(atan(x) + 1)/2 

불행하게도, 여기에 X float 값 (SystemVerilog를에 real 값)입니다.

SystemVerilog에서 이러한 함수 중 하나를 구현하는 방법에 대한 정보가 있습니까?

이 두 함수가 모두 복잡하기 때문에 나에게 혼란 스럽습니다. float 값을 추가하는 복잡성으로 인해 구현을 시작할 위치조차도 알지 못합니다.

+0

어떤 FPGA를 설계하고 있습니까? DSP 리소스가 있습니까? – Hida

+0

FPGA에서 DSP 블록을 사용하여 시그 모이 드 기능을 계산하십시오. – noobuntu

+0

대기 시간 및 처리량 요구 사항은 무엇입니까? 그것은 내가 이것을 위해 디자인 할 어떤 것에도 큰 영향을 미칠 것입니다. 또한, 실제 (플로트)를 하드웨어로 합성 할 수있는 FPGA 툴에 익숙하지 않습니다 (존재할 수도 있지만 존재한다면 가능할 수도 있습니다). – hops

답변

0

이 간단한 방법은이 기능을위한 메모리/어레이를 만드는 것입니다. 그러나이 옵션은 매우 비효율적 일 수 있습니다.

x은 메모리의 입력 주소 여야하며 해당 위치의 값은 함수의 출력이 될 수 있습니다.

함수의 값이 다음과 같다고 가정합니다. (단지 예일뿐입니다)

x = 0 => f(0) = 1 
x = 1 => f(0) = 2 
x = 2 => f(0) = 3 
x = 3 => f(0) = 4 

그래서 출력 값을 저장하는 배열을 만들 수 있습니다. 난 그냥 당신이 C. 에 회로를 작성할 수 있습니다 Vivado HLS에 의해이 완료

int a[4] = `{1, 2, 3, 4}; 
0

여기 내 C 코드입니다.

#include math.h 

void exp(float a[10],b[10]) 

{ 
    int i; 
    for(i=0;i<10;i++) 
    { 
     b[i] = exp(a[i]); 
    } 
} 

그러나 크기가 정해지지 않은 매트릭스를 만들 수 없다는 의문이 있습니다. 어쩌면 내가 모르는 또 다른 방법이 있을지도 모른다.

관련 문제