« 2023年4月 | トップページ | 2023年6月 »

2023.05.30

FT232HのACBUS8、ACBUS9の使い方

FTDI社のUSBインタフェースICにはMPSSEといってUSB-JTAGやUSB-SPIなどを容易に作るための機能があります。FT232HはUSB2.0 HighSppedモードに対応しておりFT2232Dなどより高速で、秋月電子で630円くらい入手できます。もちろんワンボード化されたモジュールもあります。

FT232Hはこのような小型のパッケージで高速で非常に使い勝手がよいデバイスです。(写真はAdafluit社のもの)

Adafluit

さて、FT232Hの出力バスはADBUS[7:0]とACBUS[9:0]というのがあります。

Ft232h

ADBUSの下位4bitはJTAGの信号として、ADBUSの上位4bitははGPIOL、ACBUSの下位8bitはGPIOHとしてMPSSEの中から操作することができます。

Pindescr

MPSSEモードでADBUSやACBUSを個別に動かすには0x80もしくは0x82のコマンドを使います。アプリケーションノートAN108によればLowByteがADBUS[7:0]に対応していて、HighByteというのがACBUS[7:0]に対応しているそうです。

Mpssehighbyte

さて、これでACBUSを動かそうとしたのですが、この0x82のコマンドには引数が1バイトしかないのです。

ACBUS[9:8]を動かしたい場合はどうしたらよいのでしょうか??

・・ 

苦労しましたが、やり方を発見しました。

まず、FT_Progで書き込むときにC8とC9をI/O Modeにします。したがってEEPROMは必須です。

Ftprog

そして、SetBitModeを呼び出すときの第二引数にFT_BIT_MODE_CBUS_BITBANGを指定します。

FTDI ft =  new FTDI();
ft.OpenByIndex(0);
ft.ResetDevice();
ft.SetBitMode(0x00, FTDI.FT_BIT_MODES.FT_BIT_MODE_RESET);
// CBUS_BITBANGでACBUS9,8,6,5を操作できる。
ft.SetBitMode(mask, FTDI.FT_BIT_MODES.FT_BIT_MODE_CBUS_BITBANG);
// 普通にMPSSEの初期化を行う
ft.SetBitMode(0x00, FTDI.FT_BIT_MODES.FT_BIT_MODE_MPSSE);
ft.SetLatency(16);
ft.SetTimeouts(1000, 1000); // 1秒、1秒
ft.SetCharacters(0, false, 0, false);
ft.Purge(FTDI.FT_PURGE.FT_PURGE_RX | FTDI.FT_PURGE.FT_PURGE_TX);
・・・

普通のBitBangモードだと、SetBitModeの第二引数をFT_BIT_MODE_SYNC_BITBANGやFT_BIT_MODE_ASYNC_BITBANGにして、ft.Writeでデータを垂れ流しにすると思います。

しかし、SYNC_BITBANGというフラグ(0x20)を指定すると、SetBitModeの時のMaskがそのまま出力ポートのDirとValueとなります。Writeは不要です。

そのビット割り当ては

  • bit7・・・ACBUS9のDIR (1:出力 0:入力)
  • bit6・・・ACBUS8のDIR (1:出力 0:入力)
  • bit5・・・ACBUS6のDIR (1:出力 0:入力)
  • bit4・・・ACBUS5のDIR (1:出力 0:入力)
  • bit3・・・ACBUS9のVALUE (1:H 0:L)
  • bit2・・・ACBUS8のVALUE (1:H 0:L)
  • bit1・・・ACBUS6のVALUE (1:H 0:L)
  • bit0・・・ACBUS5のVALUE (1:H 0:L)

であると思われます。

「思われます」というのはドキュメントがどこにもないので実験してみた結果からそのように推測したためです。この機能を有効にするにはFT_ProgでC9,C8,C6,C5をI/O Modeにプログラムする必要があるので注意してください。FT232HでCBUS_BITBANGが使えるのはおそらくACBUS9,8,6,5のみだと思います。それ以外のACBUS0やACBUS1や2はそもそもGPIOHなので、0x82コマンドで操作できるはずです。

次の図に、ループ中でSetBitModeを繰り返し読んでポートをパタパタさせた波形を示します。

Loop

ちゃんと動いていますね。

 

素晴らしいことに、このSetBitModeでFT_BIT_MODE_SYNC_BITBANGを付けて出力した値は、FT_BIT_MODE_RESETやFT_BIT_MODE_CBUS_BITBANG、さらにはft.ResetDevice();を呼び出しても解除されません。再びFT_BIT_MODE_SYNC_BITBANGをするまではその値を保持してくれるようです。

つまり、MPSSEとCBUS_BITBANGは独立して使えるようです。

 

そもそも何でACBUS8を動かしたかったかというと、最近実験用に作っているMPSSEのJTAGケーブルがありまして、FT232Hの後ろのLatticeのCPLDを乗せているのです。

Newjtag

実は、FT232Hは電源投入時に変な波形が出るので、その波形をブロックしたりするためにCPLDを使おうとしています。

Initwave

この波形はまだおとなしいほうで、FT2232Dのときにはカウンタが動くような波形が出ていました。

 

さて、このCPLDを書き込むためにJTAGケーブルを挿すのは不格好なので、FT232HからCPLDにも書き込みができて、CPLDの先のJTAGターゲットにも書き込みができるようにと思い、CPLDのJTAGピンを一般ピンとして使えるようJTAGENで切り替えようとしました。

JTAGENBをHにするとTCK/TDI/TMS/TDOはCPLDのJTAGとなり、JTAGENBをLにするとこれらの端子はI/OポートになってターゲットのJTAGにつながるというしくみです。

Jtagen

このJTAGENBの切り替えをACBUS8でやろうとして、あれどうやって動かすんだろう・・と、大ハマりしたというわけです。

 

| | コメント (0)

2023.05.21

Cosmo-KのPCI ExpressデザインをVivado 2022.2用のアップデートしました

Cosmo-Kという特電のPCI Expressボードがあるのですが、サンプルデザインがVivado 2017用にできていたので、Vivado 2022.2まで一気にアップデートしました。

Cosmokpcie

Vivado 2017.1あたりから2022.2まで一気にアップデートすることはできないので、少しだけ新しいVivadoで開きなおし、アップデート作業(Report IPからupdate ip)をして、Synthesisまで通して次のバージョンで開くという作業を繰り返し、

2017.4→2018.1→2018.3→2019.2→2020.1→2020.2→2022.2

と、ちょこちょことアップデートしました。

最初は2022.2までUpdate IPで上げていったのですがSynthesisの前のIP生成が終わらないという問題が起きたので、各バージョンで開いてSynthesisまで通してから次のバージョンで開きなおすというやり方をしています。

何かと大変でした。

Vivado 2022.2版のファイルはこちらにあります。

https://www.tokudenkairo.co.jp/cosmok/download.html

このデザインを使うと、PCI Experssを通じてボード上のDDR3メモリを読んだり書いたりするというアプリが簡単に作れるようになります。しかも、Windowsで動くデバイスドライバ付きです。

 

| | コメント (0)

2023.05.20

Kintex-7のFBGパッケージは周波数特性が悪いのか?

Kintex-7やZYNQにはFBGといって、パッケージ上面が金属製の平らなケースになっておらず、チップコンデンサがむき出しになったパッケージがあります。

平らになっている普通のやつはFFGというのですが、今はFFGが手に入らなかったので仕方なくFBGで作りました。

Fbg1

このFBGパッケージはヒートシンクがつけにくいというだけではなく、周波数特性が悪いという問題もあるのです。

それに対してFFGというのは表面が平らになっていてパスコンむき出しでもなくヒートシンクが貼りやすいやつです。

Ffg

(図はDigikeyより)

FFGとFBGで何が違うのかというと、FFGはフリップチップでFBGはワイヤボンディングかと思っていたのですが、そういうわけではなさそうです。両方ともフリップチップで出来ているようです。(ちなみにGは鉛フリーを意味するので正式にはFFとFB)

https://support.xilinx.com/s/question/0D52E00006hpSuFSAU/7series-package-ffg-vs-fbg?language=ja

上面の金属ケースの違いくらいなんでしょうかね・・

 

次の図は7シリーズの電気的特性なのですがスピードグレード2だと、FFGパッケージはGTXが10Gbpsまで行きますが、FBG676パッケージだと6.6Gbpsまでしか行けないことになっています。

Fbg3

DDR3メモリの速度もFFGパッケージだと1866Mbpsですが、FBGパッケージだと1066bpsまでしか行けません。

Fbg7

Fbg8

このようにFBGのほうがFFGよりも全体的に性能は悪いのです。

でも、手に入らないのだから仕方ありません。お客様の了承を得てFBGパッケージで製造しました。

Fbg2

で、GTXの先に付けたSFP+を光ファイバに通してIBERT試験してみた結果ですが・・

Fbg4

ぬわんと!10Gbpsでも行けるではありませんか!!

QSFP+のほうも、

Fbg5

ばっちり10Gbpsが50%のアイが開いています。

Fbg6

FBGパッケージは公称では6.6Gbpsまでしかいかないことになっていますが、実際にはFFGパッケージと比べて遜色のない性能が出ているようです。

 

| | コメント (0)

2023.05.19

リコンフ研の原稿提出

リコンフィギャラブルシステム研究会(RECONF)の原稿を無事に提出しました。

締め切りの18日の午後5時ごろから大学に行って実験して終電で帰り、

徹夜で書いて19日の朝8:50ごろに無事に提出できました。

本当の締め切りの朝、ギリギリで間に合ったぜ!

「RFSoCを用いた300GHz帯送信機のためのディジタルフィルタの構成についての一検討」

というタイトルで6月9日に発表してきます!

 

| | コメント (0)

2023.05.16

事業再構築補助金で計画変更を前提にした交付申請はできるか?

事業再構築の交付申請に向けて、いままでに作った資料を見直しています。

問題点は

  • クリーンルーム、ベーキング装置、真空シーラーなどの設備の見積を取る
  • 基板の見積書と実際の内容が若干異なる点をどうするか
  • サービス開始が遅れているのでクラウドの費用が当初予定より安くなる
  • 発明が完成していないので、弁理士費用の見積もりが取れていない

くらいかなと思います。

基板の見積と実際の内容が異なるというのは、当事業では子基板を608枚作る計画なのですが、試作をしたりして何回かにわけて作るので値段が少し変わってきてしまいます。また、見積内容を一括で発注するのではなく分割してよいかという質問をしたら、見積書にその旨が書かれていればよいということなのですが、個別対応になるのでいろいろ面倒そうです。あと、試作を繰り返すような基板や、試作でしか使わないようなテスト基板は経費に含めにくいので自社負担にしてしまうのですが、試作をしているうちに本番用の良いものが出来てしまったとか。そうなると本番用にと思って見積ったものがなくなってしまうのです。

こんな感じの微調整をしているといつまでたっても金額が確定しないので、交付申請ができません。

そこで事務局に質問してみました。

Q1 「交付規定12条に計画変更というのがある。『補助対象経費の区分ごとに配分された額を変更しようとするとき。ただし、各配分額の10パーセント以内の流用増減を除く。』とあるが、流用ということが書かれています。交付申請して決定が下りても、10%以内であれば別の使い方をしてよいということでしょうか?

答えはOKでした。

建設とかで予定よりも安くできてしまった場合に、残ったお金で何かを買ってよいということだそうです。

事務局に問い合わせて得られた回答をまとめると、「50万円を超える資産に関するものや建設費や機械設備といった枠の10%を超える流用をするならば計画変更が必要。50万円未満のものや10%を超えない場合は計画変更は不要で買ってよい。ただし、実績報告の際に理由書などが必要になるかもしれないし、見積は取ること」ということでした。

なるほど。計画変更を出して承認を得ていれば安心だけれども計画変更なしで余った予算で期末にいろいろ買ってしまうのもアリかもしれませんね。

でも、このしくみを使えばギッチギチに固めた予算で交付申請しなくても、もっとゆるくできるんじゃないかなと思って、次の質問をしてみました。

Q2 例えば、広告宣伝費が多くかかるように交付申請しておいて、実際には広告を出すのをやめて、その浮いた分を交付申請していなかった機械を購入するようなことは可能でしょうか?

答えはOKでした。

つまり、交付申請で完璧な予算を作らなくても、予算の枠内での変更は計画変更で対応できそうですし、軽微な支出であればいきなり購入しても何とかなるのかもしれません。

ただし、計画変更は必ず承認されるとは限らないし、実績報告で否決される可能性もあるとのことですので、交付申請を正確にやることに越したことはありません。

| | コメント (0)

2023.05.10

シンICでXILINXのDEVICE DNA取得に成功

XILINXのFPGA(Spartan-6以降)にはDevice DNAといって、ユニークなIDが振られています。

このIDは唯一無二の被らないIDでデバイスの中の不揮発性部分にメーカーが書き込んで出荷しており、ユーザが改変することはできません。(一説には最大で32個の同一IDデバイスを作ることができるという記述もあるが、通常はない)

このたび、真贋判定装置で、XILINX 7 SeriesのDevice DNAが取得できるようになりました。

下の写真のようにソケットにFPGAをセットしたら、

Devicedna3

JTAGのIDCODEを取得した後、Device DNAも取得することができるようになりました。

Devicedna1

FPGAを基板に実装しなくても、BGAソケットに挿してすぐに確認できるので、非破壊・非実装で検査ができるといえます。

Device DNAは工場出荷時に書かれる不揮発性で書き換えできないユニークな値なので、もし偽造品なら不正な値になるはずです。

偽造されたFPGAであればすべて同じIDになっていたり、XILINXが設定したはずのないIDになるので照会すればわかります。シルクを書き換えただけの偽造FPGAであっても、メーカーに照会すれば真の型番を知ることができます。

また、AMD Device LookUpの2次元バーコードでもDevice DNAの可読化された値が表示されるので、変換方法がわかればユーザーサイドで検証できるかもしれません。

Devicedna2

 

| | コメント (1)

2023.05.09

デバイスに流れる電流と電圧を測定できるようにした

今日もIC真贋判定装置を開発しております。

Max1863

この制御ボードにはMAX186という8chのADコンバータが乗っていて、デバイスに流れる電流と電圧を測定できるようにしていました。

そのMAX186を動かして計測できるようにしました。

8chの入力を順次切り替えてみています。

Max1861

電源端子に正弦波を注入した場合、綺麗な正弦波が見えます。

Max1862

これで、ICに加わる電圧と電流を測定することができるようになりました。

Voltmeas

MAX2 CPLDの電源電圧と電流を測定してみました。

Voltmeas2

VCCIOが異常に大きいのは、シンIC子基板の問題です。いずれ修正します。

Spartan-7についても未コンフィグ状態の待機電流と、MasterBPIでの動作電流を測定することに成功しました。

次の画像はPROG_B=Lで停止中のものです。

Sp7meas1

次の画像はMasterBPIで起動しようとしているところです。

Sp7meas2

結論としては大して変わらないようです。

VCCINTもVCCAUXもだいたい30mA程度ということもわかりました。

| | コメント (0)

2023.05.08

ICテスタのロジックボードが動くようにする

IC真贋判定装置にはロジックボードと呼ばれるボードがあります。

Jsw

今日はこのボードが動くようにしてJTAG信号が出せるようにしてみたいと思います。

このボードを使うと、CPLDのI/OピンでサンプリングしたロジックのH/Lを同時に見ることができたりします。

アナログ電圧測定は50Hzくらいの測定しかできませんが、ディジタルだけでよければ毎秒10kHzで全ピン(max 360)をサンプリングできます。

GUI上の表示としては、数字はADCで測った電圧で、小さい長方形はCPLDで見たH/Lを表すようにしてみました。

Jsw2

いろいろ試してみると、面白いというか当然なのですが、CPLDが感じるH/LのスレッショルドはVCCIOで変化するのがわかります。

VCCIO=3.3Vのときは1.5Vくらいにスレッショルドがあるけど、VCCIO=1.8Vくらいまで下げるとスレッショルドが1.1Vくらいになります。

この特徴を使えば、ターゲットデバイスの電源電圧に上手にスレッショルドを合わせることができます。

 

アプリのほうもだいぶん改良して、任意のピンから電源だけでなく、ロジックのH、LとJTAG信号を出せるようにしました。

Jsw3

ソフト的にJTAGを操作して、デバイスのIDCODEを取得してみたら、ちゃんとIDCODEが取れました。

Jsw4

もう、ICごとにJTAGの配線をつなぎかえなくても画面上で「33番ピンがTMS、34番ピンがTCKね・・」と設定するだけでよくなった。超楽になった~♪

Jsw5

Spartan-7もJTAG IDCODEを認識成功!TCKが遅いけどちゃんと動きます。


| | コメント (0)

2023.05.03

IC真贋判定装置で様々なFPGA/CPLDを試す

IC真贋判定装置を開発しています。

今日は144ピンのデバイスを中心に動作確認を行います。

この真ん中のソケットにFPGAやCPLD、マイコンを挿して、周囲にある大量のスイッチで電源やGNDを与えられるようになっています。

Qfp144_20230504005701

まずはSpartan-6のTQ144ピンです。型番はXC6SLX9-2TQ144C。

Sp61

無事に認識されてバウンダリスキャンもできました。

Sp65

HSWAPENというピンを操作すると、I/Oピンがプルダウンになったりオープンになったりするのが切り替えが見えて面白いと言えます。

Sp62 Sp63

 

次はALTERA(INTEL)のMAX5。型番は5M570ZT144C5Nです。

Max51

このように電源を与えるとJTAGでも認識され、バウンダリスキャンで操作した端子の状態と、IC検査装置で測った端子の電圧は一致するようになりました。

Max51_20230504004101

 

次はIntelのCyclone4。

Cy43

Cyclone4のQFP144ピンパッケージは裏面にEパッドという145本目のパッドがあります。実は、このパッドは内部で他のGNDにつながっていないようなので、GNDに接続してやらなければなりません。そのため、ソケット基板を改良してラッピングワイヤで作ったバネでEパッドに接触させるようにしたら動きました。

Cy42

電圧はVCCIOだけではなく、VCC=1.2V、VCCAやVCCD_PLLで2.5Vなど様々な電圧が必要です。でも、当社のICテスタは任意の4種類の電圧を与えられるので問題ありません。

Cy43_20230504004301

大変苦労しましたが、これも問題なく認識してくれました。

Cy44

JTAGバウンダリスキャンで見た端子の状態と、ADCで測った端子の電圧が一致しています。

Cy45

 

最後はBGA256ピンのCyclone10です。これまでにMAX2、MAX5、Cyclone4などで練習してきた甲斐があってALTERAの電源接続にも慣れてきました。

Bga2561

ICが薄いのでソケットに少し工夫が必要でしたが、

Bga2563

このICも、JTAGで認識してくれて、

Cy101

JTAGバウンダリスキャンで端子を操作し、その値をADCで読み取るということができました。

Cy102

 

結果として、BGA256、QFP144、QFP100、BGA324の様々なICをソケットに装着して、電源を投入し、JTAGバウンダリスキャンでIDCODEを見たり端子を操作したりするということに成功しました。

もし、偽物のICであればJTAGのIDCODEが違っていたり、そもそもJTAGを認識しなかったり、電源に異常な電流が流れたりするのでわかります。

また、このIC検査装置ではバウンダリスキャンでICの端子を動かして、その結果の電圧をADCで測れるので、端子が活きているかどうかを調べることができます。

偽物ICなら一発でわかるというわけです。

 

流通在庫の偽物ICよ、かかってこい!

 

| | コメント (4)

2023.05.02

真贋判定装置でMAX2を試す

昨日は100ピンデバイスでいろいろ試したので、今日はQFP144ピンのデバイスを試します。

Qfp144_20230504005701

まずは、INTEL(ALTERA)のMAX2。

Max21

電源を設定してJTAGケーブルをつないでMITOUJTAGで自動認識・・

よっしゃー!JTAGで認識されたぞ。

そういえばMAX2とMAX5ってIDCODE同じなんだっけ?

Max22

MAX2も問題なく検査できることを確認できました。

JTAGバウンダリスキャンで端子を操作すると、計測された電圧が0V~3.3Vの間で変化するのが見えます。
Max23

また、オープンにしている端子は1.2Vくらいで浮いているのが見えます。

MAX2にはGタイプとノーマルタイプがあって、Gタイプはレギュレータ内蔵でないからVCCINTに1.8Vを加えなければならないけど、ノーマルタイプは2.5Vまたは3.3Vを加えることになっています。

この装置はどちらも対応可能です。

 

特電の倉庫に行ってみると、QFP144ピンの古いFPGAやCPLDがいくつかありました。

Qfp144ics

明日はこれらを攻めていきたいと思います。

 

| | コメント (0)

2023.05.01

QFP100ピンのICをICテスタにかけてみた

FPGAやCPLDの真贋判定に特化したICテスタを開発しています。

昨日はBGA324で成功したので、今日はQFP100ピンをやります。

BGAのほうが難易度は高そうなのですが、あえてQFPからやって経験を積みます。

今日のデバイスはXILINXのCoolRunner2。XC2C64VQG100Cです。

Xc2c1

装置全景のようすです。

Xc2c2

注意深く電源電圧を設定して・・

Xc2c3

JTAGで認識しました!!

Xc2c4

バウンダリスキャンもOKです。

Xc2c6

VCCIOとVCCINTの電圧は別々に設定できるので、VCCIOの電圧を少しずつ上げてみていったところ、内蔵プルアップ抵抗と装置全体の持つプルダウン抵抗でせめぎあって1V前後の電圧になるのが見えます。

 Xc2c5

このくらいの電圧だとバウンダリスキャンしたときにHとLの丁度境目になるのでちらちらして見えます。

また、バウンダリスキャンで1ピンずつH/Lトグルしていったときの様子を動画にしました。

このような感じで動いているのが見えます。

 

このようにCPLDでは成功したのですが、手元にあるルネサスマイコンRX63Nの100ピンではだめでした。どうやらRX63Nの100ピンはJTAGのバウンダリスキャン機能がディゼーブルにされているのでIDCODEすら見ることができません。それでもICEの何からしいステータスは見えているので、JTAG自体は反応しているようでした。

 

 

| | コメント (0)

« 2023年4月 | トップページ | 2023年6月 »