読者です 読者をやめる 読者になる 読者になる

FPGA開発日記

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

The RISC-V メモリコンシステンシモデル

RISC-Vウェブサイトに出ていたこの記事。 Vengineerさんにも言及いただいた。 @dev_msyksphinz Tool checks computer architectures, reveals flaws in emerging designApril 12, 2017https://t.co/sMVySElt8j読みました?— 無限ゲームのなか (@Vengineer) 2…

RISC-V LLVM を用いたベンチマークビルドの方法(Compressed ISAを生成させない方法)

前回のRISC-V LLVM 32ビット版命令生成には一つ問題があり、そのままパッチを当ててしまうとCompressed ISA(16ビット版 RISC-V ISA)を生成してしまう点にある。 現状自作CPUも自作ISSもCompressed ISAには対応していないので、32bit版命令しか生成しないよう…

Vivado 2017.1 AXI VIP packageの情報

Vivado 2017.1 AXI VIP Packageについていくつか情報が出ている。 japan.xilinx.com XILINX_AXI_VIP_2017_1.zipをダウンロードすると、いくつかVIPパッケージ内の機能について記述されている。 また、VivadoインストールディレクトリにはAXI VIPパッケージの…

RISC-V LLVM を用いたベンチマークビルドの方法

前回、RISC-V LLVMをビルドしたが、実際にベンチマークプログラムをビルドするためにはどのようにすればよいのだろう。 まず、チュートリアルにのっとってみるのがよいだろう。Freedomプラットフォームの32bit RISC-Vプロセッサ向けにclangを用意する。 いろ…

RISC-V LLVMのビルドとインストール手順

RISC-VはLLVMにも対応しており、リポジトリがgithubに公開されている。 github.com ブランチがいくつか存在するが、 riscv-trunk を選択すること。これは最新のLLVMを追いかけているブランチだ。 リポジトリのチェックアウトとビルド ビルドまでは非常に簡単…

Vivado 2017.1がリリースされていました

Vivado 2017.1がリリースされていた。 japan.xilinx.com 一応リリース情報を見てみよう。結構内容が盛りだくさんだ。 • Vivado IDE のユーザーインターフェイスを刷新。 まじで? こんな感じだった。 AXI Verification IP を導入 - SystemVerilog ベース、ラ…

RISC-Vコア BOOM向けのCoremarkリポジトリの準備

BOOMコアの解析の続き。やはり途中で割り込みに飛んでしまう動作が気に食わないので、riscv-testsのリポジトリをForkしてCoremarkを追加してみようと思った。 まず、Coremarkのriscv-testsのディレクトリを解析してみよう。riscv-testsのbenchmarkディレクト…

RocketChip RISC-V実装RTLにてベンチマークを計測する(3. -O3によるCoremarkコンパイル)

ずいぶん大昔の記事を引っ張り出してきたが、RASの解析などを行うにあたり、BOOMの実装を調べたくて、BOOMの実性能がどうなっているのか調べたくなってきたので調査している。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com gem5を使えばBOOMのパイ…

ランニング用のイヤホンを買い替えた

ランニング時に音楽を聴くため、Bluetoothのイヤホンの非常に安いものを購入していたのだが、何度か使用しているうちに問題が分かってきた。 msyksphinz.hatenablog.com www2.elecom.co.jp このイヤホンは非常に軽くて良いのだが、コントローラの部分が左右…

プロセッサの高速化技法: リターンアドレススタックの実装方法検討

リターンアドレススタック(Return Address Stack: RAS)は、関数呼び出しなどの命令(Call命令)が実行された場合、その関数の戻り先をあらかじめスタックに記憶しておき、Return文が実行された場合にスタックから戻りアドレスを取り出し、 そこからフェッチを…

即値ジャンプ命令の分岐予測実装

即値命令、RISC-VにおけるJAL命令は分岐予測の実装としては非常に単純だ。 即値命令は比較の必要もなく、またジャンプ先も常に固定だ。予測が容易であるため、実装も簡単だ。 一つだけ難しいのは、レジスタ参照の即値ジャンプの場合。これはレジスタの内容に…

リザベーションステーションの1サイクル先出し命令発行

リザベーションステーション(Reservation Station: RS)というのは、アウトオブオーダプロセッサにおける命令待ち合わせ機構の一つで、その命令が必要とするオペランドデータが、リザルトバスに流れてくるの監視している機構である。 リザルトバスに自命令の…

命令フェッチラインに基づく最適化

マイコンでは一般的なのかもしれないが、プログラムの最適化の1つの方法として命令フェッチラインに基づく最適化というものがある。 これは早い話が、ループの境界がなるべく命令フェッチの範囲を超えないようにし、フェッチ回数を減らすというものだ。 例…

自作RISC-VのSystemVerilog化と命令発行方式の変更

ちまちまRISC-Vの自作プロセッサを改造している。まずは拡張性の向上のためにRISC-Vプロセッサの実装をSystemVerilogに置き換えている。 SystemVerilogの詳細についてはここでは述べないが、いくつか便利な記述があるので紹介。 packed struct 制御信号線周…

レアジョブを初めて200回到達した

英会話講座としてレアジョブを継続している。 レアジョブはSkypeを使った英会話教室だ。 講師はほとんどがフィリピン人だが、非常に格安、時間がどこでも選べるというのが利点だ。 www.rarejob.com 1年半前くらいから始めたのだが、1日30分のレッスンが200回…

Zephyr-RISCVはFreedom E310プラットフォーム(Arty FPGA)をサポートしている

前回少し紹介したZephyr-OSは、実行プラットフォームとしてQEMUだけでなく、Arty FPGA上で動作するFreedom E310もサポートしている。 ただし、OpenOCDによる接続が必要なため、ArtyFPGAに少し配線を追加しないといけないようだ。 手持ちにデバッグ用のケーブ…

ParallelaのオープンソースハードウェアIP

Parallela本体はさすがに無いけれども、Parallelaの周辺回路や制御するための周辺回路はGithubにいくつか公開されている。 github.com 巨大な回路は、使い道がないかもだけれども、FIFOとかデュアルポートメモリインタフェースとか、地味に便利かもね。 gith…

RISC-V on ZedBoard for Parallelaのビルド実験

試しに、RISC-V on Parallela ボードのRISC-Vデザインをビルドしてみた。 リポジトリは以下に存在している。 https://github.com/eliaskousk/parallella-riscv ここでは、Vivadoを用いて合成するので、LinuxマシンにVivadoがインストールされているのが前提…

RISC-V on Parallela Board

RISC-Vの実装としていろいろ調査している中で、Parallelaのホストボードとして利用されているZynq(またはZedBoard)上にRISC-Vを移植してアプリケーションを動作させるというプロジェクトを発見した。 Google Summer of Codeのプロジェクトの一つだったようだ…

RISC-Vプラットフォーム Freedom E300 ArtyFPGA ボードの実験

Freedom PlatformをFPGAボードへ書き込む。 ArtyFPGAを知り合いから借りてきたので、それにダウンロードした。 https://japan.xilinx.com/products/boards-and-kits/arty.html Arty FPGAにRISC-Vをダウンロードして動作させるための手順は、SiFiveにある、 “…

RISC-V ISS Spikeのチュートリアル資料

RISC-VのMLにSpikeのチュートリアル資料が投稿されていた。 groups.google.com SpikeのOverviewと、それを実現するためのソースコードの一覧となっている資料だ。 Spikeのトップレベル構成 メモリシステム キャッシュ構成 TLB & MMU プロセッサのOverview Ha…

RISC-V SiFive Freedomプラットフォームのビルド手順

前回、SiFiveのFreedomプラットフォームについてまとめたが、今回は実際にそのプロジェクトを触ってみる。 Freedomプラットフォームはgithubに公開されており、デバイスさえあれば誰でもビルドすることができるようになっている。 github.com ビルド対象のFP…

RISC-Vプラットフォーム SiFive Freedomについて

RISC-VのASICチップおよび評価ボードとして、SiFiveのHiFive1ボードがすでに世界中で販売されているが、このHiFive1の持つFreedomプラットフォームについてまとめておこう。 そもそもHiFive1のRISC-Vプラットフォームはどのようになっているのだろう。 SiFiv…

RISC-V用LinuxのビルドとSpikeによるシミュレーション(vmlinuxとroot.binの解析)

前回、SpikeシミュレータでRISC-V版Linuxをビルドしようとしたのだが、なぜかエラーが発生して起動しなかった。 どこに原因があるのかさっぱりわからないため、まずはルートファイルシステムとvmlinuxを切り替えて起動実験をしてみる。 lowRISCには、すでに…

RISC-V用LinuxのビルドとSpikeによるシミュレーション(Spikeによるシミュレーション→失敗)

msyksphinz.hatenablog.com 前回、Linuxビルド用のRISC-V GCCの構築が終わったので、次にLinux本体のビルドとシミュレータによる実行をしてみたい。 github.com RISC-V用Linuxの構築 まずはRISC-V用Linuxの作業リポジトリと、Linux本体を取得してくる。 curl…

RISC-V Linuxビルド用GCCの構築

RISC-V用のLinuxは、以下のリポジトリで公開されている。 github.com Compile and install RISC-V cross-compiler · lowRISC RISC-V用のLinuxには、riscv64-unknown-linux-gnu-gcc が必要だ。このビルドには、riscv-gnu-toolchainフォルダでのリビルドが必要…

Zephyr-OSがRISC-Vをサポート(QEMUでの試行)

少し前に、RISC-VのMLにてZephyr-OSがRISC-Vをサポートしたというアナウンスがあった。 Zephyr-OSは、Linux Foundationが発表した、モバイル用途向けの小規模のオペレーティングシステムだ。 Home | Zephyr Project Zephyr (operating system) - Wikipedia W…

HiFive1のパフォーマンスカウンタについて

前回Coremarkの測定を行ったし、その前は各命令のレイテンシを測定した。 このとき、実際にプログラムのサイクル数を測定しているわけだが、これはどのようにして実現しているのだろう。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com まず各命令の…

HiFive1でベンチマークプログラム測定(Coremarkを動作させる)

HiFive1でベンチマークプログラムや一般的なプログラムを動作させるのはそこまで難しい話ではなくて、SiFiveもプログラム開発用のツールセットを公開している。 freedom-e-sdkというリポジトリは、RISC-V向けプログラムのコンパイル環境を提供しており、Core…

HiFive1のCPUコア性能を測定(ベンチマークプログラム作成)

前回、HiFive1のプログラムをC/C++で開発するための環境を構築した。 次に、HiFive1のCPUコアの基本性能を測定してみよう。まずは、通常のプログラムを動作させる前に、同一の命令を何度も実行して、命令のスループットおよびレイテンシを測定してみる。 msy…

HiFive1向けのC/C++言語プログラムを開発するフロー構築

HiFive1は基本的にArduino経由でプログラムを開発するようになっているが、実際に動作しているのはriscv32-gccであり、隣家スクリプトとコンパイルオプションさえ揃えれば普通にC/C++でプログラムを開発できる。 今回、そのプログラム開発フローを構築したの…

コーヒーメーカー「バリスタアイ」購入

コーヒーメーカーとして、初代バリスタを使用していたのだがしばらく前に壊れてしまった。 買ってから結構時間がたっているし、保証も切れているので、せっかくなので新しいものを購入することにした。 同じメーカーの新機種のバリスタアイだ。本日ヨドバシ…

Windows版RISC-V GCCのビルド方法(1. msys2環境でRISC-V 32bit向けGCCをビルドする)

RISC-VのMLで話題に挙がっていた、Windows版RISC-V GCCのコンパイル方法をやってみた。 まだイマイチ洗練されていないようだが、バイナリ自体は作れるようだ。 環境にはmsys2を利用する。 RISC-V GCC for Windowsのビルド方法 必要なもの Windows (筆者の確…

HiFive1のプログラムコンパイルをArduinoIDEを使わずに制御したい(2. OpenOCDを使ったHiFiveへのプログラム書き込み)

前回の続き、今回は、OpenOCDを使って、コンパイルしたバイナリファイルをHiFive1に書き込み、実行する。 msyksphinz.hatenablog.com OpenOCDを使った書き込みシーケンスを探す Arduinoのディレクトリを探して、OpenOCDを使ったバイナリファイルへのアップロ…

HiFive1のプログラムコンパイルをArduinoIDEを使わずに制御したい(1. C/C++コードのコンパイル)

HiFive1を使ったプログラムは、まだ時間が無くてLチカとUARTのテストくらいしか出来ていないが、早くもArduinoIDEに不満が出てきた。 可能ならばEmacsでプログラムを書きたいし、Makeを使ってコンパイルやダウンロードができるようになるとうれしい。 そこで…

HiFive1におけるシリアル通信

HiFive1を使って、PCとのシリアル通信を実行する。 やり方は非常に簡単だ。プログラムはArduinoのサンプルからコピーしてきた。 void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.print("RISC-V HiFive1 Start\r\n"); …

VerilogのSpecifyブロックまとめ

ちょっとVerilogのSpecify記述をいろいろチェックする機会があったので、ここでまとめておく。 VerilogのSpecifyブロック内では、主にセットアップ時間、ホールド時間などを記述するが、それ以外にもさまざまな制約条件などを指定することが出来る。 specify…

HiFive1のでのArduinoプログラム コンパイル結果の解析

Arduinoのプログラムをコンパイルするとき、最初にターゲットボードを指定して、対応するGCCなどをインストールした。 GCCを利用しているはずなので、コンパイル結果やオブジェクトなどがどこかに生成されているはずだ。 調査してみると、以下のArduino IDE…

HiFive1 の環境セットアップとサンプル実行

HiFive1の実行環境を早速構築しよう。まずはすでにHiFiveを使っている方がいらっしゃるので、それを参考に。 qiita.com HiFive1の実行のためには、Arduino IDEをインストールする必要がある。僕はWindowsユーザなのでWindowsにインストールしようと思ったが…

RISC-VのArduino(HiFive)が我が家にやってきたよ

マルツオンラインが、RISC-VのArduinoボード、HiFive1を取り扱い始めた。 www.marutsu.co.jp これまで海外で購入可能だったが、海外サイトでわざわざ購入するのが億劫で買っていなかったのだが、マルツだと安心。 購入して即日で届く速さだった。 まだ開封し…

OpenSPARC T1の調査(7. S1coreでDhrystoneを動作させたい)

S1coreとOpenSPARC T1純正環境との差分は引き続き調査中だ。 とりあえず、S1coreを使いこなせるようになりたい。 まずはベンチマークプログラムを動作させられるようにしたい。Coremarkが動けば面白いのだが、まずはDhrystoneかな。 Dhrystoneは、CPUの基本…

OpenSPARC T1の調査(7. OpenSPARC T1の外部ポート制約)

S1coreの動作方法が分かってきたのだが、S1coreとOpenSPARC T1のコアは分離されているが、SPARCコアの部分は共通のものを利用しているので、使いようがあるはずだ。 S1coreの起動方法をトレースすると、OpenSPARC T1も動作させることが出来るに違いないと思…

OpenSPARC T1の調査(6. S1coreのSPC⇔WishBoneの構成)

OpenSPARC T1のインタフェースは、どうやらSPARC固有のパケットを使って通信しているらしい。 このパケットを分解して、S1Coreに搭載されているWishBoneに載せ変えているのがSPC2WBMユニットだ。 インタフェースは以下のようになっており、SPARCのパケットを…

OpenSPARC T1の調査(5. S1coreをModelSimで動かす環境の構築)

OpenSPARC T1のラッパーであるS1Coreは、デフォルトではVcsもしくはIcarus Verilogで動作するようになっているが、これらで動作するのだったらModelsim Starter Editionでも動作するはずだ。 デバッグにあたり、やはりModelSimの方が簡単なので、Modelsimへ…

OpenSPARC T1の調査(5. S1coreの調査)

OpenSPARC T1のコア部分のみを切り出したものとして、S-RISC (Simply-RISC)というものをコメントで紹介してもらった。 どうやら、コアの部分をOpenSPARC-T1として利用し、それ以外の外側を独自に囲むことによってOpenSPARCを動作させるものらしい。 概要図を…

6th RISC-V Workshop の Registration および Call for Papers が始まりました

2017/05/8 - 2017/05/11にかけて、6th RISC-V Workshopが開催されるようだ。RegistrationおよびCall for Papersが開始されている。 riscv.org 場所は上海の上海交通大学、情報系の学会に行くと、必ずと言っていいほど聞いたことのある中国では有名な大学だ。…

Source Han Code JP(源ノ角ゴシック)をEmacs on Ubuntuに導入する

Ubuntu16.04 (xenial) で作業をしているのだが、Virtual Boxを立ち上げてPuttyからXを飛ばしてEmacsを立ち上げたりすると、フォントが異常に読みにくいことがある。 これは非常に嫌なので僕がWindowsの普段使いしているSource Han Code JP(源ノ角ゴシック)を…

コンピュータアーキテクチャの神、John.L.Hennessy先生、相磯秀夫先生の記念講演を拝聴して

www.ht.sfc.keio.ac.jp ヘネシー先生だ!(iPhoneで撮ったので画質が非常にイマイチである) 慶應義塾大学にて、大川賞という情報通信技術に関する顕著な成果、また研究教育について顕著な成果を上げた方に対する表彰の、記念講演が行われた。 今年の受賞者は…

CMake + Modelsim Intel FPGA Starter EditionでGUI上でのリコンパイル手法

CMakeを使ってModelsim環境を構築したが、GUIでデバッグしているときの問題があった。 これは、Verilogを修正した場合にGUIを立ち上げている状態でどのようにしてリコンパイルするかということだった。 シミュレーションのやり直し(Verilogの変更無く再コン…

CMake + Modelsim Intel FPGA Starter Editionの環境構築

せっかくModelsim Intel FPGA Starter Editionを使い始めたので、CMakeでビルドする環境を構築しよう。 CMakeでVerilogのシミュレーション環境を構築するためにはCMakeのadd_custom_targetを使う。 C++のようにビルド環境を自動的に作れないので、自分で作る…