FPGA開発日記

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

2017-07-01から1ヶ月間の記事一覧

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枚目のボードもちょっと大きめに配列を取ってコンパイル後、流したら不正終…

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

前の記事の続き。無事にThinkPad に HiFive1の環境を構築したのだが、やはりSPI経由でプログラムを書き込もうとすると書き込めない。 いろいろSiFiveのフォーラムを見ながら試行錯誤しているのだが、どうもまだ解決策が見つからない。これは最悪もう一枚HiFi…

(大昔の)ThinkPad にRISC-V実験環境を構築する

HiFive1のボードを実験するのに、これまではWindows上のVirtualBoxにUbuntuをインストールし、その上でデバイスと接続していたのだが、時々調子が悪くなる。 解析するのも面倒なので、大昔のノートPC(ThinkPad X301)を取り出してUbuntuをインストールし、HiF…

ヘネパタ第6版はRISC-Vで全面刷新?

Amazonで調べていたら、どうやら次のヘネパタが発売されるのを発見した。 Computer Architecture, Sixth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)作者: John L. Hennessy,David A. Patterson出…

VivadoでIPを生成する方法の調査(tclを使った生成方法)

Zynqを使ったカスタムデザインのIPが作りたくて、IPの生成方法をいろいろ調査しているのだが、どうもGUIを操作するものばかりでつまらない。 GUIの操作方法なんて一瞬で忘れてしまうので、tclとmakefileで一気に作れるような環境を用意しておきたい。 いろい…

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

HiFive1ボードはRISC-Vが動作する(おそらく世界で唯一商用の?)プロセッサボードである。このHiFive1ボードの仕様は以下のようになっている。 Microcontroller: SiFive Freedom E310 (FE310) SiFive E31 Coreplex 32bit RV32IMAC (整数演算のみ、乗除算ハー…

HiFive1ボードの自作プログラムのアップロード方法

HiFive1ボードはRISC-Vが動作する(おそらく世界で唯一商用の?)プロセッサボードである。 このボードを使っていくつか試行してみたいことがあるのだが、久しぶりに立ち上げたので少しリハビリの意味も兼ねて整理しておく。 プログラムの開発には、SiFiveが公…

RocketChipの足回りを理解する(4. RISC-V FrontEnd Server)

ところで、RISC-V Rocket-Chipをシミュレーションするとき、何気なくmakeを叩いて、 make CONFIG=DefaultConfig output/rv64ui-p-add.out とかして、勝手に実行されているけど、よく考えると具体的にどのようにして動作しているのか分からない。これを理解す…

RocketChipの足回りを理解する(3. BootROM)

RocketChipのリセットが解除されると、まずはBootROMへのフェッチが始まる。 BootROMは、TestDriver/TestHarness/ExampleRocketTop/bootromに格納されている。 まずはこの周辺の波形を見てみよう。最初にBootROMにアクセスするのは、0x00010040 がアクセスさ…

RocketChipの足回りを理解する(2. TileLinkについて)

2017/09/05 TileLink Specification Ver.1.7 Draftが公開されていたので、追記しています。 RISC-V実装のRocket-Chipでは、足回りのインタフェースとしてTileLinkというインタフェースを使っている。ところがこれ、どれだけ検索しても詳細が出てこない。Tile…

RocketChipの足回りを理解する(1. RocketChipのVerilogを読み解く)

RISC-VのUCB実装であるRocketChipはRISC-Vのプロセッサ実装の中で最も参考になるもので、例えばSoCに組み込むとなると真っ先に導入を考えるRISC-V IPの一つだ。 RocketChipはデフォルトで64ビット命令をサポートしており、シンプルなパイプラインながら性能…

CNTK 2.0 のチュートリアル試行: CNTK 103 Recognize hand written digits (OCR) with MNIST data

CNTK 2.0のチュートリアルを試行する。 今回はある程度翻訳という形で実施してみた。だいぶ誤訳はあるだろうが、ザックリ概要をつかむという形でやっていきたい。 CNTK 103のチュートリアルは4編で構成されている。MNISTの数値認識のチュートリアルについて…

CNTK 2.0 のチュートリアル試行: CNTK 102 Feed Forward network with NumPy

CNTK 2.0のチュートリアルを試行する。 今回はある程度翻訳という形で実施してみた。だいぶ誤訳はあるだろうが、ザックリ概要をつかむという形でやっていきたい。 github.com 以降の文章については、CNTK 2.0の翻訳を含んでいるが、誤訳を含んでいる可能性が…

自作RISC-Vプロセッサでriscv-testsテストパタンセットを流す

RISC-Vにはriscv-testsというテストパタンセットが用意されており、これらを流すことによりRISC-Vのアーキテクチャとして正しく実装されているかどうかをチェックすることができるようになっている。 github.com 自作RISC-Vプロセッサにおいても、このパタン…

ランニング用ボトルポーチ「YURENIKUI」購入

夏だ!夜になっても暑い!マラソンには最も適さない季節、夏の到来だ! 正直東京オリンピックなんて夏に開催してマラソンなんてできるとは思えないし、真夜中でも熱帯夜なら全然温度が下がらない。もう東京オリンピックのマラソンなんて東京マラソンで肩代わ…

フルスクラッチから作るニューラルネットワーク(10. 性能解析, ARM, RISC-V)

前回、誤差逆伝搬法をlibfixmathライブラリを使って固定小数点化した。しかし逆に固定小数点化により性能が低下してしまっている。 やはりライブラリによるオーバヘッドではないだろうかということで、性能解析を行うことにした。 Google PerfによるPerforma…

フルスクラッチから作るニューラルネットワーク (9. 精度変更、libfixmathを用いた固定小数点化)

誤差逆伝搬法を実装してMNISTの学習と認識プログラムをC言語でフルスクラッチで作る、その続き。 固定小数点化については、他社の作ったライブラリを使うほうが良い気がして来たので、調査をしていると以下のライブラリを見つけた。MITの作った固定小数点ラ…

フルスクラッチから作るニューラルネットワーク (9. 精度変更、固定小数点化検討)

誤差逆伝搬法を実装してMNISTの学習と認識プログラムをC言語でフルスクラッチで作る。 動作するコードは完成し、今度はこれを固定小数点化しなければならない。今回は固定小数点化の検討を行う。 double –> float で精度を確認する。 まず、これまでに実装し…

フルスクラッチから作るニューラルネットワーク (8. 性能解析)

誤差逆伝搬法を実装してMNISTの学習と認識プログラムをC言語でフルスクラッチで作る、動作するコードは完成したのだが、最終的にはこれらのコードをマイコンで実行させたいし、もっと軽くしなければならない。 また現状の問題点として、C言語で書いたプログ…

「GPUを支える技術」を購入

面白そうな本が出版されたので購入した。「GPUを支える技術」だ。 GPUを支える技術 ――超並列ハードウェアの快進撃[技術基礎] (WEB+DB PRESS plus)作者: Hisa Ando出版社/メーカー: 技術評論社発売日: 2017/06/30メディア: 単行本(ソフトカバー)この商品を…

RISC-V シミュレータツールチェイン rv8

こういうツールチェインが作りたいんだよなあ。見た目にも非常にきれいな、RISC-Vシミュレータツールセットだ。RISC-V命令セットからx86/64へのバイナリトランスレーション(JIT)もサポートしている。 RISC-Vのほしいツールチェイン群はすべて揃っているんじ…

フルスクラッチから作るニューラルネットワーク(7. MNIST誤差逆伝搬法の実装)

msyksphinz.hatenablog.com 誤差逆伝搬法をC言語で実装していたのだが、Pythonの結果とどうしても合わない部分がある。それどころが、学習を続けていくとどんどん正解率が下がっていったのでデバッグをしていた。 ニューラルネットワークの難しいところは、…