開発日記
FPGA真贋判定装置でバウンダリスキャンに成功!
2023.04.30
IC真贋判定装置のGUIソフトもつくり、動作テストも佳境に入ってきました。
下の写真のように、BGA324のソケットを装着して1本1本に、細いワイヤーを挿して電圧を注入していきます。
すると、制御ソフトの画面上で配線を挿したBGAのピンの場所の電圧が高く表示されます。
この画面を見ながら1本1本のピンが正しい場所につながっているかを調べていくと首が疲れるので、Windowsのソフトに電圧がかかったピンの番号を読み上げてもらうことにしました。
こうして、全部のピンが正しくつながっていることを確認したら、ICを挿さずに電源を入れてみてBGAの各ピンに正し電圧が出ているかを何度も何度も念入りに確認します。
そして問題がないことが確かめられたら、いよいよFPGAの実機を装着して実験です。
いざ、電源をON!
使用したICは、Spartan-7のXC7S50のCSG324Cです。安全のためVCCIO=1.8Vとしています。
電源電流が90mAくらい増えたけれども、特にショートしているような感じはありません。イイ感じです。
そして、JTAGの配線をつないで自動検出してみると、
見事に認識されました!!!
バウンダリスキャンもできました。
バウンダリスキャンのEXTESTモードにして端子を動かすと、
対応するピンの電圧がVCCIOの電圧になりました。(ここではVCCIO=2.5Vにしています)
大成功です。
これで、どんなICでもBGA324ピンであれば、任意の端子に電源やGNDを与えてJTAGバウンダリスキャンができます。
電源回路が動くようになったのでナイトライダーしてみた
2023.04.29
IC真贋判定装置をアルミとアクリルのケースに収めました。
GUIのデバッグアプリを作り、デバッグ用のLEDボードの形が表示されるようにしました。
そして、ナイトライダー機能を作って、動かしてみました。
360chのAD変換器のGUIアプリを開発中
2023.04.25
各端子の電圧が一目でわかるようにするためのGUIアプリを開発しています。
毎秒50回程度、全ピンの電圧を測って画面に表示することができるようになりました。
電圧を測るだけではなく、GUIでポチポチしながら好きなピンからいろいろな電圧を出力できるようにもしました。
360ch AD変換器の変換結果を画面表示してみた
2023.04.24
開発中のIC真贋判定装置には360チャネルのAD変換器が乗っているわけなのですが、
360本のピンをアナログスイッチで切り替えて、順番に測定したのをBRAMに記録することができるようになりました。
下の画面は計測した値を有効数字1桁で並べて表示したものです。3.3Vなら3と表示され、1.25Vなら1と表示されます。
一周だいたい50msで計測できます。
コンソールアプリではこれが限界なので、そろそろGUIアプリの開発を始めます。
アナログスイッチを切り替えて360チャネルのAD変換器を作った
2023.04.23
360個のアナログスイッチを切り替えて360入力チャネルのAD変換器ができました。
入力チャネルの切り替えでAD変換値がどう変化するかを見てみます。
まずは、Lレベルの信号を計測していた端子からHレベルの信号を計測していた端子に切り替わるときのようすです。結構すぐに切り替わります。
次はGNDレベルに接続されている端子に切り替えた場合です。これも速やかに切り替わります。
最後は弱プルダウンされている端子に切り替わったときです。なんと、70μ秒くらいの時間がかかってゆっくり変化あしていきます。
つまるところ、アナログスイッチを切り替えて超多チャネルのAD変換器を作る場合、切り替えのたびにそれなりの時間を待たなければなりません。
90個のピンの電源電圧を測れるようになった
2023.04.22
ADコンバータが動くようになったので、変換した値をAXIで読めるレジスタに出して、ソフトで読んでみました。
読める、読めるぞ!
これだとわかりにくいので、精度を1桁にして表示してみました。
ついでに、ナイトライダーのようにシフトさせながら電圧を表示してみました。
LEDの動きにあわせて、電圧の高い部分が移動していくのが見えます。
喋る半導体検査プログラムを作りたい
2023.04.21
BGAの端子を1本1本検査する際に、ピンにプローブを当てながらオシロを見たり、テスターを見たりするのは効率が悪いので、プログラムに喋らせることができないかと考えています。
音声合成はVisual C#(というか.NET)にもともとあるようで、簡単に使えることがわかりました。
やりかたはすごく簡単でした。
まず、
をします。
このままだとSystem.Speech.Synthesisが見つからないというエラーが出るので、System.Speechの参照の追加を行います。
ソリューションエクスプローラで、参照→参照の追加→アセンブリを行い、System.Speechを追加します。
ソリューションエクスプローラにSystem.Speechが出てくればOKです。
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はMAX11198という16bit 2Msps 2chのADCなのですが、まず、データシートが重くてChromeで読んでいると真ん中あたりのページでブラウザが不安定になったり落ちたりします。Acrobat Readerでも固まります。Edgeで開くと辛うじて読めます。なぜなんでしょうね。
というわけで、データシートはほとんど読んでいません。内部レジスタもなさそうだし、適当に動かしてみましょう。
MAX11198というのはこんな感じのICです。
このREFINOUTというところからリファレンス電圧が出てくるみたいなので、抵抗で分圧してOPアンプの非反転増幅にいれてやりましょう・・・とやってみたら大失敗!
データシートに書いていなさそうなのですが、REFINOUTから取り出せる電流はマイクロA以下のようです。1MΩの抵抗で分圧しても電圧が下がります。1kΩとかで分圧した日には何も出てきません。
全然REFINOUTじゃないですね。
REFINOUTは外部からリファレンス電圧を入れてやるべきで、取り出してはいけなかったのです。
それから、次の失敗は差動入力であるということ。差動入力ADCというのは入力の+と-の電圧の差をAD変換するのですが、データシートに乗っていたこの回路をそのまま作ってしまいました。
何が問題かというと、OPアンプのGND付近の特性に影響されてしまうことです。
OPアンプってGND付近やVCC-数Vは非常に苦手なんです。レール・ツー・レールと謳っているOPアンプも0Vが出せるわけではなく、最低電圧が30mVであってもレール・ツー・レールを謳っています。それに、電源電圧付近では歪が多くなったりします。
メーカーの言っているレール・ツー・レールとか、「真のレール・ツー・レール」なんて嘘ですよ。本当に0Vを出したいなら正負両電源にしなければいけなかったのです。だいいち、VREF/2で折り返して反転増幅させることが気持ち悪い。+側と-側で時間差が出来てしまうではないか。
やはり、ADCのフロントエンドを作るなら、完全差動アンプに限ると思った次第です。
やっとこさアナログ回路が動くようになって、AD変換ができて、正弦波を測ってみました。
AD変換した後のデータをFPGA内でパラレル化してFPGA内蔵ロジックアナライザで見てみました。
イイ感じの正弦波になっていますね。
次は矩形波。
立ち上がりと立下りの部分が歪んでいますが・・・
オシロで見ても歪んでいるので、素直にAD変換できているのでしょう。
のこぎり波もちゃんとAD変換できています。
とりあえずADコンバータのMAX11198を動かすことはできるようになりましたが、測れる最低電圧は35mVくらいで、使っているレール・ツー・レールのOPアンプが出せる最低電圧とほぼ同じです。
このADCの本来の性能を発揮するには
- THS4521とかの完全差動アンプと両電源でドライブする
- ADR381とかの外部VREFを使ってREFINOUTをドライブする
とするべきなのでしょう。
任意のピンから電源出力
2023.04.18
LEDの光が滲んでグラデーションしているのでも、カメラのシャッター時間の関係でグラデーションしているのでもなく、隣のLEDを本当に弱く光らせています。
プログラムはこんな感じで、任意の場所に1~4の数字を書き込めば、その場所にVCC1,VCC2,VCC3,VCC4が供給されるようになっています。
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個並べて・・・
できた!自分史上最長JTAGチェーン!32個!!
さらに1ユニット増やして48個のCPLD
うぉっしゃー!CPLD48個!超ロングJTAGチェーン!ネビュラチェーンより長い。
そしてついに64個基板が並んだ。
JTAG神拳最終奥義!64デバイス!
あたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたたっ!!!
書き込みオワタ!!!
アプリケーションエラー!
ひでぶっ!