Golden Top File:FPGAのピン割り当てに悩むのはやめましょう


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 MODIFYEND: DO NOT MODIFYで囲んでおくと良いです。

作業時間とコード長への影響を考えると、シンボルとピンマッピングを変更する理由はほとんどありません。

Golden Top Board Configurationにはどのような制限がありますか?

経験則として、GTBCファイルはオンボード回路には最適です。しかし、アプリケーション固有の外部ハードウェアを接続すると話が複雑になります。例えば、Terasic DE23-Lite には2 × 20ピンのGPIOヘッダを備えています(図1)。外部ハードウェアにはさまざまな入力/出力が含まれるでしょう。GPIO_D[35:1]のような汎用名では抽象的すぎます。ハードウェアの機能に適した名前を使う方が望ましく、抽象化はミスを隠してしまいます。例えば、SPIベースのセンサをGPIOヘッダに接続する場合、MyProjectSCLKMyProjectMOSIのような自己説明的な名前を使う方が良いです。

図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氏は、ミネソタ州北部の故郷に戻り、コンデンサ探しから始まった数十年にわたる旅を終えました。彼の物語はこちらからお読みください。




オリジナル・ソース(English)