2022.01.25

Vivado 2019.2から2020.1への移行でハマったこと

私はVivadoは最新版を追わず、だいたい1~2年前のこなれたバージョンを使っているのですが、本日Cosmo-Zのデザインを2019.2から2020.1に移行したら意外なところでハマったのでブログに書きます。

Vivado 2019.2で作ったCosmo-ZのデザインをVivado 2020.1で開きます。

Update1

大きなエラーもなく開くことができたので、IP StatusでUpdate Selectedを行います。

特に問題なくUpdateできたのですが、論理合成しようとした際に大量のエラーがでました。

Update2

エラーというのは、こいう感じです。

[BD 41-237] Bus Interface property FREQ_HZ does not match between /SignalProcess/upp_0/DIN(125000000) and /SignalProcess/FILTER/cosmoz_data_combine_0/DOUT(100000000)
[BD 41-238] Port/Pin property FREQ_HZ does not match between /SignalProcess/FILTER/cosmoz_data_combine_0/clk(100000000) and /SignalProcess/adcblock_0/adcclk_o(125000000)
[BD 41-1031] Hdl Generation failed for the IP Integrator design D:/naitou/np1068/CosmoZFPGA2021-vivado2020/vivado/vivado.srcs/sources_1/bd/cosmoz_main/cosmoz_main.bd 

IPとIPの間をつないでいるAXI Streamのクロックの速度が両端で異なっているということのようです。どうやら、Vivado 2020.1ではValidateのときのクロック速度の伝搬がうまくいっていないように思われます。

どのように解決したかというと、

① エラーを起こしているIPをEdit in Packagerで開く

② Package IPを開き、Ports and Interfacesを開く

③ エラーを起こしているバスに関連付いているクロックのInterfaceのプロパティを開く
(バスのプロパティではない)

Update6

④ Parameters->Requires User Settingの中にあるFREQ_HZを適切に設定する

Update3 Update4

これでクロックの相違によるエラーは消えます。

VivadoではSynthesisの前にValidateを行います。Validateというのは信号の上流から下流に向かってバス幅やクロック速度などの情報を伝搬させていって、VHDLのGeneric(Verilogのparameter)を自動設定するとともにデザインルールチェックを行うものです。(と、私は解釈している)

こうやってエラーを一つ一つつぶしていったのですが、IPコアをUpdateした後でSynthesisを行うとエラーになったこともあります。

Update5

これは、IPコアを使うときにGenerateという作業が行われるのですが、下記のダイアログでSKIPしていた場合にはSynthesisのときにGenerateが行われるからです。GenerateというのはIPコアのソースをVivadoプロジェクトのローカルフォルダの中にコピーして(Update IPの本体)、軽く処理することだと解釈しています。もしかしたらラッパを作っているのかもしれません。

Update7

つまり、VivadoはUpdate IP → Generate → Validate → Synthesis → Implement → Generate BitStreamという流れで動いているのですが、Synthesisの際にまだGenerateされていないIPコアを見つけると、GenerateとValidateをやり直してエラーが出ていまうということもあります。結果として、エラーが次々と出てくるように見えます。

原因としてはクロック速度の伝搬がうまくいっていないだけなのでFREQ_HZを手動設定すればよいのですが、なぜ伝搬が自動でなされないんでしょうね。ちょっと疑問でした。

| | コメント (0)

2022.01.24

Cosmo-Z WinアプリのMDI化

Cosmo-Z Windowsアプリの大改造を行っています。

いままではMainFormに波形データを持たせていたのですが、それだと1個の波形しか表示できないので、過去に保存した波形と今キャプチャしている波形を見比べてみるといったことができません。

そこで、MDIアプリに改造しています。

子フォームを作って複数並べられるようにしました。

Mdiapp

いままでMainFormというクラス内で、ツマミが回されたりクリックしたりといったタイミングで自由に関数を呼び合っていたのですが、MainFormと波形ビューの間でやりとりするための関数を絞って徹底的なカプセル化を図っています。

MainFormを分割して、細かい部品に分解していっているわけですが、これがまた面倒くさい。アプリを1から作り直すレベルの大仕事になっています。

 

| | コメント (0)

2022.01.20

倉庫の片づけ

レンタカーで軽トラを借りて倉庫の片づけに行ってきました。

倉庫には2018年に本郷のオフィスを閉じた時に、「いつか使うかも」と思って捨てきれなかった物や、古い帳簿などを義務で保管していたのですが、少しずつ整理も進んできたので思い切って今月末で解約することにしました。

特電の倉庫は、到達できる唯一の道が「一方通行」「幅が細くて中型トラックが入れない」「16時以降は車両侵入禁止」という超絶アクセスの悪い立地にあります。車が入れないので倉庫として成り立たないのではないかと思うのですが、引っ越しの残り物を入れておくくらいのことはできました。

古い雑誌や帳簿類をトラックに載せて、自宅近くのレンタル倉庫に移動させました。保存義務の終了した帳簿はこれからシュレッダーしたり紙リサイクルに出したり、雑誌や書籍はお気に入りのを数十冊残し、時間をかけて捨てます。

Track_20220123131101

残りはジャンク基板やジャンク部品がたくさんと、古いPCが2台、事務機器(バーコードリーダーとかラベルプリンタとか)。

それから、本棚×3とキャビネット×1。この大型家具は来週中にオフィス家具屋さんに引き取ってもらう予定です。

Souko_20220123131101

まだ使えそうな綺麗なものまで廃棄するのはエコじゃないので、メルカリやヤフオクで売っていきます。

| | コメント (0)

2022.01.19

JTAGバウンダリスキャンを使ったFPGAの真贋判定サービスをはじめます

2022年に入ってからも電子部品の需給が相変わらず厳しい状況が続いています。現在の状況を一言でまとめると、Artix-7以降のFPGAであれば時間をかければ正規品が入手できますが、昨今の状況下ではそれ以前のFPGAの正規品はまず入手できません。

しかしながら、工場のラインなどでは10年、20年前に製造された機器はSpartan-3やSpartan-2、初代Spartanなど旧世代のFPGAを使用している基板のも多く、これらの製品はいまだに現役で稼働しています。そのような基板の再製造や保守には確実に旧世代のFPGAの需要も存在しているのですが、FPGAの流通在庫品の利用には偽物をつかまされるリスクがあります。

一般的にICの偽物には、異なるICのシルクを書き換えたものや、そもそも何も入っていないもの(石にピンを生やしただけの物)など、様々なバラエティがありますが、もし、偽物のICを知らずに実装してしまうと基板全体が動作しないばかりか、基板の他の部品を損傷したり、接続する他の装置を損傷するといった危険性があります。

Nisemono

昨今はマイクロスコープによる光学的確認や、X線による透視、I-V(電流電圧特性)カーブトレーサを用いた真贋判定が行われていて、真贋判定に特化したサービスを提供する会社もあり、それぞれの方法にはメリットデメリットがあります。

Juurai

これらの検査はどれも素晴らしいもので多くの真贋を判定できますが、XCS30とXCS40の違いや、XCF04SとXCF02Sのの違いなど、同一メーカー、同一ファミリで型番が異なるの判別ができません。なぜならば、同一メーカー、同一ファミリの製品では電源ピンやI/O、特定機能ピンの配置が同じであり、I-V特性もほぼ同じであるからです。

たとえば、Spartan-2のXC2S50のシルクを書き換えてXC2S150と称して流通在庫に流れてしまった場合、上記の従来の方法では判別することができません。

そこで、特殊電子回路では「同一ファミリ」内の贋物でも見分けられる方法として、JTAGバウンダリスキャンによる真贋判定を提案します。

その具体的な方法を説明します。まず、下の図のような検査基板を作成します。検査基板にはICソケットがあり、ここに検査対象のICを装着します。ICソケットにはQFP100,QFP144,QFP208,QFP240,BGA225,BGA324,BGA484,BGA676などを用意する予定です。また、検査基板はどんなICにも使えるよう、電源ピンの配置などは組み換え可能であるように設計します。

Kiban

この基板を介してICに通電することで消費電流を測ることができるので、シルクを書き換えた偽物ICや「中身なしIC」は即座に判別できます。

次にJTAGを通じてIDCODEを取得します。JTAGはほぼすべてのFPGAにあらかじめ組み込まれている機能で、ICの種類や、端子の状態を知ることができる、いわば工場出荷時の検査モードを実現するためのものです。JTAGのIDCODEはICの種類ごとに決まっているので、正常のIDCODEを読み取ることができれば、ICの中身は入っていて、少なくとも他のファミリでないことは判断できます。

Idcode_20220120034701

JTAGのIDCODEではデバイスに固有なので、メーカーはもちろんファミリや型番の違いが判別できます。

偽物を流通市場に流す悪徳業者は、安価で購入したICを高価なICに偽装するため、基本的には安価な偽造手口を使います。JTAGの回路やIDCODEを偽装したICを中に入れるということはまずありません。偽物のICであれば、電源投入時に電流異常で判断できるか、JTAGにアクセスできないか、もしくはより安いIC(例えばXC3S200Eを購入したつもりがXC3S50Eだった、など)のIDCODEが読み出されます。

このため、偽物のICかどうかが確実に見分けられるのです。ただし、XC6SLX45T-2とXC6SLX45T-3など、スピードグレードの違いや温度特性の違いはわかりません。

 

さらに、JTAGバウンダリスキャンを使えば、FPGAに何もプログラムされていない状態であっても、I/O端子を動かすことができるので、I/Oの端子のテストも可能です。中古品の正常性判定では、内部のワイヤが切れてなく正常に接続が維持されているかや、静電気や過電圧でI/Oが故障していないかどうかの判断などが可能です。

従来の方法とJTAGによる方法をまとめると下の表のようになります。

 

Hikaku_20220120032901

特殊電子回路では、このような「JTAGバウンダリスキャンによるICの真贋判定」というのを、サービスとして提供しようと考えています。

具体的にはお客様からFPGAをお送りいただいて、当社でJTAG検査を行います。当社ではIDCODEの照合と、全I/Oピンの入出力検査を行い、判定結果とFPGAをお返しするという形になります。

したがって、お客様はFPGAの現物をお送りいただくだけで良く、FPGAを使う回路の詳細や基板の仕様の提出は必要ないのでお客様の機密は保たれます。また、ツールを購入する必要も使い方を習得する必要もなく、現物をお送りいただくだけで利用可能です。

Flow

流通市場で入手したICが本物であるかどうかを確認する必要がある際には、ぜひとも特殊電子回路が提供する「JTAGバウンダリスキャンによる真贋判定」をご検討ください。

 

P.S. 

もし、このサービスにご興味がおありでしたら、Twitterで行っているアンケートにご協力ください。

https://twitter.com/nahitafu/status/1483635036624547843

 

Enquete

メールやTwitter、このブログのコメントなどでもご意見をいただけると嬉しいです。

 

 

| | コメント (0)

2022.01.12

風邪ひいた!?

朝から頭痛で起きられません。

昼過ぎにロキソニン飲んで、風邪薬飲んで、夕方またロキソニン飲んでやっと外に出られるくらいまで回復。

| | コメント (0)

2022.01.10

Cosmo-Zによる等価サンプリングの動画デモ

ここ数カ月の間、鋭意開発をしてきたCosmo-Zの等価サンプリング機能の開発が一段落したので動画にしました。

Cosmo-Zからパルスを出して、同軸ケーブルをつなげていって反射を測るというデモです。

最高で、毎秒1000回程度の等価サンプリングができ、その結果を記録できるようにもなりました。

これにて等価サンプリングはひとまず開発成功。

 

明日からは放射線計測機能の開発に入りたいと思います。

| | コメント (0)

2022.01.09

等価サンプリングの計測結果をファイルに保存できるようにした。

Cosmo-Zで、7.68GHzの等価サンプリングで8ch同時の反射測定ができるようになったのですが、オシロのように画面で見るだけではなくて、その結果を保存できるようにしようと思います。

Eqs0109

といっても新しくファイル形式を考えるのは大変なので、何度も繰り返し測った波形を並べることにしました。

Eqs0109_3

このような感じで、数分間繰り返し行ってその結果を記録できるようになった。

これで、長さや電気的特性(誘電率・透磁率)が時々刻々と変わる「変化する伝送線路」の反射波を数分間にわたって取り続けて記録することができるようになりました。

もし、Cosmo-Zの等価サンプリングにご興味をお持ちの方がいらっしゃいましたら、下記のURLから簡単な使い方の説明をダウンロードしてください。

等価サンプリング使い方.pdf

 

 

| | コメント (0)

2022.01.08

等価サンプリングで長時間サンプリングしたい

昨日は等価サンプリングのコアの部分をハードウェア化しました。

Cosmo-Zにはシーケンシャル・キャプチャという機能があって、同じキャプチャを100回とか10000回とか繰り返すことができます。昨日の等価サンプリングでは、必要になるキャプチャの繰り返し動作をこのシーケンシャル・キャプチャで実現していました。

今回の要求仕様は毎秒100回のサンプリングを2分というものなのですが、12000回のサンプリングが必要になります。シーケンシャル・キャプチャには弱点があって、毎回のサンプリングが128ポイント以上なければいけないという制約がありました。128ポイントの波形を96倍の等価サンプリングすると12288になって、1ポイントが2バイトで、それが8chあるので、1回のサンプリングが196kバイトになります。それが12000回あると2.4Gバイトのデータ量になってしまいます。

128ポイントというのは1.6マイクロ秒ですが、こんなに長い時間のデータはいりません。

今回は、数ナノ秒の間に起こる変化を長時間記録したいので、できるだけサンプリング長は短くしたいのです。

そういうわけで、測るべきタイミングでAXI StreamのDVALIDを有効にするような回路を作りました。

また、見たい部分(反射の先頭)を拡大して見られるようディレイを調整できるようにもしました。

通常のサンプリングで2クロック(25ns)の間を192ポイントに拡大することで、2分間測定しても約36Mバイトのデータサイズに収まるようになりました。

長時間の等価サンプリングによるデータロギングが見えてきました。

| | コメント (0)

«MMCMのPhase Shiftをハードウェアで自動化した