全体の動作を書く
FPGAを設計するとき最初にやることはFPGAの全体の動作を把握することだと思うが、仕様書を見ると、構造を示すブロック図とそれぞれのブロックごとの機能しか書いていないことがある。
例)× ブロックごとの機能説明
機能 |
説明 |
データ入力部 |
入力チャネルを選択して、AD変換データを入力する |
メモリI/F部 |
RAMのアドレスを生成し、データをライト・リードする |
バスI/F部 |
CPUのバスとインターフェイスする |
◇
しかし、これでは全体としてどういう動作をするのかわからない。
人間が理解しやすいのは、ボトムアップ(部分→全体像)よりトップダウン(全体像→部分)の順なので、まず全体の動作を文章で書いた方がよい。その際に心がけることは
(1) 動作を中心に書く
あくまで全体の動作を把握することが目的なので、動作を中心に書いて、アルゴリズムのような静的な振る舞いは別に書いた方がよい。
(2) 入力→処理→出力というデータの流れにそって(時間順)に書く
大抵の回路は入力から出力までというデータの流れがあると思うので、この流れにそって説明すると理解しやすい。
(3) 何がその動作のトリガになっているのか(因果関係)を書く
何がその動作のトリガになるのかを書くと、部分同士の関係が明確になる。
例) 入力する:相手の都合で任意のタイミングで入力される、自分が要求すると相手が出す、ある周期に同期して入力される等
処理する:入力完了すると処理開始する、入力開始と同時に処理開始する、S/Wがあるレジスタをライトする処理開始する等
例)○ 全体の動作を書いた機能説明
機能 |
説明 |
1. AD変換 データ収集 |
1秒周期で、8chのAD変換データを入力してメモリへ格納する。 詳細: (1) 1秒周期のタイミング信号が来たらFPGAは下記(2)から(4)をチャネル1から8に対して実行する (2) AD変換する入力チャネルの選択信号を出す (3) AD変換器を起動する (4) AD変換器から完了信号を入力したらそのデータをメモリにライトする (5) チャネル8まで完了したらCPUへ割り込みを出す。 (6) CPUは割り込みが来たらメモリをリードしてAD変換結果を取得する。 |
2. CPUバスI/F |
CPUからFPGA内のレジスタおよびRAMに対してライト・リードできる |
ブロック図もRTLのモジュール構成を書くのではなく、データの流れがわかるように書いた方がよい。