2017-08-01から1ヶ月間の記事一覧
なんだいこれは?真ん中にあるやつ。モナリザが異様な雰囲気を醸し出している。 riscv.org 著者: David Patterson & Andrew Waterman 発売日: September 1, 2017 179ページ 価格 : $10 やっす!でもAmazonにまだ出ていない。モナリザの顔で、179ページも何を…
Chisel、コンセプトとしてはいいのかもしれないが、マジで書きにくいなあ。 一度Scalaでシミュレーションすればよいのかもしれないが、Rocket CoreのScalaシミュレーションとかどうやるんだろう? RTLシミュレーションするのだとしても一度Verilogに変換して…
完全に自分のメモな訳だが。。。 ちょっとした事情でCentOSにRISC-Vの環境をインストールする必要が生じたので、一応メモしておく。 通常の手順はUbuntu上での手順が基本なのだが、CentOSの場合はパッケージのインストール方法が異なるだけだ。 Ubuntuの場合…
RoCCへの接続方法について、少しずつ分かってきたので、独自Acceleratorを作って、接続してみたい。願わくば、FPGAで動作確認できるところまで行ってみたいな。 RoCC Interfaceについて RoCCには、いくつかインタフェースが入っているが、大きく分けて使用す…
RoCC (Rocket Custom Coprocessor) のチュートリアルって意外と少ないので、調査するのに苦労する。 前回のサンプルプログラムは、一応意図通りに動作したのだが、いったいどのような仕組みになっているのか調査してみる。 test_accumulator.c の解析 test_a…
RoCC (Rocket Custom Coprocessor) のチュートリアルって意外と少ないので、調査するのに苦労する。 githubにチュートリアルっぽいものがあったので、試行してみようと思った。 github.com これは、RocketCoreのカスタムデザインの中でアキュムレータを内蔵…
RISC-VのRocketCoreを拡張する方法にはいろいろあって、まずは命令を拡張してALUにいろいろ手を加える方法と、アクセラレータを外部に接続してそれに対するアクセスを実行するためのRoCCという方法がある。 命令を拡張してパイプラインの内部に手を入れる方…
RISC-V プロセッサHiFive1を使って、機械学習のチュートリアルとも言えるMNISTのプログラムを動作させたい。 まずはMNISTの推論コード自身から、HiFive1に移植している。 当たり前と言えば当たり前だが、行列演算の途中のデータとか、全部L1データキャッシュ…
RISC-Vのコンパイラとしては主にGCCが提供されており、LLVMはいつからか開発が停止していた。 ところがここ数日でLLVMに関してアップデートがあったようで、どうやら開発はまだ継続している様子。 github.com [llvm-dev] RISC-V LLVM status update 本家の最…
MNISTのデータをロードするところまでできるようになった。まずは学習処理ではなく、学習結果のパラメータをロードしてデータを評価できるようにする。 学習済みデータをオブジェクトファイルに変換する 前回と同様、パラメータなどの初期値データはファイル…
前回まででRocketChipのカスタマイズと、binutilsのカスタマイズが完了した。 今回はRocketChipのシミュレーションをして動作確認してみよう。 bitrev命令のテストプログラムを作成する 新規命令のテストプログラムを作成するには、riscv-toolsの環境を使う…
RocketChipはChiselで記述されており、改造するためにはScalaの知識が必要だ。Scalaは良く知らないので試行錯誤にはなるが、ALUに何らかの命令を追加するくらいなら何とかなりそうだ。Chiselを読み解いて、ALUに新しい演算なりなんなり、入れてみたい。 前回…
RocketChipはChiselで記述されており、改造するためにはScalaの知識が必要だ。Scalaは良く知らないので試行錯誤にはなるが、ALUに何らかの命令を追加するくらいなら何とかなりそうだ。Chiselを読み解いて、ALUに新しい演算なりなんなり、入れてみたい。 Rock…
そろそろHiFive1ボードを活用しないと、、、 MNISTのデータは非常に巨大で、フラッシュなどに入れないとHiFive1のチップの中にはもちろん入らない。 まずはMNISTデータを小さくしてオブジェクトとして貼り付け、HiFive1のシリアルコンソールから出力するとこ…
忙しくてずいぶんと放置してしまっていた。RISC-V向けにアプリケーションをコンパイルして、動作させてみるテスト。 いきなり大きなプログラムを実行して、HiFive1を壊してしまったりしたので、今回は慎重に生きたい。まずはISSなどであらかじめプログラムの…
UCBより、BOOM (Berkeley Out-of Order Machine) v.2 のアナウンスがあった。 It's been a busy summer! Here's a glimpse of what we've been up to (hint: it's BOOM version 2.0!): https://t.co/kNqee9KzeA— The BOOM Processor (@boom_cpu) 2017年8月16…
Rocket-Chipは、主にTileLinkとAXIバスによって記述されており、TileLinkがRocketChipに近い方、AXIが外部バスに出ていく方として記述されているのだけれども、AXI4のバスもChiselで書かれているようだ。 とりあえず見てみたが、正直なんだか良く分からない…
既に誰かがやっているとは承知の上で、Ubuntu on Windowsの上にRISC-Vの開発環境を構築しておきたくて、初めてWindows Creator’s Updateなどという謎のアップデートをインストールしたし、インストールに時間かかりすぎだし、どうにかUbuntuのインストールも…
RocketChipはChiselで記述されており、その実装はオープンになっているので、Chiselを操ることができればRocketChipを自由にカスタマイズすることができる。 さらに、RISC-VのGCCをカスタマイズすれば専用命令を追加することができ、自分の好きな命令を追加…
Chiselを使って、独自の回路を作成しテストしてみよう。前回はチュートリアルを実行してみただけだったが、次は独自の回路を作成してみる。 作ってみるのは、16個の32ビット整数を受け取り、その16要素をすべて加算し総和を求めるプログラムだ。 ツリー上に…
前回までで、Chiselのイントロダクションを完了した。 しかし実際に使ってみなければどのように使えばよいのかは分からない。 いろいろ作って試してみよう。 Chiselを簡単に試すことのできるプロジェクトテンプレート github.com 上記のプロジェクトを使えば…
前回の続き。Chisel勉強中。 このページから。 github.com パラメータ付き関数 Polymorphism and Parameterization · freechipsproject/chisel3 Wiki · GitHub より一般的なMuxを定義するために、ビット長をパラメータ化する。 def Mux[T
前回の続き。Chisel勉強中。このページから。 github.com ステート記述 (State Elements) Chiselで記述できる最も簡単なステート記述は、ポジティブエッジのステートマシンで、以下のように記述する。 val reg = RegNext(in) この場合、regは1サイクル遅れて…
関数の定義 デザインの再利用のために関数を定義することができる。 def clb(a: UInt, b: UInt, c: UInt, d: UInt): UInt = (a & b) | (~c & d) a, b, c, dの引数を取って、論理演算を実行した結果を返す。 BundleとVec BundleとVecによって、Chiselのデータ…
Chiselの勉強をすべく、githubのChiselプロジェクトについているWikiを読んで勉強中。 github.com Chiselは、「Constructing Hardware In a Scala Embedded Language」の略。 Chiselでハードウェアを設計するときは、Scalaのプログラムを利用してハードウェ…
Maker Fair Tokyo, いつも面白そうだなと思いながらネットで見てて、でも毎年当日に気が付くので行けないのだが、今年は珍しく8/5(土)に気が付いたので8/6(日)に見学に行ってきた。 せっかく写真を撮ったのにブレブレである。 印象としては、やはり3Dプリン…
RocketChipを改造しようにも、どこがどうなっているのか全く分からなかったので、頑張ってエディタで配線を追いかけながら接続構成図を作った。 だいたい3本のバスがRocketChipにつながっている。メインのバスと、L2に接続するためのバス、コヒーレント用の…
前回の続き。bitファイルが完成したので、boot.binをSDカードコピーして動作させてみた。 本当に動作しているかどうかを確認するために、BlockRAMのデザインに少しだけギミックを入れた。 always @ (posedge s_axi_aclk) begin up_rack_s <= up_rreq_s; bloc…
ZynqのCPU Interconnectに接続するためには、AXI経由でブロックモジュールを作成する必要がある。これらの部品は自分で作っても良いのだが、どうにもエラーが取り切れないところもあるし、きちんと作れているのかいまいち自信が無かったので、ADIのデザイン…