1 / 107

先端ソフトウェア工学 II

先端ソフトウェア工学 II. スケジュール. 10/8,22,29,11/19,26: 組込みプログラミング 担当 宮本 10/15,11/5,11/12: 組込み信号処理  担当 岡田. 組込みシステムとは?. 組込みシステムの例 携帯電話 ゲーム機 ディジタル家電 車載機器(解釈によっては自動車そのもの) etc 定義 厳密な定義があるわけではなく、製品に組込まれている汎用ではないディジタルシステムのことを言う。. 組込みプログラミングの特色. 開発環境がクロスであることが多い OS の機能が制限されている ( 場合によっては無い )

rey
Download Presentation

先端ソフトウェア工学 II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 先端ソフトウェア工学II

  2. スケジュール • 10/8,22,29,11/19,26:組込みプログラミング 担当 宮本 • 10/15,11/5,11/12:組込み信号処理 担当 岡田

  3. 組込みシステムとは? • 組込みシステムの例 • 携帯電話 • ゲーム機 • ディジタル家電 • 車載機器(解釈によっては自動車そのもの) • etc • 定義 • 厳密な定義があるわけではなく、製品に組込まれている汎用ではないディジタルシステムのことを言う。

  4. 組込みプログラミングの特色 • 開発環境がクロスであることが多い • OSの機能が制限されている(場合によっては無い) • プロセッサ周辺のデバイスを叩く必要があることが多い • スタートアップコードを書かなければならないこともある • リソースが制限されている

  5. クロス開発とは? • 開発対象(ターゲット)と開発環境(ホスト)が異なる • 多くはバイナリ互換性も無い RS232CorEther

  6. 組込みシステムの開発手順 通常のアプリケーション 組込みシステム コーディング クロスコンパイル ダウンロード クロスデバッグ • コーディング • コンパイル • デバッグ

  7. 開発における考え方 • 目的を定める • 例)速度を向上するor電力を最小化する • 制約条件を調べる • 例)メモリサイズの制限 • 最適な実装方式の検討を行う • 例)最も支配的な処理の実装を効率化 • 仕様決定&コーディング トップダウンアプローチが必須

  8. 顧客が本当に必要だったもの

  9. 理解しなければならないこと • プロセッサの仕組み • 演算 • 制御 • ソフトウェアとハードウェアのインターフェース • オブジェクトコード • リンカ • ローダ • デバイスドライバ • スタートアップルーチン/BIOS • オペレーティングシステム(OS)

  10. プロセッサの仕組み

  11. 参考書 • コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上) (単行本)デイビッド・A. パターソン(著), ジョン・L. ヘネシー(著), David A. Patterson(原著), John L. Hennessy(原著), 成田 光彰(翻訳)

  12. プロセッサの構成要素 • プログラムカウンタ:命令の位置を保持 • レジスタ:データを保持 • メモリバス:命令・データの読み書き • メモリ:命令・データを保持 • 命令デコーダ:命令を解釈 • 算術論理演算器(ALU):演算を実行

  13. プロセッサの基本的な構造 メモリ 0 メモリバス PC r0 r4 命令 デコーダ r1 r5 7 r2 r6 制御処理 r3 r7 ALU 演算処理 15

  14. リセット メモリ 0 メモリバス 0 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  15. 0番地の命令のフェッチ メモリ 0 メモリバス 0 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  16. 命令実行&PCインクリメント メモリ 0 メモリバス 1 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  17. 命令実行&PCインクリメント メモリ 0 メモリバス 2 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  18. 命令実行&PCインクリメント メモリ 0 メモリバス 3 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  19. 命令実行&PCインクリメント メモリ 0 メモリバス 4 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  20. 分岐命令 メモリ 0 メモリバス 4 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 命令:PCに0を代入 演算処理 15

  21. 分岐命令 メモリ 0 メモリバス 0 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU PCに0を代入 演算処理 15

  22. 0番地の命令のフェッチ メモリ 0 メモリバス 0 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  23. ロード命令 メモリ 0 メモリバス 1 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  24. ロード命令 メモリ 0 メモリバス 1 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 命令:r0に16番地のデータをロード 演算処理 15

  25. ロード命令 メモリ 0 メモリバス 1 0 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 命令:r0に16番地のデータをロード 演算処理 15 1

  26. ロード命令 メモリ 0 メモリバス 1 1 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  27. 命令実行&PCインクリメント メモリ 0 メモリバス 2 1 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  28. 命令実行&PCインクリメント メモリ 0 メモリバス 3 1 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  29. ロード命令 メモリ 0 メモリバス 3 1 0 PC r0 r4 命令 デコーダ 0 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 命令:r1に17番地のデータをロード 演算処理 15 2

  30. 命令実行&PCインクリメント メモリ 0 メモリバス 4 1 0 PC r0 r4 命令 デコーダ 2 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  31. 命令実行&PCインクリメント メモリ 0 メモリバス 4 1 0 PC r0 r4 命令 デコーダ 2 0 r1 r5 7 0 0 r2 r6 制御処理 0 0 r3 r7 ALU 命令:r2にr0とr1を加えて代入 演算処理 15

  32. 命令実行&PCインクリメント メモリ 0 メモリバス 4 1 0 PC r0 r4 命令 デコーダ 2 0 r1 r5 7 3 0 r2 r6 制御処理 0 0 r3 r7 ALU 演算処理 15

  33. ソフトウェアとのインターフェース

  34. アセンブリ言語 • MIPS アセンブリ言語による加算 • add a, b, c • 動作 • a=b+c • 減算 • sub a, b, c • 動作 • a=b-c オペランド

  35. アセンブリ言語 • MIPS アセンブリ言語による加算 • add a, b, c • 動作 • a=b+c • 減算 • sub a, b, c • 動作 • a=b-c ディスティネーション オペランド

  36. アセンブリ言語 • MIPS アセンブリ言語による加算 • add a, b, c • 動作 • a=b+c • 減算 • sub a, b, c • 動作 • a=b-c ソース オペランド

  37. Cからアセンブリ言語への変換 • C コード • アセンブリコード a=b+c; d=a-e; add a,b,c sub d,a,e

  38. Cからアセンブリ言語への変換 • C コード • アセンブリコード f=(g+h)-(i+j); add t0,g,h add t1,i,j sub f,t0,t1

  39. メモリにある値をオペランドとした演算 • C コード • アセンブリコード g=h+A[8]; lw$t0,8($s3) add $s1,$s2,$t0 #h は$s2に格納 lw:1ワードをロードする命令 この場合、8+$s3のアドレスをロードする 今の例では32bitを考えているので1wordは32bit

  40. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  41. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ lw$t0,8($s3) 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  42. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  43. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 7 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  44. add メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 1 0 0 PC s0 s4 命令 デコーダ add $s1,$s2,$t0 0 0 s1 s5 7 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  45. add メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 1 0 0 PC s0 s4 命令 デコーダ add $s1,$s2,$t0 h+A[8] 0 s1 s5 7 A[0] h A[8] s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8]

  46. lw メモリ 0 メモリバス lw$t0,8($s3) add $s1,$s2,$t0 0 0 0 PC s0 s4 命令 デコーダ lw$t0,8($s3) 0 0 s1 s5 7 A[0] h 0 s2 t0 制御処理 A[1] A[2] 7 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 15 A[8] ベースレジスタ オフセット

  47. メモリのアドレス • 通常、多くのアーキテクチャではbyteつまり8bitを単位としてアドレスを表現する。 • 今までの図はワードアドレスとしては正しいがバイトアドレスとしては正しくない。MIPS32を仮定すると1word=32bit=4byte • 先のアセンブリコードは本来以下のようになる。 lw$t0,32($s3) add $s1,$s2,$t0 #h は$s2に格納

  48. バイトアドレス メモリ 3 0 メモリバス PC r0 r4 命令 デコーダ r1 r5 31 28 r2 r6 制御処理 r3 r7 ALU 演算処理 63 60

  49. ロードとストアが使用されるコード • C コード • アセンブリコード A[0]=h+A[8]; lw$t0,32($s3) add $t0,$s2,$t0 #h は$s2に格納 sw$t0,0($s3)

  50. lw メモリ メモリバス 3 lw$t0,32($s3) 0 add $t0,$s2,$t0 sw$t0,0($s3) 0 0 0 PC s0 s4 命令 デコーダ 0 0 s1 s5 31 28 A[0] h 0 s2 t0 制御処理 A[1] A[2] 28 0 s3 t1 A[3] A[4] A[5] ALU A[6] A[7] 演算処理 60 63 A[8]

More Related