FPGA開発日記

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

C++

Valgrindでプログラムの潜在的な問題を抽出する

C++

ISSでプログラムを実行して解析していると、ISSの妙な動作に遭遇することがある。プログラムの挙動が怪しい時は、解析をしていくのだが、どうやら未初期化の領域を参照しているらしい。 こういうときには、Valgrindで不正メモリアクセスをチェックするのが効…

C++ビルド環境としてのBazel導入試行

C++

現在、自作ISSのビルド環境としてはCMakeを利用している。 CMakeの良いところは、 マルチプラットフォーム (ただしISSの開発においては特にこの利点が生かされているわけではない) テキストファイルによるビルド環境管理 (オプション、ファイル一覧などをテ…

C++11でのusingとenum classについての調査

C++

出張で飛行機に乗っている間、久しぶりにC++の本を開いて、自分の知らないC++の使い方について調査していたのだが、C++11の新機能として、いろいろと簡単に書き換えられそうなものがある。 Effective Modern C++ ―C++11/14プログラムを進化させる42項目作者:…

GMPライブラリをつかって64ビット同士の乗算を実装する

C++

RISC-Vに限らず、大概の64ビットプロセッサには64ビット同士の乗算を行う命令が存在する。RISC-Vでは、以下の命令が定義されている。 MUL : 64bit signed × 64bit signed → 下位64ビットを結果として格納 MULH : 64bit signed × 64bit signed → 上位64ビット…

インタラクティブモードでの調整

ISSでインタラクティブにいろいろデバッグをすることができるようになってきたので、タイプミスによりLuaのコマンドを打ち間違えたときにセグって落ちてしまうのが気になってきた。 よく見てみたら、引数の処理をするのにLuaのスタックにどの程度引数が入っ…

C++内でLuaをインタプリタのように動作させるための調査(実装してみた)

前回の続きで、LuaのインタプリタをISSに実装してみた。 msyksphinz.hatenablog.com 前回lua_interpreterを実行してみて、バックスペースなどの操作が出来なかったのだが、これはlibreadlineを使っていなかったからだった。 コンパイルするときに、-DLUA_USE…

C++内でLuaをインタプリタのように動作させるための調査(まだ未実装)

僕のISSはインタプリタとしてLuaを使用しているが、起動時にLuaファイルを指定するとそこから一方的に実行が始まるだけで、例えばデバッグモードのように一旦停止してレジスタをダンプする、などの動作を挿入することができない。 そのような動作は、全てス…

C++11のautoを使ってISSを改造する

C++

C++11ではautoというキーワードが加わっている。Modern Effective C++にも、autoについて一章分かけて解説してある。 Effective Modern C++ ―C++11/14プログラムを進化させる42項目作者: Scott Meyers,千住治郎出版社/メーカー: オライリージャパン発売日: 2…

スマートポインタを導入することでメモリリークが検出されるようになったのでValgrindで解析

C++

自作ISSの様々な部分をスマートポインタに書き換えた結果、プログラムの最後にエラーが出てくるようになった。 github.com ./swimmer_mips --binfile=../benchmarks/releases/coremark_v1.0_mips4_gcc49_O2/coremark.bin --debug --out coremark.log --max 1…

継承しているポインタをスマートポインタにするときはshared_ptrを使う

C++

ISSの中でどうしてもunique_ptrに変更できないものがあった。それがInstEnvクラスだ。InstEnvクラスは、MIPS用とRISC-V用で両方ビルドするために、ベースクラスであるEnvBaseでpublic領域に宣言されており、それを継承したMipsEnvもしくはRiscvEnvにて実際に…

C++11のスマートポインタを導入(ISSに導入)

C++

msyksphinz.hatenablog.com いろいろ見ていくなかで、スマートポインタは便利そうなので、導入することにした。 github.com src/env.cpp m_regs = std::unique_ptr<Word_t[]>(new Word_t[100]); m_memory = std::unique_ptr<Memory> (new Memory ()); m_trace = std::unique_ptr<TraceInfo></traceinfo></memory></word_t[]>…

C++11のスマートポインタを導入

C++

Effective Modern C++を読んでいたら、スマートポインタというのを見つけた。正直、何者なのか知らなかったので調査してみると、 メモリリークなどの誤動作を防ぐためのポインタ機構らしい。 例えば、スマートポインタを使うとdeleteが不要になったり、例外…

cmakeを-O0と-g0でコンパイルする方法

C++

もう自分用のメモだけど、 --- a/build_mips/CMakeLists.txt +++ b/build_mips/CMakeLists.txt @@ -12,6 +12,8 @@ set(CMAKE_VERBOSE_MAKEFILE true) set (VERSION ${CMAKE_VERSION}) set (REVISION ${CMAKE_REVISION}) set (CMAKE_BUILD_TYPE Debug) +set(C…

MIPS用ISSの実装とRISC-Vとの共用

C++

RISC-V用のISSを実装しているが、それをMIPS用にも活用したい。C++で記述しているので、継承を利用すれば、筋が良く実装することができそうだ。 msyksphinz/swimmer_riscvgithub.com MIPS用のVerilog-HDLハードウェアデコーダを生成していたので、それに合わ…

おねえさんの問題を解いてみる

C++

超高速グラフ列挙アルゴリズム?〈フカシギの数え方〉が拓く,組合せ問題への新アプローチ?作者: ERATO 湊離散構造処理系プロジェクト,湊真一出版社/メーカー: 森北出版発売日: 2015/04/08メディア: 単行本(ソフトカバー)この商品を含むブログ (3件) を見る…