FPGA開発日記

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

2019-02-01から1ヶ月間の記事一覧

オリジナルLLVM Backendを追加しよう (24. グローバル変数の対応)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io 第6章はグローバル変数をサポート。 グローバル変数のサポートには4種類があって、それぞれどのような処…

Vivado-HLSを使って高位合成でCPUを作ってみる(7. Cosimulationで波形をダンプして解析する)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 s_axiliteとm_axiの違いで動作しなくなってしまい苦労していたが、色々調べていると、#pragmaでいろんなところにm_axiを入れていけば解決することが分かり、無事にデザインを合成することができた。 g…

Vivado-HLSを使って高位合成でCPUを作ってみる(6. m_axiとs_axiliteの謎)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 テストがこんなに遅いのはなんでだ?デザインに根本的な間違いがあるのではないかと思いいろいろ見直していたのだが、あれ、よく見るとCPUのバスがスレーブの設定になってるじゃないか。 directives.t…

オリジナルLLVM Backendを追加しよう (23. オブジェクトファイル形式の対応)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 jonathan2251.github.io Chapter-5を進めていこう。これまではアセンブラ形式のみを対応させていたが、今度はオブジェクトファイ…

「インターフェース」で連載しているRISC-V記事が最終回を迎えました

CQ出版さんの雑誌「インターフェース」で連載していた「オープンソースCPU「RISC-V」の研究」が今月号で最終回を迎えました。 13回にわたり長々と連載をしてきましたが、今回で一応一区切りということになります。 連載を開始したのはおおよそ1年前で、ほぼ1…

RustでRISC-V命令セットシミュレータを作ろう (1. 基本的なテストパタンを通す)

今年の目標の一つに、新しいプログラミング言語を覚える、というものを追加していた。ターゲットの言語としてはRustにした。 Rustは低レベルのプログラミングにも使えそうだし、C/C++系の普通のプログラミング言語しか触ったことのない私としては何かと面白…

Vivado-HLSを使って高位合成でCPUを作ってみる(5. リグレッションテスト環境の構築)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 一つのテストパタンが動作するようになったので、全てのテストパタンを動作させて実装の確認を行っていく。 追加していない命令はたくさんあるので、テストは完走はしないだろうが、一応チェックして…

Western Digitalが拡充するOff-Chip向けのTileLink仕様"OmniXtend"

https://content.riscv.org/wp-content/uploads/2018/12/13.10-Bandic-Golla-Vucinic-CPU-Project-in-Western-Digital-From-Embedded-Cores-for-Flash-Controllers-to-Vision-of-Datacenter-Processors-with-Open-Interf.pdf より抜粋 Western DigitalがTile…

オリジナルLLVM Backendを追加しよう (22. 論理・比較バリエーションの拡充)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 Chapter-4.2のあたりを進めている。論理演算命令と比較命令だ。 比較命令をテストしようとすると、MYRISCVXの実装では命令の生成…

Vivado-HLSを使って高位合成でCPUを作ってみる(4. RTL合成後のシミュレーションとサイクル測定)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 とりあえず基本的なパタンが動くようになったので、Co-Simulationの実施とサイクル測定を実施する。 Co-Simulationを実施すると、RTLシミュレーションでも無事に動作していることが確認できた。 では…

Western DigitalのRISC-VコアSweRV-EH1 (4. テストベンチのコンパイル環境)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが動かせるようになった。 久しぶりに見てみると、アセンブリをコンパイルしてシミュレーションに使用する環境がマージされている。 テストには hello_world.s hello_world2.s …

オリジナルLLVM Backendを追加しよう (21. 剰余演算の最適化と論理・比較命令の追加)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 資料としては Tutorial: Creating an LLVM Backend for the Cpu0 Architecture を使用している。やっとChapter-4だ。 DIV命令は…

オリジナルLLVM Backendを追加しよう (20. 算術演算命令の追加)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 資料としては Tutorial: Creating an LLVM Backend for the Cpu0 Architecture を使用している。やっとChapter-4だ。 今回からは…

Vivado-HLSを使って高位合成でCPUを作ってみる(3. CPUクラスへの実装まとめ上げとテストベンチ実行)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 これまでは、CPUのクラスは存…

Vivado-HLSを使って高位合成でCPUを作ってみる(2. 標準的な命令を実装する)

Vivado-HLSを使って簡単なRISC-V CPUを作ってみている。 まずは性能を度外視して動くものを作る。 次に、性能を向上させるための様々な試行を実施する。 まずは、標準的なテストパタンをPassさせるために命令を追加していこう。 一般的なCPUと同じで、まずは…

オリジナルLLVM Backendを追加しよう (19. 大きな値の生成)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 Cpu0チュートリアルの、ch3_largeframe.bcをうまくアセンブリ生成することができない。 大きな値を作成するために、MYRISCVXAnal…

Vivado-HLSを使って高位合成でCPUを作ってみる(1. メモリのRead/Writeのモデルを作成)

Vivado-HLSで高位合成からCPUを作ってみたい。 高位合成でCPUを作るというのはネタとしてはイマイチだけれども、高位合成がどういうものか、目標をもって試してみるには良い題材だと思うので試してみている。 前回はとりあえずメモリにアクセスしてデータを…

映画「7つの会議」を見てきました

nanakai-movie.jp 七つの会議 (集英社文庫)作者: 池井戸潤出版社/メーカー: 集英社発売日: 2016/02/19メディア: 文庫この商品を含むブログ (11件) を見る 映画「7つの会議」を見てきました。企業の隠蔽体質というか、ブラックな部分を暴く映画としては結構面…

オリジナルLLVM Backendを追加しよう (17. 命令フォーマット増強)

LLVMにはすでにRISC-Vのバックエンドサポートが追加されている。しかし、勉強のために独自のRISC-V実装をLLVMに追加している。 関数コールに対応するためには、EmitPrologueおよびEmitEpilogueを実装しなければならない。 このためには、ロードストア命令・…

Rustのサンプルプログラムをたくさん写経する

Rustにとても興味がある。 いつもソフトウェア環境はC++を使って構築しているので、Rustに移行すると何か良いことがあるのか? という訳で今年の目標はRustを覚えることに決めた。 Rustの言語使用自体は分かるような気がするのだが、それで現実的なアプリケ…

AXIスライサ・Skid Bufferの勉強

AXIは基本的にReady-Validのハンドシェークで動いているのだけれども、これをひたすら繋いでいくと、ValidとReadyがFFを経由せずにつながってしまい、タイミング的に問題となる。 msyksphinz.hatenablog.com これを改善するために、各種バスプロトコルにはス…

アウトオブオーダ実行の詳細を勉強する場合の資料には"Understanding the detailed Architecture of AMD's 64 bit Core"がとても良い

いろいろ訳あってCPUのアウトオブオーダ実行とか、マルチコアのキャッシュコヒーレンスの仕組みとかを勉強し直しているのだが、勉強するにあたり非常に良い資料がたくさんあるので紹介。 プロセッサアーキテクチャについて学ぶのには、もちろん教科書として…

マルチコアにおけるキャッシュコヒーレンシ方式の簡単なまとめ (2. ディレクトリベースのキャッシュコヒーレンシ)

過去の日記では、キャッシュスヌープ方式のキャッシュコヒーレンシ制御の方法をざっくりと見たが、今度はもう一つのディレクトリベースのキャッシュコヒーレンシ制御についてみていく。 キャッシュスヌープ方式の記事はこちら。 msyksphinz.hatenablog.com …

Western DigitalのRISC-VコアSweRV-EH1 (3. オリジナルプログラムを動かす)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが動かせるようになった。 構造が分かってきたので、今度は自分のプログラムを動かしてみたい。 github.com マニュアルのメモリマップを見ても正しいようには思えないのだが、と…

Sipeed MAIX : RISC-V 64 AI Moduleが届いた

随分前にIndieGogoで募集していた、RISC-V ASICチップ+AIモジュールキット、Sipeed MAIX が届いた。 モードと外部ディスプレイ、カメラなどの基板がセットだ。 www.indiegogo.com とりあえずまだ時間がないのでまだ触れない... あと、ドキュメントが余りな…

Vivado-HLSを使って高位合成でCPUを作ってみる(1. メモリのRead/Writeのモデルを作成)

Vivado-HLSの勉強をしてみたいのだけれども、何か題材をもってデザインを作ってみる方が良いと思う。 そこで、簡単なモデルでも良いのでCPUを作ってみることにした。 最終的にはRISC-Vを実行させてみたいのだけれども、まずは簡単なモデルから動かすというこ…

Western DigitalのRISC-VコアSweRV-EH1 (2. テストベンチを動かす)

Western DigitalからオリジナルのRISC-VコアSweRVがリリースされ、テストベンチが存在しないのでしばらく放置していたのだが、リビジョンが上がってテストベンチが公開された。 https://github.com/westerndigitalcorporation/swerv_eh1 しかし、ソースコー…

Vivado HLSをWindows Subsystem on Linuxで動作させるための手順

Vivado HLSについて再入門しようと思っている。 最近は環境をVirtual BoxからWindows Subsystem on Linux(WSL)に変更したので、その環境下でVivado HLSが動くようにしておきたい。 私が使うのは、基本的にGUIは立ち上げずにスクリプトだけで処理を行いたい。…