一応,わすれてはいませんでしたが進捗がなかったので.間が空いてしまいました.
SCR1_ARCH_RST_VECTOR について
前回の記事で,「なぜだかわからないが0xFFFFFF00にするとよいらしい」と書きましたが,改めて Interface 2018年2月号を確認したら p.112 の左下にちゃんと書いてありました.
リセットベクタというのは,コアが最初に読みに行くアドレスらしいです.start.Sに_start があって,これがリンカスクリプト make.ld で 0xFFFFFF00 に配置されていました._start_csr とラベルも近くにありますが,CSRは C Startup Runtime のことらしいです.あとは,start.Sのなかのラベルが1とか2とかの数字になっていてビビったり,さらにこれがジャンプ命令のターゲットになるときにbとかついていて混乱 したりしました.
たった4行を見逃したために1か月かかってしまいましたが,これがなければ riscv-unknown-objdump -D PROJ_MAX10.elf
で逆アセンブルして確認したりとかすることもなかったとおもうので,かえって良かったと今では思います.
まだ残っている疑問としては,以下の2点があります.
- 割り込みベクタと違って1個なのに,リセット「ベクタ」なのはなぜだろう?
- リンカスクリプトでのセクション配置の指定が,0x00000000から積み上げずにむしろアドレスの大きいほうからさかのぼっていくのはなぜだろう?
このあたり,オフ会に行けたら直接うかがえたのかもしれませんが,都合がつかず無念.
リスト6 回路シミュレータModelSimの起動と論理シミュレータの実行
vivadoからのテストベンチ実行になりますが,無事GPIOの下位3ビットがXから1になるのが確認できました.
今は手元に書き込み機がないので,まだまだつづきます.
理解が深まったのでよしとしましょう