VivadoのTclでTCPサーバーを利用する

VivadoはTclスクリプトで操作できるというのは,Vivadoを普段から利用している人はよく知っていると思います.プロジェクト作成やビルドをスクリプト化している人も多いことでしょう.Tcl経由でFPGAにビットファイルを書き込んだり,ILAやVIOを叩くという使い方もできます.

そんな便利なVivadoのTclインタプリタですが,スクリプトの実行のたびにVivadoを起動すると起動時間の長さが気になってきます.というわけで,VivadoのTclインタプリタでコマンド実行用の簡単なTCPサーバーを作ってみました.

とりあえずの最終版は command_server.tcl です.

$ vivado -mode tcl -source ./command_server.tcl

として実行すると,16384番ポートでTCPサーバーが立ち上がって,Tclコマンドを受け付けます.

ちなみに,ここで紹介する方法では,TCP経由でなんでもできてしまいます.使用する場合には,自己責任で十分に注意して実行してください.

続きを読む

ZYBO Z7-10/Z7-20用のPYNQ環境の構築

ZYBO Z7-20でPYNQを使う からだいぶ時間がたって手順がちょっと変わってしまっていました.そこで,あらためて,公式ドキュメントを参考に環境を構築して,ZYBo Z7-10/Z7-20で動作するPYNQ環境を作るまでの手順を紹介します.
作業環境のOSは Ubuntu 22.04で,PYNQのビルド環境はVirtualBox上の Ubuntu 20.04 上に構築します.セットアップするPYNQは,3.0.1 です.ビルドに使用するVivadoとPetaLinuxは2022.1です.https://www.xilinx.com/support/download.html からダウンロードしておきます.

Vivadoのインストール

続きを読む

Kria-PYNQのビルド

GitHubで公開されてているKria-PYNQのbaseをビルドしてみる.ライセンスは https://github.com/Xilinx/Kria-PYNQ/blob/main/LICENSE によるとBSD 3-Clause License なので,オリジナル作るときはこれをベースにすすめればよさそう.というわけでビルドして生成されたVivadoプロジェクトなどを眺めてみました,という話.

続きを読む

KV260のBoot FWのアップデート

KV260で公式のUbuntu 22.04を使おうとしたら Boot Firmware が古くてブートできなかったので更新して事なきを得ましたよ,という話.

ことのはじまり

Kria KV260 Vison AI Starter Kit 向けに Ubuntu 22.04 が公開されています.これまで特に困っていなかったのでUbuntu 20.04を使っていたのですが,そろそろ22.04に移行してみようかとディスクイメージをSDカードに書いて起動しようとするも起動せず…

続きを読む

Efinix Trion 8 Development Kit で遊んでみる

EfinixのFPGAがちょっと気になっていたところに,周囲からもEfinixという話題が聞こえてきたので遊んでみました.実機で遊ぶ前にツール使ってみるかなーとか思ったのだけど,ツールは有償または,評価ボードを買ってライセンス取得の必要があるとのことでボードを購入.購入したのは,Trion 8 Development Kit(T8F81C-DK).Digi-Keyで1万3千円くらいでした.

今回は,お決まりのLチカと,Trion 8ってどのくらいの周波数で動くのかなー?という味見をしてみました,という話です.

続きを読む

Kernel 5.10.17なRaspberryPi 3+にSPIディスプレイを接続する

ラズパイ便利ですよね!で,ちょっとしたしたディスプレイがついてると便利ですよね.SPI接続のTFTモジュールをframebuffer経由で使うことができるfbtftとflexfbを使ってみました.

以下は,2021年10月時点ではオリジナルのfbtftに少し改変が必要でした,という話.

改変したコードはこちらhttps://github.com/miyo/fbtft/tree/for_linx_5.10.17

ことのはじまり

今更ながらSPIのTFTをRaspBerryPiのコンソールとして使う を見て,やってみたくなったのがはじまり.これができれば,ラズパイだけじゃなくていろんな組み込みLinuxボードに手軽にコンソールが接続できるのでは?とわくわくとします.

上記のページには,「最近のカーネルでは,コンパイルは必要ないことがわかりました.」と書いてあるのですが,ところがどっこい,それから年月が流れてカーネルから取り除かれてしまったようです fbtft_device and flexfb are gone in 5.4.というわけで自分でビルドして使ってみました.

実行環境

カーネルは, Linux raspberrypi 5.10.17-v7+ #1414 SMP Fri Apr 30 13:18:35 BST 2021 armv7l GNU/Linux でした.

ビルド

すなおに,https://github.com/notro/fbtft をcloneしてビルドすればいいと思いきや,いくつか変更が必要でした.改変したコードは,https://github.com/miyo/fbtft/tree/for_linx_5.10.17 にアップロードしています.

ビルドとインストールの手順は次の通り.

$ cd /lib/modules/$(uname -r)/kernel/drivers/video/
$ sudo -s
# git clone https://github.com/miyo/fbtft.git
# cd fbtft
# git checkout for_linx_5.10.17
# make
# make install
# depmod
# exit

これでドライバのビルドとインストールは完了です.

使ってみる

ここからは,冒頭の参考URLの通りです.ラズパイとTFTモジュールの接続も,まんま真似します(ピン配は自分で要確認です).

TFTモジュール(ピン名は基板裏シルクを参照)Raspberry Pi 3
[9] SDD(MISO)N.C.
[8]LED3.3V(17)
[7]SCKGPIO11/SCLK(23)
[6]SDI(MOSI)GPIO10/MOSI(19)
[5]DCGPIO02(3)
[4]RESETGPIO3(5)
[3]CSCS0#/GPIO8(24)
[2]GNDGND(9)
[1]VCC3.3V(17)

接続できたらmodprobeでドライバをロードします.

$ sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0x38,\
-1,0x3A,0x55,\
-1,0x11,-2,120,\
-1,0x29,-2,20,\
-3
$ sudo modprobe fbtft_device name=flexfb gpios=dc:2,reset:3 speed=3200000

無事にドライバをロードできたら,dmesgで

[   38.947027] fbtft: loading out-of-tree module taints kernel.
[   39.008529] fbtft_device:  SPI devices registered:
[   39.008549] fbtft_device:      spidev spi0.0 125000kHz 8 bits mode=0x04
[   39.008557] fbtft_device:      spidev spi0.1 125000kHz 8 bits mode=0x04
[   39.008563] fbtft_device:  'fb' Platform devices registered:
[   39.008600] fbtft_device:      soc:fb id=-1 pdata? no
[   39.008643] fbtft_device: Deleting spi0.0
[   39.664536] graphics fb1: flexfb frame buffer, 320x240, 150 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi0.0 at 3 MHz
[   39.664772] fbtft_device:  GPIOS used by 'flexfb':
[   39.664778] fbtft_device:    'dc' = GPIO2
[   39.664784] fbtft_device:    'reset' = GPIO3
[   39.664790] fbtft_device:  SPI devices registered:
[   39.664798] fbtft_device:      spidev spi0.1 125000kHz 8 bits mode=0x04
[   39.664806] fbtft_device:      flexfb spi0.0 3200kHz 8 bits mode=0x04

というメッセージを確認できました.

ここまでできたら,

$ con2fbmap 1 1

で,ページ冒頭の写真のように,SPI接続なTFTモジュールにラズパイのコンソールが表示されました.

せっかくなので,次はタッチパネルも使えるようになりたいですね.

PYNQでAlveo向けにVitisで作ったRTLカーネルを使ってみる

Vitisは、ホスト-FPGA間をOpenCL的に利用できるようにするXilinxの開発環境です。ホストとFPGAの間のデータ転送や制御の仕組みを自分で考えなくていいので楽なのですが、それでもちょっとした回路を動かす時にホスト側のC++コードを書くのがちょっと面倒。

と思っていたら、PYNQでAlveoにxclbinをロードして動かすのが簡単だということを知りました ( 高位合成で加速するアクセラレータ開発 (1) ~ ACRi ルームで体験してみよう )。で、RTLカーネルだったらどうなるのかな?とテストしてみたところ、同じようにRTLから作ったxclbinもPYNQから呼び出せることがわかりました。これは便利。

続きを読む

Eclypse Z7でUbuntu18.04を走らせる

ZYNQを使ったシステム開発ではPS上でUbuntuを実行すると何かとはかどります。というわけで、Eclypse Z7上でUbuntu 18.04を走らせるためにu-bootとLinuxをビルドしました。手順は、ikwzmさんの https://github.com/ikwzm/FPGA-SoC-U-Boot-ZYBO-Z7 を参考に(ほぼそのままトレース)しています。

リソースなど一式は https://github.com/miyo/build-eclypsez7-linux にコミットしてます。

続きを読む