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

2023.07.31

U-Bootの起動中に買ってにキー入力がされてブートが止まってしまう

Cosmo-Z Mini2を出荷しているのですが、中の1台で、USBを挿さずに電源を入れたところ、いつまでたっても起動しないという現象が見つかりました。

起動しないときにUSBを挿してUARTのコンソールを見てみると、どうやらU-Bootで止まってしまっているようです。

Hit any key to stop autoboot:

のところで何らかのキーが押されて止まってしまっているようです。

この"Hit any key to stop autoboot:"という文字列をfgrepしてU-bootのソースを調べてみると、common/autoboot.cというソースの中で処理されていることがわかりました。

その中で、static int abortboot_single_key(int bootdelay) という関数があって、tstc()という関数を2か所で呼び出し、Hit any keyの判定を行っているようでした。

何かキーが押されたら止めるという判定ではなくENTERキー(0x0d)が押されたら止めるというふうにプログラムを書き換えてみたのですが、それでも止まってしまいます。どうやら、UARTに送られてくるキーにはENTERが含まれているようです。仕方がないので、tstc()の後ろのgetchar()で取得した内容がCTRL+C(0x03)だったらautobootを止めるというようにしたら、起動中に止まらないようになりました。

 

これだと止めたいときに止まらず不便なので、boot.scrで制御できないかなと考えました。

ソースを読むと、bootdelayという環境変数が-2のときにはカウントダウンせずに自動起動し、-1のときには自動起動をしない、0以上の場合は指定された秒数だけ待つという仕様になっていました。

しかし、boot.scrで環境変数を書き換えようとしても、なかなかうまくいきません。そもそもboot.scrの元になるテキストファイルをどのように書けばよいのかがよくわからないのです。

bootdelay=-2

とすればよいのか、

setenv bootdelay -2

なのか、

または

setenv bootdelay -2;

なのか、

setenv bootdelay -2 && ・・・

なのか。

どの方法を試してもダメでした。環境変数bootdelayは書き換わりません。ビルド時に埋め込まれた値が使用されてしまいます。





| | コメント (0)

2023.07.30

Cosmo-Z Miniを4台製造

6月末からご注文いただいていた分のCosmo-Z Mini2を出荷しようと4台作り、検査を行いました。

組み立てていたら、FAN用のコネクタがないとか、USBのType-CケーブルがAmazonから届かないとかで秋葉原に買い出しにいくことになりました。真夏の秋葉原はマジで暑いですね~

こんな暑い中チャリを漕いでコネクタ買いに千石に行くってなんなんでしょうね。

クロネコヤマトに持ち込んで発送したのですが、19:00を回ってしまっていたので到着は翌々日になると思います。

 

| | コメント (0)

2023.07.29

Spartan-7ボードを製造しようとしたが部品が足りない

Spartan-7基板を作るために部品を数えていたら、イーサネットのPHY「LAN8720AI」が足りない。

43個在庫があるはずなのに6個しかない。

4月に棚卸したはずなのに、なぜだ!?

まぁ、でも、このLAN8720AIは「がじぇるね」でGR-SAKURAを作ったときの部品の残りなのだ。

がじぇるねが終了してからLAN8720AIを含めいろんな部品の在庫を抱えてしまった。要するに負の遺産なのだが、LAN8720AIに関しては10年かかってようやく掃けたことになる。

これはちょっと嬉しい。

GR-SAKURAで使った部品の残りは中途半端な数で結構溜まっているので、いろいろなプロジェクトで小出しに使っていかないといけないのだ。

| | コメント (0)

2023.07.27

MITOUJTAGのEfinixパッチを公開

しました

| | コメント (0)

2023.07.22

ZYNQの225ピンは何が削られているのか?

今日はZYNQの225ピンデバイスを使った回路設計をしています。

225ピンというとXC7Z010かXC7Z007Sなのですが、XC7Z020の484ピンと比べると様々なバンクや機能が削られているようです。

 

まずはBank0。VCCBATTがないですね。あと、使わないけどDXNもない。

Zynq2251

 

MIO0はすべて残っているのですが、MIO1は、イーサとSDカードが無くなっています。でもUSBのULPIは残っているから、USB経由のLANを使えばLANは使える。そうか、ZynqberryはだからLAN9514でUSB経由のLANにしていたのか!

Zynq2252

 

DDRのインタフェースは16bitになりました。上位16bitがありません。最大メモリは512MBになります。

Zynq2253

 

I/OはBank34とBank35しかありません。しかも、Bank35はちょこっとだけ。

Zynq2254

 

このような感じでいろいろと削られているのがZYNQの225ピンのようです。

| | コメント (0)

2023.07.21

VivadoからJTAGでFPGA書き込みを行うためのTCLスクリプト

VivadoでGenerate Bitstreamしたあと、Open Hardware Managerして書き込むのって面倒くさくないですか?

そこで、TCLスクリプトを開発しています。

まず、できあがったスクリプトを晒します。

set default_filename ""
proc _NahiProgram {{_filename ""}} {
global default_filename
set filename ""
if {$filename == ""} {
set filename $default_filename
} else {
set filename $_filename
}
set_property PROGRAM.FILE $filename [get_hw_devices xczu28dr_0]
program_hw_devices [get_hw_devices xczu28dr_0]
}
proc _NahiCloseProgram {} {
refresh_hw_device [lindex [get_hw_devices xczu28dr_0] 0]
disconnect_hw_server localhost:3121
close_hw_manager
}
proc _NahiOpenProgram {} {
open_hw_manager
connect_hw_server -allow_non_jtag
open_hw_target
}
_NahiOpenProgram
set default_filename "ファイルのパス/design_1_wrapper.bit"
_NahiProgram

です。

このスクリプトを

Vivadoへのパス\bin\vivado.bat -mode tcl -nolog -nojournal -source prog.tcl -tempDir ./temp

として起動するのですが、論理合成に使っているメインのVivadoとは別に分けるのがポイントです。

論理合成に使っているメインのVivadoでOpenHardwareManagerすると画面がちらちら開いたり閉じたりして邪魔でしょ?

それから、TCLスクリプトはprocと書かれたところは関数で、_NahiOpenProgramから_NahiProgramが実際に最初に実行される部分です。PHPみたいな構成です。

_NahiOpenProgramはVivadoのハードウェアマネージャを開いてターゲットを開きます。この処理は時間がかかるので、最初に1回だけ実行すればよいように分けてあります。

_NahiProgramは実際にプログラミングします。引数は書き込みたいbitファイルのファイル名ですが、default_filenameにファイル名を与えれば、ファイル名を省略しても書き込んでくれます。

だから、Tclのコンソールで↑のキーを押して_NahiProgramだけを実行すればいいわけです。

マウス操作をしなくていいので、これは楽です。

あと、get_hw_devices xczu28dr_0みたいなのは当方で使用している基板の構成をベタ打ちしてしまっているので、みなさんが使うときは環境に合わせて書き換えてください。

いずれNahiVivaに統合します。

 

| | コメント (0)

2023.07.20

「FPGAと高速ADCを使った物理計測の世界」の資料がアップされました

先日のACRiウェビナー「FPGAと高速ADCを使った物理計測の世界」の資料がアップロードされました。

Siryou

https://acri.connpass.com/event/288911/

どうぞご覧ください。

 

| | コメント (0)

2023.07.18

ACRiのウェブセミナーで講演しました

ACRiの第13回ACRiウェビナー「FPGAを活用したミックスド・シグナル・アプリケーションの実例」で、FPGAと高速ADCを使った物理計測の世界というテーマで講演させていただきました。

https://acri.connpass.com/event/288911/

資料は70ページにもなりました。

Acrisiryou

好評をいただけたようで良かったです。

 

| | コメント (0)

2023.07.17

Cosmo-Z Mini2の基板でレジストがずれている!?

Cosmo-Z Mini2の基板が25枚届きました。

さっそく実装に出そうと思ったのですが・・・、

レジストとパターンがずれているではないですか!!??

1_20230722154601

NSMD(凹んだ部分にハンダボールが溶け込んで横からがっちり固めるやりかた)のパッドで作ったはずなのですが、パッドとレジストがずれてしまっています。画像で測ったところ、ずれは0.07mmくらいでしょうか。

中には比較的ずれが小さいものもあったので、それらを選別して製造に出しました。

Photo_20230722154801

実装業者さんに聞いてみると、ずれが大きいやつでもこれくらいならギリ大丈夫とのことでした。

ちょっと怖いので、良くできているものだけを選別します。

何とか今回の製造のための枚数は足りたので事なきを得たのですが、残りは捨てることにします。

| | コメント (0)

2023.07.14

NahiVivaを改良中 ~ Vivadoのインストールパスに影響されないように・・

NahiVivaというVivadoのTcl拡張ライブラリを作っています。

VivadoのUpdate IPや論理合成、ブロックデザインを最小限のTCLファイル化して保存するSaveコマンドなどを備えています。このNahiVivaのSaveコマンドを使うとVivadoのプロジェクトディレクトリを全部消してしまってテキストのソースだけにできるので、gitで管理できるようになるというのが売りでした。

NahiVivaの弱点というのも自分では把握しており、

  • たまにSaveして、テキストのソースから戻せないプロジェクトがある
  • 最初のプロジェクトを作る方法がよくわからない
  • Vivadoをインストールしたパスによって設定ファイルを変えなければならない

という点です。

この3番目の弱点を改善しました。

今までのNahiVivadはSETTINGS.CMDというバッチファイルに

@SET VIVADO_PATH=D:\Xilinx\Vivado\
@SET VIVADO_VERSION=2020.2

という内容を書いておいて、このバッチファイルを読み込んでVivadoを起動するしくみだったのですが、Vivadoをインストールするパスは個々人の環境依存なのでバッチファイルを書き換えてくださいということにしていました。

しかし、バッチファイルを書き換えるというのは今日日やることではありません。

ということで、SETTINGS.CMDの代わりにSETTINGS.TXTというファイルにして、使いたいVivadoのバージョンだけを

VIVADO_VERSION=2022.2

と一文書いておけばよくしました。

これを実行するバッチファイルですが、バッチファイルから別の設定ファイルを読み込むテクニックを使っています。

@SET VIVADO_PATH=C:\Xilinx\Vivado\
@REM ==================================
@REM ここから下は変更しないでください
@REM ==================================
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1,2 delims==" %%a in (SETTINGS.TXT) do (
if %%a == VIVADO_VERSION (
set VIVADO_VERSION=%%b
)
if %%a == VIVADO_PATH (
set VIVADO_PATH=%%b
)
)
if not defined VIVADO_VERSION (
echo VIVADO_VERSION が設定されていません。SETTINGS.TXTを修正してください。
goto err
)
if exist "%VIVADO_PATH%\%VIVADO_VERSION%\bin\" (
echo "FOUND %VIVADO_PATH%\%VIVADO_VERSION%\bin"
) else (
SET VIVADO_PATH=%VIVADO_PATH:C:=D:%
if exist "!VIVADO_PATH!\%VIVADO_VERSION%\bin\" (
echo "FOUND !VIVADO_PATH!\%VIVADO_VERSION%\bin"
) else (
echo --------------------------------------------------------------------------------------
echo 指定されたバージョンのVivadoが %VIVADO_PATH%\%VIVADO_VERSION%\bin に存在しません
echo SETTINGS.CMDを見直してください
echo --------------------------------------------------------------------------------------
goto err
)
)
%VIVADO_PATH%\%VIVADO_VERSION%\bin\vivado.bat -mode tcl -nolog -nojournal -source nahiviva.tcl -tempDir ./temp -tclargs "vivado_version=%VIVADO_VERSION%" opengui 
:err
pause -1

このバッチファイルはVivadoの存在するパスをCとDを検索し、ユーザがテキストファイルに書いたVivadoのバージョンを開き、バッチファイルからTclへ環境変数を渡しています。

バッチファイルというのは本当にクソな仕様で、変数を書き換えても書き換わらないということがよくあるようです。理由はなんだかんだあるのですが、期待した動作をさせるには、setlocal ENABLEDELAYEDEXPANSION を使えば解決できるようです。

 

VivadoはBlockDesignをTcl形式で保存するとTCLの中にVivadoのバージョンがハードコーディングされてしまいます。

################################################################
# Check if script is running in correct Vivado version.
################################################################
set scripts_vivado_version 2020.2
set current_vivado_version [version -short]と

このため、作ったバージョンのVivadoでしか開くことができません。

Vivadoでバージョンを気にせずに配布できるファイルを作るというのはかなり難しいことなのです。

そこで、

################################################################
# Check if script is running in correct Vivado version.
################################################################
set scripts_vivado_version $specified_vivado_version
set current_vivado_version [version -short]と

と置き換えて、しかも、Vivadoの起動時にバッチファイルから渡されたVIVADO_VERSIONの値をTCLの変数にして、バージョンによらずBlockDesignを開けるようにしました。

これで、Vivado 2020.2以降であればなんでも開けるプロジェクトが完成しました。

 

 

| | コメント (0)

2023.07.13

Spartan-7ボード用のUSB-AXI-DDRサンプルを公開しました

特電Spartan-7ボード用に作成した、USBからAXIバスを通じてDDR3メモリにアクセスするというサンプル回路を公開しました。

詳しくはダウンロードページへおこしください。

NahiVivaでアーカイブされているので、Vivadoのプロジェクトファイルなどは入っていません。

あるのは、Tcl化されたVivadoのBlock DesignとIPのソース、ピン定義など、テキストファイルで表現できるもののみです。だから非常にコンパクトなサイズでVivadoのプロジェクトが配布できるのです。

これをダウンロードしたら、SETTINGS.CMDの中に書いてあるVivadoのパスとVivadoのパスを書き換え、src¥bd_6f02_bd.tcl の23行目の

set scripts_vivado_version 2020.2

をお使いのVivadoのバージョンに書き換えて、open_project_gui.cmdを起動してください。

(面倒ですみません)

自動的にVivadoのプロジェクトとBlock Designが作られるはずです。

| | コメント (0)

2023.07.12

Spartan-7ボード用の64bitマルチボード対応DLLを公開しました

特電Spartan-7ボード用の64bit マルチボード対応のDLLを公開しました。

ダウンロードページからダウンロードできます。

また、応用例として

というのを用意しました。

Raspberry Piカメラからの画像をDDR3 SDRAMに溜めてPCに取り込むというアプリです。

64multidll

 

| | コメント (0)

2023.07.11

Kintex-7を流通在庫で買ってみた

Kintex-7の値上がりがひどいですね。

2016年~2021年までは4~4.5万円くらいだったXC7K160T-2FFG676Cが、2021年半ばに52000円、2023年7月では95000円です。

そんななか、中華系の流通在庫で1万1千円くらいで売られているのを見つけましたwww

偽物ICを研究している私としては飛びついて購入しました。

注文してから4~5日で発送されてきたのですが、見た目はごく正常。

K7ayashii

BGAの端子も極めて健全。リボールしたような形跡もないので新品の正規品のように見えます。

20230717_15410701

AMD Device Lookupで見てみると、部品名がKintex-7と出ずに、「T0221-05-1988」と謎の表示。

K7devlookup

なんだこりゃ!?

真贋判定器の676ピン版の開発を急がねば!!!

少しだけやる気がでてきました。

| | コメント (0)

2023.07.09

Cosmo-Z Mini2でゲイン可変回路を使った場合の歪

Cosmo-Z Mini2のゲイン可変回路で、OPアンプにLMP7715を使った場合、大きな歪(-70dB程度)が出ることがわかりました。

歪が出る条件は、

  • LMP7715を使用する
  • 入力電圧が0.3~0.5V付近で大きくなる
  • 周波数が300kHz~1MHzで出てくる

というものです。

OPアンプの出力をオシロで見てみると、こんな小さな歪があるんですね。

Scope_35

周波数を上げていったり、

Scope_33

振幅を増やしたりするとこの歪が徐々に大きくなっていきます。

Scope_36

 

Scope_39

Scope_37

結果的に、こういう大きな歪が生じてしまいます。

おそらくレールツーレールの回路を実現するために、上側と下側の両方の回路が中に入っていて、それを切り替えるところで歪が生じてしまっているのでしょう。17MHz帯域のOPアンプではありますが、実際に使えるのは100kHzといったところでしょうか。振幅を下げれば歪は生じないのですが、それだと0.5Vくらいのアプリケーションで困ってしまいます。

 

このように歪を生じているのですが、入力のアナログスイッチでこのOPアンプを使わないモード(bypass)にしても、歪が出てきてしまいます。

Gainsw

それは、使っているアナログスイッチはOFFのアイソレーションは十分なのですが、端子間容量が20pFもあるのです。

1MHzでは20pFの容量は8kΩですから、このOPアンプが歪だらけの信号を出していると、アナログスイッチをOFFにしても歪が漏れてきてしまうというわけです。

この問題はなかなか対処が難しく、LMP7715を使わなければよいのですが、代わりになるOPアンプがなかなか見つかりません。

ADA4841というのも計測用のメジャーなOPアンプでイイ感じなのですが、入力バイアス電流が3~5.3uAもあります。入力の50Ωを切り離すと1MΩとの間で3V~5.3Vもの電圧を発生させてしまいます。

LTC6252とLTC6228も同時に試しましたがどうしてもバイアス電流と1MΩで生じるオフセットが大きくなってしまいます。

1MΩの入力インピーダンスでも正確な電圧が測定できて、50MHz以上の帯域を持ち、歪もノイズも増えない、というアナログフロントエンド回路を作るのは楽じゃないですね。

たかが倍率x1のバッファを作るのがどうしてこんなに難しいんでしょうね。

 

| | コメント (0)

2023.07.08

Cosmo-Z Mini2の基板修正

ZYNQ搭載のADC/DACボードの量産に向けて、基板の修正を行いました。

デバッグの結果、修正箇所は以下のとおり。

Shusei1

Shusei2

機密保持のためにモザイクをかけていますが、多くは部品定数の変更です。

基板パターンの変更はそんなに多くはありませんでした。

 

こういう基板の改版とかで、不意に何か触ってはいけないところを触って予期せぬ箇所が書き換わっていないか不安になります。

ガーバデータはテキストファイルなのでdiff取って比較すればよいのですが、CADの気分次第で出てくる順番が異なるのでそうもいっていられません。

最近使っているのはAltiumが運営しているgerber-compareというサイト。

http://altium.com/gerber-compare/

このようにガーバ同士を比較して相違点のある部分をグラフィカルに表示してくれます。

F0f4t3gauaav350

結構賢くて、範囲で表示してくれるのでBGAのピンが全部1個1個出てくるということはなく、BGAの範囲が違っていますよと教えてくれます。

F0f5fehakcsekho

変なところが書き換わっていないことを確認できたら、安心して基板屋さんに出せます。

 

| | コメント (0)

2023.07.05

事業再構築補助金 ついに交付申請完了

ついに、事業再構築補助金の交付申請を完了しました!

修正事業計画書を書き上げ、特注自社製品の仕様を書き上げ、経費の見積書に間違いがないことを確認していざ申請です。

と思ってJGransを開いたらどこにそんな申請リンクがあるのかわからない・・

 

おそらく、JGrantsってどんな補助金・助成金でも申請できるポータルサイトで、元からそこに登録されているわけじゃない。

わざわざ新しく「検索」して「事業再構築の6回目の交付申請」という補助金を探してきて申請しなければならないんですね。

で、ようやく申請画面です。

事業の金額とか申請金額とかを再びここに書くのですが、謎なのが事業開始日。

Koufu1_20230709225001

これを交付申請の日にしてしまうと事前着手で買ったものがダメになるのかな、とか考えて躊躇してしまいます。

事業再構築補助金の申し込みをした日(2022年6月29日)にしてもいいのですが、それ以前に購入したICソケットがダメになる。

そう思って、かなり早い時期を開始の日にしました。

 

あとはアンケートがいろいろです。

Koufu2

いざ、申請!

Koufu3

 

無事に通ることを祈ります。

 

| | コメント (0)

2023.07.04

交付申請のための仕様書

事業再構築補助金では、自社で特注の製品を作る際には設計図とか仕様書を付けろと書いています。

また、購入する部品とかで予備を持つことは許されず、実際に使用した分だけしか経費にできないようです。

というわけで、購入した部品のうち、自社設計装置に使う部品の中で金額が大きいものや数がまとまっているものの購入価格のリストを作って添付しました。

Genka

また、自社で作る装置の仕様書を明確にしました。

この仕様書は最後の5ページが重要なのですが、その意味を説明するために41ページ使っています。

Siyou

これをパソナの中の人が読むのだろうかと心配になってきます。

 

| | コメント (0)

2023.07.03

事業再構築補助金 自社開発の機械装置を3つに分ける

私の事業再構築補助金は自社で機械装置を作るというストーリーなのですが、その装置をType-A、Type-B、Type-Cと3つに分けて別々の装置として申請することにしました。

まずType-Aの装置を試作してうまく動いたらType-BとType-Cを順次作るという流れなのですが、そういうことを事業計画に反映させなければならないようです。交付申請の際に事業計画書の修正版を添付しなければならないのですが、1つの装置を3回に分けて作るとなると見積書の取り方とかも難しくなるし、基板製造の外注を3回に分ける理由を事務局の中の人が理解できなくなります。

そういうわけで事業計画書中に3回に分けて作るということとと、それに応じた見積書を用意するということで説明がしやすくなるからです。

ということで、修正事業計画書や、Type-A、B、Cごとの原価計算などをしていました。

| | コメント (0)

2023.07.02

ACRiウェビナーで講演します

来る7月18日に、「第13回ACRiウェビナー:FPGAを活用したミックスド・シグナル・アプリケーションの実例」という講演を行います。

Acri_20230709231001

以下、紹介文より

FPGAとADCを組み合わせれば物理現象をリアルタイムに計測・制御できると思われているが、言うほど簡単ではない。アナログとディジタルが融合する領域には様々な技術的な壁が立ちはだかるためである。本講演では、当社で開発したCosmo-Zというデータ計測収集装置を題材に、ノイズ、歪、エイリアシングなど測定を邪魔する様々な問題とその解決方法を紹介する。そして、54Gspsの等価時間サンプリングや、μV以下の微弱信号測定、放射線計測における「アナログでは実現できないフィルタ」、超高速FFTなど、FPGAを用いた計測ならではの応用事例を紹介する。

どうぞよろしくお願いします。

 

| | コメント (0)

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