a hardware development on fpgas
DESCRIPTION
@Kosenconf-tohoku in Fukushima-NCT, 2009-08-29TRANSCRIPT
FPGAで始める ハードウェア
設計 @shtaxxx
09.08.29 高専カンファレンス in 東北 @福島高専
はじめに 自己紹介
09.08.29 高専カンファレンス in 東北 @福島高専
Twitter: shtaxxx
09.08.29 高専カンファレンス in 東北 @福島高専
福島高専 電気工学科→ 東工大 工学部情報工学科→
東工大 大学院情報理工学研究科
計算工学専攻 修士1年
09.08.29 高専カンファレンス in 東北 @福島高専
専門 と 興味
09.08.29 高専カンファレンス in 東北 @福島高専
計算機 アーキテクチャ
09.08.29 高専カンファレンス in 東北 @福島高専
計算機の 仕組みを 研究
09.08.29 高専カンファレンス in 東北 @福島高専
マルチコア メニーコア が熱い!(?)
09.08.29 高専カンファレンス in 東北 @福島高専
Intel Core i7
09.08.29 高専カンファレンス in 東北 @福島高専
IBM SONY 東芝
Cell/B.E 09.08.29 高専カンファレンス in 東北 @福島高専
SUN ROCK
09.08.29 高専カンファレンス in 東北 @福島高専
ネットワークオンチップ (NoC)
09.08.29 高専カンファレンス in 東北 @福島高専
投機的並列 スレッディング
09.08.29 高専カンファレンス in 東北 @福島高専
FPGAで作る 大規模 検証環境
09.08.29 高専カンファレンス in 東北 @福島高専
生まれて はじめての 高橋メソッド
09.08.29 高専カンファレンス in 東北 @福島高専
SHTA.X>みえてる?
09.08.29 高専カンファレンス in 東北 @福島高専
では 本題へ
09.08.29 高専カンファレンス in 東北 @福島高専
FPGAで始める ハードウェア
設計 09.08.29 高専カンファレンス in 東北 @福島高専
今日の内容
09.08.29 高専カンファレンス in 東北 @福島高専
The first step
09.08.29 高専カンファレンス in 東北 @福島高専
そもそも ハードウェア ってなに?
09.08.29 高専カンファレンス in 東北 @福島高専
仕事の手順 (=命令)
を与えたら 動くもの
09.08.29 高専カンファレンス in 東北 @福島高専
ファミコンが ハードウェア
09.08.29 高専カンファレンス in 東北 @福島高専
スーパーマリオがソフトウェア
09.08.29 高専カンファレンス in 東北 @福島高専
身近な ハードウェアとソフトウェアは
09.08.29 高専カンファレンス in 東北 @福島高専
パソ コン
09.08.29 高専カンファレンス in 東北 @福島高専
ハードウェア 代表: CPU
09.08.29 高専カンファレンス in 東北 @福島高専
CPUの仕事: 命令を順番に こなす!
09.08.29 高専カンファレンス in 東北 @福島高専
命令を メモリから 持ってきて (Fetch)
09.08.29 高専カンファレンス in 東北 @福島高専
1
命令を 解釈して (Decode)
09.08.29 高専カンファレンス in 東北 @福島高専
2
実行! (Execution)
09.08.29 高専カンファレンス in 東北 @福島高専
3
結果を 出力
(Write Back) 09.08.29 高専カンファレンス in 東北 @福島高専
4
1~4を 繰り返す!
09.08.29 高専カンファレンス in 東北 @福島高専
命令の集まり= ソフトウェア
09.08.29 高専カンファレンス in 東北 @福島高専
09.08.29 高専カンファレンス in 東北 @福島高専
アプリケーション ライブラリ
OS
全部 命令の集合
09.08.29 高専カンファレンス in 東北 @福島高専
みんな オリジナルの ソフトウェア 作るよね?
09.08.29 高専カンファレンス in 東北 @福島高専
だってPCが あれば
作れるもん! 無料だもん
09.08.29 高専カンファレンス in 東北 @福島高専
shtas-Mac:~ shta$ cat hello.c #include <stdio.h>
int main(){ printf("Hello, world!\n"); return 0; } shtas-Mac:~ shta$ gcc hello.c shtas-Mac:~ shta$ ./a.out Hello, world! 09.08.29 高専カンファレンス in 東北 @福島高専
みんな オリジナルの ハードウェア 作るよね!
09.08.29 高専カンファレンス in 東北 @福島高専
例えば オリジナル
CPU 09.08.29 高専カンファレンス in 東北 @福島高専
Javaの バイトコードを そのまま実行
09.08.29 高専カンファレンス in 東北 @福島高専
特殊命令追加で 高速化
09.08.29 高専カンファレンス in 東北 @福島高専
パターン マッチング 専用コア
09.08.29 高専カンファレンス in 東北 @福島高専
ハードウェア Twitter
クライアント 09.08.29 高専カンファレンス in 東北 @福島高専
作るよね!!
09.08.29 高専カンファレンス in 東北 @福島高専
作りたい! 09.08.29 高専カンファレンス in 東北 @福島高専
でも チップ製作は
高い orz orz
09.08.29 高専カンファレンス in 東北 @福島高専
もっと 手軽に
できないかな? 09.08.29 高専カンファレンス in 東北 @福島高専
そこで FPGA
09.08.29 高専カンファレンス in 東北 @福島高専
FPGAとは 書き換え可能な ディジタル回路
09.08.29 高専カンファレンス in 東北 @福島高専
例えば
09.08.29 高専カンファレンス in 東北 @福島高専
CPU MPEG4 Encoder
かきかえ!
どんな形?
09.08.29 高専カンファレンス in 東北 @福島高専
Xilinx Spartan
09.08.29 高専カンファレンス in 東北 @福島高専
Altera Cyclone
09.08.29 高専カンファレンス in 東北 @福島高専
LatticeXP2
09.08.29 高専カンファレンス in 東北 @福島高専
要は ICチップです
09.08.29 高専カンファレンス in 東北 @福島高専
なにがあれば 開発できるのか
09.08.29 高専カンファレンス in 東北 @福島高専
統合開発環境
09.08.29 高専カンファレンス in 東北 @福島高専
1
例) Xilinx ISE
09.08.29 高専カンファレンス in 東北 @福島高専
Web Packなら 無料でDL できます
09.08.29 高専カンファレンス in 東北 @福島高専
FPGA基板
09.08.29 高専カンファレンス in 東北 @福島高専
2
例) アットマークテクノ社 SUZAKU-S
09.08.29 高専カンファレンス in 東北 @福島高専
例)MieruPC社 FPGACard
09.08.29 高専カンファレンス in 東北 @福島高専
[AD] 詳しくはこちらまで! MieruPC株式会社 http://mierupc.com/
09.08.29 高専カンファレンス in 東北 @福島高専
もちろん 無料では ありません
09.08.29 高専カンファレンス in 東北 @福島高専
書き込み ケーブル
09.08.29 高専カンファレンス in 東北 @福島高専
3
例)Digilent社 JTAG USB Cable
09.08.29 高専カンファレンス in 東北 @福島高専
もちろん 無料では ありません
09.08.29 高専カンファレンス in 東北 @福島高専
これだけあれば 何度でも オリジナル
ハードウェアが 作れる!
09.08.29 高専カンファレンス in 東北 @福島高専
えー 無料で
できないのー? ねぇ?
09.08.29 高専カンファレンス in 東北 @福島高専
波形 シミュレーション
なら無料で できます!
09.08.29 高専カンファレンス in 東北 @福島高専
必要なもの
09.08.29 高専カンファレンス in 東北 @福島高専
シミュレータ
09.08.29 高専カンファレンス in 東北 @福島高専
1
例) ISE ISim
09.08.29 高専カンファレンス in 東北 @福島高専
ISE Web Pack と一緒に
インストール できます
09.08.29 高専カンファレンス in 東北 @福島高専
例) iverilog
09.08.29 高専カンファレンス in 東北 @福島高専
Macportsなら
sudo port install iverilog
でインストール できます
09.08.29 高専カンファレンス in 東北 @福島高専
どうやって 開発するの?
09.08.29 高専カンファレンス in 東北 @福島高専
基本は ソフトウェア と同じ流れ
09.08.29 高専カンファレンス in 東北 @福島高専
ソフトウェア の場合
09.08.29 高専カンファレンス in 東北 @福島高専
言語を選ぶ C, Java, Ruby
とか 09.08.29 高専カンファレンス in 東北 @福島高専
エディタで ごりごり 書く
09.08.29 高専カンファレンス in 東北 @福島高専
(必要なら) コンパイルして 機械語に変換
09.08.29 高専カンファレンス in 東北 @福島高専
実行!! 09.08.29 高専カンファレンス in 東北 @福島高専
09.08.29 高専カンファレンス in 東北 @福島高専
FPGAの場合
09.08.29 高専カンファレンス in 東北 @福島高専
言語を選ぶ VHDL
Verilog HDL とか
09.08.29 高専カンファレンス in 東北 @福島高専
エディタで ごりごり 書く
09.08.29 高専カンファレンス in 東北 @福島高専
コンパイルして シミュレーション
もしくは FPGAに書き込む
09.08.29 高専カンファレンス in 東北 @福島高専
どうやって 回路を書くの?
09.08.29 高専カンファレンス in 東北 @福島高専
ソフトウェアの場合
09.08.29 高専カンファレンス in 東北 @福島高専
プログラミング言語で記述
例)C, Javaとか 09.08.29 高専カンファレンス in 東北 @福島高専
FPGAの場合
09.08.29 高専カンファレンス in 東北 @福島高専
ハードウェア 記述言語 で記述
09.08.29 高専カンファレンス in 東北 @福島高専
VHDL Verilog HDL
など 09.08.29 高専カンファレンス in 東北 @福島高専
まず 書いてみよう!
09.08.29 高専カンファレンス in 東北 @福島高専
Step 1 Hello, World! 的なもの
09.08.29 高専カンファレンス in 東北 @福島高専
= LEDチカチカ
09.08.29 高専カンファレンス in 東北 @福島高専
module HELLO(CLK, RST_X, LED); input CLK; //入力ポート クロック信号 input RST_X; //入力ポート リセット信号 output LED; //出力ポート LEDに接続
reg [21:0] counter; //22bitの内部レジスタ
assign LED = counter[21]; //継続的代入文 //counterの21bit目をLEDに接続するイメージ
//always文 CLKやRST_Xの変化に合わせてどうなるか always @(posedge CLK or negedge RST_X) begin if(!RST_X) begin //リセット時 counter <= 0; end else begin counter <= counter +1; //1増える end end endmodule
09.08.29 高専カンファレンス in 東北 @福島高専
ちかちか!
09.08.29 高専カンファレンス in 東北 @福島高専
波形
09.08.29 高専カンファレンス in 東北 @福島高専
簡単でしょ?
09.08.29 高専カンファレンス in 東北 @福島高専
Verilog HDLの 簡単な文法
09.08.29 高専カンファレンス in 東北 @福島高専
reg [7:0] hoge 7番目がMSB 0番目がLSBの
8ビットのレジスタ (値の入れ物)
09.08.29 高専カンファレンス in 東北 @福島高専
7 6 5 4 3 2 1 0
wire [7:0] fuga 7番目がMSB 0番目がLSBの 8ビット分の配線
09.08.29 高専カンファレンス in 東北 @福島高専
7 6 5 4 3 2 1 0
代入: =
または <=
09.08.29 高専カンファレンス in 東北 @福島高専
= ブロッキング代入
即時に値が反映される 09.08.29 高専カンファレンス in 東北 @福島高専
<=
ノンブロッキング代入 ブロックの最後に まとめて反映される
09.08.29 高専カンファレンス in 東北 @福島高専
Q) aが3,bが4のとき a = b; b = a;
の結果は? 09.08.29 高専カンファレンス in 東北 @福島高専
A: aもbも4
09.08.29 高専カンファレンス in 東北 @福島高専
Q) aが3,bが4のとき a <= b; b <= a;
の結果は? 09.08.29 高専カンファレンス in 東北 @福島高専
A: aは4 bは3
09.08.29 高専カンファレンス in 東北 @福島高専
他にも ありますが 時間が・・・
09.08.29 高専カンファレンス in 東北 @福島高専
Step X オリジナル 計算機
09.08.29 高専カンファレンス in 東北 @福島高専
例) MieruPC
09.08.29 高専カンファレンス in 東北 @福島高専
FPGA: Xilinx
Spartan 3E 09.08.29 高専カンファレンス in 東北 @福島高専
CPU: MIPS準拠 オリジナル プロセッサ
09.08.29 高専カンファレンス in 東北 @福島高専
メインメモリ:52KB
キャッシュ: なし
09.08.29 高専カンファレンス in 東北 @福島高専
補助記憶: MMC(SD) カード
09.08.29 高専カンファレンス in 東北 @福島高専
Verilog HDLで フルスクラッチ
09.08.29 高専カンファレンス in 東北 @福島高専
たった1000行
09.08.29 高専カンファレンス in 東北 @福島高専
意外と簡単そう
09.08.29 高専カンファレンス in 東北 @福島高専
MieruPCプロジェクト: 中身が見える
計算機システムを構築する 研究・教育プロジェクト
http://www.arch.cs. titech.ac.jp/mieru/
09.08.29 高専カンファレンス in 東北 @福島高専
一緒に計算機 開発しようよ!
09.08.29 高専カンファレンス in 東北 @福島高専
まとめ 09.08.29 高専カンファレンス in 東北 @福島高専
ソフトウェア 同様
ハードウェアも 手軽に開発可能
09.08.29 高専カンファレンス in 東北 @福島高専
FPGAで オリジナルの ハードウェアが 実現できる!
09.08.29 高専カンファレンス in 東北 @福島高専
シミュレーション なら無料!
09.08.29 高専カンファレンス in 東北 @福島高専
オリジナルの ソフトウェア だけじゃなく
09.08.29 高専カンファレンス in 東北 @福島高専
オリジナルの ハードウェアも
作ろう! 09.08.29 高専カンファレンス in 東北 @福島高専
そして オリジナルの
計算機 を作ろう!
09.08.29 高専カンファレンス in 東北 @福島高専
ソフトウェア +
ハードウェア = 最強
09.08.29 高専カンファレンス in 東北 @福島高専
ご清聴 ありがとう ございました @shtaxx
09.08.29 高専カンファレンス in 東北 @福島高専
画像の引用元 http://pc.watch.impress.co.jp/docs/2008/0811/intel.htm
http://www.superblog.jp/mt/archives/2007/08/ http://arstechnica.com/hardware/news/2008/02/sun-can-you-smell-
what-the-rock-is-cookin.ars http://www.fs-jpc.net/parts/cpu.html
http://av.watch.impress.co.jp/docs/20041221/nexx.htm http://commons.wikimedia.org/wiki/File:Fpga_xilinx_spartan.jpg
http://www.easyfpga.com/Products/EZ1CUSB/Images/ez1cusb_top_small.jpg
http://www.kumikomi.net/article/news/2007/05/30_01_p1.jpg http://www.atmark-techno.com/en/products/suzaku/suzaku-s
http://mierupc.com/product/fpgac.html http://www.digilentinc.com/Products/Detail.cfm?Prod=JTAG-USB
09.08.29 高専カンファレンス in 東北 @福島高専