APDahlen Applications Engineer
FPGAのピンを手作業で割り当てるのはやめましょう。ボードメーカーが提供するGolden Top Board Configuration(GTBC)ファイルを使ってください。これらはすでにFPGAのI/Oがボード上のハードウェアに正しくマッピングされています。プロジェクトに追加し、Pin Plannerに悩まされることなくコーディングを始めてください。
追加するだけでマッピングとテストが完了します。退屈ですが、それこそがピン割り当てのあるべき姿です。
Golden Top Board Configurationファイルをより理解するポイントは以下のとおりです。
- GTBCはロジックに関するものではなく、FPGAピンをボードのハードウェアにマッピングするものです。
- 開発ボードのピンマップとして機能し、
SW[9:0]のような説明的なベクタ名が付けられています。 - ハードウェアの命名規則は、ボードのユーザーマニュアルで使用されている名称に従います。
- 設定には、ボード推奨のピン駆動電圧も含まれています。
- 注意:例えばアクティブローのLEDなど、単純な名称には極性が含まれていません。
- GTBCはFPGAメーカーではなく、ボードメーカーが提供しています。
- この開発ボードから離れると、GTBCは重要ではなくなります。
Golden Top Board Configurationには何が含まれていますか?
Golden Top Board Configurationファイルは時間の節約に役立つ、以下の2つのファイルで構成されています。
-
事前に構築されたI/Oベクタを備えたトップレベルのVerilogコードのファイルです。
-
ピン割り当てマップです。IntelのQuartusの場合、通常はPin Plannerによって生成される.qsfファイルです。
各ファイルの抜粋は、それぞれリスト1とリスト2に示されています。これらを合わせると、FPGA開発ボード上に、何がどこにあるのかがわかります。もちろん、これらのファイルを手作業で再構築することもできますが、相当な時間と労力が必要です。また、発見しにくいミスをする可能性もあります。最悪の例の1つは、DRAMへのピン割り当てのミスです。DRAMやFPGAピンを物理的に調べることができないため、トラブルシューティングが特に困難です。
ソフトウェアのエラーとハードウェアのエラーを切り分けるために、何時間も何日もトラブルシューティングを行うことになります。
module top(
///////// CLOCK /////////
input CLOCK0_50,
input CLOCK1_50,
///////// KEY /////////
input [ 3: 0] KEY,
///////// SW /////////
input [ 9: 0] SW,
///////// LED /////////
output [ 9: 0] LEDR,
リスト1: トップレベル宣言の一部のリスト
#============================================================
# CLOCK
#============================================================
set_instance_assignment -name IO_STANDARD "1.2-V" -to CLOCK0_50
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CLOCK1_50
set_location_assignment PIN_K43 -to CLOCK0_50
set_location_assignment PIN_A8 -to CLOCK1_50
#============================================================
# KEY
#============================================================
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to KEY[0]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to KEY[1]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to KEY[2]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to KEY[3]
set_location_assignment PIN_K26 -to KEY[0]
set_location_assignment PIN_K27 -to KEY[1]
set_location_assignment PIN_BK10 -to KEY[2]
set_location_assignment PIN_W12 -to KEY[3]
リスト2: ハードウェア名をFPGAピンにマッピングするtop.qsfファイルのコードの抜粋
極性に関する考慮事項
GTBCの記述は一般的にできるだけシンプルに作られています。LEDやSWのような名前が使われますが、極性(アクティブハイにするか、アクティブローにするか)は自分で判断する必要があります。
負論理に関するよくある誤解は、FPGAを最初にプログラミングしたときにすぐに現れます。
マッピングされた(定義された)すべての出力ピンはロジックによって駆動されます。しかし、FPGAが明示的に駆動しない場合、合成ツールはデフォルトでローを出力します。その結果、駆動していないアクティブローのLEDはすべて点灯します。
極性に対処する方法は2つあります。
-
ビットの反転を使う方法です。しかしこれは、プログラムのあちこちに「
~」の反転演算子が散らばるため非常に望ましくありません。将来のバグの原因になり、設計ロジックの理解に余計な負担が増えます。 -
リスト3に示すように、LEDの割り当てを1か所でまとめて反転する方法です。この場合、LED_req(リクエスト)変数に対して割り当てを行います。10ビットの一括反転で必要な処理がすべて完了します。
wire [9:0] LED_req;
assign LEDR = ~LED_req;
assign LED_req[2] = SW[2];
assign LED_req[1] = SW[1];
assign LED_req[0] = SW[0];
リスト3: アクティブローのLEDのビット反転
未使用のピン割り当てをすべて保持する必要はあるのでしょうか?
この議論では、時間と明瞭性が最も重要な要素です。
トップモジュールと.qsfはペアになっています。Verilogのシンボルが物理I/Oにマッピングされているため、一方を変更すれば、もう一方も編集する必要があります。
Verilogは逐次処理コードではありません! ピンマッピングを保持してもペナルティはありません。コードの長さは最終結果にほとんど影響しません。これは特に未使用I/Oへのマッピングに当てはまります。実際、未使用ピンは単に固定のローで駆動されるだけです。
コードの複雑さです。未使用マッピングを残すことの潜在的な欠点として、明瞭性が低下する可能性があります。特にトップモジュールがインスタンス化で埋まってくると顕著です。マッピングを1つのテキストとしてそのまま(変更せずに)保持することを推奨します。また、トップモジュールのインスタンス化の一部をサブモジュールに移動することも検討してください。必要であれば、ゴールデンコードを、Start: DO NOT MODIFYとEND: DO NOT MODIFYで囲んでおくと良いです。
作業時間とコード長への影響を考えると、シンボルとピンマッピングを変更する理由はほとんどありません。
Golden Top Board Configurationにはどのような制限がありますか?
経験則として、GTBCファイルはオンボード回路には最適です。しかし、アプリケーション固有の外部ハードウェアを接続すると話が複雑になります。例えば、Terasic DE23-Lite には2 × 20ピンのGPIOヘッダを備えています(図1)。外部ハードウェアにはさまざまな入力/出力が含まれるでしょう。GPIO_D[35:1]のような汎用名では抽象的すぎます。ハードウェアの機能に適した名前を使う方が望ましく、抽象化はミスを隠してしまいます。例えば、SPIベースのセンサをGPIOヘッダに接続する場合、MyProjectSCLKやMyProjectMOSIのような自己説明的な名前を使う方が良いです。
図1: 40ピンI/Oヘッダを備えたTerasic DE23-Lite の画像
おわりに
この記事の例ではIntelのQuartusとTerasicの開発ボードを使用していますが、同じ原則は他のFPGAツールチェーン(XilinxやLatticeなど)にも当てはまります。
ご健闘をお祈りします。
APDahlen
著者による関連記事
この記事が気に入った場合は、以下の関連記事も役立つかもしれません。
著者について
Aaron Dahlen氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間教壇に立ったことによってさらに強化されました(経験と知識の融合)。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。
Dahlen氏は、ミネソタ州北部の故郷に戻り、コンデンサ探しから始まった数十年にわたる旅を終えました。彼の物語はこちらからお読みください。
