FC2カウンター FPGAの部屋 2006年09月

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

FPGAの部屋

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

PSoCのデモボードが一応動いた

初めてのPSoCマイコン(CQ出版社)を買ってPSoCを合間に勉強していたが、この前パステルマジックから購入したMiniProg1を動かしてみた。
課題はセクション1のLEDの点滅。1HzでLED4をデューティ25%、LED1をデューティ50%で駆動する。PSoCのディジタルブロックを使ってPWMで波形を出力する。
本では独自のハードだったのでMiniProg1に付属しているボードMiniEval1用に出力ポートを入れ替えた。出力ポートの変更だけDevice Editorで変更してBuild ALLした。
その後、PSoC Programmerを立ち上げて書き込んだところ、見事動きました。MiniEval1ボードは電源もUSBの+5Vから取れるのでUSBコードをつなげばお気楽にテストすることが出来る。
今度はアナログブロックを使ってみたい。
PSoC_DEdit_060930.png

PSoC_MiniProg1_060930.jpg

  1. 2006年09月30日 21:59 |
  2. PSoC
  3. | トラックバック:0
  4. | コメント:0

ラッピングによるPCIバスボード

今度はラッピングによるPCIバスボードを作った時のもの。大体10年位前にプロトタイプとして作ったものだと思う。QFPパッケージを変換基板に実装してPGA形状に変換してラッピングソケットをはめてラッピングしている。
ラッピングと入ってもPGAのソケット付近は5層くらいにラッピングワーヤーが重なっていてラッピングとはいえども再度配線することが出来ないほどにワイヤーが埋もれている。
使用FPGAはアルテラのFLEX10K20、PCIバス用のICはPLXのPCI9060、CPLDにアルテラのMAX7000シリーズ、IDTのFIFOのIC、プロセッサのIntel960iDX、モトローラのPLLIC(MC88PL117)、EDO DRAM用SIMMソケット、IBMのIEEE1394用ICが実装してある。
このときは本当に1本の間違いもなく完動したのが本当に奇跡だった。200MHzのIEEE1394だったがパラックで動いたことに感動したものだ。下の写真で左下のコネクタが付いている基板がIEEE1394の入力用回路だ。なるべく配線を短くするように出来る限り高密度実装してある。更にその基板の下がIBMのIEEE1394用PhyICだ。
もう1つ当時の院生がY号を作っていたが、そっちは動かなかった。一度どこかの配線が間違っているとデバックは無理、私もデバックしてみたが、結局、最後までどこが間違っているかわからなかった。
こういうものは若いうちしか出来ない。もう絶対に無理と断言できよう。
PCIBUS_BOARD_1_060929.jpg

PCIBUS_BOARD_2_060929.jpg

  1. 2006年09月29日 21:08 |
  2. 回顧録
  3. | トラックバック:0
  4. | コメント:2

TTLで作ったマイクロプロセッサ(マイクロプログラム方式)

だいたい15年程度前だと思うのだが、その頃にマイクロプロセッサを標準TTLで作るという実験をやっていた。そのころにサンプルで作った基板を載せてみる。方式はマイクロプログラム方式でマイクロプログラムはEPROM (2716)に書いてあった。RAMはダラスセミコンダクタ社(今はマキシム社)のバッテリバックアップRAMを使っている。電池が入っていて製造から10年データが消えずに書き込みできるSRAMだ。もうすでに期限が切れているのでただのSRAMだが。。。
50PINのヘッダが2つ付いている。このヘッダはPC-9801パソコンのCバスパラレル拡張ボードにつながっていてソフトウェアでマイクロプロセッサのメモリに書き込んだり、RUNしたりとコントロールできるようになっている。
TTL_MP_1_060928.jpeg

TTL_MP_2_060928.jpeg

  1. 2006年09月28日 21:50 |
  2. 回顧録
  3. | トラックバック:0
  4. | コメント:0

LVPECLの水晶発振器のクロックをFPGAに入力する

DCMカスケード接続の罠(CLKDV編)で”CLKDVを2番目のDCMに入力する場合にはLOCKED信号を3クロック遅延して2番目のDCMのリセットに入れなければいけない”という罠にはまった。それだけでは終わりではなかった。こっちの完全なる勘違い勘違いもあった。
LVPECLの水晶発振器の出力を受けるからといってUCFファイルで入力ピンのP側だけにIOSTANDARD = LVPECL;だけ書いて済ませていた。N側はUCFに書いていない。それでエラーも出ていないからと思って安心していたのだが、実はMAPでワーニングが出ていてLVCMOSに変更したというメッセージが出ていた。そのため大きい基板の方はクロック出ていなかったようだ。小さい基板は1つは完全に正常に動作して、1つはクロックは出ていたが波形がおかしかった。すべてMAPでワーニングが出ていてLVCMOSに変更されていた。条件のよいものだけLVCMOSレベルでも動いたようだった。
更にV2ProのロケットIOのユーザーズマニュアルを参考に回路を組んでいた。水晶発信器はLVPECL出力だが終端をつけてあるのでFPGAではLVDSで受けると書いてあることに気がついた。
EG2121CA_tarm_060926.png

(Xilinx、RocketIO™トランシーバユーザー ガイドV2.1より転載)
失敗!!!ということでFPGAのHDLソースではIBUFDS_LVDS_25プリミティブで受けることにした。これはIとIB(入力と反転入力ポート)があるので、UCFにもP側とN側の2つともピンロケーションとIOSTANDARD = LVDS_25;を指定した。
そうしたところ、見事というか当たり前というかクロックが受けられるようになった。
今日の教訓はワーニングもちゃんと見ましょうという教訓です。でもワーニングが多すぎていちいちかまっていられないの実情です。

それからPSoC MiniProg今日来ました。なかなか面白そうです。いじってみたい気持ちがわいてきました。
  1. 2006年09月26日 21:19 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:4

PSoCのデモボードを買ってみた

PSoCのデモボードを買ってみました。とりあえずCコンパイラは16,000円で高いので旧バージョンのMINIPROG1+Designer4.0限定版コンパイラセット(PS-MINIPROG1-C)パステルマジックで買いました。まだ着てきませんが、今日当たり届くはず。。。
LCD付きRS-232C付きの基板はストロベリー・リナックスからPSoCマイコンボード(液晶付)が出ていたのでMINIPROG1+Designer4.0限定版コンパイラセットを使ってみてから購入することにしました。
windyさんアドバイスありがとうございました。
来るのが楽しみですが、いろいろと忙しいのでやる暇があるかどうかわかりません。マスターすればちょっとしたものがPSoC1個で出来るの良さそうです。アナログがあるのが良いしFPGAにセンサーやドライブ回路としてつけても良さそうですね。
後やりたいことはVirtex5を試したいですね。ISE8.2iが怪しいのが気になりますが、やはりISE6.3iが安定していて良いですね。
  1. 2006年09月26日 05:30 |
  2. PSoC
  3. | トラックバック:0
  4. | コメント:0

PSoCを試してみようと思った

FPGAの話題ではないのだが、EE TIMES JAPANという雑誌が送られてきているので読んでいると、(なかなか面白い)PSoCの記事があった。
その記事によると”PSoCは、レジスタ設定によってアナログとデジタルの周辺機能を、ユーザーが手元でカスタマイズできることを特徴とするマイコンである。”だそうだ。FPGAのアナログ回路付き、プロセッサ付きみたいなものか?
「PSoC Express 2.1」ツールを使うとグラフィカルモデルをつないでいくと”アナログ/デジタル周辺機能のカスタマイズやC言語のプログラム・コードを記述する作業を自動化する。”そうだ。
これは面白そうだ。ツールも無料なので早速Cypressに行ってツールをダウンロードしてインストールしてみた。まだ使っていないので良くわからない。
更にCQ出版のPSoCの本も書籍部で購入した。ちょっと古いので「PSoC Express 2.1」のことは書いていないが、それと連帯するPSoC Designerの使い方が書いてあるみたいだ。チュートリアルをやってみようと思っている。とても面白そうだ。アナログができるところがとても良い。
だが、いろいろ仕事や付き添いが忙しくやっている暇があるか?が問題。大きい基板はまだクロックが出ていないが実験が忙しく満足にトラブルシュートできていない。
でもやる気が出てきたので暇を見つけて勉強してみようと思う。PSoCのサンプルボード良さそうなのがあったら教えてください。
  1. 2006年09月21日 21:14 |
  2. PSoC
  3. | トラックバック:0
  4. | コメント:2

DCMカスケード接続の罠(CLKDV編)

昨日は大きい基板でFPGAから出力するクロックがことごとく出てこないという摩訶不思議な現象で困ってしまった。
最初にHDLを書いた時にはシミュレーションしたのだけど、小修正してシミュレーションしていないなということでしてみた。そうしたら見事に外部出力クロックが出ていない。これはどうしたことかと思った。
構成はクロックをDCMのCLKDVで1/2にして他のDCM(1倍)に入れて外部へ出力するクロックを作っている。CLKDVをもらっているのが悪いのかと思って直接水晶のクロックを受けてDCMでCLKDVを使って1/2倍にしてFPGAの外に出したところ出ました。(シミュレーション時)これで行ったがDCMのクロックフィードバックにBUFGを使うとCLKDVの出力に残り少ないBUFGを使えない。やはり使い放題のVirtex4が良いな。。。
クロック出力パッドまでの配線で相当遅延が入ってしまったが、計算の上キャンセルするように位相シフト値をセット。だけどディレイラインはやはり全部で10nsしかなのかな?そうなるとだめかもしれない。
やはりこれはアンサーあるだろうということでXilinxのアンサーを調べてみるとありました。
”Virtex-II/Virtex-II Pro、Clocking Wizard - カスケード接続された DCM で CLKDV を使用すると、LOCKED 信号が high にならない”
それによるとCLKDVを2番目のDCMに入力する場合にはLOCKED信号を3クロック遅延して2番目のDCMのリセットに入れなければいけないそうだ。ちゃんと書いておいてほしい。やはりこれで書き直したほうが良さそうかな?
ウイザードで作ればワーニング出すか回路を付け加えてくれるのかな?
上に書いたように、もう出来ているのでクロックが出ているかどうかだけでも確かめてみようと思う。

(2006/11/18)
CLKFXでも同様のようだ。CLK2Xも同様だと思われる。
  1. 2006年09月20日 20:24 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

外部フィードバックを使用しないFPGAからのクロック出力

FPGAから出力するクロックの位相FPGAから出力するクロックの位相2FPGA出力クロックの解析でFPGAから他のデバイスへクロック供給について考察?(そんな良いもんじゃないという話もあるが)したが、結局外部フィードバックをするとDCMへのクロック入力遅延とフィードバック入力遅延が合わずにFPGA外部に出力するクロックの位相が入力クロックと合わずに困ることがあった。
やはり外部フィードバックはやめて内部フィードバックで行くことにした。これだと遅延が計算できる。ディフォルトだとクロックパスは遅延をキャンセルするように自動調整されるので出力用DDRレジスタと出力パッドの遅延分だけキャンセルすればよいようだ。実際に計算して設定してみたら動作したので、書いてみたいと思う。

FPGA FAQからヒントを得てフィードバックを使用しないでFPGAからクロックを出力する方法を試してみた。図1にFPGA出力クロック生成回路を示す。
clkout_int_feedback_1_060919.png

以前の回路はクロック出力から出力したクロックをフィードバック入力から入力して入力クロックに出力クロックの位相を合わせる予定だったが、FPGA内のクロック入力パスとフィードバック入力パスの遅延が合わないので位相が合わなくなっていた。
今回はDCMのフィードバックはチップ内で行う。その代わり、フィードバックでキャンセルできないデータパス遅延(DDRレジスタと出力パッドの遅延、Tdatapath)はタイミングアナライザから割り出した遅延分をDCMの位相シフトで保障することで0ディレイを保証する。
DDRレジスタのFF0とFF1までのクロックパス(Tclkpath)の遅延の差が0.2ns程度あるようだが、より早いFF1の方で遅延を計算する。実際にタイミングアナライザで算出したPPC_CLK_OUTのクロックパス、データパスの遅延を図2に示す。

clkout_int_feedback_2_060919.png

図2でデータパス遅延とクロックパス遅延を足して実力係数(0.82)を掛けた遅延値をDCMの位相シフトで戻せば入力クロックと出力クロックは0ディレイになるはずである。戻すべき位相シフト値をTphとして下の式より計算する。

・PPC_CLK
Tph = (Tclkpath + Tdatapath) × 0.82 = (1.546 + (-0.378)) × 0.82 = 0.958ns
位相シフト値はクロックの周期をTとすると (Tph/T)×256 = (0.958/15)×256 = 16
PPC_CLKの位相シフト値は12(SDRAM_CLK0を位相0とするため)なので実際の位相シフト量は以下の値になる。
実際の位相シフト量 12 – 16 = -4

・SDRAM_CLK0
Tph = (Tclkpath + Tdatapath) × 0.82 = (1.551 + (-0.379)) × 0.82 = 0.961ns
位相シフト値はクロックの周期をTとすると (Tph/T)×256 = (0.961/15)×256 = 16
SDRAM_CLK0の位相シフト値は0(SDRAM_CLK0を位相0とするため)なので実際の位相シフト量は以下の値になる。
実際の位相シフト量 0 – 16 = -16

・SDRAM_CLK1
Tph = (Tclkpath + Tdatapath) × 0.82 = (1.527 + (-0.373)) × 0.82 = 0.946ns
位相シフト値はクロックの周期をTとすると (Tph/T)×256 = (0.946/15)×256 = 16
SDRAM_CLK1の位相シフト値は6(SDRAM_CLK0を位相0とするため)なので実際の位相シフト量は以下の値になる。
実際の位相シフト量 6 – 16 = -10

実際に位相を測定して計算値とどのくらいの誤差があるか調べてみた。やり方は今まで同様にテストポイントに各クロックをFPGA EditorのProbe機能を使用して接続してオシロスコープでPCIXクロックからの位相差を測定するという手順で行った。各クロックのテストポイントまでの遅延をタイミングアナライザで測定して実力係数をかけ実力値を求める。実力値にディフォルトでの位相シフト分を上乗せして実測値と比べてみた。それが表1だ。
clkout_int_feedback_3_060919.png

5.の最終算出値と6.のオシロスコープによる実測値があまり違わないので、私はこの方式が良いだろうと判断した。

<教訓>
FPGAからフードバック入力でフィードバックして出力クロックの位相を合わせようとする場合にクロック入力とフィードバック入力はFPGAダイの近くに配置する。クロック入力がダイの上、フィードバック入力がダイの下というように配置すると双方の配線遅延の差が大きくなって出力クロックの位相の狂いが大きくなる。
  1. 2006年09月19日 20:50 |
  2. FPGAからクロック出力
  3. | トラックバック:0
  4. | コメント:0

秋の花粉症

最近、秋の花粉症が出ている。今も目が痒い、花がつんつんする、くしゃみが出る。特に洗濯物をたたんでいる部屋に行くと症状がひどくなる。とても布団など干せないようだ。
一応耳鼻科に行って薬はもらってあるのだが、他の病気のため強い薬が使えないので、なかなか症状は改善しない。
去年よりも今年のほうが症状が強い気がする。年によって違うようだ。
いまどきマスクをしていると目立つ。秋の花粉症の人は少ないようだ。私はヨモギなどに反応していると思う。
  1. 2006年09月17日 21:16 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

昔の秋葉原

秋葉原はパソコンの秋葉原からメード喫茶やフィギュアなどの場所に変わっていっているそうだが、私にとって見ればその一昔前のジャンク屋が並んでいる秋葉原が懐かしい。
私が大学生の頃(27位前)はパソコンも黎明期でラジオ会館にBIT-INNがあって、その周辺にパソコンショップが少しあるくらいだった気がする。
大学生の頃はオーディオに凝っていて、アンプを作っていた。最初に作ったパワーアンプはハム音が出てトランスに銅テープを巻いたりしたが、なかなか消えなかった。終段のプッシュプルトランジスタのバイアス電流を決定する半固定抵抗を逆回しきってしまい、よくトランジスタを飛ばしたものだ。最初からバイアス電流最大で放置したので足につけた半田が溶けていた。
その頃は部品といえば秋葉原で、よく東大宮から買出しに行った。街角のジャンク屋を覗くのが楽しかった。どっから外してきたかわからないような巨大なコンデンサなどが並んでいるのを見るのが楽しかった。
大学4年の頃、卒論のためパソコンを作っていたが(その頃は自分で作るものだったのだ、Z80です)そっちのけで、オールFETパワーアンプを作っていた。鈴蘭堂の真空管用のシャーシを使って片チャンネルずつ作った。トランスはラジオ会館で見つけたビクターの名前の入ったバッタ品。AB級アンプにはちょっと電圧が高かったが安かったので妥協した。やはり組んでみると電圧が高すぎてアイドリング電流を流すと損失が大きく電流を減らした。コンデンサは街角のジャンク屋でいつかよだれをたらしながら見ていた巨大なコンデンサ。終段パワーFETは3パラだった。組み上げてみると10MHzで発信してしまったので、位相補正コンデンサを追加した。電源を入れると巨大なコンデンサに充電する突入電流で3Aのヒューズが飛んでしまうので、最初はAC100V側に抵抗をシリーズに入れてヒューズが飛ぶのを防止して10秒後に抵抗をリレーでショートするようにした。このアンプは今も現役で動いている。DCオフセットがどのくらいになっているかは計測していないが。。。その当時買ったスピーカーもウーハーのエッジがぼろぼろになっている。

秋葉エレクトリックパーツのお兄ちゃん(いまはおじちゃんだろうが)元気だろうか。友達が行くと親しそうに話していたが、私はシャイだったのでお話したくてもお話できなかった。いろいろわくわくするものがあったものだ。
  1. 2006年09月14日 21:01 |
  2. 回顧録
  3. | トラックバック:0
  4. | コメント:0

FPGAから他のデバイスへクロック供給

FPGAから出力するクロックの位相FPGAから出力するクロックの位相2FPGA出力クロックの解析でFPGAから他のデバイスへクロック供給について考察?(そんな良いもんじゃないという話もあるが)したが、結局外部フィードバックをするとDCMへのクロック入力遅延とフィードバック入力遅延が合わずにFPGA外部に出力するクロックの位相が入力クロックと合わずに困ることがあった。
やはり外部フィードバックはやめて内部フィードバックで行くことにした。これだと遅延が計算できる。ディフォルトだとクロックパスは遅延をキャンセルするように自動調整されるので出力用DDRレジスタと出力パッドの遅延分だけキャンセルすればよいようだ。実際に計算して設定してみたら動作した。
あまり関心はないかもしれないが、またレポートしようと思う。
  1. 2006年09月13日 21:29 |
  2. FPGAからクロック出力
  3. | トラックバック:0
  4. | コメント:0

基板の写真が撮れました

このところ実験で忙しかったので基板の写真を撮る暇がなかった。今日は実験がないので写真を撮ることになった。実は良い機械があるのがわかったので借用して撮影した。
picture_stand_060912.jpg

上の写真のような機械で2本の腕の先に電球(350W)を取り付け照らして下の台に置いた基板を柱に固定したカメラで撮影するものだ。院生と撮影したのだが機械を使っても基板やコネクタが光ってしまってなかなか良い位置が見出せない。
更に上についている蛍光灯が写るのではずして撮ってみた。いろいろ設定を変えて撮ってみたがどうもうまく行かない。てかったり一部分が暗くなったりしてどうもうまく行かない。そのうちにはずした蛍光管を落として割ったりして大変だった。
結局、曇りの自然光でスローシャッターで撮ってみた写真が一番良かった。これを使うことになりそうだ。
今このブログでお披露目は出来ないが、そのうちにお披露目しようと思う。
  1. 2006年09月12日 22:01 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:7

基板の写真を撮るのは難しい

新しく出来た基板の写真を撮っているのだが、うまく撮るのはとても難しい。光を当てるとコネクタが光ってしまう。そうでなくても白飛びしてしまう。更に光量を落とすと絞りを絞れない。絞れないと基板の近くと遠くでピントが合わない。(特に斜めにとると)
現在はカメラを手持ちで取っているのだが、やはり三脚固定、リモコンシャッター、スローシャッタースピードで撮ったほうが良いのだろうか?
基板の写真はみなさん、どう撮っていらっしゃるのだろうか?
  1. 2006年09月08日 21:13 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:5

SynplifyのKEEP制約の書き方

以前XSTでLUTを使用した遅延回路をインスタンスするときにKEEP制約を使用した。
SynplifyではKEEP制約を書いても遅延回路がなくなってしまっていた。SynplifyでのKEEP制約の書き方を検索してみたところ"Synplify FPGA Synthesis Reference Manual"の8-127に記述があった。それによると"syn_keep"だそうだ。
書き方は
attribute syn_keep of object : object_type is true ;
だそうだ。サンプルコードを下記に転載する。
syn_keep_sample_code_060906.png

  1. 2006年09月06日 15:52 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

FPGA出力クロックの解析

FPGAから供給するクロックの位相2での実測値をタイミングアナライザから計算した値と比較してみる。

DCM_timing_model_060905.png

図1のTinはクロック入力パッドからDCMのCLKINまでの遅延時間、Tfbはクロックフィードバック入力パッドからDCMのCLKFBまでの遅延時間、ToutはDCMのCLK0からDDRを通ってクロック出力パッドまでの遅延時間、TdcmはDCMでの遅延時間とする。
DCM_timing_chart_060905.png

遅延時間の関係を図2に示す。これはDCMのCLKINの位相とCLKFBの位相をDCMが比較して同一になるように制御することを前提とする。
 DCMは遅延を調整してCLKINとCLKFBの位相を合わせるため、周期(T)はTdcm+Tout+Tline+Tfbになる。Tin、Tout、Tfbをタイミングアナライザで計算して実際の性能との倍率(0.82)を掛けて実力値を計算する。そこからTdcmを計算できるのでクロック出力パッドまでの遅延(Tph)を計算することができる。
  Tdcm = T – Tout – Tline – Tfb ・・・・・(1)
  Tph = Tin + Tdcm + Tout ・・・・・(2)

>PPC_CLK
タイミングアナライザによる解析値に実力係数を掛け実力値を算出する
Tout = 4.101ns × 0.82 = 3.363ns
Tin = 2.688ns × 0.82 = 2.204ns
Tfb = 7.209ns × 0.82 = 5.911ns
Tlineを0.2nsとして式(1)からTdcmを計算する
Tdcm = 15ns – 3.367ns – 0.2ns – 5.911ns = 5.526ns
式(2)からクロック出力パッドまでの遅延(Tph)を計算する
Tph = 2.204ns + 5.526ns + 3.363ns = 11.093ns
PCIX_CLKに対する位相差は11.093 – 15 = -3.907ns

>SDRAM_CLK0
タイミングアナライザによる解析値に実力係数を掛け実力値を算出する
Tout = 3.634ns × 0.82 = 2.980ns
Tin = 2.620ns × 0.82 = 2.148ns
Tfb = 1.132ns × 0.82 = 0.928ns
Tlineを0.1nsとして式(1)からTdcmを計算する
Tdcm = 15ns – 2.980ns – 0.1ns – 0.928ns = 10.992ns
式(2)からクロック出力パッドまでの遅延(Tph)を計算する
Tph = 2.148ns + 10.992ns + 2.980ns = 16.120ns
PCIX_CLKに対する位相差は16.12 – 15 = 1.12ns

>SDRAM_CLK1
タイミングアナライザによる解析値に実力係数を掛け実力値を算出する
Tout = 9.383ns × 0.82 = 7.694ns
Tin = 2.632ns × 0.82 = 2.158ns
Tfb = 1.216ns × 0.82 = 0.997ns
Tlineを0.1nsとして式(1)からTdcmを計算する
Tdcm = 15ns – 7.694ns – 0.1ns – 0.997ns = 6.209ns
式(2)からクロック出力パッドまでの遅延(Tph)を計算する
Tph = 2.158ns + 6.209ns + 7.694ns = 16.061ns
PCIX_CLKに対する位相差は16.061 – 15 = 1.061ns

・PCIX_CLKと各デバイス用クロックの位相差
DCM_timing_table_060905.png


上の表のように実測値とタイミングアナライザからの計算値が合わない。計算が間違ってる、おかしいという指摘があったらよろしくお願いします。
  1. 2006年09月05日 20:55 |
  2. FPGAからクロック出力
  3. | トラックバック:0
  4. | コメント:0

小基板の動作確認OK

小さい基板の汎用FLASH ROMからのスレーブセレクトマップ・コンフィギュレーションも成功した。SDRAMのメモリテストもコンプリートしたし、LVDSも通信テストOK。今までと同様の66MHzでは大体動作するようになった。
まだ一部腑に落ちない点はあるのだが、これはおいおいシミュレーションで確認することにする。
昨日書いたFPGAから供給するクロックの位相のナゾはまだ解明していない。
今度は大きい基板だがこれはBUFGMUXの使いすぎでクロックが一部ローカル配線にまわってしまっている。これを手動で入るように工夫しないと。。。また現在はISE6.3iで作ってあるのだがISE8.2iにするとTranslateでTCLエラーで落ちる。後でサポートに聞いてみることにしようと思う。
  1. 2006年09月04日 21:41 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:4

FPGAから供給するクロックの位相2

FPGAから供給するクロックの位相で概要は説明したが、そのデータを示そうと思う。
やり方は最近のお仕事に書いておいたがもう一度書くと。
やり方はFPGA Editorを使って、各クロックのフィードバック入力ピンをテストポイントにつないでオシロスコープでPCIXの入力クロック(これもテストポイントに出力している)に対する各クロックの位相と比較してみた。
このままではテストポイントの各クロックのテストピンに行くまでの配線遅延が違っていて比較が難しいので次の手順で行った。

1.各クロックの入力パッドから出力パッドまでの遅延量をTiminig Analyzerで出した。
2.1.の値を実測値から求めた係数をかけて実力値にした。
3.PCIXクロックの出力との差分をとった。
4.実際の位相ダイアグラムに従って補正した。


clk_phase_table_060902.png

1.はタイミングアナライザで測定した入力パッドから出力パッドまでの遅延だ。それを実際に測定して決定したFPGA実力係数(0.82、備考参照)をかけて実際に近いと思われる実力値を決定する。それが2.だ。
次にその値をPCIXクロックからの相対値に変換する。これが実際に計測できるはずの値だが、一部位相シフトをしてあるので(4.)それを補正したのが5.だ。
5.の値が計測できるはずだがずれていたのでDCMの位相シフトで5.の値になるようにあわせた。このシフト値が6.だ。どの位、値がずれていたかを見るために4.と6.の差を取ったのが8.だ。

備考(補正値の算出方法)
内部クロックを直接テストポイントに出した信号と遅延素子を挿入した信号とを比較した。
test_point(7)とtest_point(4)の遅延の差はオシロの実測値で1.416ns。Timing Analyzerから求めた差は1.742nsなので実測値は算出値の0.82倍。

やはり実際にクロック位相はずれているようだが、なぜずれているかをタイミングアナライザから解析中だが値があわない。今度はその計算値を書くのでどこがおかしいかを指摘してほしい。
  1. 2006年09月03日 08:41 |
  2. FPGAからクロック出力
  3. | トラックバック:0
  4. | コメント:0

回路のモジュラー化

私はImpressの後藤氏の記事をいつも楽しみに読んでいる。氏のプロセッサやGPUに関する深い知識と考察力にいつも感心している。
ずいぶん前だがAMDのプロセッサの設計方法に関して興味深い記事があった。それは”設計のモジュラー化で市場に最適化したCPUコアを ~AMDの新戦略(1)”だ。
ここではAMDはインターフェースの定義によって性能が損なわれないように機能ブロックの定義のために膨大なエンジニアを投入したそうである。かくしてAMDのプロセッサはモジュラー化され、機能ブロックを組み合わせるだけで、性能を落とさずに新しいプロセッサが出来るそうだ。とてもすばらしいと思う。性能を落とさずにモジュラー化できればこんなすばらしいことはない。FPGAの回路を作る時にもどのようにモジュールに分けるかでいつも悩む。
これと同様のことをFPGAでもやりたいと思う。インターコネクトを汎用化しておいてモジュラー化して作りおいた機能ブロックを組み合わせることで回路を完成させる。これはすすたわりさんのSUSUBOXが一番近いか。
IP同士をつなぐ仕組みはどうなっているのだろうか?要求性能によってパフォーマンスが変更できるマッパーがIP間を結ぶことが出来ると良いかな?具体的には要求パフォーマンスと回路規模をパラメータに入力してインターコネクトを自動生成できると良いと思う。
  1. 2006年09月01日 21:40 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0