Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Intel系FPGA上へのRISC-Vプロセッサの実装
Search
Mutsuha Asada
January 14, 2025
Technology
0
150
Intel系FPGA上へのRISC-Vプロセッサの実装
2024年度 情報特別演習II 最終発表
Mutsuha Asada
January 14, 2025
Tweet
Share
More Decks by Mutsuha Asada
See All by Mutsuha Asada
🔨 小さなビルドシステムを作る
momeemt
4
680
情報科学類で学べる専門科目38選
momeemt
0
590
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
250
Wasmで拡張できる軽量マークアップ言語 Brack
momeemt
0
110
❄️ NixOS/nixpkgsにSATySFiサポートを実装する
momeemt
2
250
情報科学若手の会 2024 LT「WebAssemblyで拡張可能な軽量マークアップ言語の開発」
momeemt
0
47
Nixでつくるdotfiles
momeemt
1
63
情報特別演習I 最終発表「理工学の紙書籍を用いた学習の効率を向上させるインタフェース」
momeemt
0
41
SATySFi Conf 2023「SATySFiを使って学類新歓冊子を発行した」
momeemt
0
27
Other Decks in Technology
See All in Technology
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
270
5分でカオスエンジニアリングを分かった気になろう
pandayumi
0
250
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
180
研究開発と製品開発、両利きのロボティクス
youtalk
1
530
「Linux」という言葉が指すもの
sat
PRO
4
140
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
9
73k
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
150
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
160
ブロックテーマ時代における、テーマの CSS について考える Toro_Unit / 2025.09.13 @ Shinshu WordPress Meetup
torounit
0
130
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
120
スマートファクトリーの第一歩 〜AWSマネージドサービスで 実現する予知保全と生成AI活用まで
ganota
2
220
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
290
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
GitHub's CSS Performance
jonrohan
1032
460k
Embracing the Ebb and Flow
colly
87
4.8k
A better future with KSS
kneath
239
17k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Unsuck your backbone
ammeep
671
58k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
112
20k
Typedesign – Prime Four
hannesfritz
42
2.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Transcript
1 2024年度 情報特別演習II 最終発表 Intel系FPGA上への RISC-Vプロセッサの実装 浅田睦葉 情報科学類3年 アドバイザ教員: 冨安洋史先生
・Intel系のFPGAにRVI32命令を実装した ・Altera Cyclone IV EP4CE115F29C7N ・FPGAとは ・ユーザーが自由にハードウェア回路を構成できる ・ハードウェア記述言語によって回路を記述 ・RVI32とは ・オープンソースのISAであるRISC-Vの
32bit整数命令セット ・CPUとして動作させるための最小限の命令が含まれている ・加算(add)、メモリ読み出し(lw)、メモリ書き込み(sw)など ・FENCEやCSRなど特殊な命令を除いて実装を行った 2 概要 評価用ボードのDE2-115
命令を処理する主な流れ ・CPUは主に5つの仕事を行う 32bitの命令列を読み出す 1. レジスタアドレスや即値を切り出す 2. メモリアドレスやレジスタ値を計算 3. メモリに値を読み書き 4.
レジスタに値を書き戻す 5. 3
4 パイプライン ・5つのステージを繋ぐとCPUとしては最低限 動作する ・メモリアクセスも含めると 7〜8クロックに1回しか命令を処理できない ・現代的なCPUのCPIは1~2前後 ・1を切ることも ・パイプラインを導入する ・各ステージを毎クロック並列に動かすことで
CPIを平均1.6に改善できる
・主な仕事 ・メモリから命令を読み出す ・プログラムカウンタを管理する ・プログラムカウンタ ・実行中の命令のアドレスを管理するレジスタ ・基本的には4ずつ増える ・ジャンプ命令などにより書き換わることもある 5 命令フェッチ
6 命令デコード ・主な仕事 ・命令をデコードする ・仕様書に従って命令列を分類する ・例えばADD命令をデコードする 00000001010101010000111110110011 ・① 0110011で、R-typeの命令とわかる ・②
000で、ADD命令とわかる ・③ 1つ目の入力レジスタのアドレスは01010 ・④ 2つ目の入力レジスタのアドレスは10101 ・⑤ 出力レジスタのアドレスは11111
7 レジスタファイル ・多くの場合でメモリアクセスは低速 ・通常の計算ではCPU内部のレジスタを用いる ・レジスタアドレスが5bitなので、32個のレジスタが必要 ・0番目のレジスタはゼロレジスタなので書き込みを無効に ・先ほどのADD命令の場合 ・01010 → 9番目のレジスタ
・10101 → 20番目のレジスタ ・11111 → 31番目のレジスタ
・レジスタから取り出したデータを使って実行する ・ADDの場合 ・2つの値を足し合わせる ・基本的に仕様に従って実装するだけ ・いくつか命令の実装を紹介 ・LW(ロード命令) ・JAL(ジャンプ命令) ・AUIPC(PC相対アドレス計算命令) 8 命令の実行
・ロード命令はメモリからデータを読み出す命令 ・1つ目の入力レジスタと即値を足し合わせたアドレス ・LB/LG/LW/LBU/LHUは読み込むサイズと符号の違いのみ 実行ステージでは単にメモリアドレスを計算するだけ 9 命令の実行(LW)
・ジャンプ命令は、プログラムカウンタの値を変更する命令 ・JAL命令は現在のPCに即値を足し合わせたものを新たなPCに ・レジスタに次の命令アドレスを書き込む ・branch_dest_addressに新しい値を書き込むと フェッチステージに入力されて プログラムカウンタの値が書き換わる 10 命令の実行(JAL)
・PC相対アドレス計算命令は、現在のプログラムカウンタの値に 即値を足し合わせた値をレジスタに格納する命令 ・位置独立コード(PIC)を実現するために使える ・各プロセスが自身の実行環境に合わせたコピーを持つ形で 共有ライブラリを実装できる 11 命令の実行(AUIPC)
・主な仕事 ・メモリから値を読み書きする ・アクセス方法はボードにより異なる ・今回はaltsyncramを使った ・内蔵メモリはサイズが非常に小さい ・データ領域を必要とする場合には難しい ・SRAMやSDRAMが付属していることも 12 メモリアクセス
・メモリの読み出し or 書き込み待ち 15 ストール
・レジスタの書き戻しを待たないと計算結果が破綻する場合 16 ストール
17 フォワーディング ・レジスタの書き戻し待ちに関しては フォワーディングで解決できる ・実行ステージの結果をデコードや実行など 前段のステージに送れば良い
19 テストベンチ ・動作を確認するためにテストベンチを実装した ・2000行以上 ・コアの実装より多い ・FPGA開発でもシミュレータと テストベンチを使えばCIで動作を ある程度保証しながら開発できる
20 まとめ ・Intel製のFPGAにRV32Iを (ほとんど) 実装した ・命令フェッチ→デコード→実行→メモリアクセス→書き戻し ・パイプラインを実装すれば愚直に実行するよりCPIを改善できる ・メモリアクセス待ち→CPUをストール ・レジスタの書き戻し→フォワーディングを実装すればストール させる必要がなくなる
・テストベンチの実装によりある程度CPUの挙動を保証できる ・今後は割り込みやMMUを実装することで自作OSやLinuxを動作 させることを目標にして進めていく