2014年8月31日日曜日

ZYBO 4

なかなか、遅々として進まない… -_-;; 

私は平日は3:30に起床するので遅くても23:00までには就寝する。 そのため、FPGAの作業等で夜更しできるのは金曜日の夜か土曜日の夜だったのだが、 事情で日曜日も3:30に起床しなければならなくなり、夜更しできるのが金曜日の夜だけとなってしまった。 休日の昼間の時間も趣味に使うことは可能なのだけれども、日中でなければできない他の用事もあったりするので やはり集中できるのは夜中となる。のだが、最近は気力減退気味だ。

 ZYBOでのテーマとして以前作成したDFT IPを実装してみることにしたが、DFT IPをCPUから制御するためにはAXI InterconnectとのI/Fが必要になる。レジスタ関係のアクセス(設定・読出し)にはAXI_GPポートに接続するAXI Slave I/Fが必要になるし、DFTしたデータをDRAMに格納しようとすればAXI_HPポートに接続するAXI Master I/Fが必要になる。AXI IPはXilinxのツールでも生成できるようだが、それだと勉強にならないので自作してみることにした。

ということで、RTLの作成を始めた。

資料としては、ARMのAMBA AXI Protocol v1.0 Specification、 XilinxのUG585 Zynq-7000 AP SoC Technical Reference Manual、 UG761 AXI Reference Guide 等を参照している。

AXIの規格を読んでいて、AxCACHE信号がよくわからない。
これはAXI MasterからAXI Slaveに対しての信号になるが、属性値BufferableによってWrite Responseの返し方が変わるというのは想像できるんだけど…   CacheableとかAllocateなどの属性はこのようにMasterが指定するものなのか? Slave側componentの実装内容によって決まることがらのような気がするのだが。。。。




2014年8月16日土曜日

ZYBO 3

さて、ZYBOだが、何して遊ぼうか考えているのだが・・・・

主な周辺I/OやDRAMはPS側に接続されているので、いまさらそれらのIPを実装してみてもしょうがない。 Zynqについては最近NIのLabView/FPGAやZynq搭載計測モジュールの広告をよく見かける気がするが、Zynqでなにか作るとしたら、やはり、信号処理的なやつとか数値演算的なやつが良いのかもしれない。  そこで、以前AtlysボードでやったDFT IPをZYBOに実装して動かして見ようと思う。

・DigilentのDVI(HDMI) IP
  zybo_base_systemに含まれているIPのソース等を色々と眺めていて気づいたのだが、DigilentのDVI (HDMI) IPのライセンスがBSD 3-clause license (修正BSDライセンス)になっていて、ちょっぴり感動した。




2014年8月9日土曜日

世界最小クラスのFPGA

夏バテ気味である。

LatticeのiCE40の0.4mm0.35mmピッチBGAパッケージがどれ程の小ささなのか興味があったので、通販サイトを調べたところDigi-keyで売っていたので買ってみた。 Latticeは最近 iCE40 Ultraというのも出しており、iCE40 Ultraには0.35mmピッチのパッケージ品もあるようだが、Digi-keyではiCE40 Ultra自体をまだ扱っていないようだ。

買ってみたのは、LM4Kという型番の25ボールWLCSPパッケージ品で、外形寸法は1.71mm x 1.71mm x 0.35mm、 ボールピッチ0.4mm0.35mmだ。

もはや、肉眼ではパッケージに印刷されている文字は見えない。デジカメ越しに見てもカメラのLCDの解像度では文字が潰れて判読できなかった。 撮影画像を見て初めて判読できた。



こんなに小さいが、LUT数は3520(XO2-7000の半分くらいの規模か?)、Enbedded RAMは80Kbit(同、1/3位)である。

http://www.latticesemi.com/en/Products/FPGAandCPLD/iCE40

これに自作CPU(zumi32)を実装して動かしてみたいもんだ。
せめて0.5mmピッチだったらワイヤーをボールに直接ハンダ付けして使えそうなんだがなー・・・
さすがに、この大きさだと無理っぽい。



2014年7月27日日曜日

ZYBO 2

ZYBOやVivadoの習熟のためにDigilentのサイトからzybo_base_system.zipをダウンロードし、使ってみた。

zipファイルを解凍すると、


zybo_base_systemというディレクトリ以下に展開された。

zybo_base_system直下は以下のようになっていた。

source/vivado/hw/zybo_bsdまで移動し、そこでvivadoを起動した。

vivadoはv2014.2を使っている。

zybo_base_systemのプロジェクトは古いバージョンのvivadoで生成されているので現行バージョンに更新せよというダイアログが出た。

OKボタンをクリックしたら、プロジェクトが更新された。

プロジェクトで使用されているXilinx IPも最新版への更新が必要なようだ。
IP Statusを見ると12種のIPのUpgradeが推奨されている。

Upgradeした。


Upgradeが完了したら、Block Diagramが表示された。

PS(Processing System)をダブルクリックしたら、PS部の詳細Diagramが表示された。この部分はワンチップマイコンと同じようなものなので、内蔵しているファンクションで使うものを選択し、その信号をどのピンに引き出すかの設定がメインのようである。 この設定はボード仕様(ZYBO)と整合しているものなので、今後もこの設定を使うことになる。



再度Block Diagramを見てみる

このプロジェクトはアナログVGA I/FとHDMI I/F用にそれぞれVDMAとDISPLAY CONTROLLERを実装しているようである。



合成とImplementationを実行した。

合成とImplementataionは上手く言ったが、合成に12分位かかった。
PL部はそれほど大きいデザインには見えないのだが。。。

クロック情報も見てみた。HDMIの系は100MHzと500MHzになっているので、解像度はSXGA相当のようだ。 厳密にはSXGAのドットクロックは108MHzなので108MHzと540MHzが必要な筈なので若干低めにしているようだ。
合成が終わったので、BSP(Board Support Package)生成用のハードウェア情報をExportした。


この操作を行うと、zybo_bsd.sdkというディレクトリ下にsystem_wrapper.hdfというファイルが生成された。 SDK (eclipse)でBSPを生成するときにこのファイルが読み込まれるようだ。

次にSDKを立ち上げる。




Hellow world(の文字列をコンソールに出す)プロジェクトを作ってみた。


Buildは通った。


これをDebugモードで動作させようとしたところ、ちょっとした問題が発生した。


このプロジェクトでのSTDOUTはUARTになっており、UARTはFT2232D(USB)経由でPCにつながっている。 私の環境(Linux Mint)の場合はデバイスファイル名はttyUSB1となっている。
そこで、SDKのTerminalをttyUSB1にしてそこに文字列が表示されることを期待した。


設定自体は出来たのだが、プログラムを実行したところSIGSEGVでSDKが落ちた。

どうもこのやり方だと上手く行かない。 Javaの環境に何かあるのかも知れない。
そこで、gtktermというターミナルソフトでやってみたら文字列が表示された。

ということで、Vivado→SDK→実行までの簡単な流れは習得できた。


2014年7月21日月曜日

my_FPGA_BOARD 13

先日公開したMY_FPGA_BOARDの設計データのFPGA実装例に、DVIとカメラの実装例を追加した。

http://www.hi-ho.ne.jp/bravo-fpga/

2014年7月19日土曜日

my_FPGA_BOARD 12 (カメラ基板の作成 2)

カメラ用モジュールを含むシステムアーキテクチャは以下のようになった。

I2Cはカメラ(TCM8230MD)の設定を行うために必要である。

例の1件のタイミングエラーは相変わらずあるが、それ以外は問題無く合成できた。
リソース(SLICE)の使用率は53%であった。


動作確認


撮影した画像(左上)


さて、Communication Box (GPIB-IP)の作成から始まってずっとLattice MachXO2で遊んできたが、ここで一旦MachXO2は終わりにして次はZYBOで遊んでみようと思う。

my_FPGA_BOARD 11 (dvi_encの実装とカメラ基板の作成)

レベル変換基板をチップ部品を使って小型化した。




FPGAの中身の方はフレームバッファを組み込み、以下のようなアーキテクチャにした。


dvi_encはこれまでにSpartan3やSpartan6でも動作させている。その時に使用した画像データを今回も表示させてみた。


綺麗に表示されている。長時間表示させても表示が異常になることは無いので、信号レベルに問題無いと思われる。このレベル変換回路は、インターネットでLVTTL IOと抵抗を使ったDVIへのレベル変換回路を作成されている方のブログを見つけ、それをヒントにLVDS版を考えてみたのだが、後から調べたら、FPGAマガジンのNo.1にもこれとほぼ同じ回路(LVDS→DVI)が掲載されている記事があった。(p51,図2)

・カメラ基板
以前予備で購入しておいたVGAカメラ(TCM8230MD)が1個残っていたのでカメラ基板も作ることにした。



ちゃんと動作するかな?

・タイミングエラー
ところで、前回のブログでFPGAの合成結果で1箇所タイミングがMetしない箇所があると書いた。
そのタイミングエラーはまだ解決できていない。
以下のように325MHzの系で1箇所だけタイミングエラーが出ている。

そのエラーの詳細は以下の通りだ。

PT35AのIOLOGICについてエラーと言っているようだ。どうもFmaxの問題のような気もするのだが、それならばエラーが1箇所だけというのは解せない。

PT35Aは上記の通り112番ピンに割り当てていたのだが、試しに、PT25AとPT35Aのピン割り当てを入れ替えて見た。

この場合、112番ピンがPT25Aとなるのでタイミングエラー箇所はPT25Aになると思うのだが、不思議なことにPT35Aがタイミングエラーになる。


念の為、Physical Viewerで確認したが確かにPT35Aは122番ピンになっている。

・・・と言うことで、このエラーはどうも解せない。何が不味いんだろうか???
タイミングエラーは物理的な配線に対して出されるものだと思うのだが、これだと信号名に対して出されているように見える。。。実際の動作は問題無いことも相まって、うーむ。。。解せない。。


ERROR: Failed to spawn fakeroot worker to run ...

なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz  家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...