FC2カウンター FPGAの部屋 2008年04月

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

FPGAの部屋

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

風邪っぴき

28日の朝から鼻が出て、体がだるかった。そのうちに38度くらい熱が出てきたので医者に行くことにした。医者に行っている間も具合が悪く、こりゃ寝てた方が良かったかな?と思った。
診察になったら、今、インフルエンザがはやっているということで検査をしようということになった。ここでびっくりして少ししゃんとした。インフルエンザの検査をして結果待ちの時に、またまた具合が悪くなる。やっと順番になって結果を聞いたら、インフルエンザ陰性とのこと、一安心。
医者の会計をしたら薬局で順番を待つのがあまりにも大変になったので、後で家族に薬を取りに行ってもらうことにして、帰ったきた。
昼ごはんは到底食べられなかった。
その後、持ってきてもらった薬を飲んで、その日は仕事を休みにしてずっと寝ていた。
そのときから鼻が完全に詰まって、鼻水が出っぱなし。。。
息をするのも苦しいし、完全に鼻が詰まっていると水を飲むのにもおぼれそうになる。
夜は大体熱が下がったが、まだ完全な鼻詰まりは治らず。。。

29日は、だいぶ良くなってきたが、まだ完全に鼻詰まり。寝たりおきたりしながら過ごす。大体ご飯が食べられるようになってきた。

30日、(今日)朝ちょっとつらかったがシャワーを浴びて仕事へ。
やはり、完全ではないが鼻づまり、鼻でっぱなしなのでくるしい。頭を使う仕事は無理。
夕方になって、具合が悪くなってきてやっと帰ってきた。家に帰ったらやはり微熱、鼻づまり。早々に寝ようと思っている。

この3日間で、ティッシュボックス2箱分くらい鼻をかんでしまった。皆さんも風邪にはお気をつけ下さい。
  1. 2008年04月30日 20:55 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:5

始めて地上波デジタルテレビを買った

今日、2階用のテレビとして、初めて地上波デジタルテレビを買った。
今までの地上波アナログはVHFだったのでUHFのアンテナが必要となる。今までUHFのアンテナはあったのだが台風で壊れていたので、新しくUHFのアンテナをつけた。

屋根の上に上がって古いアンテナをはずそうとしたら、錆付いていてねじがまわせない。ペンチでねじったり、金鋸できろうとしたがなかなか切れなかった。結局、ペンチで少し緩めて上に引き抜いた。屋根上に上げた新しいUHFアンテナに同軸ケーブルを接続してポールの一番上に設置した。UHFのアンテナの下にはVHFアンテナがついている。屋根は傾斜がついているので大変な作業だった。落ちると死ぬかもしれないし、慎重に、慎重にやった。若いときにはアマチュア無線のアンテナを設置していたので手馴れているとは思うのだが、もう若くは無いので油断は禁物。

UHFアンテナを設置できたので、早速、地上波デジタルを見てみたら全チャンネル問題なく見えた。実は電気屋さんでこの辺ではアンテナを立てても見えるとは限らないと散々脅されてきたので、不安だったのだが問題なく見えて本当に良かった。
うちの地方では東京タワーの電波を直接受信する。結構距離が遠いし、かなり分配するのでアンテナ直下にブースターを設置してある。給電はリビングの電源から給電している。30dBくらいブーストしてあるので大丈夫だと思ってはいたのだが良かった。

これで、リビングのテレビをいつ交換してもOKだな。。。
  1. 2008年04月27日 18:24 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

UCFを書く方法はいろいろあります

アクセスログを見ていると”UCFの書き方”を見ていただいている方が多いようだ。
カテゴリの”UCFの書き方”はあくまでどのようにUCFファイルが書かれているかやConstraints Editorに着目しているのだが、他にもUCFを書き換えるツールはまだある。たとえばPACEやFloorplanner、FPGA EditorでもUCFを書くことができる。将来的にはFloorplan Editorに統一されていくようだ。
UCFを手で書くとすると結構大変だ。パッド位置の指定やIOBのDELAYの指定は手で書いても問題ない。しかし、”UCFの書き方3”のPINの指定はTiming Analyzer のAnalyze against Users Paths by defining Endpoint ダイアログを開いて Pins のところを展開してインスタンスを見ないと正確なパスの指定がよくわからない。
Tech_Schma_8_051213.png

それでもPINを指定して制約をかけても無視されることもあるのが、よくわからないところだ。

UCFで配線を固定できるが、それはFPGA Editorを使わないとほとんど不可能だろう。手で配線を固定できる人はXilinx社のツールを作っている人のほかには、たぶんいないんじゃないだろうか? その方法は”FPGA Editorで配置と配線を割り当てる3””FPGA内の配線を固定する”で解説した。

ISE9およびISE8では、PACEとFloorplanner両方でエリア制約やパッド位置の指定ができるが、統一が取れていないので、片方で制約をかけた後にもう片方でもう一度制約すると2重に制約がかかれることがある。このへんが統一が取れていないところだ。ISE10ではまだ良く調べていないが、Floorplannerがあるので多分そうなのだろう。早く統一してもらいたいものだ。

というわけでUCF書きたい方は”UCFの書き方”だけではなく、”PACEの使い方””Floorplannerの使い方””FPGA Editorの使い方”も見てください。

ちょっと古めのものもあるのだが。。。DDR2 SDRAMコントローラが終了したら、ISE10.1iで書き直してみようかな。。。
  1. 2008年04月26日 07:18 |
  2. UCFの書き方
  3. | トラックバック:0
  4. | コメント:0

UMLツール、JUDE/Community

最近、あまりブログを書いていないが、DDR2 SDRAMコントローラは現在のDQSを使用しないでDQを遅延させてリードする方式を使いながら、最初、データを書き込む。次に、DQの遅延値をダイナミックに変更しながらリードをして、正常に読める位置があるかどうかを探るという方法で書き始めた。だが、娘を高校に送り迎えしているために、朝の時間が短くなってしまってなかなかやっている暇が取れない。ゴールデンウイークにやることにする。

仕事では依然として全体の仕様の定義をしながらVHDLを書いて、細かい仕様も一緒に策定している。それをVHDLにドキュメントとして書き込んでDoxygenでドキュメントも一緒に生成している。そのほかに全体の仕様をWordで書いている。やはり、前も書いたが文章だけだと再度見直したときに良くわからなくなってしまう。
以前にUMLのシーケンス図だけでも描いてみたということをブログで書いたが、そのときはVisioで書いたが、どうも書きにくい。
そこでUMLツールを使ってみることにした。どれがいいかを探ってみたが、”JUDE/Communityはユーザー登録後、無償でご使用いただくことが可能です。”とのことなのでJUDE/Community を使って見ることにした。
これはJAVAベースだったが私のパソコンにはJREをインストールしてあるので問題ない。
早速インストールして、シーケンス図のサンプルを書いてみたが、自動で図形を整形してくれて、やはりVisioよりも書きやすかった。やはり専用ツールだな?
Wordにシーケンス図を張り込んでみたが、画像として張り付いている。当たり前だが、Visioと違って余り縮小しないほうがいいだろうと思う。
なるべくUMLの図を使ってマニュアル化しようと思っている。というか、そうしないと自分で後で見ても良くわからない仕様になってしまう。

JUDE/Communityを使ってシーケンス図もどきを書きかけてみたのがこれ。やはりVisioより簡単。
JUDE_080425.png
  1. 2008年04月24日 21:56 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Make Tokyo Meeting に行ってきた

今日はMake Tokyo Meeting に行って来た。
研究学園駅からTXで新御徒町へ、そこから大江戸線で清澄白河駅へ降りた。会場がどこだかわからずにうろうろしてしまったが、携帯にGPSがついているので地図を表示してみるとわかりました。こういうときにGPS携帯の恩恵を感じる。でも、ほとんど使ったことが無いのだが。。。
やっとわかって会場に入った。
何か、乗り物のようなものがおいてある。これは動かないオブジェだろうか?
Make_Tokyo_1_080420.jpg

セグウェイの試乗もやっていた。
Make_Tokyo_2_080420.jpg

体育館の中に入った。
プリンタのモータ音で曲を演奏していた。結構、まともに聞こえたので驚き。モータ駆動回路は自作してあるそうだ。
Make_Tokyo_3_080420.jpg

3Dモデリング。
Make_Tokyo_4_080420.jpg

ブレットボードで作る電子楽器。持ち運ぶためにコードが取れて修復が大変だそうだ。
Make_Tokyo_5_080420.jpg

音楽を奏でるテスラコイル。数十万ボルトということだ。空中放電している。おおコワ。。。
Make_Tokyo_6_080420.jpg


いろいろ面白かった。知り合いの方にもいろいろ会えたし、良かった。
すすたわりさんもA社のOさんも、asupiyoPaPaさんもいらしていた。みなさん、趣味が同じなんだなと思った。お話できてうれしかったです。ありがとうございました。

今日は、花粉が飛んでいたようで、頭が痛くなってきたので、早々に帰ってきた。
  1. 2008年04月20日 21:22 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

Doxygenを使ってVHDLソースコードをドキュメント化してみました2

FPGAの部屋のブログ記事”Doxygenを使ってVHDLソースコードをドキュメント化してみました”でVHDLのソースコードを書きながら、ドキュメントを一緒に作っていたが、これはDoxygenが理解できるようなドキュメンテーションをソースに付加する必要があった。
皆さんご存知かもしれないが、Doxygen が理解できるようなドキュメンテーションは一切付いていないVHDLソースファイルをドキュメント化するタグがあったので書いておこうと思う。
それはDoxygenのマニュアルのここに書いてあるEXTRACT_ALL タグだ。このEXTRACT_ALL タグをYESにすると”EXTRACT_ALLタグが YES であれば、ドキュメントが得られなくても、ドキュメント内の要素は すべてドキュメントに出力するものとして扱います。”だそうだ。
実際にやってみた。自分でドキュメントを記述したものに比べれば落ちるが、特にコラボレーション図などは階層がわかってとてもよい。
Windows版でのEXTRACT_ALLタグのチェックの入れ方は、下のようにDoxygen GUI frontend ウインドウでExpert... ボタンをクリックする。出てきたdoxywizard で EXTRACT_ALL をチェックする。
Doxygen_080416.png

これがDDR SDRAMコントローラVHDL版のDDRtest.vhdのDoxygenによるコラボレーション図 (EXTRACT_ALL = YES)
Doxygen_2_080416.png

ちなみに、コラボレーション図のファイル名の書いてある四角をクリックすると、そのファイルのドキュメントが開く。
  1. 2008年04月18日 12:16 |
  2. Doxygen
  3. | トラックバック:0
  4. | コメント:0

仕事用PCI-Xモジュール

今日は仕事用のPCI-Xモジュールについて、ちょっとだけ書こうと思う。(あまり書くとまずいので。。。)
最初にホストのパーソナル・コンピュータ(PC)からPCI-Xボードのリソースにアクセスする機能をターゲット機能、逆にPCI-Xボードがパーソナル・コンピュータ(PC)のリソースにアクセスする機能をマスタ機能と呼ぶことにする。
PCI-Xの規格ではターゲット機能を使用して、ホストPCからPCI-XボードのSDRAMのデータをリードしようとするときに、PCI-Xボードがデータを用意できるならば、トランザクションが始まってから16クロック以内にデータを出力する必要がある。なお、すぐにリードするデータを返せない場合は8クロック以内に応答を返す必要がある。これはリトライやスプリット応答などが相当する。

ここでリトライとスプリット応答について説明すると、リトライはPCIの時代からあるもので、”後でもう一度アクセスしてね。。。”とマスタ(PCI-Xではイニシエータ)にお願いするもの、スプリット応答は”今はリード・データが用意できないけど、データが用意できたら、こちらからそちらにデータを送ります。(書き込みます、これがスプリット完了)”というものだ。

133MHz動作で16クロック以内にデータを用意できる (PCI-Xの仕様) 確証が無いため、トランザクションが始まってから8クロック以内にスプリット応答を返して(これもPCI-Xの仕様)、後からスプリット完了でリードするはずのデータをホストPCに送ることにした。ただし、コンフィギュレーション・アクセスは間に合うので通常にリードする。
そうなると、スプリット応答したトランザクションのテーブルが必要になる。後で、データが用意できたら、ターゲット・リードではあるが、マスタ機能を使用して、リード・データをホストPCに送る(これはいわばマスタ・ライト)。つまり、ターゲットのアクセスではあるが、マスタの機能を使用する。
PCI-Xボードがマスタ機能を使用して、ホストPCのリソースをリードする場合も、ホストPCからスプリット応答を返されることが多い。その場合は、ホストPCのリード・データはスプリット完了として、PCI-Xボードへのターゲット・ライトとして実行される。
スプリット完了の場合は、コマンドやアドレス、アトリビュートがスプリット完了専用になる。このように、PCIで機能わけされたモジュール(ターゲット、マスタ)はたすきがけで使用される。
下にPCI-Xモジュールのブロック図を示す。こんな感じになっている。PCI-Xモジュールの外部へはクロックが異なるので、非同期FIFOを使用する。
PCI-X_module_080416.png

結構、PCI-Xも大変なものだ。スプリット応答したテーブルを参照しなくちゃいけないし。。。
  1. 2008年04月18日 06:56 |
  2. PCI
  3. | トラックバック:0
  4. | コメント:0

Make Tokyo Meeting 開催

MakeブログMake Tokyo Meeting が今週末の日曜日4月20日に開催されるので行こうと思っている。
いろいろな作品が展示されるので楽しみだ。真空バズーカやプリンタのモータを利用した音楽、テスラコイル、なんかくだらないようなものもあるけれど(失礼!)作ることに情熱を注いでいる人たちの祭典だ。
非常に楽しみ。ついでにMake: Technology on Your Time Volume 04をアマゾンで注文してしまった。

DDR2 SDRAMコントローラは先週や今週はじめが忙しいこともあり、あまり進んでいない。
とりあえず、DDR2 SDRAMコントローラは現在のDQSを使用しないでDQを遅延させてリードする方式を使いながら、最初、データを書き込む。次に、DQの遅延値をダイナミックに変更しながらリードをして、正常に読める位置があるかどうかを探っていこうと思っている。正常に読めるのであれば、正常に読める範囲の中の真ん中にDQの遅延をセットするようにしようと思っている。
DQの遅延値をダイナミックに変更するやり方は、以前に”Virtex4のIDELAY(VARIABLEモード)”でテストしているので、これを使用する。

お仕事のほうは、独自仕様のFPGA内部バス(AMBやOCPのようなもの)の定義をしているのだが、どうも言葉やブロック図での仕様書に限界を感じている。言葉では再度読み直したときに、再認識できるまでに時間が必要だ。やはりUMLのシーケンス図のような図を描いて、見て一発でわかるようにしなくては。。。そこで、買ってあったUMLの本でシーケンス図だけでも勉強をして、シーケンス図もどきを書いた。これでだいぶ仕様の見通しが良くなったと自分でも思う。
できれば全体をUMLで記述して見たいのだが、欲張ると悩んでしまうので、とりあえずはシーケンス図もどきだけで満足。
  1. 2008年04月16日 05:34 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

PCI-Xモジュールのその後

このところ日記が続いてしまったが、それだけでもなんなので仕事の話を。。。
今のところ、以前やっていたPCI-Xテストモジュールを下敷きにPCI-Xモジュールを書いている。
いざ書き始めると、いろいろな疑問や仕様策定上の迷いが生じる。主なものは下のような疑問だ。

・未解決のスプリット転送用バッファのエントリをいくつにしようか?
・PCI-Xのターゲット・リードに対して、どのデバイスの応答をスプリット転送にするのか?
・PCI-Xのターゲット・ライトのときに、アトリビュート・フェーズでターゲットに通知される転送数分の空きバッファが無いときにはどうするか?(結局これは128byte単位のアドレス(Allowable Disconnect Boundary)でバッファの空きに応じてディスコネクトすることにした。)
・前のADBでディスコネクトする場合、ターゲットはADBの前で4クロック以上STOP#をアサートする必要があるが、4クロック以上ならば何クロックでも良いのか?


これらを解決しながら、書き進めている。
でも、他の仕事もあるので、なかなか進まない。気力も充実してきたので、がんばって書き進めようと思っている。
書き進めているVHDLコードには、このブログの”アサーション事始め”で練習したような簡単なアサーションを組み込んでみたりしている。
さらに、VHDLなので”Doxygenを使ってVHDLソースコードをドキュメント化してみました”を例にDoxygenでソースコードをドキュメント化しながら書きすすめている。Visioで書いたブロック図などもPNGに変換してドキュメントに加えることができるし、リファレンスとして重宝している。

皆さんも、ソースをVHDLで書いているならば、DoxygenでVHDLソースをドキュメント化してはいかがだろうか? 少し面倒だが、素敵なドキュメントが一緒に出来上がると思う。

  1. 2008年04月13日 09:59 |
  2. PCI
  3. | トラックバック:0
  4. | コメント:0

種まき、宴会

昨日は、朝8時に奥さんの実家へ行って、稲の種まきの手伝いをした。
土を入れた苗箱に稲の種籾を撒いて、水をかけ、その上に土を撒く。それを手動の機械でやったのだった。奥さんの弟家族も来ていたので、子供らが機械のハンドルを回したり、苗箱を運んだりして手伝ってくれた。大体午前中で終了したが、今度は4月末か5月初めの田植えを手伝いに行くつもりだ。

夕方からは、14年前に骨肉種で亡くなった高校時代の友人の墓参りに行った。若くして亡くなってしまったので、まだ小さかった子供らと奥さん、親御さんがかわいそうだった。今は、子供らと奥さんは実家に帰って知っているようだが、どうしているのだろうか?
14年間欠かさず墓参りに行っている。そういえば、花粉症がひどくて1年だけ行けなかったのだった。

墓参りの後に高校時代の友人たち5人で恒例の飲み会に行った。
今日は、小樽食堂というところだった。なかなか、料理もおいしく、量も多くてよいところだった。じゃがバターシュウマイもそのものでおいしかった。
でも、人気メニュー第1位のとうもろこしのかき揚げは微妙。かき揚げと名前をつけるのが良くないのでは?
いろいろ積もる話もできて楽しかった。
これで宴会シーズンは終了だったか? まだ、もう1つくらいあるかな?
  1. 2008年04月13日 08:48 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

50万アクセス達成

今日で、このFPGAの部屋のアクセス・カウンタ数が50万アクセスとなった。
ブログを見直してみると2005年の5月からブログを書き始めたようだ。カウンタをつけたのはもっと後だと思うので、多分2年半くらいで50万アクセス行ったのかもしれない。
皆さん見ていただいてありがとうございます。

今週は宴会が多いため、DDR2 SDRAMコントローラなどの懸案事項は来週に持ち越します。今日も宴会でした。
後は土曜日で終了です。
  1. 2008年04月10日 22:14 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

高校の入学式

今日は上の娘の高校の入学式だった。
嵐のような天気での入学式で、天気は最悪の様子。
どうなるかと思ったが、それでも正常に式は行われた。体育館で入学式をやったのだが、風の音がびゅうびゅう響いて、何か大丈夫かな?と思った。
保護者には知っている人も数人いて、びっくりした。またまた、その高校の先生が私の高校時代に一緒に自転車で高校に通った友人だということがわかったり、やはり人生驚きの連続かもしれない?
まあ、知り合いもいてよかった。何十年ぶりに友人にも会えて天気は最悪だったが、良い入学式だった。
これから娘を高校の送り迎えが少々気が重いが、娘の高校生活もスタートをきれてよかった。

夕方からは、恒例の宴会があった。私がお世話になった方が定年退職して、福島の故郷に帰るということだ、さびしくなる。その方には、テニスやスキー、その方の家での宴会といろいろお世話になった。男の方だが料理が上手で昔はたびたびご馳走になったものだ。故郷で第2の人生をおくり、冬はスキー三昧ということで少々うらやましくもあるが。。。鉄人のようにお元気な方なので、またお会いする機会もあるだろう。。。
今週は宴会続きだ。体調の維持に努めなくちゃ。。。

FPGAの部屋のまとめサイトを更新した。最近書いたChipscopeチュートリアルやDDR SDRAMコントローラの話題を追加した。簡単な説明文があって昇順に並んでいるので、ブログのカテゴリを見るよりもわかりやすいと思う。
  1. 2008年04月08日 21:25 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

桜の花見と福岡堰さくら公園

今日は福岡堰に花見に行った。
家を午前8時ころ出て、石下のマクドナルドで朝マックをしてから、福岡堰さくら公園の駐車場に車を止めてさくらを見に行った。午前9時くらいだったが、もうすでに駐車場は結構車が入っていた。
駐車場から歩いてすぐのところに1.5kmあるという桜並木がある。満開だった。川があって桜があるのが良い。本当に見事だ。言葉で表現するよりも写真を貼ったほうが良いと思うので写真を貼る。
hanami_1_080405.jpg

露天商もけっこう出ていた。杏飴や綿菓子を買う。
hanami_2_080405.jpg

hanami_3_080405.jpg


この公園は、大きな滑り台の遊具があって、遊べそう。小3の娘も滑り台で遊んでいた。
sakura_park_1_080405.jpg

モニュメントもあった。
sakura_park_2_080405.jpg

全景写真2枚。
sakura_park_3_080405.jpg

sakura_park_4_080405.jpg

規模の割には、滑り台以外は目立った遊具がないが、滑り台はよさそうだ。(自分で滑ったわけじゃないけど。。。)
今日はフリーマーケットもやっていた。珍しいなと思ったのが、整体のお店があった。フリマで見たのは初めて! よほどやってもらおうかな?と思ったが時間がないのでやめにしました。
  1. 2008年04月05日 20:16 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

Verilog版DDR SDRAMコントローラのテスト回路

Chipscopeのチュートリアルで題材に使っていたVerilog版DDR SDRAMコントローラのテスト回路のことを書こうと思う。
Verilog版DDR SDRAMコントローラのテスト回路はここにあります。Spartan3E Starter Kitを持っている人はダウンロードして試してみてください。いつものように、ダウンロードして使用したときの責任はもてないのと再配布は禁止、商用禁止でお願いしたい。
ダウンロードしてZIPを解くと、DDR_burst_test_verilog フォルダがあると思う。その中にDDRtest_synth101iフォルダがあるので、その中の DDRtest_synth101.ise がISE10.1i のプロジェクトファイルだ。
そのプロジェクトをISE10.1iで開いて、Chipscopeチュートリアルを参考にやってみると良いと思う。
プロジェクトに入れてあるChipscopeのファイルがDDRtest_cs_test.cdc だ。それを説明しようと思う。
Chipscope_tutorial_48_080402.png

上の図がChipscope Analyzer の表示だ。
read_error は、outff_flagが1のときにexpected_read_data != out_data の時に1になる信号。つまり期待値とリードしたデータが違っていたということ。
rasb_node_1d, casb_node_1d, web_node_1d はそれぞれDDR SDRAMのRAS#, CAS#, WE#。
out_dataはリードしたデータの出力。
outff_flag は DDRtest.v で言うと rddata_valid 信号でリード・データが有効であるということを示す信号。

さらに下の図で流れを説明する。
Chipscope_tutorial_49_080402.png

赤い縦線のところでRAS#, CAS#, WE# = 0,1,0 なのでDDR SDRAMをプリチャージする。次の緑の縦線のところでRAS#, CAS#, WE# = 0,1,1 なのでアクティベートする。
赤い楕円で囲まれたとことは、RAS#, CAS#, WE# = 1,0,0 なので、バーストでWRITEしている。
緑の楕円で囲まれたところは、RAS#, CAS#, WE# = 1,0,1 なので、先ほどWRITEしたデータをバーストでREADしている。
バーストで書き込むデータはオール0から始まって、1つデータ転送するごとに+1される。よってそういうデータが読めるはずだ。読めるはずという期待値が expected_read_data で、実際にリードできたデータがout_data、out_dataのイネーブルがoutff_flagだ。テスト回路としては、outff_flagが1の時に expected_read_data とout_data を比較している。(前にも書いたが。。。)

Chipscopeの定義ファイルは DDRtest_cs_test.cdc だが、これはテキストファイルでテキストエディタで見ることができる。
テキストエディタで見てみると、フォルダは絶対パスで書いてあるようだ。ダウンロードした皆さんのところでやってみるときには、絶対パスを書き直すか .cdc ファイルを作り直す必要があるようだ。
DDRtest_cs_test.cdc のパスが書いてあるところはファイルの頭にあるがこんな感じ。

#ChipScope Core Inserter Project File Version 3.0
#Sat Apr 05 05:57:46 JST 2008
Project.device.designInputFile=H\:\\HDL\\FndtnISEWork\\Spartan3E_starter_kit\\test\\DDR_burst_test_verilog\\DDRtest_synth101i\\DDRtest_cs.ngc
Project.device.designOutputFile=H\:\\HDL\\FndtnISEWork\\Spartan3E_starter_kit\\test\\DDR_burst_test_verilog\\DDRtest_synth101i\\DDRtest_cs.ngc
Project.device.deviceFamily=13
Project.device.enableRPMs=true
Project.device.outputDirectory=H\:\\HDL\\FndtnISEWork\\Spartan3E_starter_kit\\test\\DDR_burst_test_verilog\\DDRtest_synth101i\\_ngo


:や\はエスケープ・キャラクタ?の\ をつけるような感じだ。これで自分の .ngc や _ngo の位置を書き換えれば、私は大丈夫だったが保障はできない。
そうでなければ、私がChipscopeに入れた信号名は、全部ここに書いてある。
データに入れた信号は下のように書くようだ。

Project.unit<0>.dataChannel<0>=read_error
Project.unit<0>.dataChannel<10>=ddr_sdram_cont_inst/rddata_fifo_inst/out_data<6>


ソート順か?データ<0>の次がデータ<10>になっている。
トリガーは下のようになっている。

Project.unit<0>.triggerChannel<0><0>=read_error
Project.unit<0>.triggerChannel<0><1>=ddr_sdram_cont_inst/controller_inst/rasb_node_1d


下の写真がテストを行っているところだ。LEDのLD0がテストが正常、LD1がテストがエラーを示している。さらにBTN Southを押すとリセットがかかる。
SPA3_ST_KIT_080405.jpg


わかっているかもしれないが、最後にもう1つChipscopeの使い方。
Chipscope_tutorial_50_080405.png

ピンクの四角で囲んだ三角をクリックすると、波形キャプチャスタート、緑の四角で囲んだ黒四角を押すとストップ。青四角で囲んだ"T!"をクリックするとフリーランしてトリガがかからなくても波形を表示する。つまり、トリガ条件に合わなくてトリガがからなくても"T!"ボタンをクリックすると波形を見ることができる。

Spartan3E Starter Kitをもっている方は、よろしければChipscopeを試してみて、テストしている間、LEDが正常を示していたか、それともエラー表示になったかをコメントで教えてください。
最後にChipscopeはここからダウンロードできます。
  1. 2008年04月04日 21:43 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

ISE10.1iのChipscope Proチュートリアル3 (Verilog版DDR SDRAMコントローラのテスト回路)

ISE10.1iのChipscope Proチュートリアル2 (Verilog版DDR SDRAMコントローラのテスト回路)の続き。

ChipScope Core Inserter を終了してISEに戻ったところから。
ISEに戻ったらSource ペインでtop (DDRtest.v) をもう一度選択して、Porcesses ペインのGenerate Programming File をダブルクリックして、.bitファイルを作成する。
Chipscope_tutorial_22_080330.png

終了したら、その下のAnalyze Design Using Chipscope をダブルクリックして、Chipscpe Analyzerを起動する。
Chipscope_tutorial_23_080402.png

Chipscpe Analyzerが起動する。

なお、ここまでにSpartan3E Starter Kitを準備して、電源を入れ、USBケーブルを接続しておくこと。
Chipscope_tutorial_24_080402.png

ピンクの四角で囲ったアイコンをクリックすると、ケーブルをサーチして初期化してくれる。
Chipscope pro Analyzer のダイアログが開く。Spartan3E Starter Kit だと XC2S500E, XCF04S, XC2C64A の3つのデバイスが見つかる。
Chipscope_tutorial_25_080402.png

OK ボタンをクリックする。
今度はbitファイルをSpartan3Eにコンフィギュレーションしよう。
DeviceメニューのDEV:0 MyDevice0 (XC3S500E)... -> Configure... を選択する。
Chipscope_tutorial_26_080402.png

Chipscope pro Analyzer [new project] のダイアログが開く。ここではコンフィギュレーションするbitファイルを選択するためにSelect New File ボタンをクリックしよう。
Chipscope_tutorial_27_080402.png

ファイルを選択するダイアログが開く。
Chipscope_tutorial_28_080402.png

ddrtest.bit を選択して、開くをクリックする。
Chipscope pro Analyzer [new project] のダイアログに戻る。今度はFile: のところに ddrtese.bit が入っていると思う。
Chipscope_tutorial_29_080402.png

OK ボタンをクリックする。
ddrtest.bit がFPGAにダウンロードされて、Waveformペインが開く。信号名はまだDataPort[?]で入っていない。今度はこの信号名を.cdc ファイルからロードしよう。
Chipscope_tutorial_30_080402.png

Fileメニュー -> Import... を選択する。
Chipscope_tutorial_31_080402.png

Signal Import ダイアログが開く。
Chipscope_tutorial_32_080402.png

Select New File ボタンをクリックする。
Chipscope Pro Inserter の時に入力したファイル名、DDRtext_cs_test.cdc を選択する。
Chipscope_tutorial_33_080402.png

”開く”ボタンをクリックする。
Signal Import ダイアログのFile: のところにDDRtext_cs_test.cdc が入っていると思う。
Chipscope_tutorial_35_080402.png

OK ボタンをクリックする。
そうするとWaveform ペインにファイル名が入る。
Chipscope_tutorial_36_080402.png

このままでは見にくいので、データバスはまとめようと思う。
まずは、まえの図ですでに展開してしまったが、前の前の図を見ると左下のSignalsペインにある Data Port を展開しよう。Data Port の左側の丸に横棒のアイコンをクリックして、Data Portを展開すると図のようになる。
左下の Signals ペインでout_data<0> ~ out_data<31>をすべて選択する。そこで右クリックし、メニューから Add to Bus -> New Bus を選択する。
Chipscope_tutorial_37_080402.png

そうすると、左下の Signals ペインの上にrddata_fifo_inst/out_data というバスができる。
Chipscope_tutorial_38_080402.png

すべてのデータをバスにしてから、Waveformペインの波形を一旦消去しよう。
Waveformペインで右クリックして、メニューを出し、Clear All を選択する。
Chipscope_tutorial_39_080402.png

そうするとWaveformペインがオールクリアされるので、左下のSignals から信号をWaveform ペインにドラックアンドドロップしていく。
Chipscope_tutorial_40_080402.png

すべてドラックアンドドロップし終えたところ。太字になっているのはバスの信号。バス信号はWaverform ペインの左端に丸に横棒の図形があるがこれをクリックすると各要素に展開する。
Chipscope_tutorial_41_080402.png

次に左上のProject ペインから Trigger Setup をダブルクリックして、Trigger Setup画面を出す。ここでトリガ条件を設定しよう。
一番上のMatchペインは、どの信号でトリガをかけるかを指定する。Xは無視なとなる。Functionが== なので、現在は read_error が1のときにトリガがかかる設定になっている。
次に一番下の Captureペインを設定しよう。ここではPosition を設定している。これは、トリガからここで設定したクロック前までキャプチャしたデータを残すという設定だ。今は1000になっているが、これはread_errorが出てから1000クロック前まで観測できることになる。エラーを観測するときには、エラーが出た後は関係がなくて、出る前にどのような条件でエラーが出たかが問題になるので、ここの値は大きい値になるはずである。
Chipscope_tutorial_42_080402.png

これで準備はOKなので、Capture をはじめよう。
ピンクで囲った三角アイコンをクリックするとCapture が始まり、トリガ条件が満足すると波形が表示される。
Chipscope_tutorial_43_080402.png

これが read_error が出たところの波形だ。
Chipscope_tutorial_44_080402.png

運良く read_error が出て観測することができた。
早速、トラブル・シュートを開始。DDR SDRAM本体ではなく、テスト回路のバグだということがわかり修正した。修正後、20分間放置しても read_error はでなくなった。

最後に今まで設定したバス信号やトリガ条件をプロジェクトにセーブしておこう。ここまま終了してはバスにする作業やトリガ条件を設定する作業をもう一度行う必要が出てしまう。
Fileメニュー -> Save Project As... を選択する。
Chipscope_tutorial_45_080402.png

Save Project As のダイアログが開くので、ファイル名を入れて、保存ボタンをクリックしよう。
Chipscope_tutorial_46_080402.png

これでプロジェクトがセーブできたので、次回からはプロジェクトをオープンすれば、今やった設定を再設定しなくてもすむ。

これでChipscopeのチュートリアルは終了とする。長い間見ていただいてありがとうございます。
ここで行ったサンプルのプロジェクトを後日ブログにアップするので、Spartan3E Starter Kitを持っている人はぜひChipscopeを動かしてみてほしい。その際に、read_error が出ないかどうかをレポートしてください。他のボードでも read_errorが出ないかどうかに興味がある。
Chipscopeはボードがないと試せないところが、ボードを持っていない方には残念だ。
  1. 2008年04月04日 05:33 |
  2. Chipscope
  3. | トラックバック:0
  4. | コメント:0

Xilinx社がVirtex-5 FXT プラットフォーム FPGA を発表

一昨日かなXilinxのサイトを見たらVirtex5 FXTが発表になっていた。
それによると、

・550MHz動作のPowerPC440プロセッサ、DMAコントローラ、クロスバスイッチ付
・6.5GbpsのRocketIO™ GTX トランシーバ、LXTやSXTと同様に PCI Express® エンドポイント ブロック (1/4/8 レーン)付
・550MHz DSP48E スライス

が搭載されているそうだ。
『 PowerPC440 と 6.5Gbps トランシーバ搭載 FPGA 』 日本語ウェブセミナもあったので、昨日ウェブセミナを視聴してみた。

最大、6.5GbpsのRocketIOは良いな。基板作成の難易度が半端じゃないかもしれないが、使えればだいぶスループットを稼げるのだろう。
とりあえず今の基板のFPGA回路の完成を急がないといけない。
  1. 2008年04月03日 05:35 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

ISE10.1iのChipscope Proチュートリアル2 (Verilog版DDR SDRAMコントローラのテスト回路)

ISE10.1iのChipscope Proチュートリアル1 (Verilog版DDR SDRAMコントローラのテスト回路)の続き。

次にウインドウに行く。
Chipscope_tutorial_7_080330.png

ここでは何も触らずに、Next> ボタンをクリック。
Trigger Parametersタブが選択されたウインドウが開く。ここではトリガ条件を設定する。
Chipscope_tutorial_8_080330.png

いろいろ設定するところはあるのだが、Trigger Width がトリガビットの数を決めるので4ビットにした。今回はトリガポイントを移動して、何回目のエラーポイントを見たいという要求が合ったので、Counter Width を4とした。これはAnalyzerでそのカウンタの幅だけ遅延したトリガポイントを見ることができる。これで設定は終了したので、Next> ボタンをクリック。
次はCapture Parmeters を設定するウインドウが開く。
Chipscope_tutorial_9_080330.png

最初は Data Same As Trigger にチェックが入っていると思う。これだとデータとトリガは同じビットということになるので、データを指定する必要がない。つまり前に Trigger Width を4ビットとしたら、データ幅も4ビットとなる。見るデータが少なければそれでも良いが、今回はデータを32本も見たいこともあり、 Data Same As Trigger のチェックをはずしてデータとトリガを別の信号とした。
Data Width が設定できるようになるので、適当に大きい数 (100) を設定。これは後で最適な値にあわせる。そういえば、ピンクの四角で囲むのを忘れてしまったが、Data Depth を1024 Samplesに設定する。これは波形を保存しておくBlock RAMの使用量を見ながらお好みで。。。
次に、Net Connections ウインドウが開く。
Chipscope_tutorial_10_080330.png

Modify Connections ボタンをクリックして、どの信号をトリガやデータとして登録するかを決める。
Select Net ダイアログが開く。まずは動作クロックを選ぶ。最初は Net Selections ペインの Clock Signals タブが選択されていると思う。
Chipscope_tutorial_11_080330.png

Pattern コンボボックスに *clk* と入力すると、clkと名前のついた信号名が下に表示される。その中のclk_out を選択して、これをChipscopeのクロックとするために Make Connections ボタンをクリックする。これで Net Selections ペインの Clock Signals に clk_out が入ってChipscopeの動作クロックを指定することができた。
次にTrigger Signals を指定しよう。Trigger Signals タブをクリックする。
Chipscope_tutorial_12_080330.png

前に Trigger Width を4ビットとしたので、CH:0からCH:3までの指定ができる。4ビット分のトリガ信号を指定していく。ここでは最初に read_error 信号を 動作クロックを選ぶのと同様に検索し選択して、Make Connections ボタンをクリックしている。
ここで注意としては、見たい信号はなるべくFFにしておくことだ。組み合わせ回路だと論理合成時に他の信号と統合されてなくなってしまうことがある。というか多い。FFにしておけばインスタンスはあるので安心だ。
同様にして、Trigger Signals の全チャネルを指定していく。
Chipscope_tutorial_13_080330.png

次は Data Signals を指定する。 Data Signals タブをクリックする。
Chipscope_tutorial_14_080330.png

ここで Trigger Signals に指定した信号を入れたい。Pattern: のコンボボックスの右の下向き三角をクリックすると以前に入れたフィルタ情報の履歴があるので、*read_error* を選択して信号名をその下に表示して、選択、Make Connections ボタンで CH:0 へ接続する。
同様にデータ信号を一網打尽に検索、選択してMake Connections ボタンで CH へ接続する。
Chipscope_tutorial_15_080330.png

ここで一番苦労するのは、信号名が統一されてしまうことだ。XSTは階層をフラットにする指定にしている。階層を残す指定にすれば、右上のStructure/Nets に階層が表示され、信号名もある程度残っていて便利なのだが、インプリメントの品質に問題が出る場合や、論理合成がエラーになるときがあるので、特に動作スピードの必要なDDR SDRAMコントローラでは使わないようにしている。
下の画面で rddata_fifo_inst/outff_flag を選んでいるが、これは出力データのイネーブル信号である rddata_valid の成れの果て?である。このように、階層トップのwire信号はほとんどないので、下の階層のファイルの下の信号名を見つけて来る必要がある。
これが面倒くさい。もうちょっと信号を入れたいがもういいか?と思ってしまう原因だ。
Chipscope_tutorial_16_080330.png

後はexpected_read_data を入れて、とりあえずこれで終了。
Chipscope_tutorial_17_080330.png

まだ赤い未接続の信号が残っているが、OK ボタンをクリック。
ChipScope Pro Core Inserter ウインドウに戻る。Net Connections ペインの DATA PORT の項はまだ未接続の信号があるので赤くなっている。
Chipscope_tutorial_18_080330.png

Capture Parameters タブをクリックする。
Chipscope_tutorial_19_080330.png

Capture Settings の Data Width: を先ほどつないだ信号のみ、つまり赤い未接続の信号がないように69に変更する。
Net Connections タブをクリックして Net Connections を見ると、Net Connections ペインの DATA PORT の項は未接続の信号がなくなったので、黒くなっている。ちなみにこの丸に横棒のところをクリックすると、各接続信号が見える。
Chipscope_tutorial_20_080330.png

Return to Project Navigator ボタンをクリックする。
Save Project ダイアログが出るので、はい(Y)ボタンをクリックするとISEに戻る。
Chipscope_tutorial_21_080330.png


今日はとりあえずここまで。

ISE10.1iのChipscope Proチュートリアル3 (Verilog版DDR SDRAMコントローラのテスト回路)に続く。
  1. 2008年04月01日 18:52 |
  2. Chipscope
  3. | トラックバック:0
  4. | コメント:0