名前はまだない

とりあえずの思考や学習のアウトプットの場

FPGAとその開発手順について調べた

動機

12月に入って黙々と読み進めていたディジタル回路設計とコンピュータアーキテクチャ ARM版を遂に読み終わった。電子回路についてほとんど知らなかった自分でもARMの仕組みを回路レベルから把握できるようになったのは感慨深い。さて実際にFPGAを使って本の内容を実装しようと思ったが、FPGAの使い方が全くわからず手が止まってしまった。あくまであの本はアーキテクチャの教科書でFPGAの開発マニュアルではなった。これは困ったということでFPGAとその開発手順について調べた。

FPGAとは

f:id:yuuy_blog:20181221171935j:plain
FPGAの中身を覗いてみるとユーザーが構成可能なLogic ElementまたはLogic Blockのアレイが並んでいて、それぞれのLE, LBでは組み合わせ回路、順序回路の両方が構成可能になっている。しかも、これらのLE, LBは再構成が可能だ。つまり、自由度の高い回路設計を何度でも行えるアーキテクチャであり、現場でプログラミング可能なゲートアレイ(Field-Programmable Gate Array)という名前が付けられている。

FPGAで何ができるのか

マイコンは、細分化された機能の処理順番をソフトウェアで制御する FPGA は、ハードウェアである回路を処理に合わせて接続する 今まではマイコンと呼ばれる既存の汎用ハードウェアや専用ハードウェアを複数組み合わせて使用し、ソフトウェア側で制御することで求める挙動を実現させていたが、FPGAではハードウェア側で求める挙動を実現するような回路を予め設計できる。つまり、複数のマイコンの集積化、高速化、コスト削減などのメリットが存在する。このあたりについてはマイコンと FPGA の違いで詳しく説明されている。実装例としては自動車や医療機器、メディアデバイスなどのアーキテクチャとして採用されている。例えばメルセデス・ベンツS-Classシリーズは、XilinxFPGAやPLDを1ダース以上装備し、ナビゲーションや走行制御システムなどを実装している。

設計フロー

1.仕様設計
2.RTL設計
3.論理検証
4.制約設定(ピンの配置やタイミング制約等)
5.コンパイル
6.タイミング検証
7.プログラミング(基板上のFPGAやROMへの転送)
8.実機検証
9.量産

という流れらしい。 具体的な作業内容に関しては以下の流れ。

  • プロジェクトの登録→関わる全ての情報が統括される
    • 制約の設定(ボードの仕様による物理的な制約を登録する)
  • ソースコードの登録(設計対象となる回路を記述したコードを登録する)
    • このとき自動でインスタンス間の包括関係を読み込みツリー構造で示してくれる
    • また、構文上のエラーや警告も表示してくれる
  • シュミレーション用のソースコードの登録
  • 論理合成とテクノロジーマッピングコンパイルをすると自動でしてくれる)
  • RTLシュミレーション
    • 以下の3種類の方法がある
    • RTL記述の挙動の直接シュミレーション
    • 合成したネットリストによるシュミレーション
    • 配置配線の結果を反映させたシュミレーション
  • 配線配置(論理素子の配置→ネットの配線の順で行うが基本は自動でしてくれる)
  • バイスへの書き込み(書き込み方法はデバイスによって異なる)
  • 実機動作検証
    • 評価用ボードはLEDやスイッチなどを活用して想定通りの動作をするか確認する
    • オシロスコープなどの測定機器を接続してより詳細に動作を確認できる
    • 最近では状態観測や信号記録などの検証用の機能を追加して合成することもある
    • 検証機能実装向けのライブラリも用意されている
  • 最適化

あとはIP(Intellectual Property)という、再利用可能な設計部品を用いて効率化するらしい。 例えばインターフェイスや周辺機器の制御、データの暗号化や画像処理など。 プログラミングでライブラリやAPIを利用して効率化するのと似ている。

だいたいイメージがつかめてきたが、疑問も生じた。 設計したハードウェアを制御、モニターするのはどうしたら良いのかが全くイメージがわかない。 調べてみたら、そのあたりはソフトウェア開発の管轄だった。

  • ソフトウェア開発
    • プロセッサシステムを動かすにはソフトウェアが必要
    • ソフトウェア開発環境をSDK(Software Development Kit)という
    • プロセッサの持つ機能やメモリ/回路情報、アドレス空間の割当などの情報をプロセッサ構成情報という
    • プロセッサ構成情報をSDKにインポートし、OSを選択し、挙動を設定する
  • ソフトウェアとハードウェアの統合と実行
    • 以下の3種類の方法がある
    • SDK上で統合と実行を行う
    • SDK上で統合し不揮発性メモリなどから実行する
    • ハードウェア開発環境での統合と実行

どうもこのハードウェア開発からソフトウェア開発、運用までの全体像がつかめずもやもやすることが多い。 今はFPGAの実装が最優先なので、このあたりは後日改めて勉強することにする。

ツールの使い方

インテル® FPGA : ソフトウェアに関する日本語資料 Quartus Prime 簡易チュートリアル - マクニカオンラインストア ModelSim-Altera - RTL シミュレーションの方法