FPGAを使用した組み込み設計:実装
より強力なFPGAとより効果的なプログラミング環境が利用できるようになったため、FPGAの実装は広く利用できるようになりましたが、FPGAの使用は困難に思えるかもしれません。
編集者注:スマートな製品設計のための高度なアルゴリズムが出現し続けるにつれて、開発者は、これらのアルゴリズムに関連する処理要求を満たすことができる組み込みシステムの実装に苦労することがよくあります。 FPGAは必要なパフォーマンスを提供できますが、FPGAを使用したデザインは、FPGAプログラミングの専門家の権限に限定されると長い間考えられてきました。しかし、今日では、より強力なFPGAとより効果的な開発環境が利用できるようになり、FPGA開発に幅広くアクセスできるようになりました。この抜粋、 『Architecting High-Performance Embedded Systems』の第4章では、FPGAデバイス、実装言語、FPGA開発プロセスの包括的なレビューと、FPGAの実装を開始する方法の詳細なウォークスルーを提供しています。設計。完全な抜粋は、次の一連の記事で紹介されています。
1:ハードウェアリソース
2:実装言語
3:開発プロセス
4:プロジェクトの構築
5:実装(この記事)
ジム・レディンによる「高性能組み込みシステムの設計」から採用。
ロジック動作のテスト
FPGAで実行する前に、シミュレーションを使用してロジックの動作をテストすることが重要です。これは、FPGA内で実行されているロジックよりも、シミュレーション環境での問題の検出と修正がはるかに簡単であるためです。 Virginiaシミュレーションツールは、回路の動作を非常にうまく表現します。
- 出典 サブウィンドウで、シミュレーションソースを右クリックします。 ソースの追加…を選択します :
図4.18–ソースの追加…シミュレーションソースのメニュー選択
- ソースの追加 ダイアログで、シミュレーションソースの追加または作成を確認します が選択されたら、[次へ]をクリックします 。
- シミュレーションソースの追加または作成 ダイアログで、ファイルの作成をクリックします 。
- ファイル名を入力
vhdl [OK] をクリックします 。 - [完了]をクリックします シミュレーションソースの追加または作成を閉じるには ダイアログをクリックし、[ OK ]をクリックします モジュールの定義 ダイアログをクリックし、はいをクリックします これらを使用してもよいかどうか尋ねられたとき
- Adder4 TestBench(Behavioral)(Adder4TestBench.vhdl)をダブルクリックします。 シミュレーションソースの下 。 vhdl の自動的に入力されたコンテンツを削除します エディタウィンドウで、次のコードを Adder4TestBench.vhdl に入力します。 編集者:
ライブラリIEEE; IEEE.STD_LOGIC_1164.ALLを使用します。 IEEE.NUMERIC_STD.ALL; entity ADDER4_TESTBENCH isend entity ADDER4_TESTBENCH; architecture BEHAVIORAL of ADDER4_TESTBENCH is component ADDER4 is port(A4:in std_logic_vector(3 downto 0); B4:in std_logic_vector(3 downto 0); SUM4:out; 0); C_OUT4:out std_logic);エンドコンポーネント;シグナルa:std_logic_vector(3 downto 0);信号b:std_logic_vector(3 downto 0);シグナルs:std_logic_vector(3 downto 0);シグナルc_out:std_logic;シグナルexpected_sum5:unsigned(4 downto 0);シグナルexpected_sum4:unsigned(3 downto 0);シグナルexpected_c:std_logic;信号エラー:std_logic; begin TESTED_DEVICE:ADDER4ポートマップ(A4 => a、B4 => b、SUM4 => s、C_OUT4 => c_out);テスト:プロセス開始-0〜15ループのa_valの2つの4ビット加数(合計256テスト)のすべての組み合わせをテストします-0〜15ループのb_valの場合-ADDER4コンポーネントへの入力を設定しますa <=std_logic_vector(to_unsigned( a_val、a '長さ)); b <=std_logic_vector(to_unsigned(b_val、b'length)); 1ns待ちます。 --2つの4ビット値の5ビット合計expected_sum5 <=unsigned( '0'&a)+ unsigned( '0'&b);を計算します。 1ns待ちます。 -合計を4ビット出力とキャリービットexpected_sum4 <=expected_sum5(3 downto 0);に分割します。 expected_c <=expected_sum5(4); 1ns待ちます。 -'error'シグナルは、エラーが発生した場合にのみ1になります((unsigned(s)=unsigned(expected_sum4))and(c_out =expected_c))then error <='0';そうでなければエラー<='1';次の場合に終了します。 -内側のループを通過するたびに、7ns待機するのに10nsかかります。ループの終了;ループの終了;待つ;プロセステストの終了;アーキテクチャの動作の終了;
このコードは、4ビットの数値のすべての組み合わせを各 A4 に提示することにより、4ビット加算器機能を実行します。 および
Adder4TestBench.vhdl のコード ネストされたforループを使用して、すべてのテスト入力の組み合わせを Adder4 に適用するという点で、従来のソフトウェアコードに似ています。 テスト中のコンポーネント。シミュレーションモードでテストを実行するコードは合成できません。つまり、純粋にハードウェアロジック回路を表すものではなく、 for <の反復実行などの従来のソフトウェアのような操作が可能です。 / font> ループします。
ただし、物理回路の場合と同様に、<=演算子を使用してテストベンチコードで値が割り当てられている信号は、後続の式で同時に使用することはできません。これは、シミュレーション環境が伝播遅延の実際の影響を表しているためです。これは、小さなFPGAデバイス内でも重要です。 3つの
- Adder4 TestBench(Behavioral)(Adder4TestBench.vhdl)を右クリックします。 シミュレーションソースの下 自動更新と注文のコンパイルを選択します 。これにより、 ADDER4_TESTBENCH が設定されます。 シミュレーション実行の最上位オブジェクトとして:
図4.19–自動更新とコンパイル順序を設定するためのメニュー選択
- [シミュレーションの実行]をクリックします 、次に行動シミュレーションの実行 フローナビゲーター シミュレーションモードに入るウィンドウ。エディターファイルをまだ保存していない場合は、保存するように求められます。 保存をクリックします 。その後、シミュレーションが実行されます。
図4.20–行動シミュレーションの実行メニュー選択
- シミュレーションの場合 ウィンドウが開いたら、シミュレーション出力ウィンドウで無題1 というタイトルの最大化ボタンをクリックします。 :
図4.21–シミュレーション結果ウィンドウ
内部ループを通過する各パスの合計シミュレーション時間は10nsです。 Adder4TestBench.vhdl のループには256回のパスがあるためです。 、シミュレーションの実行時間は2560nsです。
- 上部のツールバーでシミュレーションの実行時間を2560nsに設定します(ステップ1 次の図で)、左向きの再起動ボタンを押します(ステップ2 )、次に右向きのボタンを押して2560 nsのシミュレーションを実行します(ステップ3 )、最後に Zoom Fit を押します。 ボタン(ステップ4 )ウィンドウに合わせてシミュレーション出力データ範囲をスケーリングするには:
図4.22–実行の開始から終了までのシミュレーション結果
拡大鏡アイコンを使用して、トレースの任意のポイントにズームインし、テスト中に実行された各加算操作の結果を観察できます。たとえば、次の図は、キャリーが0の結果8を生成するために10進値6と2が追加されたことを示しています。これらの値は期待値と一致し、
図4.23–シミュレーション結果の拡大図
- X をクリックしてシミュレーションモードを閉じます 青でシミュレーション データトレースの上にあるバー[ OK ]をクリックします シミュレーションを閉じるかどうか尋ねられたとき。
動作テストに合格したら、設計で使用されるI / O信号を定義します。
I / O信号の定義
次のステップは、回路の入力と出力をArtyボード上のハードウェアデバイスに接続することです。入力はボードスイッチとプッシュボタンになり、出力はLEDになります。
次の手順では、FPGAデバイスで使用するI / Oピンと、Artyボード上のそれらのピンに接続されている機能を記述した制約ファイルを作成します。制約ファイルの拡張子はxdcです:
- 出典 サブウィンドウで、制約を右クリックします ソースの追加…を選択します 。
- ソースの追加 ダイアログで、制約の追加または作成を確認します が選択されたら、[次へ]をクリックします 。
- 制約の追加または作成 ダイアログで、ファイルの作成をクリックします 。
- ファイル名を入力
Arty-A7-100.xdc (または Arty-A7-35.xdc お使いのデバイスに適切な場合)、[ OK ]をクリックします 。 - [完了]をクリックします 制約の追加または作成を閉じるには
- 制約を拡張します ソースツリーを開き、 Arty-A7-35.xdc をダブルクリックします 。
- Digilentは、ArtyA7ボード用に事前入力された制約ファイルを提供します。
https://raw.githubusercontent.com/Digilent/digilent-xdc/master/Arty-A7-35-Masterにアクセスしてください。 .xdc ブラウザウィンドウのコンテンツ全体をVivadoのArty-A7-35.xdcエディタウィンドウにコピーします。お使いのデバイスに適している場合は、 https://raw.githubusercontent.com/Digilent/digilent-xdc/master/Arty-A7-100-Master.xdc のファイルを使用してください 代わりに。 - すべてのI / Oピンは、各行の先頭から#文字を削除してファイル内の適切な行のコメントを解除することにより、制約ファイルでコメント化されます。
Arty- の次のセクションにリストされているピンを使用します A7-100.xdc ファイル: スイッチ 、 RGB LED (ただし、 led0_g のみ 、最初の緑色のLED)、 LED 、および ボタン 。次の図は、コメントが解除された後のこれらの行を示しています。
図4.24–制約エディタウィンドウ
次のセクションでは、加算器コードをI / OデバイスとインターフェイスするトップレベルのVHDLファイルを作成します。
トップレベルのVHDLファイルの作成
次に、4ビット加算器コンポーネントを対応するボードI / O信号に接続するトップレベルのVHDLファイルを作成します。
- 出典 サブウィンドウで、デザインソースを右クリックします ソースの追加…を選択します 。
- ソースの追加 ダイアログで、デザインソースの追加または作成を確認します が選択されたら、[次へ]をクリックします 。
- デザインソースの追加または作成 ダイアログで、ファイルの作成をクリックします 。
- ファイル名を入力
vhdl [OK] をクリックします 。 - [完了]をクリックします デザインソースの追加または作成を閉じるには ダイアログをクリックし、[ OK ]をクリックします モジュールの定義 ダイアログをクリックし、はいをクリックします これらを使用してもよいかどうか尋ねられたとき
- vhdl をダブルクリックします デザインソースの下 。 ArtyAdder.vhdl の自動的に入力されたコンテンツを削除します エディタウィンドウで、次のコードを ArtyAdder.vhdl に入力します 編集者:
-標準ライブラリライブラリIEEEをロードします。 IEEE.STD_LOGIC_1164.ALLを使用します;エンティティARTY_ADDERはポートです(sw:STD_LOGIC_VECTOR(3から0); btn:STD_LOGIC_VECTOR(3から0); led:STD_LOGIC_VECTOR(3から0); led0_g:STD_LOGIC);終了エンティティARTY_ADDER; ARTY_ADDERのアーキテクチャの動作は次のとおりです-4ビット加算器コンポーネントの以前の定義を参照してくださいADDER4はポート(A4:in std_logic_vector(3 downto 0); B4:in std_logic_vector(3 downto 0); SUM4:out std_logic_vector(3 downto 0); C_OUT4:out std_logic);コンポーネントの終了; ADDERの開始:ADDER4ポートマップ(A4 => sw、B4 => btn、SUM4 => led、C_OUT4 => led0_g);アーキテクチャの終了BEHAVIORAL;
このコードは、 Arty-A7-100.xdc で指定されたI / Oデバイスの信号名をマップします sw として (4スイッチ)、 btn (4つの押しボタン)、
VHDLでは大文字と小文字は区別されませんが、 xdc の処理 Vistaのコンストレイントファイルでは大文字と小文字が区別されます。 xdc で定義されたI / Oデバイス名で使用されるケース VHDLファイルで参照する場合、ファイルは同一である必要があります。具体的には、VHDLのI / O信号名は、制約ファイルでは小文字であるため、このファイルでは小文字である必要があります。
これで、Artyボードの設計を合成、実装、およびプログラミングする準備が整いました。
FPGAビットストリームの合成と実装
または、ビットストリームの生成を選択することもできます また、Vivadoは、ユーザーの介入なしに、合成、実装、ビットストリーム生成など、必要なすべてのステップを実行します。致命的なエラーが発生した場合、プロセスは停止し、エラーメッセージが表示されます。次の手順を実行して、ビットストリームを生成します。
- [ビットストリームの生成]をクリックします ビルドを開始するにはテキストエディタを保存するかどうか尋ねられる場合があります。 保存をクリックします 。利用可能な実装結果がないことが通知され、合成と実装を開始してもよいかどうか尋ねられる場合があります。 はいをクリックします :
図4.25–ビットストリームメニュー選択の生成
- ローンチラン ダイアログが表示されたら、ジョブ数の値を選択できます コンピュータのプロセッサコアの数まで。より多くのコアを使用するとプロセスが速くなりますが、長いビルドプロセス中にコアを使い続けたい場合は、マシンがダウンする可能性があります。 OK をクリックします ビルドを開始するには:
図4.26– [実行の起動]ダイアログ
- ビルドプロセス中、Vivadoはメインウィンドウの右上隅にステータスを表示します。必要に応じて、キャンセルをクリックしてビルドプロセスをキャンセルできます。 ステータス表示の横:
図4.27–コンパイルステータスの表示
- 致命的なエラーがないと仮定して、ビルドプロセスが完了すると、ビットストリームの生成が完了しました ダイアログが表示されます他のオプションも提供されていますが、Artyボードへのビットストリームのダウンロードに直接進みます。 オープンハードウェアマネージャーを選択します [OK] をクリックします :
図4.28–ビットストリーム生成の完了ダイアログ
次に、ビットストリームをFPGAにダウンロードします。
ボードへのビットストリームのダウンロード
次の手順を実行して、ビットストリームをArtyA7ボードにダウンロードします。
- ハードウェアマネージャー ダイアログが表示され、ハードウェアターゲットが開いていませんと示されます 。
- Arty A7-35またはA7-100ボードをUSBでコンピューターに接続します。ボードが認識されるまで数秒待ってから、[ターゲットを開く]をクリックします。 、次に自動接続 :
図4.29–ターゲットと自動接続の選択を開く
- 数秒後、Vivadoはボードが接続されていることを示します。 プログラムデバイスをクリックします FPGAビットストリームをArtyにダウンロードするにはビットストリームファイルを選択するように求められます。この例と同じディレクトリ構造を使用した場合、ファイルは C:/ Projects / ArtyAdder / に配置されます。 ArtyAdder.runs / impl_1 / ARTY_ADDER.bit :
図4.30– [デバイスのプログラム]ダイアログ
- [プログラム]をクリックします プログラムをFPGAデバイスにダウンロードして起動するには
- これで、Arty I / Oを使用してプログラムの動作をテストできます。4つのスイッチすべてをオフに配置します。 位置(スイッチを隣接するボードの端に向かって移動)し、4つのプッシュボタンのいずれも押さないでください。 4つの緑色のLEDがすべてオフになっているはずです。
- 個々のスイッチをオンにするか、いずれかの押しボタンを押すと、対応する緑色のLEDがオンになります。任意の数のプッシュボタンを押しながらスイッチの任意の組み合わせをオンにすると、対応する4ビットの数字が追加され、キャリーがある場合はLEDが点灯します(たとえば、 SW3 をオンにします)。 BTN3 を押します 同時に)、緑色のキャリーLEDが点灯します。
ここで実行されるプログラミングプロセスは、プログラムをFPGARAMに保存しました。 FPGAボードの電源を入れ直す場合は、プログラミングプロセスを繰り返してプログラムをリロードする必要があります。または、次のセクションで説明するように、FPGAコンフィギュレーションファイルをオンボードフラッシュメモリに保存することもできます。
オンボードフラッシュメモリへのビットストリームのプログラミング
Artyボードに電力が供給されるたびにFPGAを設定するには、FPGA設定ファイルをボードのフラッシュメモリに保存する必要があります。 MODEジャンパーがインストールされている場合、FPGAは電源投入時にオンボードフラッシュメモリからコンフィギュレーションファイルをダウンロードしようとします。このメモリは、Artix-7FPGAに隣接する別のチップに配置されています。次の手順に従って、構成ファイルをフラッシュメモリにプログラムします。
- MODE をインストールします Artyボードにまだ入っていない場合はジャンパー
- 右クリックしてビットストリームを生成 ビットストリーム設定…を選択します 。
- 設定 ダイアログで、 -bin_file の横のチェックボックスをオンにします [OK] をクリックします :
図4.31–ビットストリーム設定ダイアログ
- メインのVivadoダイアログで、[ビットストリームの生成]をクリックします。 ビットストリーム生成プロセスを繰り返します。 キャンセルをクリックします ビットストリーム生成が完了したとき ダイアログ
- ハードウェア ダイアログで、FPGAパーツ番号( xc7a100t_0 )を右クリックします。 )、構成メモリデバイスの追加…を選択します :
図4.32–構成メモリデバイスの追加…メニュー選択
- 「
s25fl127 」と入力します 検索に これにより、一致する部品番号が1つ表示されます。パーツを選択して[ OK ]をクリックします :
図4.33– [構成メモリデバイスの追加]ダイアログ
- 構成メモリデバイスを今すぐプログラムしますか?を尋ねるダイアログが表示されます。 OK をクリックします 。
- これにより、プログラム構成メモリデバイスが表示されます。 構成ファイル名を要求するダイアログ。 …をクリックします 構成ファイルの右側にあるボタン C:/Projects/ArtyAdder/ArtyAdder.runs/impl_1/ARTY_ADDER.binを選択します。 OK をクリックします :
図4.34– [プログラム構成メモリデバイス]ダイアログ
- プログラミングプロセスには数秒かかります。ファイルがボードのフラッシュメモリにプログラムされた後、成功を示すメッセージが表示されます。
図4.35–プログラムフラッシュ完了ダイアログ
この後、ボードの電源を入れ直すたびに、4ビット加算器プログラムがロードされて実行されます。設定ファイルの読み込みに使用した設定でプログラムが読み込まれるまでに時間がかかります。 FPGAがプログラムをロードするのを待たないようにするには、次の手順を実行して構成ファイルのロード速度を向上させることができます。
- Open Synthesized Design を選択します フローナビゲーター 。
- Vivadoのメインメニューで[ツール/デバイスプロパティの編集…]を選択します 。
- 一般 タブで、ビットストリーム圧縮を有効にするを設定します TRUE 。
- 構成 タブで、構成レート(MHz)を設定します 33に移動し、[ OK ]をクリックします 。
- ビットストリームを再度生成し、説明に従ってフラッシュメモリをプログラムします。再プログラミングのオプションを表示するには、構成メモリデバイスを取り外して再度追加する必要があります。
- ハードウェアを閉じる マネージャー 。
- ArtyボードのUSBケーブルを抜き、差し込むと、電源投入時にプログラムがほぼ瞬時に実行を開始します。
このセクションでは、FPGA I / Oピンの信号と相互作用する単純な組み合わせロジックの例を示しました。ここでの目的は、Vivadoに慣れることです
ツールスイートと、ツールを使用して完全なFPGA開発サイクルを実行する方法を示します。
概要
この章では、リアルタイム組み込みシステムアーキテクチャでのFPGAの効果的な使用について説明し、標準のFPGAデバイスとそれに含まれる低レベルのコンポーネントについて説明しました。 HDL、ブロックダイアグラムメソッド、C / C ++などの一般的なソフトウェアプログラミング言語を含む一連のFPGAデザイン言語が導入されました。 FPGA開発プロセスの概要が示されました。この章は、要件のステートメントから始まり、低コストのFPGA開発ボードに実装された機能システムで終わるFPGA開発サイクルの完全な例で終わりました。
この章を完了すると、FPGAをリアルタイム組み込みシステムアーキテクチャに効果的に適用する方法を理解し、FPGA集積回路内のコンポーネントを理解する必要があります。 FPGAアルゴリズムの設計に使用されるプログラミング言語、FPGA開発サイクルのステップについて学習し、FPGA開発プロセスのステップのシーケンスを理解しました。
次の章では、FPGA開発プロセスを拡張して、FPGAを含むリアルタイム組み込みシステムを設計するための完全なアプローチを提供します。また、次の章の例として役立つ、プロトタイプの高性能組み込みシステムであるデジタルオシロスコープの開発も開始します。
PacktPublishingの許可を得て転載。 Copyright©2021Packt Publishing
> ジム・レディン Ledin Engineering、Inc。のCEOです。Jimは、組み込みソフトウェアおよびハードウェアの設計、開発、およびテストの専門家です。彼はまた、組み込みシステムのサイバーセキュリティ評価と侵入テストでも活躍しています。彼は理学士号を持っていますアイオワ州立大学で航空宇宙工学の学位を取得し、M.S。ジョージア工科大学で電気およびコンピューター工学の学位を取得。ジムは、カリフォルニアで登録された専門の電気技師、Certified Information System Security Professional(CISSP)、Certified Ethical Hacker(CEH)、およびCertified Penetration Tester(CPT)です。
>
関連コンテンツ:
- FPGAを使用した組み込み設計:ハードウェアリソース
- FPGAを使用した組み込み設計:実装言語
- FPGAを使用した組み込み設計:開発プロセス
- オープンソースツールはFPGAプログラミングを簡素化するのに役立ちます
- FPGAまたはASICでの浮動小数点アルゴリズムの実装
- ディープラーニングにFPGAを活用する
- ソフトウェアツールは、AIアプリケーション用にGPUコードをFPGAに移行します
Embeddedの詳細については、Embeddedの週刊メールニュースレターを購読してください。
埋め込み
- 組み込みシステム設計とは:設計プロセスのステップ
- 3Dプリントパーツを…クレヨンで仕上げますか?
- 専門家のインタビュー:シミュレーションによる金属3D印刷の成功の達成に関するANSYSの最高技術責任者
- AIが組み込まれたビッグデータをスマートデータに変換
- USBType-Cポートの実装の課題と設計ソリューション
- 主要な業界トレンドは組み込み設計の形成です
- オープンソースプラットフォームは、組み込みLinuxを備えたIoTをターゲットにしています
- Clientron:プリンターが統合された多機能POS端末
- デザインキットは、光学センサーで血圧を測定します
- FPGAを使用した組み込み設計:実装言語
- 添加物を含むすべて