ひまわり

はやく人間になりたい

Acepted proposal

GSoC 2017に通ったので、来年以降の参加者の参考になればと、
このぐらい英語がだめでもどうにか、通りました。
詳細については、また今度まとめようかと
一応個人情報のところは消しました。

Google Summer of Code 2017 Proposal 公開用

会津大学に入学しました。

もう路頭に迷うことの内容に精進していきます。

C/RTL simulationをwave formで見たい

環境

Vivado_HLS 2016.2

解決

デフォルトだとC/RTL simulationしてもOpen Wave Viewerが出来ないので、 見たかったり、使いたい場合は、C/RTL simulationの実行前の設定でDump Traceを有効(portかallは好きに選ぶ)してから走らせる。

微妙にハマるので

RISC-V systemからメモリマップがほしい

はじめに

lowRISC(RISC-Vの実装のRocket coreを含むシステム)のboot時のメモリマップの取得方法がわからなかったので調べた。

RISC-V Linux

riscv-linuxで検索してみると github.com sbi_query_memory と言う関数を呼び出しているらしく 更にその定義は,

arch/riscv/include/asm/sbi.h

...
unsigned long sbi_query_memory(unsigned long id, memory_block_info *p);
...

arch/riscv/kernel/sbi.S

.global sbi_query_memory; sbi_query_memory = -2016;
...

らしい

SBI

sbiとは一体なんなのか、それはriscv-privileged-v1.9のChapter 9に Supervisor Binary Interface (SBI)とある。 これは、仮想メモリ空間の上位2KiBに配置され、x0をbase registerとしてjalr命令で呼び出されるらしい。 (x0はzero registerだから常にリニアアドレス?) というか、RISC-Vとして定義されていることに驚いた。

sbi_query_memory

しかし、ここにはPreliminary list しか乗っておらず、sbi_query_memoryは見当たらない。

どうにかmemory mapの提供については、riscv sw dev メーリスでいくつか見ることができた。

特に二つ目で、議論されていたがまだ読み切れていないので、何かわかったら追記していきたい。
とりあえず今は、あるべきか、否かがまだ確定していないので、仕様として乗っていないのであろう。

少なくとも、Spike*1の現状の実装は、sbi_query_memoryは存在して、riscv-linux*2と、FreeBSD/RISC-V port*3はこれを使っている。

まとめ

現状仕様としては確率していないが、riscv linuxを含むいくつかの実装がこれに依存しているので環境によっては使える。 個人で何か作って、spikeやlowRISCで動かす分にはこれを使って、今後変更が有った際は、riscv linuxの実装読みに行くか、 Privileged ISA Specificationを読めばいいだろう。

まったく関係ない話

[llvm-dev] [RFC] RISC-V backend これもどうなったか調べたい

参照

おわり

ChiselでQuartusのRAM推論に引っかかる方法

自分の手元にあるDE0-Nano-SoCなどに乗っているCyclon V FPGAなどには
Logic Elementsとは別にメモリ用のブロックが内蔵されていて、Logic Elementの一部をメモリとして使うよりは
効率が良いのでできるだけ使っていきたい。

そしてQuartusはverilogのコードからメモリっぽいところを見つけ出して勝手に割り当ててくれる(手動で割り当てる方法もある)。

しかし、Chiselに組み込まれているMemをそのまま使いVerilogを生成すると
認識してくれないのでひと手間が必要になる。 そのひと手間が以下のコード。

gist06d941328baad1c607a87b46b03f4029

なにをしているのかというと、Memからの読み込みの際にRegisterを経由するのと、

when(Bool(true) {
...
}

ところで、なにも考えないとこれは意味ないのではとなるが。
この行により、同期回路として扱うことができ、そしてそうすることでRamやRomであろうと認識されて、割当がされる。

summaryは以下の通り

gist11d71c8654562e3ec3be044b93b85e97
Total Memory bitsが512となっている。

やったぜ。

ChiselでAXI書いた。

以下がリポジトリgithub.com

書いたと言ったが一部だけだし完全ではない、とりあえず動く程度。

scalaがいまいちよくわかってないのと、chiselもまだまだなので、今後綺麗にしたりしていきたい。 テストも書いてCIとか回していけたら捗るかな。

早いうちに、AXIについて説明をここに入れたい

自転車が盗まれた

自転車が盗まれた

カゴがついていない、暗い緑の自転車を見かけた方は僕まで一報くれると嬉しいです。