Skip to main content More Related Content
PDF
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja) PDF
PDF
PDF
Technical report for IPv6 Routing w/ bgp4+ (part2) PDF
Apacheの展望とmod_perlの超絶技巧 #yapcasia PPT
How to debug a perl script using gdb PDF
Ansibleを使ってローカル開発環境を作ろう ( #PyLadiesTokyo Meetup ) PDF
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6 Viewers also liked
PDF
PDF
PPT
PPTX
Maker Faire 2016 - Microbit & Nano Satellite PDF
VIOPS WORKSHOP 10 クラウドの次に起こるコト PPTX
PPTX
PPTX
PDF
PDF
PDF
PDF
PDF
PDF
PDF
[Azure Council Experts (ACE) 第20回定例会] Microsoft Azureアップデート情報 (2016/10/14-201... PDF
深層学習フレームワークChainerの紹介とFPGAへの期待 PPTX
PDF
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法 PDF
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9) PPTX
Similar to 第3回ローレイヤー勉強会 : FPGAでコンピュータを作ってみた
PDF
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば PDF
PDF
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会 PDF
産学間連携推進室(AC部屋) 2012 成果報告会 PDF
PDF
PDF
PDF
PDF
PDF
PDF
FPGAアクセラレータの作り方 (IBM POWER+CAPI編) PPTX
Androidとfpgaを高速fifo通信させちゃう PPT
コンピュータの構成と設計 第3版 第2章 勉強会資料 PDF
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係 PDF
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料) PPTX
PDF
FPGAをロボット(ROS)で「やわらかく」使うには PDF
PDF
Open design computer project PDF
Open design computer project(boost) 第3回ローレイヤー勉強会 : FPGAでコンピュータを作ってみた
- 1.
- 2.
伊藤 剛浩 @cpu_labs
筑波大学情報学群 情報科学類
システム情報工学研究科 産学間連携推進室
Open Design Computer Project : ハードウェア担当
2011年度IPA認定スーパークリエータ
Verilog HDL SVA 回路設計 基板アートワーク等
- 3.
川田 裕貴 @hktechno
筑波大学情報学群 情報科学類
システム情報工学研究科 産学間連携推進室
Open Design Computer Project : ソフトウェア担当
2011年度IPA認定スーパークリエータ
gcc, Binutils の MIST32 向け移植
- 4.
- 5.
Open Design Computer
•Open Processor Architecture
– MIST32
• Open Source Processor
– MIST1032ISA
– MIST1032SA
• Open Development Environment
– Binutils
– gcc
- 6.
- 7.
- 8.
- 9.
HDL : VerilogHDL
module addr(
input [31:0] a,
input [31:0] b,
iniput ci,
output [31:0] x,
output co);
assign {co, x} = a + b + ci;
endmodule
- 10.
Synthesize / Place&Rout
•Synthesize : 論理合成
– HDLから回路図レベルまで落とす
– 要らないロジックを消す
– 早くするためにロジックを追加
• Place&Rout : 配置配線
– FPGA上のどこに配置するか
– 位置によってfmaxが変わる
- 11.
- 12.
- 13.
- 14.
Out of OrderExecution
• 実行ハードウェアを複数持つことが前提
• メモリからはプログラム順に入る(In Order)
• 実行の順序は動的に変化(Out Of Order)
– WAW/WARを排除
– 必要なデータさえ揃えば実行
• 実行の完了Commit処理にて(In Order)
– 割り込み対応のため
- 15.
- 16.
- 17.
Out Of Order実行
•今回はTomasuloのアルゴリズム
– Rename / Reservation Station / Re Order Buffer
– Frontend / Backendで回路を分離 -> 結構重要!
- 18.
Register Renaming
• レジスタファイルの拡張
•ARF(LRF) : Architecture Register File
– Architectureで定義されているレジスタセット
• PRF : Physical Register File
– 物理的にプロセッサが持つレジスタファイル
• Renaming Table
– ARFとPRFの対応付け
- 19.
Register Renaming実装
ARF IdPRF Id
R0 p-R12
R1 p-R3
Rn p-Rn
Instruction
Source
Next Stage
SourceDestination Destination
• Source Operand
– Renaming Tableを元にARF-PRF変換
• Destination Operand
– Renaming TableのARFに対する新たなPRFの割り当て
- 20.
Frontend -> ReservationStation
• Out of Order実行されたデータを新しく入って
きた命令に適用
– 命令はデータを必要としていない
• そのままRSに格納
– 命令はデータを必要としている
• CDBから必要とするデータが流れてきた
• PRFに必要なデータが格納されている
- 21.
Reservation Station ->Ex
Rs ID 演算タイプ Source1
Valid
Source2
Valid
Source1 Source2
0 2項演算 1 0 10 Invalid-r0
1 単項演算 1 1 5 5
n 2項演算 0 0 Invalid-r0 Invalid-r2
[実行不可] : Register0を待ち受けている
[実行可能] : 全てのデータは揃っている
[実行不可] : Register0, 1を待ち受けている
• 命令の実行に必要なデータが揃うまで待つ
– 常にExecuteのCDBを監視
• 必要データが揃ったら実行ステージへ送る
- 22.
Reservation Station :実装
Rs ID Source1
Valid
Source2
Valid
Source1 Source2
0 1 0 10 Invalid-r0
1 1 1 5 10
n 0 0 Invalid-r0 Invalid-r2
Priority
Encoder
Register
File
Data
p-R0 20
p-R1 0
p-Rn 10
CDB
From
Backend
- 23.
Re Order Buffer
•つじつま合わせ
– Robがないと割り込み対応が面倒
• 命令が読まれた順を保持(R-Pointer)
• 実行し終わった命令にフラグ付け(実行完了
フラグ)
• 以下すべての命令が実行し終わったところを
指すポインタ(C-Pointer)
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
00000470 <genrand_int31>:
470: 1100 03 c0 push rbase
474: 11 00 03 e0 push rret
478: 18 00 03 c0 srspr rbase
47c: 0e e0 03 a0 lih rtmp,0x0
480: 0d 40 47 a0 wl16 rtmp,0x220
484: 20 70 03 e2 movepc rret,8
488: 14 40 03 a0 b rtmp,#al
48c: 08 30 00 01 shr r0,0x1
490: 12 00 03 e0 pop rret
494: 12 00 03 c0 pop rbase
498: 14 40 03 e0 b rret,#al
- 36.
00000470 <genrand_int31>:
470: 1100 03 c0 push rbase
474: 11 00 03 e0 push rret
478: 18 00 03 c0 srspr rbase
47c: 0e e0 03 a0 lih rtmp,0x0
480: 0d 40 47 a0 wl16 rtmp,0x220
484: 20 70 03 e2 movepc rret,8
488: 14 40 03 a0 b rtmp,#al
48c: 08 30 00 01 shr r0,0x1
490: 12 00 03 e0 pop rret
494: 12 00 03 c0 pop rbase
498: 14 40 03 e0 b rret,#al
- 37.
00000470 <genrand_int31>:
470: 1100 03 c0 push rbase
474: 11 00 03 e0 push rret
478: 18 00 03 c0 srspr rbase
47c: 0e e0 03 a0 lih rtmp,0x0
480: 0d 40 47 a0 wl16 rtmp,0x220
484: 20 70 03 e2 movepc rret,8
488: 14 40 03 a0 b rtmp,#al
48c: 08 30 00 01 shr r0,0x1
490: 12 00 03 e0 pop rret
494: 12 00 03 c0 pop rbase
498: 14 40 03 e0 b rret,#al
- 38.
- 40.
- 41.
命令のエミュレーション
• めんどくさいこと
• フラグ
–Carryフラグはどうやって生成するの
– Carry = msb((dest & scr) | (~result & (dest | src)))
– Overflow = msb(~(dest ^ src) & (dest ^ result))
• エンディアン
– MIST32はビッグエンディアン
– バイトアクセスはエンディアン変換しただけではうまく
いかない
- 42.
- 43.
- 44.
セキュリティ
• あんまり考えてなかったり…
• PC,SPがちょっと辺
– 専用命令でしか操作できない
• Return pointerがレジスタ
• MMUでNX bitなどはサポート
• カーネル専用のページテーブルを持つ
– 有効活用できるかどうか怪しい
何かいいアイデアがあれば
Pull requestお待ちしています