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

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

FPGAの部屋

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

OSERDESのお勉強

DDR2 SDRAMコントローラを作っていると、DQなどの入出力ピンの入力をISERDESにして、出力をODDRにすると、どうもPlace & Route でルートできないといわれてエラーになってしまう。
Virtex4のIOブロックの詳細回路図がないのかと思って探したのだが、良くわからなかった。そこでISERDESにはOSERDESを使っておけば問題ないだろうということで、OSERDESを使うことにした。でもOSERDESも内部構造がなぞである。Virtex4 FPGAユーザーズガイド(英語版)ににも載っていないし。。。
でもありました。Xilinx社のアプリケーションノート、XAPP721 ISERDES と OSERDES を使用した高性能DDR2 SDRAM インターフェイスにOSREDESの内部回路が載っていた。説明が少なくてなぞの端子があるが、大体このアプリケーションノートを見るとわかった。でも、もっともっとユーザーズマニュアルに詳しく書いて欲しいと思った。
下にXilinx社のアプリケーションノート、XAPP721 ISERDES と OSERDES を使用した高性能DDR2 SDRAM インターフェイスの3ページより転載します。
V4_OSERSES_1_080630.png

OSERDESをDDRモードにすると、最低4ビット入力となって、CLKDIVはCLK入力の1/2にする必要がある。そうなると、CLKDIVは100MHz、CLKは200MHzとなる。今までは、DDR2 SDRAMコントローラは200MHzで動作していたのだが、OSERDESを使う出力だけは100MHzでデータをロードする必要が出てきた。(ISERDESは200MHzで使うことができた)
最初からすべてのDDR2への出力にOSERDESを使うことを前提に100MHzで設計していたら良いのだろうが、200MHzで動く資産があるので、これを使うには、100MHzで動作するOSERDESとの同期を取る必要がある。200MHzで発行するWriteコマンドを100MHzのクロックエッジに同期させる必要が出てきたので、同期信号を作成した。この同期信号に同期してWriteを発行すれば、100MHzに対してのタイミングが確定されるので、OSERDESでDQとDQSを出力することが出来るようになる。
  1. 2008年06月30日 21:11 |
  2. Virtex4のお勉強
  3. | トラックバック:0
  4. | コメント:0

”ブラック会社に勤めているのだが、もう俺は限界かもしれない”を読んだ

DDR2もやっているが、従来のODDRとSERDESをつなぐとどうもだめで、最後のP&Rでルーティングできないというエラーになってしまう。やはり、ISERDESとOSERDESに書き換える必要がありそう。。。

今日の話は本を買って読んだという話だ。
ネットでも読んだのだが、新潮社から”ブラック会社に勤めているのだが、もう俺は限界かもしれない”の書籍が出たので買って、もう一度読んでみた。やはり、感動した。一気に読んでしまった。
ネタばれは書きませんが、興味のある方はネットでも落ちているので、読めます。
私も昔々その昔、某社に勤めていて、そのころは100時間残業当たり前、最高160時間くらい残業していたが、”ブラック会社”はその比ではないようだ。残業時間で言うと300時間くらいか? 結局、某社は辞めて、今の職場に移ったのだが、良かったのか悪かったのか良くわからないが、あのまま仕事をしていたら体の弱い私では、体が持たなかっただろうから良かったのだと思う。ブログも書けなかっただろうし。。。
  1. 2008年06月28日 19:03 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

ISE(Project Navigator) で外部エディタを使用する

Doxygenでは日本語の文字コードをUTF-8にする必要があるが、そうするとISEのEditorで表示すると文字化けしてしまう。
どうしようか悩んだが、Xilinxのアンサー、”13713 - Project Navigator - Project Navigator でのサードパーティ HDL エディタのサポート”をみてISE(Project Navigator) の外部エディタとしてNotepad++を使うことにした。

1.設定の仕方は、Project Navigator のEditメニューからPreferences...を選ぶ。
2.Preferencesダイアログが出てくるので、ISE General の下の Editorsを選択する。
3.Text editorフィールドのEditor をCustom にCommand line syntax: に下のコマンドを設定する。

{C:\Program Files\Notepad++\notepad++.exe} -n$2 $1


ISE_ext_editor_080625.png

パスは各環境でのNotepad++のパスを指定する必要がある。(当たり前)
これで、XSTでエラーのときにもNotepad++でエラーの行番号に飛ぶことができる。
ちなみにNotepad++のCommand Line Arguments のページ。
  1. 2008年06月25日 12:21 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

DCMを使わないクロックを使いIOB内のFFでデータを受ける2

”DCMを使わないクロックを使いIOB内のFFでデータを受ける”でDCMを使わないクロックでのデータの受け方を練習したが、クロックを遅延させる方法はどうも危ない気がするし、違う方法を模索してみることにした。
ISE9.2.03とSynplify9.2、FPGAはVirtex2pだ。今どきVirtex2を使っている人は少ないと思うが、Spartan3にも適応できるので良いと思う。(もっとVirtex4などの方が簡単なのだが。。。)
状況は、他にチップからのデータを向こうの受信クロックで受ける。チップが多いのでDCMは使用できない。クロックはBUFGMUXのみを通してFPGA内に供給している。
その時に、セットアップ時間を制約しているが、(1.5ns) それだけだと、制約をオーバーしたり、マイナスになることがよくある。それで、ちょうどうまくセットアップ時間を確保するにはどうすればよいかを探る。
たとえば下のTiming Analyzerのようにマイナスになってしまう。こうなるとホールド時間がきつくなってしまう。さらに結構ばらついてしまう。
Virtex2p_recv_data_1_080624.png

とりあえずばらつきを防止するために、Floorplannnerでデータの最初のFFの位置を全部固定した。
Virtex2p_recv_data_2_080624.png

パッドと最初のFFを割り当てるスライスの間が離れると配線の自由度が上がるので、値がばらつくだろうという考えのもとに、パッドからなるべく近くのスライスに配線した。
これでインプリメントしてみた。
Virtex2p_recv_data_3_080624.png

そうするとデータ入力のセットアップ時間が同じような値でマイナスになった。これをプラスにするためにデータ入力のIOBDELAYを入れることにした。

INST "lvds_rx0_data[*]" IOBDELAY=BOTH;
INST "lvds_rx1_data[*]" IOBDELAY=BOTH;
INST "lvds_rx2_data[*]" IOBDELAY=BOTH;
INST "lvds_rx3_data[*]" IOBDELAY=BOTH;
INST "lvds_rx4_data[*]" IOBDELAY=BOTH;
INST "lvds_rx5_data[*]" IOBDELAY=BOTH;
INST "lvds_rx6_data[*]" IOBDELAY=BOTH;


これでインプリメントすると、セットアップ時間内にばらつきが少なくおさまった。
Virtex2p_recv_data_4_080624.png

前と同じパッドのTiming Analyzer解析結果はこうなった。
Virtex2p_recv_data_5_080624.png

IOBDELAYを入れたので、入力パッドの遅延が増えている。次のFFまでのネットの遅延は減っている。総合的にちょうど良くなった。これでもう少し、セットアップ時間を増やしたいときにはFloorplannerで固定するFFの位置を離せば良いと思う。あまり離すと遅延値がぶれてしまう可能性があると思うが。。。もしどうしても必要があるのならば、FPGA Editorで配線も固定する必要があるかもしれない。
  1. 2008年06月24日 17:32 |
  2. FPGAチップ内の配線方法
  3. | トラックバック:0
  4. | コメント:0

ISEでSynplify9.2を使ったインプリメントの場合の制約

ISE9.2.03とSynplify Pro9.2で、ファイルを整理してプロジェクトを作り直していたら、Timing Analyzerに出てくるクロック周期がおかしい。
クロック周期のピリオド制約をコメントアウトして、もう一度Constraints Editor で制約しようとしたら、もうすでに15.151nsという制約が入っていて、Constraints Editor でもう一度7.5ns に書き換えようと思っても書き換えることができない。
Virtex2p_constraint_1_080624.png

これはなんだろうと思っていたら、そういえば、前もこんなことで悩んだことがあるような気になってきた。
確か、これはSynplify Proの制約ファイルが出力されてしまって、Translateで解釈されてしまうのが問題だったような。。。
というわけでISEのSynplify Proのプロパティを出してみると、Write Vender Constraint File にチェックが入っていた。
Virtex2p_constraint_2_080624.png

やはり、これだった。早速、Write Vender Constraint File にチェックを外して、プロジェクト名.ncf ファイルを削除した。
Virtex2p_constraint_3_080624.png

これで、インプリメントしたところ正常な制約が適用されているようだった。良かった。

自分のブログを検索すると、”お手軽にISEでSynplifyを使う上での注意点”で同じ過ちをしていた。
どうも、同じ過ちをしてしまう。。。

しかし、Write Vender Constraint File がデフォルトでチェックされているのいただけない。デフォルトではチェックなしにしてほしい。
  1. 2008年06月24日 12:16 |
  2. その他のFPGA用ツールについての話題
  3. | トラックバック:0
  4. | コメント:0

DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想3

”DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想2”で、ISERDESでDQを受けられるようにDDR2 SDRAMコントローラを変更してやってみたのだが、どうもPlace & Routeでルートができなくて止まってしまう。
どうやらDQSのOLOGICに、クロックの違うFFが入っているのと、OLOGICのResetに他のOLOGIC内のFFと違ったReset信号が入っているので、ルートできないようだ。
実は、OLOGICにインスタンシエーションされるとだめなのは、以前からわかっていて、これらのFFをOLOGICにインスタンシエーションされないようにしておいたはずなのだが、ISERDESを使った過程でOLOGICの中に組み込まれてしまっているようだ。ちなみにDQSとDQの入力はISERDESに変更したが、出力の方はODDRを使用している。そのせいかな?
いろいろXSTのディレクティブを使用したりしてみたが、どうもうまくいかない。昨日1日それでつぶしてしまった。。。
もしかすると、何か制限があるかもしれないので、もう一度、マニュアルを読み返すか? ラッツネットになっているFPGA Editorを見てどうなっているか解釈してみるつもりだ。
出力もOSERDESにしてみようかとも思う。
もしそれでもだめならば、今のところは、DQはDDR2 SDRAMのクロックの立ち上がりに同期して出力し、DQSはそれよりも位相を90度送られて出力している。だが、DQの方を位相を90度進ませて(270度)出して、DQSをDDR2 SDRAMのクロックの立ち上がりに同期して出力すると、DQSはOLOGICにすんなり入るようにVerilogソースを書き換えられると思うので、それも考慮の対象としたい。
  1. 2008年06月23日 12:42 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

マウスコンピュータを買いました

今日マウスコンピュータでパソコンを注文した。OSはWindows XPにする予定。

ご注文先: MouseComputer
構成------------------------------------------------------------------------
【 CPU 】AMD Athlon(TM) X2 5200 デュアルコア・プロセッサ (2x512KB L2キャッシュ/2.7GHz/AM2/B)
【 メモリ 】【Mouse/メモリ増量キャンペーン】DDR2 SDRAM 3072MB PC2-6400(1024MBx2+512MBx2)
【 HDD1 】【Mouse/HDD倍増キャンペーン】320GB SerialATAII 7200rpm 8MBキャッシュ
【 マザーボード 】AMD 780G チップセット搭載マザーボード
【 VGA 】ATI RADEON(TM) HD 3200 (オンボード/デュアルモニタ対応/DVI-Dx1/D-Subx1)
【 ドライブ1 】DVDスーパーマルチドライブ(DVD±R 2層書込/DVD±Rx18/-RWx6/+RWx8/RAMx12/SATA/B)
【 3.5ドライブベイ 】★\2,940★[カードリーダー]弊社指定ブランド 15メディア対応(microSDスロット装備)/ブラック
【 ケース 】マイクロATXタワー(ブラック)
【 LAN 】[オンボード] 10/100/1000BASE-T GigaBit-Ethernet LAN
【 電源 】【弊社指定】400W電源 (LGA775対応/24pin/ATX)

これでまともなスピードでアプリが動くだろうと思う。Linuxでもいいかな?でもModelSimやVeritakが動かないのでだめだ。。。
カードリーダだけつけて、ミニキーボードに変更した。
  1. 2008年06月20日 21:48 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:5

DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想2

だいぶ間が空いてしまったがDDR2 SDRAMの話題。

”DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想”でDQSをクロックとしてDQをサンプルする方法について述べたが、シミュレーション波形で、いったいどんなことを想定しているのかを詳しく説明しようと思う。
まずは、DDR2 SDRAMのクロックがFPGAから出力されるのに、どのくらい時間がかかるかだが、いままでのDDR2 SDRAMコントローラをインプリメントしてTiming Analyzerで見てみると。。。
DDR2_SDRAM_dqs_3_080617.png

クロックの内部遅延を入れないと2.917ns かかっている。
次に、DQ15 の入力遅延を見てみると、下のようになっている。
DDR2_SDRAM_dqs_4_080617.png

入力の遅延は2.734ns だ。ちなみにIDELAYは入っているが遅延値は0ns になっているはず。
今回のDDR2 SDRAMコントローラは内部クロックでDQをサンプルしているので、クロックはDCMからきているのだが、これを今回のBUFIOからクロックをもらったとすると、以前のスピードグレードとパッケージが違うVirtex4だが、下の図のようになる。(これは”Virtex4のリージョナルバッファ(BUFIO、BUFR)”のデータを使用している)
BUFIO_BUFR_1_060622.png

ここでbufio までの遅延値が必要なので、0.833ns + 0.296ns + 0.107ns = 1.236 ns 。概算なのでスピードグレード-11 と -10の差を考慮して1.3ns 程度としておく。
ここで、プリント基板の配線遅延を考えないDDR2 SDRAMからのリードデータをFPGAが受ける時に遅延は、下のようになると思う。
FPGA内部クロックに対するFPGAからDDR2 SDRAMクロックの出力遅延(DDR2 SDRAMはDLLでこのクロックにロックしているものとする)2.917ns + FPGAの入力端子からIOBの入力データサンプル用FFまでの遅延 2.734ns - FPGAのリージョナルクロック入力から入力したクロックのIOBの入力データサンプル用FFまでの遅延 1.3ns = 4.351ns。これに、プリント基板の配線を伝搬する遅延をFPGAからDDR2 SDRAMまでの配線を行き帰りで10cmとすると、約0.7ns 配線遅延が加わるはずなので、合計約5ns FPGAの内部クロックからDDR2 SDRAMのリード・データを受けるまでに遅延することになるはずだ。もちろん、先ほどの4.351ns はワースト・ケースで実力値はもう少ないだろうと思う。実力値を8割とすると3.481ns とする。これに配線遅延を含めると4.18ns。
どちらにしても、クロック周波数を200MHz とすると、ほとんど1周期遅れていることになる。
以上の結果を踏まえてIOBのDDR FFのイネーブル・タイミングを考察してみようと思う。
シミュレーション波形を見てほしい。
DDR2_SDRAM_dqs_1_080617.png

黄色で囲まれたclk がFPGAの200MHz内部クロックだ。青の資格で囲まれたsdram_clk はFPGAのクロック出力から出たクロックがDDR2 SDRAMで受けられる時の位相のクロックだ。(ただし、遅延値は上の計算値を反映してはいない。遅延量は少ない)
sdram_clk を元にDDR2 SDRAMがリード・データを出力しているのが、赤の四角(囲うところを間違えてしまったが)ddr2_dq_sdram で、そのクロックがddr2_dqs_sdramだ。それらが、伝搬してFPGAの入力バッファの遅延値をあらかじめ加えたものが(ただし、遅延値は上の計算値を反映してはいない)ddr2_dq_fpga、そのクロックがddr2_dqs_fpga(緑色の四角)だ。
上のFPGAの遅延量の考察から、CASレイテンシ3クロックより、1クロック遅れの位置で3クロック分の長さのイネーブルをIOBのDDRレジスタのイネーブルとして入れれば、ddr2_dqs_fpga が1クロック分0にドライブされる位置でイネーブルされるはず。
考えている回路のブロック図はこんな感じ。今まで考察してきたのはCEにどんな信号をいれるかだ。
DDR2_SDRAM_dqs_5_080619.png

ここでふと考えてみたら、シミュレーション結果からもわかるが、データが終了するところでクロックも終わってしまう。ということはIOBのDDRレジスタに最後のデータが残ってしまう可能性もあるということか???ということは、ダメだな。。。最後のクロックだけIOBのDDRレジスタからデータを取ればいいかもしれないが、それでは、CEがアクティブになっている時間にDQSがハイインピーダンスになっていないことを保証する必要があるし。。。

考えてみたが、少し考え方を変えて、下のようにブロック図を変更する。
DDR2_SDRAM_dqs_6_080619.png

これで分散RAM FIFOはフリーランの内部クロックで動作するので、全部のデータがとれるはず。ただし、これでうまくいくためには、DQとDQSをうまいこと内部クロックでとれるところまで遅延する必要がある。その検討のためにも、実際に使うデバイスでBUFIOとBUFRの遅延値を確認する必要がありそうだ。

さらに、これまででは、IOBのFFは単一クロックで動作するものとして、内部クロックで受けるところは内部のSLICEを使用していた。Virtex4ではISERDESとOSERDESがあって、ISERDESではIOB内で別のクロックで受けられるようだ。それならばISERDESを使った方が確実といえる。
ISERDES、OSERDESを使ったDDR2 SDRAMコントローラについては、Xilinx社のアプリケーションノート、XAPP721 ISERDES と OSERDES を使用した高性能DDR2 SDRAM インターフェイスのデータキャプチャに載っている。
ISERDES、OSERDESについてはVirtex4 FPGAユーザーズガイド(日本語版)にも載っているが、ISERDESの詳しいことは載っていなくてなぞだった。しかし、最新英語版をたまたま見てみたら、良く書いてあるようだ。
また日本語版ではなく、英語版を見ろという教訓ができてしまった。
  1. 2008年06月19日 12:41 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

Firefox3への移行

家で今使っているFirefox2をFirefox3に変更したのだが、下のようなダイアログが出てクラッシュしてしまう。
firefox3_080618.png

Firefoxがいつも使っているブラウザなので、とっても痛い。ブックマークもキャッシュも使えないので痛すぎる。早くバグフィックスしてくれないものか?一応、レポートは送信しておいた。
  1. 2008年06月18日 19:58 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:2

話題のXilinx Spartan™-3A Evaluation Kitのその後

”話題のXilinx Spartan™-3A Evaluation Kit”Xilinx Spartan™-3A Evaluation Kit を発注した。
今日、アヴネット ジャパンさんからメールが来て、入荷が早くなったそうだ。新しい入荷予定は7月10日とのことだった。だいぶ早くなったようだ。
しかし、振込口座を聞いているのだが、教えてくれない。これは入荷直前まで教えてくれないのかな?

2008/06/18:今日、振込口座の案内メールが来ました。夜に振り込み手続きしようと思います。
  1. 2008年06月17日 18:04 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

家の庭のその後

DDR2 SDRAMコントローラをやろうと思っていたのだが、プロバイダのことやもろもろで出来なかったので、庭のその後をレポートしようと思う。
まずは、ラズベリーだが、見事に実ってきた。まずは全体写真。
niwa_1_080615.jpg

ラズベリーの実のアップ。
niwa_2_080615.jpg

結構取れました。ラズベリーは完熟するとするりと取れます。あまり完熟させると腐ってしまいますが。。。軽く引っ張って取れるのがちょうど良いです。
niwa_3_080615.jpg

少し食べてみましたが、甘酸っぱく独特の風味が。。。おいしいです。あまり食べないようにして、水で洗って冷凍庫に。。。後でジャムになります。

ブルーベリーはだいぶ大きくなりましたが、まだ食べられません。濃い紫色に色づいて着たら食べごろです。まだ青いです。
niwa_4_080615.jpg


柿も実の形になってきましたが、まだまだ小さいですね。今年はたくさんなっているようです。秋が楽しみ。。。
niwa_5_080615.jpg


最後にブラックベリーの花です。これもまだまだですね。
niwa_6_080615.jpg


後は、びっくりグミなどもありますが、食べてみたら、すごい渋いです。どうやって食べるのかな?もしかすると食べられない???
  1. 2008年06月15日 18:07 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:4

リンク切れが発生している可能性があります

今入っているプロバイダから.ZIPファイルを移している関係でリンク切れが発生している可能性がありますので、ご容赦ください。
FC2WEBを有料版に変更したのですが、やはりFC2ブログからの.ZIPファイルの直リンクはだめかもしれません。その場合は間に1つWebファイルをかますしかないかもしれません?

#やはりZEROに入り続けることにしようか?
  1. 2008年06月15日 06:10 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:5

話題のXilinx Spartan™-3A Evaluation Kit

なつたんさんSim's blogさんで話題のXilinx Spartan™-3A Evaluation Kitをアブネット ジャパンに発注しました。
なにしろPSoCが載っていて、Spartan-3Aも載っているなんて、私にとっては理想的です。ただRAMが何も載っていないのが残念ですが、なんといっても価格が税込み6,279円ですし、買いやすいです。納期が8月上旬ということで残念ですが、DDR2がまだ終わっていないのでちょうど良いでしょう。。。
USB経由でもコンフィギュレーションできるみたいですが、PSoC経由で約20分かかるところはいいただけないですが、SPIのテストやI2Cのテストなどをしてみたいですね。
まだ、発注だけでお金も払っていませんが、今から来るのが楽しみです。
  1. 2008年06月13日 22:32 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:2

プロバイダの変更

昨日、YahooBBの勧誘の電話がかかってきた。ちょうど、プロバイダをZEROから変更しようとしているところだったので、話を聞いたのだが、やはり、ホワイトコール24で家族の携帯(ソフトバンクです)から無料で家の電話にかけらるのが良い。乗り換えようと思っているのだが、1つ支障がある。
それは、このブログからダウンロードするソースなどのZIPで固めたファイルは、私のプロバイダのZEROにおいてあって、ダウンロードできるようにしてあるのだが、YahooBBのホームページサービスのジオシティーズだと、直接ブログからのリンクではエラーページが表示されダウンロードできない。これをどうしようかと思っている。まあ、1つジオシティーズにページを挟んでやれば良いかもしれない。
FC2もホームページ無料版ではZIPなどを置けないし、ダウンロードできないようだ。有料版だとOKなのかどうか良くわからない。
どのようにしようか迷っているのだが、何か良い情報があったら教えてください。
あと、YahooBBのバックボーン回線などはどうなんでしょうか?ADSL50Mに入ったは良いが、実質前より実効スループットが落ちたなどということはないのかな?
ISE Webpackとかを落とすのに速ければ速いほど良いと思っている。
ちなみに家の環境は局舎から460m、減衰は7dBとすごく良い環境だ。今はNTTのADSL24Mにはいっているが、モデムのダウンリンクスピードは15Mbps位になっている。

それに飛び込み電話営業でYahooBBに入っても大丈夫なのか?怪しいような気がする。入る場合はYahoo直接にしようかな?

なぜ、慣れた環境のZEROから離れようとしている理由の一端は、ZEROが今までのメールアドレスやホームページアドレスを一方的に、強制的に変更しようとしていることも理由の1つです。ホームページアドレス変えられると、いままでのブログ中のダウンロードファイルのURLを1つ1つ変える必要があります。ZEROでは前にも1回メールアドレスを変更されたことがあって、こんなに強制的に変えるのならば、また変えることもあるんじゃないかと思っています。経営母体がいろいろ替わって行っている様だし、この際、その辺を変更されそうもない大手に入ろうと思って画策しているわけです。
  1. 2008年06月13日 05:33 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:6

FPGAの部屋の月別アクセス数

FPGAの部屋の月別アクセス数を見ると、順調に伸びているようだ。
これは世の中がFPGAにより関心が集まっているという証拠なのだろうか?マスク代も高くなり、LSIは作りづらくなっているようだし、FPGAの集積度も上がっているので、注目度もあがっているのかもしれない。
Access_month_080612.png

そういえば、DWMやインターフェースを書店で定期購読しているのだが、最近マイコンの搭載基板や関連記事などが多く、FPGAはあまり注目されていないようだ。これは、FPGAの特徴がよりハイエンドに移ってきて雑誌の付録としてつけるわけには行かなくなったからだろうか?それもとも、付録基板は宣伝なので、新しく売り出したいチップがないと、やりたくないということもあるかもしれない。今のところ使う予定はないのだが、1つ作ってみたいものがあるので DDR2が終わったら作ってみたい。
DDR2もなかなか進まないが、5月に引いた風邪からアレルギー気味になったようで、まだ咳が出るときがある。医者にアレルギーの薬を飲めといわれているので、飲んでいるのだが、それを飲むと眠くなってしまう。やる気も下がっているのかもしれない。まあ、梅雨が過ぎれば直ると思うので、無理せずにやっていこうと思っている。
  1. 2008年06月12日 05:24 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

FPGA Editor video tutrial

検索していたら、youtubeでFPGA Editorのビデオ チュートリアルを見つけた。
1/3はFPGA Editorの紹介ビデオだった。私は英語は苦手だが、大体何をやっていかがわかった。大体知っていることばかりだったが、attribボタンとinfoボタンは使ったことがなかったので、新鮮だった。
2/3, 3/3は、ネットを切ったり、つなぎなおしたりなどだった、FPGA Editorでこんなことをしたくないなと思う事柄だった。できるのは知っているが、こんなことをやり始まったら、まるで自分でPlace & Routeをやる羽目になりそう。
3/3の最後でprobeの仕方を説明していた。これはこのブログでも”FPGA Editorの使い方3”で説明している。
  1. 2008年06月11日 05:42 |
  2. FPGA Editorの使い方
  3. | トラックバック:0
  4. | コメント:4

DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想

DQSをクロックとしてDQのリードデータを受けるDDR2 SDRAMコントローラの構想を考えている。とりあえず、DQSを半クロック程度DQから遅延させてIOBのDDRレジスタのクロックとしてリードデータを受ける。(これは後でちょうど良いところに自動調整するようにしても良い)
それを1つのDQSあたり、8ビットの分散RAM使用の非同期FIIFOで受け取る。その入っているデータを見てみようと思っている。非同期FIFOのwrite enable が一番問題だ。
本当はリードタイミング(CASレイテンシ=3)をDDR2の配線分遅延した信号を非同期FIFOのwrite enable に加えられれば一番良いのだが、遅延用の配線がない。とりあえずリードタイミングと同じタイミングで1クロック長くwite enable 信号を入れれば、DQSが1クロック分LOWに落ちているので、1クロック分余裕ができることになる。
つまり、配線遅延分+セットアップ時間が1クロック分(5ns) に収まっていれば、データが受けられるはずだ。この方針で行ってみようと思う。
まずは、1つデータを書いてみて、非同期FIFOのどの位置にデータが入っているかを確認してみたいと思う。
Virtex4のリージョナル・クロック・バッファを使うことにする。Virtex4のリージョナル・クロック・バッファついては、このブログでお勉強している。
DQSをクロックとして、IOB用にはBUFIO、非同期FIFOのWrite側のクロックにはBUFR で供給することになると思う。そのためには専用のIOパッドにDQSがピンアサインされている必要がある。それにクロックを供給できるリージョンも限定されているので、DQの位置も重要だ。
まずはこれを調べてみることにした。
今までのDDR2 SDRAMコントローラのプロジェクトでFloorplan Area /IO/ Logic - Post - Syntesis をダブルクリックして、見てみることにした。
DQS_sampled_DDR2_controller_1_080608.png

クロック・リージョンを確認するために、View Clock Regions アイコンをクリック。それで見るとクロック・リージョンが違っているのはddr_cke とddr_csb だけだった。これだったら大丈夫そうだ。
DQSもIOクロック・バッファ用のパッドに配置されているようだ。当たり前といえば当たり前だろうが。。。
これで確かめてみることができそうだ。
  1. 2008年06月08日 19:50 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

娘の高校の文化祭

今日は、下の娘と奥さんと私のお袋とで、上の娘の文化祭に行ってきた。
最初から、かなり力が入ったのぼりがいっぱい。
bunkasai_1_080607.jpg

門も気合が入っていた。
bunkasai_2_080607.jpg

結構にぎやかな様子。奥は大人気のクレープ屋さん、忙しそうだった。
bunkasai_3_080607.jpg

表で食券を買って中に入った。中は高校生のパワーがあふれていた。本当ににぎやかな雰囲気。自分の高校生時代を少し思い出してしまった。あのころこのくらい、興奮していたかも。。。若いって良い。。。
娘のクラスの企画はお化け屋敷。
bunkasai_4_080607.jpg

結構雰囲気を出していた。この赤いペンキで描くために、私が娘に貸したベストと、娘の制服スカートに赤ペンキがついてだめになっている。かなり、損害が出でいるせいもあって?力作だった。4人で中に入ろうとすると、怖がりの下の娘がどうしてもいやだとのこと。
それじゃといって、奥さんと私とで入った。中は、少し薄暗い雰囲気で、黒いビニールが一面に引かれていた。中は迷路のようになっていて、最初の角で雪女が出てきた。うちの奥さん、大絶叫。。。この悲鳴のほうがお化けよりも怖い。。。こんなに怖がりとは知らなかった。私は雪女に、良くできていますねということで握手を求める。(これが、娘たちからセクハラだと攻められてしまった。自分としては、毛頭そんなつもりはないのに。。。)
その後も、奥さん、大絶叫の悲鳴。そっちのほうがよほど怖い。途中でトンネルがあったがどこがトンネルかわからないといっていたら、お化けが教えてくれた。
本当に、散々なお化け屋敷だった。しかし、奥さんの悲鳴が一番面白かった。また、行きたい。

その後、バルーンアートのお店に入り、次に迷路クイズ、だいぶ高校生のエネルギーに疲れてきたので、甘味どころに行って串団子(60円)を食べる。出たら隣が、御茶屋というかお抹茶のお店、浴衣で出迎えてくれたので、また入ってしまった。お抹茶と和菓子(180円)が出た。ここは和の雰囲気で雰囲気が良い。囲炉裏?やお茶の道具などがおいてあって、立ててくれる。お茶の先生もいるようだ。おすすめ。
下の娘がアリスのゲームをやったところで、そろそろ帰ることにした。
焼きそば(160円)を3個購入し、下の娘だけ、クレープ(120円)を購入した。もう1時くらいに焼きそばは売り切れ終了だった。
その後、近くのショッピングセンターで焼きそばを食べ、食品を購入して帰宅した。

結構楽しかった。高校生のエネルギーを感じた1日だった。私も遠い昔、こんなころがあったんだな~。。。
ちなみに、文化祭では高校生の娘には会えませんでした。
  1. 2008年06月07日 21:34 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:6

禁断の壷

昨日、高校生の娘がノートパソコンがネットにつながらないといってきた。
IEでインターネットが見られないということだった。それはおかしいと見てみると、アンテナは3本立っているし。。。無線LANではないのだろうか?
確かにIEで見るとサーバーが見つかりませんになっている。
コマンドプロンプトから ipconfig をすると、ちゃんと DHCPで IPアドレスも取れている。ためしに nslookup でアドレスを引いてみるとIPアドレスも見える。どこがおかしいのだろうか?と思った。
ためしにFireFoxをあげてみると、ちゃんとネットが見えるじゃないですか?それではなぜ???
試しに hostsファイルを見るといっぱい書いてある。よくよく見るとこれは spybot が書いたようだ。まずいURLをローカルホストにアサインして見えなくしているのか?でもこんなところに書かないで欲しい。ウイルスかと思って、どきどきしてしまった。
そして、なんか怪しそうなソフトを見つけた。禁断の壷、名前からして怪しそう。これはなんだと娘に聞いたら2CH関係のソフトだそうな。あやし~~~い。
早速アンインストール。でもやはりIEではネットが見られない。
FireFoxで検索したらわかりました。やはりプロキシを設定しているので、一度インストールして禁断の壷でプロキシをはずさないといけないそうだ。その通りにすると、やっとIEでネットが見えました。もちろんプロキシが設定されていても、禁断の壷を起動しておけば、IEでネットをみられるのだが、 落とすと当然だめ。
さらに、禁断の壷はスパイウェアという情報もあり、これはもう絶対使うなということを娘に通達した。でもプロキシを設定しているファイルはどこにあるんだろうか?

本当に何をインストールしているかわからないので、怖い。
パソコンは、こういうことでもないと絶対に見せてくれない。ソフトをインストールできない一般ユーザーに権限を落としておこうか?危なすぎる。
  1. 2008年06月06日 21:06 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:4

VHDLで32ビット以上のカウンタの生成

巷でVHDLで32ビット以上のカウンタの動作がどうなるか?と話題になっている。私もライブラリを読んでみたところどうなるのか非常に興味があったので、ISE9.2.03i と ModelSim SE 6.1eでやってみた。
まずはコードを下に示す。

-- library ieee;
-- use ieee.std_logic_1164.all;
-- use ieee.std_logic_unsigned.all;
-- use ieee.std_logic_arith.all;

-- package my_package is
    -- type LONG is range -9223372036854775807 to 9223372036854775807;
    -- subtype NATURAL_LONG is LONG range 0 to LONG'HIGH;
    -- type UNSIGNED_LONG is array (NATURAL_LONG range <>) of STD_LOGIC;
    -- function "+"(L:STD_LOGIC_VECTOR; R: LONG) return STD_LOGIC_VECTOR;
-- end my_package;

-- package body my_package;
    -- function "+"(L: STD_LOGIC_VECTOR; R: LONG) return STD_LOGIC_VECTOR is
--        pragma label_applies_to plus
        -- variable result  : STD_LOGIC_VECTOR (L'range);
    -- begin
        -- result  := UNSIGNED_LONG(L) + R;-- pragma label plus
        -- return   std_logic_vector(result);
    -- end;
-- end my_package;

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
-- library work;
-- use work.my_package.all;

entity long_test is
    port(
        clk : in std_logic;
        reset : in std_logic;
        long_out : out std_logic_vector(63 downto 0)
    );
end long_test;

architecture RTL of long_test is
   signal a, b : std_logic_vector(63 downto 0);
begin
    -- a(63 downto 32) <= (others => '0');
    -- a(31 downto 0) <= (others => '1');
    -- b(63 downto 32) <= (others => '0');
    -- b(31 downto 0) <= (others => '1');
    
    process(clk, reset) begin
        if reset='1' then
            a <= "0000000000000000000000000000000011111111111111111111111111111110";
        elsif clk'event and clk='1' then
--            a <= a + "0000000000000000000000000000000000000000000000000000000000000001";
            a <= a + 1;
        end if;
        long_out <= a;
    end process;
end RTL;


上の方のコメントはinteger ではなく longを宣言してみようとした残骸だ。
ModelSimでコンパイルしたら最初にLONGの値の範囲がinteger'high に入っていないと言われてエラーになってしまい、諦めた。
a を reset のときに0x00000000FFFFFFFE を入れて、そのカウントアップ、32ビット目にカウントアップするかどうかをチェックした。足し算の方法としては、STD_LOGIC_VECTOR <= STD_LOGIC_VECTOR + STD_LOGIC_VECTOR と STD_LOGIC_VECTOR <= STD_LOGIC_VECTOR + INTEGER でやってみた。結論から言うとModelSimではどちらも32ビット目に桁上げされた。
VHDL_64bit_counter_1_080605.png

次にa の記述をSTD_LOGIC_VECTOR <= STD_LOGIC_VECTOR + STD_LOGIC_VECTOR に変更してインプリメントしてみた。XSTのスケマではよくわからなかったので、PARしてFPGA Editorで見てみたら、31ビット目から32ビット目のカウンタにキャリーチェーンが来ていて、カウンタとして動作しそうだった。
VHDL_64bit_counter_2_080605.png

そこで、Post-Place & Route のシミュレーションをやってみた。その結果が下。
VHDL_64bit_counter_3_080605.png

多少不定の時間はあるようだが問題ないようだ。
次に33ビット目に桁上げするかどうかも確かめてみたが、これも Behavioral と Post-Route シミュレーションで確かめてみたが問題ないようだ。

よって、64ビットカウンタは動作するのではないか?と思う。(実際に実物ではやっていないが。。。)
ちなみに、タイミング制約は、なしでやってみている。
  1. 2008年06月05日 12:40 |
  2. VHDLの書き方
  3. | トラックバック:0
  4. | コメント:0

ModelSimの日本語表示

今日、新しいパソコンでインストールしたModelSimを動かしてみたら、日本語が化けていた。
ModelSim_SE_Japanese_1_080602.png

あれ?どうやって日本語を表示するんだっけ?と前のパソコンの設定を見てわかりました。忘れないようにブログに書いておきます。
1.まずは、ToolsメニューからEdit Preferences... を選択する。
ModelSim_SE_Japanese_2_080602.png

2.Preferencesダイアログが開くので、Window List から Source Windows を選択し、Source Color Scheme から Files を選択する。
3.右下のEncoding フィールドのCustom Encoding for Read のチェックを入れてshiftjisを選択。(Doxygenの関係でutf-8の場合はそれを選択)
4.OKボタンをクリック。
ModelSim_SE_Japanese_3_080602.png

そうすると日本語が見えました。
ModelSim_SE_Japanese_4_080602.png

今度は忘れないようにしないと。。。
ブログに書いておいたので検索できるだろう。。。
  1. 2008年06月02日 19:15 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

Floorplan IO (複数の制約ファイル(UCF)を使った制約)

ISE10.1で複数の制約ファイル(UCF)を使えるということで、試してみた。現在やっているSuzaku-VのDDR2 SDRAMコントローラのインプリメントでUCFファイルを2つに分けてみた。それは、Suzaku_DDR2_test_ddr2.ucf と Suzaku_DDR2_test_dev.ucf だ。それぞれDDR2用のIOの制約とそれ以外のIOの制約に分けている。タイミング制約はSuzaku_DDR2_test_dev.ucf に入っている。
ISE_constraints_1_080601.png

これをProcessesペインからFloorplan IO - Pre-Synthesis を選択してFloorplan Editorを起動する。この辺のインターフェースはISE10.1から変更されている。大体、どんなことをするのかが予測がつく。
ISE_constraints_2_080601.png

起動すると下のような画面が出てくるが、すでにすべてのIOがアサインされているはずなのに、ddr2_clkとddr2_clkb が空になっている。
ISE_constraints_3_080601.png

これはddr2_clk と ddr2_clkb の宣言の仕方に問題があるようだ。パラメータに値が入ると下のように宣言される。

output [0 : 0] ddr2_clk;
output [0 : 0] ddr2_clkb;


要素数が1のバスになってしまう。UCFでの定義は下のようになっている。

NET "ddr2_clk<0>" LOC = "A16" ;
NET "ddr2_clkb<0>" LOC = "B16" ;


それでFloorplan Editorは同じものと認識できないようだ。
実際にインプリメントすると、ちゃんと制約で指定したIOにアサインされているので、ISE本体では大丈夫のようだ。ただ、Floorplan Editorでは表示できない。(今のところ、ISE10.1.01、こんな記述でいいのかどうかは別問題として。。。)
これを利用して、Floorplan Editor でIOをアサインして、どっちのUCFに制約がかかれるかやってみた。
Floorplan Editorでドラック&ドロップして、ddr2_clk と ddr2_clkb の出力IOを指定した。
ISE_constraints_4_080601.png

これでSaveしてみる。ちなみにSave As... はできないようだ。
そうすると、Suzaku_DDR2_test_ddr2.ucf に下のような制約が追加された。

NET "ddr2_clk" LOC = A16;
NET "ddr2_clkb" LOC = B16;
NET "ddr2_clk" IOSTANDARD = "SSTL18_I";
NET "ddr2_clkb" IOSTANDARD = "SSTL18_I";


ISE上で上のUCFにつかされるのだろうか?
とりあえず、制約を追加したままインプリメントしても、Translateでワーニングが出るだけで、他の問題はないようだ。

ところで、DQの最適な遅延値を測定するDDR2 SDRAMコントローラは結局失敗しましたが、誰か要りますか? もし試してくれる方がいらっしゃるのだったら載せようと思う。
  1. 2008年06月01日 18:56 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:2