コンピュータアーキテクチャ 第1回 ガイダンスとPOCOの 命令セット 天野 [email protected] 授業計画 RISC命令セットとVerilogの復習…2回 入出力と割り込み…4回 パイプライン処理…3回 命令レベル並列処理…3回 マルチコアアーキテクチャ…2回 上記は目安なので注意! テキスト:天野、西村「作りながら学ぶコンピュータアーキテ クチャ」培風館 http://www.am.ics.keio.ac.jp上に資料を掲示 コンピュータの構成 計算機構成 Disk Key CPU Display System Bus Bridge I/O Bus Memory System コンピュータの3要素 重要な入出力(I/O) バスブリッジを介してI/Oバスと接続 メモリと同様な番地付けをする場合が多い (Memory-mapped I/O) マルチメディア化により範囲が広がる ディスク、テープ、CD、DVDなどの補助記憶 Ethernetなどのネットワーク ビットマップディスプレイ、CDCビデオ入力 キーボード、マウス等の入力装置 音声出力、入力 IFで加算を行う IF EX ID rwe decorder st_op ld_op funct 3:0 rwe_id opcode 15:11 funct 2:0 THB 0 1 ir ADD com_id rd_id 0 1 0 1 alu_bsel r0 判定 daddr ddataout 命令メモリ creg dreg S Y 10 0 1 breg 01 imm 7:0 PC ext ext0 rs 7:5 B 00 + rd_ex A 0 1 rwe_ex areg ‘1’ rd 10:8 rwe_ex st_op_id ld_op_id 00 01 10 ext ‘0’ WB st_op_id we データ メモリ ddatain 高速化の流れ スレッドレベルの 高速化 Simultaneous Multithreading 複数命令の同時発行 (スーパースカラ) 命令レベルの 高速化 RISCの登場 パイプライン化 マルチコア化 パイプラインを細かく (スーパーパイプライン) 周波数の向上 命令の動的スケジュール マルチコア 革命 2003-2004 1980 1990 2000 授業の流れ1: CPU性能向上のための技法 コンピュータアーキテクチャ(3年春) マイクロプロセッサ特論(大学院) コンピュータアーキテクチャ特論(大学院) パイプライン処理 命令レベル並列処理 マルチコア 命令レベル並列処理 スーパースカラ VLIW SMT マルチプロセッサ クラスタコンピューティング 再構成可能プロセッサ 授業の流れ2:メモリシステムと入出力 メモリシステム コンピュータアーキテクチャ (3年春) オペレーティングシステム(3年秋) 情報工学実験 (3年秋) マルチコアの メモリシステム 入出力 I/Oの接続 割り込み DMA(Direct Memory Access) 仮想記憶 記憶管理 マイクロプロセッサ実験 FPGA上にCPUを実現 入出力プログラム 評価方法 毎回の演習 設計コンテスト 今年はコンピュータ部屋を使わない時がある Web上の掲示に注意! 上位入賞者は試験免除でA 期末試験 POCOの命令セットアーキテクチャ (Instruction Set Architecture: ISA) ソフトウェアとハードウェアのインタフェース プログラムはISAを対象にすれば個々のハードウェアは気にし なくてもいい ハードウェアはISAが動けば共通のプログラムが動く IBM360開発時に明確になった概念 それまでは開発したマシン毎にソフトウェアを作っていた 様々な性能、価格のモデルが同じISAを共通できた → IBMのメインフレームでの覇権を確立した IntelのIA32、ARM、SPARC、MIPSなどが長期間に 渡って拡張され、利用されている ISAの分類 オペランド数による分類 0:スタックマシン PUSH 0 PUSH 1 ADD POP 2 演算スタックを使う方法 B5000、HP9000などの名機があったが80年代に絶滅→スタックを使うとパイプライン化、 複数命令発行ができない 1:アキュムレータマシン LD 0 ADD 1 ST 2 EDSAC、EDVACなど黎明期のマシン 6800、6502など黎明期のマイクロプロセッサ 当初からインデックスレジスタは必要としていた レジスタが増えて汎用(専用)レジスタマシンに進化し、消滅 2,3:汎用(専用)レジスタマシン LD R0,0 ADD R1,1 ST R0,2 現在のマシンは全てここに分類される 汎用レジスタマシンの分類 オペランド中にメモリの指定をいくつ許すか? 一つも許さない:register-register型 (load/storeマシン) RISC (Reduced Instruction Set Computer) 〇命令長が固定、各命令が簡単、高速実行可能 ×命令数が多くなる ARM、MIPS、SPARCなど 一つだけ許す:register-memory型 中間的な性質: IA32(x86)など 全て許す:memory-memory型 CISC (Complex Instruction Set Computer) 〇命令数が少なくて済む ×命令長が可変、各命令が複雑になりがち VAX-11、PDP-11など register-register型の データパス S Y A B 必ずレジスタに持ってきてから演算を 行う LD R0,0 LD R1,1 ADD R1,R0 ST R1,2 固定長命令が可能だが 命令数が増える LD/STばかりやる→load/storeマシン 簡単な命令で構成 RISC(Reduced Instruction Set Computer) … clk we 各型の消長 1950 1960 1970 1980 1990 草創期のコンピュータ アキュムレータ マシン IBM360/370 register-memory memory-memory x86の登場 メインフレーム PDP-8 見た目は 全盛 Pentium-II でバイナリ変換 VAX-11で全盛期 絶滅 RISC vs. CISC論争 register-register スタック マシン IBM801 RISC-I,MIPS、ARM B5000が慶應ITCに! 絶滅 教育用RISC POCO 16bitのregister-register型 命令メモリ、データメモリのアドレス、データ共に16bit(64K×16 ビット) レジスタ16本 (r0-r7) 2オペランド命令 ADD r0,r1 r0 ← r0+r1 左:destination operand 右:source operand (IBM/Intel方式) 前身のPICOをさらに簡単化 とにかく実装が楽になるように メモリの読み書き レジスタ間接指定 LD r0,(r1) r1の中身の番地のデータを読み出してr0に転送 ST r0,(r1) r1の中身の番地に、r0を書き込む 実効アドレス(実際に読み書きされるアドレス)=レジス タの内容 他にもアドレッシングモード(実効アドレスを決める方法) は色々あるがPOCOはレジスタ間接指定しか持って居 ない アキュムレータマシンの際のLD 0は、直接指定と呼ぶ しかしこれはPOCOでは持っていない 基本演算命令 レジスタ同士でしか演算はできない ADD r1,r2 SUB r1,r2 AND r1,r2 OR r1, r2 SL r1 SR r1 MV r1,r2 NOP r1←r1+r2 r1←r1-r2 r1←r1 AND r2 r1←r1 OR r2 r1<<1 r1>>1 r1 ← r2 単純な移動 何もしない(NoOperation) イミーディエイト命令 命令コード中の数字(直値)がそのまま演算に使 われる LDI r1,#1 r1←1 ADDI r1,#5 r1←r1+5 直値は8ビット符号付 → 演算時は16ビットに符号 拡張(sign extension)される 符号無し命令 LDIU r1,#200 r1←200 ADDIU r1,#0xf0 r1←r1+0xf0 (ADDI r1,#0xf0ならばr1←r1-16) POCOの条件分岐命令 BEZ rx,X: if(rx=0) PC←PC+1+X 10000 ddd XXXXXXXX BNZ rx,X: if(rx≠0) PC←PC+1+X 10001 ddd XXXXXXXX PC相対指定 命令の位置+1を起点としてX分命令を飛び越す 8ビットのフィールド→ -128から127まで飛べる 局所性(Locality)があるので多くの場合大丈夫 プログラムが再配置可能(Relocatable)になる PC相対指定による分岐 (掛け算のプログラムの例) LDIU r0,#2 LD r1,(r0) LDIU r0,#3 LD r2,(r0) LDIU r3,#0 ADD r3,r1 ADDI r2,#-1 BNZ r2, -3 LHIU r0,#0 ST r3,(r0) BEZ r2,-1 r1 ← 2番地の内容 r2 ←3番地の内容 r3は答が入るので0に初期化 r3にr1を足しこむ r2から1を引く 0でなければループ JumpとJR JMP X pc ← pc+1+X Jump 10100 XXXXXXXXXXX 無条件に相対指定でX分飛ぶ レジスタ指定がない分遠くに飛べる -1024~+1023 JR rd pc←rd Jump Register 00000 ddd --- 01010 絶対指定 16ビットのアドレス空間のどこにでも飛べる サブルーチンコールのリターン(来週) テーブルジャンプ Jump and Link 戻り番地を最大番号のレジスタに保存 POCOの場合r7 古典的な手法でマインフレーム時代に使われた Branch and Link命令 RISCで最も良く使われる方式 JAL X : pc←pc+1+X, r7←pc+1 10101 XXXXXXXX 飛ぶ範囲はJMPと同じく11ビット(-1024~1023) 議論1:サブルーチンの入れ子(ネスト)に対応しない 議論2:r7にしまうのは命令の直交性を損ねる(格好わるい) R型命令一覧 00000------00000 NOP MV rd,rs rd← rs 00000dddsss00001 AND rd,rs rd← rd AND rs 00000dddsss00010 OR rd,rs rd← rd OR rs 00000dddsss00011 SL rd rd← rd<<1 00000ddd---00100 SR rd rd← rd>>1 00000ddd---00101 ADD rd,rs rd← rd + rs 00000dddsss00110 SUB rd,rs rd← rd - rs 00000dddsss00111 ST rd,(ra) (ra)← rd 00000dddaaa01000 LD rd,(ra) rd← (ra) 00000dddaaa01001 JR rd pc ← rd 00000ddd---01010 I型命令一覧 LDI rd,#X rd← X(符号拡張) 01000dddXXXXXXXX LDIU rd,rs rd← X(ゼロ拡張) 01001dddXXXXXXXX ADDI rd,#X rd←rd+X(符号拡張) 01100dddXXXXXXXX ADDIU rd,#X rd←rd+X(ゼロ拡張) 01101dddXXXXXXXX LDHI rd,#X rd←{X,0} 01010dddXXXXXXXX BEZ rd,X if(rd=0) pc←pc+X+1 10000dddXXXXXXXX BNZ rd,X if(rd≠0) pc←pc+X+1 10001dddXXXXXXXX BPL rd,X if(rd>=0) pc←pc+X+1 10010dddXXXXXXXX BMI rd,X if(rd<0) pc←pc+X+1 10011dddXXXXXXXX J型命令一覧 JMP #X pc←pc+X+1 10100XXXXXXXXXXX JAL #X pc←pc+X+1, r7←pc+1 10101XXXXXXXXXXX すべてを忘れた人のために tarの解凍 tar xvf file.tar アセンブラshapa ./shapa file.asm –o imem.dat 論理シミュレーションiverilog iverilog *.v vvp a.out 波形ビューアgtkwave gtkwave file.vcd レポート提出 [email protected] Subject: ARCWORK1 Student_number Name いつでもARCWORK1なので注意! 演習 0番地から8つの正の整数が並んでいる。このう ち10より大きい(10は含まない)ものの個数を調 べるプログラムを書け
© Copyright 2024 ExpyDoc