プロセッサデザインをFPGAに取り込む方法


20

私は最近、自己学習型の論理設計の長い旅に出ました。この最終製品は、シミュレータで設計されたとおりに動作する機能的な16ビットCPUです。FPGAを使用してシリコンに組み込む可能性について検討し始めたばかりです。入出力の分野(現実の世界はシミュレーション環境とは異なる)で多くの調整を行う必要があることを知っており、ネットリストまたはHDLコードをエクスポートしないプログラムで設計を完全に行ったことを発見しました。私が本当に持っているのは回路図だけです。

しかし、デザインのネットリストまたはHDLコードがどこかにあると仮定して、それをシリコンに取り込む次のステップは何ですか?これまで読んだことから、FPGAが私のソリューションであるように見えますが、ザイリンクスとアルテラのWebサイトを見ると頭が回転します。私は間違った木をbarえていますか?基本的に、次のステップはCPUの機能回路図を持っている人にとって何であるかについてのわかりやすい英語の説明を探しています。どの方向に進むべきかがわかれば、本を解読し、そこに到達する方法について知る必要があるすべてを理解することができます。また、私はMac OS Xを使用していますが、どうしても必要な場合にプラグインできるWindowのXPボックスがあります。


どのようなプログラムでしたあなたは、あなたのデザインがでますか?サードパーティのコンバーターが存在する場合があります。
コナーウルフ

回答:


17

CPUの設計おめでとうございます。はい、FPGAは間違いなく次のステップです。しかし、あなたがそれがあなたの頭を回転させるのは何であるかはあまり明確ではありません。多数の異なるデバイスが提供されていると思います。また、使用しているシミュレーターも指定しません。
デザインを合成するとき、シンセサイザーは使用されたリソースに関するレポートを提供する必要があります(ゲート数やRAMなど)。これにより、どのパーツが設計に適しているかがわかります。あなたは十分に持っていることを確認してくださいヘッドルームを。CPUでプログラムを実行するために必要な追加のRAMを備えた部品を選択します。

編集(コメントを再入力)
特定のメーカーの開発システムが必要です。アルテラザイリンクスは大きなプレーヤーであり、どちらにも信者がいます。どちらを選択するかはそれほど重要ではありません。どちらもニーズを満たすのに十分な数のパーツがあります。
ザイリンクスを選択する場合は、ISE WebPACK Design Softwareが無料で提供されます(3.4GBの大容量ダウンロード)。現時点では、ソフトウェアのより高度なバージョンと比較した制限は気にしません。
次に、開発ボードが必要です。どのFPGAを選択する必要があるかを把握する必要があります。ザイリンクスに行く場合は、スパルタンを選びます、おそらくSpartan-6の場合、VirtexはすでにハイエンドIMOです。まだたくさんの選択肢がありますが、主にボード上の追加機能が異なります。数個以上のスイッチとLEDを備えたボードが必要になります。キーボードコネクタとディスプレイモジュールを探します。
ザイリンクスには多数のボードがあり、ザイリンクスFPGAにはDigilentAvnetXessなど多くのボードがあります。

したがって、いくつかのボードを比較して(価格も役割を果たすと思われます)、使用するFPGAの開発ソフトウェアをダウンロードします。デザインを合成して、選択したFPGAに適合することを確認したら、このFPGAを使用したボードを購入する準備が整います。

FPGAについて少し話すのを忘れていました。FPGAは基本的に、それらの間にプログラム可能な接続を持つゲートの大規模なコレクションであるため、それらを使用してほぼすべてのロジック機能/システムを作成できます。数世代にわたって、FPGAはより高度になり、RAMなどの機能を効率的に作成するためにブロックが最適化されました。開発ソフトウェアのシンセサイザーは、ゲート間の接続図を作成します。これはFPGAに永続的に保存されるわけではありませんが、電源投入時に外部コンフィギュレーションフラッシュメモリからロードする必要があります。ここにデザインが保存されます。他のフラッシュメモリと同様に、何度も消去および書き換えが可能です。


Logisimを​​使用しましたが、これは回路図には素晴らしいですが、画像(png、jpegなど)以外を出力する方法がありません。FPGAの混乱については、部分的にはデバイスの膨大な配列の問題ですが、基本と基本を説明するリソースも見つかりません。CPUをそこに置くと、外界とどのようにインターフェースしますか?どのような機器が必要ですか?FPGAを繰り返しプログラムし直すことはできますか?などなど。そのテーマに精通していないだけです。私はスターターガイドが必要だと思いますが、どこにもありません。
ロリー・オヘア

2
あなたの質問は順番に:1)FPGAはI / Oピンを介して外部と接続します。違いは、専用チップとは異なり、ピンを選択できることです。2)スターターキット、開発キットなどで開始できます。これには、FPGA、I / O用のいくつかのコネクタ、およびボード上の電源が含まれます。ほとんどにはプログラマも含まれます。忘れずに入手してください。3)はい、FPGAを再プログラムできます。プログラムは、本質的に巨大なシフトレジスタであるチップ上に保存されます。起動時に、専用のステートマシンまたは外部ソースがそれをチップにロードします。
マイクデシモーネ

9

私はザイリンクスのツールに精通していませんが、アルテラのツールには精通しているので、それらについて説明します。ザイリンクスと他の人はそれほど違わないはずです。

Verilog

最初に行う必要があるのは、Verilogを学ぶことです。Verilog(およびやや似たVHDL)は最初にシミュレーション言語として設計され、多くの構成要素(#5たとえば、「5タイムステップ待機」を意味し、タイムステップは通常ナノ秒)であるため、これは頭を痛めます。そのため、Verilogコードを合成可能にする、つまりFPGAのビットストリームにコンパイルできるようにするために留意しなければならない多くの制限があります。

ただし、最大のショックは、Verilog(およびVHDL)で記述するものがシステム期待される動作であり、コンパイラ記述から適切なロジックを推測することです。注意しないと、これから多くの厄介なバグを得ることができます。

たとえば、Dフリップフロップは次のようになります。

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

これはDFFがどのように機能するかを説明し、コンパイラはそれを分析し、DFFが必要かどうかを判断する必要があります。これ@(...)感度リストと呼ばれ、コードブロックの再評価をトリガーする信号のリストです。従って、このブロックでは、Qそこに立ち上がりエッジがある場合にのみ変更RESETまたはCLK(これはアクティブ・ハイのリセットのためのものです)。センシティビティリスト(組み合わせロジックブロックの修飾子posedgenegedge修飾子のない右側の変数をすべて含む必要がある)の何かを忘れると、コンパイラはエラーを呼び出すのではなく、必要に応じてラッチを合成します。クレイジーですが、Verilogは元々、実装の詳細を隠した(したがって必要としなかった)シミュレーション言語であったため、その通りです。VHDLも同じですが、より冗長です。

最後に、SystemVerilogと呼ばれるVerilogの新しいバージョンが数年前にリリースされました。これにより、合成可能なコードの作成がはるかに簡単になります。ザイリンクスISEとアルテラQuartus IIの両方がサポートしているため、可能であれば、この言語を学んでください。主な問題は、良い参考資料がまったくないことです。

DFFのSystemVerilogバージョンは、いくつかの小さなことをクリーンアップします。

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

感度リストの信号はコンマで区切られていることに注意してください。これは、そこで動作しなかったためorに混乱していたためandです。また、交換注意1'b0(単一0有するビット)'0(但し多くに展開することを、シンボル0、ビットは、それが割り当てられているものに基づいて必要とされる多くのパラメータ化モジュールとより柔軟に)。最後に、内容をフリップフロップに合成する必要alwaysがある(すべての組み合わせロジック、ラッチ、フリップフロップに使用できる)の置換に注意してくださいalways_ff。またalways_comb、ブロックへの入力から感度を算出するだけなので、感度リストを削除するがあります。

アルテラの設計ソフトウェアはQuartus IIと呼ばれ、Web Editionを探しています。(サブスクリプションエディションはかなり高価で、最速または最新のFPGAモデルにのみ必要です。)

悲しいことは、このテーマに関する良い本が見つからなかったことです。私が学んだことは、合成可能なものとそうでないものを伝えるのが上手くいかないVerilogの本やサンプルコードなど、複数のソースから物をつなぎ合わせることで得たものです。Quartus IIには、Dフリップフロップからステートマシンまで、いくつかの一般的な構造のテンプレートコードを挿入する「テンプレートの挿入」コマンドがあります。

デモ用ハードウェア

Verilogでプロセッサを実装したら、ビルドする必要があります。当分の間、Quartusがチップ(ファミリーを選択する必要があります。CycloneIVをお勧めします)とピン配置を選択します。一度表示されると、必要なチップの量がわかります。使用したロジックエレメント、フリップフロップ、RAMビットなどの数が表示されます。これらのいずれについても50%を超えないようにしてください。もしそうなら、コンパイラが選択したチップを見て、少なくとも同じ数のピンを持つ次のより大きな(ロジックエレメントの)チップを手動で選択し、使用率が50%未満になるまで繰り返します。

その後、少なくとも最終的に構築したチップと同じ大きさのチップを搭載したデモボードを探しに行きます。必要な周辺機器やI / Oコネクタがあることを確認してください。不足しているハードウェアを提供するために、拡張コネクタに差し込むドーターカードを構築することは珍しくありません。

ハードウェアを選択したら、実際のピン配置を把握し、ピンプランナーを使用して正しいピンに正しい信号を配置します。デモボードには、デモボード上のどのデバイスまたはコネクタピンにどのピンが配線されているかを示すユーザーガイドがあります。

ピン配置を設定したら、目的のピンを使用するように再度ビルドします。システムクロックなどの一部の信号には専用の入力ピンが必要になることに注意してください(したがって、内部PLLに直接配線されます)。

プログラマを使用して、デザインをFPGAに直接ダウンロードします(以前に述べたシフトレジスタ)。これで、おなじみの編集-コンパイル-実行のデバッグサイクルになりました。それが機能するまでそれを打ちます。

動作したら、プログラマーを使用してコードをオンボード構成デバイスにダウンロードし、プログラムが電源投入時にロードおよび実行できるようにします。

これはかなり長かったので、いくらか助けになるといいのですが。学ぶべきことがたくさんあります。手続き型言語から関数型言語への移行など、新しいプログラミングパラダイムを学習するようなものではなく、新しいプログラミング言語を学習するようなものではありません。Verilogは同時言語です。ほとんどのコードは常に実行されています。

がんばろう!


素晴らしい、これはとても助かります。ただ一つのことを確認するために、回路図キャプチャについて聞いたことがあります。これは、ベリログを学習するための実行可能な代替手段ですか?必要に応じて学習しますが、100%必要ではない場合は、既に把握する必要のある膨大なリストに追加したくないでしょう。どうもありがとう。
ロリー・オヘア

正直なところ、そうではありません。大きな問題の1つは、回路図キャプチャプログラムに翻弄されていることです。回路図を取得し、誤ったVerilogを生成した場合、何ができますか?一方、Verilogを作成すると、すべてのバグを修正するために必要な権限が与えられます。ただし、大きな理由は、Verilogと同じように回路図のキャプチャではできないことです。パラメーター化されたモジュールとバスの分割とマージは、すぐに思い浮かぶものです。
マイクデシモーネ

1
やや「ハードウェア記述」言語をVerilogまたはVHDLに変換できるツールはありますか(たとえば、ネットZを、データ入力がA、B、Cの組み合わせであり、同時に非同期にリセットされるフリップフロップにしたい場合CとDは真実ですZ:= A & (B # C); Z.ar = C & D;。機密リストなどを心配せずに、次のようなことを言うことができると便利です。
-supercat

アルテラQuartusでは、デザインを回路図またはAHDL(VHDLのAlteraバージョン)、またはおそらく他のHDLを含むそれらの任意の組み合わせとして入力できます。(旧式であるため、CPLDおよびFPGAプロジェクトに回路図エントリを主に使用し、AHDLを少し使用しました。)
ピーターベネット14

明確にするために、AHDLはVHDLのバージョンではありません。VHDLとVerilogはどちらも推論言語であり、コードは目的の回路の動作を記述し、コンパイラはその動作記述から実装を推論する必要があります。これは、シミュレーション言語として開始され、合成に再利用されたという事実の遺産です。AHDLは宣言型言語であり、プリミティブ(フリップフロップ、真理値表など)を宣言し、それらがどのように接続されているのかをコンパイラが推測する必要はありません。AHDLは80年代にさかのぼり、ABELに非常に近いものです。
マイクデシモーネ14

5

はい、FPGAはほぼ間違いなくあなたのソリューションです!

ほとんどの場合、ハードウェア記述言語のいずれかを使用するか、別のツールに回路図を再入力する必要あります。私は、回路図アプローチに反対することをお勧めします

  1. FPGAツールベンダーが実際にサポートしていない
  2. ポータブルではない

HDLを作成したら、ベンダーライブラリからさまざまな「IPウィザード」を使用して直接挿入したり、ライブラリからコンポーネントを直接貼り付けたりしない限り、他のチップに移植できるコードができます。簡単に(たとえば、埋め込みC IMEの移植よりもはるかに)

また、波形を見つめてすべてが正常に見えるかどうかを確認するのではなく、機能を「理解」して結果を確認できるテストを作成できるため、テストおよび検証環境がはるかに優れています。

大きな2つのHDLはVHDLとVerilogです。これらの違いについては、この回答をお読みください...

VHDLまたはVerilog?

Pythonを既に知っているならMyHDLも一見の価値があると思います-巨大な検証機能を提供しますが、それでも「通常の」HDLが提供するほとんどの低レベル制御を提供します。

HDLを選択し、シミュレーションで動作するようになったら(もう一度、申し訳ありません!)、ベンダーツールを介してプッシュして、シミュレーションの次の大きな部分を学習できる状態になります。正しく、あなたがそれを合成させると思うよりも常に努力があります:)

回路図に夢中になっており、ライセンスを取得できる場合、LabviewFPGAが適しているかもしれません。


3

Hamblenらによるデジタルシステムのラピッドプロトタイピングのコピーを入手してください。

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

主にVHDLを使用しますが、Verilogよりも好みます。

それには、非常に単純な8ビットCPUであるuP3が含まれています。これは、数年前に自分のアルテラFLEX 10Kハードウェアに実装し、以前の本を使用して作成したものです。「フロントパネル」PCBを作成したら、この25ドルのCyclone IIボードに移植します。また、MIPSおよびアルテラNIOS IIプロセッサも含まれています。無料のアルテラQuartus IIツールを使用して本のuP3演習を行い、VHDLでCPUコードを書き換えて、Cyclone IIボードで動作させることができます。あるいは、Quartus IIには回路図エントリがあり、回路図を直接入力し、シミュレートし、Cyclone IIで実行できる必要があります。


1

難易度がツールのスキルを備えた急な学習曲線である場合は、最も簡単な方法に従ってください。アクテル(現在のMicrosemi)には、読み取りが不要で使い始めやすいFPGAツールのパッケージであるLiberoがあります。インストール後すぐに使用できます。実際に回路図を手動で作成し、数回クリックするだけで物理FPGAにアップロードできます。その途中の画面は非常にわかりやすいものです。


0

HDLを学習することを選択した場合、どこにいるのがどちらが良い言語であるかに影響を与える可能性があります。ヨーロッパでは、VHDLがより一般的です。米国では、VHDLである防衛産業を除き、Verilogがより一般的です。(アメリカ国防総省はもともとVHDLを作成しました)それは、あなたの近くの人がどちらかの言語でよりよく助けることができることを意味するだけです。しかし、オンラインでヘルプを探している場合、それは無関係かもしれません。

考慮すべき他の本は 、アルテラのDE1およびDE2ボードを参照するデジタルシステムのラピッドプロトタイピング:SOPC Editionです。DE1およびDE2に移植されたさまざまなコンピューターが既にあり、それらがどのように機能するかについてのアイデアを提供します。Minimigtg68(Amiga)、FpgaGen(Sega Genesis)などがこのボードに移植されており、例を確認できます。

ザイリンクスに行くと、私が今読んでいる本が2冊あります。 FPGAプロトタイピングにより、Verilogの例:ザイリンクスのSpartan-3バージョン FPGAプロトタイピングVHDLの例によって:ザイリンクスのSpartan-3バージョン けれども私はこれらを推奨する特定のボードを知りません。FPGA Arcadeボードがまもなく登場することを楽しみにしていますが、ザイリンクスまたは他のものが搭載されるかどうか忘れています。


0

現在Logisim Evolutionと呼ばれるLogisimを​​さらに開発しているこのバリアントを見つけました。彼らは、logisimに組み込まれた論理回路の回路図からVHDLにエクスポートする機能を実装しました。

ここにあります:https : //github.com/reds-heig/logisim-evolution

この質問は古いことを知っていますが、それは私の助けになり、他の人に役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.