2011年09月29日

FPGAボードDE0の使用方法(3)と(4)

(2012-12-12:なぜか(3)をアップし忘れていました。追記します)
(2012-12-12:ここから追記)

 FPGAボードDE0 の上に回路を作るにあたり、まず簡単な回路で一通り動作することを確かめてみる。

 QuartusII を立ち上げて、新規のProject を作る。トップモジュールを設定するだけで、とりあえずOK。
 その後に、QuartusII を実行しているディレクトリの〜.qsf をエディタで直接修正して、ピンアサインなどをしていく。
 GUI経由でピンアサインなどは出来るんですが、エディタで修正する方が手っ取り早いので。

 ピンアサインをする時は、通常は図面を見ながら、なんですが、今回は DE0 のCDROMに入っている Demonstorations のファイルをコピーして使うことにするんだけど...

 Demonstorations に入っている、〜.qsf のファイルの内容がショボい。ピンアサインしかしとらんやんー。
 (辛うじて空きピンの処理は入っているが...)


 結局、いろいろ追加修正して出来たのが、このファイルです。

テスト用 qsf ファイル

 ついでに、トップモジュールがこれ。

テスト用トップモジュール


 qsf ファイルで追加した設定は、以下の通りです。

 ・292行〜
  set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" ピン名

  →I/Oバッファの明示的な指定。
   デフォルトになっているので、不要かも知れませんが、念の為。

 ・351行〜
  set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to ピン名

  →I/Oバッファのドライバビリティ(駆動能力)の設定
   デフォルトは8mA なので、必要のないバッファは4mA にする。
   VGA出力は8mA が必要なようです(Xilinx Spartan-3 Starter Kit のマニュアルがそうなってました)。

 ・410行〜
  set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to ピン名

  →信号のプルアップ抵抗の指定
   基板上で双方向信号になっているものは、外部からドライブされる可能性があるため、固定値を出力するのではなく、プルアップにしておくため。


 ・416行
  set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "AS INPUT TRI-STATED WITH WEAK PULL-UP"
  →定義されていないピンを入力モードで内部プルアップにする。これもデフォルトだが念の為。

   基板上で使っていないピンは、プルアップなしで入力ピンにすると、FPGAに悪影響があるため、出力にするか、プルアップにするのが普通。
   出力にすると、使っていないと思っていたピンが、外部からドライブされると、ショートするため、プルアップ付きの入力にすることにする。


 (注:qsf ファイル内のピン名に、ワイルドカードを使用するのはOKなんですが、QuartusII のGUIのPin Assignment を呼び出すと、ワイルドカード指定を無視するようです。Pin Assignment を使わなければ問題ありません。もしくは1ピンづつ指定するか、です。)



 FPGA の入出力ピンとして、周辺回路に対しては、次のようにする必要があります。

 FPGA => 周辺回路への出力:FPGAから何らかの信号を出力する。オープンにしたり、入力ピンにするのはNG。

 FPGA <= 周辺回路からの入力:FPGAは入力ピンにする。この信号をドライブする素子が、ドライブしない可能性がある場合は、プルアップ付きにする。

 FPGA <=> 周辺回路への入出力:通常に使用する時は、適切なタイミングで入力と出力を変える。Hi-Z になる時があるので、プルアップ付きの双方向信号に指定する。使用しない時は、プルアップ付き双方向信号指定で、Hi-Zを出力する。

 FPGA 空きピン:プルアップ付き入力、もしくは上記の『定義されていないピン』の通りにする。


 Demonstration の回路は、この指定が全く出来ていません。そのため、入力信号がフローティングになっている箇所が多数あります。ちと酷い...


 テスト用の qsf ファイル、テスト用トップモジュールは、基板の図面とにらめっこして、その辺りをケアした設定になっています。

 なのですが...(次に続く)


(2012-12-12:ここまで追記)

 テスト用の qsf ファイル、テスト用トップモジュールで、入出力信号を適切に設定して、基板として問題ないと思ったんですが...

 レイアウト後の QuartusII が出力した、PIN ファイルです。


テスト用レイアウト後のPINファイル


 一見問題ないようですが、Pin Name に『GND+』と書かれているピンが問題です(A11,A12,B11,G1,G2,G22,T1,T2,T20,T21)。


 GND+ で記載されている説明を見ると...

-- GND+ : Unused input pin. It can also be used to report unused dual-purpose pins.
-- This pin should be connected to GND. It may also be connected to a
-- valid signal on the board (low, high, or toggling) if that signal
-- is required for a different revision of the design.

 『使っていない入力ピンです。GNDに固定すべきです。(以下略)』

 DE0 のボード上では、どこにもつながっていません。また、改造してGND に落とすのも(ほぼ)不可能です。


 上記のピンは、入力クロック専用のピンのため、内部でプルアップ抵抗を設定したり、出力したりすることが出来ないピンです。


 ・基板上でどこにもつながっていない。
 ・FPGA では、入力ピンにしか設定できず、プルアップも出来ない

    ↓

  入力フローティングを回避できない!!


 これは、DE0 の設計のミスですね。使っている時に壊れないように祈るばかりです。



 同様に、GPIO1_CLKIN[1]、GPIO1_CLKIN[0]、GPIO0_CLKIN[1]、GPIO0_CLKIN[0]、の4ピンも、問題です。

 ただし、こちらは外部コネクタにつながっているので、そのコネクタからドライブするか、基板を改造して、プルアップ抵抗かプルダウン抵抗を付けるか、で対策が立てられます。

 入力フローティングの信号で、さらに長い線がつながっているので、ノイズの影響を受けやすいので、こちらは対処した方がよさそうです。

 3.3V 以外でも使うかも知れないので、プルダウン抵抗(10KΩ×4)を付けて、対策しました。


プルダウン抵抗追加


 動作的には、何も変わらないんですけどねー。


posted by えすび at 20:34| Comment(2) | ツール:DE0・Quartus | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
以下で未使用ピンをHi-Zに指定できませんか。

QuartusII Menu
→Assiginmetns
→Settings
→Device
→Device and pin Options
→Unused Pins
→All input tristated

Posted by ななし at 2012年12月13日 17:02
>ななしさん
 コメントありがとうございます。


 この記事の前の記事『FPGAボードDE0の使用方法(3)』を、なぜかアップし忘れていましたので、追記しました。

 その記事を読んでもらうとわかるかも知れませんが...


 QuartusII のメニューからの設定は、記事内の

  set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "AS INPUT TRI-STATED WITH WEAK PULL-UP"


 の指定と同じものです。


 レイアウトした結果は 〜.pin の通りで、クロック入力専用ピンは、プルアップが出来ないようです。


 多分、物理的な問題で、クロック入力専用ピンは最初からプルアップ機能自体がないんだと思います。
Posted by えすび at 2012年12月13日 18:42
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。