e-tipsmemo

ごった煮

Vivado fsbl build batchmode①

XSDKを毎回起動するのは手間であるので自動でビルドしたいと思うのは当然である。

検索すると以下のものがとても参考になる。
Vivado SDK でZynq FSBL(First Stage Boot Loader)をビルドするTclスクリプト(hsi編)

ここにfsblを編集したものをビルドするということを想定して少し編集する。

環境準備

Windows
Vivado 2017.3(とそのSDK)
Bash on Windows

aptでgcc-arm-none-eabiをインストールしておく。

D:\Xilinx\SDK\2017.3\bin

WindowsのPATHに追加しておく。

前提

プロジェクトがある。
u-boot.elfがある。
bootbin.bifを作っておく。

//arch = zynq; split = false; format = BIN
the_ROM_image:
{
	[bootloader].\fsbl.elf
	..\..\desing_1_wrapper.bit
	.\u-boot.elf
}


VivadoからHardware Exportする。(include bitstream)
コレ自体もtclでできる。
hdfが[project_name].sdkに吐き出される。

f:id:katakanan:20180604012331p:plain
こうなっている。

Scriptの準備(とりあえず手動でコマンド確かめる)

xprがあるところに、
参考サイトのtclを少しだけ変更したtclを書く


が、SDK上でnew applicationからfsblを作成する手順に相当する。

ここに -compileオプションをつけると作成と同時にビルドし始めるが
今回はしない。
修正したfsbl_hooks.cなどをfsblプロジェクトにコピーする行

これを実行すると
f:id:katakanan:20180604010302p:plain
となる。

まずはzynq_fsbl_bsp内で依存するライブラリをビルドする。

$ make -C ./ all

その後、fsblに戻って、再びmakeする

$ make

すると、executable.elfなるELFができるので
これがGUISDKで行ったときにDebugフォルダ内にできるfsbl.elfなどと同じもの。
elfとu-boot.elfとbootbin.bifを
Releaseに移動しておく。

$ cp ./u-boot.elf ./script_build.sdk/fsbl/Release/
$ cp ./script_build.sdk/fsbl/executable.elf ./script_build.sdk/fsbl/Release/fsbl.elf
$ cp ./bootbin.bif ./script_build.sdk/fsbl/Release/

f:id:katakanan:20180604011907p:plain
あとはここで

$ cmd.exe /c "bootgen.bat -image .\bootbin.bif -arch zynq -o .\BOOT.bin"

そうすると、ReleaseのところにBOOT.binが出来上がる。
bifファイル内のパスはこのbootgen.batを起動するパスに依存している。

あとはこれらをMakefileなどにまとめて
WSL上でmakeすればOKのはず。。

fsblはgenerate_appするたびにfsblを上書きするので、編集したソースコードは別においておいて、
ビルドするときにコピーしてくる方法が良いのではないかと思う。

次回はまとめたものを書く。

DataContractJsonSerializerでList<T>をシリアライズ・デシリアライズする。

{
  "TEST": [
    {
      "name": "aaa",
      "hoge": "bbb",
      "foo": "ccc"
    },
    {
      "name": "ddd",
      "hoge": "eee",
      "foo": "fff"
    },
    {
      "name": "ggg",
      "hoge": "hhh",
      "foo": "iii"
    }]
}

こういうJSONがある。
まずこれが正しいのかチェックした
lab.syncer.jp
f:id:katakanan:20180603163359p:plain
OK

次にこれを突っ込むクラスを作るが、以下を利用
json2csharp.com
generateを押す.

public class TEST
{
    public string name { get; set; }
    public string hoge { get; set; }
    public string foo { get; set; }
}

public class RootObject
{
    public List<TEST> TEST { get; set; }
}

今回はC++/CLIで行ったので
これを少し書き換えて、

#pragma once
using namespace System;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Json;

[DataContract]
ref class TEST
{
public:
	[DataMember]
	String^ name;

	[DataMember]
	String^ hoge;

	[DataMember]
	String^ foo;

};

[DataContract]
ref class RootObject
{
public:
	[DataMember]
	System::Collections::Generic::List<TEST^>^ test;
};

といった感じに。

書き出すとき

読み出すとき

Arty MicroBlaze ②GPIO

GPIOプログラム - fpgafpga ページ!

ここと同じではあまり意味がないので
GPIO(LED, SW)かつ
UARTを使う方法

115200にする

まずUARTのボーレートを変えるにはAXI-UARTの方法を変える他ない
f:id:katakanan:20180527232343p:plain

ソースコードに書いてあった。
f:id:katakanan:20180527232407p:plain

新しいプロジェクトを作る。

f:id:katakanan:20180527233917p:plain
Empty Application

GPIO

の使い方を知るために必要
f:id:katakanan:20180527233627p:plain

xli_printfを使うには

f:id:katakanan:20180527234040p:plain
HelloWorldサンプルから
platform.c
platform.h
platform_config.h
をコピーする。
f:id:katakanan:20180527233745p:plain

最終的な形

f:id:katakanan:20180527234123p:plain

main.c

InitializeでAXI GPIOペリフェラルを初期化して
XGpio_SetDataDirectionで出力方向を決めたら
XGpio_DiscreteWriteで出力。

XGpio_WriteRegを使えばAXI Liteのレジスタを直接いじれる。(けどアドレスの計算をするのがめんどくさそう)

Ryzen5 2600X 録画PC 諸々

e-tipsmemo.hatenablog.com
続き

構成

型番
CPU Ryzen5 2600X
マザボ Asrock X470 MASTER SLI
GPU GF-GTX660-E2GHD/DF/OC(流用)
メモリ CMK16GX4M2A2666C16
電源 Corsair CX550M 80PLUS
ケース JONSBO U4
SSD MZVPV256HDGL-00000
HDD DT01ACA300

適当に放置して
CPU-ZとHWmonitorを再び見てみる。
f:id:katakanan:20180519113752p:plain
更新したらPinnacle Ridgeになった。

f:id:katakanan:20180519113840p:plain
負荷はないからか、CPUが50度を超えることはなかった。

自作系記事によくあるCinebenchをとってみる
f:id:katakanan:20180519112333p:plain

これって良いのか?
Ryzen 7 2700X/Ryzen 5 2600Xレビュー - 第2世代RyzenでIntelに追いつくことができたのか? (4) CineBench R15 | マイナビニュース
に依るとだいたい1300あたり行ってるのは間違っていないらしい。

多コアでエンコードはベタすぎるので
レイトレーシングとかで、自分で、使い切るプログラムを書いてみたいと思う。

EZ-USB FX2 Slave FIFO④

e-tipsmemo.hatenablog.com

この記事の続き。FIFOから読み出す。

FIFO generatorによって作られるFIFOがよくわからなかったので自分で非同期FIFOを作った。


読み出す部分。
書き込まれた2byteが10個(20byte)になったら読み出しを開始する。

実際に読み出す前にSTATE1を挟んでいるのはデバッグ不足だが最初の2byte目
が何故か2クロック分でてしまうから。
emptyを内部クロックでサンプルすることにしている。(多分しなくても動く?)

とりあえず出力はシンプルなAXI Streamのような形にしてある。(readyには対応していない。)

USB Control Centerから以下のような出力をすると
f:id:katakanan:20180513225957p:plain:w400

受信される形式は以下のようになる。
f:id:katakanan:20180513225845p:plain
多分できているだろう。

ひとまずこれにてUSB-Slave FIFO-AXI Stream(もどき)にすることができたので
あとはBlock RAMに入れるなりするよてい。

また自分の好きなデータを簡単に送るためには
Cypressの提供するライブラリを使用した
ソフトウェア開発も必要だとおもわれる。

Install Ubuntu18 Bionic arm(zynq) and x86(PC) まとめ

Ubuntu 18が出たので、やりかたを確かめつつまとめ

とりあえずARMで動かすUbuntu18をセットアップするためにLinuxが必要.

Bash On Windows

もあると便利。

Ubuntu18をVMplayerにインストールする。

x86_64 Windows上のVMplayerに
Ubuntu18をインストールする
Ubuntu 18.04 LTS (Bionic Beaver)

VMplayer上のインストールはほとんど迷うことが無い。
インストールメディアにISOを指定すれば後はウィザードに従ってインストールされる。

Ubuntuの設定

日本語の設定が、前よりも簡単になっていた。
Ubuntuの設定から
f:id:katakanan:20180502111344p:plain

言語メニューを選択
f:id:katakanan:20180502111534p:plain

もう既に日本語化してしまったが、
「インストールされている言語の管理」→「言語のインストールと削除」
で日本語を追加する。

日本語を追加したら、
「メニューとウィンドウの言語」でそれを一番上に持ってくる。

あとは再起動すれば日本語になっている。

fishのインストール

shellにはzshよりもfishをおすすめしたい

sudo apt-add-repository ppa:fish-shell/release-2
sudo apt-get update
sudo apt-get install fish

u-bootのビルド

まずはu-bootをビルドするのに必要なものをインストールする。
fishなら以下をコピペするだけでOK

sudo apt-get -f install
sudo apt-get install fakeroot build-essential kexec-tools
sudo apt-get install kernel-wedge gcc-arm-linux-gnueabi
sudo apt-get install u-boot-tools libncurses5
sudo apt-get install libncurses5-dev libelf-dev
sudo apt-get install asciidoc binutils-dev git
sudo apt-get build-dep linux
sudo sudo apt-get install bc

まずarm gccがバージョン6以上であるかを確認する。

arm-linux-gnueabi-gcc -v

version 7.3.0であった。
ここでversion 6.x 以上出ないと、xilinxリポジトリの最新のubootのビルドに失敗する。

つぎにxilinxリポジトリからu-bootをクローンしてくる

git clone https://github.com/Xilinx/u-boot-xlnx

追加。

cd u-boot-xlnx
echo "CONFIG_OF_EMBED=y" >> configs/zynq_zybo_defconfig

これがないと
No valid device tree binary found
とエラーが出る。

ビルド

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zynq_zybo_config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

でu-bootというのができている。
これをu-boot.elfとリネームしてどこかに置いておく。
(そうしないとNo Execution Address JTAG handoffと出る。
Solved: ZC706 QSPI Boot: FSBL does not hand off to U-Boot - Community Forums)

kernelのビルド

git clone https://github.com/Xilinx/linux-xlnx

いま時点でmasterはkernel 4.x (≧4.9)
(新しいgccではkernel 3.xはビルドできない。)

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- xilinx_zynq_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage

で\arch\arm\bootにuImageができている。

bitファイルをつくる

Zybo [Reference.Digilentinc]
の下の方にZybo Base Systemがある
f:id:katakanan:20180504000026p:plain
おそらく初代Zyboがもう作られてないからdeprecatedである。
この中の、\zybo_base_system\source\vivado\hw\zybo_bsd
をVivado 2017.3で新しく保存し直した。

(このままBitstreamを作ろうとしたところ
BTNs_4Bitなどで原因不明のエラーが出たので、
一度AXI-GPIOをすべて消してからIO Plannningで割り当て直したら直った。)

Bitstreamを出す。
File→Export で include bitstreamにチェックを入れてOK

devicetree

引き続きVivadoから
File→Launch SDKを行う。
HDFが自動で読み込まれる。

zybo 割り込み② SDK, devicetree編 - e-tipsmemo
と同じ。

Devicetree generatorを入れる

git clone https://github.com/Xilinx/device-tree-xlnx

SDKから
Xilinx→Repositoriesで
Newを押すとダイアログが出るので、クローンしたリポジトリを指定する。
f:id:katakanan:20180504003349p:plain:w400
OK

File→New→Board Support Packageで
Board Support Package OSから
device_treeを選択。
f:id:katakanan:20180504003555p:plain:w400

bootargsに

console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1

を入れる。
f:id:katakanan:20180504003712p:plain:w400
zynq-7000.dtsの
gem0をokayにする。

gem0: ethernet@e000b000 {
	compatible = "cdns,zynq-gem", "cdns,gem";
	reg = <0xe000b000 0x1000>;
	status = "okay";
	interrupts = <0 22 4>;
	clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>;
	clock-names = "pclk", "hclk", "tx_clk";
	#address-cells = <1>;
	#size-cells = <0>;
};

system-top.dtsに

mdio  {
	compatible= "cdns,macb-mdio";
	reg= <0xe000b000 0x1000>;
	clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>;
	clock-names = "pclk", "hclk", "tx_clk";
	#address-cells = <1>;
	#size-cells = <0>;
	eth_phy0:phy@1 {
		compatible = "realtek,RTL8211E";
		device_type = "ethernet-phy";
		reg = <0x1>;
	};
};

を追加する。

ここと同じ。
zybo ethernet Ubuntu 17 ipv4 - e-tipsmemo

DTC入れる。

sudo apt-get install device-tree-compiler

コンパイル

dtc -I dts -O dtb -o devicetree.dtb system-top.dts
dtc -I dtb -O dts -o devicetree.dts devicetree.dtb

FSBL

SDK
File→New→Application Proejct
fsbl入れてNextでZynq FSBLを選択。
f:id:katakanan:20180504005818p:plain:w300f:id:katakanan:20180504005829p:plain:w300
Finish

\zybo_base_system\source\vivado\SDK\fsbl
のfsbl_hook.c全部をプロジェクトのfsblのsrc/fsbl_hook.cにコピペ。
(bitstreamを作るときにZynqからIICやethernetを出してないとここでエラーがでる。)
fsbl_debug.hに追加

#define FSBL_DEBUG_INFO

ビルドしてfsbl\debug\fsbl.elfがあればOK

BOOT.binを作る。

f:id:katakanan:20180504010420p:plain:w400
から下のAdd→Browse..でu-boot.elfを選択する。
OK

uEnv.txt

ZYBO用U-Bootを、ブート時にuEnv.txtを読むようにして、かつBOOT.binから起動できるようにする - Qiita

uenvcmd=fatload mmc 0 0x03000000 uImage && fatload mmc 0 0x02A00000 devicetree.dtb && bootm 0x03000000 - 0x02A00000

Ubuntu18のRoot File Systemのインストール

必要

sudo apt-get install debootstrap
sudo apt-get install qemu-user-static

sudo mount -o loop /dev/sdX2 /mnt/sd

これを行う
Ubuntu root file system for armhf - e-tipsmemo

起動後

SDカードをzyboに挿して
ピンヘッダーをSDにしておけば起動するはず。
最初は一般ユーザーでしかログインできない。
そのあとsuでrootになる。

その後の設定は
zybo ethernet Ubuntu 17 ipv4 - e-tipsmemo
の後半

echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p
ip a

ipv4が降ってこない。

vi /etc/netplan/01-netcfg.yaml

network:
    version: 2
    renderer: networkd
    ethernets:
        eth0:
            dhcp4: yes

スペース4つでないと怒られる?

netplan --debug generate
netplan apply

Ubuntu systemd getty autologin via Serial Console - e-tipsmemo
ログイン周り。

systemctl edit --force serial-getty@ttyPS0

universeリポジトリの追加。

sudo apt-get install software-properties-common
sudo apt-get update
sudo add-apt-repository universe

でOKのはず。

apt-get install sl
sl

f:id:katakanan:20180504090820p:plain:w400