FPGA開発日記

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

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

xv6の起動方法を追い掛ける

xv6

土日は出勤だったため、集中して勉強することが出来なかった... xv6を勉強していきたくて、ひととおりテキストは読み込んだものの、実際のコードはどこから手を付けていいのか分からない。 まずは、xv6の動作の仕組みを分かるところから探っていこう。 make …

ISSの埋め込み

MIPSプロセッサは、実装フェーズに入ってきたので、あまり更新する内容が無いのだが、ISSのデコードテーブルから自動生成したRTLを組込む作業に入っている。 msyksphinz/pulsar-2github.com 自動生成コードはRubyで記述しているのだが、ちょっと柔軟性に欠け…

xv6を試そう(移植のための基礎知識の勉強)

xv6

6月に、xv6のテキストを翻訳して、ある程度の知識を手に入れたが、まだまだマスターしたとはいい難い。 そこで、せっかくシミュレータも作ったし、xv6をx86以外のアーキテクチャに移植して、xv6の構造を勉強してみることにしよう。 対象としては、RISC-V、MI…

Google Perftoolsを導入する

ISSのボトルネックになっている部分を調査すべく、Google Perftools を導入した。 gperftools - Fast, multi-threaded malloc() and nifty performance analysis tools - Google Project Hosting どうやら、gperftoolsを使うと、 メモリリークの検出 ヒープ…

ISSでアドレス逆サーチとブレークポイントの導入(2)

前回の続き。では、アドレスを探索できる機能を利用して、ブレークポイントの機能を作ってみよう。 gcc+gdbによるプログラムのデバッグ 第2回 変数の監視、バックトレース、その他のコマンド 調査してみると、gdbのブレークポイントは、実行前にブレークが発…

ISSでアドレス逆サーチとブレークポイントの導入(1)

LuaとBfdのインタフェースが出来たので、これを利用していろんなことができる。 Luaインタフェースで、関数のシンボルからエントリポイントを探索する。 Luaで次のようなインタフェースを実装した。 get_addr (cpu, symbol) インスタンスCPUに対して、関数の…

自作RISC-V ISSでCoremarkが動作するようになった

CPU

という訳で、ISSをいろいろ修正して、無事にRISC-VのISSでCoremarkが動作するようになった。 あとは、これにいろいろデバッグ機能を足して、改良していく、という感じかな。 MIPS側のビルドもメンテナンスを行ったので、RISC-VとMIPS、どちらでも同じ機能が…

グローバル変数にアクセスしたときのアクセス情報をログに表示する

CPU

bfdのシンボルには、BSF_GLOBALとBSF_LOCALという、変数やセクション、各種定数を格納するためのセクションがある。 この中で、BSF_GLOBALはグローバル変数の情報が格納されており、取り扱うには一番簡単っぽいので試してみた。 関数のシンボルテーブルを作…

GCC-4.9以降でサポートされたメッセージのカラー表記

何か誰かがやってた気がするなーと思って、調べてみたらGCC-4.9でサポートされてるのね。 errorとかwarningとかの文字を探すのがつらいので、これはかなり助かる。GCCのメッセージの色付け機能。 -fdiagnostics-color を追加することで実現可能だ。 Language…

シミュレーションログに関数名を表示させる

Bfd, Luaといろいろ道具は揃ってきたので、いろんな便利機能を実装してみよう。 msyksphinz/swimmer_riscvgithub.com まずは、関数の先頭にジャンプしたときに、その関数名を表示するように変更する。 この機能は、Lua側からだと、debug("func")を追加するか…

ブログを始めてから200エントリ到達

1年間で目標300エントリ程度としていたので、まあまあな到達状況。1月1日から今日まで230日くらい?なので、1ヶ月(4月)を除いて、ほぼ毎日更新できたことになる。 ブログという性質上、同じエントリをまとめて書くことができないのが辛いが、それでもいろん…

Luaからバイナリファイルから読み込んでISSに渡す

BFDからバイナリデータを抽出してISSを動作させる(2) - FPGA開発日記msyksphinz.hatenablog.com バイナリファイルを読み込むことができるようになったため、Luaから制御できるようにしよう。 msyksphinz/swimmer_riscvgithub.com load関数を実装して、環境に…

BFDからバイナリデータを抽出してISSを動作させる(2)

さて、BFDからデータを読み込んで、ISSにロードしていこう。 基本的には、ダンプしていたルーチンから、メモリオブジェクトに対してデータ書き込みの関数を追加しておく。 https://github.com/msyksphinz/swimmer_riscv/tree/bfd_testgithub.com -static voi…

BFDからバイナリデータを抽出してISSを動作させる(1)

いよいよ、libbfdの使い方が分かってきたので、ISSに組み込んでシミュレータに流し込む実験に入ろう。 ただ、仕事が忙しくて、家に帰ってからもなかなか時間がとれない。 msyksphinz/swimmer_riscvgithub.com とりあえずは、まずはダンプ機能をISSに入れてみ…

libbfdを使ってバイナリのデータをダンプするプログラムを書く

Luaを使ってシミュレータの制御ができるようになったので、次はlibbfdを使ってバイナリファイルからデータを取得してシミュレータに流し込めるようにしよう。 現在のシミュレータはsrecファイルを使っているので、取り扱いとしては簡単だが、情報が限定され…

LuaからC++の機能を呼び出す(ISSにLuaを組み込み)

どうにかこうにか、ISSにLuaを組み込んだ。 msyksphinz/swimmer_riscvgithub.com Luaのインタフェースを使用して、CPUコアを生成して、シミュレーションをすることができる。 インタフェースのサンプルとして、以下を用意した。 msyksphinz/swimmer_riscvgit…

LuaからC++の機能を呼び出す(クラスに対するアクセス)

昨日一昨日くらいは、LuaからどのようにしてC++のクラスにアクセスするかを調査していた。 やりたいこととしては、ある環境(クラス)を定義して、それにLuaからアクセスすることでクラス内の挙動を変えたい。 具体的に言えば、Lua側からスクリプトを書くこと…

libbfdを使ってバイナリから情報を吸い出す方法の調査

http://www.skyfree.org/linux/references/bfd.pdf libbfdを使えば、バイナリから情報を引き出し、プログラム中で利用することができる。これを使えば、今開発している命令セットシミュレータに、バイナリの情報を読み込んで、デバッグ情報を出力しながらシ…

LuaとC言語への組み込みの勉強(1)

ISSを外部から操作するための、スクリプト言語を組込みたくて、Luaについて調査してみた。 第 5 回: Lua を組み込み用の言語として利用する方法 (関数編) — WTOPIA v1.0 documentation Ubuntuで挑戦したのだが、インストールしたパッケージは以下。 sudo apt…

Privileged命令の実装 (命令フェッチミスアラインの動作)

かなりのパタンが動作するようになってきた。 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…

next_permutationについて調べた

STL

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?作者: 秋葉拓哉,岩田陽一,北川宜稔出版社/メーカー: マイナビ発売日: 2012/01/28メディア: ?行本-平装購入: 25人 クリック: 473回この商…

Google-c-style.elを導入してみた

友人に教えてもらった、C/C++を書くときのGoogleのコーディングスタイル "google-c-style.el"を導入してみた。 google/styleguidegithub.com 自分の環境管理用のリポジトリのsubmoduleに追加しておいた。 git submodule add https://github.com/google/style…

RISC-Vのトラップの処理方法の勉強(2)

CPU

RISC-Vのトラップの処理方法の勉強 - FPGA開発日記msyksphinz.hatenablog.com トラップの処理方法を勉強して、まずはrv32si-p-csrをパスするようにしたい... トラップが発生したときに、どのような処理が発生するか? RISC-Vのトラップは4種類用意されている…

RISC-Vのトラップの処理方法の勉強

CPU

新ISSでシステム命令系のパタンをパスさせようと奮闘中... システム命令は、以下の資料で定義されている。ただし、ユーザレベル命令と同様に、命令の説明を英語の文体で書いてあるため、理解に時間がかかる。 手っ取り早く、疑似言語とかで書いてくれればい…

新RISC-V ISSでの検証パタン実行結果

CPU

新RISC-V ISSの検証のために、まずはPrimitive命令の検証パタンを実行してみた。 msyksphinz/swimmer_riscvgithub.com 利用しているのは、RISC-Vが提供している以下のパタンだ。 riscv/riscv-testsgithub.com これのMakefileを一部書き換え、srecファイルが…

CMakeで管理された外部のライブラリをリンクする方法

ところで、CMakeで管理された別のライブラリを、自動的にコンパイルして、リンクまでするためにはどうすればいいんだろう。 今のISSでそれを実現するために、とりあえず簡単なモデルを作って勉強してみることにした。 msyksphinz/swimmer_riscvgithub.com プ…

RISC-V用のCoremarkをビルドする(ISS動作確認用)

CPU

CoremarkのRISC-V版は、一度本ブログでビルドしている。 Rocket-Chip を ZedBoardにインプリしてCoremarkを測定する(クロスコンパイル編) - FPGA開発日記msyksphinz.hatenablog.com ただ、これはLinuxで動作させるためのもので、ISSで動作を確認するためのビ…

MIPS用ISSをRISC-Vでも動作するようにする

CPU

これで、ある程度PortableのISSが完成した。まだCoremarkが完走しないけど。 msyksphinz/swimmer_riscvgithub.com 同じリポジトリから、ベースを変えずにコンパイルオプションを変えるだけで、MIPSとRISC-VのISSがビルドすることができる。 RISC-Vのビルド方…

新ISSがどうにか動くようになった

CPU

昨日から本格的に実装を始めたMIPSの新ISSがなんとか動作するようになった。といっても、まだCoremarkくらいしか動作確認していないけど。 MIPS ISS実装中... - FPGA開発日記msyksphinz.hatenablog.com msyksphinz/swimmer_riscvgithub.com ビルド方法はまだ…