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

FPGA開発日記

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

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++のようにビルド環境を自動的に作れないので、自分で作る…

OpenSPARC T1の調査(オープンソースなCPUの調査)

OpenSPARC T1を動かす話の続き。どうにかしてPLI部のコードをリコンパイルし、ModelSimから読めるように変更してみたが、どうしてもVeraの吐き出すイベントファイルが必要なようで、Vera無しでは動作させることが難しい気がしてきた。 OpenSPARC T2もT1もVer…

OpenSPARC T1の調査(3. PLI部のコンパイル→失敗)

OpenSPARC T1のPLI部を動かそうとしているのだが、ModelSim PLIがうまく動作せずに悩んでいる。土日にひたすら試行してたのだが、結局うまく行かなかった。 おそらく、自分でフルスクラッチで作るのだったら簡単に作れるのだろうが、今回はそうも行かず、Ope…

OpenSPARC T1の調査(2. ModelSimによるシミュレーション→フェッチが出ず)

前回に引き続いて、OpenSPARC T1のシミュレーションを走らせていたが、それっぽい動作をしたものの、イマイチ有益なログを出さずにシミュレーションが終了してしまった。 $ tree . . ├── bypass_win:model_core1:core1_mini:0 │ ├── diag.s │ ├── efuse.img …

OpenSPARC T1の調査(1. シミュレーション環境の構築)

どうもOpenSPARC T2の調査が芳しくないので、一つ前に戻って、OpenSPARC T1について調査してみよう。 まず、simsコマンドについて調査していたのだが、VCS, NC-Verilog以外のシミュレータを使うための手段として、以下のサイトが参考になった。 abishekramda…

OpenSPARC T2の調査(2)

OpenSPARCの調査を引き続き行っている。前回のファイルリストを加工するために、OpenSPARCのシミュレーションスクリプトsimsをどうにかこうにか動かしながら、cmp1(SPARCコア1つ)を動作させるためのファイルリストを作った。 ちなみに、simsはOpenSPARCのシ…

OpenSPARC T2の調査(1)

RISC-Vプロセッサの実装もちょっと手詰まりになってきたので、少し気分転換に、他のプロセッサはどのように実装されているんだろう、というのが気になった。 フリーで入手できるそこそこ高性能なプロセッサとしては、OpenSPARCか、RISC-VのBOOMが存在するが…

TOEICの結果と感想2017

1/29に受験したTOEIC試験の結果が公開された。結果としては、前回受験よりも10点ダウン。 下がってしまったのはしょうがないけれども、思ったより下がり幅が小さかったので一安心。 TOEICの新形式になり始めての受験だったが、問題形式が変更になったことと…

マラソン用イヤホン購入

今までマラソンに出るときは、ソニーのBluetoothを使っていたのだけれど、レシーバが大きくてちょっと不便だった。 www.sonymobile.co.jp そこでマラソン用のイヤホンを購入した。Amazonでたくさん調べて、ヨドバシカメラをぐるぐる回って、結局ヨドバシカメ…

RISC-Vテストパタン VMモードの解析

前回に引き続き、Sv32で動作させるときのテストパタンの動作について解析している。 RISC-Vのテストパタンは、基本的なテストを行うxxx.Sのアセンブラリストと、それを囲むプロローグとエピローグから構成されている。 中心となる検証用アセンブラリストは、…

RISC-V ISS Sv32, Sv39の実装

いまいち実装が進んでいないが、Sv32とSv39のISSへの実装しなおしが完了した。 Sv32とSv39については、前回の記事を参考にして欲しい。 msyksphinz.hatenablog.com github.com 実装方法としては、まずはPTEを参照しながら上位の物理アドレスを生成していき、…

特権命令の例外権限を委譲するためのRISC-Vシステムレジスタmedeleg, mideleg

テストパタンのチェックをしていて、スーパバイザモードで例外が発生してもスーパバイザモードに留まっているパタンがおり、何が起きているのだろうと調べていると、以下のようなレジスタの仕様を発見した。 目的としては例外が発生した場合のコンテキストス…

Bitnamiで構築したRedmineをBitbucketと同期させる

前回の続きだが、前回はRedmineとGithubを同期させた。 msyksphinz.hatenablog.com 同じ仕組みで、RedmineとBitbucketを連携させることが出来る。同じように、bitbucketからdaemonアカウントを使ってgitリポジトリをダウンロードし、Redmineにリポジトリを関…

Bitnamiで設定したRedmineをgithubと同期させる

個人の開発を記録するためにRedmineを導入したが、githubとの連携をまだ実現していなかった。 githubとの連携を実現するための情報はたくさんあるが、bitnamiで構築したRedmineとgithubはどのように連携すればよいのだろうか?調査してみた。 実現したいこと…

RISC-Vのメモリ仮想化の方式について (v1.9.1編)

自作ISSのテストパタンが通らなくなってきた! 特に仮想メモリを使っているパタンが通らなくなった。大昔に自作ISSに仮想アドレスから物理アドレスの変換を実装していたのだが、どうやら仕様がv.1.9.1で変わっているらしい。 もう一度チェックしてみよう。 …

組み込みシステムにおけるアドレスの考え方 (VMA, LMAについて)

CPU

ちょっと話が逸れるが、今回は組み込みシステムにおけるVMAとLMAの考え方についてまとめておく。 例えばリンカスクリプトなどを組み上げるとき、「CPUから見たアドレス」と「外部からデータをRAMに配置するときにみる領域」が違うことがある。 例えば、こん…

Intelの2.5D FPGA @ ISSCC

Intelがチップ間2.5D通信を採用したFPGAをISSCCで発表した。 www.eetimes.com まだ詳細は出て来ていないが、基本技術はEMIB(Embedded Multi-die Interconnect Bridge)というものらしい。 【後藤弘茂のWeekly海外ニュース】超広帯域メモリの採用を可能にするI…

RISC-V. Open Hardware for Your Open Source Software @ FOSDEM17

FOSDEM17 というイベントでRISC-Vについての講演があるらしい。 FOSDEMというイベントはこれまで知らなかったのだが、"FOSDEM is a free event for software developers to meet, share ideas and collaborate"ということで、 主にオープンソースツールにつ…

RISC-VのSpike-ISSを使ったFreeRTOSの起動ルーティンの解析(3)

前回の続きで、ROMにはさらにいくつかの情報を挿入しなければならない。0x1020から挿入しなければならないのが、以下のRISC-Vのコンフィグレーションに関する情報だ。 前回の記事で紹介した以下のものになる。 platform { vendor ucb; arch spike; }; rtc { …

RISC-VのSpike-ISSを使ったFreeRTOSの起動ルーティン解析(2)

前回の続き。Spike-ISSには通常のDRAM以外に別のメモリが貼り付けられていることが分かった。 今回焦点を当てたいのは0x1000に貼り付けられているROMらしきものだ。sim.ccには、以下のような記述でROMが生成されていた。 uint32_t reset_vec[8] = { 0x297 + …

RISC-VのSpike-ISSを使ったFreeRTOSの起動解析

前回の続きで、どうしても自作ISSとSpike-ISSの動作結果が一致しないところがあり、何が悪いんだろうと調べていた。 まず、spikeにはRISCV_ENABLE_COMMITLOGというログ出力用のフォーマットがある事は紹介した。 これだけでは情報としては不十分で、例えば実…

RISC-V のISS "Spike"のログフォーマットを拡張する方法

RISC-VにはUC-Berkeleyの開発した命令セットシミュレータであるSpikeが存在する。 github.com このSpikeというシミュレータ、高速でLinuxもブートできる優れものなのだが、欠点はログがほとんど見れず、プログラムが誤作動を起こしても何が起きているのかさ…

FreeRTOSをRISC-V Spike ISSで動作させるためのオプション

しばらくFreeRTOSをRISC-Vの自作ISSや、Spikeシミュレータで動作させることが出来ず悩んでいたのだが、いつの間にかSpike-ISSに以下のオプションが追加されているのを発見した。 $ spike --help spike: unrecognized option --help usage: spike [host optio…

資格試験(TOEIC)の勉強をRedmineで管理してみる試行

TOEIC受けてきた。毎年1度は受験するようにしているのだが、今回は比較的大きな会場だったのだが、音響もしっかりしている分、聞き取りにくいということは無かった。 去年の春からTOEICは新形式になっており、一応勉強はしていたのだがやはり時間配分や問題…

「アジャイルサムライ」を(とりあえず)読了した

アジャイルサムライ−達人開発者への道−作者: Jonathan Rasmusson,西村直人,角谷信太郎,近藤修平,角掛拓未出版社/メーカー: オーム社発売日: 2011/07/16メディア: 単行本(ソフトカバー)購入: 42人 クリック: 1,991回この商品を含むブログ (255件) を見る ア…

RISC-VのJavascriptエミュレータはC言語から生成されている

前回の続き。RISC-Vエミュレータであるriscvemuのコンパイルオプションを調べていたのだが、やっと意味が分かってきた。 riscvemuのディレクトリにはjs/が入っており、RISC-VのJavascriptエミュレータが入っている。 最初はC言語からこのJavascript記述を呼…