読者です 読者をやめる 読者になる 読者になる

Macでの勉強記録

自分でハマったところは詳しく書くけど、ハマってないところはあっさり。気が向いたら追記するかも。

17.03.27 RaspberryPi立ち上げメモ

RaspberryPiの立ち上げを行った。基本的には下記のサイトに記載の通りに実行した。

https://tool-lab.com/make-course/raspberrypi/

 

キーボードもマウスも手元にないし、何より物を増やしたくないので、最小構成の方法2を選択。 極めて丁寧に書かれているので、つまづくところはほとんどなかったがsshの接続だけうまくいかなかったのでメモ。

sshでつなごうとすると、下記エラー

$ ssh pi@raspberrypi.local
ssh: connect to host raspberrypi.local port 22: Connection refused

どうやら2016.11.25のリリース以降、デフォルトでssh無効になっているらしい。というわけで、ブートパーティションsshを追加する必要があるとか。

 

再度MicroSDを差し込み、

$ touch /Volumes/boot/ssh

これだけ。

17.02.07 開発環境構築-Homeblew

開発環境

ARMの勉強をしたくてRaspberry−Piを買ったので、ベアメタル開発環境の構築を行う。

 

せっかくなのでMacで環境を構築したいが、まずパッケージをどうやって引っ張ってくれば良いのか。調べてみるとyumとかapt−getに相当するものはHomeblewというものらしいので、インストールを行う。

 

JDKのインストール

まずはJavaの確認、ターミナルで

$java -version

…入っていない。というわけでメッセージに従ってJDK(: Java development kit)OS X版をインストール。ターミナルを再起動して再度$java -versionでインストールされたことを確認。1.8.0_121だそうだ。

 

Command line toolsのインストール

xcode経由で入手することに。

$xcode-select --install

追加インストールの画面なんかが出てきたけど、多分入っていたんじゃないかな。Terminalからgcc呼び出せるし。

 

Homeblewのインストール

rubyスクリプトを動かすらしい。公式サイト:

http://brew.sh

でインストールコマンドをコピペ:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

途中でパスワードを求められたりするけど、それだけ。

 

インストールがうまくいったかを確認

$brew doctor

幾つかワーニングが出ている。

 

Warning: Anaconda is known to frequently break Homebrew builds, including Vim and

MacVim, due to bundling many duplicates of system and Homebrew-available

tools.

 

確かにanacondaはhomeblewと相性が悪いと聴いたことがあるようなないような…と言っても消すわけにもいかない…と思ったら参考になる記事が

http://qiita.com/spiky00/items/3f3ca3a2092e531ea1ad

 

なるほど、$PATHから外しておけばいいのね。というわけで.bash_profileを下記のように修正

source ~/.bashrc

 

echo  "When use Anaconda, edit .bash_profile"

# added by Anaconda3 4.2.0 installer

# export PATH="/Users/***/anaconda3/bin:$PATH"

本当はもっとかっこいいやり方があるんだろうけど。

再度$brew doctor

$ brew doctor

Your system is ready to brew.

 

これでインストール完了。念のためアップデートがないか確認。

$ brew update

Already up-to-date.

 

とりあえずここまで。やはり環境構築は疲れる

17.02.05 AXIプロトコル概要

AXIプロトコルに関して、自分用メモ。まずはシングル転送。

5つのチャネル

  • ライトアドレス:AW***
  • ライトデータ:W***
  • ライト応答:B***
  • リードアドレス:AR***
  • リードデータ:R***

ハンドシェイク

受信側:受信可能な時にreadyをアサート

送信側:送信データを出力する時にvalidをアサート

valid,readyともにHighで受信側がデータをラッチする

valid,readyの順序に規定なし。送信側はずっとデータを垂れ流して、有効データの時だけValidをアサートするイメージ?

 

ライトアクセス

  1. ライドアドレスチャネルで書き込み先アドレスを転送
  2. ライトデータチャネルでデータを転送
  3. 最終転送データでWLASTをアサート
  4. ライト完了後、スレーブ→マスタにB応答。BVALID+BRESP(成功)を通知

リードアクセス

  1. リードアドレスチャネルで読み出し先アドレスを転送
  2. リードデータチャネルで読み出しデータを転送
  3. 最終転送データでRLASTをアサート

16.08.16 IPベースLED点灯回路①

Vivado FPGA

いよいよPS+PLでのシステム開発の例題。Vivadoの特徴でもあるIP化も行うらしい。事実、後の例題でIPの流用を行うようだ。題材はシンプルなLED点灯回路。

 

IPインスタンス

いわゆるPL部。登録済みのライブラリからZYNQ7を選んでカスタマイズ。Hello worldでも使用したxmlを用いて、カスタマイズをする。はっきり言って何をしているのか不明だ。後で調べるにしても気持ちが悪いな。。見た目はZynqのブロック図に対して、ZYBOで使用可能なペリフェラルフラッシュメモリを設定している感じか?

続いてAXI GPIOのIPをインスタンス。AXIでアクセスして、GPIOを叩くようなIPなのだろう。後で関数と合わせて調査しよう。

さてzynqコアとAXIーGPIOをインスタンスしたら、なんとRun Connection Automationで自動接続してくれるらしい。案の定、リセットジェネレータっぽいものとAXI Interconnectもインスタンスされている。プロトコル変換するわけではなさそうだけど、これも何をしているのだろう。

 

Wrapper自動作成

IPとしてはここまで。続いてWrapperの作成。といってもこれも自動でやってくれる。video_sys_wrapperというモジュール下に、video_sysモジュールがインスタンスされている。video_sysは先ほどzynq、AXI-GPIOをインスタンスした階層。

自動生成されたvideo_sys_wrapper.vをコピーしてvideo_sys_top.vファイルを作成。どうやらデフォルトの名前だと、ブロック内部を編集すると、自動的にwrapperも更新されてしまい、ユーザーが手修正した記述が消えてしまうかららしい。この辺りから、説明がほとんどなくなってきた。

コピーして作ったあらたなWrapperもプロジェクトに追加。このあらたにつくったWrapperが最上位階層になるように、ソースコードを修正。

最上位モジュールはvideo_sys_top、GPIOからの32bit出力ポートを4bitのLEDポートに変更、これまでのTOP階層だったvideo_sys_wrapperをインスタンス、先ほど新設したLED[3:0]とgpio_rtl_tri_o[3:0]を接続する。

 

WrapperのWrapper作成

この状態で上書き保存するとツール側でRTLを解析して、video_sys_topが最上位階層であることを認識、デザインツリーが更新される。エラボレートするとGPIO_175ツリーの下にled端子が見えるので、ZYBOのLEDに合わせてピン配。

 

合成できることを確認して、今日はおしまい。

16.08.12 ようやくLチカ

Vivado ZYBO

ようやくMac上に構築した仮想LinuxマシンからMac(ホスト)IFを介してUSB−JTAG通信を実現できた。直接WindowsマシンにVivado入れれば話はすんなりだったろうが、何しろWindowsマシンがないので仕方ない。前回、ようやくHello worldが表示されたものの、所詮はZYBO上のARMがHello world表示しているだけで、HW的な部分は何もいじっていない。

 

そんなわけで今回ようやくLEDを光らせてみる。これも基本的にテキストに従うだけで、VivadoでどのようにRTL作成からコンフィギュレーションまで持っていくかを概観する感じだ。

 

  • RTLはGUI上からモジュール名、IOを入力すればテンプレートを作成してくれる
  • 制約ファイルもGUIから作れる

特に後者は驚き。ISEでもあったのかもしれないけど、ISEではせっせと作っていたし、見よう見まねではじめてVivadoに手を出した時も、わけのわからない書式だなと思いながら必死に制約ファイルを作っていた。GUIで作ることが前提なのね。

 

デザインは極めてシンプルで125MHzのクロックを引き込んで、28bitカウンタをひたすら回し続けるだけ。上位4bitをそれぞれLEDに接続してチカチカしますよ、ってだけ。今回はテキストをそのまま写しただけだけど、本来ならZYBOの端子表見ながら所望のIO設定を持ってこないといけない。

 

今回はここまで。

16.08.12 FPGA開発環境立ち上げ4

開発環境 Vivado FPGA

ようやくHello worldが表示できたので、忘れないうちに。色々やってみたけど、おそらくクリティカルだったのは、rxtx2.2pre2を適用したことっぽい。長かった。。

 

JAVAのアップデート

Xilinxのページで特にJAVAの要件は書いてなかったけれど、念のため最新にアップデート。

# yum -y install java-1.8.0

 

RXTXの再インストール

当然RXTXも再インスールしなければならない。前回記載の手順にて。

この時点でも相変わらずボードアクセスすると落ちる。

 

rxtx2.2pre2

色々なキーワードで回避策を引っ掛けてみるも、これといった情報は得られず。結構ひっかかってる人はいるみたいだけど、ギブアップした人とか結局結論が出てないスレッドばかり(和訳を正しくできているとすれば)。ただ、どうやらrxtxライブラリに先行リリースパッチがあるらしい。おかしくなったら元に戻せばいいか、と言う感じで表題パッチを適用。

 

http://rxtx.qbang.org/wiki/index.php/Download

からrxtx2.2−pre2-bins.zipを落として、解凍。

RXTXcomm.jar

librxtxSerial.so

を差し替え。

 

リトライ

さて、ダメ元でデバッグ開始。あっさりコンソールにhello worldが出ている!というわけで一件落着。

 

 

次へ行く前に結構ぐちゃぐちゃしてきたプロジェクトを整理しよう。ついでにスーパーユーザでないとコンフィギュレーションできない件も少し調査する予定。 

16.08.05 FPGA開発環境立ち上げ3

開発環境 Vivado FPGA

SDKからデバッグをしようとするとシリアル通信部分でエラーが発生することがわかった。librxtxSerial.soなるライブラリがないのか、パスが通っていないのかが原因と思われる。

 

http://fizzed.com/oss/rxtx-for-java

上記より、64bit版Linux向けのものをダウンロード。解凍して、それぞれをコピー

 

環境変数を設定して、インストール

export JAVA_HOME=/etc/alternatives

./run-install.sh

 

 

その後、SDKインストールディレクトリ以下のlibrxtxSerial.so, librxtxParallel.soを置き換え。

 

cd /opt/Xilinx/SDK/2016.2/eclipse/lnx64.o/plugins/gnu.io.rxtx.linux.x86_64_2.1.7.3_v20071015/os/linux/x86_64

mv librxtxSerial.so librxtxSerial.so.old

mv librxtxParallel.so librxtxParallel.so.old

ln -sf /etc/alternatives/jre/lib/amd64/librxtxSerial.so librxtxSerial.so

ln -sf /etc/alternatives/jre/lib/amd64/librxtxParallel.so librxtxParallel.so

 

もう一度SDKからアクセスするも、ダメ。エラーメッセージは少し変わっていて、

 

 #C [librxtxSerial.so+0x6d9d] read_byte_array+0x3d

 

進んだのか、後戻りしたのか全然わからない。。