ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
2016年2月20日(金)のZynq Ultrasclae+ MPSoC 勉強会で使った資料です。
追記) 2016.05.08
公式ARM Trusted Firmwareのサイトに、Zynq UltraScale+ MPSoCの実装が追加されていていることを明記した
This is the material I used at Zynq Ultrasclae + MPSoC SIG on 20th February (Friday).
Addendum) 2016.05.08
We stated that the implementation of Zynq UltraScale + MPSoC was added to the official ARM Trusted Firmware site.
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
2016年2月20日(金)のZynq Ultrasclae+ MPSoC 勉強会で使った資料です。
追記) 2016.05.08
公式ARM Trusted Firmwareのサイトに、Zynq UltraScale+ MPSoCの実装が追加されていていることを明記した
This is the material I used at Zynq Ultrasclae + MPSoC SIG on 20th February (Friday).
Addendum) 2016.05.08
We stated that the implementation of Zynq UltraScale + MPSoC was added to the official ARM Trusted Firmware site.
IMAX3: Amazing Dataflow-Centric CGRA and its Applications
I present this slide to all hungry engineers who are tired of CPU, GPU, FPGA, tensor core, AI core, who want some challenging one with no black box inside, and who want to improve by themselves.
元は" The 90 minute Scheme to C compiler" Marc Feeley (90-min-scc.pdf) 。元の文章との整合性は保証しないよ。CPS が何かわかって、コンパイラを作ることに興味が出たら幸い。
ただし、これだけではコンパイラはできないよ。Scheme で作りたいなら、http://www.eidos.ic.i.u-tokyo.ac.jp/~tau/lecture/scheme_compiler/gen/resume/all.pdf がおすすめ。
将来的に浮動小数点を含むコンパイラを作りたいなら、あらかじめ OCaml をつかったコンパイラを目指した方がよい(らしい)。
https://esumii.github.io/min-caml/jpaper.pdf
https://github.com/esumii/min-caml
A正規形とK正規形というのもある(らしい)。
http://d.hatena.ne.jp/sumii/20071229/p1
論文のThe Essence of Compiling with Continuations には A 正規形の話があり、CPS が否定されているように思った。
9. C プログラム
void run(void)
{
*(volatile int *) (MAGIC_TRACE) = 0;
putstr("Hello, I am the ARMn");
#ifdef TEST_GPIO
test_gpio();
#endif
exit(0);
}
Cのルーチン
の先頭
実際に LED を光らせる前に、該当するピンを GPIO として使用するように宣言するために、
特定のアドレスに値を書き込むのですが、
それらはStellarisWare の力を借りることにします。
実際に LED を光らせる前に、該当するピンを GPIO の Output として使用するように宣言するために、
特定のアドレスに値を書き込むのですが、
それらはStellarisWare の力を借りることにします。
実は仕様書が間違っているようです。次のスライドで修正します。
仕様書通りに動かすと動きません。0x3FC のオフセットが正解です。
C で書くとこんな感じになるでしょうか?
種を明かすと、これでは動きません。
なお、この時点でPORT C 上の、他のピンはどうなるの?と考えた人は相当わかってます。
0x400063FC への書き込みは PORT C に関するすべてのピンに対して書き込みをします。
したがって、例えば 3 番に LED があり光っていたなら、上のプログラムでは消えてしまいます。
PL061 では個別にピンにアクセス可能なように、個々のピンに対してアドレスが異なるように
設計されています。
しかし、LM3S811 では PL061 の簡易版のようで、そのような機能はないようです。[仕様書に未記載)
そのかわり、Cortex-M3 の機能である bit band を使用することができます。
led.c は動かないプログラムになっていますが、まずは実行して動かないことを確認します。
プログラムは TOPPERS/ASP 上で動きます。
TOPPERS/ASP の方法でコンパイル・実行します。
そのため TOPPERS/ASP での実行コンパイルの経験が多少必要です。
ここでその経験をするのでもいいかもしれません。(プログラムが簡単なので)
make 時には USE_QEMU=true とします。
asp ができます。
led と名前を変えておきます。
実機で実行するには make 時に何も指定しません。
led は elf 形式なので OpenOCD を使った場合そのままつかえます。
Windows で TI の LM Flah Programer をつかうなら objcopy で bin ファイルにしておきます。
以後、仮想HWでの実行のみを記述