Upload
hirotaka-kawata
View
1.924
Download
1
Embed Size (px)
DESCRIPTION
http://open-arch.org/
Citation preview
30日でできない!
コンピューター自作入門
@hktechno
自己紹介
@hktechno川田 裕貴 (かわたひろたか)● 筑波大学 情報学群 情報科学類 ++3 年
● 信仰: Emacs, Debian, Python● 2011年度未踏IT人材発掘・育成事業
○ Open Design Computer Project コクリエーター
今日話すこと
について
この本ご存知ですか?
30日でOS自作できた人、挙手! ノシ
できないですよねー (´・ω・`)
30日ではできないけれど...
2人がかりで
2年ぐらいあればどうにか形にはなりました。
ぼっちの人は頑張ってください。
Open Design Computer?No Intel.No ARM.No MIPS.
The "mist32" Architecture.All new open design processor.
デモ...
搭載している FPGA
ALTERA Cyclone IV EP4CE115[Terasic DE2-115 Development Board]
魔法のデバイス FPGA
自由に回路を書き換え可能な ICハードウェア記述言(HDL)で回路を記述
主な用途
プロトタイプ小ロットのチップ
プロジェクトの特徴
開発ツールを一通り揃える
当たり前だけど、ないと使ってくれない
再利用可能な状態でソース・仕様を公開
プロセッサの HDL は BSD ライセンス
モバイル機器に使われるようなものを想定
OSが乗ったタブレットとかスマホとか
つまり...
敵は ARMCortex-Axx シリーズ
mist32 アーキテクチャ
ハードウェアとソフトウェアの協調動作
OS を支援する機能をたくさん載せる
アウトオブオーダー実行
回路規模は大きくなるが速くなる
独自の命令セット
アウトオブオーダー実行に最適化
mist32 の位置づけ ( �⌓�) 性能の目安→↑ビット数
アセンブラとバイナリ00000470 <genrand_int31>:
470: 11 00 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
call
return
32bitaddr
全体図的な何か
開発規模について
MIST1032SAプロセッサ + ペリフェラル
行数 : 81,000行使用LE : 101,800LE [in-order: 32,000LE]
開発環境
GCC : 3,100行binutils(gas, ld) : 1,800行シミュレータ : 1,500行Newlib : 1,000行
やったこと
プロセッサー・ペリフェラルの開発
Verilog HDL がりがり
プロセッサの仕様策定
レジスタ, 命令セット, MMU, 割り込み...
開発環境の開発
binutils (as, ld...), gcc, シミュレータ...
僕がやったこと
プロセッサー・ペリフェラルの開発
Verilog HDL がりがり
プロセッサの仕様策定
レジスタ, 命令セット, MMU, 割り込み...
開発環境の開発
binutils (as, ld...), gcc, シミュレータ...
全般的に言えること
とにかく資料がねぇ!(特に日本語)
作成の流れ
命令セット仕様策定
プロセッサコアの開発 アセンブラの開発
周辺機能仕様策定
割り込み・IO・MMU作成 コンパイラ・シミュレータの開発
コアのバグつぶし
バグの叩き合い
バグとの戦い
バグと共に(ry
プロセッサの仕様策定
もともと @cpulabs が開発してるプロセッサコアを元にする (mist32 の原型)つまり、このプロジェクトは僕はおまけ。
アウトオブオーダー実行にとにかく最適化。一番楽しい時間帯。妄想アワー。
今思えば失敗したこと: 2オペランド...
アウトオブオーダー実行
知らない人いないよね。Wikipedia でも見てください。
書く時間がなかったなんていえな(ry
mist1032sa プロセッサ
Load/Store 型 RISC スーパースカラ
2命令同時フェッチ/4命令同時実行片方向の分岐予測と投機的実行Tomasulo のアルゴリズム (OoO)レジスタリネーミングwith Flag 命令の撤廃
with Flag 命令とは
典型的な例: ADDC (Add with Carry Flag)
フラグを見に行くのはブランチ系命令だけに。フラグを書き込む命令は b の直前にある前提。
コンパクトな回路規模で OoO するには:命令の依存関係をとにかく少なくする必要
できなくなること
例えば x86 で言うと...CMP -> MOV -> MOV -> Jxx
CMP のフラグが Jxx まで引き継がれる、はず
OoO する際にフラグへの依存ができる
mist32 では、これを許さない!
Branch の直前に、フラグ変更命令を置く制約
ADDC はどうするの?
現状の mist32:フラグを参照する命令は branch のみ
(基本的には)
ADDC のような命令は、キャリーをレジスタに返すような命令を作ればいい!なんか問題でもある?
レジスタ
汎用レジスタ:
32bit レジスタ 32本
その他システムレジスタ:
スタックポインタ
プログラムカウンタ
ページテーブル, コントロールレジスタ...
奴らは戦力外通告だ!
アウトオブオーダーの邪魔になる技術例
ARM : 複雑な CC 実行!
SPARC : レジスタウィンドウ!!
MIPS : ディレイドブランチ!!!
SuperH : ディレイドブランチ...!!!!
x86 : 論外!!!!!
MMUページテーブル
2段ページングに対応
1ページ 16KB
NX ビットみたいなものつけたり
権限設定もできる
当たり前だけどセグメントなんてついてないよ
割り込み
何段階か割り込み優先度を設定すぐに割り込む
一定時間おきに割り込みを一気に割り込む
コンテキスト終了と同時に割り込む
クソみたいな割り込みによって、コンテキストが突然終了してほしくない!
コンテキストスイッチ
ハードウェアコンテキストスイッチ支援を実装割り込みなどと協調動作できる
みんな使えよ!使うんだぞ!約束だぞ!
優先度によるキャッシュの有効活用優先度の高いコンテキスト情報は
必ずキャッシュに載せるとか
プロセッサの開発
開発したのは良いものの...
DE2-115 に入りきらない!
論理合成時間かかりすぎ。(数時間)
OoO するとやっぱりでかくなるね...
インオーダーコアも作ろうか(´・ω・`)↑ 未踏成果報告会3日ぐらい前
Binutils の移植
アセンブラも資料無くて大変だった他の簡単なプロセッサを参考に、コピペしつつ1度作れてしまえば次は簡単、のような
CGEN (Cpu GENerator) 使おう!
sourceware.org/cgen/
コンパイラ (gcc) の移植
RTL テンプレートと、C をごりごり。
正直面白くない。GCC Internals を頑張って読もう。
なぜ LLVM にしなかったのかと一晩(ryまさかここまで LLVM, clang が進化するとは先見性の無さ...('A`)
gcc の移植
とにかく
gcc/config/<arch>/<arch>.mdgcc/config/<arch>/<arch>.cgcc/config/<arch>/<arch>.h
コレを書けばいい!
RTL テンプレート
(define_insn "addsi3" [(set (match_operand:SI 0 "register_operand" "=r,r") (plus:SI (match_operand:SI 1 "register_operand" "%0,0") (match_operand:SI 2 "nonmemory_operand" "r,I")))] "" "@ add\t%0, %2 add\t%0, %2")
シミュレータ
とりあえず、書けばいいよ!割り込みとか、IO 考えなければ、割と簡単。
さあ動かすぞ!
うごかなーい
実用的な、回路規模は FPGA 自体の回路規模の 80% ぐらいまでそれ以上になると、論理合成できても動かないことが多々
未踏での評価
担当 PM の評価はほどほどに良かったけど...
みんな(PM も含め)ハードウェアにもプロセッサにもあまり興味がないみたいねと言うより、純粋な技術に興味がないみたいね確かに新規性ないね(´・ω・`)
モノはできてから応募したほうがいいかもね
これから...
回路規模の縮小化
DE2-115 デモボードに乗るようにする
インオーダーコアの制作 → Done!とりあえず規模の小さいものも作る
OS をはやく載せられる状態に
GCC のバグつぶし、OS 支援機能テスト
Webプロセッサの仕様と移植に関する資料
open-arch.org
ソースコードgithub.com/technogithub.com/cpulabs
OS 載せるぞ!
今後に期待してください
Expect Us!