30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば

Preview:

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!

Recommended