メインコンテンツ

CORDIC Sigmoid HDL Optimized

CORDIC ベースのシグモイド活性化を計算して最適化された HDL コードを生成

R2024a 以降

  • CORDIC Sigmoid HDL Optimized block

ライブラリ:
Fixed-Point Designer HDL Support / Math Operations

説明

CORDIC Sigmoid HDL Optimized ブロックは、u のシグモイド活性化を返します。これは HDL コード生成用に最適化された CORDIC ベースの実装を使用して計算されます。

すべて展開する

この例では、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、2 進小数点でスケーリングされた固定小数点、2 進小数点でスケーリングされた double のデータ型がサポートされます。ただし、HDL コード生成では、2 進小数点でスケーリングされた固定小数点データ型のみがサポートされます。

I/O インターフェイス

CORDIC Sigmoid HDL Optimized ブロックは、[ready] 出力が High のとき (ブロックが新しい計算を行う準備ができたことを示す)、データを受け入れます。[validIn] を使用して有効な入力を示します。ブロックに入力値が正常に登録されると、[ready] 信号はデアサートされます。その後、新しい入力を送るには、信号が再びアサートされるのを待たなければなりません。このプロトコルの概要は、次の波形図にまとめられます。ブロックが入力データを受け入れる準備ができていなかったために、ブロックへの 1 つ目の有効な入力が破棄されたことに注目してください。

validIn.png

ブロックが計算を終え、出力を送信する準備ができると、1 クロック サイクルの間、[validOut] をアサートします。次に、[ready] がアサートされ、ブロックが新しい入力値を受け入れる準備ができたことを示します。

validOut.png

モデルのシミュレーション

CORDICSigmoidModel モデルを開きます。

mdl = 'CORDICSigmoidModel';
open_system(mdl)

モデルには、データ ソースに接続された 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 は 2 進小数点スケーリングを使用しなければなりません。傾きとバイアス表現は固定小数点データ型ではサポートされていません。コード生成では、2 進小数点でスケーリングされた固定小数点データ型のみがサポートされます。

データ型: single | double | fixed point

入力が有効であるかどうか。boolean スカラーとして指定します。この制御信号は u 入力端子からのデータが有効であるかどうかを示します。この値が 1 (true) の場合、ブロックは u 入力端子の値を取得します。この値が 0 (false) の場合、ブロックは入力サンプルを無視します。

データ型: Boolean

出力

すべて展開する

u の値のシグモイド活性化。スカラーとして返されます。y の値は u のシグモイド活性化の CORDIC ベースの近似です。

入力 u が浮動小数点である場合、出力 y は入力と同じデータ型をもちます。入力が固定小数点データ型の場合、出力の語長は入力と同じになり、小数部の長さは語長から 2 を引いた数と等しくなります。

データ型: single | double | fixed point

出力データが有効であるかどうか。boolean スカラーとして返されます。この制御信号の値が 1 (true) の場合、ブロックは出力 y を正常に計算しています。この値が 0 (false) の場合、出力データは有効ではありません。

データ型: Boolean

ブロックの準備が整っているかどうか。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 で導入