IP生成でエラーになって、IPの生成ができない現象に遭遇した。WSLを無効にすれば正常に生成できるが、気になったので調査してみた。Primeのバージョン16.1のエラー表示(17.1でも同様)。failedQuartusで自動生成されたMakefileの下記部分でエラーになっている。nios2-bspが実行される事がわかった。このbashは、WSLが有効な環境ではC:\Windows\System32\bash.exeに展開されてしまうのでエラーになってしまう。Shellのbashを呼んでほしい。対策かなり無理矢理だが、自作のnios2-bsp.exeをオリジナルのnios2-bspと同じフォルダに置くことで解決した。nios2-bsp.exeについては、特に理由はないが今回はgolangで作ってみた。2018.3)Microblazeを含むプロジェクトでLinuxを使いたかったので、簡単に済ませるためにpetalinuxを使うことになった。emptyとか言われる)。該当のhdfファイルをzip解凍して見てみると、中身はこうなっていた。sysdef.xmlまぁ、Microblaze関連の諸々がないのでそりゃあエラーになるよな。ちなみに、正常なhdfファイルの中身はこうなっているはず。sysdef.xmlこのプロジェクトでは、Microblaze用のブロックデザイン(microblaze_bd)の他に、UDP/IPプロトコルスタックのブロックデザイン(network_stack_bd)を含んでいた。ハードウェアとしては複数のEthernet用の口があるので、network_stack_bdを複数インスタンシエートしたら、hdfファイルがおかしくなった。原因は不明だが、複数の同じブロックデザインを含むプロジェクトでは、hdfファイル(正確にはsysdefファイル)を作成するためのwrite_hwdefコマンドがエラーになるようだ。手元で適当に試すと以下のようになる。2回同じファイルを開こうとしてるんだと思う。--get-hw-description=<path>コマンドで弾かれる。改ざんされたhdfファイルかどうかをチェックしている模様。--get-hw-description=<path>コマンドを騙せるということが分かった。これを使ってhdfファイルを作れば良し。今回のプロジェクトでは、以下のtclを実行してhdfファイルを作った。バグって正常にhdfファイルを生成できなくなる。これを回避するために、hdfファイルを改ざんする。hdfファイルの改ざんを検知するため、改ざんしたhdfファイルは使えない。hdfファイルを再生成する必要がある。壊れたhdfファイル(sysdefファイルと同じ)の中身を吸い出す。事前にbitstreamを生成しておく必要がある。hdf作成に必要なファイルたちを集める。改竄したhdfファイルをhwdefファイルとして生成する。write_sysdefコマンドで本物のhdfファイルを作ってもらう。ファイルの生成が原因で発生していた機能的な問題を回避するための緊急パッチにハマるので必ずパッチを当てておく必要がある。このパッチを当てないとMicroblazeが起動しない。Ethernetの略)。技術)を実現するためのボードを開発して、様々な実験を行っている。2017.2でなぜかQSPIブートできない現象にハマった際のメモをここで供養する。QSPIブートできないのはfsblのバグ(後述)で、おそらく2017.4では修正されているはず。ソフトウェア開発者向けガイド実際に参考にしたBOOT.binはxilinxが提供しているxilinx-zc702-v2017.2-final.bspというファイルのpre-buildに入っているもの。以下、表6-5を抜粋。以下でファイルの内容を見てみる。less先頭からBootROMヘッダーが始まっている。Bootgenの使用の表A-4を抜粋。0xFF0x000008A0からイメージヘッダーが始まると書いているが、実際のBOOT.binでは0x000008C0から始まっている。BootROMヘッダーの説明(UG585)ではBootROMヘッダー自体のサイズが0x8C0と書かれているので誤記だと思う。BootROMと同様に、odでBOOT.binを見てみる。0x240(バイトでは0x900)イメージヘッダーイメージヘッダーテーブルのあとにはBootgenの作ったイメージヘッダーが並ぶ。Bootgenの使用の表A-7を抜粋。0xFF先程と同様にodの出力を見てみる。u-boot.elfなので、このBOOT.binでは以下の位置にパーティションヘッダーがいる事がわかる。Bootgenの使用の表A-5を抜粋。Checksum例によって、odでBOOT.binを見てみる。(u-boot.elf)特に変なところもなく、以下のことが分かる。u-bootだけ0x0C/0x10のロード/実行アドレスが0x004000000x18のAttributeは、bitファイルだけPL(0x00000020)、その他はPS(0x00000010)(参考)QSPIブートできない現象のデバッグs25fl256s1というFlashメモリで起動しようとすると、以下の表示になる。bootの結果)u-bootやlinuxでQSPIの中身を読んでみると正常に書き込めている。transferをしているようなので、xqspips_flash_polled_example.c(サンプルデザイン)を実行してみる。0x6Bのうち、QUAD_READ_CMDがNGであることがわかった。0x04とかいう謎の値が入っていた。これを以下のように、FAST_READ_CMDにハードコードすることで読み出しできるようになった。製品をいじめる試験で、たくさん電源OFF/ONを実施したい!けど手動ではやりたくない。手元にPDS-Aシリーズという安定化電源とIF-70GUという別売りのコントロールボードがある。コマンドラインから叩きたい。msys2でコンパイルすることにした。(シングルバイナリにしたかったのでcygwinは除外)提供されているドライバのAPI調査IF-70GUのドライバのzipファイルが公開されているので中身を眺めてみるが、どうやら、GUIのサンプルしか入っておらず、自作プログラムに組み込むのが面倒くさそう。一応、上記のドライバをインストールするとC:\Windows\System32\IF_60.dllがインストールされる模様。IF_60.dllの中にあるAPIをコマンドラインから呼べるようにすれば良い。dll内のAPIはpexportsを使えば、以下のように抜き出すことができる。-lif_60としてdllとリンクすれば良い。電源ONするサンプルIF70_on.cとして以下を作成した。開設コスモリサーチエンジニアのブログを開設しました。凄腕エンジニアたちが日々、技術的問題と格闘し解決した軌跡を語ります。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。