Hatena::ブログ(Diary)

mirichiの日記 このページをアンテナに追加 RSSフィード

2018-01-05

RISC-Vを目指す(6)

やってみたいことが無いわけではないのだけども、なかなか具体的なやり方がイメージできないので、とりあえずRV32Iの命令を一気に実装してしまおう。と言ってもCSR系の制御命令は今のところサッパリわからないので保留。なので残りの命令はlui、auipc、条件分岐、演算である。

lui/auipcは即値20bitを指定レジスタの上位20bitに設定(下位12bitは0固定)するもので、oriと組み合わせて32bit値を作ることができる。luiは指定値そのまま、auipcはPCの値を加算する。PCの値をレジスタに持ってくる命令はauipcだけだと思うが、jalrとセットにすれば遠いアドレスに相対ジャンプすることができる。これら2つの命令は即値には12bitシフトした値を指定することになるので非常に使いづらいが、実際にはアセンブラの擬似命令li/callとして他の命令との組み合わせで使われるので大きな問題は無い。

条件分岐命令はbeq/bne/blt/bge/bltu/bgeuの6種類。それぞれ、=、!=、<(符号付)、>=(符号付)、<(符号無)、>=(符号無)となる。>と<=が無いがオペランドを入れ替えればいいだけなので問題は無い。

演算命令はadd/addiは既にあるので、sub/and/or/xor/sll/srl/sra/slt/sltuとsub以外のi付きが残っている。算術演算、論理演算、シフトで、最後の2つは比較命令である。<だったら1がレジスタに書き込まれる。

では作る。

続きを読む

2018-01-02

RISC-Vを目指す(5)

ぼっちの引きこもりはお正月ヒマなので。っていうか年末に大阪行く予定だったのが食あたりでダウンしていたのでそのままって感じ。

ともあれ、今回は今までに作ったロード/ストア系命令を揃えることにしてみる。ちなみに前回のlb命令は符号拡張するべきだったがゼロ拡張してしまっていたのでバグということになる。ゼロ拡張する命令はlbu。

続きを読む

2018-01-01

RISC-Vを目指す(4)

新年明けましておめでとうございます。

さて、去年に引き続きRISC-Vの命令セットを実装してみる試練。前回でっちあげたRAMは書き込みしかできなかったので、lb命令を実装してRAMからの読み込みを作ってみよう。書き込みができたのだから読み込みも簡単かと思いそうだが、実際のところちょっとだけ読み込みのほうがめんどい。

続きを読む

Connection: close