« 2014年8月 | トップページ | 2014年10月 »

2014.09.30

ET2014に出展します!

特殊電子回路は、2014年11月19日~21日にパシフィコ横浜で開催されるEmbedded Technology 2014、「ET2014」に出展します。

Et2014_banner

今回のブースの場所は、F-12番です。(一応確保できたみたいです)

Et2014_position

F-12番というのは、左側の奥の方で、XILINXの近くのあたりです。

今回の出展では、

  • ZYNQ搭載のA/D変換ボード「Cosmo-Z」
  • 新開発のAD360ボード
  • MITOUJTAGの新しい基板検査機能

を予定しております。

どんな製品かみてみたい、なひたふに一言いいたい、なんでも結構です。

多くの皆様のご来場をお待ちしております。

| | コメント (0)

月刊特電Vol5を作りました

9月から特電に入っていただいた新しいスタッフの方の尽力により、月刊特電Vol5が完成しました。

いつもどおり、このような感じのフルカラー8Pの誌面にまとまりました。

Gettoku5

内容は、

  • MITOUJTAGの基板検査機能の開発
  • XILINXの論理合成時間を短くする技
  • AD変換器の特性を悪化させる原因
  • ZYNQが起動するまでにハマったこと
  • 読者の声

です。

今回はとりあえず400部作りました。

ものすごく納期の早い印刷屋さんにお願いしたので、明後日の10月2日(木)には特電に届く予定です。

届き次第、順次封筒に入れて発送するので、皆様のお手元には10月3日(金)~10月6日(月)ごろには届くと思います。

お楽しみに!


| | コメント (0)

2014.09.25

ZYNQがPCI Express Gen2でリンクアップした

開発中のZYNQボード「Cosmo-Z」が、PCI Express Gen2でリンクアップしました。

Pciegen2_1

Cosmo-Zは、パソコンのPCI Expressアドインカードではないので、パソコンには直接は挿さりません。パソコンとつなぐには、PCI Express External Cablingというものを使います。

PCI Express External Cablingというのは、PCI Expressの信号をそのままケーブルで引き出したものですが、Gen2対応でx1で市販されているものは見つかりませんでした。

そこで、EXPARTAN(Spartan-6LXTのFPGA評価ボード)の生基板を利用して作りました。

Pciegen2_2

このような形で、パソコンのカードエッジとケーブルを直接、ラッピングワイヤでつないでいます。

このラッピングワイヤに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"にします。

Pciegen2_3

すると、コアの出す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の意味は後述します。

Pciegen2_4


それからしばらくして、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拡張ボードを使った場合はどうなるでしょうか。例えば、このようなボードです。

Extboards

こういったボードはPCI Express用のバッファが入っています。たいていはPericom社のバッファですが、上記のx1のものはGen1しか対応していないので、5Gbpsの周波数帯域はないでしょう。

やってみました。

リンク速度のスピードアップの指示を出すところまではコアの挙動は同じです。

Pciegen2_5

doneがアサートされたときの速度が"01"を示していて、2.5Gbpsのままであることがわかります。

Pciegen2_6


このようにGen2にはなりませんでした。

バッファを入れなくても、直結で十分なようです。

| | コメント (0)

2014.09.21

ZYNQのGTXが動いた

Cosmo-Zで、ZYNQのGTXを動かすことができました。

GTXというのは、FPGAに内蔵された高速シリアルトランシーバで、6Gbpsの速度で動作します。(FPGAのパッケージとスピードグレードによっては約12Gbpsまで)

今日はこの動作を試してみました。

まず、基板上のコネクタの部分にラッピングワイヤを2本通します。

Gtx6g

6GbpsならこのくらいでOK。

そして、CoreGenで、7 Series FPGAs Transceivers Wizardを起動します。

Gtx6g_1

最初の設定項目は、クロックです。まず、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で動くようになります。

Gtx6g_2

次の画面では、データバスの幅と、8b/10bなどのエンコード方法を決めます。

6Gbpsで動かす場合はバス幅を32bitの150MHzにします。8b/10bを入れると内部バスは40bitになります。

16bit 20bitの設定だとデータレートが300MHzになって、これでも動かないことはないのですが、いろいろ回路設計に制約が生じます。

Gtx6g_3

TXUSRCLKの設定は上の図のとおりにします。

次の設定画面はとても重要です。この中のRXSLIDEはチェックしてはいけません。

Gtx6g_4

高速シリアル通信を受信したときに、データバスが16bitや32bitの場合、カンマ(K28.5)の入るバイトを最下位か最上位に合わせたいものです。

Spartan-6までは自力でフリップフロップを組み合わせて、カンマが最下位または最上にアラインメントされるようにずらしていたのですが、7シリーズではその必要はないようです。

上の図ののように、Align to Four Byte Boundariesと設定すれば、カンマは必ず最下位バイトにアラインメントされます。

これを手動でやるのがRXSLIDEだと思うのですが、RXSLIDEをチェックすると、受信データが正しく受け取れなくなります。どうやら、RXSLIDEをチェックすると、CoreGenの作るソースでRXMCOMMAALIGNENとRXPCOMMAALIGNENという信号がLに固定されてしまうようです。

Gtx6g_5

これが原因だと思うのですが、受信したデータがすぐに化け化けになって読み取れなくなります。

RXSLIDEのポートを外に出さないようにしたら、うまくいきました。7シリーズではカンマを4バイト境界に自動的に合わせるしくみがあるのでそれを使いましょう。

そこから先の設定項目で特に難しいものはありません。

さて、実際に動作させてみました。QPLLのLOCKED信号で、TXとRXをそれぞれリセットします。RXRESETDONEがアサートされたら、TXUSERRDYをアサートします。

Gtx6g_6

TXUSERRDYをアサートしてから、およそ2.8μ秒で受信データが安定するようになりました。このくらいの時間がかかるようです。

6Gbpsで送受信するには、FPGA内のデータは32bit 150MHzとなります。疑似乱数のXOR Shiftを使って乱数を送信し、受信し、エラーが起きたらRXERRORという信号を出すようにしました。

起動直後はカンマばかりを送信し、しばらくしてからデータを送ります。データを送り始めたら128周期でカンマを送ります。

Gtx6g_7

送受信間の遅延は168nsくらいでした。

拡大してみると、ちゃんとXorShiftの系列になっていました。

Gtx6g_8


というわけで、6GbpsでのGTXの動作確認ができました。

この記事がGTXで悩んでいる方の役に立てば幸いです。

| | コメント (0)

2014.09.17

Power Over Etherの動作を確認

ZYNQ搭載のADCボード「Cosmo-Z」は、PowerOverEther(以下PoE)で給電することができます。

PoEというのは、Cat5eのイーサネットケーブルを通じて電力を供給するもので、IP電話やネットワーク監視カメラなどを想定した給電方法です。ACアダプタを別途つながなくてもよいのでとても便利です。

Cosmo-Zは人が容易に近づけない場所で放射線や宇宙線などを計測することを想定しているので、PoEができると便利です。

本日、PoEの動作が確認できました。

Cosmozpoe

PoEの原理はとても簡単です。LANケーブルの4つの対の間はそれぞれトランスで絶縁されているので、PoEハブはその4本の対の間に直流を供給しています。

ただし、PoEに対応していないデバイスに電力を供給すると危険なので、ハブはデバイスがPoEに対応しているかどうかを調べています。

ハブがデバイスの存在を調べる方法はとても簡単で、それぞれの対の間に25kΩのシグネチャ抵抗があるかどうかを調べているだけです。だから、こんな治具を作っただけでもPoEデバイスとして認識してくれます。

Poe_con

この実験では電力供給ハブとしてNETGEAR Inc.のGS108PEを使っています。25kΩというのは、意外と適当でもよさそうです。

さて、Cosmo-Zの話に戻りましょう。

PoEは標準的には48Vで供給してきますので、そのままではFPGAに供給できません。ですから、PoEを受電するにはPoE専用のスイッチングレギュレータICを使います。

次の図は、実際にCosmo-Zで受電したときのイーサネットケーブル上の電圧波形です。

Poe_proto

①の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くらい作れるかもしれませんね。

| | コメント (0)

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にして、メモリに読み書きをします。

Ddr2_8bit

このようにして、データ線やアドレス線の切れている箇所を発見しようというわけです。

次はEXPARTAN-6Tに搭載されているDDR2 SDRAM。これはCAS ADDRが10bit、BANK ADDRが3bit、RAS ADDRが13bitのものです。計26本のアドレス線があってデータバスは16bitなので、128MBytesの容量があります。

Ddr2_16bit

こういう波形を、C言語で手順を書いてパソコンからJTAGを使ってFPGAを遠隔操作して実行します。

VHDLとかでFPGAのソースコードを書いて論理合成して実行するのではないので、非常に手軽にできます。

これらの検査が同じソースから行えるようになって、また、ネットリストから自動的にFPGAの端子の機能を推測できるようになったというわけです。

| | コメント (0)

2014.09.11

特電のスタッフが2名増えました

今週、特電のスタッフが2名増えました。

当初は事務スタッフとして募集をかけていたのですが、集まったのはバリバリの理系の方でした。最近ではリケジョっていうんでしょうか。

ADCとかLPFとか、宇宙の話とか、基板のL/Sがどうとか、そんな会話が普通にできてしまいます。

総勢8名になって、この事務所もだんだん賑やかになってきました。

事務所も手狭になってきたので、来年こそは秋葉原駅の近くに引っ越したいと思います。

| | コメント (0)

2014.09.09

MITOUJTAGの基板検査機能の開発

MITOUJTAGに基板検査機能を実装中です。

この数か月の成果がようやく結びついてきました。

今日、テスト用に用いたのが特電製の究極のRX62Nボード 。RXマイコンボードで、JTAG端子が出ていて、バウンダリスキャンができます。

Mj_pcb_1

MITOUJTAGで認識させるとこうなります。

Mj_pcb_2

さて、ここまでは今までのMITOUJTAGと同じです。

新しいMITOUJTAG 2.7では、ネットリストの読み込み機能があります。プロジェクトツリーの中にある「ネットリスト」で読み込めば、ネットリストを解釈してどの部品が何とつながっているかを把握してくれます。

Mj_pcb_3

ネットリストというのは、その基板を設計した者なら持っているはずのファイルです。回路の信号の結線情報と部品情報が載っています。いろいろな形式があるのですが、たとえば、なひたふが好んで使っている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
・・・

そして、ツールメニューの中から「基板ファンクションテスト」を選びます。

すると、こんな画面が現れます。

Mj_pcb_4

最初の状態ではInfraというテストしかありません。ここで、「デバイスの割り当て」というボタンを押します。

すると、ダイアログが開いて、回路図上の「U*」という部品番号とJTAGチェーン上のデバイスとの対応付けを行います。今回はU1がJTAGチェーン上の唯一のデバイスです。

Mj_pcb_5

そうしたら、元の画面に戻って、「検査項目の追加」というボタンを押します。プルダウンメニューが開くので、SDR SDRAMを選択します。

Mj_pcb_6

SDR SDRAMという項目が増えました。

Mj_pcb_7

そうしたら、SDR SDRAMのところをダブルクリックするか、「デバイス・ピン」の割り当て、ボタンを押します。そして、「どのデバイスを検査しますか?」となっているところをU2: MT48LC4M32B25を選択します。

Mj_pcb_8

すると、上の図のように、ネットリスト中にある信号名から「アドレスっぽい」「データっぽい」という曖昧な検索によって自動的に機能を推測してくれます。

つまり、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等のファンクション・テストを行います。

Mj_pcb_9

SDRAMのテストは、データ線と、アドレス線がちゃんとつながっているかどうかを1本1本調べていくことができます。

このような形で、MITOUJTAGの基板検査機能が動きました。

ネットリスト中の信号名から、正規表現で機能を推定して、その端子につながるFPGA端子をバウンダリスキャンで動かして、SDRAMの書き込み信号や読み出し信号を作り出し、アドレス線、データ線、制御線にオープン/ショートがないかどうかを判断することができました。

ポイントは、ネットリストを読み込んだり、実行したいアルゴリズムを選んだだけで、一切キーボードから入力していないということです。

ついに、マウス操作だけで基板検査ができるようになったというわけです。

| | コメント (3)

18bit A/D変換ボードの製造を徐々に増やしています

18bit A/D変換ボードの製造を徐々に増やしています。

今日は8台製造しました。

Adc18_8

このうち2台を動作テストしたのですが、成績は良好です。

入力を50Ωでショートしたとき、±2LSBくらいしか振れていません。

Ad18_noise

簡易的に測ったINLも、±100μVの範囲内にあるようです。(入力電圧が±1V以上で大きくなっているのは、信号発生器の問題)

Adc18_inl_2

18bit A/D変換器は、本当に微弱なものを測っているためか、いろいろ謎現象があって落ち込むことも多かったのですが、自分に少しだけ自信が持てました。

| | コメント (0)

2014.09.06

ZYNQのXC7Z030でPCI Expressが動いた!

ZYNQ搭載のADCボード「Cosmo-Z」で、PCI Expressが動くようになりました。

Cosmo-Zは、PCI Express External Cablingというケーブルを使ってパソコンとPCI Expressでつなぎます。

Zynq_pcie1

非常にマイナーなケーブルなのですが、PCI Expressの純正な規格です。PCI Expressの信号線をケーブルでそのまま引っ張り出すものです。

Cosmo-ZのZYNQはXC7Z030なので、ギガビットトランシーバとPCI Express Endpointハードウェアマクロを内蔵しています。だから、すぐにでもPCI Expressが動かせるはずなのです。

で、CoreGenでPCI Express EndPointを作って実際にやってみました。

注目するのはLTSSMの値です。LTSSMというのは、PCI Expressがリンクアップを管理するステートマシンです。下のような遷移をたどってL0ステートに達すればリンクアップ完了というものです。

Zynq_pcie5

実際にやってみると、00→02→04という経路をたどって・・

Zynq_pcie2

その後、04→05→0B→0C→0D→0E→0F→10→11→15→16となりました。

Zynq_pcie3

LTSSMの意味はXILINXのug477_7Series_IntBlock_PCIe.pdfに書かれています。

Zynq_pcie6

  • 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_pcie4

VID=1BC8というのは、特電のベンダIDです。

ということで、ZYNQのPCI Expressが認識されました!

| | コメント (0)

ZYNQのGTXを動かす(1)

今週はZYNQのGTXを動かそうとして頑張っていました。

GTXを動かすには、まずGTXの中にあるPLLを動かさなければなりません。PLLには、チャネルごとにあるCPLLというものと、4つのチャネルを束ねる「クワッド」にあるQPLLというものがあります。

クワッドPLLは内蔵LCタンク回路で発振させているらしいのでジッタが少ないとかなんとか。

このどちらのPLLを使ってもいいのですが、どうもうまく動いてくれませんでした。

PLLを使う前にリセットをかけるのですが、ロック信号がどうしてもアサートされませんでした。それで1週間ほど悩んできたのですが、ついに謎が解けました!

原因は、MGTAVCCという電源には1.0Vを与えなければならないところを1.8Vを与えていたことでした。

V10err

なんて恐ろしい・・

でも、壊れていなかったみたいです。よかった。

そんで、PLLのロック信号を見てみました。

クワッドPLLがロックするまでの時間は180μ秒くらいでした。

Qpll_lock

チャネルPLLがロックするまでの時間は32μ秒くらい。

Cpll_lock

クワッドPLLのほうがロックするまでの時間は長いようです。

各PLLをリセットしてから、FBLOSTなどの信号が出ている時間は30μ秒くらいでした。

Cqpll_unlock


これで、ようやくXILINX 7 SeriesのGTXを使った実験に進むことができます。

| | コメント (0)

2014.09.03

18bit A/D変換ボードの続き

先月18bit A/D変換ボードを発売したところ、あっという間に完売してしまったので、次のロットを製造しているところです。

最初に検査してから1か月くらい経ったのですが、経時変化はどうだろうということで再びいろいろと疑問に思っていたことを測定してみました。

Ad18brd

まず、社内用の量産型の試作器004番。8月11日に、標準電圧発生器を使って簡易的にINLを測定した結果です。

Ad18_0902_1

CH1のゲイン誤差は0.055%、オフセットは1.6mV。CH2のゲイン誤差は0.052%、オフセットは0.25mVでした。INLは±50μVくらいでしょう。±1V以上でINLが悪化しているようにみえるのは、信号源の問題です。

今日測った結果は、

Ad18_0902_2

で、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の内蔵リファレンスにしてみました。すると・・

Ad18_0902_3

このように、入力電圧が0Vの近辺で最大2mVくらいの誤差が生じるのでした。

だから、内蔵リファレンスは絶対に使ってはいけない。外付けリファレンスは必須なのです。

それから、今の回路は差動アンプにTHS4130というOPアンプを使っています。このTHS4130は電源電圧範囲が広く±5Vの電源で動かすことができます。しかし、THS4130は消費電流が15mAもあります。

低消費電力の回路にしたくなったので、THS4521に置き換えてみました。THS4521は1.6mAくらいしか消費しませんが、電源電圧は±2.5Vが最大です。ということは±2Vくらいまでの信号しか扱えません。

試作基板000番のCH1のTHS4130をTHS4521に置き換えてみると・・

Ad18_0902_4

ゲイン誤差0.048%、オフセット0.55mVなので、なぜか最初のより良いです。THS4521は意外と良いかもしれない。±2.2Vくらいまでは誤差なく出ています。

つまり、ADCの入力フルスケールを+2.048Vまたは+2.0Vにして、THS4521を使うことで低消費電力化が図れるかもしれません。

最後に、電源電圧のノイズがどの程度AD変換値に影響を与えるかという検証をしました。18bit A/Dボードの電源はLT3439という超低ノイズのスイッチング電源を使っているのですが、一般のスイッチング電源と比べてどうでしょうか?

下の図はLT3439を使ったスイッチング電源部です。はんだ付けしたり外したりを繰り返しているので、ちょっと汚くなっています。

Ad18_0902_7

データシートによれば、LT3439のリップルは0.2mVpp以下とのことです。まずLT3439を使った通常のボードで入力をGNDに落として測ってみます。

Ad18_0902_5

CH1の標準偏差は約2.1LSB(40μV)、CH2の標準偏差は約2.3(44μV)でした。

次に、オンボードのスイッチング電源を外して、秋月で売っているMCW03-05D05を使ってみました。

Ad18_0902_8

この電源のリップルは50mVppだそうです。入力0Vで測ってみると、

Ad18_0902_6

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変換器を作るとしたら普通の(ノイズが大きい)スイッチング電源を使ってはいけないでしょう。

| | コメント (0)

2014.09.01

MITOUJTAGのネットリスト読み込み機能の開発

MITOUJTAGのネットリスト読み込み機能を開発しています。目標は、ネットリストを読み込ませることで、各種の基板検査を自動的に行えるようにすること、です。

次のような感じになりました。

まず、例として特電Artix-7ボードのネットリストを読み込ませてみることにします。

Artix-7ボードのネットリストを読み込むと、その中に書かれているU?の部品番号の一覧が得られました。

Mj_netlist_load1_2

このU3、MT41J256M8という部品をダブルクリックすると、デバイスの種類を選択するダイアログが出ます。

Mj_netlist_load2

ここでクラスタデバイスを選びます。すると、どんな種類のデバイスかを選択するリストが出ます。

Mj_netlist_load3

ここで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

となっています。

これならどんな回路であっても柔軟に対応できるのではないかと思います。

| | コメント (0)

« 2014年8月 | トップページ | 2014年10月 »