shtaxxx日記

コンピュータアーキテクチャについて研究している研究者の日記や技術紹介

Zynq+PyCoRAM(+Debian)入門

Zynq + Vivado HLS入門Zynq + Synthesijer入門に引き続き,ARMを搭載するFPGAXilinx Zynqの上でPyCoRAMを用いて生成したIPコアを利用するためのチュートリアルを作成しました.

Zynq上でLinuxを動作させることでおなじみのソフトウェアを利用できて便利なので,今回はLinuxとの連携方法についても合わせてまとめてみました.Pythonコントロールスレッド部のみを用いた設計も可能ですので,Python-Verilog HDLな高位合成としても使えます.

流れとしては,まずPyCoRAMのみでシミュレーションで動作検証し,その後VivadoでZynqに組み込みます.PyCoRAMは自動的にAXI4/AvalonのIPコアを生成するだけではなく,テストベンチなどの生成も行うため,機能検証がスムーズに行えます. ビットストリームができあがったら,U-Bootと呼ばれるブートローダを生成し,SDKでFSBLを作成します.ここで,前2つのチュートリアルと同様に,ベアメタルのアプリケーションを作成して動作させることもできます. あとは,Linuxカーネルのビルド・デバイスツリーの構築・ファイルシステムの構築を経て,最後にプログラムを書けば完成です.

なお,PyCoRAMは完全にGitHubベースのオープンソース開発に移行しました.何か提案・修正箇所等があれば,お知らせいただけますと助かります.

www.slideshare.net

githubでpull requestが来たときの対処法

まず自分の現状のコミットIDを調べておく.

git log

新しいブランチを作成して,相手のブランチを持ってくる.

git checkout -b pull-request master
git pull https://github.com/hishername/project.git branchname

最初に調べたコミットIDを使って,差分をチェックする(もしかしてコミットIDなしでもできる?)

git diff -r 80deaed24b328140c9181050a1536754eedfa8cd --ignore-all-space

masterにマージする.

git checkout master
git merge --no-ff pull-request
git push origin master

screenでタイトルを,コマンド実行中はコマンド名に,でなければ現在のディレクトリ名に自動で設定する

以前にscreenのhardstatusに表示されるウィンドウタイトルを現在実行中のコマンドに設定する方法の記事を書いたが,今回はその更新版.


screenの各ウィンドウのタイトルを,コマンド実行中はそのコマンド名に自動で設定し,そうでなければ現在の作業ディレクトリ名に自動で設定する.

bashtcshの2つのシェルについてその方法は以下の通り.
zshの場合にはおそらく,tcshの場合と同じようにprecmdを設定すれば,同様のことができるはず(未確認).

設定するとこんな感じで,screenのtitleが自動で設定される.
ウィンドウ1ではemacsを,2ではtopをそれぞれ実行中.3では現在workディレクトリにいて,コマンドは実行していない.

bashの場合,PS1とPROMPT_COMMAND変数を設定する.

## .bashrc
if [ $TERM == 'screen' ]; then
    export PS1='\u@\h:\W\$ '
    export PROMPT_COMMAND='echo -ne "\033k\033\0134\033k$(basename $(pwd))\033\\"'
else
    export PS1='\u@\h:\W\$ '
fi

tcshの場合,promptとprecmd変数を設定する.
echo_styleをbothに設定しないとMacなどのBSD系の環境で正しく動作しないため注意.

## .cshrc
if ( $TERM == 'screen' ) then
    set echo_style=both
    set prompt="%n@%m:%c1$ "
    alias precmd 'echo -n "\033k\033\0134\033k`basename ${cwd}`\033\\"'
else
    set prompt="%n@%m:%c1$ "
endif

ちなみに.screenrcはこんな感じ.

## .screenrc
startup_message off

## current command name as window name
shelltitle "$ |bash"

#hardstatus alwayslastline "%-w%{= ck}%n %t%{-}%+w %=%H [%Y-%m-%d %02c:%s]"
hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y %m/%d %C:%s%a"
hardstatus off

escape ^z^z

termcap * 'G0:S0=\E(%.:E0=\E(B:TY=iso2022'
termcapinfo xterm* ti@:te@
autodetach on
defflow off
crlf off
vbell off
vbell_msg "Bell"

defutf8 on
defkanji utf-8
encoding utf-8 utf-8
defencoding utf-8

bind o focus
bind k kill
bind s split

screen 0
scrollback 4000
screen 1
scrollback 4000

ログインシェルをtcshのままbashを普段使いシェルとして使う

通常はypchsh/chshをすれば良いのだが,ログインシェルを変更ができない場合やしない方が良い場合には,.cshrcを以下の様に設定して,ログイン時にbashを起動する.
Non-interactiveの場合(scpやsshfs)の場合にも正しく動作するようにpromptのチェックを行う.

if ( ! $?prompt ) then
    exit 0
endif

setenv OLDSHELL $SHELL
setenv SHELL /bin/bash
exec /bin/bash --login