ひまわり

はやく人間になりたい

Google Summer of Code 応募について

2017 Aizu Advent Calendar 2017 - Adventar 3日目です。
前は Yamashouさんで Goでserverlessの夢を見る(Go言語serverlessの紹介) - 田舎っぺ大学生録
後ろは misoton665さんで 軽い気持ちでScalazを使う - えびぞり。


今年のGSoCについて

参加した*1ので、簡単に書きます。

この記事の概要を話すと、GSoC応募の流れと、応募の際に学生であると証明できないと、その時点で詰むという話でうす。

ここでは、応募までの話を。実装した*2ものについてはまた別に書こうかなと。
それでは始めます。

Google Summer of Codeが何なのかは以下を
- Google Summer of Code - Wikipedia
- Google Summer of Code  |  Google Developers

要するに、夏休み暇そうにしてる学生にお金を配ってOSSに参加してもらおうと言うものです。
今年の日本は$6000だったので、欲しいモノが買えたり、焼肉に行けたりします。

応募するまでに、やるべき事をまず並べると。

  1. OSSを決める
  2. 決めたプロジェクトの中の人に相談する(重要)
  3. Proposalを書く
  4. そのProposalに加え必要書類を送る
  5. わくわくしながら待つ

この順番でつらつらと書いていきます。


1. OSS を決める

プロジェクトを選びましょう、しかし、何でもいいわけではなく、
そのプロジェクトがGSoCで学生募集すると申請をして、Googleに受け入れられていないといけません。 *3
もし、やりたいプロジェクトが今までにGSoCに参加していないのであれば、連絡を取り申請について相談しましょう。
来年のGSoC 2018のタイムラインはすでに公開されているので、参考にすると良いかもです.

2. 決めたプロジェクトの中の人に相談する  
  • 中の人に連絡を取りましょう。
    プロジェクトによっては、ここに連絡をくれ等あるのですが、なければメーリスやIRCでコンタクトを取るのが良さげです。
    自分の場合は英語ができないことや、受け入れられるのか心配でしたが、
    連絡を取ってみると、歓迎されて、英語に関しては、ネイティブじゃない人も多く開発に参加しているので、
    大体伝わる英語がかけているので平気だと言われて安心したことを覚えています。  

  • 連絡が取れたら、内容について詰めます。
    やりたいことがあるのなら、自分の考えを伝えればいいのですが、
    ない場合は、興味のあるところを伝えたりし、提案してもらうのも良いでしょう。
    あとは、何度かやり取りして、何をして、どう勧めていくかを決めていきましょう。
    わからないところを残すと死ぬと思うので(僕の場合は)、このステップで全体を掴み大体実装できるかなと思えるくらいまで詰めました。

3. Proposalを書く

まえの段階で詰められていれば、内容で困ることはないと思いますが、英語がつらつらとかけない人(自分を含め) はちょっと気合を入れて書きましょう。

4. そのProposalに加え必要書類を送る

作業ゲーに見えてとても危険なステップです。
Proposalに加えて学生証明を送らなければいけません。
通常は、学生証の写真で問題ないのですが、そのタイミングで学生を証明できない人達が存在します。
その一つは進学をした人たちです、僕は修士に進むところだったのですが、提出するタイミング(4/4ぐらい)で学生証がまだ受け取れておらず。自分がGSoCの期間中、学生であることを証明できません。
そこで、考えられるのが、入学許可証です。
しかし、GSoCの運営の方たちに認められるには決まった情報*4が乗っていなければならないのですが、うちの大学院のものにはありませんでした。
そこで、急遽学生課の方にお願いして、書類を作成してもらい難なきを得ました。
お願いしたのが締め切り3日前とかで、本当に申し訳ありませんでした。 ありがとうございました。

5. わくわくしながら待つ

できるのであれば、そのプロジェクトにpatchやPR送ってみたりすると良いと思います。


こんな感じで、応募の流れを書いてみました。
正直すべてGSoCのページにあるのですが、英語を斜め読みして、詰みかけたりするので、気をつけてもらえればと思います。
おくれてすみませんでした。
つらい*5

*1:https://wiki.freebsd.org/SummerOfCode2017/NVMeControllerEmulatorForBhyve

*2:実は、まだ終わっていない

*3:僕は好きなプロジェクトでいいと思っていたので危なかった

*4:https://developers.google.com/open-source/gsoc/help/proof-of-enrollment

*5:就職活動が面倒すぎるのでだれか助けて

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について説明をここに入れたい