주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

CORDIC Sigmoid HDL Optimized

CORDIC 기반 시그모이드 활성화 계산 및 최적화된 HDL 코드 생성

R2024a 이후

  • CORDIC Sigmoid HDL Optimized block

라이브러리:
Fixed-Point Designer HDL Support / Math Operations

설명

CORDIC Sigmoid HDL Optimized 블록은 HDL 코드 생성에 최적화된 CORDIC 기반 구현을 사용하여 계산된, u의 시그모니드 활성화를 반환합니다.

예제

모두 확장

이 예제에서는 CORDIC Sigmoid HDL Optimized 블록을 사용하여 지정된 실수값 데이터 세트의 시그모이드 활성화를 계산하는 방법을 보여줍니다.

알고리즘

시그모이드 함수는 다음에 의해 정의됩니다.

y=11+exp(-x)

이는 다음과 같습니다.

y=1-tanh(-x/2)2.

이 블록의 핵심 알고리즘은 쌍곡 회전 모드에서 CORDIC 알고리즘을 사용하여 Hyperbolic Tangent HDL Optimized(tanh)를 계산합니다.

지원되는 데이터형

CORDIC Sigmoid HDL Optimized 블록은 시뮬레이션 시 single형 데이터형, double형 데이터형, 이진 소수점 스케일링된 고정소수점 데이터형, 이진 소수점의 스케일링된 double형 데이터형을 지원합니다. 그러나 HDL 코드 생성 시 이진 소수점 스케일링된 고정소수점 데이터형은 지원되지 않습니다.

I/O 인터페이스

CORDIC Sigmoid HDL Optimized 블록은 ready 출력이 high(블록이 새 계산을 시작할 준비가 되었음을 나타냄)일 때 데이터를 받습니다. 유효한 입력값임을 나타내려면 validIn을 사용합니다. 입력값을 제대로 등록한 경우 블록은 ready 신호에 대한 어설션을 취소합니다. 그러면 사용자는 새 입력 전송을 위해 신호가 다시 어설션될 때까지 기다려야 합니다. 다음 파형 다이어그램에 이 프로토콜이 요약되어 있습니다. 참고로, 블록에 대한 첫 번째 유효한 입력이 무시되는데, 블록이 입력 데이터를 받을 준비가 되지 않았기 때문입니다.

validIn.png

블록이 계산을 완료하고 출력을 전송할 준비가 되면 블록은 하나의 클록 주기에 대해 validOut을 어설션합니다. 그러면 블록이 새 입력값을 받을 준비가 되었음을 나타내는 ready가 어설션됩니다.

validOut.png

모델 시뮬레이션하기

CORDICSigmoidModel 모델을 엽니다.

mdl = 'CORDICSigmoidModel';
open_system(mdl)

이 모델에는 데이터 소스에 연결된 CORDIC Sigmoid HDL Optimized 블록이 포함되어 있으며, 이 데이터 소스는 입력값으로 구성된 배열을 받고, CORDIC Sigmoid HDL Optimized 블록이 새 입력값을 받을 준비가 되면 배열의 입력값을 CORDIC Sigmoid HDL Optimized 블록으로 전달합니다. 각 값에 대해 계산된 출력값은 작업 공간 변수에 저장됩니다. 모든 입력값이 처리되면 시뮬레이션이 종료됩니다.

입력값으로 구성된 배열을 정의합니다.

x = fi(linspace(-10,10,100));

모델을 시뮬레이션합니다.

sim(mdl);

시뮬레이션이 완료되면 각 입력값에 대해 계산된 값을 저장하기 위해 새 작업 공간 변수 sigmoidOutput이 생성됩니다.

출력값 플로팅하기

CORDIC Sigmoid HDL Optimized 블록의 출력값과 MATLAB® cordicsigmoid 함수의 출력값을 비교하여 계산의 오차를 플로팅합니다.

yMATLAB = cordicsigmoid(x);
yMATLAB.numerictype
ans =


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 14
sigmoidOutput.numerictype
ans =


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 14
figure(1);
plot(x, sigmoidOutput);
hold on
plot(x, yMATLAB);
legend('CORDIC Sigmoid HDL Optimized block','cordicsigmoid Function');

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent CORDIC Sigmoid HDL Optimized block, cordicsigmoid Function.

블록의 출력값이 cordicsigmoid 함수의 출력값과 비트 수준까지 정확하게 일치하는지 검증합니다.

max(yMATLAB' - sigmoidOutput)
ans = 
     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 17
        FractionLength: 14

포트

입력

모두 확장

입력 데이터로, 실수 값 스칼라로 지정됩니다.

u가 고정소수점 데이터형 또는 스케일링된 double형 데이터형인 경우 u는 이진 소수점 스케일링을 사용해야 합니다. 고정소수점 데이터형에는 기울기-편향 표현이 지원되지 않습니다. 코드 생성 시에는 이진 소수점 스케일링된 고정소수점 데이터형만 지원됩니다.

데이터형: single | double | fixed point

입력이 유효한지 여부로, 부울 스칼라로 지정됩니다. 이 제어 신호는 u 입력 포트의 데이터가 유효한 경우 이를 표시합니다. 이 값이 1(true)이면 블록은 u 입력 포트의 값을 캡처합니다. 이 값이 0(false)이면 블록은 입력 샘플을 무시합니다.

데이터형: Boolean

출력

모두 확장

u의 값에 대한 시그모이드 활성화로, 스칼라로 반환됩니다. y의 값은 u의 시그모이드 활성화에 대한 CORDIC 기반 근삿값입니다.

입력값 u가 부동소수점인 경우 출력값 y는 입력값과 데이터형이 같습니다. 입력이 고정소수점 데이터형인 경우 출력은 입력과 동일한 워드 길이를 갖고 소수부 길이는 워드 길이보다 2가 작습니다.

데이터형: single | double | fixed point

출력 데이터가 유효한지 여부로, 부울 스칼라로 반환됩니다. 이 제어 신호의 값이 1(true)이면 블록은 출력 y를 제대로 계산한 것입니다. 이 값이 0(false)이면 출력 데이터가 유효하지 않은 것입니다.

데이터형: Boolean

블록이 준비되었는지 여부로, 부울 스칼라로 반환됩니다. 이 제어 신호는 블록이 새 입력 데이터에 준비가 된 경우 이를 표시합니다. 이 값이 1(true)이고 validIn 값이 1(true)이면 블록은 다음 클록 주기에서 입력 데이터를 받습니다. 이 값이 0(false)이면 블록은 다음 클록 주기에서 입력 데이터를 무시합니다.

데이터형: Boolean

알고리즘

모두 확장

참고 문헌

[1] Volder, Jack E. “The CORDIC Trigonometric Computing Technique.” IRE Transactions on Electronic Computers. EC-8, no. 3 (Sept. 1959): 330–334.

[2] Andraka, Ray. “A Survey of CORDIC Algorithm for FPGA Based Computers.” In Proceedings of the 1998 ACM/SIGDA Sixth International Symposium on Field Programmable Gate Arrays, 191–200. https://dl.acm.org/doi/10.1145/275107.275139.

[3] Walther, J.S. “A Unified Algorithm for Elementary Functions.” In Proceedings of the May 18-20, 1971 Spring Joint Computer Conference, 379–386. https://dl.acm.org/doi/10.1145/1478786.1478840.

[4] Schelin, Charles W. “Calculator Function Approximation.” The American Mathematical Monthly, no. 5 (May 1983): 317–325. https://doi.org/10.2307/2975781.

확장 기능

모두 확장

버전 내역

R2024a에 개발됨