FPGA開発日記

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

ソフトウェアデザイン11月号を購入。「なぜ,コンピュータは割り算が下手なのか!?」

スーパー台風により本屋に行けないので、ネットでPDF版を購入。 お目当ては猫、、、ではなくて第2特集の「なぜ,コンピュータは割り算が下手なのか!?」

内容は割と普通だった。せいぜい命令のレイテンシ計ってみたくらい。 ハードウェア屋さんだと割と常識でガッカリするかもしれない。

ソフトウェア屋さんで、プログラムの美しさとか言って除算とか剰余とかめっちゃ使っている方は、読んでみると如何? まあ内容は基本情報技術者程度だとは思いますが。。。

Halide to FPGA試行(1. HalideのコンパイルとCPU上でのテストパタン試行)

Pixel2 → Pixel Visual Core → Halideあたりを調べていたら、ちょうどFixstarsからHalide to FPGAという環境がリリースされた。

www.fixstars.com

ターゲットがZedBoardだし、お、ちょうど面白そうと思って早速中身を見てみた。

最初は、CPUでのテスト環境を試行してみる。

  • CPU上での開発: Halide to FPGA

CPU上での開発 – Halide to FPGA

HalideのビルドからLLVMのビルドまで一応フルスクラッチで作ってみた。

github.com

最初にLLVMをインストールしておく必要がある。これも一応フルスクラッチ

svn co https://llvm.org/svn/llvm-project/llvm/branches/release_39 llvm3.9
svn co https://llvm.org/svn/llvm-project/cfe/branches/release_39 llvm3.9/tools/clang
cd llvm3.9
mkdir build
cd build
cmake -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD="X86;ARM;NVPTX;AArch64;Mips;PowerPC" -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_BUILD_TYPE=Release ..
make -j4

環境変数を通しておく。

export LLVM_CONFIG=/home/msyksphinz/work/software/llvm3.9/build/bin/llvm-config
export CLANG=/home/msyksphinz/work/software/llvm3.9/build/bin/clang

次にHalideのビルドを行う。

Halideのリビジョンは最新のTagに合わせておかないとどうもコンパイルが成功しそうにない。そんなもんなの?

git clone https://github.com/halide/Halide.git
cd Halide
git checkout release_2017_05_03
make -j4

こちらも環境変数を通しておく。

export HALIDE_ROOT=/home/msyksphinz/work/software/Halide

Halide To FPGAの環境をチェックアウトしてくる。

git clone git@github.com:fixstars/Halide-elements.git
cd Halide-elements
cd src/convolution
make

これで一応ビルドは出来たので、convolution_testを実行してみた。

./convolution_test
Success!

まあここまでは良いのだけど、問題はFPGAのイメージだ。とりあえずポータルサイトに行ってみたのだが、イメージがダウンロードできない。 なんかそもそもポータルページに不具合があるのか、何度もログインしても勝手にログアウトされてしまう。何だこりゃ?

ポータルサイトが安定するまでちょっと作業は放置しよう。

プログラミング言語Rustに入門中(2. 哲学者の食事)

Rust入門中の2回目。ってか間が空くのが長いな!

食事する哲学者

完全な写経中だけど、ちゃんと理解して自力でRustのコードが書ける日は来るのだろうか?

しかも私の環境では全然並列実行出来ていない感があるのだけど、大丈夫なのかしらん?

f:id:msyksphinz:20171021025334p:plain

use std::thread;
use std::time::Duration;
use std::sync::{Mutex, Arc};

struct Philosopher {
    name: String,
    left: usize,
    right: usize,
}

impl Philosopher {
    fn new(name: &str, left: usize, right: usize) -> Philosopher {
        Philosopher {
            name: name.to_string(),
            left: left,
            right: right,
        }
    }

    fn eat(&self, table: &Table) {
        let _left = table.forks[self.left].lock().unwrap();
        thread::sleep(Duration::from_millis(150));
        let _right = table.forks[self.right].lock().unwrap();
        
        println!("{} is eating.", self.name);

        thread::sleep(Duration::from_millis(1000));

        println!("{} is done eating.", self.name);
    }
}

struct Table {
    forks: Vec<Mutex<()>>,
}


fn main () {
    let table = Arc::new(Table { forks: vec![
        Mutex::new(()),
        Mutex::new(()),
        Mutex::new(()),
        Mutex::new(()),
        Mutex::new(()),
    ]});

    let philosophers = vec![
        Philosopher::new("Judith Butler", 0, 1),
        Philosopher::new("Gilles Deleuze", 1, 2),
        Philosopher::new("Karl Marx", 2, 3),
        Philosopher::new("Emma Goldman", 3, 4),
        Philosopher::new("Michel Foucault", 0, 4),
    ];

    let handles: Vec<_> = philosophers.into_iter().map(|p| {
        let table = table.clone();
        
        thread::spawn(move || {
            p.eat(&table);
        })
    }).collect();
    
    for h in handles {
        h.join().unwrap();
    }
}

UCBのRISC-V FPGAシミュレーション加速環境 "MIDAS"を試行する(1)

CARRVで発表された、UCBのRISC-V FPGAシミュレーション環境 MIDASのリポジトリがあったので、実験してみた。

試してみたのは以下のディレクトリ。

github.com

まずは一応全部ダウンロードした。riscv-fesvrを最新に更新しないと動作しないようなので、riscv-fesvrを更新する。

git clone https://github.com/ucb-bar/midas-top-release.git
cd midas-top
./setup.sh

しかしこのリポジトリまだきちんと管理されていないのか、サブリポジトリのダウンロードができないので少し変更した。

diff --git a/.gitmodules b/.gitmodules
index 1e1dad0..9b1170d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,24 +1,24 @@
 [submodule "rocket-chip"]
        path = rocket-chip
-       url = git@github.com:ucb-bar/rocket-chip.git
+       url = https://github.com/ucb-bar/rocket-chip.git
 [submodule "midas"]
        path = midas
-       url = git@github.com:ucb-bar/midas-release.git
+       url = https://github.com/ucb-bar/midas-release.git
 [submodule "firrtl"]
        path = firrtl
-       url = git@github.com:ucb-bar/firrtl.git
+       url = https://github.com/ucb-bar/firrtl.git
 [submodule "chisel"]
        path = chisel
-       url = git@github.com:ucb-bar/chisel3.git
+       url = https://github.com/ucb-bar/chisel3.git
 [submodule "riscv-boom"]
        path = boom
-       url = git@github.com:ucb-bar/riscv-boom.git
+       url = https://github.com/ucb-bar/riscv-boom.git
 [submodule "midas-zynq"]
        path = platforms/zynq
-       url = git@github.com:ucb-bar/midas-zynq.git
+       url = https://github.com/ucb-bar/midas-zynq.git
 [submodule "fesvr"]
        path = riscv-fesvr
-       url = git@github.com:riscv/riscv-fesvr.git
+       url = https://github.com/riscv/riscv-fesvr.git

あとはriscv-fesvrのリポジトリ更新を行っておく。

cd riscv-fesvr
./configure --prefix=/home/msyksphinz/riscv64/
make
make install

make verilogの実行結果

f:id:msyksphinz:20171018231301p:plain

make run-bmark-testsの実行結果

f:id:msyksphinz:20171019003603p:plain

なぜか1本目でシミュレーションが止まるね。原因が良く分からないけど、とりあえずMakefileを改造する。

 $(output_dir)/%.out: $(output_dir)/% $(EMUL)
        cd $(dir $($(EMUL))) && \
        ./$(notdir $($(EMUL))) $< +sample=$<.sample +max-cycles=$(timeout_cycles) $(SW_SIM_ARGS) \
-       $(disasm) $@ && [ $$PIPESTATUS -eq 0 ]
+       $(disasm) $@

make bitstream BOARD=zedboardの実行結果。Vivadoで確認してみる。

f:id:msyksphinz:20171019020332p:plain

Ubuntu 17.10 がリリースされたのでVirtualBox上で導入試行する

f:id:msyksphinz:20171019231220p:plain

www.ubuntu.com

Ubuntu 17.10がリリースされたよ!やっとUnityじゃなくなったよ!GNOMEになって多少快適になってる!

例によってVirtualBoxにインストールしてみた。ついでにRISC-Vのツール群も一通り使えるかチェックしておこうかな。

github.com

github.com

$ sudo apt-get install autoconf automake autotools-dev curl device-tree-compiler libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc

これ以外に、pkg-configlibz-devのインストールが必要だった。

sudo apt install -y pkg-config libz-dev

インストールする。

export RISCV=/home/msyksphinz/riscv-rocket
export MAKEFLAGS="$MAKEFLAGS -j4"
cd work/rocket-chip-default/riscv-tools/
git submodule update --init --recursive
./build.sh

無事にインストールできた。

f:id:msyksphinz:20171020011323p:plain

SiFive Webinar "Part II: Introduction to SiFive RISC-V Core" 聴講

途中で寝ちゃいましたけど!日本時間の2:30~は遅すぎるよ。。。

f:id:msyksphinz:20171019015252p:plain

SiFive社が主催しているRISC-VのWebinar第2回、今回はSiFive社が提供しているRISC-VのIP群についての話。シングルコアの話から、マルチコアのものまでザックリと製品群のすみ分けの説明だった。

だんだん製品よりの話になってきているので期待。ちなみに第3回の内容についても事前予告が公開されている。

Webinar Catalogue

  • Part III: Evaluating SiFive RISC-V Core (Date and Time TBD)

前回の発表についてのレポート(というかほぼ感想)はこちら。

msyksphinz.hatenablog.com

追記: Webinarの資料が公開されたので場所追記。

Webinar Catalogue

RISC-V 7th Workshop の Preliminary Agendaが公開されました

11月28~11月30日に実施される7th RISC-V Workshop、今回もPreliminary Agendaが公開された。

今回も2日間に渡るセッションだが、量が多いなあ!45セッションあるらしい。 ってかセッションの時間割り当てが分刻みなのだが。。。

riscv.org

大きく分けて、

  • 1日目 (28日)
  • RISC-V Update
  • Keynote Address
  • Commercial RISC-V Implementations
  • RISC-V Software Ecosystem
  • RISC-V Architecture
  • Poster / Demo Previews ~ 2min per presenter

  • 2日目 (29日)

  • Open Source RISC-V Implementations
  • Keynote Address
  • Open Source RISC-V Silicon
  • RISC-V Vectors and Security
  • RISC-V Applications / Accelerators
  • RISC-V Simulation Infrastructure

となっている。ざっと見た限り、日本人の発表者はいない。少し寂しいなあ。