2014.09.30
月刊特電Vol5を作りました
9月から特電に入っていただいた新しいスタッフの方の尽力により、月刊特電Vol5が完成しました。
いつもどおり、このような感じのフルカラー8Pの誌面にまとまりました。
内容は、
- MITOUJTAGの基板検査機能の開発
- XILINXの論理合成時間を短くする技
- AD変換器の特性を悪化させる原因
- ZYNQが起動するまでにハマったこと
- 読者の声
です。
今回はとりあえず400部作りました。
ものすごく納期の早い印刷屋さんにお願いしたので、明後日の10月2日(木)には特電に届く予定です。
届き次第、順次封筒に入れて発送するので、皆様のお手元には10月3日(金)~10月6日(月)ごろには届くと思います。
お楽しみに!
2014.09.25
ZYNQがPCI Express Gen2でリンクアップした
開発中のZYNQボード「Cosmo-Z」が、PCI Express Gen2でリンクアップしました。
Cosmo-Zは、パソコンのPCI Expressアドインカードではないので、パソコンには直接は挿さりません。パソコンとつなぐには、PCI Express External Cablingというものを使います。
PCI Express External Cablingというのは、PCI Expressの信号をそのままケーブルで引き出したものですが、Gen2対応でx1で市販されているものは見つかりませんでした。
そこで、EXPARTAN(Spartan-6LXTのFPGA評価ボード)の生基板を利用して作りました。
このような形で、パソコンのカードエッジとケーブルを直接、ラッピングワイヤでつないでいます。
このラッピングワイヤに5Gbpsの信号が流れるのですから、わくわくしますね。
なお、XILINXではREFCLKはコンデンサでカップリングした後で与えなければならないようです。バイアスすなわち直流成分はREFCLKの端子から出てくるので、パソコンのマザーボードとの間はコンデンサで切らなければなりません。
さて、ZYNQにPCI Expressのデザインを入れて、内蔵EndPointをリセットしたときのコアの出力する波形を見てみましょう。
ZYNQのPCI Express内蔵EndPointのコアでは、リセット後はPCI Express Gen2であっても2.5Gbps、つまりGen1の速さで動くようです。
コア自身では5Gbpsになりません。
Gen2の速度にするには、ユーザロジックが、コアの入力信号の、pl_directed_link_speedを'1'にして、pl_directed_link_change[1:0]を"10"にします。
すると、コアの出すLTSSMの値が16 (L0)から、1C(Recovery Rcvrlock)→1D(Recovery Rcvrcfg)→1E(Recovery Speed_0)→1F(Recovery Speed_1)へと変化しています。
そして、コアのcfg_link_status_current_speed[1:0]が"01"から"10"になります。cfg_link_status_current_speedの意味は後述します。
それからしばらくして、LTSSMがいろいろ動いた後、1D(Recovery Rcvrcfg)→20(Recovery Idle)→16(L0)と動きます。L0というのが通常動作状態です。
L0に戻るときに、コアが出力するpl_directed_change_doneという信号がアサートされるので、これを見てユーザロジックはpl_directed_link_speedを'0に戻し、pl_directed_link_change[1:0]を"00"に戻します。
cfg_link_status_current_speed[1:0]が"10"になっているということは、5Gbpsで動作していることを示しています。このステータスはPCI Express機能構造体の値で、01が2.5Gbps、10が5Gbpsを示しています。
これでめでたしめでたしです。
◆
さて、Gen2ではない、普通の市販のPCI Express Cabling拡張ボードを使った場合はどうなるでしょうか。例えば、このようなボードです。
こういったボードはPCI Express用のバッファが入っています。たいていはPericom社のバッファですが、上記のx1のものはGen1しか対応していないので、5Gbpsの周波数帯域はないでしょう。
やってみました。
リンク速度のスピードアップの指示を出すところまではコアの挙動は同じです。
doneがアサートされたときの速度が"01"を示していて、2.5Gbpsのままであることがわかります。
バッファを入れなくても、直結で十分なようです。
2014.09.21
ZYNQのGTXが動いた
Cosmo-Zで、ZYNQのGTXを動かすことができました。
GTXというのは、FPGAに内蔵された高速シリアルトランシーバで、6Gbpsの速度で動作します。(FPGAのパッケージとスピードグレードによっては約12Gbpsまで)
今日はこの動作を試してみました。
まず、基板上のコネクタの部分にラッピングワイヤを2本通します。
6GbpsならこのくらいでOK。
そして、CoreGenで、7 Series FPGAs Transceivers Wizardを起動します。
最初の設定項目は、クロックです。まず、Line Rateを6Gbpsにして、Reference Clockを150MHzにします。
そして、絵の部分のGTX_X0Y2を押して選択し、TX QuadPLL、RX Qual PLLを選択します。また、Use GTX X0Y2をチェックします。TX Clock SourceはREFCLK1 Q0を選びます。
これで、REFCLK1から入った150MHzのクロックがQPLLに入って、GTX2に配線され、6Gbpsで動くようになります。
次の画面では、データバスの幅と、8b/10bなどのエンコード方法を決めます。
6Gbpsで動かす場合はバス幅を32bitの150MHzにします。8b/10bを入れると内部バスは40bitになります。
16bit 20bitの設定だとデータレートが300MHzになって、これでも動かないことはないのですが、いろいろ回路設計に制約が生じます。
TXUSRCLKの設定は上の図のとおりにします。
次の設定画面はとても重要です。この中のRXSLIDEはチェックしてはいけません。
高速シリアル通信を受信したときに、データバスが16bitや32bitの場合、カンマ(K28.5)の入るバイトを最下位か最上位に合わせたいものです。
Spartan-6までは自力でフリップフロップを組み合わせて、カンマが最下位または最上にアラインメントされるようにずらしていたのですが、7シリーズではその必要はないようです。
上の図ののように、Align to Four Byte Boundariesと設定すれば、カンマは必ず最下位バイトにアラインメントされます。
これを手動でやるのがRXSLIDEだと思うのですが、RXSLIDEをチェックすると、受信データが正しく受け取れなくなります。どうやら、RXSLIDEをチェックすると、CoreGenの作るソースでRXMCOMMAALIGNENとRXPCOMMAALIGNENという信号がLに固定されてしまうようです。
これが原因だと思うのですが、受信したデータがすぐに化け化けになって読み取れなくなります。
RXSLIDEのポートを外に出さないようにしたら、うまくいきました。7シリーズではカンマを4バイト境界に自動的に合わせるしくみがあるのでそれを使いましょう。
そこから先の設定項目で特に難しいものはありません。
さて、実際に動作させてみました。QPLLのLOCKED信号で、TXとRXをそれぞれリセットします。RXRESETDONEがアサートされたら、TXUSERRDYをアサートします。
TXUSERRDYをアサートしてから、およそ2.8μ秒で受信データが安定するようになりました。このくらいの時間がかかるようです。
6Gbpsで送受信するには、FPGA内のデータは32bit 150MHzとなります。疑似乱数のXOR Shiftを使って乱数を送信し、受信し、エラーが起きたらRXERRORという信号を出すようにしました。
起動直後はカンマばかりを送信し、しばらくしてからデータを送ります。データを送り始めたら128周期でカンマを送ります。
拡大してみると、ちゃんとXorShiftの系列になっていました。
この記事がGTXで悩んでいる方の役に立てば幸いです。
2014.09.17
Power Over Etherの動作を確認
ZYNQ搭載のADCボード「Cosmo-Z」は、PowerOverEther(以下PoE)で給電することができます。
PoEというのは、Cat5eのイーサネットケーブルを通じて電力を供給するもので、IP電話やネットワーク監視カメラなどを想定した給電方法です。ACアダプタを別途つながなくてもよいのでとても便利です。
Cosmo-Zは人が容易に近づけない場所で放射線や宇宙線などを計測することを想定しているので、PoEができると便利です。
本日、PoEの動作が確認できました。
PoEの原理はとても簡単です。LANケーブルの4つの対の間はそれぞれトランスで絶縁されているので、PoEハブはその4本の対の間に直流を供給しています。
ただし、PoEに対応していないデバイスに電力を供給すると危険なので、ハブはデバイスがPoEに対応しているかどうかを調べています。
ハブがデバイスの存在を調べる方法はとても簡単で、それぞれの対の間に25kΩのシグネチャ抵抗があるかどうかを調べているだけです。だから、こんな治具を作っただけでもPoEデバイスとして認識してくれます。
この実験では電力供給ハブとしてNETGEAR Inc.のGS108PEを使っています。25kΩというのは、意外と適当でもよさそうです。
さて、Cosmo-Zの話に戻りましょう。
PoEは標準的には48Vで供給してきますので、そのままではFPGAに供給できません。ですから、PoEを受電するにはPoE専用のスイッチングレギュレータICを使います。
次の図は、実際にCosmo-Zで受電したときのイーサネットケーブル上の電圧波形です。
①のDetectionのフェーズでは、ハブは2.8~10Vの間の電圧をかけて電流を測ってきます。ここで測った25kΩの抵抗が挟まっているかどうかを探ってきます。実測では下側が4.38V,上側が6.62Vでした。
②のClassificationのフェーズでは、ハブは15.5~20.5Vの電圧をかけて、流れる電流を測ります。その電流によってデバイスのクラスを決定します。
- 0~4mAならばクラス0で、最大12.95W
- 9~12mAならクラス1で、最大3.84W
- 17~20mAならクラス2で、最大6.5W
- 26~30mAならばクラス3で、最大12.95W
- 40mAならばクラス4で、最大30W
です。
Classificationが終了すると通電開始です。PoEは44V~57Vを供給するのでスイッチングレギュレータICで5Vに直して使います。
Cosmo-Zは、LinearTechnologyのLTC4267CGN-3を使いました。LTC4267はクラス4にも対応しているそうなのですが、現時点ではクラス3までしか使ってはいけないそうで最大12.95Wです。つまり、5Vでは2A近くの電流が取り出せます。
現在、Cosmo-Zの消費電力は5Vで0.7Aくらいですから、まだまだ余裕がありそうです。フォトマルのHigh voltageくらい作れるかもしれませんね。
2014.09.12
バウンダリスキャンでDDR2 SDRAMをテスト
MITOUJTAGに基板検査機能を追加しています。
DDR2メモリの検査プログラムを手直しして、パラメタライズできるようにしました。
まずは、Spartan-6ボードのDDR2 SDRAM。これはCAS ADDRが10bit、BANK ADDRが2bit、RAS ADDRが14bitのものです。計26本のアドレス線があってデータバスは8bitなので、64MBytesの容量があります。
このSDRAMのデータ線と、アドレス線を1本ずつHにして、メモリに読み書きをします。
このようにして、データ線やアドレス線の切れている箇所を発見しようというわけです。
次はEXPARTAN-6Tに搭載されているDDR2 SDRAM。これはCAS ADDRが10bit、BANK ADDRが3bit、RAS ADDRが13bitのものです。計26本のアドレス線があってデータバスは16bitなので、128MBytesの容量があります。
こういう波形を、C言語で手順を書いてパソコンからJTAGを使ってFPGAを遠隔操作して実行します。
VHDLとかでFPGAのソースコードを書いて論理合成して実行するのではないので、非常に手軽にできます。
これらの検査が同じソースから行えるようになって、また、ネットリストから自動的にFPGAの端子の機能を推測できるようになったというわけです。
2014.09.11
特電のスタッフが2名増えました
今週、特電のスタッフが2名増えました。
当初は事務スタッフとして募集をかけていたのですが、集まったのはバリバリの理系の方でした。最近ではリケジョっていうんでしょうか。
ADCとかLPFとか、宇宙の話とか、基板のL/Sがどうとか、そんな会話が普通にできてしまいます。
総勢8名になって、この事務所もだんだん賑やかになってきました。
事務所も手狭になってきたので、来年こそは秋葉原駅の近くに引っ越したいと思います。
2014.09.09
MITOUJTAGの基板検査機能の開発
MITOUJTAGに基板検査機能を実装中です。
この数か月の成果がようやく結びついてきました。
今日、テスト用に用いたのが特電製の究極のRX62Nボード 。RXマイコンボードで、JTAG端子が出ていて、バウンダリスキャンができます。
MITOUJTAGで認識させるとこうなります。
さて、ここまでは今までのMITOUJTAGと同じです。
新しいMITOUJTAG 2.7では、ネットリストの読み込み機能があります。プロジェクトツリーの中にある「ネットリスト」で読み込めば、ネットリストを解釈してどの部品が何とつながっているかを把握してくれます。
ネットリストというのは、その基板を設計した者なら持っているはずのファイルです。回路の信号の結線情報と部品情報が載っています。いろいろな形式があるのですが、たとえば、なひたふが好んで使っているTELESISというネットリストの形式ではこんな感じです。
まず部品のリストがあって、
R5F562N8BDBG! RX62N_R5F562N8BDBG_1; U1 MT48LC4M32B2B5! MT48LC4M32B2B5; U2 LAN8720Ai! LAN8720AI; U3 UPD78F0731! UPD78F0731; U4
・・・
その後に接続情報があります。
78K_USBP; CN7.3 R36.2 R46.2 78K_VUSBREGC; C53.2 Tr2.2 U4.12 78K_X1; U4.8 X4.3 78K_X2; U4.7 X4.1 AGND; C3.1 C4.1 C56.2 C57.2 , L4.2 U1.A1 U1.B3 ALL_RESET; C49.2 J5.2 R30.1 SW2.1 , TP3.1 U4.5 AV3REF; C3.2 C57.1 L3.2 U1.B2 AV33; C4.2 C56.1 L2.2 U1.A2 AV33PLL; C2.2 C55.2 C58.1 L5.2 , U1.P2 BCLK; RP6.1 U1.R10 CNVSS; R8.2 U1.E2
・・・
そして、ツールメニューの中から「基板ファンクションテスト」を選びます。
すると、こんな画面が現れます。
最初の状態ではInfraというテストしかありません。ここで、「デバイスの割り当て」というボタンを押します。
すると、ダイアログが開いて、回路図上の「U*」という部品番号とJTAGチェーン上のデバイスとの対応付けを行います。今回はU1がJTAGチェーン上の唯一のデバイスです。
そうしたら、元の画面に戻って、「検査項目の追加」というボタンを押します。プルダウンメニューが開くので、SDR SDRAMを選択します。
SDR SDRAMという項目が増えました。
そうしたら、SDR SDRAMのところをダブルクリックするか、「デバイス・ピン」の割り当て、ボタンを押します。そして、「どのデバイスを検査しますか?」となっているところをU2: MT48LC4M32B25を選択します。
すると、上の図のように、ネットリスト中にある信号名から「アドレスっぽい」「データっぽい」という曖昧な検索によって自動的に機能を推測してくれます。
つまり、SDRAM_CAS#はCAS信号だろう、SDRAM_A10はアドレスの10番だろう・・というのを正規表現を使って推測して割り当てています。
で、FPGAのどの端子を動かせば、SDRAMのRASやCAS、DM等をうごかせるかというリストを作ってくれます。
CAS 1:A14 CKE 1:D15 CLK 1:B15 CS 1:A13 DM0 1:E14 DM1 1:E15 DM2 1:F14 DM3 1:G15 RAS 1:B12 WEN 1:B13 DQ 1:H12 1:G14 1:F15 1:F12 1:F13 1:E12 1:D10 1:A11 1:B9 1:B8 1:D8 1:C8 1:D7 1:C7 1:B6 1:A6 1:D14 1:C15 1:C14 1:D13 1:C13 1:B14 1:A15 1:C12 1:A12 1:B10 1:C10 1:A10 1:A9 1:A8 1:B7 1:A7 ADDR 1:N15 1:L13 1:L14 1:M15 1:K12 1:K15 1:J14 1:J15 1:J13 1:H14 1:H15 1:H13 BA 1:P15 1:M14
そして、Startボタンを押すと、自動推定されたピンを、あらかじめ決められたアルゴリズムで動かして、SDRAM等のファンクション・テストを行います。
SDRAMのテストは、データ線と、アドレス線がちゃんとつながっているかどうかを1本1本調べていくことができます。
このような形で、MITOUJTAGの基板検査機能が動きました。
ネットリスト中の信号名から、正規表現で機能を推定して、その端子につながるFPGA端子をバウンダリスキャンで動かして、SDRAMの書き込み信号や読み出し信号を作り出し、アドレス線、データ線、制御線にオープン/ショートがないかどうかを判断することができました。
ポイントは、ネットリストを読み込んだり、実行したいアルゴリズムを選んだだけで、一切キーボードから入力していないということです。
ついに、マウス操作だけで基板検査ができるようになったというわけです。
2014.09.06
ZYNQのXC7Z030でPCI Expressが動いた!
ZYNQ搭載のADCボード「Cosmo-Z」で、PCI Expressが動くようになりました。
Cosmo-Zは、PCI Express External Cablingというケーブルを使ってパソコンとPCI Expressでつなぎます。
非常にマイナーなケーブルなのですが、PCI Expressの純正な規格です。PCI Expressの信号線をケーブルでそのまま引っ張り出すものです。
Cosmo-ZのZYNQはXC7Z030なので、ギガビットトランシーバとPCI Express Endpointハードウェアマクロを内蔵しています。だから、すぐにでもPCI Expressが動かせるはずなのです。
で、CoreGenでPCI Express EndPointを作って実際にやってみました。
注目するのはLTSSMの値です。LTSSMというのは、PCI Expressがリンクアップを管理するステートマシンです。下のような遷移をたどってL0ステートに達すればリンクアップ完了というものです。
実際にやってみると、00→02→04という経路をたどって・・
その後、04→05→0B→0C→0D→0E→0F→10→11→15→16となりました。
LTSSMの意味はXILINXのug477_7Series_IntBlock_PCIe.pdfに書かれています。
- 0: Detect Quiet
- 2: Detect Active
- 4: Polling Active
- 5: Polling Configuration
- B: Configuration Linkwidth, State 0
- C: Configuration Linkwidth, State 1
- D: Configuration Linkwidth, Accept 0
- E: Configuration Linkwidth, Accept 1
- F: Configuration Lanenum Wait
- 10: Configuration Lanenum, Accept
- 11: Configuration Complete x1
- 16: L0
という経路で遷移したことがわかります。
その後、どんなコンフィギュレーションパケットが流れたかを見ることはできないのですが、Windows PCでは、VID=1BC8、DEVID=1068、ClassCode=110000のデバイスとしてはっきりと認識されました。
ということで、ZYNQのPCI Expressが認識されました!
ZYNQのGTXを動かす(1)
今週はZYNQのGTXを動かそうとして頑張っていました。
GTXを動かすには、まずGTXの中にあるPLLを動かさなければなりません。PLLには、チャネルごとにあるCPLLというものと、4つのチャネルを束ねる「クワッド」にあるQPLLというものがあります。
クワッドPLLは内蔵LCタンク回路で発振させているらしいのでジッタが少ないとかなんとか。
このどちらのPLLを使ってもいいのですが、どうもうまく動いてくれませんでした。
PLLを使う前にリセットをかけるのですが、ロック信号がどうしてもアサートされませんでした。それで1週間ほど悩んできたのですが、ついに謎が解けました!
原因は、MGTAVCCという電源には1.0Vを与えなければならないところを1.8Vを与えていたことでした。
なんて恐ろしい・・
でも、壊れていなかったみたいです。よかった。
そんで、PLLのロック信号を見てみました。
クワッドPLLがロックするまでの時間は180μ秒くらいでした。
クワッドPLLのほうがロックするまでの時間は長いようです。
各PLLをリセットしてから、FBLOSTなどの信号が出ている時間は30μ秒くらいでした。
2014.09.03
18bit A/D変換ボードの続き
先月18bit A/D変換ボードを発売したところ、あっという間に完売してしまったので、次のロットを製造しているところです。
最初に検査してから1か月くらい経ったのですが、経時変化はどうだろうということで再びいろいろと疑問に思っていたことを測定してみました。
まず、社内用の量産型の試作器004番。8月11日に、標準電圧発生器を使って簡易的にINLを測定した結果です。
CH1のゲイン誤差は0.055%、オフセットは1.6mV。CH2のゲイン誤差は0.052%、オフセットは0.25mVでした。INLは±50μVくらいでしょう。±1V以上でINLが悪化しているようにみえるのは、信号源の問題です。
今日測った結果は、
で、CH1のゲイン誤差は0.055%、オフセットは1.62mV。CH2のゲイン誤差は0.057%、オフセットは0.35mVでした。ほとんど変わっていません。むしろ、標準電圧源の変化のほうもあるのかもしれません。
また、別の試作基板000番では、CH1のゲイン誤差は0.063%、オフセットは0.26mV。CH2のゲイン誤差は0.07%、オフセットは1.5mVでした。CH1だから大きいとかそういうことはなく、回路の個体差といえます。
つまり、ゲイン誤差やオフセットの誤差は、経時変化はほとんどなく、回路に固有の値であることがわかりました。
次に、ゲイン誤差に影響しているのはVREFの電圧なのですが、ADCに与えるリファレンス電源を、ADCの内蔵リファレンスにしてみました。すると・・
このように、入力電圧が0Vの近辺で最大2mVくらいの誤差が生じるのでした。
だから、内蔵リファレンスは絶対に使ってはいけない。外付けリファレンスは必須なのです。
それから、今の回路は差動アンプにTHS4130というOPアンプを使っています。このTHS4130は電源電圧範囲が広く±5Vの電源で動かすことができます。しかし、THS4130は消費電流が15mAもあります。
低消費電力の回路にしたくなったので、THS4521に置き換えてみました。THS4521は1.6mAくらいしか消費しませんが、電源電圧は±2.5Vが最大です。ということは±2Vくらいまでの信号しか扱えません。
試作基板000番のCH1のTHS4130をTHS4521に置き換えてみると・・
ゲイン誤差0.048%、オフセット0.55mVなので、なぜか最初のより良いです。THS4521は意外と良いかもしれない。±2.2Vくらいまでは誤差なく出ています。
つまり、ADCの入力フルスケールを+2.048Vまたは+2.0Vにして、THS4521を使うことで低消費電力化が図れるかもしれません。
最後に、電源電圧のノイズがどの程度AD変換値に影響を与えるかという検証をしました。18bit A/Dボードの電源はLT3439という超低ノイズのスイッチング電源を使っているのですが、一般のスイッチング電源と比べてどうでしょうか?
下の図はLT3439を使ったスイッチング電源部です。はんだ付けしたり外したりを繰り返しているので、ちょっと汚くなっています。
データシートによれば、LT3439のリップルは0.2mVpp以下とのことです。まずLT3439を使った通常のボードで入力をGNDに落として測ってみます。
CH1の標準偏差は約2.1LSB(40μV)、CH2の標準偏差は約2.3(44μV)でした。
次に、オンボードのスイッチング電源を外して、秋月で売っているMCW03-05D05を使ってみました。
この電源のリップルは50mVppだそうです。入力0Vで測ってみると、
CH1の標準偏差は約2.2LSB(42μV)、CH2の標準偏差は約2.4LSB(46μV)でした。
つまり、電源ノイズが50mV増えると、測定されたノイズが2μVくらい増えました。25000分の1ですから電源のノイズが変換値に与える影響は-88dBくらいといえます。
OPA211のPSRRは1kHzで-100dBくらい。THS4521のPSRRは-80~-100dBくらい。AD7986のPSRRは不明ですが、だいたいそのくらいでしょう。
電源のノイズが変換値に与える影響は-90dBくらいと見積って、スイッチング電源のノイズが50mVppあれば変換結果に2μVくらいのノイズとして乗るというのは妥当だと思います。
この2μVを大きいとみるか、小さいとみるかはそれぞれです。この18bit A/D変換器ではフルスケールが±2.5Vもあるのですから。
もし20bitのA/D変換器を作るとしたら普通の(ノイズが大きい)スイッチング電源を使ってはいけないでしょう。
2014.09.01
MITOUJTAGのネットリスト読み込み機能の開発
MITOUJTAGのネットリスト読み込み機能を開発しています。目標は、ネットリストを読み込ませることで、各種の基板検査を自動的に行えるようにすること、です。
次のような感じになりました。
まず、例として特電Artix-7ボードのネットリストを読み込ませてみることにします。
Artix-7ボードのネットリストを読み込むと、その中に書かれているU?の部品番号の一覧が得られました。
このU3、MT41J256M8という部品をダブルクリックすると、デバイスの種類を選択するダイアログが出ます。
ここでクラスタデバイスを選びます。すると、どんな種類のデバイスかを選択するリストが出ます。
ここでDDR3 SDRAMを選びます。
すると、ソフトウェアはネットリスト中にある信号の名前をDDR3のものとして解釈します。
ピン DDR3_DQ0 は "データバス"。DQ(0) です
ピン DDR3_DM は "データマスク"。DMです。
ピン DDR3_DQ2 は "データバス"。DQ(2) です
ピン DDR3_DQSP は "データストローブP側"。DQSPです。
ピン DDR3_DQ1 は "データバス"。DQ(1) です
ピン DDR3_DQ3 は "データバス"。DQ(3) です
ピン DDR3_DQ6 は "データバス"。DQ(6) です
ピン DDR3_DQSN は "データストローブP側"。DQSPです。
ピン DDR3_DQ4 は "データバス"。DQ(4) です
ピン DDR3_DQ7 は "データバス"。DQ(7) です
ピン DDR3_DQ5 は "データバス"。DQ(5) です
ピン DDR3_RAS は "行アドレスイネーブル"。RASです。
ピン DDR3_CAS は "列アドレスイネーブル"。CASです。
ピン DDR3_CKE は "クロックイネーブル"。CKEです。
ピン DDR3_CS は "チップセレクト"。CSです。
ピン DDR3_WEN は "書き込みイネーブル"。WENです。
ピン DDR3_ADDR10 は "アドレスバス"。ADDR(10) です
ピン DDR3_BA0 は "バンクアドレス"。BA(0) です
ピン DDR3_BA2 は "バンクアドレス"。BA(2) です
ピン DDR3_ADDR3 は "アドレスバス"。ADDR(3) です
ピン DDR3_ADDR0 は "アドレスバス"。ADDR(0) です
ピン DDR3_ADDR12 は "アドレスバス"。ADDR(12) です
ピン DDR3_BA1 は "バンクアドレス"。BA(1) です
ピン DDR3_ADDR5 は "アドレスバス"。ADDR(5) です
ピン DDR3_ADDR2 は "アドレスバス"。ADDR(2) です
ピン DDR3_ADDR1 は "アドレスバス"。ADDR(1) です
ピン DDR3_ADDR4 は "アドレスバス"。ADDR(4) です
ピン DDR3_ADDR7 は "アドレスバス"。ADDR(7) です
ピン DDR3_ADDR9 は "アドレスバス"。ADDR(9) です
ピン DDR3_ADDR11 は "アドレスバス"。ADDR(11) です
ピン DDR3_ADDR6 は "アドレスバス"。ADDR(6) です
ピン DDR3_ADDR13 は "アドレスバス"。ADDR(13) です
ピン DDR3_ADDR14 は "アドレスバス"。ADDR(14) です
ピン DDR3_ADDR8 は "アドレスバス"。ADDR(8) です
回路図やネットリストは人間が作成しているものなので、データバスをDQという名前で付ける人もいれば、DATA[]という名前にする人もいます。括弧があったりなかったり、いろいろです。
そこで、この解釈の定義ファイルは正規表現を使って柔軟に記述できるようにしました。正規表現による信号名の定義はiniファイルに書かれていて、
[DDR3] descr=DDR3 SDRAM [DDR3.bus] DQ=データバス ADDR=アドレスバス BA=バンクアドレス [DDR3.pin] RAS=行アドレスイネーブル CAS=列アドレスイネーブル WEN=書き込みイネーブル CS=チップセレクト CKE=クロックイネーブル DM=データマスク DQSP=データストローブP側 DQSN=データストローブN側 CKP=クロックP側 CKN=クロックN側 ODT=オンチップ終端 [DDR3.regex] D[ATQ]?_?[\(\[]?([0-9]+)[\)\]]?=DQ A[DR]+?_?[\(\[]?([0-9]+)[\)\]]?=ADDR B[ANK]?A[DR]?_?[\(\[]?([0-9]+)[\)\]]?=BA RAS=RAS CAS=CAS WE[_]?[N]?=WEN CS=CS CKE=CKE (DM)|(DQM)=DM DQS[P+]?=DQSP DQS[MN-]=DQSN =CK[P+]?=CKP CK[MN-]=CKN ODT=ODT
となっています。
これならどんな回路であっても柔軟に対応できるのではないかと思います。
最近のコメント