CからVerilogなどのFPGA用HDLに書き換えるための手順について学んできたのでメモメモ
要するに、Cでも、状態遷移に持っていけば、FPGAのステートマシンで記述できる。
なんだけど、Cには、独特な部分があって(ポインタとか)それを、きれいきれい
にしてからでないと・・・とかいうお話。
■CからVerilogなどへ書き換えるための手順
(1)アルゴリズムリファインメント
→ハードウェア向きへの変更
・ポインタ→インデックスへ
領域がどこまで増えるか
伝搬性
構造体のポインタ
キャスト
アドレス変換
・配列→メモリにマッピング
(配列へのアクセスを減らす)
・関数→最適化
・演算子→最適化(式の変換)
・500ステップぐらいにわける
・並列性、順次性のみきわめ
ビヘイビアパラレル、ビヘイビアパイプライン
→シーケンスグラフ
・固定小数点(後述)
(2)アーキテクチャリファインメント
回路サイズ、周波数、消費サイクル、消費電力などで決まる
固定したアーキテクチャにすると、楽
・外部インターフェースは決まっている
→一般性をもたせる
→方法:ハンドシェーク
・内部
ステートマシン、レジスタ、パイプライン、ブロックメモリ
マクロ
(2-1)システムレベルの関数を考える
依存性を考慮する
(2-2)それを細分化し、
ファンクション内のブロックレベルのシーケンス
★プロセス化、モジュール化
(2-3)トレードオフをどうするか考える
周波数と速度
周波数とサイクル
→これを考えやすくするため、コードサイズを500行ぐらいにわけている
★メモリアーキテクチャの検討
(2-4)ブロック内のスケジューリング
★性能解析情報とプロセス間スケジューリング
(2-5)ステートマシンの作成
(3)RTLの作成
・時間に関係ないアルゴリズム
・時間軸を入れる
・バスサイクル→サイクルを考慮し
・RTLへ
状態遷移図→ステートマシンへ
(4)RTLの検証
■固定小数点化
・対象とする入出力データ確認
・テストベンチ作成
・対象とするデータは・・・
・ダイナミックレンジの確認
・最大値と最小値の確認
・整数部と小数部の決定
→最大値、最小値がわかれば、整数の桁数はわかる
ダイナミックレンジと整数の桁数から小数の桁数は
決定する
・書き換え
※ポイント
掛算、割算、三角関数→有効桁数の問題が出るのは・・
要するに、Cでも、状態遷移に持っていけば、FPGAのステートマシンで記述できる。
なんだけど、Cには、独特な部分があって(ポインタとか)それを、きれいきれい
にしてからでないと・・・とかいうお話。
■CからVerilogなどへ書き換えるための手順
(1)アルゴリズムリファインメント
→ハードウェア向きへの変更
・ポインタ→インデックスへ
領域がどこまで増えるか
伝搬性
構造体のポインタ
キャスト
アドレス変換
・配列→メモリにマッピング
(配列へのアクセスを減らす)
・関数→最適化
・演算子→最適化(式の変換)
・500ステップぐらいにわける
・並列性、順次性のみきわめ
ビヘイビアパラレル、ビヘイビアパイプライン
→シーケンスグラフ
・固定小数点(後述)
(2)アーキテクチャリファインメント
回路サイズ、周波数、消費サイクル、消費電力などで決まる
固定したアーキテクチャにすると、楽
・外部インターフェースは決まっている
→一般性をもたせる
→方法:ハンドシェーク
・内部
ステートマシン、レジスタ、パイプライン、ブロックメモリ
マクロ
(2-1)システムレベルの関数を考える
依存性を考慮する
(2-2)それを細分化し、
ファンクション内のブロックレベルのシーケンス
★プロセス化、モジュール化
(2-3)トレードオフをどうするか考える
周波数と速度
周波数とサイクル
→これを考えやすくするため、コードサイズを500行ぐらいにわけている
★メモリアーキテクチャの検討
(2-4)ブロック内のスケジューリング
★性能解析情報とプロセス間スケジューリング
(2-5)ステートマシンの作成
(3)RTLの作成
・時間に関係ないアルゴリズム
・時間軸を入れる
・バスサイクル→サイクルを考慮し
・RTLへ
状態遷移図→ステートマシンへ
(4)RTLの検証
■固定小数点化
・対象とする入出力データ確認
・テストベンチ作成
・対象とするデータは・・・
・ダイナミックレンジの確認
・最大値と最小値の確認
・整数部と小数部の決定
→最大値、最小値がわかれば、整数の桁数はわかる
ダイナミックレンジと整数の桁数から小数の桁数は
決定する
・書き換え
※ポイント
掛算、割算、三角関数→有効桁数の問題が出るのは・・