乗算回路ロジックのサンプルを紹介する。
1. 主な仕様
・16bit x 16bit = 32bit
・符号無し。
・1-CLOCK 毎に、シフト+加算する方式。
・上位ロジックがシーケンサーであることを想定し、SART/END信号でタイミングを合わせる。
2. 使い方
1. MULTI_PLIER(15 downto 0)、MULTI_PLICAND(15 downto 0)に乗数/被乗数を設定する。
2. MULT_START='1' で計算開始 (1-CLOCK)
3. 計算完了(MULT_END='1')を待つ。(1-CLOCK)
4. 計算結果 MULTI_PRODUCT(31 downto 0) を取得する。
3. 設計のポイント
・現在の論理合成ツール(VIVADOなど)では、'*' 演算子を使用することで乗算回路を自動生成できる。
が、多くが組み合わせ回路によるロジックのため、ビット数が多くなるとロジックのディレイが大きくなり、
FPGAのクロック周波数を上げられない。
演算にクロック数を掛けても、FPGAのクロック周波数を上げられるロジックの方が現実的なため、
1-CLOCK 毎にシフト+加算する方式とした。
・演算回路は複数の回路を組み合わせることが多いため、シーケンサーから制御しやすいよう
START/END信号を使用して上位ロジックとのタイミング合わせを行う。
4. テストベンチについて
いくつかの計算を行い、結果が正しいか期待値チェックを行う。
詳細は、下記ZIPファイル内 [TEST_BENCH_MULT_16_16.VHD]参照のこと。
テストベンチは MODELSIM/VIVADOシミュレーション共通で使える記述にしている。
5. サンプルファイル
プロジェクトファイル一式
・MODELSIM用プロジェクトファイル:japanlogicdesign_mult_test_modelsim.zip
※注意:MODELSIM プロジェクトは相対パスではないため、ソースファイルの再登録が必要な場合あり。
中国プロテクト:天安門事件、法輪功、チベット
|