2015-08-01から1ヶ月間の記事一覧
土日は出勤だったため、集中して勉強することが出来なかった... xv6を勉強していきたくて、ひととおりテキストは読み込んだものの、実際のコードはどこから手を付けていいのか分からない。 まずは、xv6の動作の仕組みを分かるところから探っていこう。 make …
MIPSプロセッサは、実装フェーズに入ってきたので、あまり更新する内容が無いのだが、ISSのデコードテーブルから自動生成したRTLを組込む作業に入っている。 msyksphinz/pulsar-2github.com 自動生成コードはRubyで記述しているのだが、ちょっと柔軟性に欠け…
6月に、xv6のテキストを翻訳して、ある程度の知識を手に入れたが、まだまだマスターしたとはいい難い。 そこで、せっかくシミュレータも作ったし、xv6をx86以外のアーキテクチャに移植して、xv6の構造を勉強してみることにしよう。 対象としては、RISC-V、MI…
ISSのボトルネックになっている部分を調査すべく、Google Perftools を導入した。 gperftools - Fast, multi-threaded malloc() and nifty performance analysis tools - Google Project Hosting どうやら、gperftoolsを使うと、 メモリリークの検出 ヒープ…
前回の続き。では、アドレスを探索できる機能を利用して、ブレークポイントの機能を作ってみよう。 gcc+gdbによるプログラムのデバッグ 第2回 変数の監視、バックトレース、その他のコマンド 調査してみると、gdbのブレークポイントは、実行前にブレークが発…
LuaとBfdのインタフェースが出来たので、これを利用していろんなことができる。 Luaインタフェースで、関数のシンボルからエントリポイントを探索する。 Luaで次のようなインタフェースを実装した。 get_addr (cpu, symbol) インスタンスCPUに対して、関数の…
という訳で、ISSをいろいろ修正して、無事にRISC-VのISSでCoremarkが動作するようになった。 あとは、これにいろいろデバッグ機能を足して、改良していく、という感じかな。 MIPS側のビルドもメンテナンスを行ったので、RISC-VとMIPS、どちらでも同じ機能が…
bfdのシンボルには、BSF_GLOBALとBSF_LOCALという、変数やセクション、各種定数を格納するためのセクションがある。 この中で、BSF_GLOBALはグローバル変数の情報が格納されており、取り扱うには一番簡単っぽいので試してみた。 関数のシンボルテーブルを作…
何か誰かがやってた気がするなーと思って、調べてみたらGCC-4.9でサポートされてるのね。 errorとかwarningとかの文字を探すのがつらいので、これはかなり助かる。GCCのメッセージの色付け機能。 -fdiagnostics-color を追加することで実現可能だ。 Language…
Bfd, Luaといろいろ道具は揃ってきたので、いろんな便利機能を実装してみよう。 msyksphinz/swimmer_riscvgithub.com まずは、関数の先頭にジャンプしたときに、その関数名を表示するように変更する。 この機能は、Lua側からだと、debug("func")を追加するか…
1年間で目標300エントリ程度としていたので、まあまあな到達状況。1月1日から今日まで230日くらい?なので、1ヶ月(4月)を除いて、ほぼ毎日更新できたことになる。 ブログという性質上、同じエントリをまとめて書くことができないのが辛いが、それでもいろん…
BFDからバイナリデータを抽出してISSを動作させる(2) - FPGA開発日記msyksphinz.hatenablog.com バイナリファイルを読み込むことができるようになったため、Luaから制御できるようにしよう。 msyksphinz/swimmer_riscvgithub.com load関数を実装して、環境に…
さて、BFDからデータを読み込んで、ISSにロードしていこう。 基本的には、ダンプしていたルーチンから、メモリオブジェクトに対してデータ書き込みの関数を追加しておく。 https://github.com/msyksphinz/swimmer_riscv/tree/bfd_testgithub.com -static voi…
いよいよ、libbfdの使い方が分かってきたので、ISSに組み込んでシミュレータに流し込む実験に入ろう。 ただ、仕事が忙しくて、家に帰ってからもなかなか時間がとれない。 msyksphinz/swimmer_riscvgithub.com とりあえずは、まずはダンプ機能をISSに入れてみ…
Luaを使ってシミュレータの制御ができるようになったので、次はlibbfdを使ってバイナリファイルからデータを取得してシミュレータに流し込めるようにしよう。 現在のシミュレータはsrecファイルを使っているので、取り扱いとしては簡単だが、情報が限定され…
どうにかこうにか、ISSにLuaを組み込んだ。 msyksphinz/swimmer_riscvgithub.com Luaのインタフェースを使用して、CPUコアを生成して、シミュレーションをすることができる。 インタフェースのサンプルとして、以下を用意した。 msyksphinz/swimmer_riscvgit…
昨日一昨日くらいは、LuaからどのようにしてC++のクラスにアクセスするかを調査していた。 やりたいこととしては、ある環境(クラス)を定義して、それにLuaからアクセスすることでクラス内の挙動を変えたい。 具体的に言えば、Lua側からスクリプトを書くこと…
http://www.skyfree.org/linux/references/bfd.pdf libbfdを使えば、バイナリから情報を引き出し、プログラム中で利用することができる。これを使えば、今開発している命令セットシミュレータに、バイナリの情報を読み込んで、デバッグ情報を出力しながらシ…
ISSを外部から操作するための、スクリプト言語を組込みたくて、Luaについて調査してみた。 第 5 回: Lua を組み込み用の言語として利用する方法 (関数編) — WTOPIA v1.0 documentation Ubuntuで挑戦したのだが、インストールしたパッケージは以下。 sudo apt…
かなりのパタンが動作するようになってきた。 msyksphinz/swimmer_riscvgithub.com ma_fetchというパタンは、フェッチ時にミスアラインが発生したときの対処をチェックするテスト項目だ。 RISC-Vのアーキテクチャでは、JALRのジャンプ先アドレスのLSBは無視…
以下のリビジョンでテストを実行。rv32si-p-*.hexを実行してパスするかをチェックした。 msyksphinz/swimmer_riscvgithub.com rv32si-p-csr.hex 156 : [00000184] 780e1073 : csrrw r00,0x780,r28 mtohost=>00000000 r28=>00000019 mtohost<=00000019 rv32si…
プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?作者: 秋葉拓哉,岩田陽一,北川宜稔出版社/メーカー: マイナビ発売日: 2012/01/28メディア: ?行本-平装購入: 25人 クリック: 473回この商…
友人に教えてもらった、C/C++を書くときのGoogleのコーディングスタイル "google-c-style.el"を導入してみた。 google/styleguidegithub.com 自分の環境管理用のリポジトリのsubmoduleに追加しておいた。 git submodule add https://github.com/google/style…
RISC-Vのトラップの処理方法の勉強 - FPGA開発日記msyksphinz.hatenablog.com トラップの処理方法を勉強して、まずはrv32si-p-csrをパスするようにしたい... トラップが発生したときに、どのような処理が発生するか? RISC-Vのトラップは4種類用意されている…
新ISSでシステム命令系のパタンをパスさせようと奮闘中... システム命令は、以下の資料で定義されている。ただし、ユーザレベル命令と同様に、命令の説明を英語の文体で書いてあるため、理解に時間がかかる。 手っ取り早く、疑似言語とかで書いてくれればい…
新RISC-V ISSの検証のために、まずはPrimitive命令の検証パタンを実行してみた。 msyksphinz/swimmer_riscvgithub.com 利用しているのは、RISC-Vが提供している以下のパタンだ。 riscv/riscv-testsgithub.com これのMakefileを一部書き換え、srecファイルが…
ところで、CMakeで管理された別のライブラリを、自動的にコンパイルして、リンクまでするためにはどうすればいいんだろう。 今のISSでそれを実現するために、とりあえず簡単なモデルを作って勉強してみることにした。 msyksphinz/swimmer_riscvgithub.com プ…
CoremarkのRISC-V版は、一度本ブログでビルドしている。 Rocket-Chip を ZedBoardにインプリしてCoremarkを測定する(クロスコンパイル編) - FPGA開発日記msyksphinz.hatenablog.com ただ、これはLinuxで動作させるためのもので、ISSで動作を確認するためのビ…
これで、ある程度PortableのISSが完成した。まだCoremarkが完走しないけど。 msyksphinz/swimmer_riscvgithub.com 同じリポジトリから、ベースを変えずにコンパイルオプションを変えるだけで、MIPSとRISC-VのISSがビルドすることができる。 RISC-Vのビルド方…
昨日から本格的に実装を始めたMIPSの新ISSがなんとか動作するようになった。といっても、まだCoremarkくらいしか動作確認していないけど。 MIPS ISS実装中... - FPGA開発日記msyksphinz.hatenablog.com msyksphinz/swimmer_riscvgithub.com ビルド方法はまだ…