e-tipsmemo

ごった煮

zybo 割り込み② SDK, devicetree編

前回の続き
e-tipsmemo.hatenablog.com

SDK

VivadoでBitstreamがでたら。
File->Export Hardwareでhdfファイルを出力する。(Include bitstreamにチェックをいれる。)
File->Launch SDK

SDKの準備

Xilinx Wiki - Build Device Tree Blob

google:xilinx sdk device tree generator
あたりを参考にし、device treeを自動生成するツールを入れていおく。

Device Treeとその編集

File->New->Board Support Package
f:id:katakanan:20170409013859p:plain
にて、device_treeを選択してFinish

Overview->device_treeのbootargsに
console=ttyPS0,115200 root=/dev/ram rw earlyprintk rootwait devtmpfs.mount=1 earlycon earlycon earlycon
を入力。
(デフォルトのドライバの設定などもできるらしい?)
「OK」で必要なDeviceTreeが分割された状態で生成される。

Interruptの関係のプロパティは自動で入れてくれないので、自分て追記する。
zynq-7000.dtsiをみると、割り込みのコントローラーである
cortex-a9-gicが、intc: interrupt-controller@f8f01000となっている。
pl.dtsiの自分の追加した割り込み信号を発生するロジックのモジュール内に以下の文言を入れる。

interrupt-parent = <&intc>;
interrupts = <0 29 4>;

f:id:katakanan:20170409015147p:plain

devicetreeについては
Device Tree Usage - eLinux.org
など
interruptのプロパティの数字については
Solved: IRQF2P Interupt not being seen in driver when movi... - Community Forums
より、

For interrupts = < 0 29 4 >, 0 is defining it as a SPI ( general purpose ) interrupt, 29 is the LSB of IRQ_F2P ( TRM says 61, subtract 32 ), and 4 is level-high triggered.

(割り込み番号は29から順番?
次に割り込みのデバイスを入れたら30になると..)

このdtsをコンパイルし、dtbを作成する。

dtc -I dts -O dtb -o devicetree.dtb system-top.dts
FSBL, uImage, uramdisk.image.gz

digilentGithubリポジトリをcloneして
Linuxをビルド。
uImageを作成。
u-boot.elfを同様にして作成する。

一方SDKでは
File->New->Application Project
nameをfsblにしてnext。
Zynq FSBLを選択してFinish
FSBLがビルドされてfsbl.elfができていたら
プロジェクトを右クリックしてCreate Boot Image
Addで最後のパーティションにu-boot.elfを追加する。
Create Boot ImageでBoot.binが作られる。

uramdisk.image.gzはzedboardかどこかの別のプロジェクトに入っていたものを持ってきた。

(ramdiskを編集したいときはイメージをマウントする必要があるので
Bash On windowsだけではできなかった。。。)

  • boot.bin
  • devicetree.dtb
  • uramdisk.image.gz
  • uImage

これらが最低限必要なもの。

次はデバイスドライバ

zybo 割り込み① PS,PL設定編

zyboというFPGAの入ったARMコアのSocが乗っかっている評価基板を買った。
CPUとFPGAを組み合わせた動作のために、
まずは、FPGAからARM側への割り込みを試してみる。
その過程で知ったこと、使ったサイトのメモ。

全体を通して参考になるページ
http://yuki-sato.com/wordpress/fpga/?q=%2Fcategory%2F%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C%2Ffpga%2F

必要なもの

Vivado
Zybo

PSの設定

VivadoでFPGA側の回路をつくる。
いろいろなチュートリアルを見ると、基本的にはBlock Design上でHDLのブロックなりIPなりを追加、接続していく。
IP Catelogからzynqを追加して必要設定を行う。
PS-PL Configuration

  • S AXI GP0 Interface

Peripheral I/O Phins

 (SD0でCard Detectをチェックして47番pinに設定しないとLinuxがブートしない。)

  • UART1
  • I2C 0


Interrupts
IRQ_F2P

Clock Configurationで周辺の回路に沿うように設定する。
ZyboだとPSの入力周波数は50MHzになっている。
Zybo Reference Manual [Reference.Digilentinc]
12 Clock Source

Processor/Memory/Clocksで、CPUの周波数を650MHzとDDRを525MHzにする。
IO Peripheral ClocksでSDIOを50MHzにする。
PL Fabric ClocksFLCK_CLK0を有効にして100MHzを出力するようにする。

DDR ConfigurationでMemory TypeはMT41K128M16 JT-125にする。
(実装されているDDR3の名前は違っているがコレでいいらしい)

(これは個人的な備忘録なのでバージョンが変わったりなどしたらDigilentのプロジェクトを真似したほうが確実かもしれない)

PLの構成

画像内のようにスイッチやLEDを接続するAXI LiteのIPコアを作った。
f:id:katakanan:20170409010345p:plain
LEDの一つはスイッチの割り込み出力へつなげた。

xlconcatで幾つかの割り込みを束ねてIRQ_F2Pへつなげる。
(今回は一つ)
これで適切にスイッチとLEDのポートを設定した後、bitstreamを出す。

次はSDK

KiCADのBOMとExcel

KiCADからBOMを出して部品の個数を数えたいときに、
毎回Excelの使い方を調べている気がするのでメモ

BOMを出す

KiCADのBOM機能とプラグイン

重複を除く

CSVをxlsxとかで保存
部品の値と、フットプリントの文字列を&でつなげてそれを
データ→並べ替えとフィルター→詳細設定で
f:id:katakanan:20170218010703p:plain 以上のようにする。

リスト範囲はつなげた文字列の範囲
抽出範囲は出力結果を起きたい先頭のセル
重複するレコードは無視するに☑

数える

=COUNTIF([文字列のリスト],[重複を除いた文字列のうち1つ])

でカウント

値の記法が一致しないと別の部品だと思われるけども。

Windowsでシンボリックリンクをつくってインストール

CドライブをSSDにしてWindows本体を入れたのはいいが容量がそんなに多くないので

MusicとかMovieとかDesktopとかをDドライブに移した。

もちろんProgram Files以下にインストールされるソフトウェアもD:\Program Files\以下にそうしたい。

 

大抵はインストールウィザードでインストール先を決められるけれども

そうではないひどいソフトウェアもあるもので(Officeとかそうだった)シンボリックリンクでなんとかインストールさせる。

(動作保証はできないがなんとか動いているようだ)

 

①インストールするソフトウェアがC:\Program Files以下に作るフォルダ名と同じ名前のフォルダを

D:\Program File\に作っておく。

このフォルダ名を"hoge"とする。

 

②cmdを管理者権限で起動して

mklink /d "C:\Program Files\hoge" "D:\Program Files\hoge"

とする。

"C:\Program Files\hoge”が残っていると失敗する。

 

ショートカットのアイコンのようになればOKで

そのままの状態でソフトウェアのインストールを開始する。

(すでにあるフォルダを消すような変なアプリケーションでなければ/hoge以下にインストールし始めるので実際には"D:\Program Files\hoge"にインストールされることになる)

KiCAD 4.0.1で等長配線・ミアンダ配線をする。(単線)

今作っている基板に必要なのかは分からないが

等長配線・ミアンダ配線の方法のメモといっても

以下の動画を日本語に起こしたもの

www.youtube.com

Trace Length Matching

 

前提として回路図を書いてフットプリントの割当をしてある状態にする。

①表示→OpenGL Modeにする。

②普通に配線する

③配線→配線長の調整

f:id:katakanan:20161228002654p:plain

④ターゲット長・ミアンダ配線の振幅、間隔を設定する。

 幅はクリアランスの三倍ぐらいとるのが良いらしいとググるとヒットする。

 

⑤配線を選択して右クリックすると振幅・間隔を調節するメニューがでる。

 数字の1, 2, 3, 4でもできるので、その場に表示された長さを目的にそれらを連打して 調節する。

⑥必要な配線分だけ繰り返す。

 すごく簡単にできる。

 

おそらく全部の線を引いてからこの作業を行うのが普通?

コレくらいの機能は最近のCADでは普通のことなんだろう。差動等長配線も同じ要領で行けるがP/N配線の長さの差をあとから調節する工程が入るようだ。

HDLを書き始めたときに使った本・物たち

最近FPGAがあついらしいので昔(今もだけど)買った学習の際に有用であると思われるものをリストしておこうと思う。

 

Verilog HDL & VHDL テストベンチ

Verilog HDL&VHDLテストベンチ記述の初歩 (DESIGN WAVE MOOK)

Verilog HDL&VHDLテストベンチ記述の初歩 (DESIGN WAVE MOOK)

 

 VHDLVerilogもImplementする前にiSimやModelSimで動作レベルでのシミュレーションをする。

そのためにテストベンチを書く必要があるが、それはmainのモジュールと同じHDLで書くのだが少しだけ文法が違ったりする。(実際のハードウェアには落とし込めない構文などがある)

その時に参考にした。

Verilogの記述もあるのでVHDLとの対応を考えることもできるかもしれない。

 

・CPUの創り方

CPUの創りかた

CPUの創りかた

 

 これをHDLで組んでみるのは目標がないときはいいかもしれない。

外部回路にスイッチとLEDぐらいしか必要としないので、高い評価ボードでなくても試せるのがよい。

実際に回路を組んでみるのもいいかもしれない。

 

・Papilio Pro LX9

Gadget Factory Papilio Pro LX9 【Papilio Pro】
 

 作ったプログラムを実際に書き込んだデバイ

円高の時は8800円ぐらいだった。

でかい評価ボードは高かったのでこっちを用いていた。秋葉原の某月で買うともう少し安い。

 

ほかにもいろいろあった気がするけども忘れてしまったので思い出したら書き出す。

Raspberry pi(Raspbian Jessie PIXEL)にQt5.7を入れる③

e-tipsmemo.hatenablog.com前回のこれを再度試していたら幾つかエラーが出たのでメモ

①SDカードをUbuntuにつなげると勝手に/media/$USER/{hogehoge}にマウントしてくれてしまって/mnt/rasp-pi-rootfsにマウントしてもRead onlyになってしまって

sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc

の実行に失敗する。

➜  opt audo umount /media/$USER/boot
➜  opt sudo umount /media/$USER/{数字の羅列}
➜  opt sudo mount -o loop,offset=70254592 /dev/sdb /mnt/rasp-pi-rootfs

とする

(sdbはRaspbienの入ったSDカードに置き換える)

 

②make 中に「qt undefined reference to `png_set_longjmp_fn」とでる

configureで-qt-libpngオプションを追加。

 

----おまけ-----

Ubuntu32bitだとQt5.7を含んだQtCreatorを用意してくれていないので

デスクトップ上で動作確認→Raspberry Pi(VNC)で動作確認とするときは

Qt5.7を自分でビルドしてインストールする。

cross_compileよりずっと楽

Qt for Linux/X11 - Building from Source | Qt 5.7