SSブログ

FPGA・DE0勉強会参加してきました [FPGA]

5月19日(土)に梅田ECCにてFPGA・DE0勉強会が開催されました。

・GeekなBoardで遊んでみる。(KSKさんのブログ)
 第1回 関西FPGA・DE0勉強会(2012/5/19)やってみた

・私のプレゼンの資料はこちら↓
 READY!!~はまらないNiosIIの使い方~
当日に追加した分はしばらくおまちを。

 さて前回の第0回ではDE0初心者が多いってことで、そもそもFPGAはなんぞやということを喋ったのですが、やはりニコ技界隈の芸人魂とオープンソース系では違うベクトルで、ぶっちゃけスベったわけでして。
 で、やっぱ引っかかるフックが違うんだなーというのをまざまざと実感したので、今回はテクニカルな部分をネタにしてみました。

 ちなみにプレゼン中ではしゃべってない補足的なバッドノウハウをいろいろ書き連ねてみます。

・SystemIDチェックの無効化

 実際の所、SystemIDのチェックが何のためにあるのかというと、ハードとソフトの同一性を保証するためで、ぶっちゃけ人力管理するならこの機能を使う必要はありません。まあ「人力管理」というのが善し悪しで、こんなもんを人手で管理したら絶対どうでもいい事故が起こるのでやらない方がよいのですけども。
 で、この機能を使いたくない場合、あるいは精神論でどうにかする!という熱血な人は、SystemIDペリフェラルをSoPC Builder/Qsysで外してしまえばIDE/EDSでのダウンロードチェックはされなくなります。
 また、SDK側で無効にしたい場合は、Run As→NiosII Hardwareから"Validate NiosII system ID before software download"のチェックを外せばOK

 何度も言うけど、機械チェックを外すんだからFPGAとSDKの不一致のせいで起こった全ての不具合は自分の責任。転んでも泣かない。


・PLLロック信号を内部リセットにするテクニック補足

 プレゼンで紹介したテクニックは、DE0でQuartusII 9.1以降で使う場合、正確にはCycloneII世代(90nmプロセス)以降のFPGAとQuartusII 7.2以降の組み合わせに限られる。
 というのは、初代CycloneとQuartusII 7.2以前のライブラリでは、PLLブロックのlocked信号が準安定状態でもぽつぽつと'H'を出してしまうので、ロジックが正しく動作しない場合があったため。その後のライブラリでは修正されてるので、いまさら言うこともないだろうってことでスルーしたのだけど。
 あと、そういう仕掛けになっているので信号としては非同期(ただし完全非同期ではなく、inclkでの同期)なためキモチワルイと言う人も居ると思うんだけど、ここらへんもSoPC Builder 10.0以降やQsysでは必要に応じてリセット系の同期化が中に入ってるので、あんまり気にする必要はない。

 ALTERAは歴史的経緯により非同期リセットを念頭においているフシがあるので、内部実装はどうであれクリティカルな部分はそれなりに考えて実装される。
 ここがキモチワルイと思う人は無理してALTERAを使わない方がいい。ALTERAのポリシーはそういうもんだ。


・EPCSコントローラ

 今回はNiosIIの物理的な部分の実装についてだけだったので、IPLとかスタンドアロンの仕掛けとかは割愛してる(次回に予定)んだけど、EPCSコントローラのメモリ範囲がCyclone/CycloneII世代とCycloneIII以降とでは異なっている。たぶんCycloneV世代でもまた変わる。
 プレゼンでもちょろっと離したんだけど、EPCSコントローラはI/OポートがプログラムROMの一部にマッピングされているので、Cycloneの世代によってI/Oの位置がずれるという、えらく鬼畜な仕様のペリフェラルだったりする。
 もっとも、EPCSコントローラをリセットアドレスに指定した場合、ここのプログラムROMに格納されるIPLはSoPC Builder/Qsysで自動生成されるので、普通は問題にならない。問題になるのは自前でIPLを書いてる場合だけ。


 あと、なんか思いついたら追加したり次のネタにしたりする予定。

タグ:FPGA NiosII DE0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。