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

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

FPGAの部屋

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

DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント4

”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント2”でDDR2 SDRAMの初期化手順を見てみると、DDR2 のDLLリセットから、最初のアクティベート・コマンドを入れるまでの間隔が52クロックと短いことが問題となった。
”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント3”では、DLLリセットからの時間を計るカウンタのクロックCLK1_16について、Chipscopeで測定したが問題なかった。
それではということで、カウンタの動作はどうなのだろうか?ということでカウンタの各ビットをChipscopeで確認してみたところ、DDR2 のDLLリセットから、最初のアクティベート・コマンドを入れるまでの間隔が256クロックになっていて直ってしまった。
DDR2_SDRAM_auto_adj_init_6_080530.png

これはおかしいと思って原因を探って見ると、タイミング制約が満足していなかった。
DDR2_SDRAM_auto_adj_init_7_080530.png

これは、どこがまずいのかと調べると、リセットSWとして使用したSW2をクロックで同期したFFの出力をSYS_RSTとORしていたので、SW2をクロックで同期したFFから、その他の回路のFFまでのパスがタイミング制約と比較されたからのようだ。本当はそうする時はSW2をクロックで同期したFFをツリー状に複製して、負荷を分散しなくていけないのだろう。(DDR2 SDRAMコントローラのインプリメントテスト2(動作周波数の確保2))
Timing Analyzerの結果は以下の通り。
DDR2_SDRAM_auto_adj_init_8_080530.png

いずれにせよ。どうもうまく受けられないようだ。
やはり、IOBの遅延素子によってDQの入力を遅延させてコントローラのクロックでサンプルする方式では、200MHzのSuzaku-Vでは無理があるのだろうか?
#どこか間違っているという可能性もあるが。。。

200MHzから動作周波数を下げるとIOBの遅延素子で1周期分遅延させることができないので、この方法をとるのは難しくなる。(クロックの立ち上がりのデータと立下りのデータを入れ替えられれば、1/2の周波数まではいけると思うが。。。)
この方法で受けるのはやめて、やはりDQSで受ける方法を模索しようと思う。その場合、問題はどうやって自分の内部クロックに乗せかえるかということになる。とりあえずはただ受けて見て、値をChipscopeで観測して正しいデータが受けられるかどうかを見てみようと思う。
  1. 2008年05月31日 15:47 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Versys EDA

たまたま検索していたら、有限会社レグシムさんのVersys EDAが引っかかった。
ライブリナックスでCDブートして、リナックスのVerilog、SystemCのシミュレーション環境をお手軽に試すことができる。
Verilog Simulatorは、Icarus VerilogとGPL Cver、波形表示ツールとしてはGTKWave、あとSystemC コンパイラが入っている。
早速、UbuntuのISOイメージをCDに書いて試してみたが、なかなかよさそうだった。お手軽にリナックスのシミュレーションツールを試せるのが良い。私のところのノートパソコンでも問題なく動作した。
  1. 2008年05月29日 20:23 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント3

”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント2”で200MHzの16分周クロックがうまく出ていないようなので、Chipscopeで見てみるということだったので、実際に見てみた。
DDR2_SDRAM_auto_adj_init_5_080529.png

16分周クロックは一番下のclk1_16。その結果、ちゃんと16分周されていた。原因は何なんだろう。
もう少し調査が必要のようだ。

ISE10.1.01が前のバージョンと違っているところをやってい見ている。複数のUCFを扱えるようになっているようだ。結果をそのうち書こうと思っている。
  1. 2008年05月29日 09:08 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

いつの間にか55万アクセス超過

いつの間にか55万アクセスを越していた。みなさん、見ていただいて、ありがとうございます。
Access_550000_080526.png


FPGAのキーワードでgoo で検索していたら、量子性備忘録さんの”FPGAで機能をプログラミングできるグラフィックカード”が引っかかった。これはと思って、リンクをたどっていった。
The Open Graphics Projectがあって、 OGD1, Revision B (OGD1P-256DDAV; AS-000-0002)ボードを売るようだ。
FPGAで作るグラフィックカードのようだが、PCI-X 64bit 133MHz, DDR SDRAM, XC3S4000が載っていて、とてもよさそう。だが値段は$1,500 か。。。買えませんね。。。
The Open Graphics Development Board(OGD1)のページ。
それにWebpackでは開発できないみたいですね。だめですね。
  1. 2008年05月27日 22:51 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント2

”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント”でリセットSWを追加して、初期化時の遅延値を調整するフェーズをChipscopeで観測することにした。
遅延値を最適な位置に設定する方法については、”DQの最適な遅延値を測定するDDR2 SDRAMコントローラのシミュレーション”を見てほしい。
そこで、”2.DQのIDELAY値を0から63まで変化させてイニシャル・データをリードする。”の位置をChipscopeで観測してみた。
その結果が下図である。
DDR2_SDRAM_auto_adj_init_1_080525.png

上から二番目のcas_node_1dが0のときに、DDR2 SDRAMにリードコマンドが発行される(Oカーソルの位置)ので、CASレイテンシ3クロックの後にデータが出てくる(Xカーソルの位置)はずだ。下から3番目のidelay_ceが遅延値をインクリメントする信号である。(idelay_incが遅延値を増加させるか減少させるかを決める信号)
これを見るとリードコマンドと遅延値をインクリメントする信号が重なり合っているので、もっと間をあけてみた。これが下図である。
DDR2_SDRAM_auto_adj_init_2_080525.png

今度はだいぶ idelay_ce (Oカーソルの位置)とリードコマンドが離れた。これでタイミング的にはだいぶ余裕があるはずだが、リードデータ (dq_rise_1d と dq_fall_1d、Xカーソルの位置)は正しい値ではない。
やはり、おかしい。DDR2 SDRAMの出力波形が悪いのか? それともそもそもDDR2 SDRAMにライトできていないのか? 
動作周波数を下げてやってみようと思ったが、何気なく前のDDR2 SDRAMの初期化手順を見てみると、DDR2 のDLLリセットから、最初のアクティベート・コマンドを入れるまでの間隔が短いのに気がついた。規格では、200クロック以上だが、最初のアクティベート・コマンドが入力されるまで52クロックしかない。(下図参照)
DDR2_SDRAM_auto_adj_init_3_080525.png

シミュレーションでは、どうなっているかというと1,280ns 間がある。1クロックは、200MHzなので、周期は5ns だ。それで1,280ns を割ると256クロックということになる。
DDR2_SDRAM_auto_adj_init_4_080525.png

実際にはDCMのclkdv出力を16分周に設定して16カウントしている。従って、clkdv出力がおかしくなっているのかもしれない。
調査が必要のようだ。clkdvをChipscopeでサンプルして確認してみるか、実際にポートに出してオシロで見てみようと思う。

#しかし、本当にパソコンが遅い。効率が全く上がらない。早く買わねば。。。
  1. 2008年05月26日 17:32 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

DQの最適な遅延値を測定するDDR2 SDRAMコントローラのインプリメント

とりあえず、詳細なシミュレーションは後に回して、DQの最適な遅延値を測定するDDR2 SDRAMコントローラをインプリメントしてやってみた。その結果は動作しなかった。そこでChipscopeを入れて観察してみた。このインプリメントではプリミティブをたくさん使用している。ODDRやIDDRというDDRレジスタはIOブロックに入っているので、Chipscopeに配線する物理的パスが存在しない。Chipscopeは便利なツールだが、物理的パスがないところは波形を観測できない。ということで、1つ前のパスを観測することになる。それが下の図の信号だ。
DDR2_SDRAM_auto_adjw_2_080524.png

これはDDR2のライト動作をキャプチャした図だ。もうすでに遅延を測定して、遅延をあわせた後だ。16進で"5555 5555"と"AAAA AAAA"を書き込んでいる。
rasb_node_1d, casb_node_1d, web_node_1dは、それぞれRAS, CAS, WEの1クロック手前の信号。bank_addr_ndoe_1d, ddr_addr_node_1d もそうだ。
wrdata_3dとwrdata_4d_half は出力用のODDRに入る前のデータ(4ビット分)。dq_rise_1dとdq_fall_1d は入力用IDDRの出力(4ビット分)。ps1, p2, ps3は何かというと、初期化時に、データを書いておいて、次にIDELAYを変化させながらデータをリードしていく。最初は受かったデータは誤っているが、あるところで正しいデータになるはずである。それの遅延値をps1にロードする。その後、遅延値を増やしていくと、またデータが誤るようになるかもしれない。その値をps2とする。ps1とps2の中間の遅延値が一番良い遅延値となる。それをps3とする。
ps1, ps2, ps3が3Dとなっていて、これではおかしい。
さらに、これでは、良くわからないのでシミュレーションではどうなっているかのデータと比較してみた。シミュレーションのタイミングチャートが下の図だ。
DDR2_SDRAM_auto_adjw_1_080524.png

wrdata_3dに"A"が出るまでの時間を測定してみると、Chipscope、シミュレーションともに3クロックで一致している。
次にライトをしてから、そのデータがdq_rise_1dとdq_fall_1d に現れるまでの時間を計測するとChipscopeが6クロックで、シミュレーションが5クロックだった。
DDR2_SDRAM_auto_adjw_4_080524.png

DDR2_SDRAM_auto_adjw_3_080524.png

やはり、インプリメントの方が予定よりも信号が遅れすぎているのかもしれない。
今度は、リードの波形を示しておこうと思う。
DDR2_SDRAM_auto_adjr_6_080524.png

DDR2_SDRAM_auto_adjr_5_080524.png

リードをしてから、そのデータがdq_rise_1dとdq_fall_1d に現れるまでの時間を計測するとChipscopeが8クロックで、シミュレーションが7クロックだった。これまた1クロック合わない。たぶん、これは実機の受けているデータがおかしいのだと思う。
これはおかしいということで、初期化時の様子を見てみることにした。
リセットはSuzakuのパワーオンリセットのみだったので、リセットSWをつけないと初期化時の様子は見れないので、つけることにした。

しかし、パソコンの能力が足りない。Chipscopeを入れてインプリメントするのに長い長い時間がかかる。間に漫画が読める。パソコンのリプレースを真剣に考えなくちゃ。。。
  1. 2008年05月25日 09:53 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:3

近況 (2008/05/23)

DDR2 SDRAMコントローラは、詳細なシミュレーションは後回しにして、実際にISE10.1.01でインプリメントしてやってみたら動作しなかった。Chipscopeをかけてデータを取ってみたら、PS3レジスタの値(DQの遅延を変化させてデータをリードし、最適な遅延を計算した結果を保存するレジスタ)に3Dが入っていた。PS1もPS2レジスタも3Dなので、データがうまくリードできていないようだ。
Chipscopeで初期化処理、つまり遅延値を変えて、リードしまくり、データを読むところを見たいのだが、リセットボタンがないので、押しボタンSWにアサインする必要がある。
しかし、Chipscope10.1.01はISEで、Chipscopeコアを入れたインプリメントをするのに、だいぶ時間がかかる。いつのころから、Translateに、こんなに時間がかかるようになったのだろうか? うちのおんぼろマシンでは負荷が重すぎる。そろそろ買い替え時かな? 今度のボーナスで考えよう。。。
下の理由もあって、今週はあまり進んでいない。仕事が終わって、家に帰ってからと早朝の時間では、時間が細切れになって使いづらい。土日に頑張るか。。。

この前、ブックオフに行ったら、新谷かおるのエリア88とふたり鷹(マンガ)を見つけてしまった。1冊105円だったので、思わず購入してしまった。今週は、そのマンガを読んでいたので、だいぶ時間をとられてしまった。

仕事の方は、相変わらず新しい基板の回路をアーキテクチャから定義して作っているが、1人でやっているで、時々考えに詰まったりする。だれか、テストベンチを書いてくれる人がいないかな?といつも思っている。(いないけれど。。。まだ、そんな品質ではないという話も。。。)

とりあえず、ケースというか基板を取り付けるベースをアルミ板で作ることになった。穴あけ、やすりがけをしないといけない。その前に機構設計(そんな大したものでもないが。。。)をしないと。。。
  1. 2008年05月23日 12:25 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

FMはこらじを作ってみた

FMはこらじを作ってみた。
プリント基板にFM受信用のICとアンプ用のICはあらかじめハンダ付けしてあるので、セラミックコンデンサ、電界コンデンサ、抵抗をソケットに差し込むだけでFMラジオが完成する。
まずは、このように抵抗を差し込む。
hakoraji_1_080520.jpg

結構ソケットが硬いので、リードを曲げないように差し込まないといけない。私も2本曲げてしまった。この辺が中学生が作るときのハードルになるか?
抵抗の次にセラミックコンデンサ、電界コンデンサをソケットに入れる。入れ終わったのがこれ。
hakoraji_2_080520.jpg

ここで段ボール箱に入れて、スイッチ、ボリュームを配線する。
hakoraji_3_080520.jpg

これで出来上がり、したが箱を閉めたところ。
hakoraji_4_080520.jpg

一番右が音量ボリューム、緑のスイッチがスキャンスイッチ、青がリセットスイッチ、赤のシーソースイッチが電源スイッチだ。
使い方は青を押して、緑のボタンを押して上の周波数へ放送局がないかどうかをスキャンする。放送局が見つかるとスキャンが停止し、FM局を受信できる。
鉄筋コンクリートの建物の中では受信できないが、外に出れば結構感度良く受信することができた。なかなか、作るのも楽しいし、いいみたいだ。
今度はこれを○○○○で鳴らしてみようと思う。

DDR2 SDRAMコントローラはアサーション(簡単なものです)を実装したので、たっくさんのテストベンチをDDR2用に変更して、ハードにテストをしてみようと思っている。現在、変更中だ。
  1. 2008年05月20日 20:46 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

FMはこらじが届いた

エレキットFMはこらじが届いた。
これは部品をソケットに差込だけで、FMラジオが完成するという優れものだ、これは中学生に作ってもらおうと思っているが、ためしに自分で作って見ようと思って1つ買ってみた。
FM_hakoraji_1_080518.jpg

FM_hakoraji_2_080518.jpg

FM_hakoraji_3_080518.jpg

思ったよりも作るのが楽しそうだ。どんな模様にしようかな?でも絵心がないから下手に書かないほうがいいか。。。
  1. 2008年05月18日 21:54 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

DQの最適な遅延値を測定するDDR2 SDRAMコントローラの問題点の解決

”DQの最適な遅延値を測定するDDR2 SDRAMコントローラの問題点”で予定した動作周波数(200MHz) で動作しないという問題点があったが解決できたようだ。
以前の問題は0度のクロックと、180度のクロックを2つ使っていたので、それぞれのクロックを使用するFFをつなぐパスがクリティカルパスになってしまったということだった。つまり、200MHzなので5nsに収まっていれば良いところ、2.5nsにパスの遅延を収めなければならなくなっていた。
そこで、ほとんどの動作クロックを0度クロックにすることにした。ステートマシンなども0度クロックに変更した。180度のクロックを使うところも最後の最後だけ180度クロックで受けるようにした。その結果、だいぶタイミングに余裕ができたようだ。
変更の結果、タイミング変わってしまったので、タイミングを変更する必要が出てきた。だいぶ、DDR2 SDRAMコントローラもできてから長いので、タイミングを忘れてしまった。良い方法がないか探していたところMIXIで、アドバイスをもらって、今までのDDR2 SDRAMコントローラと修正したDDR2 SDRAMコントローラを2つインスタンシエーションして比較してみることにした。
比較の結果タイミングが思い出されてきて修正できるようになってきた。修正の結果、まともに動作するようになって来た。
DDR2_improve_1_080517.png

ISE10.1.01でインプリメントしてみたところ、問題なくインプリメントできたようだ。
DDR2_improve_2_080517.png

これで、ちょっとしたアサーションを組み込んで試してみるのと、以前のテストベンチでハードにテストをしてみたいと思っている。

2008/05/18 追加: アサーションを組み込んでみたらバグがわかった。バグを修正して、これでOKかな?とISEでインプリしたら、動作周波数が取れない。
見てみると、バンクやROWアドレスが同一かどうか比較している回路から直接信号をもらっているので、組み合わせ回路が大きくなってしまった。これではだめなので、FF出力から引っ張ってきた。本当は組み合わせがいいのだが動作周波数が取れないので、仕方がない。これで1クロック分だけバンクとROWアドレスが合っているのに、もう一度プリチャージ、ACTコマンドを入れる可能性が出てしまったが、こっちのほうが動作周波数的には圧倒的にいいので、こっちにすることにした。
  1. 2008年05月17日 18:46 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

Virtex-5 に対する Stratix III の利点を OpenCoreベンチマークで実証

”Virtex-5 に対する Stratix III の利点を OpenCoreベンチマークで実証”というメールが昨日Alteraより届いた。OpenCores.orgのデザインをAltera StratixⅢとXilinx Virtex-5で清野を比べてみるということだった。
これがその結果が書いてあるURLだ。それによると、XilinxよりもAlteraの方が性能が65%上、使用率が平均で46% 多いロジックを搭載可能、コンパイル時間が最大 9 倍高速だそうだ。詳しくはWebページを見てほしい。
実際にソースコードをダウンロードして自分でも確かめられる。私もソースコードをダウンロードしてみたが、Virtex-5のソースコードがEDFだったのでやめてしまった。
コンパイル時間が9倍高速というのはわからないでもないが。。。そんなにデバイスのスピードは差があるのだろうか?
AlteraもXilinxも一番大きなFPGAで比べている。
いずれにしてもXilinxの反論を待ちたい。

#こういうライバル心むき出しの競争も面白い。どちらの性能が良いか興味深い。。。
  1. 2008年05月14日 17:20 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:9

パソコンの不具合

最近はパソコンの設定ばかりやっている。この前もWindows Vistaのデスクトップパソコンを設定した。このパソコンはBUFFALOの無線LANアダプタWLI-UC-AGでネットワークに接続しているのだが、Windows Vistaのサービスパック1をかけたころから、たまにブールースクリーンになるようになってしまった。いつもではなく、たまーにブルースクリーンになるようなのだ。
これはだめだということで、もう一度Windows Vistaを再インストールしてみた。その後でBUFFALOのサイトを見るとWindows Vista サービスパック1対応は、エアーナビゲータCD Ver. 10.30からだそうだ。
これはまずいということで、最新版を調べると、エアーナビゲータCD Ver. 10.50だそうだ。これをインストールしてみた。とりあえずブルースクリーンにはなっていないようだが、様子を見てみることにする。
  1. 2008年05月13日 20:48 |
  2. パソコン関連
  3. | トラックバック:0
  4. | コメント:2

DQの最適な遅延値を測定するDDR2 SDRAMコントローラの問題点

DQの最適な遅延値を測定するDDR2 SDRAMコントローラの問題点がわかった。
controller.v はclkx(clkからは180度位相がずれている)で動作しているが、データパスは大体clkで動作している。この間のパスは動作周波数を200MHzとすると、周期は5nsとなるので、clkxの動作回路からclkの動作回路までの最大遅延は5nsの半分の2.5nsとなる。逆も同じだ。
このパスが、軒並みクリティカルパスになっている。以前の100MHz動作のDDR SDRAMでは問題にならなかったが、200MHz動作にすると、そこのクリティカルパスが問題となって、タイミングがミートしない。
こうなると、この書き方は問題があることになる。これを解決するためには、最初からほとんどをclk で動かすように書き換えないとだめなようであるので、書き換えることにする。clkx で駆動する必要がある部分は最後に出力する部分で clkx で動作させることにする。

というわけでDDR2 SDRAMコントローラは書き直すことにした。また完成が先になってしまったがしょうがない。以前もタイミングが厳しかったが、今回、回路を増やしたのでしょうがないかもしれない。
やはり、クロックは同一クロックでなるべく作るべきという教訓ができた。(常識かもしれないが。。。)
もともと、Xilinx社のアプリケーションノート XAPP253を勉強して作ったので、そうなってしまった。
最後にTiming Analyzer の画面を。左上のタイミングが満足しないパスを見るといろいろなパスのタイミングが満足しないことがわかると思う。
DDR2_implement_prob_1_080510.png
  1. 2008年05月10日 21:21 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

Virtex2PでCoregenのFWFT FIFOを生成してインプリメントしてみた

Virtex2P(xc2vp50-6ff1152) でCoregenのFWFT FIFOを生成してインプリメントしてみた。FWFT FIFOはCommon Clock, Block RAM使用、First-Word Fall-Through (FWFT)モード。使用したISEは9.2i SP3, Synplify Pro 9.2。
このFWFT FIFOのポートマップは以下のとおり。

ENTITY fwft_fifo IS
port (
clk: IN std_logic;
din: IN std_logic_VECTOR(63 downto 0);
rd_en: IN std_logic;
rst: IN std_logic;
wr_en: IN std_logic;
almost_full: OUT std_logic;
data_count: OUT std_logic_VECTOR(9 downto 0);
dout: OUT std_logic_VECTOR(63 downto 0);
empty: OUT std_logic;
full: OUT std_logic);
END fwft_fifo;


dout, empty, full, almost_full, data_countなどが、FF出力になっているかどうか知りたかった。
上にfwft_fifo_test.vhd というファイルをかぶせて、IPの通りに出力パッドを用意した。
まずはdout(0)を見てみるとBlock RAMから直接出力されている。
fwft_fifo_1_080509.png

出力時間の制約をかけてTiming Analyzerで見てもTcko で出力されているようだ。
fwft_fifo_2_080509.png

Timing AnalyzerでTckoのリンクをクリックするとIEブラウザが立ち上がって、Tckoのヘルプを表示してくれる。それによると、Tckoは Sequential delay from flip-flop clock CLK to XQ/YQ (clock to out) ということで予想通りだった。
fwft_fifo_3_080509.png

dout, empty, full, almost_full, data_countも全部調べてみたがFF出力だった。
fwft_fifo_4_080509.png


すべて予定通りだった。
#しかし、クロックからの出力時間を制約してあるのに、エラーにしてまでなぜパッドから遠いBlock RAMを使うのだろう?(パッド位置はツールにお任せです)
  1. 2008年05月09日 15:58 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0

DQの最適な遅延値を測定するDDR2 SDRAMコントローラのシミュレーション

DQの最適な遅延値を測定するDDR2 SDRAMコントローラのシミュレーションが大体完成した。今度のDDR2 SDRAMコントローラはDQの遅延値を0から63まで増やしていって、ちゃんと受けられるDQの遅延値を計算して、その遅延値をDQの遅延値とするものだ。とりあえずDDR2-400でやっています。
手順は以下のようになる。

1.DDR2 SDRAMのイニシャライズが終了したらイニシャル・データをライトする。
2.DQのIDELAY値を0から63まで変化させてイニシャル・データをリードする。
3.初めて正しいイニシャル・データをリードできたIDELAYの値をPS1とする。
4.PS1を過ぎて、間違ったデータをリードしたIDELAYの値をPS2とする。
5.IDELAYの値を63まで変更する。
6.IDELAYの値をPS1 + (PS2-PS1)/2 に再設定する。
7.これですべての初期化手順が終了。


このように、リードの時にDQの値を遅延させて、内部クロックでサンプルするという方式は変更がない。ただ、自動的に最適点を検索できる機能を追加しただけだ。
Veritakでシミュレーションをしているところを下に示す。
DDR2_simulation_080507.png

ModelSim XE3 Starter でシミュレーションするとかなり時間がかかるが、Veritakだとだいぶ速いので助かっている。

今、ISEでインプリメントしてみたがタイミングを満たさないところがある。大体、対策はわかっている。ブログで対策の取り方を説明しようと思う。

2008/05/09:明らかにタイミングを満たさない場所はバグでした。ですが、まだ、タイミングを満たしていません。
  1. 2008年05月07日 21:51 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:4

庭の木々

5月になって庭の木の緑が濃くなってきた。うちの木々や草を紹介しようと思う。
home_tree_1_080506.jpg

これが裏の道から見たうちの木々、畑の作物のほかは主に見えているのは梅ノ木だ。そのほか、柿の木が5本ある。
home_tree_2_080506.jpg

梅はもう実が実ってきてる。色がついてきたら収穫時季だ。
home_tree_3_080506.jpg

つつじも親父が好きで結構植えてある。これは花が紫だが白もある。
home_tree_4_080506.jpg

もうだいぶ終わりになったが、うちで一番大きなつつじ、白い花でいっぱいな
ると本当に綺麗だ。これは私が子供のころから植わっている。
home_tree_5_080506.jpg

これは奥さんが趣味で植えているペパーミント、左脇に私が名前を知らないハーブがある。他にもレモングラスや、レモンバームもある。でもほとんどハーブティーなどで利用したことがない。作りっぱなし。レモングラスはトムヤンクンに欠かせないとか?たくさん生えている。
home_tree_6_080506.jpg

花が咲いているのがブルーベリー。この木はジャム用にブルーベリーの実をたくさんつけてくれる。ブルーベリーは一度に熟するのではなく、だんだん熟するので実を摘み取る期間が長く楽しめる。他にはラズベリー、ブラックベリーがある。ラズベリーは日本の多湿の気候に合わないようで油断するとすぐに、木になりながら、かびてしまう。ブラックベリーを食べてみると、もうすでにワインになっているような感じの味がする。木になりながら、すでに醗酵している?
home_tree_7_080506.jpg

最後にハナミズキ。これは花の色が白だがピンクのも植わっている。でも白い花のほうが木の勢いが良い。
  1. 2008年05月06日 20:29 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:13

Spartan3E Starter Kitを使ってXGA液晶に表示する動画

最近、ニコ動の会員になって、FPGA関連の動画とかを見ている。
長船さんのAlteraを使った動画もすごいけど、Utchy by 砂肝さんのSpartan3E Starter Kitを使ってXGA液晶に描画する動画もすごい。

LVDSを使っているとのこと。ピクセルクロックが65MHzだということなので、Virtex4のIOB組み込みSERDESは必要ないものと思われる。高い周波数でSERDES自分で作ると、私も前にやってみたが相当苦労すると思う。
初めてニコ動にコメントを入てみたが、ブログでお返事をもらった。LVDSとDVI-Dはどこが違うの?という質問だが規格が違うとのこと。LVDSはモニタ内部での配線に使われるとのこと。うちではPC間の伝送用にLVDSを使用しているが2m程度のケーブルで伝送している。まあこれはイレギュラーな使い方かもしれない。LVDSのマニュアルは、ナショナル セミコンダクター(NS)のサイトの日本語版LVDSオーナーズ・マニュアル&デザイン・ガイド(第3版)がくわしい。
後、DDRコントローラを使ってくださいというコメントも入れたのだが、使う予定は無いそうである。

やっと、風邪が治ってきたのでDDR2 SDRAMコントローラを再開した。今日は結構進んだが、まだシミュレーションでのデバック段階だ。
  1. 2008年05月05日 19:05 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

使用しているプロバイダの変更?

私は今はZEROというプロバイダに入っている。
今度、新サービスに移行するということでお知らせが来た。サービスリニューアルのページを見てみると、メールアドレスもWebページのアドレスも変わるそうだ。
これは非常に困る。プロバイダとしてやってはいけないことではないか???
FPGAの部屋のサンプルファイルもここのWebページに載せているので、ブログのダウンロードURLを全部変更する必要があるし。。。
この際プロバイダを乗り換えようかな? Yahooはどうだろう? ADSLでいいプロバイダを知っていたら教えてください。それともこの際、光にしようか?
  1. 2008年05月04日 05:28 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

VPNパケットのルーティング

職場では、部屋単位でローカルネットワークになっていることが多い。私のパソコンもローカルネットの中に入っている。
SynplifyやModelSimなどのライセンスを必要とするソフトのライセンスサーバーは、自分のパソコンとは違うローカルネットに入っている。よって、ライセンスサーバーにライセンスを取りに行くのにVPNを張っている。
同じローカルネットから2つのマシンをVPN接続すると片方はライセンスが取れなくなってしまう。そこで、1つのマシンにはLANボードを1枚挿入して、それにグローバルアドレスを割り振って、グローバルアドレスで接続することにした。(いろいろな方法があるとは思うのだが。。。)
それでもグローバルアドレスを振ったLANボードを入れたマシンは、ローカルアドレスのLANポートもある。ローカルアドレスのLANポートからも外部ネットワークにつながっているので、VPNサーバーに行くパケットだけをグローバルアドレスを振ったLANボードの方に振り分けたい。
そこでやり方を検索したところ@ITの”route~ルーティングテーブルの表示/設定を行う”を参考に設定を行った。
こんな感じ。

route -p add VPNサーバーのIPアドレス mask 255.255.255.255 グローバル・ゲートウェイ・アドレス metric 1 if LANカードのネットワーク番号


うまくいって、2つのマシンから同時にVPNを張って、ライセンスを取得することができるようになった。よかった。。。
  1. 2008年05月03日 13:08 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Xilinx ISE9.2 SP4の不具合?(Synplify Pro使用)

Xilinx ISE9.2 SP4(サービスパック4)にしてから仕事用のプロジェクトをインプリメントしていなかったのだが、久しぶりにインプリメントしてみたところTranslateでエラーになってしまってインプリメントができなくなっていた。
インプリメントするマシンは今度乗り換えたWindows Vistaマシンと、以前から使用しているWindows XPマシンなのだが、どちらもISE9.2.04i をインストールしてあった。
Windows XPマシンは以前からISE9.2iでインプリメントしていた。しかし、SP4にしてからはインプリメントしていなかったと思う。Windows Vistaマシンは最近乗り換えたばかりで、まだ本格的にインプリメントしたことがなかった。
昨日、SBに修正がかかったので、インプリメントしてみようとしたところ、どちらのマシンもISE9.2.04i ではインプリメントがTranslate でエラーになってしまった。おかしい。少なくともXPマシンは以前にインプリメントできていたはずなのに。。。やはりSP4のせいだろうか???
エラーの原因はTranslate でISEから発行されるコマンドラインのコマンドだ。プロジェクトトップのVHDLファイルがあるのに、プロジェクトに入ってるCoregenで作成したXCOファイルがトップのようにコマンドを発行しているようなのだ。
うちの仕事用プロジェクトは論理合成ツールにSynplify Proを使用している。XSTに変更すると大丈夫のようなのだ。
ちなみに、インプリメントできないプロジェクトをISE9.1.03i でインプリメントすると正常にインプリメントできる。
一度、プロジェクトを作り直してみたり、Set as Top Module をやってみたが駄目だった。

最後の手段ということで、VistaのISE9.2i をいったん削除して、もう一度インストールし、サービスパックがかかっていない状態に戻したら正常にインプリメントできるようになった。

次にSP3をかけてみたところ正常にインプリメントすることができた。

SP4をかけたら、やはりだめだった。うちのプロジェクトをインプリメントするならばSP3までにしないとだめなようだ。

ISE10.1i はどうなのだろう?
  1. 2008年05月01日 17:41 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:5