2015-07-01から1ヶ月間の記事一覧
もう自分用のメモだけど、 --- 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 - FPGA開発日記msyksphinz.hatenablog.com 前のブログで、Yocto-LinuxをビルドするためのVagrantfileとchefを作成したが、途中でビルドが失敗してしまう問題があった。 何度か繰り替えしたトライした…
RISC-V用のISSを実装しているが、それをMIPS用にも活用したい。C++で記述しているので、継承を利用すれば、筋が良く実装することができそうだ。 msyksphinz/swimmer_riscvgithub.com MIPS用のVerilog-HDLハードウェアデコーダを生成していたので、それに合わ…
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 (2) - FPGA開発日記msyksphinz.hatenablog.com Yocto-Linuxってビルドするのに手順が多くて、良く忘れてし…
さて、ハードウェアデコーダとして、制御信号を生成していこう。 命令毎のテーブルから、信号を取り出すために、以下のようなRubyのコードを用いて自動生成してみる。 msyksphinz/swimmer_riscvgithub.com inst_ctrl_fp.printf(mnemonic, max_ctrl_bitwidth)…
改訂新版 OpenCL入門 1.2対応 マルチコアCPU・GPUのための並列プログラミング作者: 株式会社フィックスターズ,土山了士,中村孝史,飯塚拓郎,浅原明広,孫正道,三木聡出版社/メーカー: インプレスジャパン発売日: 2012/03/16メディア: 単行本(ソフトカバー)こ…
PyMTLは、Pythonの記述からVerilog-HDLを出力するためのツールだ。 http://csl.cornell.edu/~cbatten/pdfs/lockhart-pymtl-micro2014.pdf 1. インストールまで 僕はRTLの開発はWindows+Cygwinの環境を主体にしているので、Cygwin上にインストールする方法を…
続いて、制御信号を自動生成してみよう。 msyksphinz/swimmer_riscvgithub.com 基本的には、命令分類毎に必要な信号の種類がリストアップされているので、 命令分類毎に、各命令で制御信号が必要とされているかをチェックし、必要とされていれば信号線を生成…
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…
今まではRubyのテーブルと自作のデコーダ生成スクリプトを使ってVerilog-HDLのコードを生成してきたが、もうちょっと既存のフレームワークを探してみよう。 まずはChiselだ。ChiselはScalaで記述された言語情報からハードウェアを自動生成するためのフレーム…
続いて、制御信号を自動生成に挑戦する。 ALU_ADD / ALU_SUB など、接頭語が同一ならば、同じビットフィールドとして宣言する。 それ以外の単発の名前であれば、固有に1ビットを割り当てる。 例: ALU_ADD/ALU_SUB/ALU_MUL/ALU_DIV/DST_EN/R1_EN/R2_EN の信号…
続き。とりあえずデコードテーブルを作ってみたところから。 ## 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…
msyksphinz/swimmer_riscvgithub.com MIPSのデコーダをISSのデコードテーブルから自動生成してみる。MIPSのISSはC版しかないのだが、RISC-V版のデコーダだけ書き換えて一時的に作ってみた。 とりあえずこんな感じになっている。arch_tableとして表現されてい…
現在はRISC-Vの環境をVagrantで構築しているが、それをDockerfileを記述してみる。 Dockerを使うことで、vagrantを利用している場合はOSを別々に起動するところが、同じOSを利用することでメモリ使用量を抑えることができるかもしれない。 msyksphinz/docker…
超高速グラフ列挙アルゴリズム?〈フカシギの数え方〉が拓く,組合せ問題への新アプローチ?作者: ERATO 湊離散構造処理系プロジェクト,湊真一出版社/メーカー: 森北出版発売日: 2015/04/08メディア: 単行本(ソフトカバー)この商品を含むブログ (3件) を見る…
http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf xv6の教科書を勉強するために、まずは翻訳をしてみた。 所要時間は会社から帰ってから1時間くらい。まだ途中な部分がたくさんあるけど、とりあえず公開してみます。 翻訳の間違いがまだ多々あるのだ…
ロギングといのは、ディスクへのアクセス中にクラッシュが発生しても回復するための構成。 多くのファイルシステムの操作では、ディスクへの複数回の書き込みが発生し、クラッシュは、ある一部分の書き込みがファイルシステム上のディスクに対して実行された…
xv6の教科書も第6章に入ってきた。次はファイルシステムについてだ。 xv6のファイルシステムは、以下のようなレイヤを取っている。 ディスクレイヤは、IDEハードドライブのブロックを読み書きする。 バッファキャッシュレイヤはディスクブロックをキャッシュ…
sleepとwakeupの例として、生産者/消費者モデルが紹介されている。 生産者 : キューにデータを書き込んでいく。一定数までキューにデータを書き込むとスリープする。 消費者 : キューからデータを読み込む。キューが空になるまで読み込むとスリープする。 こ…
6.828 / Fall 2014 ロックを獲得しているときに問題となるものとして、ロック最中に割り込みが発生したときについての説明だ。 ロックを獲得している最中に割り込みが発生して、その割り込みルーチンが同じロックを獲得しようとしていると、デッドロックにな…
msyksphinz/swimmer_riscvgithub.com ISSの命令デコーダは、rubyから自動生成している。これを活用すると、ハードウェアのデコーダも自動生成できないだろうか。 とりあえず作ってみると、こんな感じになった。 まず、ISSのデコーダはRubyのテーブルで以下の…
6.828 / Fall 2014 複数のロックを獲得するときの注意事項として、ロックは別のプロセスであっても同じ順番で獲得しなければならない、というのがある。これについて説明がなされている。 プロセスAがロック1→ロック2の順番で獲得する プロセスBがロック2→ロ…
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をビルドに利用してみよう。 msyksphinz/swimmer_riscvgithub.com 基本的に、cmakeで使う分には簡単だ。 msyksphinz/swimmer_riscvgithub.com # include_directories(../vendor/gflags/include/) set (gflags_SHARED TRU…
6.828 / Fall 2014 この章から、ロックの説明に入る。まずは、ロックが必要なのかという説明から。こんなものMITの学生にしてみれば全く常識的な話だとは思うが、一応説明されている。 struct list { int data; struct list *next; }; struct list *list = 0…
google-gflagsは、Googleが公開しているフラグの解析ツールだ。最近はGoogle-codesから、githubに移行して公開してある。 gflags/gflagsgithub.com これを使いたくて、色々試したがかなりハマったので、やり方を書いておく。 google-gflagsのリポジトリのmas…
システムコールを呼び出すには、syscall()を呼び出すのだが、xv6ではどのような方法を取っているのだろうか。 void syscall(void) { int num; num = proc−>tf−>eax; if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { proc−>tf−>eax = syscalls[num]…
msyksphinz/pulsar-2github.com cocotbでAXIの接続をシミュレーションしてみる。まずはAXIのランダム応答のモデルを作ってみる。超適当だけど、ARチャネルとRチャネルのモデルがランダム時間で応答するようにして、それをマスターが正しく受けとることができ…
http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf トラップを処理するのも大変だなー。 xv6ではperlを使って、ベクタテーブルを作っているみたいだ。まあそこは問題じゃなくて、trapが発生すると、それを処理するためにまずalltrapsというルーチンに…