Spartan-3A Starter Kit専用のDDR2-SDRAMコントローラをMIGで生成するとTCLエラーになってしまった。(ISE12.1とISE11.5のVerilogプロジェクト)
そのまま、プロジェクトのプロパティをVHDLにして、新しいMIGコアをCoregenで生成しようとしたら、coregen_lockファイルが見つかったというダイアログが出てきた。
これを回避するには、プロジェクトフォルダの下のipcore_dirフォルダにcoregen_lockというファイルがあるので、それを削除してから、MIGのIPを生成すれば良い。
でも、VHDLプロジェクトでもTCLエラーで生成出来なかった。
(2010/06/01:追記) CoregenでMIGを生成したらできました。
2010年05月31日 17:20 |
Core Generator
| トラックバック:0
| コメント:0
昨日、高校時代の友人と自宅でバーベキューをしていました。その最中に注文してあった小学校6年の娘のノートパソコンが届きました。機種は
レノボのLenovo G560 06792UJ です。液晶15.6インチ、CPUはCore i5 430M 2.26GHz(512KB)、メモリ4GB、HDD320GBの娘にはもったいないマシンです。価格は60,980円でした。
OSはWindows 7 64bit版でした。バーベキューが終わってからプリンタなどをインストールしたのですが、プリンタのインストールに手間がかかってしまいました。使用プリンタはキャノンのMP980で、無線LANでつながっています。
最初にキャノンのサイトに行って、Windows 7 64bit版のドライバを落としてきたのですが、プリンタスプーラのサービスが起動していなくて失敗。手動で起動になっていたので、自動で起動に修正しました。
それで、インストーラーは進み始めました。しかし、プリンタを検索して、見つけられるのですが、その後で、”新規ポートの作成に失敗しました”というダイアログが出て、何回やっても失敗します。
それでネットで検索したら、
Prosta takさんの”2009.01.17 キャノンPM980 「新規ポートの作成に失敗しました」” がヒットしました。
それによると、ポートを削除するためのアンインストーラがCDに収録されているそうです。付属CD ROMのwin\LAN\Japanese\CNMNPU.exe を起動してから、インストーラーを再度起動してインストールしたら、プリンタがインストールできました。
その後は、絵を書きたいとのことで
ペンタブを買ってあった ので、インストールしました。これはWindows 7 64bit版対応で素直にインストールできました。このペンタブ、2千円台で買ったのですが、なかなか良さそうです。自分でも買おうかな?と思いました。お絵かきソフトはPixiaをインストールしました。
2010年05月31日 05:53 |
パソコン関連
| トラックバック:0
| コメント:2
今日は、FPGA-CAFEの開店日なので行ってきました。
かなりの人が来ていましたね。Simさんにもあすぴよパパさんにもお会いしました。
チップマウンタが動いていました。1005かな?1608?のチップ抵抗も綺麗にマウントしていました。
そのうちにリフロー炉も購入されるそうです。基板切削機もあるので、基板の作製から実装、ハンダ付けまでOKですね。
ウダーの演奏もありました。
色々な方とお話ができて楽しかったです。お話して頂いた方、ありがとうございました。また、お邪魔します。
そういえばFPGA-CAFEでONYX基板を見てきました。芸術的(実装密度が凄い)にチップが配置された基板でした。発売されたら欲しいですね。写真を取ってくるを忘れました。裏にもパスコン等がパラパラついています。
2010年05月29日 19:27 |
その他のFPGAの話題
| トラックバック:0
| コメント:2
明日は、
FPGA-CAFE が茨城県つくば市にオープンします。
明日は家具作りサークルもあるので、午後3時頃、FPGA-CAFEに行こうと思っています。よろしくお願いします。作りかけの引き出し家具を車に乗せていきます。家具と電子工作の融合…などと考えています。無垢板の家具に、電子工作を見栄え良く入れてみたいですね。。。例えば、木目の綺麗なタモのオイルフィニッシュ仕上げのケースを、ニキシー管時計のケースとか良さそうです。
2010年05月28日 12:24 |
その他のFPGAの話題
| トラックバック:0
| コメント:2
Spartan-6のPCIe Endpoint Block IPのサンプル・デザイン、PIOデザインの勉強をする。これは、下の図で言うと、Spartan-6のPCIe Endpoint Block IPの下の部分で、サンプル・デザインの時のメモリやIOの実装だ。実際には4つのBRAMが載っていて、それぞれ違うアドレスを持っている。
Root PortからのTLPを受信したEnd Pointは、どのBase Address Register (BAR) にヒットしたかをtrn_rbar_hit_n[6:0]でユーザー回路に知らせるようだ。下に、trn_rbar_hit_n[6:0]の説明をユーザーズガイドから引用する。
Receive BAR Hit: Active low. Indicates BAR(s) targeted by the current receive transaction. Asserted throughout the packet, from trn_rsof_n to trn_reof_n. • trn_rbar_hit_n[0] => BAR0 • trn_rbar_hit_n[1] => BAR1 • trn_rbar_hit_n[2] => BAR2 • trn_rbar_hit_n[3] => BAR3 • trn_rbar_hit_n[4] => BAR4 • trn_rbar_hit_n[5] => BAR5 • trn_rbar_hit_n[6] => Expansion ROM Address. Note that if two BARs are configured into a single 64-bit address, both corresponding trn_rbar_hit_n bits are asserted.
#そういえば、End Pointとユーザー回路のインターフェースを真面目に勉強するのを忘れていた。これは後で勉強することにする。
4つのBRAMがどのBARに割り当てられているかを示すテーブルがユーザーズガイド129ページからに載っている。Table 9-1: TLP Traffic Typesを下に引用する。
上図のようになるようだが、疑問が2つ。End Point IPは、
前回、1つのBARで、1MBytesに設定したはず なのだが、それは無視されるのだろうか?サンプル・デザインはこのコンフィギュレーションになるの?
ep_mem0はIOで、trn_rbar_hit_n[6:0]はDefaultと書いてあるが、PCIeはそうなるのかな?PCIでは、IOもBARにアドレスを登録するんじゃなかったか?
もう少し、PCIeの勉強が必要なようだ。
ソースを読んでみたところ、64ビット幅アドレスは無効になっていた。trn_rbar_hit_n[0] => BAR0の32ビット幅アドレスは有効でBRAMがアサインされていた。trn_rbar_hit_n[6] => Expansion ROM Addressも有効でBRAMがアサインされていた。それ以外のアクセスがあったときは、デフォルトのIO領域のBRAMがアクセスされていた。
2010年05月28日 05:46 |
PCI Express
| トラックバック:0
| コメント:0
25日、26日で大崎のXilinx社で行われた、
Spartan-6ファミリ デザイン セミナ に行ってきました。前回の”
Virtex-6 ファミリ デザイン セミナに行ってきた ”に続いて無料なので、Spartan-6も勉強してきました。
”
Spartan-6のお勉強5(SelectIOリソース) ”でリングオシレータ等で構成されていて疑問だったIODELAY2もだいたい使い方はわかりました。そのうちにブログの方でも取り上げてみようと思っています。
成果は、やはりSERDESとIOBUF2の使い方のサンプルでしょうか?ISERDESを使って1対8のシリパラ変換すると受信クロックを8分周したクロックを作る必要があるんですが、それをIOBUF2で分周して作るという構成になっています。
XAPP1064 Source-Synchronous Serialization andDeserialization (up to 1050 Mb/s) にも情報があるそうです。リファレンスデザインもダウンロードできるとのことでした。Spartan-6はBUFIO2やBUFPLLの使い方が難しそうです。分からない時には積極的にCORE Generatorを使うのも手だと思います。それでどう使っているかわかったら、プリミティブで書いても良いでしょう。
メモリコントローラの演習では、SP605を使って実機演習をしました。やはり、実機を使うと良いですね。ここでは、プロジェクトの中にILAのコアが入っていて、CORE GeneratorでILAやVIOのコアを生成できることを初めて知りました。今まではコアインサーターばかりだったので、知りませんでした。VIOもChipScopeから回路を制御するのに便利そうです。スイッチがなくても設定ができるのは便利ですね。この辺の知見があっただけでも行ってよかったです。いつも行くと何かしら知らなかったことがあるので、セミナに行くと良い刺激になります。
Virtex-6の時は、演習はすべてVHDLでやったのですが、Spartan-6はすべてVerilogでやりました。
Virtex-6とSpartan-6セミナ両方でお世話になった講師の方、ありがとうございました。なお、両セミナは9月まで無料になったそうなので、受けてみてはいかがでしょうか?
2010年05月27日 05:03 |
その他のFPGAの話題
| トラックバック:0
| コメント:2
”
Spartan-6 FPGA PCI Express 用インテグレイテッド エンドポイント ブロック ユーザー ガイド (英語版) ”(UG654)でSpartan-6 FPGA PCI Express用インテグレイテッド エンドポイント ブロック(PCIe EP)を勉強中。
MCBもセレクトIOもそうだが、新しいFPGAが出るといろいろ勉強する必要があることがたくさん増える。(今日もSpartan-6ファミリセミナにXilinx社(大崎)に行ってきます)特にSpartan-6はハードIPのMCBやPCIe EPがあるので、読むマニュアルが沢山ある。Spartan-6 FPGA PCI Express 用インテグレイテッド エンドポイント ブロック ユーザー ガイド (英語版)は、234ページもあって理解するのが大変だ。マニュアルが多いということは、ユーザーに伝えなくてはいけないことが多いということだと思う。PCIe EPはこの前からシミュレーションをしているが、シミュレーションをするには、Root Port側のシミュレーション・モデルが必要で、それをハードIPのEnd Pointのシミュレーション・モデルと接続してシミュレーションを行う必要がある。
Example DesignでのRoot PortとEnd Point、それにPIOと呼ばれているProgrammed Input Output Exampel Designの関連を図示した、UG654の40ページのFigure 4-1: Simulation Example Design Block Diagramを下図に引用する。
上図の様に、上の四角で囲まれた部分がRoot Portのシミュレーション・モデルで、それは、右の四角のTest Programに従って動作する。そのTest Programが”
SP605でPCIe Coreを生成してみる3(PCIeユーザーズガイドを調べる) ”で書いた、sample_smoke_test0, sample_smoke_test1, pio_writeReadBack_test0...だ。デフォルトでは、sample_smoke_test0が実行されるが、コマンドラインからISimを起動するときに、-testplusarg TESTNAME=sample_smoke_test1 をコマンドラインに追加すれば、sample_smoke_test1が実行される。pio_writeReadBack_test0...などのTest Programは、ファイルがないので実行できない。
Test Programに使用されるTaskもUG654の151ページからのRoot Port Model TPI Task Listに記述されている。
なお、私のブログで、”
SP605でPCIe Coreを生成してみる2(シミュレーション) ”はEnd Pointの波形を見ていて、”
Spartan-6のPCIe Endpoint Block IPの勉強1(シミュレーションでRoot Portの動作を確認) ”と”
Spartan-6のPCIe Endpoint Block IPの勉強2(シミュレーションでRoot Portの動作を確認2) ”はRoot Portの波形と動作を見ている。
さて、このようにEnd PointのテストはRoot PortのTest Programで行うようだ。pio_writeReadBack_test0...などのTest Programは、ファイルがないので実行できないと書いたが、pio_writeReadBack_test0は、UG654の150ページにソースが載っているので、PIOの構造をもう少し調べてから、ソースを打ち込んで試してみたいと思う。
Root Port Model TPI Taskを勉強すれば、自分でテストプログラムも書けそうだ。
2010年05月26日 05:26 |
PCI Express
| トラックバック:0
| コメント:0
”
Spartan-6のPCIe Endpoint Block IPの勉強1(シミュレーションでRoot Portの動作を確認) ”の続き。
前回、Root Port(RP)からEnd Point(EP, Spartan-6のPCIeハードIP) に0番レジスタにコンフィギュレーション・リード・リクエスト(タイプ0)を送った。今回はその応答パケット(コンプリーション)を見てみることにする。
下の図に、コンフィギュレーション・リード・リクエスト(タイプ0)に対するコンプリーションのパケットを示す。(たぶん)
今回も、前回同様に、たぶんtrn_rsof_nが受信パケットスタートで、trn_reof_nが受信パケットエンド。
trn_rsof_n、trn_reof_nが0にアサートされているどちらのクロックサイクルも、trn_rrem_nがアサートされている(0)ので、4DW長(4*32bit)だ。その時のtrn_rd[63:0]は、
4a00000100000004 、
01a00000ee100700 だった。
この、2つの受信したTLPを解析してみよう。
最初のバイト、バイト0は0x4aだ。このバイトの6,5番目のビットがTLPのフォーマット(Fmt)を表す。値は
10 なので、3DWでデータありを表す。ビット4~0がTLPの種類(Type)を表す。Fmtが
10 でTypeが0
1010 なので、コンプリーション(データあり)を示す。これは、前回のコンフィギュレーション・リード・リクエスト(タイプ0)に対するコンプリーションのパケットとなる。
バイト1は、ビット6~4がトラフィック・クラス(TC)を表す。TCは
000 。後はリザーブ。
バイト2のビット7がECRCの有無、
0 なので無し。ビット6がエラー・フォワーディングかな?
0 なので無し?ビット5~4は属性。値は
00 。これについてはPCIeの規格書を見ろとのことだった。.コンプリーションの場合の属性の値は書いていなかった
(要調査) 。66ページの図3.13参照。(2010/05/24:追加)
PCI Express System Architecture によると、ビット5はRelaxed Ordering Bitで、ビット4は、No Snoop Bitだそうだ。
バイト2のビット1~0とバイト3の全部がデータのペイロード長。
0000000001 なので、データは1DW。
次のバイト4とバイト5はコンプリータID。
0x0000 。これは、End Point(EP, Spartan-6のPCIeハードIP)のID。
バイト6のビット7~5は、コンプリーション・ステータス、
000 なので、成功。ビット4はバイト・カウント・モデファイ。これはリクエストで要求したデータ長を変更してあると1になり、そのままだと0になると思う。値までは本に書いてなかった。値は0なので、データ長はリクエストで要求したまま。
バイト6のビット3~0とバイト7はバイト・カウント。値は
004 。DW=4バイトなので、あっている。
次のフレームの
01a00000ee100700 を解析してみよう。
最初のバイト(バイト8)とバイト9は、リクエスタID。値は
0x01a0 。これは、コンフィギュレーション・リード・リクエスト(タイプ0)のリクエスタIDと同一。
バイト10はタグ。値は0x00。これもコンフィギュレーション・リード・リクエスト(タイプ0)タグと同一。
バイト11のビット6~0は下位アドレス。値は0
x00。 次のバイト12~15がペイロードでリード・データ。値は
0xee100700 。本によるとデータのペイロードのバイト列は0バイトから始まると書いてある。つまり逆順になっているので、今まで通りに書くと、
0x000710EE となる。
PCIコンフィギュレーション空間の0番地から32ビットだと、デバイスIDが16ビット、ベンダIDが16ビットとなっている。RPのコンフィギュレーション・リード・リクエスト(タイプ0)に対するEPのコンプリーションのペイロードのリード・データから、デバイスIDが
0x0007、 ベンダIDが
0x10EE であることがわかった。Xilinx社のベンダIDは0x10EEだ。
2010年05月24日 05:23 |
PCI Express
| トラックバック:0
| コメント:0
今日は、Make Tokyo Meetiong 05に行ってきました。
開場の11時より前に着いてしまったので体育館の前で待っていました。開場と同時くらいに体育館に入りました。
まだ人は少なかったです。最初にfenrirさんのねこカメラを見てきました。AlteraのMAX2とSDRAM、microSDコネクタ、CMOSカメラが実装されていました。基板小さい。。。
ねこにつけて、どのような行動をしているか調査するそうです。
面白そうです。基板を販売するんでしたら欲しいです。パソコンでOpenCVを使用してのねこ顔認識も見せて頂きました。
ニコ技のマッチ棒ロケットを見てきました。本も100円で買いました。中庭で飛ばしてみましたが、結構飛びます。70cm位の高さの台から、1.5mくらい飛びました。これ自由研究にどうかな?と思います。
FPGAカフェのブースでは、いろいろ売っていました。特に木のトランクが気に入りました。素材は杉でブラスト加工してあるそうです。年輪が浮き出ていました。黒いのは人工漆塗装だそうです。高い塗料ですね。一番大きいトランクは5万円でした。自分で作りたいです。次の目標にします。
あすぴよパパさんのCDドライブも良かったです。任意にトレイが出てきます。
他に色々ありました。面白かったです。
娘のお土産にビスマスの結晶を買ってきました。
2010年05月22日 20:55 |
その他のFPGAの話題
| トラックバック:0
| コメント:2
いろいろカテゴリーが分散してしまうが、”
LogiCORE? IP Spartan-6 FPGA Integrated Endpoint Block v1.1 for PCI ExpressR User Guide ”を参考に、Programmed Input Output(PIO) Example Designのシミュレーションについて勉強して行きたいと思う。
”
SP605でPCIe Coreを生成してみる3(PCIeユーザーズガイドを調べる) ”のsample_smoke_test1で、ISimのInstance and Process NameペインからRP(Root Port)を選択して、Object Nameに表示された信号名を波形ウインドウにドラック アンド ドロップし、シミュレーションしてみた。
その際に、波形にトランザクションパケットが見えたので、下に表示する。下のトランザクションパケットはRoot PortからEnd Pointへの送信のトランザクションパケットのようだ。(Root Portはシミュレーション用の記述のみです。End PointがFPGAに実装するハードIPを指します)
Root Portの信号の説明は、”
Spartan-6 FPGA PCI Express 用インテグレイテッド エンドポイント ブロック ユーザー ガイド (英語版) ”の177ページからに書いてある信号名と一致する。
trn_td[63:0]はトランザクション層の送信データ。
trn_trem_nは、trn_td[63:0]のどこにデータが載っているかを示す。( 0 = packet data on all of trn_td[63:0]、 1 = packet data only on trn_td[63:32])
trn_sof_nは送信フレームの始まりを表し、trn_eof_nは送信フレームの終わりを表す。
最初の送信フレームの値は、
0400000101a0000f で、次の送信フレームの値が、
01a0000000000000 だ。最初の送信フレームでは、trn_sof_n=0 となっていて、送信フレームの始まりを表している。
次の送信フレームでは、trn_eof_n=0 となっていて、送信フレームの終了を表している。この送信フレームでは、trn_trem_nも1になっていて、td[63:32]にのみデータが載っていることが分かる。
さて、このトランザクション層の送信フレームの値を解析してみることにする。
PCI Express 入門語講座 によると、トランザクション層パケット(TLP)のヘッダには、3DW(DWは32ビット)と4DWの物があるそうだ。このTLPは、2番目の送信フレームで終了していて、データ長が32ビット長なので、3DWのTLPヘッダだけということが言える。
最初のバイト、バイト0は
0x04 となっている。このバイトの6,5番目のビットがTLPのフォーマット(Fmt)を表す。
00 なので、3DWデータ無しを表す。ビット4~0がTLPの種類(Type)を表す。Fmtが
00 、Typeが
00100 なので、コンフィギュレーション・リード・リクエスト(タイプ0)という事になる。
バイト1は、ビット6~4がトラフィック・クラス(TC)を表す。TCは
000 。後はリザーブ。
バイト2のビット7がECRCの有無、
0 なので無し。ビット6がエラー・フォワーディングかな?
0 なので無し?ビット5~4は属性。値は
00 。これについてはPCIeの規格書を見ろとのことだったが、コンフィギュレーション・リクエストの場合の属性は
00 だそうだ。64ページの図3.11参照。
バイト2のビット1~0とバイト3の全部がデータのペイロード長。
0000000001 なので、データは1DW。
次のバイト4とバイト5はリクエスタID。
0x01a0 。
バイト6がタグ。これは
0x00 。
バイト7のビット7~4が最後のDWのバイトイネーブル。これは
0000 に決まり。ビット3~0が最初のDWのバイトイネーブル。本には記載がなかったがアクティブハイだろうか?
1111 。最初と最後のバイトイネーブルをパケットに含めることで、バイト単位(のアドレス)でバースト転送をすることができる。でもPCIバスの様に個別に、常時バイトイネーブルが付くわけではないので、1バイト置きに書くということは出来ない。
次のフレームの
0x01a00000 を解析してみる。
最初のバイト(バイト8)は、バス番号、
0x01 。
バイト9のビット7~3はデバイス番号、
10100 。ビット2~0は機能番号
000 。
バイト10のビット3~0は拡張レジスタ番号、
0000 。
バイト11のビット7~2はレジスタ番号、
000000 。つまり0番レジスタ。
まとめると、このTLPはバス番号01、デバイス番号10100、機能番号000(これがPCIeのエンド・ポイントのコンフィギュレーション時のアドレスのハズ)の0番レジスタへのコンフィギュレーション・リード・リクエスト(タイプ0)。Root PortのリクエスタIDは0x01a0。
結構、解析が面倒だった。次は、コンフィギュレーション・リード・リクエスト(タイプ0)にエンド・ポイント(Spartan-6のPCIeエンド・ポイントのハードIP)が応答して、返した値を調べてみる。
2010年05月22日 06:10 |
PCI Express
| トラックバック:0
| コメント:3
Windows7 64ビット版でのISE12.1 WebPACKのインストールをしていたが、ライセンスがもらえなくて苦労してしまった。(なお、ISE12.1はWindows7に正式対応していないので、自己責任でお願いします)
昨日、記事に書いた
無償 ISE WebPACK のインストール方法 を見ながらインストールしていたのだが、10ページの13) で Product Download and Licensing のページが開いて、登録情報を確認して、14)の登録完了の画面は開くのだが、ブラウザ(IE8)の下にエラーが表示されてライセンスが取れない。いくらやってもライセンスが取れなかった。
検索しても日本語のサイトは情報がなかったが、
Xilinx User Community Forums の
WebPack license NOGO に情報があった。それによると、Xilinxのサイトにはバグがあって、他の方法で取る必要があるとのことだった。(XilinxのサイトにIDを登録してある必要があります)
Xilinxのダウンロードサイト で、
ライセンスファイルの取得のリンク をクリックして、登録情報を確認すると、Product LicensingのWebページが表示される。
その画面で、WebPACK Licenseをチェックして、Generate Node-Locked Licenseボタンをクリックするとライセンスがe-mailで送られてきた。そのライセンスをXilinx License Configuration Managerでコピーしたら、無事にISE12.1 WebPACKが動作した。良かった。。。
2010年05月21日 10:56 |
Xilinx ISEについて
| トラックバック:0
| コメント:0
”
SP605でPCIe Coreを生成してみる2(シミュレーション) ”の続き。
ISimのログには、Running default test {sample_smoke_test0}......と表示されていた。”
Spartan-6 FPGA PCI Express 用インテグレイテッド エンドポイント ブロック ユーザー ガイド (英語版) ”のRoot Port Model Test BenchのTest Selection (114ページ) には、sample_smoke_test0, sample_smoke_test1, pio_writeReadBack_test0, pio_testByteEnables_test0 ,pio_memTestDataBus...のテストが並んでいる。そのうち、前回、デフォルトでは、sample_smoke_test0を行ったわけだ。
sample_smoke_test0は、 PCI Type 0 Configuration Read TLPを発行して、completion TLPを待つそうだ。これはRoot Port Model側の動作になる。Readを要求するのは、Device/Vendor ID valueだ。
sample_smoke_test0のテストベンチが記述されているのは、s6_pcie_v1_3\simulation\testsフォルダのtests.vだった。ここには、sample_smoke_test1も記述されている。sample_smoke_test1はsample_smoke_test0をforkを使って、2スレッドにしたものだそうだ。
sample_smoke_test0とsample_smoke_test1をどうやって切り替えるかだが、$value$plusargsを使って切り替えている。(これ以前、たっくさんにお聞きしたような?Veritakのテストで使われていたと思った)
$value$plusargsを使用すると、ISimを起動するコマンドラインから、テストベンチを指定できる。つまり、リコンパイルしないでテストベンチを切り替えることができる。
s6_pcie_v1_3\simulation\testsフォルダのtests.vの関連する記述を一部下に引用する。
initial begin if ($value$plusargs("TESTNAME=%s", testname)) $display("Running test {%0s}......", testname); else begin testname = "sample_smoke_test0"; $display("Running default test {%0s}......", testname); end
TESTNAME=で指定されたテストベンチを実行し、TESTNAME=がなければ、sample_smoke_test0を実行して、そうでなければ、TESTNAME=で指定されたテストベンチを実行するわけだ。下のように記述すると、GUIモードで、sample_smoke_test1を実行する。
demo_tb.exe -gui -testplusarg TESTNAME=sample_smoke_test1
下に実行した時のログを示す。
Simulator is doing circuit initialization process. Running test {sample_smoke_test1}...... [ 0] : System Reset Asserted... Finished circuit initialization process. [ 399600000] : System Reset De-asserted... [ 960680600] : Transaction Reset Is De-asserted... board.EP.s6_pcie_v1_3_i.PCIE_A1.B_PCIE_A1_INST.SHIP.SHELL.BUT.pcie_pcie_inv.pcie_pcie.pcie_core.xil_pcie_sa_mod18.xil_pcie_sa_mod19.com.tlm.u_tlm_rx.xil_pcie_sa_mod75 checking [ 1894626600] : Transaction Link Is Up... [ 1895816600] : TSK_PARSE_FRAME on Transmit [ 2233396600] : TSK_PARSE_FRAME on Receive [ 2295792600] : Check Device/Vendor ID - PASSED [ 2296992600] : TSK_PARSE_FRAME on Transmit [ 2559776600] : TSK_PARSE_FRAME on Receive [ 2696968600] : Check CMPS ID - PASSED [ 2696968600] : SYSTEM CHECK PASSED [ 2696968600] : Reading from PCI/PCI-Express Configuration Register 0x00 [ 2696968600] : Expected Device/Vendor ID = 000710ee [ 2698168600] : TSK_PARSE_FRAME on Transmit [ 2962954600] : TSK_PARSE_FRAME on Receive [ 2962954600] : Received CPLD --- Tag 0x00 [ 2962954600] : TEST PASSED --- Finished transmission of PCI-Express TLPs [ 2963354800] : Reading Cfg Addr [0x00000001] [ 2966951800] : Writing Cfg Addr [0x00000001] [ 2970552600] : Reading Cfg Addr [0x00000001] Stopped at time : 29734527 ps : File "H:/HDL/FndtnISEWork/Spartan6/sp605_pcie_ISE121/s6_pcie_v1_3/simulation/tests/tests.v" Line 205
この使い方は、
ISim シミュレーション実行ファイル コマンドのオプション に書いてあった。
しかし、上に書いたpio_writeReadBack_test0, pio_testByteEnables_test0 ,pio_memTestDataBus...のテスト項目はtests.vにはなかった。どこにあるんだろうか?
もしかして、WebPACKだからなのか?フルバージョンで確かめてみることにする。
2010年05月20日 05:51 |
Spartan-6 FPGA SP605 評価キット
| トラックバック:0
| コメント:0
ISE12.1の日本語版資料アップデートが
Xilinxのダウンロードサイト にあった。早速ダウンロードして、
リリースノート の通りにアップデートした。
日本語ヘルプが使えるようになった。読みやすくなって良かった。
2010年05月19日 04:52 |
Xilinx ISEについて
| トラックバック:0
| コメント:0
PCIeは少し勉強してからということで、SP605のMCBデザインのサンプル
rdf0029 を試してみた。
やり方は”
SP605 MIG デザインの生成 (XTP060) ”の29ページ以降を見ながら行った。
rdf0029.zipを解凍して、XTP060の30ページ目を見ながら、コマンドプロンプトからise_flow.batを起動しようとしたらファイルがない。フォルダを調べてみると、sp605_prebuilt_example_design\mig_32\example_design\parにあった。ここでise_flow.batを起動すると、コマンドラインでインプリメントを行っていた。
インプリメントが終了したら、SP605に電源とJTAG用USBケーブルを接続した。
ChipScope Proを立ち上げて、example_top.bitをコンフィギュレーションした。下の写真はその状態のSP605だ。
ピンクの枠で囲ったLEDの左から、Calibration done、PLL locked、Error、Heartbeat (blinking)となっている。右はじのLEDは点滅していた。
mig32\example_design\parフォルダのSP605_DDR3_MIG3.2.cpjをFileメニューからOpen Project...する。デフォルトではトリガはc3_errorが1の時、つまりエラーの時にトリガがかかるので、Arm Triggerボタンを押してもトリガがかからずに待ち状態になる。波形を表示させるためにT!ボタンをクリックした。下がChipScope Proの画面。
左側のペインを見るとVIO Consoleがある。これはなにかと思って調べると、ChipScope Proから値をセットすることができるようだ。コアを生成して、HDLソースレベルで接続し、ChipScope Proから値を入れて、回路動作を変更することができるようだ。TrafficGen_VIO_Enableを1に、TrafficGen_DataMode[2:0]を011にセットした。
波形を表示させるためにT!ボタンをクリックしたところが下の波形。
ChipScope ProでVCDを出力して、Veritakで観察してみた。下の図はDDR3 SDRAMにWriteしているところだ。
上の図で、c3_p0_cmd_enが1になった時がコマンドが有効である。黒いカーソルの位置では、c3_p0_cmd_instrが0なのでWriteとなる。c3_p0_cmd_blが06なので、7つの32ビットデータをWriteする。赤いカーソルの位置では、c3_p0_cmd_blが0eなので、15個の32ビットデータをWriteする。
ここで使用しているクロックは何MHzか?疑問になったので、
以前のシミュレーション から調べてみると20nsec = 50MHzだった。これでは、スループットがあわないはず?DDR3-800(400MHzのダブルレート)なので、800MHz×16bit=12.8Gbit/sec、ユーザーインターフェースは50MHz×128bit=6.4GHzと半分だ?なぞ?
下の図はDDR3 SDRAMにReadしているところだ。
上の図で、c3_p0_cmd_enが1になった時がコマンドが有効である。黒いカーソルの位置では、c3_p0_cmd_instrが1なのでReadとなる。c3_p0_cmd_blが00なので、1個の32ビットデータをReadする。赤いカーソルの位置では、c3_p0_cmd_blが32なので、55個の32ビットデータをReadする。
一応、MCBの動作は確認できたが、サンプルデザインのユーザーインターフェースのスループットとDDR3 SDRAMのスループットがあわないわけがわからない?
2010年05月18日 20:18 |
Spartan-6 FPGA SP605 評価キット
| トラックバック:0
| コメント:0
”
SP605でPCIe Coreを生成してみる ”でSP605のPCIeコアを生成した。シミュレーションしてみることにした。
sp605_pcie_ISE121\s6_pcie_v1_3\simulation\functionalフォルダに行くと、simulate_isim.batがある。これをコマンドプロンプトから起動した。次々にコンパイルしていったが、待っても待ってもGUIが上がってこない。そのうちにシミュレーションが終了してしまった。
simulate_isim.batを読むと、どうやらGUIモードではなく、バッチモードでシミュレーションしてしまったようだ。GUIモードにするために、コマンドプロンプトから下のコマンドを入力して、起動した。
demo_tb.exe -gui -view wave.wcfg -wdb wave_isim
simulate_isim.batには、自動的にRun Allするようにtclスクリプトもついていたが、自分で信号を追加したかったので、tclスクリプトは除いて起動した。
GUIモードで起動したので、Spartan-6のPCIeハードIPの信号も波形ウインドウに追加した。
Instance and Process Nameパネルから、board -> EP -> s6_pcie_v1_3_jを選択して、Object Nameパネルに表示された信号を波形ウインドウにドラックアンドドロップした。
(上の図はすでにシミュレーションが終了した状態で、説明用に操作しています)
追加した波形をグループに登録する。波形ウインドウにドラックアンドドロップした信号のところで右クリックして、メニューからNew Groupを選択する。
New Groupができるので、そこに名前を入力する。今回は、s6_pcie_v1_3_jと入力した。これで、右の三角をクリックすると、信号波形が展開され、もう一度三角をクリックすると、折りたたまれて、それらの信号を見ない場合は見やすくすることができる。
さて、シミュレーション波形を下に示す。まだ、何をやっているかがよく分からない、マニュアルを読む必要があるようだ。
これでシミュレーションエンドまでの波形を表示している。さて、信号のやりとりをしているところを拡大する。その領域を拡大するためには、CTRLキーを押しながら、マウスの左クリックをしながら、赤い四角の右下にドラックする。(ちなみに右上がZoom Out、左上がZoom Fit、左下がZoom In)
何をやっているのかよく分からない。でもどうやら、P605のPCIeコアは、トランザクション層のパケットのやりとりはしていないようだ。
ISimのログを下に示す。
Simulator is doing circuit initialization process. Running default test {sample_smoke_test0}...... [ 0] : System Reset Asserted... Finished circuit initialization process. [ 399600000] : System Reset De-asserted... [ 960680600] : Transaction Reset Is De-asserted... board.EP.s6_pcie_v1_3_i.PCIE_A1.B_PCIE_A1_INST.SHIP.SHELL.BUT.pcie_pcie_inv.pcie_pcie.pcie_core.xil_pcie_sa_mod18.xil_pcie_sa_mod19.com.tlm.u_tlm_rx.xil_pcie_sa_mod75 checking [ 1894626600] : Transaction Link Is Up... [ 1895816600] : TSK_PARSE_FRAME on Transmit [ 2233396600] : TSK_PARSE_FRAME on Receive [ 2295792600] : Check Device/Vendor ID - PASSED [ 2296992600] : TSK_PARSE_FRAME on Transmit [ 2559776600] : TSK_PARSE_FRAME on Receive [ 2696968600] : Check CMPS ID - PASSED [ 2696968600] : SYSTEM CHECK PASSED [ 2696968600] : Expected Device/Vendor ID = 000710ee [ 2696968600] : Reading from PCI/PCI-Express Configuration Register 0x00 [ 2698168600] : TSK_PARSE_FRAME on Transmit [ 2962954600] : TSK_PARSE_FRAME on Receive [ 3098146600] : TEST PASSED --- Device/Vendor ID 000710ee successfully received [ 3098546600] : Reading Cfg Addr [0x00000001] [ 3102143800] : Writing Cfg Addr [0x00000001] [ 3105744200] : Reading Cfg Addr [0x00000001] Stopped at time : 31086447 ps : File "H:/HDL/FndtnISEWork/Spartan6/sp605_pcie_ISE121/s6_pcie_v1_3/simulation/tests/tests.v" Line 131
今回は、ISimの使い方の覚書を書きながら、シミュレーションをしてみた。
PCI Expressについて本を購入して勉強中だ。今日にもまた新しい本が来る予定。
2010年05月17日 05:24 |
Spartan-6 FPGA SP605 評価キット
| トラックバック:0
| コメント:0
今回は、”
SP605 PCIe x1 Gen1 デザインの生成 (XTP065) ”に従って、PCIe X1 Gen1のデザインをCORE Generatorでやってみようと思う。なお、Spartan-6にはX1 Gen1のPCIeのエンドポイント用ハードコアが内蔵されているので、それを使うという設定になる。XTP065ではISE11だったが、ISimで、PCIeのシミュレーションができるかもしれないという期待をかけて、ISE12.1でやってみる。
1. 最初にsp605_pcie_ISE121というフォルダを作成した。
2. スタートメニューからISE ISE Desgin Suite 12 -> ISEデザインツール -> ツール -> CORE Generatorを選択して、CORE Generatorを起動する。FileメニューからNew Project...を選択する
3. sp605_pcie_x1_gen1.cgp という名前のプロジェクトを作成した。
4. Project Optionsダイアログが立ち上がる。FPGAデバイスを設定する。下の図のようにSP605のSpartan-6を選択する。
5. 次に左のペインからGenerationを選択し、右でVerilogを選択する。これでOKをクリックする。
6. これでProject Optionsダイアログは閉じる。次にCORE GeneratorのIP CatalogのView by Functionで、Standard Bus Interfaceを開いて、PCI Expressを開き、Spartan-6 Integrated Block for PCI Expressで右クリックして、Customizeを選択する。XTP065ではバージョンが1.2だが、ISE12.1では、1.3になっている。
7. Spartan-6 Integrated Block for PCI Expressの設定ダイアログが開く。Next >をクリックする。
8. XTP065に従ってBAR(Base Address Registers)0を1MBytesのメモリに、BAR1をディスエーブルする。
9. Vender IDなどを設定する。確か10EEはXilinx社のベンダIDではなかったか?値はデフォルトのままとする。
10. Max Payload Sizeなどを設定する。512bytesだった。これもデフォルトのまま。
11. Power Managemenet Registers の設定。デフォルトのまま。
12. Device Serial Number Capabilityなどの設定。デフォルトのまま。
13. Xilinx Reference Boards をSP605 Rev A-Dに設定し、Generateボタンをクリックする。
14. Readmeウインドウが表示されて、PCIeコアが生成される。Closeで閉じる。
15. Project IPの所に、s6_pice_v_1_3コアが生成されているのがわかる。
ウィザードが長かった。。。
2010年05月16日 04:37 |
Spartan-6 FPGA SP605 評価キット
| トラックバック:0
| コメント:0
5月13日、14日に、Xilinxの大崎でVirtex-6 ファミリ デザイン セミナを受けてきました。
いろいろな知識を得てきました。特に演習が良かったです。簡単な回路を穴埋めで作って、FPGA Editorどのようにマップされるか見てみるといった内容でした。HDLのコーディングスタイルも説明がありました。疑問に思うこともあったのですが。。。さて、印象に残ったことを列挙すると。
1. まずはVirtex-6は3.5V IO電圧に対応していない。2.5Vまで。これは知っていたはずなんだけど忘れてしまった。
2. XSTのテクノロジ・ビューのやり方を演習で教えてもらった。Virtex-6の6入力LUTにロジックがマップされていることをこれで見た。インスタンスをピンポイントで検索して表示することができた。そこから入力や出力を順次表示していくと見やすい。
3. FPGA Editorの新しい使い方も覚えた。ネットやコンポーネントをいろいろな色でハイライトすることができた。ハイライトしておくと見やすくなる。
4. DSPスライスもいろいろ機能をバラして使えることがわかった。
5. Virtex-6のクロッキングリソースはBUFG、BUFR、BUFIOの3種類ある。Spartan-6はBUFG、BUFIOの2種類。
6. Virtex-6のBUFRは分周できる。これは必ずしもデューティサイクルが50%ではなく、奇数の分周だとデューティサイクルが50%にならない。
7. Virtex-6はDCMが無くなっている。PLLのみ。MMCMというそうだ。
8. MMCMはCORE Gneratorでインスタンスすると、必要な周波数から倍率を求められて便利。倍率も7.5倍とかが選べるみたいだ。CORE Gneratorでインスタンスする方が良さそうだ。
9. HDLコーディング手法で、なるべくCE, RESETなどの制御ポートを合わせておくとスライスにまとまって、スライスが節約できる。
10. リセットは同期リセットを推奨していた。これは、そうだと思ったが、あまりリセットをしない方が、リセットの配線を有効につかえるという話もあった。これは、ワンホットのFSMのリセットなどをどうするんだろうか?リセットが無いとシミュレーションの時に困るし。。。
11. 最後の演習では、リセットの配線をFPGA Editorで遅延を観察してから、BUFGをインスタンスして、そこにリセットを配線した。こうすると当然、遅延は半分程度に減少した。しかし、こうすると同期リセットだとしても、論理のマージなどが行えずに不利な面もあると思った。非同期リセットの場合で、BUFGリソースが余っている場合には良いかもしれない?
12.
Spartan-6のIODELAYは変わった形式 だったが、Virtex-6は素直に遅延素子を並べてあるそうだ。
13. 演習でISERDESとOSERDESのサンプルデザインをできたのが良かった。なかなか情報がないので貴重だと思う。それでもVirtex-4の時よりは情報は多いと思うのだが。。。
ともかく、いろいろな収穫があってよかったと思いました。Spartan-6ファミリ デザインも行こうと思います。
今回は無料だったけど、有料のPlanAheadのセミナにも行ってみたいと思います。特に、FloorplannerでやっていたP&R後のクリティカルパスのバックアノテーションの方法を知りたいと思っています。
2010年05月15日 06:24 |
その他のFPGAの話題
| トラックバック:0
| コメント:2
ISE12.1で新しく加わった機能のIntelligent Clock Gatingの触りをやってみようと思う。効果を確かめるには、シミュレーションで生成したVCDファイルをXPowerに読み込ませて、実際のトグルレートを取得し消費電力をシミュレーションしないとダメだろが、今回はそこまではやらないで、インプリメントの仕方のみとする。
まずは、Xilinx社の
WP370 (v1.0) May 3, 2010、Reducing Switching Power with Intelligent Clock Gating の3ページ目のIntelligent Clock Gating in the Design Implementation Flowを参考にしてやってみることにした。
Intelligent Clock GatingはとりあえずVirtex-6だけの対応なので、xc6vlx75t-3ff484を使用する。これは、WebPACKで試用できる唯一のVirtex-6だ。回路はかなりしょぼいが、
キャラクタ・ディスプレイ・コントローラ を使用する。(もっと大きいのが良いのだが、適当なのは仕事用だ。)
Project Navigatorでプロジェクトを作成して、ProcessesペインでMAPのプロパティを表示する。
MAPのプロパティに、-powerというSwitchがあるので、このプルダウンメニューをプルダウンすると、Off, On, High, Extra Effort という設定項目がある。Reducing Switching Power with Intelligent Clock Gatingによると、これをHighに設定するそうだ。ちなみにまだ、Intelligent Clock Gatingが設定出来ないSpartan-6の場合は、-powerはチェックボックスのみだった。
MAPのプロパティのHELPを参照すると、-powerの設定の内容が書いてある。Onは容量性負荷を下げることでパワーを下げ、Highはクロックゲーティング、Extra Effortはたぶん容量性負荷を下げるのと、クロックゲーティングの両方を使うようだ。
この-powerスイッチをHighにして、インプリメントしてみる。
最初は、Spartan-6からリターゲットしたので、DCMのIPがエラーでインプリメントできなかった。DCMのIPを再度カスタマイズしたのではだめで、新たに作り直す必要があった。Virtex-6用に新規作成したらインプリメントすることができた。
ISEのサマリを下に示す。
ほんの少ししかリソースを使用していない。
次にXPower Analyzerの画面を下に示す。
Total Powerは0.798Wだった。
つぎにFPGA Editorで見てみたが、コンポーネントの数は92だった。
今度は、MAPのプロパティの-powerをOffにしてインプリメントしてみた。
ISEのサマリを下に示す。ピンクで囲ったリソースが減っている。Intelligent Clock Gating用のロジックなのだろうか?
XPower Analyzerで計算したTotal Powerは0.798Wで、同じだった。
FPGA Editorで見てみたが、コンポーネントの数は87で、減少していた。
FPGA Editorを比べてみたが、どこがどう変わっているのかよくわからなかった。
Intelligent Clock Gatingはもっと規模が大きく、動作周波数の早い回路で検証する必要があると思った。
2010年05月12日 05:19 |
Xilinx ISEについて
| トラックバック:0
| コメント:0
Xilinx社の論理合成ツールXSTでRAMを推定させる書き方をして、それに初期値を入れる方法を以前紹介した。(”
VHDLでのブロックRAMや分散RAMの初期化(外部データファイル) ”、”
VHDLでのブロックRAMや分散RAMの初期化(16進数で書かれた外部データファイル ”)
それらと同様の方法で、ROMを17個生成して使用していたのだが、これらを含む全体のプロジェクトの論理合成に5時間以上掛かっていた。このモジュールは多くの掛け算をLUTに割り当てるように、シフトと足し算で掛け算を行っている。そこに論理合成時間がかかっていると思っていたが、そうではなかった。これらのROMをCOREGeneratorでIPにしたところ、5時間以上の論理合成時間が3分20秒程度となった。
多くのROMやRAMを生成する場合には、論理合成ツールXSTでRAMを推定させる書き方をして、それに初期値を入れる方法をしては、今のところ、良くないという推測ができることがわかった。
ご注意ください。COREGenでIPにした方がいいみたいです。初期値も.COEファイルに直すのは簡単です。ISEのバージョンはISE11.5で確認しています。
(追加)
そういえば、Spartan-6とVirtex-6は、Xilinx社の論理合成ツールXSTでRAMを推定させる書き方をしても論理合成が早かったと思います。論理合成エンジンが違うのかな?Spartan-3系と。。。
2010年05月11日 10:44 |
その他のXilinxのツールについて
| トラックバック:0
| コメント:0
ブラウザをFirefoxからChromeに半年前位に変更した。
Firefoxの時には文字に色をつけても反映されなかったので、文字に色をつけていなかったのだが、最近、”
ISE12.1の疑問 ”の追記のフォントは赤にしてある。これは、Chromeで見るとフォントに色がついていたからなのだが、職場のFirefoxでみると色がついていない。IEで見てもフォントが赤くなっている。
なぜ、Firefoxだけがフォントに色がつかないのかと思って調べると、”
続・IEではなくFirefoxのみで発生するCSS styleトラブル ”がヒットした。それによると、Webページのメタタグのcontentが不正だと、Firefoxだけがstyle属性を無視するそうだ。
このブログのテンプレートのメタタグは、まさにcontent="style/css"と書いてあった。これをcontent="text/css"に変更した。Firefoxでも正常に文字が赤く表示された。これで、
フォントの大きさも変更できるだろう。 変更前
変更後
これで、Firefoxの方も正常にブログが見えると思う。良かった。。。
2010年05月10日 21:28 |
パソコン関連
| トラックバック:0
| コメント:2
”
4つ引き出しがある桧の収納家具作り2 ”で外枠が大体完成した。天板を固定して、コーススレッドを打った穴に、桧材から作ったダボを打って、綺麗にした。
次は、引き出しを作成した。
1. 枠を作るために、1X8材を縦に切る。縦板の縦は引き出しを入れる枠の内寸より5mm小さく、横板の縦は10mm小さく切る。(後で下からの溝の位置を変えているので、組んだ状態では横板は縦板に比べて、上下が2.5mmずつ小さい。これはそこから空気を抜いて、引き出しが開け閉めがスムーズに出来るようにするためだ。下の隙間は横板が棚板と接触するのを避けるためでもある。これにより、引き出し開け閉めの際の抵抗を減少させることが出来る) 2. 引き出しの底板は、4mm厚のシナベニアを使用する。 3. 縦板の下から7.5mmの部分に4mmのストレートビットを使ったトリマーで6mmの深さの溝を掘る。横板は下から5mmの部分にやはり、幅4mm、深さ6mmの溝を掘る。 4. 縦板と横板を組み合わせた引き出しの幅は、引き出しを入れる枠の内寸より1mm小さくする。 5. 引き出しの底板は、縦板と横板を組み合わせた内寸よりも10mm大きく切断する。つまり、余裕は両端で1mmずつ。(これをぴったり5mmの深さの溝を掘ると、組み合わない可能性がある) 6. まずは横板の溝に、寸法通りに切断したシナベニアを入れる。横板の木口に接着剤を塗って、シナベニアに縦板をはめ込む。 7. はみ出した接着剤は水に濡らした雑巾で拭き取る。 8. クランプを4つかけて固定する。
今は8. の状態になっている。
接着する前に、引き出しを入れてみたが、1mmの余裕では、きつすぎた。どうも誤差が1mm程度あるようだ。そこで縦板2枚を電動カンナ盤で0.5mmずつ削ったところ、スムーズに引き出しが動いた。
上図で、3つは
クイックバークランプ を使っているが、1つはL字クランプにした。やはり、クイックバークランプは締めが足りないので、反っている木をもとに戻すのには頼りない。もっと長いL字クランプの方が良いみたいだ。
なお、箱を作るには、普通は
ハタガネ を使用するが、クイックバークランプの方が安いので、購入した。
(2010/05/10:追記) 今朝、引き出しの接着具合を見てきたが、たぶん、反りが修正されていて、少しゆるくなってしまった。引き出しの幅は、引き出しを入れる枠の内寸より2mm程度の隙間がある。1mm程度隙間が大きい。やはり、接着後に修正する必要があるようだ。木の反りを修正できる可能性があるため。
最初からぴったりに出来ていたので、かんな掛けする必要がなかった。残念。教訓にしよう。
2010年05月09日 18:58 |
木工
| トラックバック:0
| コメント:0
”
ISE12.1の疑問 ”では、だいぶ勘違いして申し訳なかった。
まだ疑問がある。”
ISE12.1が出ていました ”で、defparamを使うとXSTでエラーが出るということを書いた。
ISE12.1でSP605のBRDデザインがXSTでエラーになる話ですが、これは、BRAMの初期値をdefparamで指定している部分でエラーとなっているようです。What's New in Xilinx ISE Design Suite 12のXST、Improved design methodology:を見ると、VHDLのgenericやVerilogのparameterを使わないといけないそうです。 つまり、プリミティブのインスタンスの時にVHDLだったらgeneric map, Verilogだったら# を使ってBRAMの初期値を入れる必要があると思われます。
ISE12.1のエラー画面を見ると、defparamの前に、// synthesis translate_off が記述されている。これは、ここからは論理合成時に無視するというディレクティブだ。これが効いていないのではないか?と思う。下図の記述の意味はシミュレーション時にはdefparamのデータを入れて、シミュレーションして、実際にFPGAにインプリメントするときには、初期値をデフォルト値にするという意味だと思う。それがXSTでエラーになるのだから、おかしいと思う。
上図で最初のエラーの全文を下に示す。
ERROR:Xst:3154 - "H:\HDL\FndtnISEWork\Spartan6\SP605_Sample_Projects\sp605_dsp_copy\remote_sources\Projects\Xilinx\ObiWan\FPGA\SP605\Dev\DSP48A\PB_CODE.v". Line 30. Unable to set attribute "INIT_00" with value "00110F07400C000EC0000018002A00FA002A00FA002A00FA002A00FAC0000010" on instance of block . This property is already defined with value "0000000000000000000000000000000000000000000000000000000000000000" on the block definition by a VHDL generic or a Verilog parameter. Apply the desired value by overriding the default VHDL generic or Verilog parameter. Using an attribute is not allowed.
ISE12.1でSpartan3A Starter KitのDDR2 SDRAMコントローラのバーストテスト回路をインプリメントすると、XSTは通るが、パーサーエラーが2個でる。
このプロジェクトは、DCMのアトリビュートの設定にdefparamを使っているが、この記述はXSTを通っている。
DCM dcm_DDR2_clk_dcm ( .CLKIN(sysclk), .CLKFB(clk_bufg), .DSSEN(1'b0), .PSINCDEC(1'b0), .PSEN(1'b0), .PSCLK(1'b0), .RST(1'b0), // 前段のDCMがロックするまでリセット .CLK0(clk_node), .CLK90(), .CLK180(), .CLK270(), .CLK2X(), .CLK2X180(), .CLKDV(), .CLKFX(clk_sdram_node), .CLKFX180(), .LOCKED(dcm1_locked), .PSDONE(), .STATUS() ); defparam dcm_DDR2_clk_dcm.CLKIN_PERIOD = 20.0; defparam dcm_DDR2_clk_dcm.DLL_FREQUENCY_MODE = "LOW"; defparam dcm_DDR2_clk_dcm.DUTY_CYCLE_CORRECTION = "TRUE"; defparam dcm_DDR2_clk_dcm.CLKDV_DIVIDE = 16.0; defparam dcm_DDR2_clk_dcm.PHASE_SHIFT = 0; defparam dcm_DDR2_clk_dcm.CLKOUT_PHASE_SHIFT = "NONE"; defparam dcm_DDR2_clk_dcm.STARTUP_WAIT = "FALSE"; defparam dcm_DDR2_clk_dcm.CLKFX_DIVIDE = 1; defparam dcm_DDR2_clk_dcm.CLKFX_MULTIPLY = 3; // defparam dcm_DDR2_clk_dcm.FACTORY_JF = 16'hFFFF;
BRAMはだめでDCMはOKなのか?それともSpartan-6はダメで、Spartan-3AはOKなのか?
どうやら、Spartan-6やVirtex-6などの6入力LUTとそれ以外ではXSTのアルゴリズムがそうという違うのではないだろうか?(当たり前という話もあるが。。。)Spartan-3Eで論理合成が5時間かかっていた仕事のプロジェクトをVirtex-6に試しに変更したら数分で終了した。(これはISE11.5でだったかISE12.1だったか記憶が曖昧)
ISE12.1でインプリメントがスピードアップするとしても、Spartan-6やVirtex-6が主になるんじゃないかと予想している。その他は、変わらないのではないだろうか?(あくまで私の予想です)
2010年05月09日 06:10 |
Xilinx ISEについて
| トラックバック:0
| コメント:0
5月13日と14日に大崎のザイリンクス トレーニングセンターで行われるVirtex-6 ファミリ デザイン セミナに参加します。また、5月25日と26日に同様に大崎のザイリンクス トレーニングセンターで行われるSpartan-6 ファミリ デザイン セミナに参加します。参加される方、よろしくお願いします。
どこかおすすめのお昼のお店があったら、教えて下さい。よろしくお願いします。
2010年05月08日 21:41 |
その他のFPGAの話題
| トラックバック:0
| コメント:6
ISE12.1の疑問に思うことについて列挙します。
1. プロジェクトにソースファイルをAdd Sourceする時に1つのソースファイルしか選べないのはなぜでしょう? SHIFT+クリックやCTRL+クリックで複数選択出来ません。とても面倒です。(これはWindows7にインストールしたためかもしれません。対応OSでないのでしょうがないかも?)
(2010/05/10:追記) Windows7でCOMOD Internet Security 4.0 のSandbox で動作させていたためでした。SandboxをDisableしたところ、複数選択することができました。 2. UCFファイルをプロジェクトに入れたのに認識されない。Hierarchy表示で出てこない(図1)。Files表示ではプロジェクトに入っている(図2)。どうやらNew Project...で作ったときのよう?既存のプロジェクトを変換すれば大丈夫そう。これはWindows7でもWindows XPでも現象が出る。インプリメントしてもUCFの内容が反映されない。なかったことになっているようだ。
図1 Hierarchy表示
図2 Files表示
(2010/05/08:追記)どうやら、トップのDDR2_burst_test.vの以前のバージョンのファイルDDR2_burst_test_org.vを同時に入れてしまったのが原因のようでした。UCFは表示されるようになりました。ただ、PlanAheadを立ち上げて、配置制約を編集しようとしたら、エラーがでました。 プロジェクトを作ったときにAddするUCFが古いものでhした。ISE11.5と同じUCFを使用したらエラーはなくなりました。 3. 2.のプロジェクトをProjectメニューのForce Hierarchy Reparseをしたら階層がおかしくなってしまった。どうしてだろうか?図3参照
図3 Force Hierarchy Reparse後のHierarchy表示
(2010/05/08:追記)どうやら、トップのDDR2_burst_test.vの以前のバージョンのファイルDDR2_burst_test_org.vを同時に入れてしまったのが原因のようでした。ProjectメニューのForce Hierarchy Reparseをしても階層は崩れませんが、パーサーエラーが2つ出ています。Cannot open include file "./ddr2_cont_parameters.vh"です。一応、プロジェクトにddr2_cont_parameters.vhは入っています。UCFのエラーの解析を先にすることにして、こちらは、もう少し様子をみます。 論理合成とインプリメントも通りました。パーサーエラーは出ますが、今のところ問題ないようです。 SP1を待つことにしようと思う 。
2010年05月08日 05:12 |
Xilinx ISEについて
| トラックバック:0
| コメント:3
VHDLはDoxygenでドキュメント化できるが、VerilogもDoxygenでドキュメント化したいと思っていた。以前、
Verification Engineerの戯言 さんの”
Doxygen Filter for System Verilog 2.3.0 Released ”の記事を見て、気になっていたので、SystemVerilog、VerilogをDoxygenでドキュメント化してみることにした。この記事はその覚書だ。
Doxygenはバージョン1.6.3 を使用している。まずは、
Doxygen Tools (including a Filter for SystemVerilog) のWebページからDoxygen Toolsをダウンロードする。ダウンロードし解凍すると2.6.0.r130というフォルができて、下図のフォルダが生成される。
これをDoxygenのフォルダにコピーする。下図がコピーしたあとの状態だ。
ドキュメント化するVerilogファイルは、”
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのプロジェクト ”のVerilogファイルとする。
Doxygenを使う前にスクリプトはperlを使用しているので、Windowsにperlが入っていない場合は、perlをインストールする。私は、
ActivePerl を使用した。
Doxywizardをメニューから起動する。Wizardで設定を行い、Expertタブを設定する。
ExpertタブのBuildの項目でEXTRACT_ALLにチェックが入っていることを確認する。
ExpertタブのInputの項目でFILE_PATTERNSに .v と .sv の拡張子を追加する。
ExpertタブのInputの項目のINPUT_FILTERの項目にdoxygen/filter/idv_doxyfilter_sv.pl を指定する。FILE_PATTERNSの項目に .v と .sv の拡張子を追加する。
このidv_doxyfilter_sv.plスクリプトは.vと(たぶん).svのみ解析するようなので、.vh のインクルードファイルがあると、そこは解析されない。そこで、ddr2_burst_test/Synth112の下のddr2_cont_parameters.vhをddr2_cont_parameters.vにコピーした。
これでRunタブからdoxygenをRUNすると、Verilogファイルがドキュメント化できた。
ここにドキュメント化したhtmlファイルを置いておく 。
Doxygenの設定ファイルのサンプルをここに置いておく 。このファイルを自分のパソコンにコピーして、Doxygen GUI frontendウインドウのFileメニューからOpen...を選んで、Doxygenの設定ファ イルのサンプルを選択すれば、私の行った設定を再現できる。その場合は、最低でも、WizardタブのSpecify the directory to scan for source code のSource cod directry とDestination directory、ExpertタブのInput項目のINPUT_FILTERのフォルダ名を変更する必要がある。
SystemVerilogはまだ本格的に書いたことがないので分からないが、SystemVerilogのドキュメント化ができると思う。
2010年05月07日 05:08 |
Doxygen
| トラックバック:0
| コメント:0
Xilinx社のFPGA用ツールの新しいバージョンISE12.1 が出ていました。コメントで教えてもらいました。ありがとうございました。
今、Windowsのバージョンをダウンロード中です。あ、ダウンロードが終わりました。インストールします。
Xilinx_ISE_DS_Win_12.1_M.53d.0.4.tarが落ちてきました。これを解凍しています。
ISE12.1でもWebPACKでChipScopeは使えないようです。残念です。
解凍が終了すると、Xilinx_ISE_DS_Win_12.1_M.53d.0.4フォルダが生成されました。
xsetup.exe をダブルクリックしてインストラーを起動しました。
ISE WebPACKを選択しました。ChipScope PROとEDKもインストールされるそうです。ChipScopeだけでも使えればよいのですが。。。
下図の条件でインストールしました。
現在、2010年5月4日午前5時57分、インストール中です。すでにインストールから10分程度経過しました。
6時10分頃、インストールが終了しました。インストール後の注意が表示されています。
ISE12.1を起動させて、SP605のBRDデザインをインプリメントしてみます。これはISE11.5ではタイミングエラーが出ていましたが、インプリメントは出来ていました。なんと、ISE12.1では、XSTでエラーが出てしまいました。なんででしょうか?
BRAMの初期化コードを再度定義しているというエラーが出ているようです。チェックが厳しくなったのかな?
今日は田植のお手伝いなので、ここまでとします。
ChipScope Proが30日間の試用スタートしてあるように書いてあるので、この機会を逃さずに、いろいろデバックしないと。。。ISE12.1のWebPACKをインストールすると、自動的にChipScope Proが30日間の試用スタートなのかな?
ISE12.1でSP605のBRDデザインがXSTでエラーになる話ですが、これは、BRAMの初期値をdefparamで指定している部分でエラーとなっているようです。
What's New in Xilinx ISE Design Suite 12 のXST、Improved design methodology:を見ると、VHDLのgenericやVerilogのparameterを使わないといけないそうです。
つまり、プリミティブのインスタンスの時にVHDLだったらgeneric map,
Verilogだったら# を使って BRAMの初期値を入れる必要があると思われます。
ChipScope Pro Inserterが起動しました。30日間の試用ライセンスが生きているようです。30日間ChipScopeを使いまくりますよ。。。
(2010/05/05:追記)ISE12.1では、VerilogやVHDLのソースファイルをセーブするときに、自動的に構文のエラーチェックをするみたいです。構文エラーがあるとエラー表示がでます。
結局、ChipScopeProは期限切れで使えませんでした。ISE11の時のライセンスを引き継いでいるみたいです。30日間使用ライセンスのExpiration Dateは21-jul-2009でした。残念です。。。
(2010/05/06:追記)
ISE Design Suite 12 : インストール、ライセンス、リリース ノート UG631 (v12.1) 2010年4月19日 にインストールやライセンスの設定方法について詳しく書いてあります。
ISE12の
ISE Design Suite Product Brief によると、Intelligent Clock-GatingのサポートはISE12.1ではVirtex-6。ISE12.2でSpartan-6もサポートのようです。Virtex-6のPartial ReconfigurationのサポートはISE12.2からのようです。
Unlock New Levels of Productivity for Your Design Using ISE Design Suite 12 WP368 (v1.0) May 3, 2010 にISE12の新機能が書いてあります。
2010年05月04日 05:58 |
Xilinx ISEについて
| トラックバック:0
| コメント:3
”
4つ引き出しがある桧の収納家具作り1 ”で棚板を切って、側板の溝を掘った。
今日は棚板と側板と幕板を組み立てた。棚板を側板にコースレッドで止めた。この組み立てるときに、持っていてもらった方が良いので、うちの親父に協力を願って、持っていてもらったので、スムーズに行った。皆さんこんな時はどうしているんだろう?組立用の治具があるんだろうか?調べてみよう。とにかく、下の写真のようにできた。まだ天板はネジ止めしていない。
後は、引き出しを4つ作る必要がある。これが難しいのだが、逆に言うと楽しめる作業ということでもある。楽しんで作りたい。
明日は、奥さんの実家の田植の手伝いだ。機械植えは昨日終わったのだが、田植機か苗の生え方が悪くて、苗が植えられていないところがある。を田んぼを歩いて、そこに手植えする作業(直し)を行う。田んぼを歩くと抵抗が大きいので、疲れるのだ。。。
2010年05月03日 20:44 |
木工
| トラックバック:0
| コメント:2
前回 までで、SP605用のMCBのサンプル回路の動作をシミュレーションで見てきたが、今度はインプリメントしてみようと思う。インプリメントは前に、”
Spartan-6のMemory Controller Block(MCB) を試してみた ”でやっているが、SP605用ということでやってみた。
mig33\example_design\parフォルダのcreate_ise.batを起動して、ISE11.5のプロジェクトを作成した。起動すると時間がかかって、test.xiseができた。
ISE11.5を起動して、先程のtest.xiseを読み込むと、下図のようになった。
インプリメントしてみると、Translateプロセスでエラーが発生した。
ChipScopeがないというエラーだった。ChipScopeは評価期限が過ぎているので使えない。どこが悪いのか調べたところ、”
SP605用のMCBをMIGで生成する ”で生成した時の13.の設定を変えれば良いことがわかった。
上図のDebug Signals for Memory Conteroller をDisableに設定した。これでDDR3 SDRAMコントローラを生成して、もう一度、create_ise.batを起動した。(mig33\example_design\parフォルダの内容はCORE Generatorで再ジェネレートする前に削除した)
そうしたら、mig33\example_design\parフォルダの内容は、大分寂しくなった。
下の図がISE11.5を立ち上げて、再度test.xiseプロジェクトを読み込んだところ。
インプリメントしたが問題なくインプリメントすることができた。
使われているMCBをFPGA Editorで見た。他にもロジックが使われている。
今度は、XSTで階層をキープして論理合成してみた。RTLビューで見てみたが、DDR3 SDRAMコントローラはMCBだけではなく、IODRP2_MCBやOSERDES、キャリブレーション用ロジックなど多くの要素で構成されている。やはり、MCB単体で使用するのは難しく、CORE Generatorを使う必要があると思った。memc2_wrapper_inst の中身の一部を下図に示す。
水色に選択されているのがMCBだ。
2010年05月03日 05:20 |
Spartan-6 FPGA SP605 評価キット
| トラックバック:0
| コメント:0