FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

2015-09-01から1ヶ月間の記事一覧

Hashicorp社の新しい仮想開発環境"Otto"をさっそく触ってみた

タイムリーなので。 Otto - HashiCorp 突然ですが僕はかなりのヘビーなVagrantユーザーで、僕の全ての開発環境はVagrant上に構築され、Chefでクロスコンパイル環境も自動的に構築されるようにしている。 いくらWindowsを再インストールしても、githubから自…

テキストを読んで、xv6のブートプロセスを理解する(3: メモリの確保)

xv6

※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 さて、xv6のmainに足を踏み入れると、以下のようなコードが記述されている。 github.com extern char end[]; // first address after kernel loaded from ELF file // Bootstrap proces…

MIPSのTLBについて勉強(シンプルなアドレス変換をISSに実行する)

CPU

MIPSのブートについて理解するためには、まずはMIPSアーキテクチャのメモリマップについて理解しなければ。 このあたりに、メモリマップの説明がある。 ファイル:MIPS32 MemoryMap.png - Wikipedia これを見ると、0xA000_0000-0xBFFF_FFFF, 0x8000_0000-0x9F…

ページテーブルを有効にするまでのブートローダの起動のしくみ

xv6

※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 xv6のbootmain.cなどのブートローダは、まだセグメントやページテーブルが有効な状態としては利用されない。 実際にOSを動かすとなれば、ページテーブルが必須となるが、これはどのよう…

ブートセクションをずらしてISSでブートできるようにする(ディスクのロード)

xv6

※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 xv6のbootmain.cをコンパイルしてブートローダを作ってみたが、何とMIPSのコンパイラではオブジェクトのサイズが1セクタ(512バイト)に入り切らなかった! そこで、今回はアーキテクチャ…

ブートセクションをずらしてISSでブートできるようにする

xv6

※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 xv6のブートセクションはx86のものに従っているため、ディスクの先頭のセクションに配置されている。 hexdump xv6.img | less -o xv6.img.dmp 0000000 31fa 8ec0 8ed8 8ec0 e4d0 a864 7…

Calling Conventionモードに応じてISSのログの表記を変更する

ISS

レジスタのCalling Conventionとは。 呼出規約 - Calling Convention(コーリングコンベンション) レジスタはハードウェア的にはFFの塊だが、ソフトウェアとしては、どのレジスタをどの役割として使うかが決められている。 また、それに応じて、レジスタの名…

CUDAのプログラムをOpenCLに移植(VecAdd編)

GPU

CUDA by Example 汎用GPUプログラミング入門作者: Jason Sanders,Edward Kandrot,株式会社クイープ出版社/メーカー: インプレスジャパン発売日: 2011/02/14メディア: 単行本(ソフトカバー)購入: 1人 クリック: 36回この商品を含むブログ (11件) を見る CUD…

U-bootをMIPSアーキテクチャ向けにビルドする

xv6

OSの勉強の一環として、u-bootがどのようにして動作するのかを見てみることにした。 WebHome < U-Boot < DENX U-bootはOSのブートローダとして、特にマイコンや、マイコンボードなどで利用されているようだ。xv6の勉強をしていると、BIOSからの動作ばかりを…

ISSの命令デコーダをDFSに切り替える

これまでのISSのデコーダは、命令テーブルを探索していって、一度デコードに失敗すると別のキーは探索しないようになっていた。 uint32_t MIPS_DEC_OPCODE_0x10 (uint32_t inst_hex) { if (ExtractFUNCTField (inst_hex) == 0x00) { return MIPS_DEC_OPCODE_…

Effective Modern C++を買った

仕事ではVerilog-HDLばっかり触っているけど、自宅ではRubyとC++ばかり触っている。 C++11とかC++14とかあまり分かっていないので、買ってみた。まだ中身をちゃんとは読んでいないけど、これで今のISSのC++の記述とか改善できればいいなあ。 Effective Moder…

HotChipsで発表されたRISC-V実装(解説編)

CPU

msyksphinz.hatenablog.com 前に日記に書いた、RISC-Vの名前を含むHotChipsの発表について、mynaviニュースのHisa Andoが記事を起こしていたので、読んでみた。 内容としては、淡々と発表内容を説明している感じだ。 news.mynavi.jp news.mynavi.jp news.myn…

xv6のテキストAppendix-B "The Boot Loader" を翻訳しました

xv6

github.com http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf ブートプロセスを理解するために、xv6のテキスト: Appendix-B "The Boot Loader"の章を翻訳した。 日本語のクオリティとしてはダメダメだが、何とか理解できるレベルかな? まあ、自分と…

ISSでイメージファイルをロードできるような機能を追加

ISS

xv6の勉強をしていて、xv6.imgとか、fs.imgとかがロードできたほうが良いなと思ったので、その機能を追加しておいた。 github.com どうやら、単純にimgファイルは中身を読み取ってそれを転送していくだけで良いみたいだ。 ただし、今はテスト段階のため、512…

関数の呼び出し関係をトレースとして表示する機能を追加

ISS

ISSに関数呼出のトレースを表示する機能を追加した。 --trace_hier : Generate Trace Hierachy tree --trace_out <log> : output log filename for trace hierarchy mode default is same as --out <filename> --trace_hier オプションを有効化すると、以下のような関数呼出</filename></log>…

MIPSのブートプロセスについての勉強(YAMONについて勉強)

xv6

いろいろ調べたが、以下をしっかり読み直すと参考になる。 MIPSプロセッサ入門―アーキテクチャの解説から評価ボードを使った組み込みプログラミング事例まで (TECH I Processor)作者: インターフェース編集部出版社/メーカー: CQ出版発売日: 2008/06メディア…

テキストを読んで、xv6のブートプロセスを理解する(2)

xv6

bootmain.cに入ると、ディスクからデータのロードを始める。 github.com ここで注目すべきは、カーネルのプログラムとしては、テキストは0x80100000から始まることを想定していることだ。 だがこんな場所にメモリは存在しておらず、ページングを利用して0x00…

ISSのプロファイリング(xv6のブートにかかる時間が遅い)

現状のISSだが、やはりxv6をフルにブートしようとすると遅い。デバッグモードを有効にするとさらに遅い。 CPUPROFILE=/tmp/profile.out ~/swimmer_riscv/build_mips/swimmer_mips --imgfile ~/xv6-mips/xv6.img --max 1000000 Swimmer-RISCV Version 2015091…

テキストを読んで、xv6のブートプロセスを理解する(1)

xv6

xv6のブートプロセスが難しくて詰まっている。いろいろググっていると、何だ。xv6のテキストにちゃんと書いてあるじゃないか。 という訳で、翻訳ついでに、翻訳中である(笑)。 http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf github.com 1. 最…

ISSがシステムレジスタにアクセスすると、そのログを表示するようにする(MIPS版)

ISSでシステムレジスタをサポートしたので、トレースログに表示できるようにしよう。 github.com 基本的にやっていることはこれと一緒。というか、単純に移植しただけだ。 msyksphinz.hatenablog.com システムレジスタにアクセスすると、そのアクセス情報を…

mkfs.cによりファイルシステムが作られる仕組み(まだ勉強中3)

xv6

github.com ビルドプロセスの中に、mkfsによりファイルシステムfs.imgを作る工程がある。 ./mkfs fs.img README _cat _echo _forktest _grep _init _kill _ln _ls _mkdir _rm _sh _stressfs _usertests _wc _zombie fs.imgはどのような仕組みで作られている…

ISSのデバッグ機能を使ってxv6の動作を追い掛ける

ISSにブレークポイントの機能があるので、それを拡張して、デバッグをしやすくしよう。 レジスタの一覧をダンプする機能と、任意のレジスタの値を取得する機能を追加した。 int Lua_GetReg (lua_State *L) { // Getting Arguments #ifdef ARCH_MIPS MipsEnv …

xv6のブートプロセスで学ぶコンピュータの起動(まだ勉強中2)

xv6

さて、次はbootasm.S とbootmain.cの勉強だ。 ※ この記事はまだ勉強中のため、いろいろ間違いがあるかもしれません。 http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf http://pdos.csail.mit.edu/6.828/2014/xv6/xv6-rev8.pdf github.com # Physica…

Google-gflagsでフラグを別のファイルから参照したい場合

例えば、swimmer_main.cppでは、Google-gflagsを使って、いくつかのオプションフラグを宣言している。 // FLAGs definition DEFINE_string (hexfile, "", "Hex file to simulate."); DEFINE_string (binfile, "", "Binary file to simulate."); DEFINE_strin…

xv6のブートプロセスで学ぶコンピュータの起動(まだ勉強中)

xv6

mipsに移植中のxv6のカーネルパニックですっかり止まってしまった、xv6とOSの勉強。とりあえずブートしないと話にならないので、ブートプロセスを必死に勉強中だ。 まずは、xv6を使って、何が起きているのかを調査してみることにする。 ※ この記事はまだ勉強…

ISSにIDEコントローラを組込む

xv6

xv6のブートプロセスには、idewait()という関数が入っている。IDEコントローラを監視して、BSYではなくなったら、次に進むようになっている。 IDEのコントローラの詳細については、以下を参照した。もちろん、これがMIPSのアーキテクチャと異っていることは1…

ロジクールのゲーミングマウスG602を買いました

ロジクールのゲミングマウスG602を買いました。会社で使う用。 正確には、会社に自宅のG700sを持っていって、会社から帰るときに持って帰っていたのだけれども、週末にレシーバーを会社から持って帰るのを忘れたことに気がついた次第。 どうせなら、ちゃんと…

Cuda by Exampleを読了

GPU

CUDA by Example 汎用GPUプログラミング入門作者: Jason Sanders,Edward Kandrot,株式会社クイープ出版社/メーカー: インプレスジャパン発売日: 2011/02/14メディア: 単行本(ソフトカバー)購入: 1人 クリック: 36回この商品を含むブログ (11件) を見る 一…

CUDA by Example積の集約の構成

GPU

CUDA by Example 汎用GPUプログラミング入門作者: Jason Sanders,Edward Kandrot,株式会社クイープ出版社/メーカー: インプレスジャパン発売日: 2011/02/14メディア: 単行本(ソフトカバー)購入: 1人 クリック: 36回この商品を含むブログ (11件) を見る 5.2…

Nsight with Visual Studio ファーストインプレッション

GPU

GPGPUのデバッグ、プラファイラって無いの?ということでいろいろ探していたのだが、nVIDIAの配布するGPUのSDKにはNsightというツールが入っているらしい。 とりあえずチュートリアルだけ使ってみたので、そのやり方をメモしておく。 Visual Studio 2013 を…