開発日記

2023年4月 ついに真贋判定装置を動かすことに成功

 

FPGA真贋判定装置でバウンダリスキャンに成功!

2023.04.30

 

 IC真贋判定装置のGUIソフトもつくり、動作テストも佳境に入ってきました。

下の写真のように、BGA324のソケットを装着して1本1本に、細いワイヤーを挿して電圧を注入していきます。

Bscan5

すると、制御ソフトの画面上で配線を挿したBGAのピンの場所の電圧が高く表示されます。

Bscan6

この画面を見ながら1本1本のピンが正しい場所につながっているかを調べていくと首が疲れるので、Windowsのソフトに電圧がかかったピンの番号を読み上げてもらうことにしました。

 

こうして、全部のピンが正しくつながっていることを確認したら、ICを挿さずに電源を入れてみてBGAの各ピンに正し電圧が出ているかを何度も何度も念入りに確認します。

Bscan9

 

そして問題がないことが確かめられたら、いよいよFPGAの実機を装着して実験です。

Bscan3

いざ、電源をON!

Bscan4

使用したICは、Spartan-7のXC7S50のCSG324Cです。安全のためVCCIO=1.8Vとしています。

電源電流が90mAくらい増えたけれども、特にショートしているような感じはありません。イイ感じです。

 

そして、JTAGの配線をつないで自動検出してみると、

Bscan7

見事に認識されました!!!

バウンダリスキャンもできました。

Bscan8

バウンダリスキャンのEXTESTモードにして端子を動かすと、

Bscan2

対応するピンの電圧がVCCIOの電圧になりました。(ここではVCCIO=2.5Vにしています)

Bscan1   

大成功です。

これで、どんなICでもBGA324ピンであれば、任意の端子に電源やGNDを与えてJTAGバウンダリスキャンができます。


電源回路が動くようになったのでナイトライダーしてみた

2023.04.29

IC真贋判定装置をアルミとアクリルのケースに収めました。

04291

GUIのデバッグアプリを作り、デバッグ用のLEDボードの形が表示されるようにしました。

04292

そして、ナイトライダー機能を作って、動かしてみました。

 


360chのAD変換器のGUIアプリを開発中

2023.04.25

IC真贋判定装置には360chのAD変換器が乗っているのですが、

04252

各端子の電圧が一目でわかるようにするためのGUIアプリを開発しています。

04251

毎秒50回程度、全ピンの電圧を測って画面に表示することができるようになりました。

電圧を測るだけではなく、GUIでポチポチしながら好きなピンからいろいろな電圧を出力できるようにもしました。

 


360ch AD変換器の変換結果を画面表示してみた

2023.04.24

 

開発中のIC真贋判定装置には360チャネルのAD変換器が乗っているわけなのですが、

04241

360本のピンをアナログスイッチで切り替えて、順番に測定したのをBRAMに記録することができるようになりました。

下の画面は計測した値を有効数字1桁で並べて表示したものです。3.3Vなら3と表示され、1.25Vなら1と表示されます。

04242

一周だいたい50msで計測できます。

コンソールアプリではこれが限界なので、そろそろGUIアプリの開発を始めます。


アナログスイッチを切り替えて360チャネルのAD変換器を作った

2023.04.23

360個のアナログスイッチを切り替えて360入力チャネルのAD変換器ができました。

入力チャネルの切り替えでAD変換値がどう変化するかを見てみます。

まずは、Lレベルの信号を計測していた端子からHレベルの信号を計測していた端子に切り替わるときのようすです。結構すぐに切り替わります。

04231

 

次はGNDレベルに接続されている端子に切り替えた場合です。これも速やかに切り替わります。

04233

 

最後は弱プルダウンされている端子に切り替わったときです。なんと、70μ秒くらいの時間がかかってゆっくり変化あしていきます。

04232

 

つまるところ、アナログスイッチを切り替えて超多チャネルのAD変換器を作る場合、切り替えのたびにそれなりの時間を待たなければなりません。


90個のピンの電源電圧を測れるようになった

2023.04.22

 ADコンバータが動くようになったので、変換した値をAXIで読めるレジスタに出して、ソフトで読んでみました。

読める、読めるぞ!

Adc_measure2

これだとわかりにくいので、精度を1桁にして表示してみました。

ついでに、ナイトライダーのようにシフトさせながら電圧を表示してみました。

Adc_measure

LEDの動きにあわせて、電圧の高い部分が移動していくのが見えます。


喋る半導体検査プログラムを作りたい

2023.04.21

BGAの端子を1本1本検査する際に、ピンにプローブを当てながらオシロを見たり、テスターを見たりするのは効率が悪いので、プログラムに喋らせることができないかと考えています。

音声合成はVisual C#(というか.NET)にもともとあるようで、簡単に使えることがわかりました。

やりかたはすごく簡単でした。

まず、

using System.Speech.Synthesis;

をします。

このままだとSystem.Speech.Synthesisが見つからないというエラーが出るので、System.Speechの参照の追加を行います。

ソリューションエクスプローラで、参照→参照の追加→アセンブリを行い、System.Speechを追加します。

Refspeech2

ソリューションエクスプローラにSystem.Speechが出てくればOKです。

Refspeech

C#のプログラムは、

SpeechSynthesizer speech;
speech = new SpeechSynthesizer();

speech.SetOutputToDefaultAudioDevice();
speech.Speak("A1 3.2ボルト");
speech.Speak("A2 0.03ボルト");
speech.Speak("A3 3.2ボルト");

とします。

これでSpeak関数の中身で書いたとおりに喋ってくれます。

どんな声が使えるかというと、speech.GetInstalledVoiceで調べられるのですが、戻りの型がよくわからいので、

Object var = speech.GetInstalledVoice();

とやってデバッガでウォッチしていみます。

調べてみると、

Microsoft Zira Desktop

Microsoft Haruka Desktop

という2つの音声がインストールされているようです。

話者は

speech.SelectVoice("Microsoft Haruka Desktop");

または

speech.SelectVoice("Microsoft Zira Desktop");

で切り替えられます。

デフォルトはHarukaのようです。萌え系的な要素はまったくありません。

Harukaは数字などを日本語で読み上げてくれますがZiraは英語で読むようです。

ちょっとぎこちないですが、無料でVisual Studioの機能だけで使えるので、超おすすめです。

 


ADコンバータMAX11198を動かす

2023.04.20

非常に苦労しましたが、真贋判定装置のADCを動かすことができました。

当初作った回路にいろいろ問題があったので、こんな汚い回路になってしまいましたが、精いっぱい動いています。

Adc_dirty

使ったADCはMAX11198という16bit 2Msps 2chのADCなのですが、まず、データシートが重くてChromeで読んでいると真ん中あたりのページでブラウザが不安定になったり落ちたりします。Acrobat Readerでも固まります。Edgeで開くと辛うじて読めます。なぜなんでしょうね。

というわけで、データシートはほとんど読んでいません。内部レジスタもなさそうだし、適当に動かしてみましょう。

MAX11198というのはこんな感じのICです。

Max11198

このREFINOUTというところからリファレンス電圧が出てくるみたいなので、抵抗で分圧してOPアンプの非反転増幅にいれてやりましょう・・・とやってみたら大失敗!

データシートに書いていなさそうなのですが、REFINOUTから取り出せる電流はマイクロA以下のようです。1MΩの抵抗で分圧しても電圧が下がります。1kΩとかで分圧した日には何も出てきません。

全然REFINOUTじゃないですね。

REFINOUTは外部からリファレンス電圧を入れてやるべきで、取り出してはいけなかったのです。

それから、次の失敗は差動入力であるということ。差動入力ADCというのは入力の+と-の電圧の差をAD変換するのですが、データシートに乗っていたこの回路をそのまま作ってしまいました。

Adc_frontend

何が問題かというと、OPアンプのGND付近の特性に影響されてしまうことです。

OPアンプってGND付近やVCC-数Vは非常に苦手なんです。レール・ツー・レールと謳っているOPアンプも0Vが出せるわけではなく、最低電圧が30mVであってもレール・ツー・レールを謳っています。それに、電源電圧付近では歪が多くなったりします。

メーカーの言っているレール・ツー・レールとか、「真のレール・ツー・レール」なんて嘘ですよ。本当に0Vを出したいなら正負両電源にしなければいけなかったのです。だいいち、VREF/2で折り返して反転増幅させることが気持ち悪い。+側と-側で時間差が出来てしまうではないか。

やはり、ADCのフロントエンドを作るなら、完全差動アンプに限ると思った次第です。

やっとこさアナログ回路が動くようになって、AD変換ができて、正弦波を測ってみました。

AD変換した後のデータをFPGA内でパラレル化してFPGA内蔵ロジックアナライザで見てみました。

Adc_3

イイ感じの正弦波になっていますね。

次は矩形波。

立ち上がりと立下りの部分が歪んでいますが・・・

Adc_2

オシロで見ても歪んでいるので、素直にAD変換できているのでしょう。

Scope_281

のこぎり波もちゃんとAD変換できています。

Adc_1_20230423135101 

とりあえずADコンバータのMAX11198を動かすことはできるようになりましたが、測れる最低電圧は35mVくらいで、使っているレール・ツー・レールのOPアンプが出せる最低電圧とほぼ同じです。

このADCの本来の性能を発揮するには

  • THS4521とかの完全差動アンプと両電源でドライブする
  • ADR381とかの外部VREFを使ってREFINOUTをドライブする

とするべきなのでしょう。

Adcok

 


任意のピンから電源出力

2023.04.18

4つの電源(1.8V 2.2V 2.5V 3.3V)を、好きな場所からONすることに成功。これでようやくLEDをじわっと光らせながらのナイトライダー(死語)ができる。

LEDの光が滲んでグラデーションしているのでも、カメラのシャッター時間の関係でグラデーションしているのでもなく、隣のLEDを本当に弱く光らせています。

Arbpower

プログラムはこんな感じで、任意の場所に1~4の数字を書き込めば、その場所にVCC1,VCC2,VCC3,VCC4が供給されるようになっています。

Code

GNDも含めると90×8=2880個の電源スイッチがあるのですが、長いシフトレジスタを作ってSPIで制御しています。1つのSPIのチェーンは980bitくらいあって、そのSPIのビット列の1つ1つが電源やGNDのスイッチにつながっています。

SPIの速度は最初は1MHzでやっていましたが、10MHzでも通ることがわかりました。

10MHzで通るなら100μ秒で切り替えられます。

 


電源基板の動作確認ができた

2023.04.17

最初の試作ではBGA324ピンまでのICを試験できるよう、360個のピンに1.0~3.3Vまでの任意の4種類の電圧やGNDを与える回路を作っています。

ようやく全モジュールの組み立てが完了して、任意のピンから電源を出すことができるようになりました。

 

 


超ロングJTAGチェーン

2023.04.16

半導体真贋判定装置の開発をしています。

この電源子基板を32個並べて・・・

Chain32p

できた!自分史上最長JTAGチェーン!32個!!

Chain32

さらに1ユニット増やして48個のCPLD

Chain48p

うぉっしゃー!CPLD48個!超ロングJTAGチェーン!ネビュラチェーンより長い。

Chain48

そしてついに64個基板が並んだ。

Chain64p

JTAG神拳最終奥義!64デバイス!

あたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたっ!!!

Chain64

書き込みオワタ!!!

 

Detect48

 

アプリケーションエラー!

Hidebu

ひでぶっ!

 


 

3月の日記へ