FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io

Linux

Windows PowerShellをLinuxで試す

だいぶ前になったが、Windows PowerShellがオープンソース化され、Linux上でも利用できるようになった。 jp.techcrunch.com かくいう僕はPowerShellなど一度も使ったことがなく、Windows のコマンドプロンプトとの違いも分からない。 コマンドプロンプトは使…

Bash on WindowsでTensorFlowをインストールして動作させる

Bash on Windowsのベータ版がWindows 10のInsider Previewの機能として公開された。 いままでCygwinやmsys2など、WindowsでLinuxのコマンドを実現する機能は複数あったとは言え、Microsoft自身がUbuntuと手を組んでBashをサポートしてしまうとは驚きだった。…

GCC5.3がリリースされたので評価環境を構築した

GCC5.3がリリースされていた。ぶっちゃけ気がついていなかったよ。。 GCC 5 Release Series - GNU Project - Free Software Foundation (FSF) osdn.jp 早速Vagrantの環境を構築してみた。MIPS用のクロスコンパイル環境だ。 github.com changelog的にはあまり…

Visual Studio CodeをVagrant経由で使いたい

Visual Studio Codeがオープンソース化されたが、相変わらずソースからビルドしようとしてうまくいかない。 とりあえずは、ビルドされたパッケージを使ってやってみよう。僕の開発環境はVagrant上でUbuntuを構成しているので、そのやりかたを調べてみよう。 …

Visual Studio Codeがオープンソース化されたのでソースからビルド(しようとしたが上手く行っていない)

Visual Studio Codeがオープンソース化されたが、これをフルスクラッチでビルドした人っているのかね? ネット上で殆ど情報出てこないんだけど、成功例が見たい。Ubuntuで挑戦しているのだが、今のところ上手くいっていない。 github.com github.com まずは…

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

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

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…

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

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

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

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

ISSのバイナリロードが遅い問題を解決する (stl::vector, stl::set, stl::mapを試す)

ISSでxv6のバイナリをロードすると、ロードだけで現在1分近く掛っている。 現在、バイナリをロードするためのメモリには、0x1000バイト分のメモリブロックを、STLのvectorを使って連結している。 msyksphinz/swimmer_riscvgithub.com class Memory { private…

MIPSのシステムレジスタをISSに実装する(1)

という訳で、MIPSのシステムレジスタをISSに実装し始めた。といっても、中身は空っぽで、読み出しと書き込みの機構を接続する。 msyksphinz/swimmer_riscvgithub.com MIPSでは、MFC0/MTC0という命令を使ってシステムレジスタ(コプロセッサ0)にアクセスする。…

MIPSのシステムレジスタを実装するための環境変更

前回、xv6の実装を確認するためにISSをバイナリで実行させたが、システムレジスタを実装していないことや、いくつかの命令を実装していないことが問題になった。 (そのときは緊急回避したが)。 xv6の起動プロセスを追い掛けるためのシミュレータの準備 - FPG…

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に対して、関数の…

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

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

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

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

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

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

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

さて、BFDからデータを読み込んで、ISSにロードしていこう。 基本的には、ダンプしていたルーチンから、メモリオブジェクトに対してデータ書き込みの関数を追加しておく。 msyksphinz/swimmer_riscvgithub.com -static void load_hex (bfd *b, asection *sec…

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…

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

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

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

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

google-gflagsを試す(実際に利用してcmakeからビルドする)

次に、実際にビルドしたgoogle-gflagsをビルドに利用してみよう。 msyksphinz/swimmer_riscvgithub.com 基本的に、cmakeで使う分には簡単だ。 msyksphinz/swimmer_riscvgithub.com # include_directories(../vendor/gflags/include/) set (gflags_SHARED TRU…

google-gflagsを試す(google-gflagsをクローンしてからビルドする)

google-gflagsは、Googleが公開しているフラグの解析ツールだ。最近はGoogle-codesから、githubに移行して公開してある。 gflags/gflagsgithub.com これを使いたくて、色々試したがかなりハマったので、やり方を書いておく。 google-gflagsのリポジトリのmas…

CMakeでバージョン番号を管理する

CMakeのチュートリアルに書いてあるのだが、CMakeでビルドする度にバージョン番号やリビジョン番号を設定するためには、以下のような方法がある。 http://www.cmake.org/cmake-tutorial/ msyksphinz/swimmer_riscvgithub.com CMakeLists.txtの中で以下のよう…