FC2カウンター FPGAの部屋 2005年12月

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

ハンターにスキーに行った

今日は大晦日、ハンターマウンテンにスキーに行ってきた。
私の板は去年からキスマークのスキーボード99cmだ。ほどほどのスピードで滑っているならばこれで十分。持ち運びも軽いし、よくまわるし、気に入っている。
午前5時ころ家を出て、8時ころ着いた。行く途中風が強くてどうかと思っていたが、やはりゴンドラが止まっていた。でもゴンドラは乗らないので大丈夫。
かなり雪が降っていた。滑っていると顔が寒い。子供は寒いというので、フェイスマスクを買ってあげた。
HunterMountain_051231_1.jpg

とても滑っていられないので、速めに休んで、昼飯にした。休んで外に出てみると、だいぶ風がやんで寒さが和らいだ。午後になって晴れても来た。
HunterMountain_051231_2.jpg

結構、楽しく滑れたのが、子供の付き合いで緩斜面だけだったのが残念。
一番下の子供のお守りをしていたのだが、スピードが速くて参った。ほとんどボーゲン直滑降で滑っている。スピードは怖くないようだ。追いつくのが大変。こういうときは長い板が良いな。。。
HunterMountain_051231_3.jpg

うちの家族です。

-----------------
皆さん良いお年を。
  1. 2005年12月31日 22:35 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

大掃除

昨日は大掃除をした。
床のワックスがけ、窓拭き、風呂場の掃除をした。
床のワックスがけは中学生のお姉ちゃんがだいぶ手伝ってくれたし、窓拭きは下の2人にやってもらった。
中学生のお姉ちゃんはよくやっていて本当に助かったが、下の2人は途中で飽きたようだ。
窓拭きも中学生のお姉ちゃんが中学校の家庭科で習ってきた方法でやったようだ。バケツの水に酢を少し混ぜ、新聞紙をぬらして拭くそうだ。効果のほどは良くわからなかったが、とてもくさくて閉口する。酢が嫌いな俺はいやだ。
まあ、ある程度きれいになった。
  1. 2005年12月30日 06:17 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

ボード作製初期のデバック

今やっている基板は2002年に最初に作ったので、もう3年以上付き合っている。
基板は回路図はこっちで描いて、基板屋さんに渡して、ボード設計、基板作製、部品実装してもらった。
ボードは2種類あって、パソコンのPCIカードと独立で使う基板がある。
FPGAの回路は全てスクラッチから作った。ボードが出来る少し前から初めて、SDRAM制御回路、PCIインターフェース、PowerPCプロセッサインターフェース、DMA、内部バスアービタ等など。
FPGAの回路設計するのが2人しかいなかったので、最初は本当にきつかった。PCIカードの方のロジックは大部分私1人で作った。休みの日も、自宅のパソコンで回路を書いていた気がする。おまけにシミュレーション用のテストベンチを書くのも大変だった。
という訳で、基板もFPGAの回路もファームウェアも新しいので、デバックの際はどれを信じたら良いのかわからず大変だった。さらにFPGAをAlteraからXilinxに変更したばかりで、FPGAのことも良くわからない。
バグがでたら1つずつ、ファームは大丈夫か、回路は大丈夫か? 自分たちで書いた回路図がだめなのか? それとも基板がおかしいのか? という問いを繰り返した。
ファームは自分の間違いだというのがわかれば、すぐに修正できるが、FPGA内の回路で、シミュレーションでわからないタイミング依存の現象は、FPGA内に検証回路を作りこんでデバックしたりした。
基板も水晶のピン配置が違うといった単純なミスから、グランドバウンズで基板を作り直すというバグもあった。
グランドバウンズと特定するにはとても苦労した。論理回路が間違っているかもしれないし、その可能性を除くためにプロトコルなしの生データを受け渡す回路を作ってテストしたりもした。結局、他のこともやっていたが、それがわかるのには、半年以上かかってしまった。
取り留めなくなったが、やはり、全部動くかどうかわからないというのはデバックが大変すぎる。
今度作る予定の基板では、以前の回路をなるべく使いまわして、基板の動作チェック等を出来るようにしたい。今度はいろいろノウハウがあるので少しはいいだろう。
基板のほうも最初から伝送シミュレーションをしてもらったり、グランドバウンズの配慮をしてもらったりしたい。やはり、それなりのノウハウがあるところに頼まないと後で作り直しとかになってしまうかもしれない。それにその部分がしっかりしていると安心できる。時間の無駄がだいぶなくなると思う。
本当に長かったような気がするが、ちゃんと動くようになってよかった。
普通の企業だったら、3年以上もかかったら首かもしれませんよね。こっちもいろいろノウハウがためられて良かったともいえるが。。。
  1. 2005年12月28日 06:17 |
  2. プリント基板の作成過程
  3. | トラックバック:0
  4. | コメント:3

論理シミュレーション時のバグ

”Chipscopeのクロックの配置について”でバグがあってChipscopeを入れてみたのだが、シミュレーション時のVHDL記述に問題があることがわかった。
論理シミュレーション時には、検証回路(FPGA)をテストベンチでSDRAMモデルやその他の外部回路と接続している。原因としては、SDRAMモデル(簡易モデル)からの出力を0ディレイで検証回路に結んだのが原因だったようだ。
論理シミュレーション時に最初のSDRAMのデータを受けるフリップフロップが、受けたデータをそのまま(1クロック遅延しないで)出力するようになってしまっていた。
検証回路をつないで論理シミュレーションした時に、あれ?1クロック早いんだっけとよくも考えないで1クロックディレイしてしまったので、インプリメント後のFPGAの動作は1クロック遅れてしまっていた。
原因としては、クロックはDCMを使っているので、デルタ遅延が大きいのかも?
データはそのまま0ディレイで入れちゃったので、データが出たクロックでラッチしてしまったのかな?
本当はテストベンチの方に遅延を入れるのだが、書き直すのが面度いので、SDRAMのデータを受けるフリップフロップに入れてしまった。こんな感じ。
data_delay <= data
-- pragma translate_off
after 100 ps
-- pragma translate_on
;

よくわからないが、入力データは遅延しておいた方がいいようだ。
でも同じようなテストベンチで大丈夫なのもある。何か、アドバイスがあったらお願いします。

2006/02/10追記:データとクロックが同時に変化するようだと上のような現象になることがあるそうである。データをクロックより明示的に少し遅らせなければならないそうである。
Xilinxのアンサーはここ
  1. 2005年12月27日 14:58 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Chipscopeのクロックの配置について

前回、BUFGMUXの配置方法で、BUFGMUXを配置したが、回路にバグがありChipscopeを入れて検証することになった。しかし、最初にChipscopeを入れたらトリガがかからず、波形を表示しようとしても波形が表示できない。これは困るので、どうなっているか解析してみることにした。
FPGA Editorで見てみると、Chipscopeで使われるBSCANユニットは、Virtex2-3000ではチップの右上端にある。最初にChipscopeを入れたものでは、チップ下側のBUFGMUXを使用していたので、BSCANユニットのDRCLK1からBUFGMUXに行くまでのパスが長く、7.694nsかかっていた。
FPGA_Editor_BSCAN_1_051226.png

次に、このネットがBUFGMUXを通過した後のネット(icon_control0<0>)の遅延は1.529nsから11.365nsの間でばらついている。グローバルクロック配線を使えているところもあるが、使えていないところもあるようだ。グローバルクロック配線の配線リソースの制限のためと思われる。
FPGA_Editor_BSCAN_2_051226.png

Chipscopeの動作がおかしいのはBSCANのDRCLK1からBUFGMUXまでの経路の遅延7.694nsとBUFGMUX0Pからのクロック遅延最大11.365nsが大きすぎるのが問題ではないかと考えた。
図3にクロック遅延が最大のスライス(actreset_pulse)付近のクロック配線図を示す。図3で赤いスライスがクロック遅延11.365nsのスライスである。
FPGA_Editor_BSCAN_3_051226.png

下図に最小クロック遅延のBRAM付近のクロック配線図を示す。図4で赤いBRAMがクロック遅延1.529nsのBRAMである。
FPGA_Editor_BSCAN_4_051226.png

次にChipscopeのクロック配線も考慮してBUFGMUXを使用する。チップ上側のBUFGMUXに空きをつくり、BSCANから短い遅延で配線できるようにした。(本当はChipscopeのクロック配線も制約ファイルで固定すれば良いと思う) また、反対側のBUFGMUXになるべく関係ないクロックを割り当てた。結果はChipscopeのクロック配線がうまくグローバルクロック配線を使用できるようになったが、rxclk1がグローバルクロック配線からはじき出され、ローカル配線を使用するようになってしまった。
図5に改良版のBSCANのDRCLK1からBUFGMUXまでの配線を示す。この配線の遅延は3.152nsで、以前の配線より4.542ns遅延が少なくなっている。
FPGA_Editor_BSCAN_5_051226.png

BUFGMUXの出力のネットicon_control0<0>は1.543ns~1.746ns位に収まるようになった。グローバルクロック配線を使えているようだ。
FPGA_Editor_BSCAN_6_051226.png

以前、クロック遅延が最大だったスライス(actreset_pulse)付近のクロック配線を図7に示す。今回のクロックの遅延時間は1.692nsである。前回は11.365nsなので、9.673ns改善している。
FPGA_Editor_BSCAN_7_051226.png

以上のように変更した所、Chipscopeは正常に動作するようになった。
どのくらいクロックが遅延すると動作しなくなるかはわからないが、やはり遅延が大きいとChipscopeの動作が不安定となるようだ。Chipscopeのクロックもグローバルクロック配線を使うようにしたほうが安定動作が望めると思う。
このようにChipscopeも所詮FPGAに組み込まれた1回路なので、他の自分で作った回路のような配慮も必要であるようだ。リソースがあまっていて、Chipscopeの影響がないようにしたいならば、全ロジック素子をロックしておかなければいけないのだろう。
  1. 2005年12月27日 06:01 |
  2. Chipscope
  3. | トラックバック:0
  4. | コメント:0

家のクリスマスパーティ

今日は家のクリスマスパーティ、親2人、子供3人、じい、ばあ2人の7人でのクリスマス。
今日のメニューは手作りピザ、ロールキャベツ、鳥もも、漬物、サラダの献立。
Xmas_tree_051224_4.jpg

手作りピザは、パン焼き器で生地をこねて作る。いつもなかなかおいしい。今日は巨大なピザだった。
Xmas_tree_051224_5.jpg

たらふく食べたらケーキだ。
Xmas_tree_051224_6.jpg

イチゴの乗っているのはムース、細長いのはブッシュ・ド・ノエル。友達の奥さんの妹さんのやっているケーキ屋さんのケーキだ。とてもおいしい。守谷にあるもみの木というお店だ。特に私はカラメルロールが好きだ。

  1. 2005年12月24日 20:10 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

つくば100本のクリスマスツリー

今日はつくば100本のクリスマスツリーを見てきた。詳しくはここ参照。(PDFファイルです)
Xmas_tree_051224_1.jpg

風がとても強く、倒れているクリスマスツリーもあった。全体としては、TX開業のせいかスピフリーのツリーも結構あった。
土地柄JAXAがあるので、ロケットやスペースシャトルがついているツリーも多かった。
面白い所では、阪神ファンなのか阪神優勝ツリーもあった。写真参照。
Xmas_tree_051224_2.jpg

ミニ凧がいっぱい付いたツリーもあった。なかなか良かった。
Xmas_tree_051224_3.jpg

うちの子供もほんの少しだけ製作に協力したようである。といってもオーナメント1個だけだが。。。一応見てきた。
今からクリスマスパーティである。いっぱいご馳走があるもよう?ケーキも子供の好みが違うので2つ買った。
  1. 2005年12月24日 17:41 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

冬用タイヤへの交換

今日午前中うちの息子に手伝わせて、タイヤを新しいスタッドレスに交換した。今まで履いていたのもスタッドレスだが、もう6年物で山もなくなっている。
スキーに行くので冬はスタッドレスを履いているが、スタッドレスは3年程度履いて山がまだあっても、雪道では危なくなってくる。それで、古いスタッドレスがあまってしまうので、今では夏に古いスタッドレスを履いている。夏にスタッドレスを履いていると滑りやすいが、そんなにスピードを出すわけでもないので問題ない。
スタッドレスはブリジストン社のものを使っている。ブリジストンのスタッドレスは少し高いが、他のメーカーのより1年程度効きが長持ちする気がする。
古いのはブリザックのMZ-02だったが、今度のは、ブリザックのREV01だ。REV01は開発年代が新しいだけあって、タイヤブロックの倒れが少なく、タイヤ剛性が高い気がする。走りやすくなったようだ。でも古いスタッドレスは硬化しているので、新しいスタッドレスにするとちょっとふわふわ感がある。
28日にはスキーに行くことになっているが状況はどうだろう?雪はあるだろうが、道に雪が載りすぎていると行くのが大変ということになる。
2年前だったか?正月にスキーに行って、雪が沢山降っていたため渋滞していて、スキー場に午後遅くにしか着かなかったので、そのまま家に戻り、次の日にまた行ったことがあった。そのようなことがない様に望む。
  1. 2005年12月23日 17:15 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

BUFGMUXの配置方法

FPGA(Virtex2の3000)を使用してイーサネットのスイッチのような物を作ってあるのだが、DMAを実装するために、HDLを書き足した。インプリメントは出来たが、txdata3(23)といくつかの信号のクロックからの出力時間が、タイミング制約を満たさなくなってしまった。それにその辺の信号のクロックからの出力時間がばらついている。
タイミングアナライザで解析してみると、BUFGの後のネット(V10.OTCLK1)が7.442nsもかかっている。これはおかしい。

Timinig_ana_1_051221.png

次にFPGA Editorで見てみると、クロックがBottom-Rightの領域でグローバルクロック配線を使えていないようだ。緑の矢印の部分だ。FPGA EditorのArray1ウインドウにはトップ側のBUFGMUXが8個表示されている。右から7P,6S,5P,4S,3P,2S,1P,0S。これらのBUFGMUXはFPGAチップの左右真ん中の上下に8個ずつある。BUFGMUX7Pからの配線が赤くハイライトされているのがわかる。
FPGA_Editor_bufg_1_051221.png

Virtex2はチップをNW(North West),NE,SW,SEの4つの区画に分けてある。BUFGMUXはチップの上側に7P,6S,5P,4S,3P,2S,1P,0S、下側に7S,6P,5S,4P,3S,2P,1S,0Pと並んでいる。同じ番号のPとSが対抗しているのだが、同じ番号のBUFGMUXは、同じ区画へは接続できない。
このFPGAでは、BUFGMUXを14個使用しているので、同じ番号のBUFGMUXが同じ区画へクロックを供給するようになってしまったようだ。それで、グローバルクロック配線を使えなくなったクロックがローカル配線を使ってしまって、クロックが遅延してしまっているようである。
そこで、グローバルクロック配線がかち合わないように自分でBUFGMUXをフロアプランすることにした。今回はFloorplannerでなくて、PACEを使ってみた。使い方はほとんど同じようだ。
どっからでも出来るが、今回はISEのProcesses for SourceペインからUser Constrainsを展開して、Assign Package Pinsをダブルクリックしてみよう。
そうするとPACEが立ち上がる。
1.右真ん中の大きなウインドウの下のArchitecture Viewタブをクリックして、FPGAチップを表示する。
2.Architecture Viewで表示を拡大して、チップの最上部真ん中と最下部真ん中にあるBUFGMUXの割り当て部分を表示。
3.左上のDesign BrowserのGlobal Logicを展開するとrxclk_bufg等のBUFGMUXがある。
4.BUFGMUXをドラックアンドドロップして、指定のBUFGMUXの位置に入れる。(7Pなど)
5.入れ終わったらセーブする。
PACE_bufg_051221.png

これで、UCFにBUFGMUXを固定する制約が書かれる。再度インプリメントをする。終了後、Timing Analyzerで解析すると、

Timinig_ana_2_051221.png

BUFGの後のネット(V10.OTCLK1)は1.559nsとなっていて、グローバルクロック配線が使用されているようだ。FPGA Editorで見てみると、
FPGA_Editor_bufg_2_051221.png

改善されているのが良くわかる。(緑の矢印の部分) Array1ウインドウを見ると、以前はBUFGMUX7Pの配線が赤くハイライトされていたが、今度は反対側のBUFGMUX0Sの配線が赤くハイライトされているのがわかると思う。
Virex2でクロックを十数個使う場合は、Placerにお任せではうまくBUFGMUXを配置してくれない場合があるようだ。この場合は、自分でBUFGMUXをフロアプランするのが安全のようだ。
Virex2のBUFGMUXの制限などについての情報は、Virtex2ハンドブックの380ページからに載っている。これはXilinxの以下のURLにある。
http://direct.xilinx.com/bvdocs/userguides/j_ug002.pdf

---------------------
だいぶヒットポイントが上昇したような気になっていても、まだまだ知らないことは多い。

(2005.12.26:追加)
BUFGMUXのうちDCMへのフィードバック用BUFGMUXは通常の配線領域は使っていないようだ。よって、BUFGMUXは使用していても、配線領域は反対がわのBUFGMUXが全領域使用可能となる模様。
  1. 2005年12月21日 20:51 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0

今日の筑波山

今日はとても寒い。ぴゅーぴゅー風が強い。今日はスキー場も風が強いのだろう。
空気がとても澄んでいるので、筑波山が良く見える。とてもよく見えるが、朝の美しさにはかなわないと思う。
筑波山を紫峰というが、朝、きれいに見える時は、ほんとに紫峰に見える。
Mt_tsukuba_051218.jpg

  1. 2005年12月18日 16:38 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

インフルエンザの予防接種2

以前、インフルエンザの予防接種をしてきたという話を書いたが、今日2回目に行って来た。
中学生も13歳になっていたので、問題なく1回でOKとなった。
奥さんは今日は仕事でいないが、職場で接種したということなので、これで家族全員終了。
一応、新型でなければ安心ということになったが、去年は一番下の子供が接種をしていてもA型インフルエンザになったので、油断は禁物である。
  1. 2005年12月17日 23:36 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

ISEで任意のパスのディレイを見る方法3

前回2回はISEで任意のパスのディレイを見る方法というよりは、クロックパスディレイを見る方法といったほうが良いような内容になってしまった。
でも、普段なかなか見ることが出来ないクロックパスディレイについて、確認できたのではないだろうか?
Timing AnalyzerのAnalyze against Users Paths by defining Endpointsを使用すると、非同期回路の入力パッドから出力パッドまでの遅延も見ることが出来る。LUTを使用したディレイがどの位遅延しているかも。実際に解析したときの結果が過去のブログのここに書いてある。
LUTを使用したディレイ回路を通ってFFに入っているのならば、クロックと同様に入力パッドからFFまでを遅延解析すれば良い。
今までは、ディレイの値はXilinxの保証値だったので、実際の遅延時間はどのくらいかという疑問がわくと思う。それも過去のブログで書いてあるので、そっちを参照してほしい。それは、FPGAの性能だ。以前の結果によると、実測値から計算される遅延量はTiming Analyzerによる保証値の70%だった。(ただし、この結果を元に失敗しても保障は出来ない。あくまで、私の持っているSpartan3のそのときの温度における結果がこうだったというだけだ)
今回はFPGA Editorで見ても、余り面白くなかったので、これにて終了とする。
最後に”ISEで任意のパスのディレイを見る方法2”で使用したxc3s200のフロアプランしてあるプロジェクトとxc3s1500のフロアプランしてあるプロジェクトをダウンロードできるようにしておくので、興味のある方はどうぞ。ここここです。
  1. 2005年12月17日 10:39 |
  2. Timing Analyzerの使い方
  3. | トラックバック:0
  4. | コメント:0

ISEで任意のパスのディレイを見る方法2

今回はFPGA Editorを使ってみようと思ったが、とりあえずFloorplannerで見てみよう。ISEのProcess View - Implement Design - Place & Route - View/Edit Placed Design (Floorplanner)をダブルクリックして、Floorplannerを起動。
右側のPlacementウインドウを見てみよう。赤丸の中、チップの下のほうにCLKパッドがある。SW入力パッドは右真ん中のあたり。いくらもロジックが無いので、チップの右真ん中のあたりに固まっている。(下図参照)
Tech_Schma_10_051215.png

Inst_ssgdisp_FreqDivi_lcnt_12を表示してみよう。右上のHierarchyウインドウのdynadisp_test "Primitives"を展開すると、Inst_ssgdisp_FreqDivi_lcnt_12がある。クリックすると、Placementウインドウに斜線でハッチングされて表示される。(図は拡大している)
Tech_Schma_11_051215.png

同様にswl_3をクリックすると出てこない。FPGA Editorでみると、IOパッド内のInputレジスタを使用しているようだ。Floorplannerでも片鱗が見える。SW3パッドを見ると、IQ1としてswl<3>がマップされている。FloorplannerでのIOBレジスタのマップ状況の見方はいまいち良くわからない。
Tech_Schma_12_051215.png

次に、FPGAチップ内で、どの位クロックディレイに差があるか調べてみよう。いい加減な方法だが、適当にFloorplannerでFFの配置を移動して調べてみようと思う。やり方は以前このブログで紹介したので割愛するが、"Floorplannerの使い方覚書1"を見てほしい。(FloorplannerはTiming Analyzerからのクロスプローブで立ち上げないで、この前のように単体で立ち上げる)すべてのロジックをUCF Flowにコピーする。適当にInst_ssgdisp_FreqDivi_lcnt_11、Inst_ssgdisp_FreqDivi_lcnt_12を動かしてみた。
Tech_Schma_13_051215.png

これでセーブして、コンパイルし、クロックディレイを観察してみよう。
Timinig Analyzerを起動しよう。
例によって、Process View - Implement Design - Place & Route - Generate Post-Place & Route Static Timing - Analyze Post-Place & Route Static Timing(Timing Analyzer)をダブルクリックして、Timing Analyzerを起動。起動したら、ツールバーの右から5番目の砂時計マーク(Analyze against Users Paths by defining Endpoint)をクリックする。
下図のようなダイアログが開く。
Tech_Schma_7_051213.png

前回と同様にSourcesにclkを入れる。DestinationsにはInst_ssgdisp_FreqDivi_lcnt_10、Inst_ssgdisp_FreqDivi_lcnt_11、Inst_ssgdisp_FreqDivi_lcnt_12を入れよう。
それでOKボタンを押す。
Tech_Schma_14_051215.png

ディレイを計算して表示する。
Tech_Schma_15_051215.png

その結果、Inst_ssgdisp_FreqDivi_lcnt_10だけclkパッドからFFまでのディレイは2.952nsで、他のディレイは2.950nsだった。2psしか変わらない。
今まではxc3s200だったが、今度はxc3s1500と大きなFPGAにしてやってみよう。
さっきと同様にFloorplannerでInst_ssgdisp_FreqDivi_lcnt_11、Inst_ssgdisp_FreqDivi_lcnt_12を動かしてみた。下の図はその位置。
Tech_Schma_16_051215.png

さっきと同様に、clkパッドからInst_ssgdisp_FreqDivi_lcnt_10、Inst_ssgdisp_FreqDivi_lcnt_11、Inst_ssgdisp_FreqDivi_lcnt_12間での遅延を見てみる。
Tech_Schma_17_051215.png

そうするとclkパッドからInst_ssgdisp_FreqDivi_lcnt_11が2.355ns、Inst_ssgdisp_FreqDivi_lcnt_10が2.189ns、Inst_ssgdisp_FreqDivi_lcnt_12が2.172nsとなった。Inst_ssgdisp_FreqDivi_lcnt_11とInst_ssgdisp_FreqDivi_lcnt_12間のクロックスキューは183psとなった。これは適当にFFを配置しているので、確かなことはいえないが、大きいFPGAはクロックスキューも大きくなる傾向のようだ。チップが大きいので当たり前だが。。。もっと大きくなると、もっと顕著になる。大きいFPGAを速く動かすのは難しいと言えよう。
  1. 2005年12月16日 23:00 |
  2. Timing Analyzerの使い方
  3. | トラックバック:0
  4. | コメント:0

ISE7.1iのアドバンテージ

うちはまだISE6.3iを使っているが、今日始めて?ISE7.1iを使ってよかったと思ったことがあった。
それは、ISEではHDLのテストベンチをタイミングチャートから生成できる。(~.tbwというファイル。New SourceからTest Bench Waveformで作るやつである)
ISE6.3iだと、VHDLのport宣言の部分に日本語でコメントを入れたり、パッケージをuseしてあって、std_logic_vectorビット幅の値をconstantで定義してあったりすると、Test Bench Waveformを作ることが出来ない。でもISE7.1iならばOKということがわかった。ラッキー。いままで使いたくてもなかなか使えなかった。一番下のVHDLファイルをささっとテストすることが出来るようになった。
VHDLファイルの最初のentityはこんな感じである。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
library work;
use work.cmd_global_def_pack.all;
use work.cmd_sdram_def_pack.all;

entity sw2sdram_dma is
 port(
  clk : in std_logic;
  reset : in std_logic;
  DMAaccess0 : in std_logic;
  SDRAMaddr0set : in std_logic_vector(24 downto 0); -- SDRAMアドレスの設定値(Byte単位)
  SDRAMaddr0now : out std_logic_vector(24 downto 0); -- SDRAMアドレスの現在の値(Byte単位)
  SDRAMaddr0gnt : in std_logic; -- SDRAMアドレスの設定タイミング
  pfifo_data_count : in std_logic_vector(8 downto 0);
  pfifo_rd_en : out std_logic;
  pfifo_data : in std_logic_vector(63 downto 0);
  sdram_req : out std_logic; -- sdram使用要求
  sdram_gnt : in std_logic; -- sdram使用許可
  sdram_ready : in std_logic; -- SDRAMのready信号
  dma_ready_out : out std_logic;
  dma_dout : out std_logic_vector(31 downto 0);
  global_cmd : out std_logic_vector(GLOBAL_CMD_WIDTH-1 downto 0); -- グローバルコマンド領域
  local_cmd : out std_logic_vector(SDRAM_LOCAL_CMD_WIDTH-1 downto 0); -- ローカルコマンド領域
  cmd : out std_logic -- コマンドアサート
 );
end sw2sdram_dma;

いままでISE7.1iはだめなやつと思っていたけど、なかなかどうして良いとこあるじゃない。
  1. 2005年12月16日 16:23 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

プロセッサのパスコンについて

巷ではXbox360が発売になったようだ。PowerPCのコアが3つ載っているそうだ。Xbox360の箱を開けて、基板を見る企画がImpress Watchであって記事を見たが、すごい数のコンデンサだ。こんなにパスコンを付けなければ正常動作しないのだろうか? カルチャーショックぎみ。
今度、PowerPC搭載ボード作るときは、これほどじゃなくても、この1/3くらい載せなきゃいけないのだろうか?
結構ショッキングだった。記事はここにある。
  1. 2005年12月16日 09:21 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:3

三丁目の夕日の映画

今日は三丁目の夕日を見てきました。今日はうちの奥さんが休暇だったので、休暇をとって一緒に見てきた。
なかなかいい映画だった。駄菓子やなど、懐かしい場面があったし、集団就職の列車の窓から見える景色の合成も良かった。
今日は、中学生の女の子の誕生日だったので、夜、パーティをした。うちの奥さんが手作りのレアチーズケーキを作ったが、結構おいしかった。ちっとゼラチンを入れすぎで、硬めだったが、これはこれでおいしい。子供たちは喜んで、お替りしていた。
夜に注文していたスライブのフットマッサージャーが来た。
やってみると気持ちいい。だが、奥さんにとっては邪魔なようだ。良く思っていない。健康のためにはいいのだが。。。
-------------------------
このブログは、特にFPGAのことを書いたブログなのだが、皆さん。ためになっているのであろうか?
  1. 2005年12月14日 22:49 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:4

ISEで任意のパスのディレイを見る方法

ISE7.1iで任意のパスのディレイを見る方法を紹介しようと思う。
サンプル回路は7セグメントLEDのダイナミック点灯の回路。サンプルはここにあります。
ファイルをダウンロードするとdynadisp_test_1ms.ZIPというファイルが出てくる。これをWindows XPだったらダブルクリックで、それ以外だったらソフト(Winzip等)を使って解凍する。
解凍すると、dynadisp_testというフォルダが出てくる。それを開けるとVHDLファイルとまたdynadisp_testというフォルダが出てくる。そのフォルダをまたダブルクリックすると、ISEのプロジェクトファイルdynadisp_test.iseがあるので、それをダブルクリックしてISEを起動する。
そうすると、すでにコンパイル済みのプロジェクトが出てくるので、"Processes for Source"の"Synthesize-XST"を展開して、"View Technology Schematic"をダブルクリックする。(下図参照)
Tech_Schma_1_051213.png

そうすると、一番上の回路図が出てくる。ここで、赤丸の所のアンドックアイコンをクリックして、ISEの外に出そう。(下図参照)
Tech_Schma_2_051213.png

下の図のウインドウが開く。これは一番トップの回路図。赤い矢印のところをダブルクリックすると、下の回路図が開く。
Tech_Schma_3_051213.png

Spartan3のテクノロジにマッピングした回路図が出てくる。(下図参照、注:下図の回路図は上図をクリックしてから、拡大して位置を調整してあります)
Tech_Schma_4_051213.png

CLKから線がつながっている箱がBUFGだ。クロックがファンアウトが大きいのでそれ用のバッファ。黄色いダイアログがプロパティ。赤い線がネットで名前はclk_BUFGPである。
今度は、Inst_ssgdisp_FreqDivi_lcnt_12とswl_3のDフリップフロップを見てみよう。
Tech_Schma_5_051213.png

Tech_Schma_6_051213.png

検索するには左下のInstance ContentsペインからInstancesを展開するとインスタンスがあるので、swl_3とかをクリックすると右の回路図に赤でインスタンスが表示される。
これを覚えておいて、次にTiminig Analyzerを起動しよう。
例によって、Process View - Implement Design - Place & Route - Generate Post-Place & Route Static Timing - Analyze Post-Place & Route Static Timing(Timing Analyzer)をダブルクリックして、Timing Analyzerを起動。起動したら、ツールバーの右から5番目の砂時計マーク(Analyze against Users Paths by defining Endpoint)をクリックする。
下図のようなダイアログが開く。
Tech_Schma_7_051213.png

ここではclkパッドから上で見たInst_ssgdisp_FreqDivi_lcnt_12とswl_3のDフリップフロップまでのクロックパスのディレイを見てみよう。
Find whatのテキストボックスに正規表現で名前を指定してもいいが、今回は数が少ないので左下のResourcesペインからPadsを展開しよう。そうすると、clkパッドがある。clkをクリックして、右真ん中のSourcesペインの>ボタンをクリック。Resourcesの1行目にclkが入る。
次に左下のResourcesペインからFlip-Flopsを展開しよう。Inst_ssgdisp_FreqDivi_lcnt_12を見つけて、クリック。右下のDestinationsペインで>ボタンをクリックすると、同様にResourcesの1行目にInst_ssgdisp_FreqDivi_lcnt_12が入る。同様にswl_3もDestinationsペインの2行目に入れる。
Tech_Schma_8_051213.png

OKボタンをクリックすると、ディレイを計算して表示する。
Tech_Schma_9_051213.png

赤で囲んだのがclkパッドからswl_3フリップフロップまでのディレイ、緑で囲んだのがclkパッドからInst_ssgdisp_FreqDivi_lcnt_12フリップフロップまでのディレイ。それぞれ2.991nsと2.952nsで異なっている。何が違うかというと、clk_BUFGPネットが1.051nsと1.012nsで違っている。これはグローバルバッファのネットである。このようにフリップフロップによっては、クロックのスキューが生じる。
これ以上はFPGA Editorでなければ視覚的にわからない。今日はここまでだが、FPGA Editorでどう見えるかも紹介したい。
  1. 2005年12月13日 20:29 |
  2. Timing Analyzerの使い方
  3. | トラックバック:0
  4. | コメント:0

パソコン用の椅子を買いました

昨日は、中学生の自転車の修理と犬のえさを買いにホームジョイ本田まで行った。うちのおねえちゃんの自転車の扱いはとっても荒い。道を外れて芝畑に落ちたりしている。(ちなみにうちの近くでは芝が名産なので、芝畑が多い)今度は、自転車を倒してチェーンケースをへこませたので、チェーンがケースにこすれるようになってしまった。それを修理にいったのだ。
犬のえさは、ゴールデンとラブラドールの雑種の犬がいるので、えさも食い込む。30Kg、7500円分くらい購入。
自転車の修理の間に、いろいろ見ていたらパソコン用の椅子を発見。今使っているのは、私が中学校の時に作った椅子である。なぜこれを使っているかというと、パソコンラックが低いので低い椅子がこれしかなかったからだ。普通の椅子だと高すぎて、首が凝ってしまう。(ただ単に胴が長いという声もあるが。。。)
座ってみると、とても低くなるので、気に入った。買おうとすると、現品限りとのこと。それじゃ約6000円は高いので、もう少し安くならないかというと、それじゃ3500円でOKとのこと。ラッキーと思い喜んで買った。掃除して使ってみると、とても具合がいい。とてもよい買い物であった。
写真の左が中学校のとき作った椅子。いろいろ苦労した思い出のある椅子。右が今回購入した赤い椅子。いろいろ散らかっているがその辺は見ないでください。パソコンはおねえちゃん用と2台ある。
Chair_051211.jpg

  1. 2005年12月11日 08:59 |
  2. パソコン関連
  3. | トラックバック:0
  4. | コメント:0

PCIモジュール1

私の作ったPCIモジュールについて説明しようと思う。読みたくないかもしれないけど、そういう人は飛ばしてほしい。
まずは最初に電源ONからのコンフィギュレーションの方法。
昔のISAバスではIOアドレスはDIPスイッチなどで設定していた。これはとても不便だった。複数枚ボードが入っていると、ボードを抜いて、どんなアドレスを設定している確認しなければならなかった。
PCIバスはそんな不便さを解消するために規格化されたのだろう。
PCIバスはコンフィギュレーションレジスタを持っている。電源ON後のイニシャライズでコンフィギュレーションレジスタを設定するようになっている。一番最初には、自分が指定されているかが、アドレスを持っていないのでわからない。そのため、IDSELという信号が各PCIバスコネクタにポイント2ポイントでつながっている。つまり/FRAMEが最初にLOWになった時に、IDSELがHIGHになっていれば、コンフィギュレーションアクセスとして、自分が選択されていることになる。下にコンフィギュレーションレジスタのマップを示す。
自分のボードでアドレスマップしてもらいたいデバイスの領域をベースアドレスレジスタのRead/Writeビットで示す。
PCI_config_registers_051210.png

上の図だったらSDRAMをベースアドレスレジスタの0でマップしている。SDRAMは64MBあるので、これは2の26乗の値だ。よって26ビットのアドレスで表せる。この場合ベースアドレスレジスタは31ビット目から26ビット目までRead/Write出来るようにフリップフロップ(FF)を実装する。25ビット目から0ビット目までは0固定にする。
ホストパソコンの起動時にBIOSがPCIデバイスのコンフィギュレーションをする。その際に、私のPCIボードをコンフィギュレーションして、ベースアドレスレジスタ0(10h)にオール1を書き込む。次にベースアドレスレジスタ0(10h)を読み出すと、"1111 1100 0000 0000 0000 0000 0000 0000"(2進数)が読み出せる。これでBIOSはアドレス設定が出来るのが、31ビット目から26ビット目までということを認識する。このPCIボードの最初のデバイスが64MBの領域をアドレスマップしようとしていることを認識し、アドレスを決定する。そして、BIOSはマップしたアドレスを31ビット目から26ビット目までに書き込む。
PCIボードの最初のデバイス(SDRAM)は、これ以降PCIアクセスのこのアドレス領域にリスポンスする責任が生じる。このアドレス領域のアクセスにリスポンスしないとパソコンがデッドロックする。(パソコンが何も反応しなくなる。死んじゃうということ)
例えば、BIOSがベースアドレスレジスタ0に"1111 1000 0000 0000 0000 0000 0000 0000"(2進数)とアドレスマップしたとすると、パソコンの0xF8000000から0xFBFFFFFFまでは私のPCIボードのSDRAMにマップされている。C言語などでプログラムを作り、0xF8000000に値を書き込むとPCIバスを通して、私のPCIボードのSDRAMに書き込まれる。(Windows XPなどのOSでは普通のユーザープログラムで0xF8000000に値を書き込むと書いてもだめ。論理アドレスなので、物理アドレスをマップして、論理アドレスに変換するか物理アドレスに直接書けるライブラリを使うかしないとだめである。)
次にBIOSは次のベースアドレスレジスタの処理を行う。オール1を書いてもオール0が読めたベースアドレスレジスタで終わりとなるのだろう。(この辺は良くわからない)
かくして、PCIボードの全てのデバイスはメモリかI/Oにマップされる。マップされたら、先ほど言ったようにそのアドレス領域にリスポンスする責任が生じる。さもなとパソコンが死ぬ。死ぬといっても、誰も応答してくれないのでリトライを繰り返すのだが。。。
というようにパソコンはPCIボードを初期化するのである。
ちなみにデバイスドライバはデバイスID、クラスID、サブシステムID、サブシステムベンダIDなどを読んで、自分のボードがどこかを認識できるのだと思う。この辺はデバイスドライバを書いたことが無いので良くわからない。この辺のレジスタは自分のデバイスIDなどをROMとして書き込んであるのだ。
---------------
どうだろうか。このくらいでPCIバスの初期化はわかるのだろうか?
A**Sの方どうでしょう?
  1. 2005年12月10日 07:01 |
  2. PCI
  3. | トラックバック:0
  4. | コメント:0

ISEのProperty display levelについて

XilinxのFPGA用のツールISEにはProperty display levelがある。ディフォルトではStandardになっていて、余計なものは表示しないようになっている。
このブログを見て、なんだこんな項目が無い、ダイアログが違うという方がいらっしゃると思うが、そんな方はProperty display levelをAdvancedにしてください。
やり方はISEのメニューの"Edit"-"Preferences..."を選ぶ。そうするとダイアログが出てくるので、そこのProperty display levelの項目をAdvancedに変更してください。そうすると私と同様なダイアログが見えると思います。
ISE_General_Options_051209.png

  1. 2005年12月09日 06:13 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

FPGAの静的消費電力

FPGAの消費電力の話題がキコさんのブログであったが、XilinxのFPGAはどの位、静的に電力を消費するのかをXPowerで調べてみた。場合によっては、新しく作るボードのFPGAは何も回路を入れなくてもヒートシンクやファンが必要となるかもしれない。
ISE7.1iで各FPGAでプロジェクトを作製し、inputをoutputにまわしただけのVHDLファイルを作成して、それをインプリメントした。そしてXPowerを起動して、静的な消費電力を見てみた。(XpowerはISEの"Process for Source"ウインドウの"Implement Design" - "Place & Route" - "Multi Pass Place & Route"を展開した中の"Analyze Power (XPower)"をダブルクリック)
XPower_051207.png

その結果を示すと。
"xc2vp50-5ff1517" 今度使用する予定のVirtex2pro
Vccint 105mW, Vccaux 417.5mW, Vcco25 3.75mW, total 526.25mW

"xc2vp100-5ff1696" Virtex2proの一番大きいチップ
Vccint 150mW, Vccaux 417.5mW, Vcco25 4.38mW, total 571.88mW

"xc4vlx200-11ff1513" Virtex4の一番大きいチップ
Vccint 586.8mW, Vccaux 443.5mW, Vcco25 0mW, total 1030.3mW

Virtex2proの一番大きいもので約0.6W、Virtex4の一番大きいもので約1W位のようだ。そんなに大きくないので安心したが、ライバルのアルテラの資料では温度85度のワーストケースで3W程度食うということだが、本当の所はナゾである。しかし、何でVccauxが0.4Wも食っているのだろうか?これはコンフィギュレーションなど用だったと思ったが。。。

今までは静的消費電力だけだったが今度は動的な消費電力も込みな消費電力はというと。ちなみに今のVirtex2-3000の回路は66MHz動作、LUT使用率70%の状態でXPowerを起動すると総合消費電力で約2W、静的消費電力は0.76Wだった。これはXPowerをディフォルトの状態で起動した時の数値である。現在FPGAはヒートシンクを買ったのだが、とりあえず手で触っていられる温度なので、ヒートシンクはつけていないでむき出しのままである。

しかし、XPower、今まで知らなかったが、ModelSimでのシミュレーションパターンやトグル率を入れるとより正確に消費電力を計算できるらしい。というかそれらのデータを入れないと計算できないのだろう。今度、ModelSimのシミュレーションパターンを入れて消費電力を測定してみることにしようと思う。XPowerも学習しなくては。。。
----------------------
最近いろいろ忙しく、ブログを書くのも滞りがちである。
現在使用している回路の仕様変更や実験、技術報告書の執筆(たいそうなものではないが)などで忙しい。
  1. 2005年12月07日 22:47 |
  2. その他のXilinxのツールについて
  3. | トラックバック:0
  4. | コメント:0

タイマー作製の実験

3学期になったので、今日はタイマー作製の実験の初回だった。
この実験は2年生の実験で、74HC00等のCMOS ICで2桁の分表示のタイマーを作るという実験だ。つまり、7セグメントLEDに2桁の分の数をセットして、(99分まで、10進数)RUNボタンを押すとカウントスタートし、1分ごとに表示を減算。セットした分数だけたつ(カウントが0になる)とブザーが鳴って止まるというタイマー。電源スイッチは無いので普段は7セグLEDを消灯しいる。スイッチを押して分数をセットする時と、RUNしてタイマーとしてカウントしている時だけ、表示させている。
基板はサンハヤトのユニバーサル基板lCB-96PUで、TTL IC用に電源、グランド配線パターンがあるもの。
100Hzの水晶発信器と74HC00×2, 04×1, 74×2, 192×2, 4511×2, 4518×2とブザー、集合抵抗、7セグメントLED、押しボタンスイッチ3個でタイマーを作る。電源は単3電池3本だ。配線はいまさらだが、手巻きラッピングだ。
今日は初回なので、配置を決めて、ラッピングソケットをユニバーサル基板に半田付け、及び半田付けで電源配線。
トラブルはあったがラッピングソケットの足を切る人もいないで、無難に進行した。
この実験も部品がなくなってきて存続の危機にある。まず2.54mmピッチの足の100Hzの水晶発信器がない、今調べたらユニバーサル基板ももう無いようだ。(まだありました。サンハヤトのWebページの検索は、FireFoxでは、うまく検索できないようです。IEだと検索できました。)水晶発信器は1MHzの角型金属パッケージタイプに切り替えようと思えば大丈夫だが、いろいろ部品がなくなっている。
  1. 2005年12月05日 20:55 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

ハリポタ4を見てきました

ハリポタ4、炎のゴブレットを見てきた。映画館に行ったら結構すいていた。もっと混んでいるかと思ったが、拍子抜けだった。窓口に並んでいるのを見ながら、自動発券機で発券するのが快感なのに。。。
ハリポタ本のシリーズは日本語は全て持っている。炎のゴブレットは唯一英語版も持っているが、読もう読もうと思っているうちに日本語版が出て、結局読んでいない。
映画はハリポタシリーズの中で一番面白いと思った。ドラゴンとの追いかけっことか面白かったし、舞踏会のシーンとか今までよりは明るいというか暗くないシーンが多かったような気がした。
それに、本に割と忠実に作ってある気がした。本は長いのでだいぶ飛ばしてあるが、要点は抑えているのではないか。
スターウォーズシリーズも終わってしまったし、(スターウォーズも全部DVD持っている。エピソード4,5,6は録画だが)ロード・オブ・ザ・リングも終わったし、ずっと見ているシリーズ物はハリポタだけだ。
こんどはナルニア国物語を見ようかな。
そういうSF物がすきなのである。
  1. 2005年12月03日 21:50 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

風邪を引いてしまった

水曜日当たりから咳が出始めて、今日は鼻が詰まり始めた。本格的に風邪を引き始めたようだ。
明日は、ハリポタの炎のゴブレットの映画の席を予約したので、どうしても良くなっていきたい。もうお金を払ってあるので、行かないと損なのだ。
最近は映画館も便利になって、インターネットで席を予約して、お金まで払えるので便利である。映画館はシネプレックスつくばだ。明日行けると良いな。。。

今日は、真ん中の息子に頼まれメルヘブンのアームリングVol.3の5種類のアームリングをヤフオクで落札させられた。アームリング集めに夢中になっている。ヤフオクで落札したほうが、5種類出るまで買うより安上がりである。どうせ性格的に全種類出るまで買うであろう。
  1. 2005年12月02日 22:29 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2