FPGA開発日記

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

LLVM for RISC-Vのステータスアップデート

RISC-Vのコンパイラとしては主にGCCが提供されており、LLVMはいつからか開発が停止していた。 ところがここ数日でLLVMに関してアップデートがあったようで、どうやら開発はまだ継続している様子。 github.com [llvm-dev] RISC-V LLVM status update 本家の最…

RISC-VプロセッサHiFive1で機械学習コードを動作させる(2. ニューラルネットのパラメータのロード)

MNISTのデータをロードするところまでできるようになった。まずは学習処理ではなく、学習結果のパラメータをロードしてデータを評価できるようにする。 学習済みデータをオブジェクトファイルに変換する 前回と同様、パラメータなどの初期値データはファイル…

RocketChipをカスタマイズするためのチュートリアル(4. RTLシミュレーションによる動作確認)

前回まででRocketChipのカスタマイズと、binutilsのカスタマイズが完了した。 今回はRocketChipのシミュレーションをして動作確認してみよう。 bitrev命令のテストプログラムを作成する 新規命令のテストプログラムを作成するには、riscv-toolsの環境を使う…

RocketChipをカスタマイズするためのチュートリアル(3. RISC-V binutilsに新規命令を追加する)

RocketChipはChiselで記述されており、改造するためにはScalaの知識が必要だ。Scalaは良く知らないので試行錯誤にはなるが、ALUに何らかの命令を追加するくらいなら何とかなりそうだ。Chiselを読み解いて、ALUに新しい演算なりなんなり、入れてみたい。 前回…

RocketChipをカスタマイズするためのチュートリアル(2. Chiselによるパイプラインの改造)

RocketChipはChiselで記述されており、改造するためにはScalaの知識が必要だ。Scalaは良く知らないので試行錯誤にはなるが、ALUに何らかの命令を追加するくらいなら何とかなりそうだ。Chiselを読み解いて、ALUに新しい演算なりなんなり、入れてみたい。 Rock…

RISC-VプロセッサHiFive1で機械学習コードを動作させる(1.MNISTのロード)

そろそろHiFive1ボードを活用しないと、、、 MNISTのデータは非常に巨大で、フラッシュなどに入れないとHiFive1のチップの中にはもちろん入らない。 まずはMNISTデータを小さくしてオブジェクトとして貼り付け、HiFive1のシリアルコンソールから出力するとこ…

Spike-ISSによるRISC-V向けにコンパイルしたアプリケーション実行(1)

忙しくてずいぶんと放置してしまっていた。RISC-V向けにアプリケーションをコンパイルして、動作させてみるテスト。 いきなり大きなプログラムを実行して、HiFive1を壊してしまったりしたので、今回は慎重に生きたい。まずはISSなどであらかじめプログラムの…

BOOM(Berkeley Out of Order Machine) version 2

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…

AXIバス by Chisel

Rocket-Chipは、主にTileLinkとAXIバスによって記述されており、TileLinkがRocketChipに近い方、AXIが外部バスに出ていく方として記述されているのだけれども、AXI4のバスもChiselで書かれているようだ。 とりあえず見てみたが、正直なんだか良く分からない…

Ubuntu on Windows導入(1)

既に誰かがやっているとは承知の上で、Ubuntu on Windowsの上にRISC-Vの開発環境を構築しておきたくて、初めてWindows Creator’s Updateなどという謎のアップデートをインストールしたし、インストールに時間かかりすぎだし、どうにかUbuntuのインストールも…

RocketChipをカスタマイズするためのチュートリアル(1)

RocketChipはChiselで記述されており、その実装はオープンになっているので、Chiselを操ることができればRocketChipを自由にカスタマイズすることができる。 さらに、RISC-VのGCCをカスタマイズすれば専用命令を追加することができ、自分の好きな命令を追加…

Chiselを記述して回路を作成しテストする(2)

Chiselを使って、独自の回路を作成しテストしてみよう。前回はチュートリアルを実行してみただけだったが、次は独自の回路を作成してみる。 作ってみるのは、16個の32ビット整数を受け取り、その16要素をすべて加算し総和を求めるプログラムだ。 ツリー上に…

Chiselを記述して回路を作成しテストする(1)

前回までで、Chiselのイントロダクションを完了した。 しかし実際に使ってみなければどのように使えばよいのかは分からない。 いろいろ作って試してみよう。 Chiselを簡単に試すことのできるプロジェクトテンプレート github.com 上記のプロジェクトを使えば…

A short User Guide to Chisel勉強中(4)

前回の続き。Chisel勉強中。 このページから。 github.com パラメータ付き関数 Polymorphism and Parameterization · freechipsproject/chisel3 Wiki · GitHub より一般的なMuxを定義するために、ビット長をパラメータ化する。 def Mux[T

A short User Guide to Chisel勉強中(3)

前回の続き。Chisel勉強中。このページから。 github.com ステート記述 (State Elements) Chiselで記述できる最も簡単なステート記述は、ポジティブエッジのステートマシンで、以下のように記述する。 val reg = RegNext(in) この場合、regは1サイクル遅れて…

A short User Guide to Chisel勉強中(2)

関数の定義 デザインの再利用のために関数を定義することができる。 def clb(a: UInt, b: UInt, c: UInt, d: UInt): UInt = (a & b) | (~c & d) a, b, c, dの引数を取って、論理演算を実行した結果を返す。 BundleとVec BundleとVecによって、Chiselのデータ…

A Short Users Guide to Chisel 勉強中(1)

Chiselの勉強をすべく、githubのChiselプロジェクトについているWikiを読んで勉強中。 github.com Chiselは、「Constructing Hardware In a Scala Embedded Language」の略。 Chiselでハードウェアを設計するときは、Scalaのプログラムを利用してハードウェ…

Maker Faire Tokyo 2017見学

Maker Fair Tokyo, いつも面白そうだなと思いながらネットで見てて、でも毎年当日に気が付くので行けないのだが、今年は珍しく8/5(土)に気が付いたので8/6(日)に見学に行ってきた。 せっかく写真を撮ったのにブレブレである。 印象としては、やはり3Dプリン…

RocketChip周辺のモジュール接続図を作成した

RocketChipを改造しようにも、どこがどうなっているのか全く分からなかったので、頑張ってエディタで配線を追いかけながら接続構成図を作った。 だいたい3本のバスがRocketChipにつながっている。メインのバスと、L2に接続するためのバス、コヒーレント用の…

VivadoでZynqのブロックデザインをTCLで生成する(3. FPGAでの動作確認)

前回の続き。bitファイルが完成したので、boot.binをSDカードコピーして動作させてみた。 本当に動作しているかどうかを確認するために、BlockRAMのデザインに少しだけギミックを入れた。 always @ (posedge s_axi_aclk) begin up_rack_s <= up_rreq_s; bloc…

Vivado でZynqのブロックデザインをTCLで生成する方法の調査(2. ADIのモジュールを利用してブロック部品を作成する)

ZynqのCPU Interconnectに接続するためには、AXI経由でブロックモジュールを作成する必要がある。これらの部品は自分で作っても良いのだが、どうにもエラーが取り切れないところもあるし、きちんと作れているのかいまいち自信が無かったので、ADIのデザイン…

Vivado でZynqのブロックデザインをTCLで生成する方法の調査

これまだVivadoのプロジェクトの生成方法や、SDKの処理などについてtcl化する方法について調査してきた。 いろいろ試して、結局以下のQiitaの方法に則るのが一番いいという結論に至った。 qiita.com この中で、VivadoのブロックデザインはGUIで操作したもの…

FPGAマガジン No.18「RISC-Vづくり」を入手

FPGAマガジンNo.18はRISC-V特集「RISC-Vづくり」ということで、早速入手した。ちなみに、私は本文は何も寄稿してません。 雑誌の上においてあるHiFive1ボード2枚、うち1枚は私のだが壊してしまった。 最初は中森章さんのRISC-Vそのものについての解説。仕様…

ThinkPadのトラックポインタが交換できることは意外と知られていなかった

わずか10~20年前、パーソナルコンピュータといえば日本の大手家電メーカがこぞって手を出していた分野であり、また国内家電量販店に並べてあるPCはほとんどが国産だった。 名立たる国内家電メーカは独自のPCを短いスパンでリリースし、国内のシェアも相当高…

VivadoでIPを生成する方法の調査(VivadoのIPインテグレーションの仕組み調査3. RAMの実装)

AXIインタフェースに対して、RAMを実装していく。 github.com blockram_test_v1_0_S00_AXI.v // Add user logic here reg [C_S_AXI_DATA_WIDTH-1:0] mem_ram[1024-1: 0]; wire mem_wren, mem_rdenn; assign mem_wren = axi_wready && S_AXI_WVALID ; assign …

RISC-V Foundationのメンバーのインタビュー記事から考える、半導体で生き残る道

RISC-VのFoundation Memberの一人、"Krste Asanovic"のインタビュー記事が掲載されている。 普段このような細かいニュース記事をブログにすることはないのだけれども、この記事を読めばRISC-Vが何を狙っているのか良く分かるので、興味のある人は読んでほし…

VivadoでIPを生成する方法の調査(VivadoのIPインテグレーションの仕組み調査3. tclを用いた自動化の調査)

Vivadoで生成したIPを接続してVivadoプロジェクトをビルドし、SDカードに書き込むことでブートできるようになった。 物理デバイスにアクセスしてBlockRAMとして制御できているか確認する。 書き込んだ値が読めている。またアドレス毎に別々に値が読み書きで…

VivadoでIPを生成する方法の調査(VivadoのIPインテグレーションの仕組み調査2. )

ZedBoardのIPデザインに対して、BlockRAMのモジュールを挿入する。 BlockRAMの設計 AXI4のインタフェースを持ったBlockRAMデザインを設計する。AXI4のインタフェースは他のデザインから取ってくる。 github.com blockram_test_v1_0 - blockram_test_v1_0_S00…

VivadoでIPを生成する方法の調査(VivadoのIPインテグレーションの仕組み調査)

XilinxのIP生成およびそのインテグレーションの方法って、ネット上にもほとんど情報が出ていなくて、みんなどうやってやってるんだと不思議に思いながら調査しているのだけれども。 Block Designを使わない場合はみんなソースファイルを突っ込んで合成してい…

(大昔の)ThinkPad にRISC-V実験環境を構築したが、HiFive1の調子がおかしい(続き)

HiFive1の試行を引き続き行っているが、たぶんこれ誰も大規模なプログラム流したことないのかな、というのが分かってきた(気がする)。 一枚目のボードを壊してしまったぽいのだが、2枚目のボードもちょっと大きめに配列を取ってコンパイル後、流したら不正終…