FPGA開発日記

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

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

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…

Zynq用Yocto-LinuxをビルドするためのVagrantfileとchef (2)

Zynq用Yocto-LinuxをビルドするためのVagrantfileとchef - FPGA開発日記msyksphinz.hatenablog.com 前のブログで、Yocto-LinuxをビルドするためのVagrantfileとchefを作成したが、途中でビルドが失敗してしまう問題があった。 何度か繰り替えしたトライした…

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

C++

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

Vivado 2015.2ではZedBoardのHello Worldがビルドできない

Vivado 2015.2 をダウンロードして、ZedBoardをちょっとやり直そうと思い、CTTのHello Worldを実行しようとすると、ビルドエラーが発生した。 http://forums.xilinx.com/xlnx/attachments/xlnx/ELINUX/8467/1/zedboard_CTT_v2013_2_130807.pdf もともとVivad…

Zynq用Yocto-LinuxをビルドするためのVagrantfileとchef

ビルドが失敗する理由はタイムアウトが短かすぎるせいだった。 修正方法をに記載しました。 Zynq用Yocto-LinuxをビルドするためのVagrantfileとchef (2) - FPGA開発日記msyksphinz.hatenablog.com Yocto-Linuxってビルドするのに手順が多くて、良く忘れてし…

ISSからハードウェアデコーダを自動生成してみる(6)

CPU

さて、ハードウェアデコーダとして、制御信号を生成していこう。 命令毎のテーブルから、信号を取り出すために、以下のようなRubyのコードを用いて自動生成してみる。 msyksphinz/swimmer_riscvgithub.com inst_ctrl_fp.printf(mnemonic, max_ctrl_bitwidth)…

OpenCLを起動するまでのプロセスをまとめてみた

改訂新版 OpenCL入門 1.2対応 マルチコアCPU・GPUのための並列プログラミング作者: 株式会社フィックスターズ,土山了士,中村孝史,飯塚拓郎,浅原明広,孫正道,三木聡出版社/メーカー: インプレスジャパン発売日: 2012/03/16メディア: 単行本(ソフトカバー)こ…

PyMTLを試す

PyMTLは、Pythonの記述からVerilog-HDLを出力するためのツールだ。 http://csl.cornell.edu/~cbatten/pdfs/lockhart-pymtl-micro2014.pdf 1. インストールまで 僕はRTLの開発はWindows+Cygwinの環境を主体にしているので、Cygwin上にインストールする方法を…

ISSからハードウェアデコーダを自動生成してみる(5)

CPU

続いて、制御信号を自動生成してみよう。 msyksphinz/swimmer_riscvgithub.com 基本的には、命令分類毎に必要な信号の種類がリストアップされているので、 命令分類毎に、各命令で制御信号が必要とされているかをチェックし、必要とされていれば信号線を生成…

Chisel事始め(2)

Chiselのチュートリアルの続き。 ucb-bar/chisel-tutorialgithub.com chisel-tutorial/examples/BasicALU.scala を見てみよう。 package TutorialExamples import Chisel._ class BasicALU extends Module { val io = new Bundle { val a = UInt(INPUT, 4) v…

Chisel事始め(1)

今まではRubyのテーブルと自作のデコーダ生成スクリプトを使ってVerilog-HDLのコードを生成してきたが、もうちょっと既存のフレームワークを探してみよう。 まずはChiselだ。ChiselはScalaで記述された言語情報からハードウェアを自動生成するためのフレーム…

ISSからハードウェアデコーダを自動生成してみる(4)

CPU

続いて、制御信号を自動生成に挑戦する。 ALU_ADD / ALU_SUB など、接頭語が同一ならば、同じビットフィールドとして宣言する。 それ以外の単発の名前であれば、固有に1ビットを割り当てる。 例: ALU_ADD/ALU_SUB/ALU_MUL/ALU_DIV/DST_EN/R1_EN/R2_EN の信号…

ISSからハードウェアデコーダを自動生成してみる(3)

CPU

続き。とりあえずデコードテーブルを作ってみたところから。 ## start of RISC-V instructions # ['BITFIELD' 31-26, 25-21, 20-16 15-11 10-06 05-00 ] # ['DECODE-KEY', 'OPCODE', 'RS' 'RT', 'RD', 'SHAMT', 'FUNCT' 'TYPE' 'KEY_TABLE' ] $arch_table[ 0…

ISSからハードウェアデコーダを自動生成してみる(2)

CPU

msyksphinz/swimmer_riscvgithub.com MIPSのデコーダをISSのデコードテーブルから自動生成してみる。MIPSのISSはC版しかないのだが、RISC-V版のデコーダだけ書き換えて一時的に作ってみた。 とりあえずこんな感じになっている。arch_tableとして表現されてい…

RISC-Vの環境をDockerfileで構築する

現在はRISC-Vの環境をVagrantで構築しているが、それをDockerfileを記述してみる。 Dockerを使うことで、vagrantを利用している場合はOSを別々に起動するところが、同じOSを利用することでメモリ使用量を抑えることができるかもしれない。 msyksphinz/docker…

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

C++

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

xv6の翻訳をしてみた(まだ途中)

xv6

http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf xv6の教科書を勉強するために、まずは翻訳をしてみた。 所要時間は会社から帰ってから1時間くらい。まだ途中な部分がたくさんあるけど、とりあえず公開してみます。 翻訳の間違いがまだ多々あるのだ…

MITのxv6を読もう - 第6章 データのロギング -

xv6

ロギングといのは、ディスクへのアクセス中にクラッシュが発生しても回復するための構成。 多くのファイルシステムの操作では、ディスクへの複数回の書き込みが発生し、クラッシュは、ある一部分の書き込みがファイルシステム上のディスクに対して実行された…

MITのxv6を読もう - 第6章 ファイルシステムの階層構造 -

xv6

xv6の教科書も第6章に入ってきた。次はファイルシステムについてだ。 xv6のファイルシステムは、以下のようなレイヤを取っている。 ディスクレイヤは、IDEハードドライブのブロックを読み書きする。 バッファキャッシュレイヤはディスクブロックをキャッシュ…

MITのxv6を読もう - 生産者/消費者モデルでデッドロックを避ける方法 -

xv6

sleepとwakeupの例として、生産者/消費者モデルが紹介されている。 生産者 : キューにデータを書き込んでいく。一定数までキューにデータを書き込むとスリープする。 消費者 : キューからデータを読み込む。キューが空になるまで読み込むとスリープする。 こ…

MITのxv6を読もう - 第4章 ロック獲得時の割り込み処理(Interrupt handlers) -

xv6

6.828 / Fall 2014 ロックを獲得しているときに問題となるものとして、ロック最中に割り込みが発生したときについての説明だ。 ロックを獲得している最中に割り込みが発生して、その割り込みルーチンが同じロックを獲得しようとしていると、デッドロックにな…

ISSからハードウェアデコーダを自動生成してみる

CPU

msyksphinz/swimmer_riscvgithub.com ISSの命令デコーダは、rubyから自動生成している。これを活用すると、ハードウェアのデコーダも自動生成できないだろうか。 とりあえず作ってみると、こんな感じになった。 まず、ISSのデコーダはRubyのテーブルで以下の…

MITのxv6を読もう - 第4章 複数のロックを獲得するときの注意事項 (Lock ordering) -

xv6

6.828 / Fall 2014 複数のロックを獲得するときの注意事項として、ロックは別のプロセスであっても同じ順番で獲得しなければならない、というのがある。これについて説明がなされている。 プロセスAがロック1→ロック2の順番で獲得する プロセスBがロック2→ロ…

MITのxv6を読もう - 第4章 ロック獲得の仕組み -

xv6

http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf 第4章では、ロックについての説明がなされている。ロックをどのように実装するかということについて、モデルとしては、 21 void 22 acquire(struct spinlock *lk) 23 { 24 for(;;) { 25 if(!lk->loc…

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

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

MITのxv6を読もう - 第4章 ロックは何故必要なのか -

xv6

6.828 / Fall 2014 この章から、ロックの説明に入る。まずは、ロックが必要なのかという説明から。こんなものMITの学生にしてみれば全く常識的な話だとは思うが、一応説明されている。 struct list { int data; struct list *next; }; struct list *list = 0…

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

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

MITのxv6を読もう - 第3章 システムコールの呼び出し方法について -

xv6

システムコールを呼び出すには、syscall()を呼び出すのだが、xv6ではどのような方法を取っているのだろうか。 void syscall(void) { int num; num = proc−>tf−>eax; if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { proc−>tf−>eax = syscalls[num]…

cocotbを試す(3. AXIのモデルを繋げてみる)

msyksphinz/pulsar-2github.com cocotbでAXIの接続をシミュレーションしてみる。まずはAXIのランダム応答のモデルを作ってみる。超適当だけど、ARチャネルとRチャネルのモデルがランダム時間で応答するようにして、それをマスターが正しく受けとることができ…

MITのxv6を読もう - 第3章 trapの処理方法 -

xv6

http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf トラップを処理するのも大変だなー。 xv6ではperlを使って、ベクタテーブルを作っているみたいだ。まあそこは問題じゃなくて、trapが発生すると、それを処理するためにまずalltrapsというルーチンに…