222
เอกสารคาสอน รายวิชา 2301274 ระบบคอมพิวเตอร์ (CO M P U T E R S Y S T E M S) ผู้ช่วยศาสตราจารย์ ดร. ชัชวิทย์ อาภรณ์เทวัญ ภาควิชาคณิตศาสตร์และวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย

รายวิชา 2301274 ระบบคอมพิวเตอร์

Embed Size (px)

Citation preview

Page 1: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอน

รายวชา 2301274 ระบบคอมพวเตอร

(CO M P U T E R S Y S T E M S)

ผชวยศาสตราจารย ดร. ชชวทย อาภรณเทวญ

ภาควชาคณตศาสตรและวทยาการคอมพวเตอร

คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย

Page 2: รายวิชา 2301274 ระบบคอมพิวเตอร์
Page 3: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ก

ค ำน ำ

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร (Computer Systems) นเปนแนวทางการสอนแบบหนง

ทผมรวบรวมมาจากอาจารยของผมหลายๆ ทาน และจากประสบการณการท างานดานการออกแบบวงจรดจทลและการ

ออกแบบไมโครโพรเซสเซอรของผมเอง ผมไดพฒนาเนอหา แบบฝกหด และโครงงานส าหรบนสต เพอใหเหมาะสมกบ

หลกสตรวทยาการคอมพวเตอรทมวชาบงคบดานฮารดแวรเพยงตวเดยว ซงตางจากหลกสตรอนๆ ทมวชาบงคบดาน

ฮารดแวรหลายตวและมแลบใหนสตทดลองปฏบตดวย ท าใหเนอหาของเอกสารค าสอนนตองสนกระชบและครอบคลม

พนฐานดานฮารดแวรสวนใหญทนสตควรจะร และตองสอนนสตทเรยนฮารดแวรเปนครงแรกใหเขาใจการท างานของไม

โครโพรเซสเซอรในเชงลก เพอทจะเชอมโยงความรตอไปยงวชาอนๆ ได เชน 2301371 ระบบปฏบตการ (Operating

Systems) และ 2301380 หลกการและการประมวลภาษาโปรแกรม (Programming Language Principles and

Processing)

ในบทสดทาย ผมเพม “ควอนตมคอมพวเตอร (Quantum Computer)” ซงอยนอกเหนอจากเนอหาในหลกสตร

เขาไปดวย เนองจาก หนง เปนความสนใจสวนตวของผมเอง สอง มเนอหาเชงบรณาการกบควอนตมฟสกสและ

คณตศาสตร ซงกดเหมาะสมดกบนสตคณะวทยาศาสตร สาม การค านวณเชงควอนตมนาจะกระตนใหนสตเกดความใฝร

และตระหนกถงความเชอมโยงของศาสตรตางๆ อนจะน าไปสการเปดโลกทศนของนสตออกไปยงสาขาวชาอนๆ ท

เกยวของกบคอมพวเตอร และส เปนการแนะน ารายวชาเลอกทก าลงจะเปดใหมคอ 230xxxx การค านวณเชงควอนตม

(Quantum Computation) ของภาควชาคณตศาสตรและวทยาการคอมพวเตอร

สดทาย ขอกราบขอบพระคณบดามารดาผสนบสนนในการศกษาเลาเรยนของขาพเจาเสมอมา ขอขอบพระคณ

ครบาอาจารยหลายทานในภาควชาวศวกรรมคอมพวเตอร คณะวศวกรรมศาสตร จฬาลงกรณมหาวทยาลย ทไดประสทธ

ประศาสตรวชาความร ดานฮารดแวร สนบสนนใหเขาประกวดแขงขนออกแบบฮารดแวรในระดบประเทศ ใหชวย

เตรยมการสอนแลบฮารดแวร ความรและประสบการณทไดจากการท างานเหลานเปนประโยชนอยางมากตองานสอนของ

ผมในปจจบน

ชชวทย อาภรณเทวญ

ภาควชาคณตศาสตรและวทยาการคอมพวเตอร

จฬาลงกรณมหาวทยาลย

19 มถนายน 2556

Page 4: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ข

สารบาญ

หนา

ค าน า .............................................................................................................................................. ก

สารบาญ ......................................................................................................................................... ข

ประมวลรายวชา ............................................................................................................................... ซ

หวขอบรรยาย

1. ววฒนาการของคอมพวเตอร ................................................................................................... 1

นยามของคอมพวเตอร ................................................................................................ 1

การนบและการแทนจ านวนดวยตวเลข ............................................................................ 1

ลกคด (abacus) ......................................................................................................... 2

เครองคดเลขของปาสกาล (Pascal's calculator) .............................................................. 2

Difference Engine และ Analytical Engine .................................................................... 3

Enigma และ Lorenz SZ40 ......................................................................................... 4

Bombe และ Colossus Computer ................................................................................. 4

Z1 computer ............................................................................................................ 5

ENIAC และ UNIVAC ............................................................................................... 6

คอมพวเตอรเครองแรกทใชทรานซสเตอร ....................................................................... 6

IBM และ Fortran ...................................................................................................... 7

ไมโครโพรเซสเซอรและดแรมตวแรก ............................................................................. 8

คอมพวเตอรสวนบคคลและอนเทอรเนต ........................................................................ 9

แอนะลอก (Analog) vs. ดจทล (Digital) ...................................................................... 10

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 13

แบบฝกหด ................................................................................................................ 13

รายการอางอง ............................................................................................................ 14

2. ระบบจ านวน ........................................................................................................................ 15

ประเภทของขอมลในคอมพวเตอร ................................................................................. 15

เลขฐานสองและฐานสบหก ........................................................................................... 15

การบวกลบเลขฐานสอง ............................................................................................... 17

การเกบจ านวนเตมแบบเลขฐานสอง ............................................................................... 17

การเกบจ านวนเตมแบบสวนเตมเตมสอง ........................................................................ 17

การเกบจ านวนจดลอยตวแบบจดตรง ............................................................................. 18

การเกบจ านวนจดลอยตวแบบ IEEE 754 ....................................................................... 18

รหส ASCII และ UNICODE ........................................................................................ 20

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 21

แบบฝกหด ................................................................................................................ 21

รายการอางอง ............................................................................................................ 24

Page 5: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ค

3. ทรานซสเตอรและเกต ............................................................................................................ 25

ทรานซสเตอร (Transistor) .......................................................................................... 25

เกต (Gate) ............................................................................................................... 26

สญลกษณทวไปทใชในการวาดวงจรดจทล ....................................................................... 27

ตวด าเนนการบต (Bit Operator) .................................................................................. 27

มกซ (MUX) ............................................................................................................ 28

ตวถอดรหส (Decoder) ............................................................................................... 29

วงจรบวก (Adder) ..................................................................................................... 30

โปรแกรม LogicWorks ............................................................................................... 31

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 32

แบบฝกหด ................................................................................................................ 33

รายการอางอง ............................................................................................................ 33

4. วงจรเชงผสม ....................................................................................................................... 34

รหสเกรย (Gray Code) ............................................................................................... 34

Karnaugh Map .......................................................................................................... 35

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 40

แบบฝกหด ................................................................................................................ 40

รายการอางอง ............................................................................................................ 41

5. วงจรเชงล าดบ ...................................................................................................................... 42

วงจรเชงผสม vs. วงจรเชงล าดบ .................................................................................... 42

ดแลตช (D Latch) ..................................................................................................... 43

Master-slave edge-triggered D flip-flop ..................................................................... 44

ตวอยางการสรางวงจร Even Parity ............................................................................... 45

แผนภาพเวลา (Timing Diagram) ................................................................................ 46

ตวตรวจจบล าดบ (Sequence Detector) ......................................................................... 47

วงจรควบคมปมน า (Water Pump) ................................................................................ 47

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 51

แบบฝกหด ................................................................................................................ 51

รายการอางอง ............................................................................................................ 52

6. อปกรณอนพตและเอาตพต .................................................................................................... 53

Toggle Switch .......................................................................................................... 53

Push Button .............................................................................................................. 53

LED ........................................................................................................................ 54

7-Segments ............................................................................................................. 54

IC TTL ................................................................................................................... 54

Logic Probe ............................................................................................................. 56

Keyboard ................................................................................................................. 56

การแปลงเลขฐานสองเปน BCD .................................................................................... 57

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 58

แบบฝกหด ................................................................................................................ 58

Page 6: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ง

รายการอางอง ............................................................................................................ 58

7. ล าดบชนของหนวยความจ า ..................................................................................................... 59

ท าไมตองแบงล าดบชน ................................................................................................ 59

เรจสเตอร (Register) ................................................................................................. 60

เอสแรม (Static RAM - SRAM) ................................................................................. 60

ดแรม (Dynamic RAM - DRAM) .............................................................................. 61

Big-endian และ Little-endian .................................................................................... 61

ฮารดดสก (Harddisk) ................................................................................................ 62

บฟเฟอรสามสถานะ (Tri-state Buffer) ......................................................................... 62

พอรตเขาออกไดสองทาง (Bi-directional Port) .............................................................. 62

บสขอมล (Data Bus) ................................................................................................. 63

รอม (ROM), พรอม (PROM), อพรอม (EPROM), ออพรอม (EEPROM) ...................... 63

เอกสารประกอบ (ส าหรบอานเพมเตม) ......................................................................... 65

แบบฝกหด ............................................................................................................... 65

รายการอางอง ........................................................................................................... 65

8. โปรแกรม LogicWorks ......................................................................................................... 66

วงจรบวก (Adder) .................................................................................................... 66

การเลอกใช IC ในตระกล TTL .................................................................................... 68

ปมกด ..................................................................................................................... 68

7-Segment .............................................................................................................. 69

วงจรควบคมปมน า ..................................................................................................... 69

VHDL ..................................................................................................................... 70

พรอม (PROM) และแรม (RAM) ............................................................................... 72

การมดสายไฟหลายๆ เสนรวมกน ................................................................................. 74

หนวยควบคม (Control Unit) ...................................................................................... 74

วงจรคณเชงผสม ........................................................................................................ 81

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 84

แบบฝกหด ................................................................................................................ 84

รายการอางอง ............................................................................................................ 84

9. สแตกซพย .......................................................................................................................... 85

สวนประกอบของสแตกซพย ......................................................................................... 85

สถาปตยกรรมชดค าสง (Instruction Set Architecture) ..................................................... 86

Verilog HDL ............................................................................................................ 90

Program Counter (PC) .............................................................................................. 93

Memory Address Register (MAR) .............................................................................. 94

Multiplexor (MUX) .................................................................................................. 95

Memory (MEM) ...................................................................................................... 95

Instruction Register (IR) ............................................................................................ 95

Top of Stack (TOS) .................................................................................................. 95

Temporary (TMP) .................................................................................................... 95

Page 7: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | จ

Arithmetic Logic Unit (ALU) .................................................................................... 96

Data Stack (DS) และ Return Stack (RS) .................................................................... 96

Control Unit ............................................................................................................. 98

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 103

แบบฝกหด ................................................................................................................ 103

รายการอางอง ........................................................................................................... 103

10. การโปรแกรมสแตกซพย ....................................................................................................... 104

โปรแกรมแรก ........................................................................................................... 104

ตวแปร (Variable) .................................................................................................... 104

อารเรย (Array) ........................................................................................................ 105

การแยกท าตามเงอนไข (Conditional Branch) ................................................................ 105

การท า if-then ........................................................................................................... 106

การท า if-else ........................................................................................................... 107

การสราง TOS ส าหรบค าสง IF ..................................................................................... 108

การท า for-loop ......................................................................................................... 110

การท า while-loop ..................................................................................................... 110

การเรยกฟงกชน (Function Call) ................................................................................. 111

การเรยกซ า (Recursive Call) ...................................................................................... 112

ขอจ ากดของสแตกซพย ............................................................................................... 115

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 115

แบบฝกหด ................................................................................................................ 115

รายการอางอง ............................................................................................................ 118

11. แอลซทรโพรเซสเซอร ............................................................................................................ 119

คณลกษณะโดยทวๆ ไปของของแอลซทร ........................................................................ 119

โหมดเลขทอย (Addressing Mode) ............................................................................... 120

รหสเงอนไข (Condition Code) .................................................................................... 120

สถาปตยกรรมชดค าสง (Instruction Set Architecture) ..................................................... 120

ตวอยางการโปรแกรมดวยภาษาแอสเซมบล ..................................................................... 122

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 124

แบบฝกหด ................................................................................................................ 125

รายการอางอง ............................................................................................................ 130

12. การโปรแกรมแอลซทรโพรเซสเซอร ......................................................................................... 131

ภาษาแอสเซมบลของแอลซทร ...................................................................................... 131

ตวแปร (Variable) .................................................................................................... 132

แถวล าดบ (Array) .................................................................................................... 132

กระโดด (Jump) ........................................................................................................ 133

ค าสง if-then ............................................................................................................ 133

ค าสง if-else ............................................................................................................. 133

การสรางบตเงอนไข (Condition Bit) ............................................................................. 134

การท า for-loop ......................................................................................................... 134

Page 8: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ฉ

การท า while-loop ..................................................................................................... 134

การเรยกฟงกชน (Functional Call) และการเรยกซ า (Recursive Call) ................................ 135

อปกรณอนพตเอาตพตทแมพลงไปบนหนวยความจ า (Memory-mapped I/O) .................... 138

คยบอรด (Keyboard) ................................................................................................. 138

มอนเตอร (Monitor) .................................................................................................. 139

กบดก (Trap) ............................................................................................................ 139

อนพตเอาตพตทถกขบดวยการขดจงหวะ (Interrupt-driven I/O) ...................................... 141

เรจสเตอรสถานะของโพรเซสเซอร (Processor Status Register) ......................................... 144

ล าดบความส าคญของการขดจงหวะ (Interrupt Priority) ................................................... 144

เมอเกดการขดจงหวะแลวระบบปฏบตการจะตองท าอะไรบาง ............................................. 145

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 145

แบบฝกหด ................................................................................................................ 146

รายการอางอง ............................................................................................................ 151

13. สถาปตยกรรมคอมพวเตอร .................................................................................................... 152

การท างานแบบสายทอ (Pipeline) ................................................................................. 152

Superscalar ............................................................................................................... 156

Very Long Instruction Word (VLIW) ......................................................................... 157

Multithreading .......................................................................................................... 158

Multi-core ............................................................................................................... 159

การแพรความคลาดเคลอน (Error Diffusion) ................................................................. 160

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 163

แบบฝกหด ................................................................................................................ 163

รายการอางอง ............................................................................................................ 163

14. โครงงานเครองคดเลข ........................................................................................................... 164

คณสมบตของเครองคดเลข .......................................................................................... 164

ขอคดในการออกแบบ ................................................................................................. 165

เกณฑการใหคะแนน ................................................................................................... 166

15. ควอนตมคอมพวเตอร ........................................................................................................... 168

ควบต (Qubit) .......................................................................................................... 168

ควอนตมเรจสเตอร (Quantum Register) ....................................................................... 169

วงจรควอนตม (Quantum Circuit) ................................................................................ 169

ผลคณเทนเซอร (Tensor Product) ................................................................................ 170

อลกอรทมของ Deutsch ............................................................................................... 171

เอกสารประกอบ (ส าหรบอานเพมเตม) .......................................................................... 173

รายการอางอง ............................................................................................................ 173

Page 9: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ช

สอการสอน (ซอฟตแวร) 174

1. โปรแกรม Karnaugh Minimizer .............................................................................................. 174

2. โปรแกรม LogicWorks .......................................................................................................... 174

3. โปรแกรม Stack CPU simulator ............................................................................................. 174

4. โปรแกรม LC3 simulator ...................................................................................................... 175

ผลงานวจยของผสอน 176

1. การออกแบบ Stack CPU ดวยภาษา Verilog เพอสงเคราะหบน FPGA .......................................... 177

2. An FPGA implementation of a fixed-point square root operation .............................................. 192

3. Data dependency reduction in dynamic programming matrix .................................................... 195

4. A Hardware implementation of the compact genetic algorithm .................................................. 198

5. An implementation of compact genetic algorithm on a quantum computer .................................. 204

Page 10: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ซ

ประมวลรายวชา

รหสวชา 2301274

ชอวชา ระบบคอมพวเตอร (Computer Systems) ชอยอ COMP SYS

จ านวนหนวยกต 3 (3-0-9) เปนการบรรยาย 3 ชวโมง/สปดาห

ภาคการศกษาทเปดสอน ทวภาค ภาคปลาย ปการศกษา 2555

คณะ วทยาศาสตร

ภาควชา คณตศาสตรและวทยาการคอมพวเตอร

ผสอน ผชวยศาสตราจารย ดร. ชชวทย อาภรณเทวญ (หอง 1309/17 อาคารมหาวชรณหศ)

อเมล: [email protected]

เวบไซต: http://pioneer.netserv.chula.ac.th/~achatcha

เงอนไข PRER 2301260 or 2301271

สถานภาพ วชาบงคบ

หลกสตร วทยาศาสตรบณฑต สาขาวชาวทยาการคอมพวเตอร

ระดบ ปรญญาตร

เน อหารายวชา

(Course Description)

การแทนขอมล ตรรกะและวงจร วงจรเชงผสม วงจรเชงล าดบ การจดระบบคอมพวเตอร

พนฐาน สถาปตยกรรมของชดค าสง หนวยประมวลผลกลาง ล าดบชนของหนวยความจ า

สถาปตยกรรมคอมพวเตอร

Data representation; logic and circuits; combinational circuits; sequential circuits;

basic computer organization; instruction set architecture; central processing unit;

memory hierarchy; computer architecture.

รายการสอน

(Course Outline)

วตถประสงคทวไป

นสตมความรพนฐานเกยวกบการท างานของคอมพวเตอร เขาใจการท างานของ Gates,

Combinational circuits, Sequential circuits, Microprocessor, Memory, Instruction sets,

Assembly languages, I/O, Interrupt, Trap, Computer Architecture

วตถประสงคเชงพฤตกรรม

วตถประสงคเชงพฤตกรรม

วธการ

สอน

วธการ

ประเมน

1 อธบายการแทนจ านวนตวเลขในระบบคอมพวเตอรแบบ

2’complement, fixed point, และ floating point

บรรยาย สอบ

2 อธบายหลกการท างานของทรานซสเตอรและเกตพนฐาน บรรยาย สอบ

3 อธบายหลกการท างานของ latch, flipflop และ register บรรยาย สอบ

4 อธบายหลกการท างานของ finite-state machine บรรยาย สอบ

5 อธบายหลกการท างานของ SRAM, DRAM, cache และ

memory hierarchy

บรรยาย สอบ

6 ออกแบบวงจรเชงผสมและวงจรเชงล าดบดวย

Karnaugh Map และ CAD tools

บรรยาย โครงงาน

7 อธบายหลกการท างานของ CPU และชดค าสงของ CPU บรรยาย สอบ

Page 11: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ฌ

8 เขยนโปรแกรมดวยชดค าสงของ CPU บรรยาย สอบ

9 อธบายหลกการท างานของ memory-mapped I/O,

interrupt และ trap routines

บรรยาย สอบ

10 อธบายหลกการท างานของ computer architecture แบบ

pipeline, super-scalar, VLIW, hyper-thread, และ

multi-core

บรรยาย สอบ

แผนการสอน

(Lesson Plan)

แผนการสอนในแตละสปดาห (สปดาหละ 3 ชวโมง)

สปดาห

ท เนอหาทสอน

วตถประสงค

เชงพ

ฤตกรรม

การมอบ

หมายงาน

1 Number systems

(2’complement, fixed point, floating point)

1,6 แบบฝกหด

2 Transistor and basic gate 2,6 แบบฝกหด

3 Latch, flipflop, register 3,6 แบบฝกหด

4 Finite-state machine 4,6 แบบฝกหด

5 Memory, SRAM, DRAM, cache 5,6 แบบฝกหด

6 การออกแบบวงจรดจตลดวย CAD tools (1/2) 6 โครงงาน

7 การออกแบบวงจรดจตลดวย CAD tools (2/2) 6 โครงงาน

8 Instruction set architectures (1/2) 7 แบบฝกหด

9 Instruction set architectures (2/2) 7 แบบฝกหด

10 Data path และการท างานของ CPU (1/2) 7 แบบฝกหด

11 Data path และการท างานของ CPU (2/2) 7 แบบฝกหด

12 การเขยนโปรแกรมดวยชดค าสงของ CPU (1/2) 8 แบบฝกหด

13 การเขยนโปรแกรมดวยชดค าสงของ CPU (2/2) 8 แบบฝกหด

14 Memory-mapped I/O, interrupt และ trap

routine

9 แบบฝกหด

15 Computer architecture, pipeline, super-scalar,

VLIW, hyper-threading, multi-core

10 แบบฝกหด

Page 12: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ญ

วธจดการเรยนการสอน สอนแบบมการบรรยาย อภปรายโดยผสอน นสตคนควาหาขอมลจากหนงสออานประกอบ

นสตฝกปฏบตจากโครงงานออกแบบเครองคดเลข

สอการสอน

เขยนกระดาน สอน าเสนอในรปแบบ PowerPoint สออเลกทรอนกส เวบไซต อเมล

ซอฟตแวร

โปรแกรม Karnaugh Minimizer

โปรแกรม LogicWorks

โปรแกรม Stack CPU simulator

โปรแกรม LC3 simulator การวดผลการเรยน

คะแนนโครงงาน 20%

คะแนนสอบกลางภาค 40%

คะแนนสอบปลายภาค 40%

การตดเกรดแบบองกลมจากคะแนนรวม 100%

เอกสารทใหน าเขาหองสอบ อนญาตใหเฉพาะเอกสารทนสตเขยนดวยลายมอตวเอง

เทานน หามน าหนงสอ ต ารา เอกสารประกอบการสอน หรอส าเนาของเอกสาร

ประเภทใดๆ กตามเขามาในหองสอบ

การน าเลคเชอรของรนพหรอเลคเชอรทใหคนอนจดใหเขาไปในหองสอบ ถอเปน

การทจรต มโทษได F และพกการศกษาอยางนอย 1 ภาคการศกษา

การขาดสอบกลางภาคหรอปลายภาคโดยไมมเหตผลอนสมควร และคณะฯ ไม

อนมตใหจดสอบซอม จะตดเกรดตามคะแนนเกบเทาทม รายชอหนงสออาน

ประกอบ

หนงสอบงคบ

ต าราเรยนวชา 2301274 Computer Systems (ระบบคอมพวเตอร)

ดาวนโหลดจากเวบไซตของรายวชา

http://161.200.126.13/MyWebsite/2301274.html

หนงสออานเพมเตม

Capilano Computing, LogicWorks 5 Interactive Software, Prentice Hall,

2003.

Philip Koopman, Stack Computers: the new wave, reprinted and distributed

by Mountain View Press, 1989.

Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From

bits & gates to C & beyond, McGraw-Hill, 2nd edition, 2003.

John L. Hennessy and David A. Patterson, Computer Organization and

Design: The Hardware/Software Interface, Morgan Kaufmann, 4th edition,

2011.

John L. Hennessy and David A. Patterson, Computer Architecture: A

Quantitative Approach, Morgan Kaufmann, 4th edition, 2006.

การประเมนผลการเรยน

การสอน การประเมนการสอน

ผานระบบ CU-CAS

การปรบปรงผลการประเมนการสอนครงทผานมา

ไมม

Page 13: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ฎ

เวลาเรยนและวนสอบ เวลาเรยน

วนองคารเวลา 10.00 – 12.00 น. ตก MHMK หอง 201

วนพฤหสบดเวลา 10.00 – 11.00 น. ตก MHMK หอง 208

วนสอบกลางภาค

ในตาราง (28 ธ.ค. 2555 เวลา 8:30 - 11:30 น.)

วนสอบปลายภาค

ในตาราง (7 ม.ค. 2556 เวลา 8:30 - 11:30 น.)

Page 14: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 1

บทท 1 ววฒนาการของคอมพวเตอร

วตถประสงคของการเรยนในบทน

• อธบายววฒนาการของคอมพวเตอรนบจากอดตถงปจจบน

• อธบายความแตกตางระหวาง

คอมพวเตอรเชงกล (mechanical computer) vs. คอมพวเตอรแบบอเลกทรอนกส (electronic computer)

คอมพวเตอรแบบแอนะลอก (analog computer) vs. คอมพวเตอรแบบดจทล (digital computer)

นยามของคอมพวเตอร

พจนานกรมของ Cambridge ใหนยามของคอมพวเตอร (computer) วาหมายถง เครองจกรแบบอเลกทรอนกสซง

ใชเกบ จดการ และคนหาคา ตวเลข และรปภาพ เพอทาการคานวณและควบคมเครองจกรอนๆ (an electronic

machine which is used for storing, organizing and finding words, numbers and pictures, for doing

calculations and for controlling other machines) แตกวาจะมาเปนเครองคอมพวเตอรอยางทเราร จกกนใน

ปจจบนนน คอมพวเตอรมววฒนาการมาอยางยาวนาน แตในทนจะขอกลาวถงเฉพาะเหตการณทสาคญจากอดต

จนถงปจจบนตามลาดบดงน

การนบและการแทนจานวนดวยตวเลข

การคานวณเชงตวเลขมพนฐานมาจากการนบ มนษยนาจะร จกการนบโดยธรรมชาต ทงนเพอตองการรจานวนของ

สงทอยรอบๆ ตว โดยเรมนบจากหนง สอง และสาม ไปตามลาดบ เมอนบถงสบกจะครบจานวนนวมอทม ทาให

ตองขนหลกใหมเมอครบสบ นเปนเหตผลขอหนงวาทาไมเราไมใชเลขฐานอนๆ นอกจากเลขฐานสบ การนบและ

การแทนจานวนดวยตวเลขทาใหเกดการบวก ลบ คณ หาร และการคานวณอนๆ ตามมา อยางไรกตามในยคแรก

มนษยยงคงรจกเพยงจานวนนบ (natural numbers) เทานน ตวอยางเชน ตวเลขโรมนจะเรมนบจาก I, II, III, IV,

V, VI, VII, VIII, IV, X, … สงเกตวาไมมเลขศนย (0) ในระบบเลขโรมน การใชระบบเลขโรมนเปนอปสรรค

อยางยงตอการคานวณทางคณตศาสตร ลองนกถงการคณหรอการหารในระบบเลขโรมนวายากขนาดไหน ปจจบน

การแทนขอมลในระบบคอมพวเตอรตองใชเลขฐานสอง ซงประกอบดวยศนย (0) และหนง (1) หากไมมเลข

ศนยและระบบเลขฐานตางๆ เสยแลว คณตศาสตรและคอมพวเตอรกจะไมกาวหนาเลย

ตองขอบคณชาวอนเดยทเปนผประดษฐเลขศนยมาตงแตกอนสมยครสตกาล ในภาษาสนกฤตเรยกวา “ศนยะ”

(บาลเขยนวา “สญญะ” ในศาสนาพทธมหลกคาสอนทสาคญคอ “สญญตา” หมายถง สภาวะทวางจากความเปน

ตวตนหรออตตา) ตอมานกวทยาศาสตรชาวเปอรเซยนชอวา al-Khwārizmī ไดผสมผสานความรของกรกโรมน

และฮนด และอธบายการใชเลขศนยไวในหนงสอเลมทมชอเสยงคอ Arithmetic ซงตอมากคอ ระบบเลขอารบก

อยางทเราใชกนในปจจบน เลขฐานสบประกอบดวย 1, 2, 3, 4, 5, 6, 7, 8, 9, และ 0 (ถาเปนเลขฐานสองกจะ

ประกอบดวย 1 และ 0 เชน 1210 = 11002) นอกจากนเลขศนยยงทาใหเราเขยนจานวนทศนยมไดดวย เชน

123 / 1,000,000 เขยนแทนดวย 0.000123 เปนตน

Page 15: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 2

ลกคด (abacus)

มนษยมความพยายามทจะสรางเครองจกรเพอชวยทาการคานวณมานานแลว ตวอยางหนงคอลกคด มหลกฐานวา

มการใชลกคดเปนครงแรกตงแตสมยซเมเรยน (Sumerian, 2700–2300 BC) ลกคดในประเทศไทยสวนใหญจะ

เปนของจน (รปท 1.1) ลกคดเปนของจาเปนสาหรบการคาขาย เชน เอาไวคดเงน ทอนเงน ทาบญช เปนตน ใน

ปจจบนคงจะไมมใครใชลกคดแลว เพราะใชงานยาก ตองเรยนวธใชและฝกใหชานาญ สานวนทวา “ดดลกคดใน

รางแกว” คงจะคอยๆ หายไปพรอมกบการเขามาแทนทของเครองคดเลขแบบอเลกทรอนกส

รปท 1.1 ลกคดของจน (รปจาก Wikimedia Commons)

เครองคดเลขของปาสกาล (Pascal's calculator)

ในป ค.ศ. 1642 Blaise Pascal ไดประดษฐเครองคดเลขเชงกล (mechanical calculator) เพอชวยในการจดเกบ

ภาษในฝรงเศส (รปท 1.2) เครองคดเลขนสามารถทาการบวกลบไดตรงๆ และทาการคณหารโดยวธการทา

(บวกลบ) ซาหลายๆ ครง เครองคดเลขของปาสกาลเปนเครองคดเลขเชงกลเพยงแบบเดยวททางานไดใน

ศตวรรษท 17 และเปนตนแบบของการพฒนาเครองคดเลขเชงกลอนๆ หลงจากนไปอกเกอบสามรอยปถงจะม

เครองคดเลขแบบอเลกทรอนกส

รปท 1.2 เครองคดเลขของปาสกาล (รปจาก Wikimedia Commons)

Page 16: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 3

Difference Engine และ Analytical Engine

ในป ค.ศ. 1822 Charles Babbage เสนอแนวคดในการใชเครองจกรเพอคานวณตาราง เชน ตารางของโพลโน

เมยลฟงกชน เพอใชในการประมาณคาลอการทมหรอตรโกณมต ซงจาเปนสาหรบการนาทางและงานทาง

วทยาศาสตร โดยตงชอวา Difference Engine (รปท 1.3) โดยไดรบทนสนบสนนจากรฐบาลองกฤษ อยางไรก

ตามการสรางเครองจกรทมความแมนยาสงในยคนนเปนไปดวยความยากลาบากและมคาใชจายมาก ทาใหรฐบาล

องกฤษยกเลกการพฒนา Difference Engine ในป 1842

ในป ค.ศ. 1837 Charles Babbage ไดนาเสนอ Analytical Engine (รปท 1.4) ซงเปนคอมพวเตอรเชงกล

สาหรบทางานทวๆ ไปดวย กลาวคอมหนวยคานวณและตรรกะ (arithmetic logic unit), การไหล (flow) ของ

คาสง เชน if-else หรอ loop, หนวยความจา (memory) ซงเปนพนฐานของคอมพวเตอรในปจจบน ในรปทาง

ขวามอคอบตรเจาะร (punch card) สาหรบใชทาโปรแกรม แตสดทายโครงการพฒนา Analytical Engine กถก

ยกเลกไปพรอมกบ Difference Engine ดวยปญหาทางการเงนตามทกลาวไวขางตน ภายหลง London Science

Museum ไดพฒนา Difference Engine ตอจนเสรจสมบรณ เนองในโอกาสครบรอบวนเกด 200 ปของ Charles

Babbage ในป ค.ศ. 1991

รปท 1.3 Difference Engine (รปจาก Wikimedia Commons)

รปท 1.4 Analytical Engine (รปจาก Wikimedia Commons)

Page 17: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 4

Enigma และ Lorenz SZ40

Enigma และ Lorenz SZ40 (รปท 1.5) เปนชอของอปกรณทใชการเขารหสและถอดรหสของนาซเยอรมนในชวง

สงครามโลกครงทสอง แนนอนวามความพยายามของฝายสมพนธมตร (องกฤษ) ในการทจะถอดรหสทรบสงผาน

เครองพวกน และนาไปสการพฒนาเครองคอมพวเตอรแบบอเลกทรอนกสทมประสทธภาพสง

รปท 1.5 Enigma machine (ซาย) และ Lorenz SZ40 machine (ขวา) (รปจาก Wikimedia Commons)

Bombe และ Colossus Computer

ในป ค.ศ. 1939 Alan Turing นกคณตศาสตรชาวองกฤษและผวางรากฐานของวทยาการคอมพวเตอร ได

ออกแบบเครองคานวณแบบแมเหลกไฟฟา (electromechanical) ทมชอวา Bombe (รปท 1.6) เพอใชถอดรหสท

รบสงระหวางเครอง Enigma อยางไรกตาม Bombe ใชไดเฉพาะกบการเขารหสของ Enigma นน ไมสามารถ

นาไปใชกบการคานวณทวๆ ไปได ในป ค.ศ. 1943 คอมพวเตอร Colossus (รปท 1.6) ซงถกออกแบบโดย

วศวกร Tommy Flowers และนกคณตศาสตรชาวองกฤษ Max Newman เพอถอดรหส Lorenz cipher เปน

คอมพวเตอรแบบอเลกทรอนกสเครองแรกทโปรแกรมได แมวาจะโปรแกรมไดคอนขางจากดเมอเทยบกบ

คอมพวเตอรในปจจบน Bombe ใชอปกรณสวตชทเรยกวารเลย (relay) หลายๆ ตวมาประกอบกนเปนวงจรเพอ

ประมวลผลทางตรรกะ รเลยเปนสวตชทควบคมการปดเปดดวยไฟฟา คอถาใหกระแสหรอแรงดนไฟฟาจะ

เหนยวนาใหเกดสนามแมเหลกดนใหสวตชปดหรอเปดได Bombe จงเปนคอมพวเตอรแบบแมเหลกไฟฟาเพราะ

ควบคมดวยไฟฟาแตยงมสวตชทเคลอนทไดจากการเหนยวนาแมเหลก ตางจาก Colossus ทใชหลอดสญญากาศ

(vacuum tube) แทนรเลย หลอดสญญากาศทาหนาทเปนสวตชเหมอนรเลย แตไมมชนสวนภายในหลอดท

เคลอนไหวเลย จงทาให Colossus เปนคอมพวเตอรแบบอเลกทรอนกสเครองแรก

Page 18: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 5

รปท 1.6 Bombe (ซาย) และ Colossus Computer (ขวา) (รปจาก Wikimedia Commons)

Z1 computer

Z1 (รปท 1.7) เปนคอมพวเตอรเชงกลทออกแบบโดย Konrad Zuse ระหวาง ค.ศ. 1935 – 1936 ในเยอรมน

กอนทสงครามโลกครงทสองจะเรมขนในป ค.ศ. 1939 Z1 ประกอบดวยชนสวนทเปนโลหะบางๆ ขบเคลอนดวย

มอเตอรไฟฟา (1 Hz, หมน 1 รอบตอวนาท) และไมมสวนประกอบทเปนรเลยเลย ทนาทงคอ Z1 สามารถ

โปรแกรมได และมมอดลตางๆ เหมอนคอมพวเตอรในปจจบน เชน หนวยควบคม หนวยความจา หนวย

ประมวลผลและตรรกะ หนวยรบสงขอมล ฯลฯ Z1 เปนโครงการสวนตวของ Konrad Zuse ไมไดเปนโครงการท

ไดรบการสนบสนนดานการเงนจากรฐบาลเหมอนคอมพวเตอรตนแบบอนๆ Zuse ใชอปกรณตางๆ เทาทพอหา

ได และพฒนา Z1 ขนในหองชดของเขาในกรงเบอรลน Z1 ทางานไดไมคอยเสถยรมากนกเนองจากตองการการ

ประสานเวลา (synchronization) ทแมนยามาก Z1 ถกทาลายเสยหายโดยการท งระเบดของฝายสมพนธมตร

Zuse สราง Z1 ขนใหมและเสรจในป ค.ศ. 1989

Page 19: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 6

รปท 1.7 Z1 computer (รปจาก Wikimedia Commons)

ENIAC และ UNIVAC

ENIAC (รปท 1.8) เปดตวครงแรกในป ค.ศ. 1946 เปนอเลกทรอนกสคอมพวเตอรเครองแรกสาหรบใชงาน

ทวไป (general purpose) หรอมคณสมบตทเรยกวา Turing complete หรอ computationally universal, ENIAC

ถกออกแบบมาสาหรบการคานวณตารางการยงปนใหญของกองทพสหรฐ แต ENIAC กมความยดหยนในการ

โปรแกรมสง สามารถโปรแกรมใหแกปญหาทางการคานวณใดใดกได ทาใหเกดความตนตวทจะใชคอมพวเตอร

เพอชวยงานตางๆ ในอตสาหกรรมและวทยาศาสตร ผออกแบบ ENIAC คอ John Mauchly และ J. Presper

Eckert, University of Pennsylvania ไดแยกตวออกไปตงบรษทใหม เนองจากมปญหาดานสทธบตรกบ

มหาวทยาลย และพฒนาคอมพวเตอรทมชอวา UNIVAC ใหกบ Bureau of the Census, USA

รปท 1.8 ENIAC (รปจาก Wikimedia Commons)

คอมพวเตอรเครองแรกทใชทรานซสเตอร

ถงแมวาหลอดสญญากาศจะทางานแบบอเลกทรอนกสแตกมขอเสยคอ มขนาดใหญและมอายการใชงานสน

ทรานซสเตอร (transistor) เปนอปกรณทเขามาแทนทหลอดสญญากาศ มหลกการทางานเหมอนกนคอ เปนสวตช

Page 20: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 7

ปดเปดทควมคมดวยไฟฟา และไมมชนสวนทเคลอนไหว แตทรานซสเตอรมขนาดเลกและใชงานไดทนทานกวา

มาก ท University of Manchester ไดมการทดลองใชคอมพวเตอรแบบทรานซสเตอรเปนครงแรกในป ค.ศ.

1953 หลงจากนนคอมพวเตอรกเรมแพรเขาไปในบรษทเอกชนและหนวยงานตางๆ แตยงไมมอตสาหกรรมการ

ผลตคอมพวเตอรเพอจาหนายใหกบบคคลทวไป

IBM และ Fortran

บรษท IBM กอตงในป ค.ศ. 1911 โดยรวมบรษทของ Herman Hollerith และ Thomas J. Watson เขาดวยกน

แลวเปลยนชอบรษทเปน IBM ในป ค.ศ. 1924 IBM เปนผเลนหลกในอตสาหกรรมการผลตคอมพวเตอรมา

ตงแตแรก โดยผลตเครองคานวณตาราง (tabulating equipment) ทมชอวา Hollerith machine ใหกบรฐบาล

สหรฐอเมรกาเพอทาขอมลสามะโนประชากรในป 1890 (รปท 1.9) การยายถนฐานของประชากรเขาไปใน

สหรฐอเมรกาทาใหจานวนประชาการเพมข นอยางรวดเรว อตราการเพมข นของประชากรคดเปนคาเฉลย 32%

ตอป (ค.ศ. 1800 - 1890) ในป ค.ศ. 1890 สหรฐอเมรกากมประชากรถง 62 ลานคนแลว Hollerith machine

ใชบตรเจาะรในการเกบขอมล เชน บตรเจาะร 1 ใบเกบขอมลประชากร 1 คน เมอตองการประมวลผลกโหลด

บตรทงหมดใสลงไปในเครอง ในยคแรกถงแมวาจะเรมมคอมพวเตอรใชกนบางแลวในหนวยงานของรฐบาลและ

ภาคธรกจ การโปรแกรมใหคอมพวเตอรทางานไดยงเปนเรองยากมาก เชน ตองโปรแกรมดวยภาษาเครอง

(machine language) ทเปนรหสตวเลขบนบตรเจาะร เปนตน นวตกรรมทสาคญของ IBM ทชวยขยายตลาดงาน

ดานซอฟตแวรคอภาษา FORTRAN ทพฒนาข นในป ค.ศ. 1957 ทาใหสดสวนคาใชจายในการพฒนาระบบ

คอมพวเตอรเรมจะเปนซอฟตแวรมากกวาฮารดแวร (รปท 1.10) IBM ไดพฒนาคอมพวเตอรออกมาหลายรน

รนทเปนทนยมคอ คอมพวเตอรเมนเฟรม (mainframe) ในสกล IBM System/360 (1964), IBM

System/370 (1970), IBM System/390 (1990) อยางไรกตามคอมพวเตอรพวกนมราคาแพงเกนกวาทคน

ธรรมดาจะซอมาใชเปนของสวนตว ในป ค.ศ. 1981 IBM ไดเรมจาหนายคอมพวเตอรสวนบคคล (personal

computer, PC) ทเรยกวา IBM PC และกลายเปนมาตรฐานของอตสาหกรรมคอมพวเตอรในเวลาตอมา

รปท 1.9 Hollerith machine (ซาย) และเครองตอกบตร (ขวา) (รปจาก Wikimedia Commons)

Page 21: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 8

รปท 1.10 คาใชจายในการพฒนาระบบคอมพวเตอร [2]

ไมโครโพรเซสเซอรและดแรมตวแรก

ในยคแรกๆ จะเหนวาแผงวงจรของหนวยประมวลผล (ไมนบสวนทเปนหนวยความจา อปกรณอนพตเอาตพต

และสวนอนๆ) มขนาดใหญมาก เพราะประกอบดวยหลอดสญญากาศหรอทรานซสเตอรจานวนหลายรอยหลาย

พนชน แตเทคโนโลยในการผลตวงจรรวม (integrated circuit: IC) ทาใหสามารถปลกทรานซสเตอรจานวนมาก

ลงบนแผนซลกอน (silicon) บางๆ ทเรยกวาแวนผลก (wafer) ได หนวยประมวลผลทผลตดวยเทคโนโลยวงจร

รวมนเรยกวา ไมโครโพรเซสเซอร (microprocessor) ไมโครโพรเซสเตอรตวแรกผลตโดย Intel วางจาหนายในป

ค.ศ. 1971 มโคดเนมวา Intel 4004 (รปท 1.11) ประกอบดวยทรานซสเตอรประมาณ 2,300 ตว เทคโนโลย

วงจรรวมนสามารถนาไปผลตหนวยความจาทเรยกวา Dynamic Random Access Memory (DRAM) ไดดวย ด

แรมตวแรกทใชงานไดจรงและวางขายในทองตลาดคอ Intel 1103 (1024 ชอง x 1 บต) ค.ศ. 1970 กอนหนา

นนบรษท Honeywell ไดขอให Intel ผลตดแรมโดยใชทรานซสเตอรทออกแบบโดย Honeywell แตผลทไดคอ

Intel 1102 มปญหามาก Intel จงเรมออกแบบเองและระวงไมใหขดแยงกบ Honeywell ไมโครโพรเซสเตอรใน

ปจจบน เชน Intel 10-Core Xeon Westmere-EX มทรานซสเตอรมากถง 2.6 พนลานตว บนดาย (die) ขนาด

เพยง 512 mm2 เทานน (รปท 1.12)

รปท 1.11 Intel 4004 (รปจาก Wikimedia Commons)

Page 22: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 9

รปท 1.12 ดาย (die) ขนาด 51.92 mm2 ของ Intel Atom (ซาย) ไมโครโพรเซสเซอรทม 2 ดาย (ขวา)

(รปจากอนเทอรเนต)

คอมพวเตอรสวนบคคลและอนเทอรเนต

เทคโนโลยวงจรรวมทาใหการผลตไมโครโพรเซสเซอรและหนวยความจาซงเปนอปกรณหลกของคอมพวเตอรทา

ไดงายและมราคาถกลง ทาใหเกดการใชคอมพวเตอรสวนบคคลแพรหลายมากขน และเมอ IBM PC กลายเปน

มาตรฐานอตสาหกรรม ทาให IBM ไมไดเปนผผลตแตเพยงรายเดยวอกตอไป บรษทอนๆ สามารถผลต

คอมพวเตอรสวนบคคลหรอบางชนสวนทมคณสมบตตามมาตรฐานทกาหนด และชนสวนเหลานสามารถทางาน

รวมกนไดแมวาจะผลตมาจากคนละบรษท อตสาหกรรมคอมพวเตอรสวนบคคลทาใหเกดบรษทใหมๆ ข น

มากมาย บรษทเหลานผลตทงฮารดแวรและซอฟตแวรเพอปอนตลาดคอมพวเตอรสวนบคคลทมผใชงานเพมขน

อยางรวดเรว บรษทฮารดแวร เชน Intel, AMD, Kingston, Seagate, Western Digital บรษทซอฟตแวร เชน

Microsoft, Apple, Adobe เปนตน ปจจยสาคญททาใหจานวนคอมพวเตอรสวนบคคลทวโลกเพมขนอยางรวดเรว

คอ การแลกเปลยนขอมลขาวสารบนอนเทอรเนต เชน เวบไซต อเมล และเครอขายสงคมออนไลน การเพมข น

ของจานวนผใชงานอนเทอรเนตแสดงในรปท 1.13

รปท 1.13 การเพมขนของจานวนผใชงานอนเทอรเนต

(รปจาก Measuring the Information Society 2012 โดย International Telecommunication Union - ITU)

Page 23: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 10

แอนะลอก (analog) vs. ดจทล (digital)

กระแสหลกของคอมพวเตอรในปจจบนกยงคงเปนแบบอเลกทรอนกส คอใชทรานซสเตอรเปนหลก กนพลงงาน

ไฟฟา และไมมชนสวนทเคลอนไหว นอกจากนยงเปนแบบดจทล (digital) ดวย ซงมลกษณะการทางานทตรงขาม

กบแบบแอนะลอก (analog) การประมวลผลแบบแอนะลอกจะใชแรงดนไฟฟาแทนคาของตวแปร ในขณะทแบบ

ดจทลจะใชระบบเลขฐานสองคอใหคาแรงดนทนอยกวา 2.5 โวลต แทนคา 0 และคาแรงดนทมากกวา 2.5 โวลต

แทนคา 1 ดงนนอาจจะใชคาแรงดน 0 โวลต (low) แทนคา 0 และใชคาแรงดน 5 โวลต (high) แทนคา 1 จะใช

คาแรงดนอนๆ นอกเหนอจากนกได แตพยายามใหอยหางๆ เสนแบงระหวาง 0 กบ 1 เพอลดความผดพลาดท

อาจจะเกดขน ลองดตวอยางในรปท 1.14

รปท 1.14 วงจรบวกแบบแอนะลอก (ซาย) และแบบดจทล (ขวา)

เพอใหระบบทเปนอะนาลอกและดจทลทางานรวมกนไดตองมอปกรณทใชแปลงสญญาณกลบไปกลบมาระหวาง

สองระบบนคอ analog-to-digital converter (A2D) และ digital-to-analog converter (D2A) ดงแสดงในรปท

1.15 รปซายแสดงใหเหนขอจากดของ A2D ทเกบขอมลแบบดจทลไดจากดเพยง 4 บต แตละบตอาจจะเปน 0

หรอ 1 ทาใหแทนคาจานวนเตมทตางกนได 16 คา เชน 0, 1, …, 15 แตสญญาณอะนาลอกใชแรงดนไฟฟาซง

เปนจานวนจรงและมคาทเปนไปไดไมจากด (infinite) เมอ A2D แปลงสญญาณอะนาลอกเปนดจทลทาใหคา

0.02 หายไป สวนรปขวาแสดงใหเหนความคลาดเคลอนของ D2A ทเตม 0.000001 โวลตให ในทางปฏบตเรา

ไมสามารถทาใหสญญาณแอนะลอกมคาทแนนอนได แตอาจจะพอรบประกนไดวาคลาดเคลอนไมเกนเทาไหร

เชน คลาดเคลอนไมเกนทศนยมตาแหนงทสอง เปนตน จะเหนวาขอดของระบบดจทลคอการเกบขอมลทถกตอง

และแมนยา ขอมลจะเปน 0 หรอ 1 เสมอ ไมมขอผดพลาดในการอานเขยนขอมล ตางจากอะนาลอกทอาจจะม

ความคลาดเคลอนของแรงดนไฟฟาได

รปท 1.15 A2D (ซาย) และ D2A (ขวา)

Page 24: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 11

ตวอยางของสญญาณแอนะลอกและดจทลทเราพบในชวตประจาวนคอระบบเครองเสยง (รปท 1.16) ขอมลเสยง

ตามธรรมชาตเปนขอมลแบบแอนะลอกและตอเนอง (continuous) บนแกนเวลาอยแลว ในรปบนจะเกบขอมล

เสยงในจานแมเหลก โดยเกบเปนแบบแอนะลอก แปลงสญญาณเสยงใหเปนสญญาณแมเหลกบนจาน แกนเวลาก

คอการหมนของจาน เครองเลนจะอานสญญาณแอนะลอกจากจานแมเหลกและสงตอไปยงลาโพง ลาโพงปกตกรบ

สญญาณแอนะลอกและแปลงเปนคลนเสยง ในรปกลางเกบขอมลเปนดจทล เชน 01101 บนแผนบนทกขอมล

เครองเลนจะอานขอมลดจทลแลวแปลงเปนสญญาณแอนะลอกกอนสงไปยงลาโพง รปลางแสดงวธทใชทา A2D

และ D2A เนองจากขอมลเสยงมความตอเนองในแกนเวลา จงตองใชวธการชกตวอยาง (sampling) เพอทา A2D

ทบางเวลาเทานน ทาใหแทนรปคลนไดดวยคา y1 ถง y9 ซงคาเหลานอาจจะคลาดเคลอนจากคาจรงไปบางดวย

ขอจากดของ A2D เมอจะเลนเสยงกตองแปลงคา y1 ถง y9 กลบมาเปนรปคลนทตอเนองโดยใชการประมาณคา

ในชวง (interpolation) เพอเชอมจดในแกนเวลา กจะมความคลาดเคลอนทเกดจากการประมาณคาในชวงดวย ทา

ใหไดรปคลนไมเหมอนเดม

มขอสงเกตวาสญญาณแอนะลอกทอานจากจานแมเหลกอาจจะคลาดเคลอนกนไปบางในการอานแตละครง และ

อาจจะคลาดเคลอนมากข นเมอจานแมเหลกเสอมอายลง แมจะยงเลนเพลงไดแตเสยงกเพยนไป แตในระบบ

ดจทลการอานขอมลจากแผนบนทกขอมลจะอานได 0 หรอ 1 เหมอนเดมทกครง เมอแผนบนทกขอมลคอยๆ

เสอมคณภาพลง เครองอานจะตองพยายามอานหลายครงมากขน เพราะเครองเลนร วาขอมลทอานไดผดจากการ

ตรวจหาความผดพลาด (error detection) ทาใหตองพยายามอานขอมลใหมเรอยๆ จนกวาจะไดขอมลทถกตอง

ถงแมวาจะตองอานซาหลายครง แตถาอานสาเรจ ขอมลดจทลทอานไดจะเหมอนเดมเสมอ ทกครง ไม

เปลยนแปลง อนนเปนคณสมบตทสาคญของระบบดจทล

Page 25: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 12

รปท 1.16 เครองเสยงแบบแอนะลอก (บน) แบบดจทล (กลาง) การประมวลผลสญญาณ (ลาง)

Page 26: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 13

เอกสารประกอบ (สาหรบอานเพมเตม)

ตวอยางการใชคอมพวเตอรเชงกลในทศตวรรษ 1950 เพอควบคมการยงปนจากเรอรบ

http://www.youtube.com/watch?v=mpkTHyfr0pM

ความคมชดหรอความละเอยด (resolution) ของสญญาณเสยงคออะไร

http://en.wikipedia.org/wiki/Resolution_(audio)

เทคโนโลยไมโครโพรเซสเซอรในอนาคตจะเปนเชนไร ลองอานบทความตอไปน

• The Future of Microprocessors, Communications of the ACM, 54(5), 67-77, 2011.

• Is Moore's Party Over?, Communications of the ACM, 54(11), 5, 2011.

• CPU DB: Recording Microprocessor History, Communications of the ACM, 55(4), 55-63,

2012.

• The data: 37 Years of Moore's Law, IEEE Spectrum, 45(5), 56, 2008.

• The tops in flops, IEEE Spectrum, 48(2), 48-54, 2011.

• ICs grow up, IEEE Spectrum, 49(1), 33-35, 2012.

ลองคนหาบทความใหมๆ ในวารสาร Communication of the ACM และ IEEE Spectrum โดยใชคาหลก

(keyword) วา “microprocessor” หรอคาหลกอนๆ ทเกยวของ

คนหาประวตศาสตรทเกยวกบคอมพวเตอรไดทวารสาร IEEE Annals of the History of Computing

แบบฝกหด

ลองคดและตอบคาถามตอไปน

1. เครองคดเลขตางจากคอมพวเตอรอยางไร

2. ใครสมควรจะไดรบการยกยองวาเปนผประดษฐคอมพวเตอรเครองแรกของโลก

3. กฎของมวร (Moore’s law) กลาววา

“The complexity for minimum component costs has increased at a rate of roughly a factor of two

per year. Certainly over the short term this rate can be expected to continue, if not to increase.

Over the longer term, the rate of increase is a bit more uncertain, although there is no reason to

believe it will not remain nearly constant for at least 10 years. That means by 1975, the number

of components per integrated circuit for minimum cost will be 65,000. I believe that such a large

circuit can be built on a single wafer.” (Electronics Magazine, April 19, 1965)

ในปจจบนและอนาคตอนใกลกฎของมวรจะยงคงเปนจรงอยหรอไม

Page 27: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 14

4. ขดจากดของการพฒนาสมรรถนะของไมโครโพรเซสเซอรคออะไร เราสามารถทจะผลตไมโคร

โพรเซสเซอรใหมทรานซสเตอรมากขน ทางานไดมากขนและเรวขนเรอยๆ อยางนนใชหรอไม

5. ในอนาคตสดสวนของผใชคอมพวเตอรสวนบคคล โนตบค แทบเบลต และสมารทโฟนจะเปนเชนไร

สมารทโฟนจะกนสวนแบงตลาดของอปกรณคอมพวเตอรไปหมดหรอไม

6. เนองจากอปกรณจาพวกแทบแบลตและสมารทโฟนตองใชพลงงานจากแบตเตอร ดงนนจะออกแบบไม

โครโพรเซสเซอรอยางไรเพอใหประหยดพลงงานหรอกนไฟนอยๆ

7. การปรบปรงประสทธภาพของไมโครโพรเซสเซอร เชน การเพมความเรวของสญญาณนาฬกา (Hz) การ

ออกแบบชดคาสงใหม การออกแบบสถาปตยกรรมการคานวณแบบใหม สงเหลานลวนแตทาอยบน

พนฐานเดม ไมโครโพรเซสเซอรกยงคงเปนอปกรณทประกอบขนจากทรานซสเตอรททาหนาทเปนสวตช

ปดเปด การเปลยนแปลงทสาคญครงตอไปคอ การเปลยนจากวงจรอเลกทรอนกสไปใชกลศาสตร

ควอนตม (quantum mechanics) คอมพวเตอรแบบใหมนจะแตกตางจากคอมพวเตอรอเลกทรอนกส

อยางไร และจะมผลกระทบตอโลกอยางไร ลองคนดวยคาหลก quantum computing หรอ quantum

computation หรอ quantum computer

รายการอางอง

[1] William Aspray, Computer: A History of the Information Machine, Westview Press, 2nd edition, 2004.

[2] Paul E. Ceruzzi, A History of Modern Computing, The MIT Press, 2nd edition, 2012.

[3] Georges Ifrah, The Universal History of Computing: From the Abacus to the Quantum Computer, Wiley, 1st

edition, 2002.

[4] David L. Ferro, Computers: The Life Story of a Technology, The Johns Hopkins University Press, 1st

edition, 2007.

[5] http://en.wikipedia.org/wiki/Timeline_of_computing_hardware_2400_BC–1949

Page 28: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 15

บทท 2 ระบบจ ำนวน

วตถประสงคของการเรยนในบทน

อธบายการแทนขอมลประเภทจ านวนเตม จ านวนจรง และขอความ ดวยเลขฐานสอง

อานและเขยนเลขจ านวนเตมแบบสวนเตมเตมสอง (two’s complement)

บวกลบเลขจ านวนเตมแบบสวนเตมเตมสอง (two’s complement)

อานและเขยนเลขจ านวนจดลอยตว (floating-point number) แบบจดตรง (fixed-point) และแบบ IEEE 754

อานและเขยนตวอกษรในรหส ASCII

ประเภทของขอมลในคอมพวเตอร

เราอาจจะจ าแนกประเภทของขอมลทเกบในคอมพวเตอรไดเปน 3 กลมใหญๆ ดงน

จ านวนเตม (integer)

จ านวนจดลอยตว (floating-point number)

สายอกขระ (string)

คอมพวเตอรทเปนระบบดจทลเกบขอมลเปน 0 หรอ 1 เทานน ในบทนเราจะมาศกษาวาคอมพวเตอรเกบขอมล

ตางๆ ไดอยางไร

เลขฐำนสองและฐำนสบหก

เลขฐานสองมแค 0 กบ 1 เทานน ลองนบเลขฐานสองขนาด 4 บต เรมจากศนยกจะไดดงน

เลขฐานสบ เลขฐานสอง เลขฐานสบหก

0 0000 0

1 0001 1

2 0010 2

3 0011 3

4 0100 4

5 0101 5

6 0110 6

7 0111 7

8 1000 8

9 1001 9

10 1010 A

11 1011 B

12 1100 C

13 1101 D

Page 29: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 16

14 1110 E

15 1111 F

นสตควรจะทองเลขฐานตางๆ เหลานใหไดขนใจเหมอนทองสตรคณ เพราะจะตองใชในการแปลงเลขฐานสองเปน

ฐานสบหก เชน 196710 = 11110101111

2 แปลงเปนเลขฐานสบหกได 7AF วธแปลงใหเรมจากสบตทางขวา

สดกอน คอ 11112 = F

16 และสบตถดไป 1010

2 = A

16 และสบตสดทาย 111

2 = 7

16 เลขฐานสองทยาวมากๆ

เรานยมเขยนแทนดวยเลขฐานสบหก นสตควรจะจ าตวเลขตอไปนได

เลขยกก าลง เลขฐานสบ ค าอาน

20 1

21 2

22 4

23 8

24 16

25 32

26 64

27 128

28 256

29 512

210

1,024 1 Kilo (หนงพน)

211

2,048 2K

212

4,096 4K

216

65,536 64K

220

1,048,576 1 Mega (หนงลาน)

221

2,097,152 2M

222

4,194,304 4M

230

1,073,741,824 1 Giga (หนงพนลาน)

231

2,147,483,648 2G

232

4,294,967,296 4G

240

1,099,511,627,776 1 Tera (หนงลานลาน)

Page 30: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 17

กำรบวกลบเลขฐำนสอง

การบวกลบเลขฐานสองกท าเหมอนเลขฐานสบ การบวกใหเตมตวทดไปทางหลกซายมอ สวนการลบใหยมหลก

ทางซายมอมาใช

การบวก (7 + 3 = 10) การลบ (12 – 7 = 5)

1 1 2 1 2

0 1 1 1 1 1 0 0

0 0 1 1 + 0 1 1 1 -

1 0 1 0 0 1 0 1

กำรเกบจ ำนวนเตมแบบเลขฐำนสอง

คอมพวเตอรเกบจ านวนเตมบวกใดๆ เปนเลขฐานสองไดเสมอ เชน 45 = 1•25 + 0•2

4 + 1•2

3 + 1•2

2 +

0•21 + 1•2

0 = 101101

2 บตทอยทางซายสด เรยกวา Most Significant Bit (MSB) บตทอยทางขวาสด

เรยกวา Least Significant Bit (LSB) ปญหาทส าคญคอจะเกบเลขจ านวนเตมลบโดยใชสญลกษณแค 0 หรอ 1

ยงไง วธงายๆ คอ ให MSB เปนบตเครองหมาย (sign bit) ถาเปน 0 หมายถงจ านวนบวก ถาเปน 1 คอลบ แต

วธนท าใหเกด 0 สองตวคอ 00002 และ 1000

2 เพอแกปญหานจ าเปนตองใช สวนเตมเตมสอง (two’s

complement)

กำรเกบจ ำนวนเตมแบบสวนเตมเตมสอง

ในระบบสวนเตมเตมสอง (two’s complement) จ านวนเตมบวกจะเกบเปนเลขฐานสองตามปกต แตจ านวนเตม

ลบจะเกบเปนสวนเตมเตมสองของจ านวนเตมบวก ลองดตวอยางระบบสวนเตมเตมสองขนาด 4 บตทแทน

จ านวนตงแต -8 ถง +7 สงเกตวาถา MSB เปน 1 จะเปนคาลบเสมอ

0000 0 1000 -8

0001 1 1001 -7

0010 2 1010 -6

0011 3 1011 -5

0100 4 1100 -4

0101 5 1101 -3

0110 6 1110 -2

0111 7 1111 -1

การท าสวนเตมเตมสองคอการน าเลขฐานสองมากลบคาบตจาก 0 เปน 1 และจาก 1 เปน 0 (ผลลพธทไดเรยกวา

สวนเตมเตมหนง หรอ one’s complement) แลวบวกดวย 1 จะไดสวนเตมเตมสอง สงเกตวาสวนเตมเตมสองของ

เลขจ านวนเตมบวกจะมคาเทากบเลขจ านวนเตมลบ และสวนเตมเตมสองของเลขลบจะมคาเทากบเลขบวก เชน

Page 31: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 18

คาเรมตน invert (1’s complement) บวก 1 (2’s complement)

0101 (+5) 1010 1011 (-5)

1011 (-5) 0100 0101 (+5)

นอกจากนระบบสวนเตมเตมสองยงมคณสมบตทส าคญคอ ไมตองท าการลบ แตใหบวกกนแทน เชน 5 – 3 คอ

5 + (-3) = 0101 + 1101 = 0010 (2) หรอ –5 + 3 คอ (-5) + 3 = 1011 + 0011 = 1110 (-2) เปน

ตน คณสมบตนท าใหเราไมจ าเปนตองใชวงจรลบ ใชเฉพาะวงจรบวกกพอ

จะเหนวาในระบบสวนเตมเตมสองทม n บต คามากสดทเกบไดคอ 2n-1

-1 และคานอยทเกบไดคอ –2n-1

ดงนน

ถาตวแปร int ใชระบบสวนเตมเตมสองและมขนาด 32 บต คามากสดและคานอยสดจะเปน 2,147,483,647

และ -2,147,483,648 ตามล าดบ ซงกตรงกบคามากสดและคานอยสดของตวแปร int ในหลายๆ ภาษา

โปรแกรม เชน C และ JAVA เพราะภาษาโปรแกรมสวนใหญกมกจะเกบตวแปร int ดวยระบบสวนเตมเตมสอง

ตวแปร long กคอสวนเตมเตมสองขนาด 64 บต ท าใหเกบคาไดมากขน

กำรเกบจ ำนวนจดลอยตวแบบจดตรง

การเขยนเลขฐานสองเปนทศนยมกเหมอนกบเลขฐานสบ เชน 0.10112 = 1•2

-1 + 0•2

-2 + 1•2

-3 + 1•2

-4 =

1/2 + 1/8 + 1/16 = 0.6875 ในฐานสบ การแปลงเลขทศนยมจากฐานสบใหเปนฐานสองกคอยๆ ท าจาก

MSB ไป LSB เชน 0.14 ในฐานสบคอ 2-3

+ 2-7

+ 2-8

+2-9

+ 2-10

+ 2-12

+ 0.000107422 ดงนนเขยน

แบบจดตรง (fixed-point) โดยประมาณคอ 0.0010001111012 ยงขาดอก 0.000107422

10 ถงจะเตม 0.14

ปญหาประการเดยวของการใชจดตรงคอ จ านวนบตของตวแปรมจ ากด เชน ตวแปร float ในภาษาซมขนาดคงท

32 บต ดงนนถาวางจดทศนยมคอนไปทาง MSB กจะเกบสวนทเปนจ านวนเตมไดนอย แตเกบสวนทเปนทศนยม

ไดละเอยด ในทางกลบกนถาวางจดทศนยมคอนไปทาง LSB จะเกบสวนทเปนทศนยมไดนอยลง แตเกบสวนท

เปนจ านวนเตมไดมากขน ดวยปญหาดงกลาวท าใหเกดมาตรฐานทเรยกวา IEEE 754

กำรเกบจ ำนวนจดลอยตวแบบ IEEE 754

เนองจากจ านวนจรง (real number) มเปนจ านวนไมจ ากดและอาจจะมทศนยมทไมรจบ เชน คาพาย ( ) เปนตน

ดงนนจงเปนไปไมไดอยแลวทคอมพวเตอรจะสามารถเกบจ านวนจรงใดใดกไดในหนวยความจ าทมจ ากด แต

คอมพวเตอรสามารถเกบจ านวนจดลอยตว (floating-point) ได จ านวนจดลอยตวเปนการประมาณคาจ านวนจรง

โดยใช “แมนทสซา (mantissa)” และ “เอกซโพเนน (exponent)” ทมจ านวนบตจ ากด เชน 1.2345 แทนไดดวย

12345 x 10-4

แมนทสซาคอ 12345 และเอกซโพเนนคอ -4 IEEE 754 คอมาตรฐานในการเกบจ านวนจด

ลอยตว (floating point) แบบ single precision ใชทขนาด 32 บต (แบบ double precision ใชท 64 บต) 32 บต

ของ IEEE 754 แบงเปน 3 สวนดงน

MSB ขนาด 1 บตเรยกวาบตเครองหมาย (sign bit)

Unsigned 8 บตถดมาคอเอกซโพเนน (exponent)

ขอย าวาเอกซโพเนนเปน unsigned int และเปนบวกเสมอ

23 บตสดทายคอแมนทสซา (mantissa)

Page 32: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 19

การแปลงเปนเลขฐานสบใหท าดงน

สรางจ านวนแบบจดตรงข นมากอน โดยน าแมนทสซา ไปตอทาย 1. เชน สมมตวาแมนทสซาคอ

01101 จะได 1.01101

น าจ านวนแบบจดตรงทไดไปคณกบ 2(exponent – 127) ส าหรบเลขฐานสองการคณสองคอการเลอน

(shift) บตทงหมดไปทางซาย 1 หลก การหารสองคอการเลอนบตทงหมดไปทางขวา 1 หลก

ถาบตเครองหมายเปน 0 ใหใสเครองหมาย + กรณเปน 1 ใหใส -

ลองดตวอยาง single precision 32 บต ตอไปน

0 01111100 01000000000000000000000

sign bit = 0, exponent =124, fixed point = 1.01 ดงนนจ านวนนมคาเทากบ +1.01 x 2(124-127)

หรอเลอน

1.01 ไปทางขวา 3 บตจะได 0.00101 = 2-3

+ 2-5

= 0.15625 ในฐานสบ

การแปลงเลขฐานสบกลบไปเปน IEEE 754 (single precision) อาจจะยากกวาเลกนอย ขนแรกใหเขยนจ านวน

แบบจดตรงของเลขฐานสบใหไดกอน เชน (85 + 85/128) เขยนแบบจดตรงจะได 1010101.1010101 ขนท

สองจดใหสวนทเปนจ านวนเตมเปน 1 จะได 1.0101011010101 สวนทเปนทศนยม “0101011010101” คอ

แมนทสซา ถาไมครบ 23 บตกเตมศนยเขาไปทางขวาจนครบ ขนทสามค านวณเอกซโพเนน

1.0101011010101 x 2(exponent - 127)

= 1010101.1010101

จะไดเอกซโพเนนเทากบ 133 หรอ 10000101 (ถาไมครบ 8 บตกเตมศนยเขาไปทาง MSB) ขนสดทายเตมบต

สญลกษณใหถกตอง กจะไดจ านวนตามมาตรฐาน IEEE754 (single precision) 32 บตทม sign bit, exponent

และ mantissa ดงน

0 10000101 01010110101010000000000

ปกตเราจะเขยนเปนเลขฐานสบหก เพราะเขยนเปนเลขฐานสองมนยาว กท าการแปลงทละ 4 บต

0100 0010 1010 1011 0101 0100 0000 0000

4 2 A B 5 4 0 0

IEEE 754 แบบ double precision ใชท 64 บตกใชหลกการเดยวกน เพยงแตเอกซโพเนนและแมนทสซายาวขน

IEEE 754 เปนมาตรฐานของตวแปร float และ double ในหลายๆ ภาษาโปรแกรม

สดทายทกลาวมาทงหมดเกยวกบ IEEE 754 มขอยกเวน เมอเอกซโพเนนและแมนทสซามคาดงตอไป

Exponent Mantissa ความหมาย

0 0 คาศนย

28-1 (11111111) 0 Infinity

28-1 (11111111) non zero NaN (not a number)

0 non zero Denormalized number

1 to 28-2 any Normalized number

Page 33: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 20

Infinity คอจ านวนทมคณสมบตเหมอน ในคณตศาสตร

NaN คอ not a number เชน จ านวนทหารดวยศนย เปนตน

Denormalized number คอเวลาอานไมตองม 1. น าหนาแมนทสซา ใหเตมจดทศนยมหลงบตแรก (MSB)

ของแมนทสซาเลย เชน ถาแมนทสซาคอ 01101000101000000000000 ให

เอา 0.1101000101 คณกบ 2(exponent - 127)

คณกบ (-1)sign bit

Normalized number คอ เวลาอานคาตองม 1. น าหนาแมนทสซา เหมอนทอธบายไวในตอนแรก

ขอใหสงเกตวาถาใชแค 32 บต (ตวแปร float) จะเกบจ านวนแบบจดลอยทตางกนไดแค 232 จ านวนเทานน

คอมพวเตอรไมสามารถเกบทกจ านวนทเปนไปได แตจะเกบจ านวนทมคาใกลเคยงกนแทน (เหมอนใชวธปดเศษ

ทง) แลวจ านวนทตางกนทง 232 จ านวนนนกระจายอยบนเสนจ านวนอยางไร? หลกการออกแบบ IEEE754 กคอ

ใหกระจายกนอยหนาแนนในบรเวณทใชงานบอยๆ และกระจายกนอยนอยในบรเวณทไมคอยใชงาน จ านวนทเรา

ไมคอยไดใชงานคอ x เมอ |x| มคานอยๆ หรอเมอ |x| มคามากๆ ดรปท 2.1 ขดบนเสนจ านวนเปนการประมาณ

เพอใชอธบายเทานน ไมไดแสดงขอมลจรง สงเกตวาความหนาแนนจะอยท +1 และ -1 ลองคดดวาท าไม?

รปท 2.1 การกระจายของจ านวนแบบจดลอยตามมาตรฐาน IEEE 754

รหส ASCII และ UNICODE

การเกบขอมลทเปนสายอกขระ (string) กใชวธแยกสายอกขระเปนตวอกขระ (character) และก าหนดรหสทม

จ านวนบตคงทเพอแทนตวอกขระ รหส ASCII ยอมาจาก American Standard Code for Information

Interchange ดรปท 2.2 ตวอกขระในรหส ASCII มขนาด 8 บต เชน (ในวงเลบคอเลขฐานสบหก)

\n หรอ newline 0000 1010 (0A)

เสยง beep 1 ครง 0000 0111 (07)

0 (ศนย) 0011 0000 (30)

A 0100 0001 (41)

a 0110 0001 (61)

วธจ างายๆ คอใหจ าเฉพาะรหสของ 0, A, a เพราะ

B, C, … Z กอยถดจาก A

b, c, …, z กอยถดจาก a

1, 2, …, 9 กอยถดจาก 0

รหส ASCII นนมเฉพาะตวอกษรภาษาองกฤษ ตอมาไดมการประดษฐรหส Unicode ข น เพอใหมการเขา

รหสตวอกษรทเปนสากลส าหรบทกๆ ภาษาไมวาจะเปน องกฤษ ไทย จน ฯลฯ

Page 34: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 21

รปท 2.2 ตารางรหส ASCII (รปจาก Wikimedia Commons)

เอกสำรประกอบ (ส ำหรบอำนเพมเตม)

ลองดแนวคดในการออกแบบมาตรฐาน IEEE 754

IEEE standards 754 and 854 for Floating-Point Arithmetic. (เอกสารน ไมแจกฟร ตองซอจาก IEEE)

A Proposed Radix- and Word-length-independent Standard for Floating-point Arithmetic, IEEE

Micro, 4(4), 86-100, 1984.

What every computer scientist should know about floating-point arithmetic, ACM Computing

Surveys, 23(1), 5-48, 1991.

IEEE 754: An Interview with William Kahan, Computer, 31(3), 114-115, 1998.

นสตควรจะทราบวา Little Endian และ Big Endian คออะไร

http://en.wikipedia.org/wiki/Endianness

ปจจบนคอมพวเตอรและเวบไซตตางๆ ใชการเขารหสแบบ Unicode แทน ASCII กนหมดแลว

The Unicode Consortium (www.unicode.org)

รหส ASCII ใชทเกบขอมล 1 ไบตตอ 1 ตวอกขระ แลวรหส Unicode จะใชทเกบขอมลเทาใด ทดลอง

งายๆ โดยใชโปรแกรม Notepad บน Windows เลอก Save As แลวเลอก Encoding เปน ANSI หรอ

Unicode ทดลองทงภาษาองกฤษและภาษาไทยวาใชเนอทเกบขอมลเทากนหรอไม

แบบฝกหด

1. จงเขยนจ านวนตอไปนแบบสวนเตมเตมสองขนาด 8 บต ตอบเปนเลขฐาน 2

ก. -1

ข. 85

ค. -86

Page 35: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 22

ง. คาทนอยทสดในระบบ 2's complement ขนาด 8 บต

จ. คาทมากทสดในระบบ 2's complement ขนาด 8 บต

2. จงค านวณนพจนตอไปน แลวเขยนตอบเปนเลขฐานสบหก ผลลพธเปนสวนเตมเตมสองขนาด 16 บต

ก. x0482 + x1593 + x2604 + x3715

ข. (xABCD AND xFDEA) XOR (x5478 OR x1234)

ค. 12,345 (ฐานสบ)

ง. –123 x 25 (ฐานสบ)

3. จงเขยนจ านวนตอไปนตามมาตรฐาน IEEE754 (single precision) เขยนตอบเปนเลขฐานสบหก

ก. 0

ข. 777 + (777/1024)

ค. 3.14

ง. +infinity

จ. NaN

ฉ. 25 + 2

2 + 2

1 + 2

–2 + 2

–3 + 2

–10

ช. –infinity

ซ. –78 + (78/128)

4. x00345000 ตามมาตรฐาน IEEE 754 คอจ านวนใด ตอบเปนเลขฐานสบ (ตดไวเปนเศษสวนได)

5. จงแสดงคาของ x476F6F64 เมอชนดของขอมลเปนดงตอไปน

ก. เลขฐานสอง (unsigned int)

ข. สวนเตมเตมหนง

ค. สวนเตมเตมสอง

ง. IEEE 754 (single precision)

จ. สายอกขระแบบ ASCII

6. ฐานขอมลของธนาคารจะเกบขอมลทเปนจ านวนเงน เชน จ านวนเงนทฝากและถอนในแตละครง หรอจ านวน

เงนทเหลออยในบญช ดวยการแทนขอมลแบบใด

ก. สวนเตมเตมสอง

ข. จดตรง

ค. IEEE 754

ง. แบบอนๆ เชน ทศนยม (decimal)

http://en.wikipedia.org/wiki/Binary-coded_decimal

ลองดตวแปรแบบ decimal ใน JAVA หรอ .NET

นสตสามารถตรวจค าตอบโดยใชเครองคดเลขท www.binaryconvert.com หรอจะเขยนโปรแกรมงายๆ เพอตรวจ

ค าตอบเองกได โปรแกรมภาษา C# ตอไปนพมพค าตอบออกมาเปนเลขฐานสบหก (ในโปรแกรม การเตม 0x ไว

ขางหนา หมายถง เปนเลขฐานสบหก)

Page 36: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 23

using System;

public class MyApp {

static void Main() {

// int a = 85;

int a = 0x0482 + 0x1593 + 0x2604 + 0x3715;

Console.WriteLine("{0:X8}", a);

}

}

ผลลพธของโปรแกรม

0000772E

โปรแกรมตอไปนพมพคาตวแปร float (ตามมาตรฐาน IEEE 754) ออกมาเปนเลขฐานสบและฐานสบหก

using System;

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Explicit)]

struct byte_array {

[FieldOffset(0)] public byte b1;

[FieldOffset(1)]

public byte b2;

[FieldOffset(2)] public byte b3;

[FieldOffset(3)] public byte b4;

[FieldOffset(0)] public float x;

}

public class MyApp {

static void Main() {

byte_array s;

// initialize with some values to prevent compilation error

s.x = 0;

s.b1 = 0x00;

s.b2 = 0x00;

s.b3 = 0x00;

s.b4 = 0x00;

//s.x = 32f + 4f + 2f + (1f/4f) + (1f/8f) + (1f/1024f);

//s.x = float.NegativeInfinity;

// Little Endian !!!

s.b1 = 0x00;

s.b2 = 0x40;

s.b3 = 0x23;

s.b4 = 0x00;

Console.WriteLine("Dec:" + "\t" + s.x);

Console.WriteLine("Hex:" + "\t" +

s.b4.ToString("x").PadLeft(2, '0') + " " +

s.b3.ToString("x").PadLeft(2, '0') + " " +

s.b2.ToString("x").PadLeft(2, '0') + " " +

s.b1.ToString("x").PadLeft(2, '0'));

}

}

Page 37: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 24

ผลลพธของโปรแกรม

Dec: 3.237201E-39

Hex: 00 23 40 00

รำยกำรอำงอง

[1] Yale N. Patt, Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C & beyond,

McGraw-Hill, 2nd edition, 2003.

Page 38: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 25

บทท 3 ทรานซสเตอรและเกต

วตถประสงคของการเรยนในบทน

อธบายการท างานของทรานซสเตอรแบบ P type และ N type

อธบายการท างานของเกตแตละชนด เชน inverter (not), and, or, xor

อธบายตวด าเนนการบต (bit operator) เชน not, and, or, xor, shift left/right

อธบายการท างานของมกซ (mux - multiplexor) และตวถอดรหส (decoder)

อธบายการท างานของวงจรบวก (adder)

ในบทนเราจะเรมเรยนตงแตสวนประกอบทเลกทสดของคอมพวเตอร ซงกคอ “ทรานซสเตอร (transistor)” เพอ

น าทรานซสเตอรมาสรางเปน “เกต (gate)” แลวน าเกตมาตอกนเปนวงจรดจทลเพอท าฟงกชนการค านวณตางๆ

เชน วงจรบวก เปนตน

ในการฝกปฏบตเพอออกแบบวงจรดจทล นกเรยนจะตองใชโปรแกรมชวยออกแบบทชอวา LogicWorks ใหดาวน

โหลดโปรแกรมจากเวบไซตของรายวชา คมอการใชงานอยในรายการอางองทายบท

ทรานซสเตอร (Transistor)

ทรานซสเตอรท ามาจากสารกงตวน า (semiconductor) สญลกษณของทรานซสเตอรแสดงในรปท 3.1

ทรานซสเตอรท าหนาทเปนสวตชปดเปดทควบคมดวยแรงดน กลาวคอ ในกรณของ P type ถา Gate = low

voltage จะยอมใหกระแสไฟฟาไหลจาก Source ไป Drain แตถา Gate = high voltage ระหวาง Source กบ Drain

จะเปนเหมอนวงจรเปด (open circuit) สวนในกรณของ N type จะตรงขามกน

(ก) P type (ข) N type

รปท 3.1 ทรานซสเตอรแบบ P type และ N type

Page 39: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 26

เกต (Gate)

เมอน าทรานซสเตอรหลายๆ ตวมาตอกนเขากจะไดเปนเกตทท างานไดมากกวาเปนสวตชปดเปด คอท าฟงกชน

invert (not), and, or, xor ได เกตพนฐานทงหมดและฟงกชนการท างานแสดงในรปท 3.2 สวนโครงสรางของ

เกตทประกอบดวยทรานซสเตอรแสดงในรปท 3.3 ทจรงแลว nand และ nor กคอ invert (not) ของ and และ or

นนเอง สวน xor คอ เขยนแบบนการคณหมายถง and การบวกหมายถง or และขดหมายถง not

เกตจะมความหนวง (delay) ซงกคอชวงเวลาระหวางทปอนอนพตและเอาตพตมการเปลยนแปลง (ประมาณ 10

ns) แมแตเสนลวดธรรมดากมความหนวงแตนอยมาก (ประมาณ 1 ns ตอ 6 นว) อยาลมวาอเลกตรอนทวงใน

เสนลวดกไมเรวไปกวาความเรวสงสดคอความเรวของแสง

Inverter หรอ Not gate

ถา A = 0, B = 1

ถา A = 1, B = 0

And gate

ถา AB = 00, C = 0

ถา AB = 01, C = 0

ถา AB = 10, C = 0

ถา AB = 11, C = 1

Or gate

ถา AB = 00, C = 0

ถา AB = 01, C = 1

ถา AB = 10, C = 1

ถา AB = 11, C = 1

Xor gate

ถา AB = 00, C = 0

ถา AB = 01, C = 1

ถา AB = 10, C = 1

ถา AB = 11, C = 0

Nand gate

ถา AB = 00, C = 1

ถา AB = 01, C = 1

ถา AB = 10, C = 1

ถา AB = 11, C = 0

Nor gate

ถา AB = 00, C = 1

ถา AB = 01, C = 0

ถา AB = 10, C = 0

ถา AB = 11, C = 0

รปท 3.2 ฟงกชนการท างานของเกตชนดตางๆ

Page 40: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 27

รปท 3.3 โครงสรางทประกอบดวยทรานซสเตอรของเกต not, nand และ nor (เรยงจากซายไปขวาตามล าดบ)

สญลกษณทวไปทใชในการวาดวงจรดจทล

กอนทจะเขาสเน อหาตอไป ควรจะทราบความหมายของสญลกษณทใชในวงจรดจทลกอน ดรปท 3.4

สายไฟ (wire)

สายไฟ n เสน

สายอนพต

สายเอาตพต

จดกลมๆ คอจดทสายไฟเชอมตอกน เสนทตดกนไมได

เชอมตอกน

รปท 3.4 สญลกษณทวไปทใชในวงจรดจทล

ตวด าเนนการบต (Bit Operator)

หลงจากทเราทราบฟงกชนหลกๆ ทใชท ากบบตหนงบตแลว เราอาจจะใชฟงกชนนนท ากบหลายๆ บตไปพรอม

กนทเดยวกได เชน

0110 • 1101 จะไดผลลพธเทากบ 0100 (• คอ and)

0110 + 0101 จะไดผลลพธเทากบ 0111 (+ คอ or)

Page 41: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 28

หรอใชเลขฐานสบหกกได (เขยน x ขางหนาหมายถงฐานสบหก) เชน x7A xA3 จะไดผลลพธเทากบ xD9 (

คอ xor) ตวด าเนนการ เชน •, +, เปนตวด าเนนการชนดทวภาค (binary operator) คอท ากบตวถก

ด าเนนการ (operand) สองตว สวน not เปนตวด าเนนการชนดเอกภาค (unary operator) เพราะท ากบตวถก

ด าเนนการเพยงตวเดยว

ตวด าเนนการชนดทวภาคทส าคญอกตวหนงคอ เลอนซาย shift left (<<) และ เลอนขวา shift right (>>) ตว

ด าเนนการนจะเลอนบตของตวถกด าเนนการตวแรกไปทางซายหรอขวาเทากบจ านวนทระบไวในตวถกด าเนนการ

ตวทสอง เชน

00001001 << 3 = 01001000

11010000 >> 2 = 00110100

แตถาเปนจ านวนแบบสวนเตมเตมสองทเปนคาลบ การเลอนขวาตองคงบตสญลกษณไวเสมอ เชน

11010000 >> 4 = 11111101

ทจรงแลวการเลอนซาย 1 บตกคอการคณสอง สวนการเลอนขวา 1 บตกคอการหารสอง การคงบตสญลกษณไวก

เพอรกษาคาบวกหรอลบไวใหถกตอง เชน

(-8) 1000 >> 1 = 1100 (-4)

(-4) 1100 >> 1 = 1110 (-2)

(-2) 1110 >> 1 = 1111 (-1)

มกซ (MUX)

มลตเพลกเซอร (multiplexor) หรอเรยกสนๆ วา “มกซ” เปนอปกรณทใชเลอก เชน มอนพตเขามา 2 บตจะ

เลอกบตไหนออกไปเปนเอาตพต มกซขนาดเลกทสดคอ 2-to-1 ขนาดทใหญขนไปคอ 4-to-1 และ 8-to-1 ด

รปท 3.5 ในรป (ก) ถาขา select, S = 0 จะท าให C = A แตถา S = 1 จะท าให C = B รปสเหลยมคางหมเปน

สญลกษณของมกซ เลขฐานสบภายในสเหลยมคางหมบอกวาถา select มคาเปนเทาน มกซจะเลอกอนพตน

ออกไปเปนเอาตพต ลกษณะการใชงานมกซทพบบอยๆ เชน

if (condition)

C = X + Y

else

C = X – Y

แตในการออกแบบฮารดแวรเราไมสามารถโปรแกรม if-else ได กตองท าทง C = X + Y และ C = X – Y ไป

พรอมๆ กน แลวใชมกซเลอกเอา โดยสรางสญญาณ S = 0 หรอ 1 ใหสอดคลองกบเงอนไข (condition) วาเปน

จรงหรอเทจ

Page 42: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 29

(ก) มกซ 2-to-1

(ข) 4-to-1 MUX

รปท 3.5 มกซ 2-to-1 และมกซ 4-to-1

ตวถอดรหส (Decoder)

ตวถอดรหสเปนอปกรณทใชถอดรหส เชน ใชรหส 2 บต และมหลอดไฟ 4 ดวง ถารหสเปน 00 ใหเปดหลอดไฟ

ดวงแรก ถารหสเปน 01 ใหเปดหลอดไฟดวงทสอง เปนตน สาเหตทตองใชรหส (code) เพราะตองการลดจ านวน

สายไฟหรอสวตชทใชปดเปด เชน สวตช 2 ตว (A และ B) ใชควบคมการปดเปดหลอดไฟได 4 ดวง ถามสวตช n

ตวจะใชควบคมหลอดไฟไดมากถง 2n ดวง ดรปท 3.6 ประกอบ

รปท 3.6 ตวถอดรหส 2-to-4

Page 43: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 30

วงจรบวก (Adder)

ทนเราลองมาดวงจรดจทลทใชบวกเลข 1 บต อนพตคอตวถกด าเนนการ 2 ตวและตวทดทมาจากหลกกอนหนา

เอาตพตคอผลบวกและตวทดส าหรบสงตอไปยงหลกถดไป วงจรนเรยกวาวงจรบวกเตมอตรา (full adder) ถา

เปนวงจรบวกครงอตรา (half adder) จะไมมเอาตพตทเปนตวทด (carry out)

Oper1 Oper2 Carry in Sum Carry out

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

รปท 3.7 แสดงวงจรบวกเตมอตราแบบใชจ านวนเกตนอย แตมขอเสยคอเอาเกตมาตอกนหลายชนท าใหม

ความหนวงมาก การหาคาความหนวงของวงจรใหนบจ านวนเกตทอยบนวถ (path) ทยาวทสด (ทผานจ านวนเกต

มากทสด) ในรปวถทยาวทสดคอวถจาก A ไป Cout

ตองผาน 3 เกต ดงนนคาความหนวงของวงจรนคอ 3 วงจร

บวกเตมอตราอกแบบแสดงในรปท 3.8 เปนวงจรแบบสองชน (two-level) ใชเกตมากแตท างานไดเรวกวา มคา

ความหนวงเทากบ 2

รปท 3.7 วงจรบวกเตมอตราแบบหลายชน (multi-level) (ซาย) และการค านวณคาความหนวง (ขวา)

(รปจาก Wikimedia Commons)

รปท 3.8 วงจรบวกเตมอตราแบบสองชน (two-level)

Page 44: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 31

ถาจะบวกเลขมากกวา 1 บตกเอาวงจรบวกเตมอตราหลายๆ ตวมาตอกน เชน A = A3A

2A

1A

0 บวกกบ B =

B3B

2B

1B

0 ในรปท 3.9 แตขอเสยของวธนคอคาความหนวงจะเพมขนเปนเชงเสน เชน ถาบวกเลข 4 บต จะมคา

ความหนวงเทากบ 4 × 2 = 8 (ใชวงจรบวกเตมอตราแบบสองชน) ถาบวกเลข 32 บต จะมคาความหนวงมากถง

32 × 2 = 64

รปท 3.9 วงจรบวกขนาด 4 บต

โปรแกรม LogicWorks

หลงจากเรยนจบบทนแลว ใหนสตท าแบบฝกหดดวยโปรแกรม LogicWorks

รปท 3.10 โปรแกรม LogicWorks

Page 45: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 32

เอกสารประกอบ (ส าหรบอานเพมเตม)

ลองดเทคโนโลยใหมๆ ของทรานซสเตอร

Update: Researchers pencil in graphene transistors, IEEE Spectrum, 45(6), 13-14, 2008.

Graphene makes transistors tunable, IEEE Spectrum, 46(9), 20, 2009.

Graphene Electronics, Unzipped, 47(11), 28-33, 2010.

The ultimate switch, IEEE Spectrum, 49(2), 32-59, 2012.

วงจรบวกทยกตวอยางใหดในบทนเปนเพยงวงจรบวกเลขจ านวนเตมแบบทงายทสด ยงมวงจรบวกแบบอนๆ ทม

คาความหนวงนอยกวานมากเมอตองบวกเลขหลายๆ บต เชน วงจรบวกแบบ “carry lookahead” นอกจากน ยงม

วงจรคณและหารทงของเลขจ านวนเตม (integer) และจ านวนจดลอยตว (floating-point number) ดวย อาน

เพมเตมไดจากหนงสอเลมน

Advanced Computer Arithmetic Design, Wiley-Interscience, 2001.

ในการท าแบบฝดหดนสตตองใชโปรแกรม LogicWorks ขอใหศกษาการใชงานจากคมอเลมน

LogicWorks LogicWorks 5 Interactive Software, Prentice Hall, 2003.

Page 46: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 33

แบบฝกหด

1. จงค านวณนพจนตอไปน เขยนตอบเปนเลขฐานสบหก

ก. NOT(x5432)

ข. x8745 AND xAEDF

ค. xDCBA OR x4321

ง. NOT((NOT(xAFED)) AND (NOT(xFFFF)))

จ. xFF00 XOR xC523

ฉ. (xABCD AND xFDEA) XOR (x5478 OR x1234)

นสตสามารถตรวจค าตอบโดยการเขยนโปรแกรมงายๆ เชน

int a = ~0x5432;

int b = 0x8745 & 0xAEDF;

int c = 0xDCBA | 0x4321;

int d = ~((~(0xAFED)) & (~(0xFFFF)));

int e = 0xFF00 ^ 0xC523;

int g = (0xABCD & 0xFDEA) ^ (0x5478 | 0x1234);

2. จงประกอบเกต nand 4 ตวใหเปนเกต xor (หามใชเกตอนๆ ชวย)

3. จงออกแบบวงจรบวกเตมอตราโดยใชแคเกต nand เทานน

4. จงออกแบบวงจรตอไปนโดยใช LogicWorks

ก. วงจรเลอนขวา (shift right) ทมอนพตและเอาตพตขนาด 8 บต อนพตเปนสวนเตมเตมสองถาอนพต

เปนคาบวก ตอง shift 0 เขามาทางซาย ถาอนพตเปนคาลบ ตอง shift 1 เขามาแทน

ข. วงจร odd parity check ทมอนพต 8 บต และเอาตพต 1 บต ถาในอนพตม 1 เปนจ านวนค เอาตพตจะ

เปน 1 ถาในอนพตม 1 เปนจ านวนค เอาตพตจะเปน 0

ค. วงจรทมอนพต 3 ตวคอ

oper1 8 บต (เปนสวนเตมเตมสอง)

oper2 8 บต (เปนสวนเตมเตมสอง)

sel 1 บต

และมเอาตพต 8 บต (เปนสวนเตมเตมสอง)

ถา sel = 0 เอาตพตคอ oper1 + oper2 แตถา sel = 1 เอาตพตคอ oper1 – oper2

ง. จงสรางมกซ 4-to-1 จากมกซ 2-to-1 (หามใชเกตหรออปกรณอนๆ ใหใชแคมกซ 2-to-1 เทานน)

ตองใชมกซ 2-to-1 ทงหมดกตวถงจะประกอบกนเปนมกซ 4-to-1 ได

จ. จงสรางมกซ 8-to-1 จากมกซ 4-to-1 และมกซ 2-to-1

รายการอางอง

[1] Yale N. Patt, Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C & beyond,

McGraw-Hill, 2nd edition, 2003.

Page 47: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 34

บทท 4 วงจรเชงผสม

วตถประสงคของการเรยนในบทน

ออกแบบวงจรเชงผสม (combinational circuit) โดยใช Karnaugh map

สงเคราะหวงจรเชงผสมโดยใชเกตชนดตางๆ

ในบทนเราจะเรมออกแบบวงจรดจทลกนแลว ในขนตนเราจะออกแบบวงจรเชงผสมกอน ซงเอาตพตของวงจรจะ

ขนอยกบอนพตเทานน เมออนพตมการเปลยนแปลง เอาตพตกจะเปลยนตาม

รหสเกรย (Gray Code)

รหสเกรยเปนรหสฐานสองทใชแทนตวเลขแบบหนง แตมคณสมบตทตางจากเลขฐานสองคอ รหสทอยตดกนจะม

จ านวนบตทตางกนเพยง 1 บต ดตวอยางรหสเกรยขนาด 4 บต

เลขฐานสบ เลขฐานสอง รหสเกรย

0 0000 0000

1 0001 0001

2 0010 0011

3 0011 0010

4 0100 0110

5 0101 0111

6 0110 0101

7 0111 0100

8 1000 1100

9 1001 1101

10 1010 1111

11 1011 1110

12 1100 1010

13 1101 1011

14 1110 1001

15 1111 1000

การแปลงคาจากเลขฐานสองทมคา x ใหเปนรหสเกรยนนใชสตรงายๆ คอ

x ⊕ (x >> 1) เชน เลขฐานสอง x = 1010 แปลงเปนรหสเกรยได 1010 ⊕ 0101 = “1111”

Page 48: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 35

เวลาท าในกระดาษทดกจบบตขางๆ กน xor ไดเลย MSB ใหยกลงมา

Karnaugh Map

Karnuagh map เปนวธหนงทใชออกแบบวงจรเชงผสม โดยปกตการออกแบบวงจรจะเรมจากตารางคาความจรง

(truth table) เชน f(A,B,C,D) = ∑(6,8,9,10,11,12,13,14) หมายถงตารางคาความจรงดงน

ABCD f(A,B,C,D)

0000 0

0001 0

0010 0

0011 0

0100 0

0101 0

0110 1

0111 0

1000 1

1001 1

1010 1

1011 1

1100 1

1101 1

1110 1

1111 0

จากนนกสราง Karnaugh map ดงน

Page 49: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 36

แนวตง 4 คอลมนคอกรณท AB เปน 00, 01, 11, 10 สงเกตวาเรยงตามรหสเกรยและแนวนอน 4 แถวคอกรณ

ท CD เปน 00, 01, 11, 10 คาทอยในตารางคอคาเอาตพต

ทนลองจนตนาการวาเอา Karnaugh map ซงเปนตารางแบนๆ ในสองมตมามวนเปนทรงหวงยาง (torus) ในสาม

มต กจะไดดงรปขางลาง และถาสงเกตใหดๆ รหสเกรยของชองทตดกนบนทรงหวงยางจะตางกนหนงเสมอบต

หมายเหต

รป torus นใชอธบายไดเฉพาะ Karnaugh map ทม

ขนาดไมเกน 4× 4 เทานน

ขนตอไปใหท าวงรอบเอาตพตทเปนหนง การวงนนจะตองเปนกลมขนาด 1× 1, 1× 2, 2× 1, 2× 2, 1× 4, 4× 1,

2× 4, 4× 2, 4× 4, …, 2m× 2

n เทานน หลกการส าคญคอ

1. ท าใหไดวงใหญทสด

2. ใชจ านวนวงใหนอยทสด

สมมตวาวงครงแรกไดแบบน

วงครงแรกจะท าใหเกดเทอม เพราะเอาตพตเปน 1 เมอ A = 1 และ B = 0 สวน CD เปนอะไรกไดก

เลยไมตองเขยน ลองวงตอไปเรอยๆ สมมตวาไดแบบน

วงครงทสองจะท าใหเกดเทอม เพราะเอาตพตเปน 1 เมอ A = 1 สวน B เปนอะไรกได และ C =

0 สวน D เปนอะไรกได

Page 50: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 37

วงครงทสามเปนครงสดทายจะไดแบบน

เทอมสดทายคอ เทานกจะไดวงจรแบบสองชน (two-level) ดงรปขางลาง

ถาวงผด เชน วงเลกเกนไป ทงๆ ทวงใหใหญกวานนกได ไมเปนไร วงจรยงท างานไดถกตอง แตจะมขนาดใหญ

เกนจ าเปน เชน ถาครงทสอง (เทอมทสอง) วงกอนสเหลยมจตรสแคครงซายจะไดเทอม ซงใหญเกนจ าเปน

แค กพอแลว แตวงจรกยงท างานไดผลลพธถกตอง

ทนสตมกจะวงผด เพราะลมไปวาบางชองทเหนอยหางกน จรงๆ แลวมนอยตดกน (ตางกน 1 บต) ลองด

ตวอยางตอไปนแลวจะเขาใจ

ตวอยางทท าใหดน มอนพต 4 ตวแปร และใชตารางขนาด 4 × 4 ในกรณทวไปขนาดของ Karnaugh map (แถว ×

คอลมน) ขนอยกบจ านวนตวแปรดงน (ตวเลขในตารางคอคาอนพตในฐานสบ ลกศรในตารางแสดงรปแบบของ

ชองทเสมอนวาอยตดกน เพราะอนพตตางกนเพยง 1 บต)

Page 51: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 38

ถาม 2 ตวแปรจะใชตารางขนาด 2 × 2, ชองทอยตดกน (ตางกน 1 บต) จะมทงหมด 2 ชอง

ถาม 3 ตวแปรจะใชตารางขนาด 2 × 4, ชองทตองอยตดกน (ตางกน 1 บต) จะมทงหมด 3 ชอง

ถาม 4 ตวแปรจะใชตารางขนาด 4 × 4, ชองทตองอยตดกน (ตางกน 1 บต) จะมทงหมด 4 ชอง

ถาม 5 ตวแปรจะใชตารางขนาด 4 × 8, ชองทตองอยตดกน (ตางกน 1 บต) จะมทงหมด 5 ชอง

ถาม 6 ตวแปรจะใชตารางขนาด 8 × 8, ชองทตองอยตดกน (ตางกน 1 บต) จะมทงหมด 6 ชอง

Page 52: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 39

ความยากของ Karnaugh map ทมตวแปรจ านวนมากๆ คอ ชองทตางกน 1 บต รหสเกรยไมไดอยตดกนในตาราง

สองมต ท าใหเวลาวงจะตองระมดระวงเปนพเศษ ในวชาน เราจะท า Karnaugh map สงสดแค 6 ตวแปร ในการ

ออกแบบจรงทมจ านวนตวแปรมากๆ จะตองใชโปรแกรมชวยออกแบบ เชน Quine-McCluskey algorithm หรอ

Espresso heuristic logic minimizer ส าหรบโจทยแบบฝกหดทมจ านวนตวแปรนอยๆ นสตอาจจะใชโปรแกรม

Karnaugh Minimizer 2.0 เพอชวยตรวจค าตอบกเพยงพอแลว

ใน Karnaugh map นอกจากเอาตพตจะเปน 0 หรอ 1 แลวยงอาจจะเปน don’t care ไดดวย (ใชสญลกษณ d)

หมายถง เราไมสนใจวาเอาตพตจะเปนอะไร จะเปน 0 หรอ 1 กได ทเปนเชนนเพราะเราทราบวาในการใชงานจรง

จะไมมอนพตในกรณนนเกดขน ดงนนเราอาจจะวงใหรวม don’t care ไปดวย เพอใหไดวงใหญทสด หรอเรา

อาจจะทง don’t care ไว (ไมวง) เพอใหใชจ านวนวงนอยๆ กได ลองดตวอยาง

ในตวอยางทางซาย เราวงรวม d เขาไปดวยเพอใหไดวงใหญทสด (เทอมมขนาดเลก) ในตวอยางทางขวา เราไม

ตองวง d เพราะจะท าใหไดเทอมเพมขนโดยไมจ าเปน

ใหนสตดาวนโหลดโปรแกรม Karnaugh Minimizer 2.0 ไดจากเวบไซตของรายวชา ขอใหใชโปรแกรมนเพอชวย

ตรวจค าตอบเทานน นสตตองฝกท า Karnaugh map ดวยตวเอง เพราะในการสอบไมอนญาตใหใชโปรแกรมหรอ

เครองค านวณ

Page 53: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 40

เอกสารประกอบ (ส าหรบอานเพมเตม)

ลองอานบทความตอน

คมอการใชงานโปรแกรม Karnaugh Minimizer 2.0

(ตดมากบตวโปรแกรม เปดโปรแกรมแลวเลอกเมน Help -> Contents หรอกด F1)

Quine-McCluskey algorithm

http://en.wikipedia.org/wiki/Quine–McCluskey_algorithm

Espresso heuristic logic minimizer

http://en.wikipedia.org/wiki/Espresso_heuristic_logic_minimizer

งานวจยของผมและคณะ เสนอการออกแบบวงจรเพอหาคารากทสอง

K. Piromsopa, C. Aporntewan, P. Chongstitvatana, An FPGA Implementation of a fixed-point

square root operation, Int. Symp. on Communications and Information Technology (ISCIT 2001),

November 14-16, 2001, ChiangMai, Thailand.

แบบฝกหด

1. จงแสดง Karnaugh map และวงจรเชงผสมแบบสองชน (two-level) ของฟงกชนตอไปน

ก.

ข.

ค.

ง.

จ.

ฉ.

2. จงออกแบบวงจรทรบอนพต A และ B เปนสวนเตมเตมสองขนาด 4 บต เอาตพตของวงจรมขนาด 1 บตซง

จะมคาเปน 1 เมอ A > B ใหใชไดเฉพาะวงจรบวกและเกตพนฐานเทานน

3. จงเตมวงจรตอไปนใหสมบรณ

เมอ X = 0 ให S = A + B

เมอ X = 1 ให S = A – B

Page 54: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 41

รายการอางอง

[1] Yale N. Patt, Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C & beyond,

McGraw-Hill, 2nd edition, 2003.

[2] Randy H. Katz, Gaetano Borriello, Contemporary Logic Design, Prentice Hall, 2nd edition, 2004.

[3] M. Morris Mano, Charles Kime, Logic and Computer Design Fundamentals, Prentice Hall, 4th edition,

2007.

Page 55: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 42

บทท 5 วงจรเชงล ำดบ

วตถประสงคของการเรยนในบทน

ออกแบบวงจรเชงล าดบ (sequential circuit) ดวยเครองสถานะจ ากด

(finite-state machine หรอเรยกยอๆ วา FSM)

สงเคราะหวงจรเชงล าดบดวยดแลตซ (D latch) และเกตชนดตางๆ

ในบทนเราจะขยบจากวงจรเชงผสม (วงจรทไมมสถานะหรอหนวยความจ าภายใน) ไปศกษาวงจรเชงล าดบ ซงจะ

มสถานะ (state) อยภายใน ท าใหเอาตพตนอกจากจะเปลยนตามอนพตแลว ยงข นอยกบสถานะของวงจรใน

ขณะนนดวย

วงจรเชงผสม vs. วงจรเชงล ำดบ

วงจรเชงผสมอธบายไดดวยฟงกชนเดยวคอ เมอ คออนพตและ คอเอาตพต และเขยนอธบาย

ฟงกชนนดวยตารางคาความจรงได ถาปอนอนพต เหมอนเดมกจะไดเอาตพต เหมอนเดมเสมอ ไมมทาง

เปลยนเปนอยางอนไปได แตวงจรเชงล าดบอธบายไดดวย 2 ฟงกชนคอ และ

เมอ คอฟงกชนทสรางเอาตพต (output function) คออนพต คอเอาตพต สวน เปนฟงกชนทใช

เปลยนสถานะ (state-transition function) และ คอ สถานะ (state) ของวงจร ฟงกชน จะท างาน

ตลอดเวลา เหมอนวงจรเชงผสมทสรางจากเกต คอเมออนพตเปลยน เอาตพตกจะเปลยนตามทนท สวนฟงกชน

จะท างานตามจงหวะของสญญาณนาฬกา (clock) ดรปท 5.1 ประกอบ

รปท 5.1 วงจรเชงล าดบ

วงจรเชงล าดบจะท างานทขอบขาขน (positive edge) ของสญญาณนาฬกา (clock) หรอเมอสญญาณนาฬกา

เปลยนจาก 0 เปน 1 (ถาจะใหท างานทขอบขาลงกใสเกต not ทสญญาณนาฬกา) ระยะเวลาระหวางขอบขาขน

สองครงทอยตดกนคอความยาวคลน (wave length) ดงนนเราค านวณความถ (frequency) ไดจากสตร

frequency = 1 / wave length เชน ความยาวคลน 10 ns คอความถ 1 GHz ทขอบขาขนคาสถานะ จะถก

Page 56: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 43

อพเดตเปนสถานะใหม ทจรงแลวสถานะของวงจรกคอหนวยความจ าทอยภายในนนเอง คาทอย

ในหนวยความจ าจะถกอพเดตเปนจงหวะดวยฟงกชน

เราเขยนอธบายวงจรเชงล าดบดวยเครองสถานะจ ากด (Finite-State Machine: FSM) ภายใน FSM

ประกอบดวยสวนตางๆ ดงน (ดรปท 5.2 ประกอบ)

จดยอด (vertex) ใชแทนสถานะ ภายในเขยนก ากบไวดวยสญลกษณทใชแทนสถานะนน เชน

A, B, C เปนตน

เสนเชอม (edge) ชออกจากสถานะ A และปลายลกศรชไปทสถานะ B และบนลกศรก ากบดวย

I/O หมายความวา ถาวงจรอยทสถานะ A และอนพตเปน I วงจรจะเอาตพต O และเปลยน

สถานะไปเปน B

สถานะเรมตน (initial state) เปนสถานะแรกเมอวงจรเรมท างาน เมอกดปมรเซตวงจรกจะ

กลบมาทสถานะน

ลองดตวอยาง FSM ในรปท 5.2 อนพตขนาด 1 บตจะถกปอนใหทกๆ รอบ (cycle) ของสญญาณนาฬกา วงจรน

จะใหเอาตพต “1” เมอในล าดบอนพตม 1 เปนจ านวนค กรณอนจะใหเอาตพตเปน “0” ตวอยางเชน

cycle 1 2 3 4 5 6 7 8 9 10

input 1 1 0 1 0 0 0 1 1 1

output 1 0 0 1 1 1 1 0 1 0

รปท 5.2 FSM ของวงจร Even Parity

FSM แบบน เรยกวาแบบ Mealy ถาเปน FSM แบบ Moore เอาตพตหรอฟงกชน จะขนกบสถานะปจจบน

เทานน ไมขนอยกบอนพตในขณะนน ( ) โดยปกต FSM แบบ Mealy จะใชจ านวนสถานะนอยกวา

หรอเทากบ FSM แบบ Moore ในการแกปญหาเดยวกน ดงนนจงกลาวถงเฉพาะแบบ Mealy เทานน

ดแลตช (D Latch)

วงจรเชงล าดบจะตองมหนวยความจ าเพอเกบสถานะของวงจรไว ซงหนวยความจ าน กสรางจากเกต เรยกวา gated

D latch ขอเรยกสนๆ วาดแลตช เปนหนวยความจ าขนาด 1 บต ดรปท 5.3 การเขยนขอมลมขนตอนดงน

WE = 0, S = R = 1, คา Q นง, D = คาบตทจะเขยน

WE = 1, S = ~D, R = D, Q = D, คงคาใน D ไว (สญลกษณ ~ คอ not)

WE = 0, S = R = 1, คา Q นง, เปลยนคาใน D ได

กลาวโดยสรปการเขยนขอมลตองสโตรบ (strobe) คอการใหขอบขาขนและขอบขาลงทขา WE

Page 57: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 44

รปท 5.3 ดแลตช (D latch)

Master-slave edge-triggered D flip-flop

สงทไมพงประสงคของดแลตชในการน ามาท าวงจรเชงล าดบคอ เมอ WE = 1, ดแลตชจะท างาน (Q = D) อย

ตลอดเวลา ท าใหเมอมการปอนกลบจาก Q ไปยง D เพอเปลยนสถานะ จะท าใหมการเปลยนสถานะมากกวาหนง

ครงตอรอบสญญาณนาฬกา ลองนกถงวงจรนบเลข (counter) ทตองการใหนบขน (+1) ทกรอบสญญาณนาฬกา

ถาใชดแลตชแลวปลอยให WE = 1 นานๆ (สญญาณนาฬกาความถต า) อาจจะท าใหนบเกนไป เพราะมการปอน

คาจากตวนบกลบมาทดแลตชหลายรอบ ดรปท 5.4 ดแลตชตอขนานกน n ตวและใชสญญาณนาฬการวมกน

รปท 5.4 วงจรนบเลขแบบใช D latch

เพอแกปญหาดงกลาว เราตองใช master-slave edge-triggered D flip-flop ซงประกอบดวยดแลตช 2 ตว ดง

แสดงในรปท 5.5

รปท 5.5 Master-slave edge-triggered D flip-flip

แผนภาพเวลาในรปท 5.6 จะเหนวาในสญญาณนาฬกาครงรอบแรก ดแลตชตวแรกท างานท าให tmp = D และใน

ครงรอบหลง ดแลตชตวทสองท างานท าให Q = tmp กลาวโดยสรปคอการสงคาจาก D ไปยง Q (หรอการเขยน

หนวยความจ า) จะเกดขนทขอบขาลงหลงจบ 1st half ถงมชอเรยกวา edge-triggered และสงเกตวาหลงขอบขาลง

คา D สามารถเปลยนแปลงได โดยไมกระทบตอการเขยนคา Q ดงนนถาวงจรนบเลขในรปท 5.4 เปลยนไปใช

Page 58: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 45

master-slave edge-triggered D flip-flop แทนดแลตชจะท าใหตวนบมคาเพมขน +1 ทกๆ รอบสญญาณนาฬกา

ไมวาจะใชความถต าหรอไมกตาม

รปท 5.6 แผนภาพเวลาของ master-slave pulse-triggered D flip-flip

ตวอยำงกำรสรำงวงจร Even Parity

เราจะสรางวงจรเชงล าดบตาม FSM ในรปท 5.2 กอนอนใหคดกอนวาตองใชกบตเพอแทนจ านวนสถานะทงหมด ในทน

ม 2 สถานะใช 1 บตกพอ ให A แทนดวย 0, และ B แทนดวย 1 โครงสรางวงจร Even Parity แสดงในรปท 5.7

รปท 5.7 โครงสรางวงจร FSM ทเอาตพตเปลยนคาตามสถานะและอนพตอยตลอดเวลา

ลองสรางวงจร Even Parity ดวยเกตพนฐานกจะไดตามรปท 5.8 ตองสรางวงจรเชงผสม 2 ชด ชดแรกส าหรบสราง

Output และชดทสองส าหรบสราง Next state โดยทงสองวงจรมอนพตคอ State และ Input ในการออกแบบกเขยนตาราง

คาความจรงของ Output และ Next state จากนนกใช Karnaugh map ตามทไดสอนไปแลว

ในรปท 5.8 สงเกตวาฟลปฟลอปจะมขารเซต (Reset) ดวย เพอตงคาสถานะเรมตน ถา Reset = 1 จะท าใหคาใน

ฟลปฟลอปเปน 0 ทนทโดยไมข นกบสญญาณนาฬกา แตถามปมกลมๆ (not) ทขารเซต จะท างานกลบกนคอตองให

Reset = 1 ถงจะท าใหคาในฟลปฟลอปเปน 0 ในรปท 5.8 เราอาจจะยบเกต xor ใหเหลอตวเดยวกได เพราะฟงกชนท

สราง Output กบ Next state กคอฟงกชนเดยวกน

Page 59: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 46

รปท 5.8 วงจร Even Parity ทออกแบบดวยฟลปฟลอปและเกต

แผนภำพเวลำ (Timing Diagram)

แผนภาพเวลาเปนเครองมอทใชอธบายการท างานของวงจร โดยแสดงคาของสายไฟแตละเสนแปรตามเวลา ตวอยางเชน

วงจรในรปท 5.8 เขยนเปนแผนภาพเวลาไดดงรปท 5.9 (การเขยนคาลงฟลปฟลอปเกดทขอบขาขน) นสตอาจจะสงสย

วาการเปลยนอนพตจาก a เปน b พอดทขอบขาขนจะหมายความวาอยางไร เพราะฟลปฟลอปจะท างานทขอบขาขน แลว

ทขอบขาขนคาอนพตจะเปน a หรอ b กนแน? ถาเขยนแผนภาพแบบนสวนใหญจะหมายถงคาอนพตทขอบขาขนคอ a

เพราะวงจรทสรางอนพตกท างานตามสญญาณนาฬกาตวเดยวกน คอสรางอนพตใหมเขามาทกๆ ขอบขาขนของสญญาณ

นาฬกา (เชน ใชขอบขาขนเพอกระตนใหอานคาอนพตจากหนวยความจ า) ดวยความหนวง (delay) จะท าใหไดคาอนพต

หลงจากขอบขาขนเลกนอย แตเพอใหวาดแผนภาพงายๆ กวาดใหอนพตเปลยนคาไปพรอมกบขอบขาขน

รปท 5.9 แผนภาพเวลาของวงจร Even Parity (ใช FSM รปท 5.7)

Page 60: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 47

ตวตรวจจบล ำดบ (Sequence Detector)

FSM ยงใชตรวจจบล าดบไดดวยเชน วงจรทใหเอาตพต 1 เมอเกดล าดบของ 1 ตดกนเปนจ านวนคตงแต 2, 4, 6, …

แลวตามดวย 0 หนงตว เชน

อนพต 0 1 0 1 1 1 1 0 1 0

เอาตพต 0 0 0 0 0 0 0 1 0 0

ถาอธบายล าดบน ดวยนพจนปรกต (regular expression) กจะเขยนไดวา (11)+0 ลองออกแบบ FSM ดกไดตามรปท

5.10

รปท 5.10 FSM ทตรวจจบล าดบของ (11)+0

วงจรควบคมปมน ำ (Water Pump)

ปมน าเปนปญหาประยกต โจทยมอยวามถงเกบน า ปมน า และตวรบร (sensor) ตวรบรจะใหคา 1 เมอโดนน าและปมจะ

ท างานเมออนพตเปน 1 ถาออกแบบวงจรเชงผสมงายๆ เพอคอยปมน าใหเตมถงอยเสมอ อาจจะไดวงจรดงรปท 5.11

กลาวคอตวรบรจะสงสญญาณใหปมท างานอยเสมอ จนกวาน าจะเตมถงถงจะหยด

รปท 5.11 ระบบควบคมปมน าดวยวงจรเชงผสม

ขอเสยของวงจรในรปท 5.11 คอ เมอระดบน าใกลเตม น าจะกระฉอกไปมาท าใหตวรบร ใหเอาตพตเปน 0 และ 1

สลบกน ปมน ากจะตดๆ ดบๆ ท าใหปมเสยเรว วธแกคอใชตวรบร 2 ตว ดงแสดงในรปท 5.12 เมอระดบน าลงมาถง

เซนเซอรตวลาง ใหปมน าท างานรวดเดยวจนน าแตะตวรบร ขางบน แลวหยดท างานจนกวาระดบน าจะลงมาแตะตวลางอก

ครง ถงจะเรมปมใหม ตวรบรทงสองตวควรจะอยหางกนพอสมควรเพอใหปมน าไดท างานรวดเดยว แลวกหยดพก

Page 61: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 48

รปท 5.12 ระบบควบคมปมน าดวยวงเชงล าดบ

ถาลองพจารณาดกจะเหนวาม 2 สถานะคอ 1) น าแหง ปมตองท างาน 2) น าจะลน ปมตองหยด เขยน FSM ไดดงรปท

5.13 XY/Z บนเสนเชอมคอ ตวรบรตวบน (X) ตวรบรตวลาง (Y) และเอาตพต (Z)

รปท 5.13 FSM ทควบคมปมน า

กรณ XY = 10 ไมเคยเกดขน (ในทางปฏบตถาเกด XY = 10 แสดงวาเซนเซอรเสย) ใส x หมายถง don’t care วงจรน

ไมจ าเปนตองมสถานะเรมตนหรอปมรเซต วงจรท างานไดถกตองเสมอไมวาจะเรมจากสถานะใด ขนตอไปเขยนตารางคา

ความจรง S คอ current state และ N คอ next state

S X Y Z N

0 0 0 1 0

0 0 1 1 0

0 1 0 x x

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 x x

1 1 1 0 1

ตอไปใช Karnaugh map เพอสรางเอาตพต Z

จะไดวา และจากตารางคาความจรง ดงนนเรากไมตองท า Karnaugh map เพอสราง N อก ขน

สดทายกวาดวงจรทควบคมปมน าดงแสดงในรปท 5.14 วงจรนไมจ าเปนตองใชความถสงมาก ใชความถประมาณ 1 Hz

กพอแลว เพราะน าคงไมทวมถงภายในเวลาแค 1 วนาท

Page 62: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 49

รปท 5.14 วงจรควบคมปมน า

FSM แบบนกอาจจะยงมขอเสยอยบาง คอจะตองคงคาอนพตไวตลอดเวลา จนกวาจะเปลยนเปนรอบสญญาณนาฬกา

ถดไป เพอรกษาคาเอาตพตทตองการไว เพราะถาอนพตเปลยนเอาตพตกจะเปลยนตามทนท ถาเราตองการ FSM ททง

สถำนะและเอำตพตจะเปลยนทขอบขาขนของสญญาณนาฬกาเทานน ตองใชวงจรในรปท 5.15 ตองใชฟลปฟลอป

เพมข นอกหนงตว (ตวขวาสด) ส าหรบโครงงานในวชาน ผมแนะน าใหใช FSM แบบในรปท 5.15 เพราะจะท าให

ออกแบบสวนประกอบอนๆ ไดงายกวามาก เพยงปอนอนพตใหมากอนขอบขาขนเลกนอย FSM กจะท างานไดถกตอง

หลงขอบขาขนกไมตองคงคาอนพตไว อนพตอาจจะเปลยนคาไวรอขอบขาขนในรอบถดไปไดเลย

รปท 5.15 โครงสรางวงจร FSM ทเอาตพตจะเปลยนคาทขอบขาขนของสญญาณนาฬกาเทานน

ถาใชโครงสราง FSM ในรปท 5.15 มาท าวงจร Even Parity กจะไดแผนภาพเวลาดงรปท 5.16 (ใชล าดบอนพตเหมอน

ในรปท 5.9) ขอย าวาทง State และ Output จะเปลยนทขอบขาขนเทานน เสนสแดง (เสนหนา) แสดงเฉพาะสวนทตาง

จากในรปท 5.9

Page 63: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 50

รปท 5.15 แผนภาพเวลาของวงจร Even Parity (ใช FSM รปท 5.15)

เวลาดรปท 5.15 ขอใหคดวาอนพตมาชากวาขอบขาขนเลกนอย เหมอนรปท 5.9

Page 64: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 51

เอกสำรประกอบ (ส ำหรบอำนเพมเตม)

ลองอานบทความตอน

นพจนปรกต (regular expression)

o http://en.wikipedia.org/wiki/Regular_expression

o http://docs.oracle.com/javase/tutorial/essential/regex/ (JAVA)

o http://msdn.microsoft.com/en-us/library/hs600312.aspx (.NET)

วงจรเชงล าดบทใชสญญาณนาฬกาเรยกวามการท างานแบบประสานเวลา (synchronous) เพราะท างาน

ตามจงหวะสญญาณนาฬกา นอกจากนยงมวงจรเชงล าดบทท างานแบบไมประสานเวลา (asynchronous)

ดวย กลาวโดยสรปคอไมใชสญญาณนาฬกา วงจรประกอบดวยเกตพนฐานเทานน แตใชการปอนกลบ เชน

น าเอาตพตไปปอนกลบเปนอนพตของวงจร วงจรทท างานแบบไมประสานเวลา (asynchronous) กนไฟ

นอยแตออกแบบยากกวา ลองคนหาบทความอานเพมเตมไดจากhttp://en.wikipedia.org/wiki/

Asynchronous_circuit

แบบฝกหด

1. จงแกวงจร Master-slave pulse-triggered D flip-flip ในรปท 5.5 ใหมขารเซต เมอ reset = 1 จะท าให

flip-flop เอาตพตคา 0 ทนท ไมขนกบ clock (Hint: เมอ reset = 1 ให disable WE และท าให และ

เปน 0 และ 1 ตามล าดบ)

2. จงเขยนแผนภาพเวลา (timing diagram) ในรปท 5.9 และ 5.15 โดยเปลยนล าดบของอนพตเปนล าดบ

ตอไปน

ก. 11011100

ข. 00111010

3. จงออกแบบวงจรนบเลข 0 – 15 (0000 - 1111) โดยใหนบทกครง เมอมสญญาณนาฬกา และวนไป

เรอยๆ เมอนบถง 15 กกลบมาเรมท 0 ใหม และเมอกดรเซตกจะเรมนบท 0000 ใหมเชนกน (Hint: เขยน

FSM กอน แลวคอยออกแบบวงจรตาม FSM)

4. จงดดแปลงวงจรนบในขอ 2 ใหนบเฉพาะเลขค หรอเลขค เชน นบ 0, 2, 4, …, 14 หรอ 1, 3, 5, …, 15

(Hint: เขยน FSM กอน แลวคอยออกแบบวงจรตาม FSM)

5. ทดลองท าวงจร even parity, counter, water pump โดยใชโปรแกรม LogicWorks โปรแกรมนสามารถสราง

แผนภาพเวลาไดดวย ใหศกษาจากคมอการใชโปรแกรมวาท าอยางไร (Hint: ใช binary switch เพอควบคม

สญญาณ Clock แลวคอยๆ สงเกตดการเปลยนแปลงของ State และ Output)

6. จงเขยน finite-state machine (FSM) เพอตรวจจบล าดบตอไปน (อานเรอง regular expression กอน)

ก. 001

ข. 0101

ค. 0(1)?0

Page 65: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 52

ง. 0(1)+0

จ. 0(1)*0

ฉ. 000[01]*111

ช. 0(00 | 11)0

ซ. 0(10)+(01)+0

7. เราสามารถสราง FSM เพอตรวจจบล าดบตอไปนไดหรอไม จงอธบายและใหเหตผลประกอบ

ก. ล าดบทเปน 0 ตดกน n บต และตามดวย 1 ตดกน n บต เชน 01, 0011, 000111, …

ข. ล าดบทเปน palindrome คอล าดบทมความยาวตงแตสองบตขนไป จะอานจากหนาไปหลง หรอหลง

ไปหนา กจะไดผลลพธเหมอนกน เชน 00, 11, 101101, 0100110010 เปนตน

8. ล าดบของอนพตใดใดทเขยนใหอยในรปของนพจนปรกต (regular expression) ได เราสามารถสราง FSM

(ทมจ านวนสถานะจ ากด) เพอตรวจจบล าดบนนไดเสมอ จรงหรอไม?

รำยกำรอำงอง

[1] Yale N. Patt, Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C & beyond,

McGraw-Hill, 2nd edition, 2003.

[2] Randy H. Katz, Gaetano Borriello, Contemporary Logic Design, Prentice Hall, 2nd edition, 2004.

[3] M. Morris Mano, Charles Kime, Logic and Computer Design Fundamentals, Prentice Hall, 4th edition,

2007.

Page 66: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 53

บทท 6 อปกรณอนพตและเอาตพต

วตถประสงคของการเรยนในบทน

อธบายการท างานของอปกรณอนพตและเอาตพตแบบตางๆ ส าหรบวงจรดจทล

ประยกตใชอปกรณอนพตและเอาตพตในโปรแกรม LogicWorks

สรางวงจรแปลงเลขฐานสองเปน BCD ดวยอลกอรทม double-dabble binary-to-BCD conversion

หลงจากทไดเรยนรวงจรแบบตางๆ ทงวงจรเชงเสนและวงจรเชงล าดบไปแลว ตอไปนสตกจะตองทดลองออกแบบ

วงจรเองโดยใชโปรแกรม LogicWorks ในบทนจะอธบายการท างานของอปกรณอนพตและเอาตพตทมกจะใชใน

การออกแบบวงจรดจทล เพอทนสตจะไดน าไปประยกตใชในโปรแกรม LogicWorks ได ชออปกรณตางๆ ขอ

คงไวเปนภาษาองกฤษไมแปลเปนไทย มฉะนนนสตจะไปหาในโปรแกรม LogicWorks ไมเจอ

Toggle Switch

Toggle switch เปนสวตชส าหรบ ON และ OFF เราอาจจะก าหนดให ON เปน 1 (high voltage) และ OFF เปน

0 (low voltage) ดงรปท 6.1 การโยกสวตชเปนการเลอกระหวาง ON หรอ OFF ในโปรแกรม LogicWorks ให

ใชสญลกษณ “Binary Switch”

รปท 6.1 Toggle switch (ซาย) สญลกษณในโปรแกรม LogicWorks (ขวา)

Push Button

Button switch มหลกการท างานทคลายกบ toggle switch ดรปท 6.2 เพยงแตวาปมกดจะอยในสถานะ OFF

เสมอ ตองกดปมใหยบลงไปถงจะ ON เมอปลอย ปมจะเดงขนเองอตโนมต ตางจาก toggle switch ทเมอเราโยก

ไปเปน ON หรอ OFF กจะคางอยทนนเสมอ ในโปรแกรม LogicWorks ใหใชสญลกษณ “SPDT Push button”

โดยปกตขาซายบนจะตอกบ “+5V” และขาซายลางจะตอกบ “GND” ท าใหเมอกดปมจะไดคา 0

รปท 6.2 Push button (ซาย) สญลกษณในโปรแกรม LogicWorks (ขวา)

Page 67: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 54

LED

Light-emitting diode (LED) เปนหลอดไฟทเรองแสง เมอมกระแสไฟฟาไหลผานกจะท าใหหลอดไฟตด ใน

โปรแกรม LogicWorks ใหใชสญลกษณ “LED” มหลายสใหเลอก เชน Black, Blue, Cyan, Green, Magenta,

Red, Yellow

รปท 6.3 LED (ซาย) สญลกษณในโปรแกรม LogicWorks (ขวา)

7-Segments

7-segments เปนชดของหลอดไฟ 7 ดวงทประกอบกนเปนตวเลข ดรปท 6.4 LED สามารถแสดงตวเลขทใชใน

เลขฐานสบและฐานสบหกไดทงหมด คอ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (หรออาจจะใชอกษร

ตวเลก เชน a, b, c, d, e, f กได) ลองคดดเอาเองวาจะตองใหหลอดไฟดวงไหนตดหรอดบเพอเปนตวเลขตางๆ

7-segments มกจะใชรวมกบตวถอดรหส (decoder) เพอลดจ านวนสายไฟทจะตองสงไปควบคม 7-segments

ในโปรแกรม LogicWorks ใหใชสญลกษณ “7-Seg Disp” มหลายสใหเลอก เชน Black, Blue, Cyan, Green,

Magenta, Red, Yellow หลอดไฟทง 7 ดวงคอ a – g ถาใหคา 1 หลอดไฟจะตด

รปท 6.4 7-Segments (ซาย) สญลกษณในโปรแกรม LogicWorks (ขวา)

IC TTL

IC TTL เปนอปกรณส าเรจรปทผลตออกมาหลายรน แตละรนมเบอรก ากบ เชน ไอซเบอร 7400 ในตระกล TTL

ประกอบดวยเกต nand 4 ตว ดรปท 6.5 ไอซจะถกบดกรเขาไปกบแผน PCB (printed circuit board) เพอ

Page 68: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 55

ประกอบกนเปนวงจรอเลกทรอนกส ดานทมรอยบากคอหวหรอดานบนของไอซถาเอาหวขน ขาเบอร 1 จะอยทาง

ดานซายบน ขาเบอรถดไปจะอยขางลางวนไปรอบๆ ไอซ ในรปขาเบอร 7 และ 14 จะตองตอกบแหลงจายไฟ

(GND และ VCC) เพอปอนพลงงานไฟฟาใหกบไอซ ในโปรแกรม LogicWorks ใหใชสญลกษณ “74_00”

โปรแกรมจะตอ VCC และ GND ใหอตโนมต

การใชไอซส าเรจรปกเหมอนกบการเรยกใชไลบรารฟงกชน (library function) ในการเขยนโปรแกรม ขอดคอทน

แรงเราไปไดเยอะมาก เพราะไมตองเขยนโปรแกรมหรอท าฟงกชนนนเองใหเหนอย แตบางครงเรากไมสามารถหา

ไอซทตรงกบความตองการของเราไดพอด กตองหาทางประยกตใชไอซทมใหได เชน น าไอซหลายๆ ตวมา

ประกอบกนใหไดเปนฟงกชนทเราตองการ เปนตน

ลสตรายการไอซทงหมดอยในไฟล Zip เดยวกนกบโปรแกรม LogicWorks นสตสามารถหาเอกสารอธบายการใช

ไอซเหลานนไดจากอนเตอรเนต แตไอซบางตวกไมมใหใชในโปรแกรม LogicWorks

รปท 6.5 IC TTL เบอร 7400 (บน) สญลกษณในโปรแกรม LogicWorks (ลางซาย)

และแผน PCB หรอ printed circuit board (ลางขวา)

IC ส าเรจรปทไดรบความนยมและไดใชบอยๆ ในการท าโครงงานรายวชาน เชน

7483 4-bit full adder

7495 4-bit shift register

Page 69: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 56

Logic Probe

Logic probe เปนอปกรณทใชหาจดบกพรอง (debug) ของวงจรดจทล ดรปท 6.6 เราใชโพรบจมลงไปบนสายไฟ

เพอวดคาแรงดนวาเปน low (0) หรอ high (1) สายไฟเสนสด าตองตอกบ GND ของวงจรทเราจะหา

จดบกพรอง แลวเอาหวปากกาไปจมทจดทเราตองการจะวด ทดามปากกาจะมหลอดไฟหรอจอภาพเลกๆ แสดง

คาทวดได ในโปรแกรม LogicWorks ใหใชสญลกษณ “Binary Probe” Probe จะแสดงคา 0, 1, หรอ Z (Z

หมายถง high impedance หรอ open circuit)

รปท 6.6 Logic Probe (ซาย) สญลกษณในโปรแกรม LogicWorks (ขวา)

Keyboard

คยบอรดกคอปมหลายๆ ปมทมารวมกน ดรปท 6.7 นสตอาจจะสรางคยบอรดเองจาก Push button หลายๆ ตว

หรอจะใชของส าเรจรปในโปรแกรม LogicWorks กได ในโปรแกรม LogicWorks ใหใชสญลกษณ “Hex

Keyboard”

รปท 6.7 คยบอรด (ซาย) สญลกษณในโปรแกรม LogicWorks (ขวา)

Page 70: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 57

การแปลงเลขฐานสองเปน BCD

ปญหาหนงทนกเรยนจะตองเจอเวลาจะแสดงผลทาง 7-segment คอขอมลเปนเลขฐานสอง เชน 11002 หรอ

1210

แตจะแสดงเปนเลขฐานสบคอ 1 และ 2 บน 7-segment สองตว ตองแปลงเลขฐานสอง (binary) ใหเปน

เลขฐานสบเขารหสฐานสอง (binary-coded decimal หรอ BCD) ดวยอลกอรทม double-dabble binary-to-

BCD conversion อลกอรทมนท างานโดยเลอนบตไปทางซายทละบตจนหมดคอลมน Binary ทกครงทเลอนบต

ถาคอลมนใดมคามากกวาหรอเทากบ 5 ใหบวกดวย 3 (ยกเวนคอลมน Binary) ดตวอยางในรปท 6.8 แปลง

เลขฐานสองคอ 1111 1111 เปนเลขฐานสบคอ 255

รปท 6.8 ตวอยางการแปลงเลขฐานสอง (binary) เปนเลขฐานสบเขารหสฐานสอง (BCD)

ดวยอลกอรทม double-dabble binary-to-BCD conversion

ถาเปนเลขฐานสองแบบจดตรง (fixed point) กจะมทศนยมดวย การแปลงสวนทเปนทศนยมเปน BCD ใหคณ

ดวยสบ กจะไดทศนยม 1 หลก การคณสบท าเปนฮารดแวรไดงายเพราะ

10n = 23n + n + n = (n << 3) + n + n

ตวอยางเชน 0.11012 คอ 0.8125 ในเลขฐานสบ

0.1101 คณสบ = (0.1101) << 3 + 0.1101 + 0.1101

= 1000.001 ทศนยมหลกแรกคอ 10002 หรอ 8

0.001 คณสบ = (0.001) << 3 + 0.001 + 0.001

= 1.01 ทศนยมหลกถดไปคอ 00012 หรอ 1

0.01 คณสบ = (0.01) << 3 + 0.01 + 0.01

= 10.1 ทศนยมหลกถดไปคอ 00102 หรอ 2

0.1 คณสบ = (0.1) << 3 + 0.1 + 0.1

= 0101.0 ทศนยมหลกถดไปคอ 01012 หรอ 5

ถาสวนทเปนทศนยมเปนศนย กแสดงวาไมมทศนยมหลกตอไปแลว ใหหยดแคน

Page 71: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 58

เอกสารประกอบ (ส าหรบอานเพมเตม)

ลองอานบทความตอน

Transistor-transistor logic, http://en.wikipedia.org/wiki/Transistor-transistor_logic

7400 series, http://en.wikipedia.org/wiki/7400_series

แบบฝกหด

1. จงทดลองใชอปกรณอนพตและเอาตพตทกตวทสอนในบทนดวยโปรแกรม LogicWorks ใหช านาญ

รายการอางอง

[1] Yale N. Patt, Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C & beyond,

McGraw-Hill, 2nd edition, 2003.

[2] Randy H. Katz, Gaetano Borriello, Contemporary Logic Design, Prentice Hall, 2nd edition, 2004.

[3] M. Morris Mano, Charles Kime, Logic and Computer Design Fundamentals, Prentice Hall, 4th edition,

2007.

Page 72: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 59

บทท 7 ลาดบชนของหนวยความจา

วตถประสงคของการเรยนในบทน

• อธบายลาดบชนของหนวยความจา (memory hierarchy) ในคอมพวเตอร

• อธบายโครงสรางและการทางานของเรจสเตอร (register), แคช (cache), เอสแรม (static RAM), และ ดแรม

(dynamic RAM)

• อธบายการทางานของบฟเฟอรสามสถานะ (tri-state buffer), บสขอมล (data bus), ชองเขาออกไดสองทาง

(bi-directional port)

ในระบบคอมพวเตอรหนวยความจาเปนสวนประกอบทสาคญไมแพหนวยประมวลผล เพราะขอมลสวนใหญท

หนวยประมวลผลอานและเขยนจะอยบนหนวยความจา ถาหนวยประมวลผลทางานไดเรวมาก แตอานเขยน

หนวยความจาไดชา กจะเกดปญหาคอขวดทหนวยความจา (memory bottleneck) ขนได ในบทนเราจะมาศกษา

หนวยความจาในระดบชนตางๆ

ทาไมตองแบงลาดบชน

หนวยความจาแบงเปนระดบชนแบบพระมดไดดงรปท 7.1 ชนบนสดของพระมดคอหนวยความจาทอานเขยนได

เรวแตมราคาแพง สวนชนลางสดคอหนวยความจาท อานเขยนไดชาแตมราคาถก ทาไมเราไมใชเฉพาะ

หนวยความจาทดๆ ทอยบนยอดพระมด? เพราะวามนแพงมากและจะทาใหระบบคอมพวเตอรมราคาแพงเกน

กวาทคนธรรมดาทวไปจะซอหามาใชได วธทจะทาใหไดระบบคอมพวเตอรทมประสทธภาพในราคาทเหมาะสมคอ

ใชหนวยความจาในทกลาดบผสมผสานกน ทราคาแพงกใชปรมาณนอยๆ สวนทราคาถกกใชปรมาณมากๆ ได

ระบบปฏบตการ (operating system) จะเกบขอมลทถกเรยกใชบอยๆ ไวบนยอดพระมด เมอเวลาผานไปถา

ขอมลไมคอยถกเรยกใช จะถกนาลงไปเกบไวดานลาง วธนทาใหใชหนวยความจาไดอยางมประสทธภาพและ

คมคามากทสด

รปท 7.1 ลาดบชนของหนวยความจา

Page 73: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 60

เรจสเตอร (Register)

เรจสเตอรเปนหนวยความจาทเรวทสด สรางขนมาจากแลตช (หรอฟลปฟลอปกได) โดยนาแลตชมาตอขนานกน

ตวอยางเรจสเตอรขนาด 4 บตแสดงในรปท 7.2 D[3:0] เปนอนพตและ Q[3:0] เปนเอาตพตของเรจสเตอร

รปท 7.2 เรจสเตอรขนาด 4 บต

เอสแรม (Static RAM - SRAM)

เอสแรมกคอเรจสเตอรหลายๆ ตว และกาหนดเลขทอย (address) ใหเรจสเตอรแตละตว สาหรบการอางถงเมอ

จะอานหรอเขยนเรจสเตอรตวนน เอสแรมขนาด 4x3 แสดงในรปท 7.3 ขนาด 4x3 หมายถงมเรจสเตอรขนาด 3

บต 4 ตว เลขทอย (address) คอ 00, 01, 10, และ 11 ตามลาดบ เวลาอานขอมลให A[1:0] เทากบเลขทอยท

ตองการอานและ WE = 0 เวลาเขยนให A[1:0] เทากบเลขทอยทตองการเขยนและใหขอบขาขน (positive edge)

ทขา WE

รปท 7.3 เอสแรมขนาด 4x3 บต

Page 74: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 61

ดแรม (Dynamic RAM - DRAM)

ดแรมเกบขอมล 1 บตไวในตวเกบประจ (capacitor) 1 ตว ดงแสดงในรปท 7.4 เลขทอย (address) ของแตละ

บตจะระบดวยแถว (row) และคอลมน (column) วธอานขอมลคอทาให read rowline และ read columnline

เปน 1 (high) ถาตวเกบประจอยในสถานะมประจ (charged) จะอานคาบตท read columnline ได 0 (low) แต

ถาตวเกบประจอยในสถานะไมมประจ (discharged) จะอานคาบตท read columnline ได 1 วธเขยนขอมลคอทา

ให write columnline เปนคาทจะเขยน (0 หรอ 1) และ write rowline เปน 1 (high) เวลาเขยนตองเขยนทง

แถว รปท 7.4 คอดแรมตวแรกของโลก ใชทรานซสเตอร 3 ตวและตวเกบประจ 1 ตวตอขอมล 1 บต ปจจบน

เทคโนโลยดแรมพฒนาไปมาก ใชทรานซสเตอรและตวเกบประจอยางละตวตอขอมล 1 บต

รปท 7.4 ดแรมขนาด 1 บต

เมอเขยนขอมลจะเปนการประจ (charge) ตวเกบประจ เมอเวลาผานไป ตวเกบประจจะคอยๆ คายประจ

(discharge) ออกมาชาๆ จนหมด ถาไมอยากใหคาทเขยนไวหายไป กตองอานคาขนมาและเขยนซาอยเรอยๆ

เพอประจใหม เมอใชเนอทดแรมมากๆ การอานเขยนขอมลจะชาลง เพราะมจานวนแถวทตองคอยเขยนซามาก

ขน ทงเอสแรมและดแรมเปนหนวยความจาลบเลอนได (volatile memory) คอถาหยดจายไฟใหหรอไฟดบ

ขอมลทงหมดจะหายไปทนท ตางจากหนวยความจาลบเลอนไมได (non-volatile memory) ทขอมลจะยงอยถา

ไฟดบ แตกมขอเสยคอการอานเขยนขอมลจะชากวามาก

Big-endian และ Little-endian

การเรยงขอมลในหนวยความจามสองแบบ แบบแรกเรยกวา Big-endian คอเรยงขอมลจากไบตแรกไปไบต

สดทาย แบบทสองเรยกวา Little-endian คอเรยงกลบกน ตวอยางเชน ขอมล (int) คอ 0x12345678 หรอ

305,419,896 ในฐานสบ เกบแบบ Big-endian และ Little-endian ไดดงน

Addr i Addr i + 1 Addr i + 2 Addr i + 3

แบบ big-endian 12 34 56 78

แบบ little-endian 78 56 34 12

Page 75: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 62

กรณทหนวยความจาตออยกบไมโครโพรเซสเซอร เวลาอานเขยนหนวยความจาไมโครโพรเซสเซอรจะเปน

ตวกาหนดวาจะเกบขอมลแบบ Big-endian หรอแบบ Little-endian ไมโครโพรเซสเซอรในปจจบน เชน Intel

เกบขอมลแบบ Little-endian

ฮารดดสก (Harddisk)

ฮารดดสกบนทกขอมลเปนสญญาณแมเหลกบนจานดสก การใชสญญาณแมเหลกทาใหอานเขยนขอมลไดชากวา

สญญาณไฟฟาเชนใน เรจสเตอรและแรม แตจานแมเหลกเกบขอมลไดมากกวา เราจะไปเรยนเรองฮารดดสกและ

การจดเกบขอมลในฮารดดสกโดยละเอยดในรายวชา 2301371 ระบบปฏบตการ

บฟเฟอรสามสถานะ (Tri-state Buffer)

ในการออกแบบวงจรดจตล นอกจากคา “0” และ “1” แลว ยงมคา “z” ดวย z หมายถง high impedance คอม

ความตานทานสงมาก เหมอนวงจรเปด (open circuit) สญลกษณของบฟเฟอรสามสถานะคอรปสามเหลยม ดรป

ท 7.5 ถา S = 1 จะทาให B = A แตถา S = 0 จะทาให B = z (เหมอนสาย B ขาด)

รปท 7.5 บฟเฟอรสามสถานะ (tri-state buffer)

พอรตเขาออกไดสองทาง (Bi-directional Port)

โดยปกตขาหรอพอรต (port) ของอปกรณดจทลจะเปนอนพตหรอเอาตพตเทานน แตเราสามารถทาใหพอรต

เดยวเปนทงอนพตและเอาตพตได ประโยชนของการใชพอรตอนพตและเอาตพตรวมกนคอชวยลดจานวนขาของ

อปกรณลง โดยเฉพาะอปกรณหนวยความจาทอาจจะมขา data-in และ data-out มากถง 32 หรอ 64 บต รปท

7.6 แสดงพอรตเขาออกไดสองทางทสรางจากบฟเฟอรสามสถานะ ถา S = 0 จะทาใหพอรตเปนเอาตพต ถา S =

1 จะเปนพอรตเปนอนพต

รปท 7.6 พอรตเขาออกไดสองทาง (bi-directional port)

Page 76: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 63

บสขอมล (Data Bus)

การใชบสขอมลทาใหอปกรณหลายๆ ชนสอสารกนไดบนสายไฟเสนเดยวกน ลองดรปท 7.7 ถาไมใชบสจานวนสายไฟจะ

เยอะมาก และเพมขนตามจานวนอปกรณ (device) ทม การใชบสกเพอลดจานวนสายไฟลง แตมขอเสยคอในชวงเวลา

หนงจะมอปกรณคเดยวทสอสารกนได อปกรณชนอนๆ จะใหคา high impedance (z) ทาใหเหมอนตดขาดออกจากบส

รปท 7.7 อปกรณ 4 ชนเชอมตอกนแบบ fully-connected (บน) เชอมตอกนแบบบส (ลาง)

รอม (ROM), พรอม (PROM), อพรอม (EPROM), ออพรอม (EEPROM)

รอม (ROM - Read-Only Memory) แสดงในรปท 7.8 เปนหนวยความจาลบเลอนไมได (non-volatile memory) ทม

การบนทกคาเรมตนมาจากโรงงานผลต ผใชไมสามารถแกไขคาภายในรอมได ในเมนบอรดของพซจะใชรอมเพอบนทก

โปรแกรม BIOS (Basic Input/Output System) ซงเปนโปรแกรมแรกทจะทางานเมอเราเปดคอมพวเตอร คาสงทบรรจ

อยใน BIOS คอใหคนหาและโหลดระบบปฏบตการ (operating system) ขนมาทางาน

เพอใหการใชงานรอมมความยดหยนมากขน จงมรอมชนดทสามารถบนทกคาใหมได เชน

Programmable ROM (PROM) ผใชสามารถบนทกขอมลไดเพยงครงเดยว

Erasable PROM (EPROM) ลบขอมลดวยแสงอลตราไวโอเลตและบนทกใหมไดหลายครง

Electronic EPROM (EEPROM) ลบขอมลดวยไฟฟาและบนทกใหมไดหลายครง

Page 77: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 64

รปท 7.8 ROM (BIOS), EPROM, EPROM eraser, EEPROM burner

Page 78: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 65

เอกสารประกอบ (สาหรบอานเพมเตม)

อปกรณชนสาคญทเชอมระหวางไมโครโพรเซสเซอรกบดแรมคอ “แคช (cache)” แตเนองจากเวลาสอนมจากด

และมเนอหาอนทสาคญกวาเปนจานวนมาก ขอใหนกเรยนอานบทความตอไปน

• http://en.wikipedia.org/wiki/CPU_cache

• Intel Pentium Cache, http://download.intel.com/design/intarch/papers/cache6.pdf

• Cache Memory Book, Morgan Kaufmann; 2nd edition, 1998.

• Cache Memories, ACM Computing Surveys (CSUR), 14(3): 473–530, 1982.

แบบฝกหด

1. จงทดลองใชมอดล PROM และ (static) RAM บนโปรแกรม LogicWorks ใหศกษาการสรางพรอมและแรม

จากคมอการใชงานโปรแกรม ก) ทดลองกาหนดคาเรมตนให PROM และลองอานคาดวาไดถกตองหรอไม

ข) ทดลองอานและเขยนคาใน RAM วาไดคาทถกตองหรอไม

รายการอางอง

[1] Yale N. Patt, Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C & beyond,

McGraw-Hill, 2nd edition, 2003.

[2] Randy H. Katz, Gaetano Borriello, Contemporary Logic Design, Prentice Hall, 2nd edition, 2004.

[3] M. Morris Mano, Charles Kime, Logic and Computer Design Fundamentals, Prentice Hall, 4th edition,

2007.

[4] Brent Keeth and R. Jacob Baker, DRAM Circuit Design: A Tutorial, IEEE Press Series on Microelectronic

Systems, 2001.

Page 79: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 66

บทท 8 โปรแกรม LogicWorks

วตถประสงคของการเรยนในบทน

• ใชโปรแกรม LogicWorks เพอออกแบบและจาลองการทางานของวงจรเชงผสมและวงจรเชงลาดบ

• จาลองการทางานของวงจรบวก (adder)

• การออกแบบโดยแยกเปนมอดล (module)

• เลอกใชไอซ (Integrated Circuit: IC) ในตระกล TTL

• ใชอปกรณอนพตเอาตพต เชน สวตช ปมกด LED 7-segment

• จาลองการทางานของวงจรควบคมปมนา (water pump controller)

• ใชแผนภาพเวลา (timing diagram)

• ใชภาษา VHDL เพอสรางเครองสถานะจากด (Finite-State Machine: FSM)

• ใชพรอม (Programmable Read-Only Memory: PROM) และแรม (Random Accessed Memory: RAM)

• มดสายไฟหลายๆ เสนรวมกน

ในบทนเราจะมาดการออกแบบวงจรโดยใชโปรแกรม LogicWorks ผมคดมาเฉพาะตวอยางทนสตจาเปนตองใช

ในการทาโครงงาน และใชทาความเขาใจการทางานไมโครโพรเซสเซอร การใชงานโปรแกรม LogicWorks ท

นอกเหนอจากน นสตสามารถศกษาไดจากคมอการใชงานโปรแกรม

วงจรบวก (Adder)

ตวอยางแรกลองทาวงจรบวกแบบงายๆ กอน ขนแรกกทาวงจรบวกเตมอตรา (full adder) สาหรบบวกเลข 1 บต

กอน หลงจากนนใสสวตชสาหรบปอนอนพตเขาไปทดสอบ ใส LED หรอ probe สาหรบดเอาตพต ดรปท 8.1

รปท 8.1 วงจรบวกเตมอตรา (full adder)

Page 80: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 67

ตอไปถาเราจะทาวงจรบวกขนาด 4 บต กเอาวงจรบวกเตมอตรา 4 ตวมาตอขนานกน อาจจะใชวธ copy & paste

แตเรามวธทดกวานนคอ สรางมอดลวงจรบวกเตมอตราขนมากอน แลวใชมอดลนซาไดหลายๆ ครง การสราง

มอดลเรมจาก New -> Model Wizard -> Create a new, empty model และ Open the new model as an

independent design -> Structural circuit และปอนชอมอดล เชน FullAdder ขนตอไปใสขาอนพต A, B,

Carry-in และขาเอาตพต Sum, Carry-out จากนนออกแบบมอดลตามทตองการ แลวก save เกบไว เวลาจะ

เรยกใชก New -> Model Wizard -> Select an existing file และ Create a new symbol with the specified

model attached -> Pin locations (กด next) -> ตงชอสาหรบ new part เชน FullAdder -> New Lib (ตงชอ

เชน MyLib จะไดไมไปปนกบ library อน) -> กด Finish เสรจแลวจะม FullAdder ใหเลอกจากใน View ->

Parts Palette ทอยทางขวามอ

รปท 8.2 วงจรบวกขนาด 4 บต ทสรางจากมอดล FullAdder

เราอาจจะทาวงจรบวกขนาด 4 บตเกบไวเปนอกมอดลหนง สาหรบทาวงจรบวกขนาดใหญขน เชน 8, 16, 32 บต

จะไดไมตองเอาวงจรบวกเตมอตรามาตอกนทละบต

Page 81: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 68

การเลอกใชไอซ (IC) ในตระกล TTL

ไอซยอมาจาก Integrated Circuit (IC) หรอเรยกวา “วงจรรวม” สวน TTL ยอมาจากชอเทคโนโลยทใชทาวงจร

รวมคอ “Transistor Transistor Logic” มไอซสาเรจรปในตระกล TTL ใหเลอกใชมากมาย เชน 74LS83 ในรปท

8.3 เวลาคนหาใน parts palette ใหใชคยเวรด “74_83”

รปท 8.3 วงจรรวม TTL เบอร 74LS83 หรอ 4-bit binary full adder with fast carry (ซาย)

และสญลกษณในโปรแกรม LogicWorks (ขวา)

ปมกด

โดยปกตปมกดแบบทเมอปลอยแลวจะเดงขนเองอตโนมต ขณะกดจะใหคา 0 เมอปลอยจะใหคา 1 ดรปท 8.4

เมอนาหลายๆ ปมมาประกอบกนกเปนคยบอรด

รปท 8.4 ปมกด SPDT Pushbutton (ซาย) คยบอรดทสรางขนจากปมกดหลายๆ อน (ขวา)

Page 82: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 69

7-Segment

7-Segment คอหลอดไฟ 7 ดวง สาหรบแสดงคา 0 – 9 (ฐานสบ) หรอ 0 – F (ฐานสบหก) หลอดไฟดวงท

แปดเอาไวแสดงจดทศนยม รปท 8.5

รปท 8.5 7-Segment

วงจรควบคมปมน า

ผมเอาวงจรปมนาในบทท 5 รปท 5.14 มาทาในโปรแกรม LogicWorks กจะไดดงรปท 8.6 ดฟลปฟลอปทใชใน

โปรแกรม LogicWorks คอ “D Flip Flop wo/SQ/” ซงจะทางาน (Q = D) ทขอบขาขน และรเซต (D = 0)

ทนทท R มคาเปน 1 นกเรยนอาจจะใช binary switch แทนสญญาณนาฬกาแลวใชเมาสคลกเพอสรางสญญาณ

นาฬกาเอง จะไดสงเกตดการเปลยนแปลงของคาตางๆ ไดทน

รปท 8.6 วงจรควบคมปมนาในโปรแกรม LogicWorks (แบบ schematic)

Page 83: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 70

ใหตงชอสายไฟเปน Reset, Clock, State, Sensor_up, Sensor_dn, Pump เมอจาลองการทางานของวงจร

สญญาณเหลานจะไปปรากฏในแผนภาพเวลาทอยดานลางของจอภาพดงรปท 8.7 (ปรบ Timing Options เปน

Retain forever)

รปท 8.7 แผนภาพเวลาของวงจรควบคมปมนาในโปรแกรม LogicWorks

VHDL

VHDL ยอมาจาก VHSIC Hardware Description Language (VHIC คอ Very High Speed Integrated

Circuits) เปนภาษาทใชอธบายฮารดแวร ดงนนการออกแบบฮารดแวรสามารถทาไดในลกษณะคลายๆ กบการ

เขยนโปรแกรม จากประสบการณสอนของผม ยงไมควรใหนสตใช VHDL เพราะ VHDL มทงสวนทคอมไพลเปน

ฮารดแวรไดจรง และสวนทคอมไพลเปนฮารดแวรไมได เชน if-else, for-loop, while-loop คาสงเหลานใชเพอ

ทดสอบการทางานของวงจรเทานน แตนสตมกจะใชคาสงในสวนทคอมไพลเปนฮารดแวรไมไดเพอทางานสง

อาจารย ผมอนโลมใหใช VHDL ไดเฉพาะกบ FSM ทมขนาดใหญ เพอลดความยงยากในการออกแบบ FSM

วธการสรางมอดลแบบ VHDL มขนตอนเหมอนการสรางมอดลแบบปกต ขนแรกเลอก Model Wizard ในขน

ตอไปเปลยนตวเลอกจาก Structural circuit เปน VHDL เมอเขยน VHDL เสรจแลวกลองเลอก VHDL ->

Compile ดวามขอผดพลาด (error) หรอไม

เปรยบเทยบการออกแบบวงจรดวยเครองมอแบบ schematic (ซาย) และ hardware description language (ขวา)

Wire a, b, c, d, e;

And(a, b, d)

Or(d, c, e)

ในบทนผมจะแสดงภาษา VHDL เฉพาะสวนทจาเปนสาหรบการทา FSM สวนทนอกเหนอจากนนสตสามารถ

ศกษาเพมเตมไดจากหนงสอ “ภาษา VHDL สาหรบการออกแบบวงจรดจตอล” ดในรายการอางองทายบท

Page 84: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 71

FSM ของปมนาเขยนแบบน

library IEEE; use IEEE.std_logic_1164.all;

entity Water_pump_VHDL is port ( reset : in std_logic; clock : in std_logic; sensor : in std_logic_vector(1 downto 0); pump : out std_logic ); end Water_pump_VHDL;

architecture arch1 of Water_pump_VHDL is type state_type is (s0, s1); signal state : state_type; begin state_p: process(clock, reset) begin if reset = '0' then state <= s0; elsif clock'event and clock = '1' then -- positive edge case state is when s0 => if sensor(1 downto 0) = "00" then state <= s0; end if; if sensor(1 downto 0) = "01" then state <= s0; end if; if sensor(1 downto 0) = "10" then state <= s1; end if; if sensor(1 downto 0) = "11" then state <= s1; end if; when s1 => if sensor(1 downto 0) = "00" then state <= s0; end if; if sensor(1 downto 0) = "01" then state <= s1; end if; if sensor(1 downto 0) = "10" then state <= s1; end if; if sensor(1 downto 0) = "11" then state <= s1; end if; end case; end if; end process state_p;

output_p: PROCESS(state,sensor) begin case state is when s0 => if sensor(1 downto 0) = "00" then pump <= '1'; end if; if sensor(1 downto 0) = "01" then pump <= '1'; end if; if sensor(1 downto 0) = "10" then pump <= '0'; end if; if sensor(1 downto 0) = "11" then pump <= '0'; end if; when s1 => if sensor(1 downto 0) = "00" then pump <= '1'; end if; if sensor(1 downto 0) = "01" then pump <= '0'; end if; if sensor(1 downto 0) = "10" then pump <= '0'; end if; if sensor(1 downto 0) = "11" then pump <= '0'; end if; end case; end process output_p; end arch1;

เวลาทาโครงงานนสตอาจจะลากสายไฟ state ออกมาแสดงเปนเอาตพตดวย จะไดร วา FSM ทางานไปถง state

ไหนแลว เรยกใชมอดลทสรางจาก VHDL ไดเหมอนมอดลปกต ดรปท 8.8

Page 85: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 72

รปท 8.8 วงจรควบคมปมนาในโปรแกรม LogicWorks (แบบ VHDL)

พรอม (PROM) และแรม (RAM)

วธการสรางมอดลประเภทหนวยความจาใน LogicWorks ใหไปท Simulation -> PROM/RAM/PLA Wizard

จะมใหเลอก 3 ประเภทคอ PLA, PROM และ RAM ในทนจะขออธบายเฉพาะสองประเภทหลง

PROM คอ programmable read-only memory เปนหนวยความจาแบบลบเลอนไมได (non-volatile) คอเมอ

ไฟดบขอมลกยงอย ปกตจะเขยนคาลงในพรอมไดเพยงครงเดยว เหมอนแผน CD/DVD การเขยนตองใช

อปกรณพเศษตางหาก เมอเขยนแลวถงจะนามาใชเปน ROM แบบ read-only ได พรอมหลายชนดสามารถนา

กลบมาเขยนใหมได เชน EEPROM หรอ electronically erasable PROM

แรม (RAM) ในทนหมายถงเอสแรม (RAM) เปนหนวยความจาแบบลบเลอนได คอเมอไฟดบขอมลจะหาย

หมด การอานและเขยนขอมลทาไดงาย ลองสรางแรมทม Address lines = 3, Bits per word = 2 และ Enter hex

data manually จะไดแรมขนาด 23 = 8 ชอง แตละชองเกบขอมลได 2 บต กาหนดคาในแรมเปน 1 1 2 2 1 2 2

2 ตอนนสงทบรรจอยในแรมคอตารางคาความจรงสาหรบสถานะถดไป (next state) และเอาตพต (output) ของ

วงจรปมนา ดงน (A2A1A0 คอ สถานะปจจบน ตวรบรตวบนและตวลาง D1D0 คอ สถานะถดไปและเอาตพต ใน

วงเลบคอเลขฐานสบของ D1D0)

A2A1A0 D1D0

000 01 (1)

001 01 (1)

010 10 (2)

011 10 (2)

100 01 (1)

101 10 (2)

110 10 (2)

111 10 (2)

รปท 8.9 แสดงวงจรควบคมปมนาแบบใชพรอม ทจรงแลวพรอมกคอตารางทใชเกบคาคงท จะนาไปประยกต

เพอเกบคาอะไรกได เชน ตารางคา sine, cos, tan หรอ logarithm เปนตน หรอจะใชแทนวงจรเชงผสมโดยเกบ

ตารางคาความจรงกได แตในทางปฏบตไมคอยทากนเพราะใชจานวนทรานซสเตอรมากกวาการออกแบบดวยเกต

Page 86: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 73

รปท 8.9 วงจรควบคมปมนาในโปรแกรม LogicWorks (แบบใช PROM)

ตอไปลองสรางแรมทม Address lines = 4, Chip enables = 1, Bits per word = 8, Common I/O pins จะได

ตารางเกบคาขนาด 24 = 16 ชอง แตละชองเกบขอมลได 8 บต ดงรปท 8.10 ขา A 4 บตใชระบเลขทอย

(address) ทตองการอานหรอเขยน ขา DIO 8 บตคอพอรตเขาออกไดสองทาง (bi-directional port) ทใชทงอาน

และเขยน แผนภาพเวลาการอานและเขยนแรมแสดงในรปท 8.11 แรมจะทางานได CE ตองเปน 0 เสมอ เวลา

อานคาจากแรมให WE = 1, A = address ทเราตองการ คาจะออกมาทาง DIO หลงจาก AA (address access)

time สวนเวลาเขยนคาลงแรมให WE = negative pulse, A = address ทเราตองการ การเขยนจะเสรจทขอบขาขน

ของ WE ตองใหเลขทอยมากอนขอบขาขนอยางนอย AW (address valid to end of write) time และตองให

ขอมลมากอนกอนขอบขาขนอยางนอย DW (data to write time overlap) time แผนภาพเวลาของไอซจรงๆ จะม

เงอนไขทางเวลาทซบซอนกวานมาก ทอธบายมาเปนเพยงสวนหนงเทานน ในโปรแกรม LogicWorks จะไมม

เงอนไขทางเวลา เชน สมมตไดวา AA, AW, DW time มคาเปนศนย (หรอจะกาหนดใหมคากได)

ถา CE = 1 ขา DIO ทงหมดจะเปนคา z ใชในกรณทตองการตดแรมออกจากบสขอมลทมอปกรณหลายตวเกาะ

อย

รปท 8.10 แรมขนาด 24 x 8 บต

Page 87: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 74

รปท 8.11 แผนภาพเวลา (ซาย) การอานและ (ขวา) เขยนแรม

การมดสายไฟหลายๆ เสนรวมกน

โดยปกตบสขอมลทใชเชอมตออปกรณหลายๆ ชนมกจะมสายไฟจานวนมาก เชน 8, 16, 32, 64 เราสามารถใช

คาสง Schematic -> New Breakout -> เตม D0..7 เพอมดสายไฟ 8 เสนรวมกน เวลายายตาแหนงจะไดไมตอง

ยายสายไฟทละเสน ดตวอยางในรปท 8.12 เวลาจะดงแคบางเสนจากมดออกมาใชก New Breakout แค D6..7

แลวเอาไปแปะไวกบมดเดม

รปท 8.12 การมดสายไฟหลายๆ เสนรวมกน

หนวยควบคม (Control Unit)

ธรรมชาตของฮารดแวรคอ มนออกแบบยากกวาการเขยนโปรแกรม เชน จะออกแบบวงจรคณยงไง? แตเราทราบ

วา m x n คอ m บวกกน n ครง ดงนนแทนทเราจะออกแบบวงจรคณ เรากใชวงจรบวกซงออกแบบงายกวามาก

และใชวงจรบวกเพยงตวเดยวกพอ แตใชซา n ครง โดยมหนวยควบคมซงกคอ FSM เปนตวกาหนดจงหวะการ

ทางาน ผมออกแบบเครองคดเลขงายๆ ททาการคณไดโดยใชวงจรบวกเพยงสองตวในรปท 8.13 ในขนนยงไมม

ตวควบคม สญญาณทมาจากตวควบคม ผมใส binary switch ไว เพอใหนสตทดลองเลนดได อยากใหสญญาณ

ควบคมยงกโยกสวตชเอาเอง

Page 88: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 75

รปท 8.13 วงจรคณทใชวงจรบวกสองตว (ไมม FSM)

สวนประกอบของวงจรในรปท 8.13 มดงน

• Shift Register เปน shift register ขนาด 4 บต (74_95) ใชเกบตวถกดาเนนการ (operand) ทผใช

ปอนเขามาทางคยบอรด โดยเลอน (shift) เขาไปเกบทละ 1 บต ถา MODE = 0 จะเปนเลอนซายคอ

เมอไดขอบขาลงท CLK1 จะเลอนซายไป 1 บต โดย SER IN (serial in) จะเขาไปแทนท LSB (MSB

จะหายไป) ถา MODE = 1 เปนการโหลดคาจากขา D, C, B, A เขาไปเกบในเรจสเตอร ขา QD, QC,

QB, QA เอาตพตคาปจจบนของเรจสเตอรอยตลอดเวลา

• Register A และ B เปนเรจสเตอรขนาด 4 บต (Reg-4 inv CLR) ถาเกดขอบขาขนท CLK จะเปนการ

โหลดคาจากขา D3, D2, D1, D0 เขาไปเกบในเรจสเตอร ขา Q3, Q2, Q1, Q0 เอาตพตคาปจจบน

ของเรจสเตอรอยตลอดเวลา ขา CLR ใชรเซตคาในเรจสเตอรใหเปนศนย โดยให CLR = 0 จะรเซต

ทนท ไมตองรอใหเกดขอบขาขนหรอขอบขาลงท CLK

Page 89: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 76

• บฟเฟอรสามสถานะ (tri-state buffer) ขนาด 4 บต (Buffer-4 T.S.) สงเกตวาขาเอาตพตของเรจส

เตอรทกตวจะตอกบบฟเฟอรสามสถานะกอนลงบสขอมล (data bus) ถา OE = 0 จะนาคา D3, D2,

D1, D0 ลงบสขอมล แตถา OE = 1 จะใหคา z (ตดออกจากบสขอมล)

• คยบอรด อยทางซายมปม 0, 1, Reset (เมอกดจะรเซตคาใน shift register ใหเปน 0), x, = นอกจาก

การรเซตคาใน shift register แลวผมตองการใหโหลดคาลงไปไดดวย เพราะการคณ ShiftReg = RegA

x RegB จะทาดงน

RegA = operand 1 (คาบวก)

RegB = operand 2 (คาบวก)

ShiftReg = 0 // reset

while RegB > 0 do

ShiftReg = ShiftReg + RegA // load

RegB = RegB – 1

end while

ดงนนปม Reset จงทางานไดทงเปน reset หรอ load ขนอยกบวา multiplexor (Mux-2x4 T.S.) จะ

เลอกคาอะไร ระหวางคาศนยกบคาจากบสขอมลเพอโหลดลง shift register ถา S0 = 0 จะเลอกคาศนย

ถา S0 = 1 จะเลอกคาจากบสขอมล

• วงจรบวก 2 ตว (74_83) ตวซายใชคานวณ ShiftReg + RegA ตวขวาใชคานวณ RegB – 1

การคณมขนตอนดงน

1. กดปม Reset เพอทาให Shift Register มคาเปนศนย

2. ปอนคาตวถกดาเนนการ (operand) ตวแรก โดยกดปม 0 หรอ 1

3. กดปม Multiply (x) เปนการสนสดการปอนคา

4. ให OE ของ Buffer 1 มคาเปน 0 เพอเอาคาใน Shift Register ลง Data Bus

5. ใหขอบขาขนท CLK ของ Register A เพอเขยนคาจาก Data Bus ลง Register A

6. รเซตคาใน Shift Register ใหเปน 0

7. ปอนคาตวถกดาเนนการ (operand) ตวทสอง โดยกดปม 0 หรอ 1

8. กดปม Equal (=) เปนการสนสดการปอนคา (OE ของ Buffer 1 ยงมคาเปน 0)

9. ใหขอบขาขนท CLK ของ Register B เพอเขยนคาจาก Data Bus ลง Register B (และในเวลา

เดยวกนให OE ของ Buffer 1 มคากลบเปน 1)

10. รเซตคาใน Shift Register ใหเปน 0 และใหขา S0 (select) ของ MUX มคา 1 เพราะตอไปเรา

จะเขยนคาจาก Data Bus ลง Shift Register เทานน (จะไมรเซตแลว)

11. เรมทาการคณโดยให OE ของ Buffer 2 มคาเปน 0 เพอเอาคา Shift Register + Register A

ลง Data Bus

12. กดปม Reset (Load) เพอเขยนคาจาก Data Bus ลง Shift Register (และในเวลาเดยวกนให

OE ของ Buffer 2 มคากลบเปน 1)

13. ให OE ของ Buffer 3 มคาเปน 0 เพอเอาคา Register B – 1 ลง Data Bus

Page 90: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 77

14. ใหขอบขาขนท CLK ของ Register B เพอเขยนคาจาก Data Bus ลง Register B (และในเวลา

เดยวกนให OE ของ Buffer 3 มคากลบเปน 1)

15. ตรวจสอบดสญญาณ Terminate วาเปน 1 หรอไม ถา Terminate = 0 ใหกลบไปทาขอท 11 ถา

Terminate = 1 แสดงวาการคณเสรจแลว ผลลพธอยใน Shift Register

จากขนตอนขางตน นสตจะตองโยกสวตชเพอควบคมการทางานของวงจรเพอทาการคณ แตทจรงแลวเราสามารถ

สราง FSM เพอใหควบคมการทางานใหเปนไปตามขนตอนทเราตองการได กอนอนมาดกอนวา FSM ตองม

อนพตและเอาตพตอะไรบาง

อนพต:

clock สญญาณนาฬกา

reset ใชรเซต FSM ใหเรมทางานท initial state

mul มคาเปน 0 เมอมการกดปม Multiply (x)

eq มคาเปน 0 เมอมการกดปม Equal (=)

term มคาเปน 1 เมอ Register B มคาเทากบศนย

เอาตพต:

sel สงไปควบคมขา select ของ MUX

oe1 สงไปควบคม Buffer 1

oe2 สงไปควบคม Buffer 2

oe3 สงไปควบคม Buffer 3

we1 สงไปควบคมการเขยน Shift Register

(ทางานทขอบขาขน)

we2 สงไปควบคมการเขยน Register A

(ทางานทขอบขาขน)

we3 สงไปควบคมการเขยน Register B

(ทางานทขอบขาขน)

Page 91: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 78

สราง FSM ทมขาอนพตเอาตพตตามทกาหนด แลวเชอมเขากบวงจรเดมทออกแบบไวจะไดดงรปท 8.14

รปท 8.14 วงจรคณทใชวงจรบวกสองตว (ม FSM)

เรมตนใชงานใหกดปม Reset FSM แลวกใชงานเหมอนเครองคดเลขปกต ปอนตวถกดาเนนการตวแรก

กดปม Multiply (x) ปอนตวถกดาเนนการตวทสอง กดปม Equal (=) ผลลพธของการคณจะอยใน Shift

Register

Page 92: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 79

โคด VHDL ทใชสราง FSM เปนดงน

library IEEE; use IEEE.std_logic_1164.all; entity Multiplier_FSM is port( clock : in std_logic; reset : in std_logic; mul : in std_logic; eq : in std_logic; term : in std_logic; sel : out std_logic; oe1 : out std_logic; oe2 : out std_logic; oe3 : out std_logic; we1 : out std_logic; we2 : out std_logic; we3 : out std_logic ); end Multiplier_FSM; architecture arch1 of Multiplier_FSM is type state_type is (s0,s1,s2,s3,s4,s5,s6,s7,s8); signal state : state_type; begin state_p: process(clock, reset) begin if reset = '0' then state <= s0; elsif clock'event and clock = '1' then -- positive edge case state is when s0 => -- load default values state <= s1; when s1 => -- ShiftReg = 0 state <= s2; when s2 => -- wait for oper1 if mul = '0' then state <= s3; end if; when s3 => -- RegA = ShiftReg, ShiftReg = 0 state <= s4; when s4 => -- wait for oper2 if eq = '0' then state <= s5; end if; when s5 => -- RegB = ShifReg, ShifReg = 0 state <= s6; when s6 => -- Start multiplication state <= s7; when s7 => state <= s8; when s8 => if term = '0' then state <= s6; end if; end case; end if; end process state_p;

Page 93: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 80

output_p: PROCESS(state,mul,eq,term) begin case state is when s0 => sel <= '0'; -- default oe1 <= '1'; oe2 <= '1'; oe3 <= '1'; we1 <= '1'; we2 <= '0'; we3 <= '0'; when s1 => we1 <= '0'; -- ShiftReg = 0 when s2 => we1 <= '1'; -- restore oe1 <= '0'; -- DataBus = ShiftReg when s3 => we2 <= '1'; -- RegA = DataBus (ShiftReg) we1 <= '0'; -- ShiftReg = 0 when s4 => we2 <= '0'; -- restore we1 <= '1'; -- restore when s5 => we3 <= '1'; -- RegB = DataBus (ShiftReg) we1 <= '0'; -- ShiftReg = 0 when s6 => we3 <= '0'; -- restore we1 <= '1'; -- restore sel <= '1'; -- Mux = DataBus oe1 <= '1'; -- restore oe2 <= '0'; -- DataBus = ShiftReg + RegA when s7 => we1 <= '0'; -- ShiftReg = DataBus (ShiftReg + RegA) oe2 <= '1'; -- restore oe3 <= '0'; -- DataBus = RegB - 1 when s8 => we1 <= '1'; -- restore we3 <= '1'; -- RegB = DataBus (RegB - 1) oe3 <= '1'; -- restore end case; end process output_p; end arch1;

Page 94: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 81

วงจรคณเชงผสม

ในการออกแบบฮารดแวร เราสามารถประนประนอม (tradeoff) ระหวาง “ขนาดของวงจร” (นบเปนจานวน

ทรานซสเตอร) กบ “เวลาทตองใช” (นบเปนจานวนรอบของสญญาณนาฬกา) ในตวอยางทแลว เราทาการคณ

โดยใชวงจรบวกเทานน แตตองใชจานวนรอบของสญญาณนาฬกามาก ตวอยางนจะแสดงใหเหนวาเราออกแบบ

วงจรคณใหเปนวงจรเชงผสม (combinational circuit) ไดเลย ซงไมตองใชสญญาณนาฬกา แตวงจรจะมขนาด

ใหญมาก

ถาเราเขยน m x n หมายถง m คณ n หรอ m + … + m จานวน n ตว เราเรยกวา m วาตวตงคณ (multiplicand)

และเรยก n วาตวคณ (multiplier) การออกแบบวงจรคณกใชหลกการเดยวกบทเราคณเลขในกระดาษทด

ตวอยาง เชน การคณเลขขนาด 4 บต 0101 x 1100 ทาไดดงน

จะเหนวาตองหาผลบวกรวมของทงสแถว (ตวตงคณทเลอนไปทางซาย) ถงจะไดผลคณ ในการนตองใชวงจรบวก

ขนาด 4 บตจานวน 3 ตว ลกศรหมายถง ใหเอาตวทด (ถาม) ไปใสตรง MSB ของวงจรบวกตวถดไป สงเกตวา

ผลลพธของการคณเลขขนาด 4 บตจะมขนาดไมเกน 8 บต รปท 8.15 แสดงการออกแบบวงจรคณดวยวธทกลาว

มาขางตน

Page 95: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 82

รปท 8.15 วงจรคณเชงผสม

Page 96: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 83

ในรปท 8.15 ถาจะขยายขนาดวงจรคณใหทาไดมากกวา 4 บต จะตองใชสายไฟและวงจรบวกมากขน นสตควร

มดสายไฟรวมกน (ใชคาสง breakout) และสรางมอดลสาหรบการบวกทมากกวา 4 บต หรออาจจะยบเกต and

หลายๆ ตวใหเปนมอดลเดยว พยายามวางสายไฟและมอดลใหเปนระเบยบ เพอใหงายตอการทาความเขาใจและ

ตรวจสอบหากมขอผดพลาดเกดขน

สงเกตวาวงจรทผมออกแบบมลกษณะทซาซอนกน ทาใหใชวธ copy & paste ได ซงจะชวยลดเวลาทตองใชเมาส

ทางานลงไปไดมาก

Page 97: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 84

เอกสารประกอบ (สาหรบอานเพมเตม)

ทจรงแลวมวงจรคณทดกวาตวอยางททาใหดในบทนมาก เปนการคณโดยใชอลกอรทม Booth’s multiplication

ซงมความหนวง (delay) นอยและใชจานวนเกตไมมาก

• http://en.wikipedia.org/wiki/Booth's_multiplication_algorithm

• บทท 3 Multiplication with Partially Redundant Multiples ในหนงสอ Michael J. Flynn, Stuart F.

Oberman, Advanced Computer Arithmetic Design, Wiley-Interscience, 2001.

แบบฝกหด

1. จงทดลองใชงานวงจรตวอยางในบทนบนโปรแกรม LogicWorks นกเรยนสามารถดาวนโหลดไฟลวงจร

ตวอยางไดจากเวบไซตของรายวชา

2. การคานวณแฟกทอเรยล (factorial) ของ n เมอ n > 0 อธบายดวยรหสเทยม (pseudocode) ดงน

Line 01: s = 1;

Line 02: while (n > 0) {

Line 03: s = s * n;

Line 04: n = n – 1;

Line 05: }

จงตอบคาถามตอไปนพรอมทงใหเหตผลประกอบ

2.1 วถขอมล (data path) ตอไปนสามารถคานวณแฟกทอเรยลไดหรอไม

2.2 ถา ALU ไมสามารถทาคาสง s * n ได ตองเอา s บวกกน n ครง (เปลยน Multiplier เปน Adder)

วถขอมลนจะยงคานวณแฟคทอเรยลไดหรอไม

3. จงแกไขวถขอมลในขอ 2 เพอใหคานวณ Line 03: s = s * n และ Line 04: n = n – 1 ไดพรอมๆ กน ให

จดวางมอดลตางๆ และสายไฟใหม แตหามเพมมอดลใหมลงไป (Hint: เลกใช MUX)

4. เรมทาโครงงานไดแลว ดรายละเอยดในบทท 14 โครงงานเครองคดเลข

รายการอางอง

[1] LogicWorks LogicWorks 5 Interactive Software, Prentice Hall, 2003.

[2] ชานาญ ปญญาใส, วชรากร หนทอง, ภาษา VHDL สาหรบการออกแบบวงจรดจตอล, ซเอดยเคชน, 2547.

Page 98: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 85

บทท 9 สแตกซพย

วตถประสงคของการเรยนในบทน

• อธบายสถาปตยกรรมและการทางานของสแตกซพย (Stack CPU)

• อธบายชดคาสง (instruction set) ของสแตกซพย

จากตวอยางในบทกอนๆ นสตคงจะเหนแลววาการออกแบบฮารดแวรมความยงยากและซบซอนเพยงใด ถาเรา

ตองออกแบบฮารดแวรใหมทกๆ ครงทมการคานวณแบบใหม เชน แฟกทอเรยล (factorial) หรอ รากทสอง

(square root) เปนตน กจะเปนการเสยเวลามใชนอย ดงนนจงมแนวคดทจะทาฮารดแวรเพอใชทาการคานวณ

ทวๆ ไป (general purpose) และบรรจ “โปรแกรม” เอาไวในหนวยความจา เมอตองการทาการคานวณแบบใหม

กเพยงเปลยนหรอเขยนโปรแกรมใหม นเปนทมาของซพย (CPU - Central Processing Unit) หรอ ไมโคร

โพรเซสเซอร (Microprocessor) ผมเลอกสแตกซพยมาใหเรยนเปนตวแรกเนองจากเปนซพยทมขนาดเลก นสต

สามารถทาความเขาใจชดคาสง (instruction set) และสวนประกอบทเปนฮารดแวรทงหมดไดงาย

ชดคาสงของสแตกซพยทนามาใชสอนในบทนเปนของ Philip Koopman [1] แตสวนทเปนฮารดแวรคอ วถขอมล

(data path) และการออกแบบดวยภาษา Verilog เปนของผลงานของผมเอง [2]

หมายเหต แตเดมเรยกวาซพยเพราะเปนแผงวงจรขนาดใหญ ตอมาเทคโนโลยการผลตดขน สามารถบรรจซพย

ทงตวลงบนแผนซลกอนขนาดเลกๆ ได จงเรยกวาไมโครโพรเซสเซอร

สวนประกอบของสแตกซพย

สแตกซพย ประกอบดวย 3 สวนหลกคอ

• Memory (MEM)

• Data Stack (DS)

• Return Stack (RS)

สแตกซพย จะทางานตามคาสงทบรรจไวในหนวยความจา (ชองละ 8 บตหรอ 1 ไบต) โดยเรมจากคาสงท

Program Counter (PC) ชอย เชน PC = 0 คอเรมทาคาสงทอยทชองท 0 คาสงหนงจะประกอบดวย 2 สวนคอ

• รหสดาเนนการ (opcode) ขนาด 1 ไบต บอกวาเปนคาสงอะไร ไบตถดจากรหสดาเนนการจะเปนตวถก

ดาเนนการ (operand) ถาม

• ตวถกดาเนนการ (operand) ขนาด 1 ไบต คาสงหนงอาจจะตองใชตวถกดาเนนการ (operand) จานวน

1 หรอ 2 ตว หรอไมมตวถกดาเนนการเลยกได

เมอทางานจบหนงคาสง PC จะเลอนไปชทคาสงถดไป และเรมทา (execute) คาสงนน เปนเชนนไปเรอยๆ

Page 99: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 86

สถาปตยกรรมชดคาสง (Instruction Set Architecture)

ชดคาสงทงหมดมดงน (oper หรอ operand คอตวถกดาเนนการ, รหสดาเนนการในตารางเปนเลขฐานสบหก)

รหสดาเนนการ

(Opcode) สญลกษณ คาอธบายการทางานของคาสง

00 LIT ds.push(oper)

pc = pc + 2

01 @ (load) addr = ds.pop()

ds.push(mem[addr])

pc = pc + 1

02 ! (store) addr = ds.pop()

mem[addr] = ds.pop()

pc = pc + 1

03 DROP ds.pop()

pc = pc + 1

04 DUP ds.push(ds.peek())

pc = pc + 1

05 OVER ds.push(ds.nextToPeek())

pc = pc + 1

06 SWAP tmp1 = ds.pop()

tmp2 = ds.pop()

ds.push(tmp1)

ds.push(tmp2)

pc = pc + 1

07

08

09

0A

0B

+ (ADD)

– (SUB)

AND

OR

XOR

tmp2 = ds.pop()

tmp1 = ds.pop()

ds.push(tmp1 op tmp2)

pc = pc + 1

0C IF tmp = ds.pop()

if tmp = 0 then

pc = oper

else

pc = pc + 2

0D CALL pc = oper

rs.push(pc + 2)

0E EXIT pc = rs.pop()

0F HALT ซพยหยดทางาน

ยงสามารถเพมคาสงไดอกมาก (เหลอรหสดาเนนการ x10 ถง xFF)

Page 100: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 87

ลองดเหตการณจาลองเมอทาแตละคาสง → หมายถง เลขทอย (address) ท PC ชอย กนหลมของสแตกคอ

ดานลางในตาราง

คาสง LIT โหลดคาคงททบรรจอยในตวถกดาเนนการ (operand) ไปเกบไวใน DS

กอนทาคาสง หลงทาคาสง

MEM DS RS

MEM DS RS

address data address data

→0 LIT 0 LIT

1 10 1 10

2 →2 10

คาสง @ (LOAD) เอาคาจาก MEM ไปเกบไวใน DS

กอนทาคาสง หลงทาคาสง

MEM DS RS

MEM DS RS

address data address data

→0 @ 0 LOAD

1 →1

2 2

3 3

4 4

5 10 5 5 10 10

คาสง ! (STORE) เอาคาจาก DS ไปเกบไวใน MEM

กอนทาคาสง หลงทาคาสง

MEM DS RS

MEM DS RS

address data address data

→0 ! 0 LOAD

1 →1

2 2

3 3

4 5 4

5 10 5 10

คาสง DROP โยนคาทอยบนสดของ DS ทงไป

กอนทาคาสง หลงทาคาสง

MEM DS RS

MEM DS RS

address data address data

→0 DROP 20 0 DROP

1 10 →1 10

Page 101: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 88

คาสง DUP ทาสาเนา (duplicate) คาทอยบนสดของ DS

กอนทาคาสง หลงทาคาสง

MEM DS RS

MEM DS RS

address data address data

→0 DUP 0 DUP 10

1 10 →1 10

คาสง OVER ทาสาเนา (duplicate) คาทอยกอนบนสดของ DS

กอนทาคาสง หลงทาคาสง

MEM DS RS

MEM DS RS

address data address data

→0 OVER 0 OVER 10

1 20 →1 20

2 10 2 10

คาสง SWAP สลบตาแหนงสองคาทอยบนสดของ DS

กอนทาคาสง หลงทาคาสง

MEM DS RS

MEM DS RS

address data address data

→0 SWAP 0 SWAP

1 20 →1 10

2 10 2 20

คาสง + (ADD), - (SUB), AND, OR, XOR เอาสองคาทอยบนสดของ DS มากระทากน

กอนทาคาสง หลงทาคาสง

Memory DS RS

Memory DS RS

address data address data

→0 + 0 +

1 20 →1

2 10 2 30

หมายเหต ถาเปนคาสงลบ คาในตารางนจะทาใหไดผลลพธคอ -10 ไมใช +10

Page 102: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 89

คาสง IF (กรณทคาบนสดของ DS เทากบ 0 หรอเรยกวา taken) ไปทางานเมอเงอนไขเปนจรง

กอนทาคาสง หลงทาคาสง

Memory DS RS

Memory DS RS

address data address data

→0 IF 0 IF

1 5 1 5

2 2

3 3

4 4

5 0 →5

คาสง IF (กรณทคาบนสดของ DS ไมเทากบ 0 หรอเรยกวา not taken) ไปทางานเมอเงอนไขเปนเทจ

กอนทาคาสง หลงทาคาสง

Memory DS RS

Memory DS RS

address data address data

→0 IF 0 IF

1 5 1 5

2 →2

3 3

4 4

5 non-zero 5

คาสง CALL ไปทาฟงกชนของโปรแกรม

กอนทาคาสง หลงทาคาสง

Memory DS RS

Memory DS RS

address data address data

→0 CALL 0 CALL

1 5 1 5

2 2

3 3

4 4

5 EXIT →5 EXIT 2

Page 103: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 90

คาสง EXIT ออกจากฟงกชน และกลบไปทางานตอจากทเดม

กอนทาคาสง หลงทาคาสง

Memory DS RS

Memory DS RS

address data address data

0 CALL 0 CALL

1 5 1 5

2 →2

3 3

4 4

→5 EXIT 2 5 EXIT

วถขอมล (data path) ของสแตกซพยแสดงในรปท 9.1 (ดรปขยายไดจากเวบไซตของรายวชา)

รปท 9.1 วถขอมล (data path) ของสแตกซพย

Verilog HDL

เนองจากผมออกแบบฮารดแวรของสแตกซพยไวดวย Verilog HDL (Verilog Hardware Description

Language) ซงเปนคนละภาษากบ VHDL แตกมลกษณะคลายกนมากๆ ดงนนขออธบายภาษา Verilog เทาท

จาเปนสาหรบการเรยนในบทนกอน

มอดล (module)

มอดลคอวงจรดจตลททางานอยางใดอยางหนง มการรบ/สงขอมลกบมอดลอน ๆ ผาน พอรต (port) ซงม 3

แบบ คอ

input เปนพอรตทใชรบคาเขามาในมอดล

output เปนพอรตทใชสงคาออกจากมอดล

inout เปนทงอนพตและเอาตพตพอรต

ตวอยางการประกาศมอดล

module and(a, b, c); // AND gate

input a, b;

output c;

. . . . . . . . . .

endmodule

Page 104: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 91

module adder(oper1, oper2, sum); // 8-bit adder

input [7:0] oper1;

input [7:0] oper2;

output [7:0] sum;

. . . . . . . . . .

endmodule

module sram(cs, oe, we, addr, data); // static random access memory

input cs, oe, we; // chip select, output enable, write enable

input [7:0] addr; // address bus

inout [7:0] data; // data bus

endmodule

Comment

ใช // และ /* */ เพอบอกวาขอความหลง // และขอความใน /* */ เปน comment

Constant

การระบคาคงทใหระบ 1) จานวนบต 2) คาของแตละบต (0, 1, z) เชน

1’b0 ขนาด 1 บต คาของแตละบตคอ 0

1’b1 ขนาด 1 บต คาของแตละบตคอ 1

4’b1010 ขนาด 4 บต คาของแตละบตคอ 1 0 1 0

8’b0000_1111 ขนาด 8 บต คาของแตละบตคอ 0 0 0 0 1 1 1 1

1’bz ขนาด 1 บต คาของแตละบตคอ z

8’bzzzz_zzzz ขนาด 8 บต คาของแตละบตคอ z z z z z z z z

Wire

เสนลวดในมอดลประกาศไวหลงจากการประกาศพอรต พอรตทประกาศไวเปนเสนลวดโดยอตโนมต ไมตอง

ประกาศซา ตวอยางการประกาศเสนลวด เชน

wire a, b;

wire [7:0] c; // c[7] เปน MSB และ c[0] เปน LSB

การอางถงเสนลวด เชน a, b, c[7], c[0], c[7:0], c[7:4] เปนตน

Assign

การกาหนดคาใหเสนลวด เชน

assign a = 1’b1;

assign c[7:0] = a[7:0] + 1’b1;

assign c[7:0] = a[7:0] + b[7:0];

assign c[7:0] = { c[6:0], 1’b0 }; // shift left

Page 105: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 92

assign c = (s == 1’b0 ? a : b); // 2-way mux

assign e = (s0 == 1’b0 ? (s1 == 1’b0 ? a : b) : (s1 == 1’b0 ? c : d)); // 4-way mux

หรอเขยนแบบนกได

assign e = ({s0, s1} == 2’b00 ? a : // 4-way mux

({s0, s1} == 2’b01 ? b :

({s0, s1} == 2’b10 ? c : d)));

Reg

เรจสเตอรเปนอปกรณทจาคาได เชน สงใหจาคาในเสนลวด เมอเวลาผานไปคาในเสนลวดเปลยนไป แตคาในเร

จสเตอรยงเปนคาเดม

reg a, b;

reg [7:0] c; // c[7] เปน MSB และ c[0] เปน LSB

สามารถประกาศพอรต output ใหเปนเรจสเตอรได (เปนทงเรจสเตอรและเอาตพต)

Always

คาสง alwalys เปนการสงใหเรจสเตอรจาคา เชน

always @(posedge clock) // ทาทก ๆ ครงทขอบขาขนของ clock (เปลยนคาจาก 0 เปน 1)

begin

. . . . . . . . . . .

end

สญญาณควบคม

เมอตองสรางสญญาณควบคมจานวนมาก วธเขยนงาย ๆ ในบรรทดเดยวคอ

{ a[1:0], b[1:0], c[1:0], d, e } = 8’b01_10_11_10;

จะสนกวาและดงายกวาเขยนทละบรรทดแบบน

a[1:0] = 2’b01;

b[1:0] = 2’b10;

c[1:0] = 2’b11;

d = 1’b1;

e = 1’b0;

Page 106: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 93

Program Counter (PC)

PC เปนเรจสเตอรขนาด 8 บต เกบเลขทอย (address) ของคาสงทกาลงถกกระทา (execute) PC ทางานตาม

จงหวะสญญาณนาฬกา (clock) ทขอบขาขน (positive edge) ของสญญาณนาฬกา (ยกเวน mode = 2)

ถา mode = 0 รเซตคา PC เปน 0

ถา mode = 1 เซตคา PC ใหเทากบคาทอยใน data bus

ถา mode = 2 เขยนคา PC ลงไปใน data bus

ถา mode = 3 ไมตองทาอะไร (ใหคา z ท data bus)

ถา mode = 4 เพมคา PC ไปอกหนงหนวย

ในภาษา Verilog เขยนอธบายดงน module pc(clock, pc_mode, data_bus, pc_value); input clock; input [2:0] pc_mode; inout [7:0] data_bus; output [7:0] pc_value; reg [7:0] pc_value; reg [7:0] temp; // คาสงนไมรอสญญาณนาฬกา

assign data_bus[7:0] = (pc_mode[2:0] == 3'b010 ? pc_value[7:0] : temp[7:0]);

always @(posedge clock) begin case(pc_mode[2:0]) 3'b000: begin pc_value[7:0] = 8'b0000_0000; temp[7:0] = 8'bzzzz_zzzz; end 3'b001: begin pc_value[7:0] = data_bus[7:0]; temp[7:0] = 8'bzzzz_zzzz; end 3'b010: begin // do nothing (โหมดนไมทางานตามสญญาณนาฬกา)

end 3'b011: begin temp[7:0] = 8'bzzzz_zzzz; end 3'b100: begin pc_value[7:0] = pc_value[7:0] + 1'b1; temp[7:0] = 8'bzzzz_zzzz; end endcase end endmodule

Page 107: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 94

Memory Address Register (MAR)

MAR เปนเรจสเตอรขนาด 8 บต เกบเลขทอย (address) ทจะอานเขยนหนวยความจา MAR ทางานตามจงหวะ

สญญาณนาฬกา (clock) ทขอบขาขน (positive edge) ของสญญาณนาฬกา (ยกเวน mode = 2) ถา mode = 0 รเซตคา MAR เปน 0

ถา mode = 1 เซตคา MAR ใหเทากบคาทอยใน data bus

ถา mode = 2 เขยนคา MAR ลงไปใน data bus

ถา mode = 3 ไมตองทาอะไร (ใหคา z ท data bus)

ในภาษา Verilog เขยนอธบายดงน module register(clock, register_mode, data_bus, register_value); input clock; input [1:0] register_mode; inout [7:0] data_bus; output [7:0] register_value; reg [7:0] register_value; reg [7:0] temp; // คาสงนไมรอสญญาณนาฬกา

assign data_bus[7:0] = (register_mode[1:0] == 2'b10 ? register_value[7:0] : temp[7:0]); always @(posedge clock) begin case(register_mode[1:0]) 2'b00: begin register_value[7:0] = 8'b0000_0000; temp[7:0] = 8'bzzzz_zzzz; end 2'b01: begin register_value[7:0] = data_bus[7:0]; temp[7:0] = 8'bzzzz_zzzz; end 2'b10: begin // do nothing (โหมดนไมทางานตามสญญาณนาฬกา)

end 2'b11: begin temp[7:0] = 8'bzzzz_zzzz; end endcase end endmodule

Page 108: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 95

Multiplexor (MUX)

ใชเลอกระหวาง PC และ MAR เพอกาหนดเลขทอย (address) ทจะอาน/เขยนหนวยความจา

ถา select = 0 เลอกคา PC

ถา select = 1 เลอกคา MAR

ในภาษา Verilog เขยนอธบายดงน module mux(sel, in0, in1, out); input sel; input [7:0] in0; input [7:0] in1; output [7:0] out; assign out[7:0] = (sel == 1'b0 ? in0[7:0] : in1[7:0]); endmodule

Memory (MEM)

MEM เปนหนวยความจาขนาด 256 x 8 บต คอม 256 ชอง ชองละ 8 บต การอาน/เขยนหนวยความจาใช

สญญาณ OE (output enable) และ WE (write enable) เหมอนเอสแรมปกต

ถา mem_oe = 0 และ mem_we = 1 เขยนคาทอยในชองท mem_addr ชอยลง data bus (read)

ถา mem_oe = 1 และ positive edge ของ mem_we เขยนคาใน data bus ลงชองท mem_addr ชอย (write)

ถา mem_oe = 1 และ mem_we = 1 ไมตองทาอะไร ใหคา high impedance (z) ท data bus

Instruction Register (IR)

IR เปนเรจสเตอรขนาด 8 บต เกบรหสดาเนนการ (opcode) ของคาสงทถกระทา (execute) อย ในภาษา

Verilog เขยนอธบายเหมอน MAR

Top of Stack (TOS)

TOS เปนเรจสเตอรขนาด 8 บต เกบของชนบนสดทอยใน data stack ของชนอนๆ ทเหลอจะเกบไวในมอดล DS

สาเหตททาเชนนเพราะวา TOS มกจะถกปอนเขาไปใหคานวณใน ALU บอยๆ ดงนนจงเกบไวในเรจสเตอรทแยก

ตางหากออกมาจาก DS ในภาษา Verilog เขยนอธบายเหมอน MAR

Temporary (TMP)

TMP เปนเรจสเตอรขนาด 8 บต ใชเกบตวถกดาเนนการ (operand) ตวทสองไวชวคราว ตวถกดาเนนการตวแรก

อยใน TOS ในภาษา Verilog เขยนอธบายเหมอน MAR

Page 109: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 96

Arithmetic Logic Unit (ALU)

ALU เปนวงจรคานวณฟงกชนพนฐานเชน add (+), sub (-), and, or, xor เปนตน ขนอยกบ alu_opcode

ถา alu_ena = 0 จะเขยนผลลพธลง data bus

ถา alu_ena = 1 จะเขยนคา z (high impedance)

ในภาษา Verilog เขยนอธบายดงน module alu(ena, opcode, oper0, oper1, data_bus); input ena; input [7:0] opcode; input [7:0] oper0; input [7:0] oper1; inout [7:0] data_bus; wire [7:0] temp; assign data_bus[7:0] = (ena == 1'b0 ? temp[7:0] : 8'bzzzz_zzzz); assign temp[7:0] = (opcode[7:0] == 8'b0000_0111 ? oper1[7:0] + oper0[7:0] : // ADD (opcode[7:0] == 8'b0000_1000 ? oper1[7:0] - oper0[7:0] : // SUB (opcode[7:0] == 8'b0000_1001 ? oper1[7:0] & oper0[7:0] : // AND (opcode[7:0] == 8'b0000_1010 ? oper1[7:0] | oper0[7:0] : // OR (opcode[7:0] == 8'b0000_1011 ? oper1[7:0] ^ oper0[7:0] : // XOR 8'b0000_0000 ))))); endmodule

Data Stack (DS) และ Return Stack (RS)

DS และ RS เปนสแตกทจของได 256 ชน แตละชนมขนาด 8 บต ทางานตามจงหวะสญญาณนาฬกา (clock) ท

ขอบขาขน (positive edge) ของสญญาณนาฬกา

ถา mode = 0 ทาใหสแตกวาง (empty stack)

ถา mode = 1 push คาจาก data bus ลงไปในสแตก

ถา mode = 2 pop คาจากสแตกและเขยนลง data bus

ถา mode = 3 ไมตองทาอะไร (ใหคา z ท data bus)

ขอยาวาพอทาเปนฮารดแวรแลวตวบนสด (top of stack) ของ data stack จะอยทเรจสเตอร TOS เสมอ ตวท

เหลอจะเกบในมอดล DS สวน return stack เกบขอมลทงหมดไวในมอดล RS ในภาษา Verilog เขยนอธบายดงน

(มอดล DS และ RS ทางานเหมอนกน)

Page 110: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 97

module ds(clock, mode, data_bus); input clock; input [1:0] mode; inout [7:0] data_bus; reg [7:0] tos; reg [7:0] data[0:255]; reg [7:0] temp; assign data_bus[7:0] = temp[7:0]; always @(posedge clock) begin case(mode[1:0]) 2'b00: begin tos[7:0] = 8'b1111_1111; temp[7:0] = 8'bzzzz_zzzz; end 2'b01: begin tos[7:0] = tos[7:0] + 1'b1 ; data[tos[7:0]][7:0] = data_bus[7:0]; temp[7:0] = 8'bzzzz_zzzz; end 2'b10: begin temp[7:0] = data[tos[7:0]][7:0]; tos[7:0] = tos[7:0] - 1'b1; end 2'b11: begin temp[7:0] = 8'bzzzz_zzzz; end endcase end endmodule

Page 111: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 98

Control Unit

Control unit เปนเครองจากดสถานะ (FSM) ทสรางสญญาณไปควบคมมอดลตางๆ ใหทางานไดถกตอง (ดรปท

9.2) ทขอบขาขนของสญญาณนาฬกา ถา reset = 0 จะรเซตสถานะของ FSM ใหอยทสถานะเรมตน สาย opcode

นนลากมาจาก IR เพราะ FSM จาเปนตองร วาซพยกาลงทาคาสง (instruction) อะไร เพอทจะไดสรางสญญาณ

ควบคมไดถกตอง สญญาณทสงไปควบคมมอดลตางๆ อยทางฝงขวาของ control unit ปกตจะไมนยมเขยน

control unit ลงในวถขอมล (data path) เพราะจะทาใหสายไฟพนกนจนดไมร เรอง

รปท 9.2 Control unit ของสแตกซพย

ในภาษา Verilog เขยนอธบายดงน

module control(clock, reset, data_bus, oper0, pc_mode, mar_mode, mux_select, mem_oe, mem_we, ir_mode, alu_ena, tos_mode, tmp_mode, ds_mode, rs_mode); input clock; input reset; input [7:0] data_bus; input [7:0] oper0; output [2:0] pc_mode; output [1:0] mar_mode; output mux_select; output mem_oe; output mem_we; output [1:0] ir_mode; output alu_ena; output [1:0] tos_mode; output [1:0] tmp_mode; output [1:0] ds_mode; output [1:0] rs_mode; reg [7:0] state; reg [18:0] cont; assign {pc_mode[2:0], mar_mode[1:0], mux_select, mem_oe, mem_we, ir_mode[1:0], alu_ena, tos_mode[1:0], tmp_mode[1:0], ds_mode[1:0], rs_mode[1:0]} = cont[18:0];

Page 112: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 99

always @(posedge clock) begin if (reset == 1'b0) begin state[7:0] = 8'b0000_0000; end else begin case(state[7:0]) 8'b0000_0000 : // reset begin cont[18:0] = 19'b000_00_0_1_1_00_1_00_00_00_00; state[7:0] = 8'b0000_0001; end 8'b0000_0001 : // fetch begin cont[18:0] = 19'b011_11_0_0_1_01_1_11_11_11_11; state[7:0] = 8'b0000_0010; end

8'b0000_0010 : // decode, pc = pc + 1 begin cont[18:0] = 19'b100_11_0_1_1_11_1_11_11_11_11; case (data_bus[7:0]) // ตวเลขในวงเลบคอจานวน clock cycle ทใช

8'b0000_0000 : state[7:0] = 8'b0000_0011; // LIT (2) 8'b0000_0001 : state[7:0] = 8'b0000_0101; // LOAD (2) 8'b0000_0010 : state[7:0] = 8'b0000_0111; // STORE (3) 8'b0000_0011 : state[7:0] = 8'b0000_1010; // ADD (2) 8'b0000_0100 : state[7:0] = 8'b0000_1010; // SUB (2) 8'b0000_0101 : state[7:0] = 8'b0000_1010; // AND (2) 8'b0000_0110 : state[7:0] = 8'b0000_1010; // OR (2) 8'b0000_0111 : state[7:0] = 8'b0000_1010; // XOR (2) 8'b0000_1000 : state[7:0] = 8'b0000_1100; // DROP (1) 8'b0000_1001 : state[7:0] = 8'b0000_1101; // DUP (1) 8'b0000_1010 : state[7:0] = 8'b0000_1110; // OVER (4) 8'b0000_1011 : state[7:0] = 8'b0001_0010; // SWAP (3) 8'b0000_1100 : begin if (oper0[7:0] != 8'b0000_0000) state[7:0] = 8'b0001_0101; // IF(1) branch not taken else state[7:0] = 8'b0001_0110; // IF(2) branch taken end 8'b0000_1101 : state[7:0] = 8'b0001_1000; // CALL (4) 8'b0000_1110 : state[7:0] = 8'b0001_1100; // EXIT (1) 8'b0000_1111 : state[7:0] = 8'b1111_1111; // HALT endcase end 8'b0000_0011 : // lit (1) : ds.push(tos) begin cont[18:0] = 19'b011_11_0_1_1_11_1_10_11_01_11; state[7:0] = 8'b0000_0100; end

8'b0000_0100 : // lit (2) : tos = mem[pc], pc = pc + 1 begin cont[18:0] = 19'b100_11_0_0_1_11_1_01_11_11_11; state[7:0] = 8'b0000_0001; end 8'b0000_0101 : // load (1) : mar = tos begin cont[18:0] = 19'b011_01_0_1_1_11_1_10_11_11_11; state[7:0] = 8'b0000_0110; end 8'b0000_0110 : // load (2) : tos = mem[mar] begin cont[18:0] = 19'b011_11_1_0_1_11_1_01_11_11_11; state[7:0] = 8'b0000_0001;

Page 113: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 100

end 8'b0000_0111 : // store (1) : mar = tos begin cont[18:0] = 19'b011_01_0_1_1_11_1_10_11_11_11; state[7:0] = 8'b0000_1000; end 8'b0000_1000 : // store (2) : data_bus = ds.pop() begin cont[18:0] = 19'b011_11_1_1_0_11_1_11_11_10_11; state[7:0] = 8'b0000_1001; end 8'b0000_1001 : // store (3) : write, tos = ds.pop() begin cont[18:0] = 19'b011_11_0_1_1_11_1_01_11_10_11; state[7:0] = 8'b0000_0001; end 8'b0000_1010 : // add, sub, and, or, xor (1) : tmp = ds.pop() begin cont[18:0] = 19'b011_11_0_1_1_11_1_11_01_10_11; state[7:0] = 8'b0000_1011; end

8'b0000_1011 : // add, sub, and, or, xor (2) : tos = tos op tmp begin cont[18:0] = 19'b011_11_0_1_1_11_0_01_11_11_11; state[7:0] = 8'b0000_0001; end 8'b0000_1100 : // drop (1) : tos = ds.pop() begin cont[18:0] = 19'b011_11_0_1_1_11_1_01_11_10_11; state[7:0] = 8'b0000_0001; end 8'b0000_1101 : // dup (1) : ds.push(tos) begin cont[18:0] = 19'b011_11_0_1_1_11_1_10_11_01_11; state[7:0] = 8'b0000_0001; end 8'b0000_1110 : // over (1) : tmp = ds.pop() begin cont[18:0] = 19'b011_11_0_1_1_11_1_11_01_10_11; state[7:0] = 8'b0000_1111; end 8'b0000_1111 : // over (2) : ds.push(tmp) begin cont[18:0] = 19'b011_11_0_1_1_11_1_11_10_01_11; state[7:0] = 8'b0001_0000; end 8'b0001_0000 : // over (3) : ds.push(tos) begin cont[18:0] = 19'b011_11_0_1_1_11_1_10_11_01_11; state[7:0] = 8'b0001_0001; end 8'b0001_0001 : // over (4) : tos = tmp begin cont[18:0] = 19'b011_11_0_1_1_11_1_01_10_11_11; state[7:0] = 8'b0000_0001; end

8'b0001_0010 : // swap (1) : tmp = tos begin cont[18:0] = 19'b011_11_0_1_1_11_1_10_01_11_11; state[7:0] = 8'b0001_0011; end 8'b0001_0011 : // swap (2) : tos = ds.pop() begin cont[18:0] = 19'b011_11_0_1_1_11_1_01_11_10_11; state[7:0] = 8'b0001_0100; end 8'b0001_0100 : // swap (3) : ds.push(tmp)

Page 114: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 101

begin cont[18:0] = 19'b011_11_0_1_1_11_1_11_10_01_11; state[7:0] = 8'b0000_0001; end 8'b0001_0101 : // IF (not taken 1) : pc = pc + 1, tos = ds.pop() begin cont[18:0] = 19'b100_11_0_1_1_11_1_01_11_10_11; state[7:0] = 8'b0000_0001; end 8'b0001_0110 : // IF (taken 1) : pc = mem[pc] begin cont[18:0] = 19'b001_11_0_0_1_11_1_11_11_11_11; state[7:0] = 8'b0001_0111; end 8'b0001_0111 : // IF (taken 2) : tos = ds.pop() begin cont[18:0] = 19'b011_11_0_1_1_11_1_01_11_10_11; state[7:0] = 8'b0000_0001; end 8'b0001_1000 : // CALL (1) : mar = pc begin cont[18:0] = 19'b010_01_0_1_1_11_1_11_11_11_11; state[7:0] = 8'b0001_1001; end

8'b0001_1001 : // CALL (2) : pc = pc + 1 begin cont[18:0] = 19'b100_11_0_1_1_11_1_11_11_11_11; state[7:0] = 8'b0001_1010; end 8'b0001_1010 : // CALL (3) : rs.push(pc) begin cont[18:0] = 19'b010_11_0_1_1_11_1_11_11_11_01; state[7:0] = 8'b0001_1011; end 8'b0001_1011 : // CALL (4) : pc = mem[mar] begin cont[18:0] = 19'b001_11_1_0_1_11_1_11_11_11_11; state[7:0] = 8'b0000_0001; end 8'b0001_1100 : // EXIT (1) : pc = rs.pop() begin cont[18:0] = 19'b001_11_0_1_1_11_1_11_11_11_10; state[7:0] = 8'b0000_0001; end 8'b1111_1111 : // halt begin cont[18:0] = 19'b011_11_0_1_1_11_1_11_11_11_11; state[7:0] = 8'b1111_1111; end endcase end end endmodule

สงเกตวาแตละคาสงใชจานวน clock cycle ไมเทากน คาสงทซบซอนตองใชจานวนรอบสญญาณนาฬกามากกวา

จะทาเสรจ ในขณะทคาสงงายๆ ใชเพยง 1 หรอ 2 รอบสญญาณนาฬกากทาเสรจแลว ขอสงเกตอกอยางคอ การ

เปลยนสถานะและเอาตพตของ FSM ทเขยนดวย Verilog อยภายในคาสง always @(posedge clock) ดงนนทง

สถานะและเอาตพตจะเปลยนคาทขอบขาขนของสญญาณนาฬกาเทานน

ลองดตวอยางการสรางสญญาณควบคมของคาสง LIT ซงตองใช 2 รอบสญญาณนาฬกาเพอทาคาสง LIT ใหเสรจ

รอบท 1: เอา TOS เกบลง DS (ds.push(tos))

Page 115: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 102

รอบท 2: โหลดตวถกดาเนนการ (operand) ของคาสง LIT จากหนวยความจา

และเพมคา pc ไปหนงหนวย (tos = mem[pc], pc = pc + 1)

ลองดสญญาณควบคมทเกดขนในรปท 9.3 จะทาใหเขาใจมากยงขน FSM จะสญญาณควบคมออกมา 2 ชดท

เวลา t1 และ t2 ตามลาดบ สงเกตวาสญญาณควบคมบางอยางมผลทนท เชน tos_mode = 10 และ mem_oe = 0

จะเอาคาใน TOS และ MEM ลงบสขอมลทนท (การทางานนไมตองใชขอบขาขนของสญญาณนาฬกา) ดงนนการ

ทางานเหลานจะเกดขนทนททสญญาณควบคมถกปลอยออกมา โดยมคาความหนวงเลกนอย แตสญญาณควบคม

อนๆ เชน ds_mode = 01, tos_mode = 01, และ pc_mode = 100 จะไมสงผลในทนท เพราะ mode เหลานจะ

ทางานทขอบขาข นของสญญาณนาฬกาเทานน ขอบขาขนแรกจะกระตนให FSM สรางสญญาณควบคมเหลาน

ออกมา (โดยคาความหนวงเลกนอย) ดงนนกวาทสญญาณควบคมเหลานจะสงผลใหเกดการทางาน กตองรอขอบ

ขาขนครงถดไป

ในการสรางสญญาณควบคม เราพยายามใหแตละมอดลทางานสอดประสานกนไดอยางพอด โดยใชจานวนรอบ

สญญาณนาฬกาใหนอยทสด เพอใหไมโครโปรเซสเซอรทา (execute) แตละคาสง (instruction) โดยใชเวลานอย

ทสด ยงความหนวง (deley) ของฮารดแวรในแตละรอบนอยกยงใชความถ (Hz) สงได แตความถสงไมได

หมายความวาสมรรถนะจะตองดเสมอไป เชน การคณ m + … + m จานวน n ครง ใชความถ 1 MHz จานวน

1,000,000 cycle (ตองบวกหลายรอบ) จะใชเวลา 1 s มสมรรถนะดอยกวาวงจร m x n ทใชความถ 1 kHz

จานวน 1 cycle (ใชวงจรคณเชงผสม) ซงใชเวลา 1 ms มนขนอยกบสถาปตยกรรมขางในซพยดวย

รปท 9.3 สญญาณควบคมของคาสง LIT

Page 116: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 103

เอกสารประกอบ (สาหรบอานเพมเตม)

Philip Koopman ไดเสนอซพยทมสถาปตยกรรมแบบสแตกไวหลายแบบ ในหนงสอเลมทมชอวา Stack

Computers: the new wave ดในรายการอางองทายบท

แบบฝกหด

1. ลองเขยนหนวยควบคม หรอ FSM ของสแตกซพยขนมาใหม โดยเขยนสญญาณควบคมทสงไปยงแตละมอดล

ในแตละรอบสญญาณนาฬกา (ใหดรปวถขอมลและการออกแบบดวยภาษา Verilog ของมอดลอนๆ ได

ยกเวนมอดลหนวยควบคม)

2. ถาจะเพมคาสงลงไปในชดคาสงของสแตกซพย เชน คาสงคณ (MUL) จะตองแกฮารดแวรตรงไหนบาง

3. “Java byte code มสถาปตยกรรมชดคาสงแบบสแตก” หมายความวาอยางไร เหมอนสแตกซพยทสอนในบท

นหรอไม

รายการอางอง

[1] Philip Koopman, Jr., Stack Computers: the new wave, reprinted and distributed by Mountain View

Press, 1989.

[2] ชชวทย อาภรณเทวญ, การออกแบบ Stack CPU ดวยภาษา Verilog เพอสงเคราะหบน FPGA, เซมคอน

ดกเตอร อเลกทรอนกส ฉบบท 316 และ 317 (พ.ค.-ม.ย. 2551).

Page 117: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 104  

บทท 10 การโปรแกรมสแตกซพย

วตถประสงคของการเรยนในบทน

เขยนโปรแกรมดวยชดคาสง (instruction set) ของสแตกซพย (Stack CPU)

ในบทนเราจะมาเขยนโปรแกรมดวยชดคาสงของสแตกซพยซงมเพยง 16 คาสงเทานน แตสามารถเขยนใหเปน

โปรแกรมใดใดกได ในการฝกเขยนโปรแกรมใหใช Stack Simulator จากเวบไซตของรายวชา

โปรแกรมแรก

ในชนน ยงไมมอปกรณอนพตเชน คยบอรด ดงนนจะไมมการรบอนพต เรมตนไมมของใน data stack และ return

stack ใหโหลดคาคงททตองการใชในโปรแกรมดวยคาสง LIT ไดเลย และกยงไมมอปกรณเอาตพต เชน จอภาพ

ดงนนจะไมมการพมพเอาตพตของโปรแกรม เอาตพตคอคาสดทายทเหลออยใน data stack (หรอ TOS) เมอ

โปรแกรมจบการทางานทคาสง halt

โปรแกรมตอไปน โหลดคาคงท 10 ไวใน data stack

LIT

10

HALT

ตวแปร (Variable)

เวลาเขยนโปรแกรมในภาษา C หรอ Java เราจะตองประกาศตวแปรทจะใชในโปรแกรมเสยกอน การโปรแกรม

สแตกซพยกเหมอนกน เพยงแตประกาศไวในใจของผเขยนโปรแกรม ลองพจารณาโปรแกรมตอไปน

A = 1

B = 2

C = A + B

ตวแปร 1 ตวกคอหนวยความจา 1 ชอง ขนอยกบเราวาจะใหมนอยตรงไหน โปรแกรมเรมตนท address 0 ดงนน

อาจจะใหตวแปร A, B, C อยหลงโปรแกรม ท address 11, 12, 13 ตามลาดบ และกาหนดคาเรมตนให A = 1

และ B = 2 ไวใน Stack Simulator เลย

Page 118: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 105  

Address 0: LIT

Address 1: 11

Address 2: @ // load (push) A

Address 3: LIT

Address 4: 12

Address 5: @ // load (push) B

Address 6: +

Address 7: LIT

Address 8: 13

Address 9: ! // write C

Address 10: HALT

Address 11: 1 // variable A = 1

Address 12: 2 // variable B = 2

Address 13: // variable C (ไมมคาเรมตน)

แถวลาดบ (Array)

แถวลาดบกเปนเซตของตวแปรทอยตดกนในหนวยความจา เชน A[5] โปรแกรมเมอรกประกาศไวในใจ และจาไว

วาเรมตนจาก address 10 ถง 14 เปนตน

การแยกทาตามเงอนไข (Conditional Branch)

สแตกซพยจะทางานตามคาสงทอยในหนวยความจาเรยงตามลาดบ เชน เรมทาจาก address 0 และเลอนไปทา

คาสงทอยถดไป การจะทาใหเกดโครงสรางแบบ if-then หรอ if-else นนตองใชคาสง IF สมมตวาเราจะให

โปรแกรมแยก (branch) ไปทางานในคาสงท address 12 กเขยนแบบน

Address 0: LIT

Address 1: 0

Address 2: IF

Address 3: 12

ทตอง LIT 0 กอนกเพอใหเงอนไขเปนจรง คาสง IF จะไดเซตให PC = 12 คาสงทสามารถเปลยนคา program

counter (PC) ไดตามเงอนไข เปนคาสงประเภทแยกทาตามเงอนไข (conditional branch) ถาเงอนไขเปนจรง

โปรแกรมกจะกระโดดไปทาคาสงหนง (PC = operand) เรยกกรณนวา branch taken แตถาเงอนไขไมเปนจรง

โปรแกรมกจะทาคาสงตอไป (PC = PC + 1) เรยกกรณนวา branch not taken ปกตจะมคาสงประเภท

unconditional branch ดวย ซงจะทาใหโปรแกรมกระโดดไปทาคาสงหนงทนท โดยไมมเงอนไข แตสแตกซพยไมม

คาสงนตรงๆ ถาจะทากตอง LIT 0 กอน แลวคอยเรยกคาสง IF อยาลมวา 0 ท LIT ไวบน data stack จะหายไป

หลงจากทาคาสง IF ทนสตมกจะพลาดบอยๆ คอลมไปวาคาสง IF จะ pop ของใน data stack ออกมา 1 ชน

Page 119: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 106  

การทา if-then

โครงสรางของโปรแกรมแบบ if-then แสดงในรปท 10.1

รปท 10.1 โครงสรางโปรแกรมแบบ if-then 

ถากลบเงอนไขกอน จะทาใหโปรแกรมสนลง เชน ถาจรงให push(คาทไมใช 0) แตถาไมจรงให push(0) ในบาง

กรณจะเขยนโปรแกรมงายกวามาก และทาใหโปรแกรมสนลงดวย ดรปท 10.2

รปท 10.2 โครงสรางโปรแกรมแบบ if-then (แบบกลบเงอนไข) 

Page 120: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 107  

การทา if-else

โครงสรางของโปรแกรมแบบ if-else แบบงายๆ ตรงไปตรงมา แสดงในรปท 10.3 ลองเขยนอกแบบโปรแกรมจะ

สนกวาดงรปท 10.4

รปท 10.3 โครงสรางโปรแกรมแบบ if-else (แบบยาว) 

รปท 10.4 โครงสรางโปรแกรมแบบ if-else (แบบสน) 

Page 121: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 108  

การสราง TOS สาหรบคาสง IF

คาสง IF จะ taken หรอไม ขนอยกบคาทอยบนสดของ data stack ถา TOS เปนมคาเทากบ 0 กจะ taken ดงนน

ถาเราตองการใหโปรแกรม taken ตามเงอนไข เชน A >= 0 เรากตอง push คา 0 ลง data stack ในกรณท A >=

0 จรง และ push คาทไมเทากบ 0 ในกรณอนๆ (A < 0)

ลองดตวอยางแรก ถา A >= 0 จรงให ให TOS = 0 (taken) ถาไมจรงให TOS != 0 (not taken) วธหนงคอ

สราง TOS ขนาด 8 บต ใหมคาเทากบ A70000000 หรอ MSB ของ A ตามดวย 0 อก 7 ตว ดวยโปรแกรม

ตอไปน

LIT

A // A เปน 2’complement ขนาด 8 บต

LIT

x80

AND

… // ถาเรยกคาสง IF ตอนนจะ taken ถา A >= 0

ท AND ดวย x80 คอตองการพราง (mask) มาใชเฉพาะ MSB และเรารวาถา MSB = 0 แสดงวาเปนจานวนท

มากกวาหรอเทากบศนย เพราะถา MSB = 1 ในระบบสวนเตมเตมสอง (2’s complement) จะเปนเลขลบ ถา

เปลยนเงอนไขเปน A < 0 กเพม NOT ลงไปทายโปรแกรม แตสแตกซพยไมมคาสง NOT ให XOR กบ 1 แทน

LIT

x80

XOR

… // ถาเรยกคาสง IF ตอนนจะ taken ถา A < 0

ทาแบบนจะ NOT คาทอยบนสดใน data stack โดยทา NOT เฉพาะตรงตาแหนงทเปน MSB

Page 122: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 109  

ถาเปนเงอนไข A > 0 จะยงยากกวาเงอนไข A >= 0 พอสมควร เราตองให TOS เปน 0 ในกรณท A > 0 (เพอให

taken) วธหนงคอสราง TOS ให MSB มคาเทากบ | | | | | | | บตทเหลอเปน 0 หมด

ดวยโปรแกรมตอไปน (ขอเขยนหลายคาสงรวมกนเพอประหยดบรรทด)

LIT

A

DUP DUP ADD

DUP DUP ADD

DUP DUP ADD

DUP DUP ADD

DUP DUP ADD

DUP DUP ADD

DUP DUP ADD

OR OR OR OR OR OR

LIT

x80

XOR

OR

LIT

x80

AND

… // ถาเรยกคาสง IF ตอนนจะ taken ถา A > 0

ลองดอกตวอยางนงคอ A >= B วธเชคเงอนไขคอจดรปอสมการเปน A – B >= 0 แลวกคานวณ C = A – B

กอน แลวกเชควา C >= 0 หรอไม กทาเหมอนตวอยางแรก

ในการเขยนโปรแกรมจรงๆ เราไมจาเปนตองระบตวถกดาเนนการ (operand) ของคาสง IF เปนตวเลข เพราะ

ยงยาก พอแกโปรแกรมท จานวนบรรทดเลอน กตองมาคอยแกตวเลขใหม เราสามารถตงชอใหตวถกดาเนนการ

ไดเลย เชน :START หรอ :END (ผมใส : ขางหนา เพอใหดตางจากคาสงของสแตกซพย) เชน

IF

:AAA // ถา taken จะกระโดดไปทาท :AAA

:AAA …

ในทางปฏบตตวแปลภาษา (compiler) จะแปลงชอเหลานใหเปนตวเลขเอง การเขยนโปรแกรมดวยสญลกษณ

เชน LIT, ADD, IF เรยกวาการโปรแกรมดวยภาษาแอสเซมบล (assembly language) ตวแปลภาษาทแปลจาก

ภาษาแอสเซมบลเปนรหสฐานสองหรอภาษาเครอง (machine language) เรยกวาแอสเซมเบลอร (assembler)

Page 123: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 110  

การทา for-loop

เรากแปลงลป for ใหใช if-then และ conditional branch กอน ดงในรปท 10.5 จากนนกคอยแปลง if-then และ

unconditional branch ใหเปนคาสงของสแตกซพย

รปท 10.5 โครงสรางโปรแกรมแบบ for-loop 

การทา while-loop

กทาคลายๆ กบการทา for-loop ดรปท 10.6

รปท 10.6 โครงสรางโปรแกรมแบบ while-loop 

Page 124: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 111  

การเรยกฟงกชน (Function Call)

ขออธบายศพทเทคนคทจะใชกอนเลกนอย “caller” หมายถงฟงกชนทเปนคนเรยก สวน “callee” คอฟงกชนท

ถกเรยก เชน ฟงกชน main เรยกฟงกชน printf ฟงกชน main คอ caller สวนฟงกชน printf คอ callee การ

เรยกใชฟงกชน เชน y = f(a,b) ประกอบดวย 3 สวนคอ

Argument ทจะสงใหฟงกชน จะตองอยใน data stack กอนทจะทาคาสง CALL เชน data stack = …, a, b

(b เปน top of stack)

Function หลงจาก CALL กจะเรมทาฟงกชน ตว callee จะรเองวา argument อยใน data stack แลว เมอ

จะจบการทางานของฟงกชน กอนทาคาสง EXIT ตวฟงกชนจะตองทาลาย argument ใน data stack ทงไป

ใหหมด (pop ทงไป) และใสผลลพธไวบน data stack

Result หลงทาคาสง EXIT โปรแกรมจะกลบมาทางานท caller ตว caller จะรเองวา result อยบน data

stack แลว data stack = …, y (y = f(a,b) เปน top of stack)

ลองดตวอยางโปรแกรม f(a, b) = a + b

Address 0: LIT

Address 1: 1 // the first argument

Address 2: LIT

Address 3: 2 // the second argument

Address 4: CALL

Address 5: 7

Address 6: HALT

Address 7: + // function starts here

Address 8: EXIT // return from function

เมอโปรแกรม HALT ใน data stack จะเหลอของเพยงชนเดยวคอ 1 + 2 = 3

Page 125: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 112  

การเรยกซา (Recursive Call)

ในฟงกชนหนงเราสามารถเรยกฟงกชนอนใหมาทางานตอได เชน ฟงกชน main เรยกฟงกชน A แลวฟงกชน A

เรยกฟงกชน B เปนตน หรอจะเรยกฟงกชนเดมซา (recursive) กได ลองดตวอยางโปรแกรม sum(n) = 1 + …

+ n, n ≥ 0 เขยนแบบเรยกซาจะไดวา sum(n) = n + sum(n - 1), sum(0) = 0

กอนอนควรจะเขยนรหสเทยม (pseudocode) ของฟงกชน sum ใหไดกอนดงน

sum(n) {

if (n == 0)

return 0

else

return n + sum(n - 1)

}

แลวกคอยเขยนโปรแกรมไปตามรหสเทยมดงน

Address 0: LIT

Address 1: 10 // argument = 10

Address 2: CALL

Address 3: 5

Address 4: HALT

Address 5: DUP // function starts here

Address 6: IF

Address 7: 15

Address 8: DUP

Address 9: LIT

Address 10: 1

Address 11: –

Address 12: CALL

Address 13: 5

Address 14: +

Address 15: EXIT

Page 126: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 113  

ลองดอกตวอยางหนงคอ multiply เขยนรหสเทยม (pseudocode) กอน

mul(m, n) {

if (n == 0)

return 0;

else

return m + mul(m, n - 1)

}

แลวกคอยเขยนโปรแกรมไปตามรหสเทยมดงน

LIT

5 // m

LIT

3 // n

CALL

:MUL

HALT

:MUL DUP

IF

:END

OVER

SWAP

LIT

1

-

CALL

:MUL

+

EXIT

:END DROP

DROP

LIT

0

EXIT

โปรแกรมนจะไดผลลพธ 5 x 3 = 15 (x0F)

Page 127: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 114  

ลองดแฟกทอเรยล (factorial) เปนตวอยางสดทาย

fac(n) {

if (n == 0)

return 1

else

return mul(n, fac(n-1))

}

เขยนโปรแกรมไดดงน

LIT

10

CALL

:FAC

HALT

:FAC DUP

IF

:END

DUP

LIT

1

-

CALL

:FAC

CALL

:MUL

EXIT

:END DROP

LIT

1

EXIT

จะเหนวาในการคานวณฟงกชน :FAC ตองใชฟงกชน :MUL ชวยเพราะสแตกซพยไมมคาสงคณ ใหนสตไปคดไป

การบานวาจะเขยนฟงกชน :MUL ยงไง

Page 128: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 115  

ขอจากดของสแตกซพย

ขอจากดโดยทวๆ ไปของสแตกซพยคอ โปรแกรมใช memory, data stack, return stack ไดไมเกน 256 ชอง เชน

เขยนโปรแกรมยาวมากไมได เพราะอางถงหนวยความจาไดแค 28 ชอง ถงมเงนซอหนวยความจามาเพม

กอางไดแค 28 ชอง ถาไมแกฮารดแวรหรอมสวนขยายทจะทาใหอางถงหนวยความจาไดมากกวาน

ใชแถวลาดบ (array) หรอเกบขอมลใหญมากไมได หนวยความจาไมพอ ดวยเหตผลทกลาวไปแลวขางตน

คานวณสญกรณเตมหลง (postfix notation) ทยาวมากไมได เพราะ data stack (DS) จะลน (overflow)

เรยกฟงกชนซาลกมากไมได เพราะ return stack (RS) จะลน

ขอดคอโปรแกรมทเขยนดวยชดคาสงของซพยทมสถาปตยกรรมแบบสแตกจะสนกวาโปรแกรมบนสถาปตยกรรม

แบบอนๆ มาก สถาปตยกรรมแบบสแตกพบไดใน “Java Virtual Machine” และ “Common Language

Runtime (CLR)” ของ .NET ซงเปนเครองเสมอน (virtual machine) คอไมมซพยหรอไมโครโพรเซสเซอรทจะ

ทา (execute) ชดคาสงของ Java byte code และ Common Intermediate Language (CIL) ไดตรงๆ แตใช

วธจาลองเครองเสมอนขนมาบนไมโครโพรเซสเซอรทมสถาปตยกรรมแบบอน เชน x86 ปจจบนซพยทม

สถาปตยกรรมแบบสแตกไมคอยจะมใหเหนแลว เนองจากสถาปตยกรรมแบบสแตกมสมรรถนะการคานวณดอย

กวาสถาปตยกรรมแบบอนๆ นสตจะไดเหนในบทตอๆ ไปวาทาไมจงเปนเชนนน

เอกสารประกอบ (สาหรบอานเพมเตม)

ลองอานบทความตอไปน

Java Bytecode

http://en.wikipedia.org/wiki/Java_bytecode

Common Intermediate Language 

http://en.wikipedia.org/wiki/Common_Intermediate_Language

แบบฝกหด

1. ลองตอบคาถามตอไปน

ก. สแตกซพยไมมคาสง NOT เชน NOT ของ 0x7F ได 0x80 จะเขยนโปรแกรมทา NOT อยางไร

ข. สแตกซพยไมมคาสง “คณ” เลขจานวนเตม แลวจะเขยนโปรแกรมเพอทาการคณไดอยางไร

ค. สแตกซพยไมมคาสง OVER2 (ทางานคลาย OVER แตเอาตวทอยถดจาก TOS ไปอกสองตว) เชน

เรมตน A B C (C คอ top of stack)

สนสด A B C A

จะเขยนโปรแกรมเพอทาแบบนไดอยางไร

ง. สแตกซพยบวกเลขไดทละ 8 บต ถาตองการบวกเลข 16, 32, 64 บตจะทาอยางไร

Page 129: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 116  

จ. สแตกซพยไมมฮารดแวรทใชคานวณจานวนแบบจดตรง (floating-point number) มแตฮารดแวรทใช

บวกลบเลขจานวนเตม แลวจะโปรแกรมใหบวกลบคณหารจานวนในระบบ IEEE754 ไดหรอไม

ฉ. จะโปรแกรมสแตกซพยใหหาดเทอรมแนนต (determinant) ของเมทรกซขนาด 50 x 50 ไดหรอไม

เพราะเหตใด

ช. จะโปรแกรมสแตกซพยใหหา Fib(1000) ไดหรอไม เพราะเหตใด

2. กาหนดใหแถวลาดบ (array) A = { random values } จงเขยนโปรแกรมหาผลรวมของทงแถวลาดบ (สมมต

วาเรารความยาวของแถวลาดบ)

3. จงเขยนโปรแกรมหา Fibonacci number ตวท n (n คออนพตของโปรแกรม)

4. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร และเมอทางานเสรจแลวจะมของใน data stack เหลออยกชน และ

ชนบนสด (top of stack) มคาเปนเทาใด

ขอ ก ขอ ข ขอ ค ขอ ง ขอ จ LIT 0 LIT 100 STORE LOOP LIT 100 LOAD DUP LIT 10 SUB IF END ทางาน A LIT 1 ADD LIT 100 STORE LIT 0 IF LOOP END DROP HALT

LD LIT 100 LIT 110 CALL F HALT F OVER OVER SUB IF END OVER OVER LOAD LIT 200 STORE LOAD OVER STORE OVER LIT 200 LOAD SWAP STORE LIT 1 SUB SWAP LIT 1 ADD SWAP CALL F EXIT END DROP DROP EXIT

LIT 3 LIT 7 CALL F HALT F DUP IF END OVER SWAP LIT 1 SUB CALL F ADD EXIT END DROP DROP LIT 0 EXIT

LIT 5 CALL F HALT F DUP IF END DUP POW SWAP LIT 1 SUB CALL F: ADD EXIT END: DROP LIT 0 EXIT

LIT 128 CALL F: HALT F: DUP LIT 1 SUB IF END: LIT 1 SWAP DIV2 CALL F: ADD EXIT END: DROP LIT 0 EXIT

Hint

ก. ตวแปร i อยทหนวยความจาท address 100

ข. แถวลาดบ A มขนาด 11 ชอง (เปนจานวนคเสมอ) เรมตนท address 100 และจบท address 110

หนวยความจาท address 200 ใชเปน tmp

ค. ฟงกชนรบพารามเตอรทเปนจานวนเตมบวกเทานน

ง. คาสง POW จะ pop คาในสแตกออกมายกกาลงสอง และ push กลบเขาไปคน ฟงกชนรบพารามเตอร

ทเปนจานวนเตมบวกเทานน

จ. คาสง DIV2 จะ pop คาในสแตกออกมาหารสอง (ปดเศษทง เชน 7 หาร 2 เทากบ 3 เปนตน) และ

push กลบเขาไปคน ฟงกชนรบพารามเตอรทเปนจานวนเตมบวกทมากกวา 0 เทานน

Page 130: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 117  

5. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร

ก. LIT 10 CALL WHAT HALT WHAT DUP ADD DUP ADD EXIT

ข. LIT 10 CALL WHAT HALT WHAT LIT 0xFF XOR LIT 1 ADD

EXIT 6. จงเตมฟงกชน SUM ใหสมบรณ SUM(n) = n + SUM(n - 1), SUM(0) = 0

LIT 10 CALL SUM HALT SUM DUP IF END ……… LIT 1 SUB CALL SUM END ……… EXIT

7. ฟงกชน WHAT ทาอะไรกบแถวลาดบ (แถวลาดบเรมตนจาก address 40)

LIT 40 CALL 5 HALT WHAT DUP LOAD IF END DUP LOAD SWAP LIT 1 ADD CALL WHAT ADD EXIT END DROP LIT 0 EXIT

8. ตอบสนๆ วาฟงกชน WHAT ทาอะไร LIT A CALL WHAT HALT WHAT DUP IF END DUP LIT x80 AND(&) IF ZERO ONE LIT 1 SWAP DUP ADD(+) CALL WHAT ADD(+) EXIT ZERO LIT 0 SWAP DUP ADD(+) CALL WHAT ADD(+) END EXIT

LIT A LIT B CALL WHAT HALT WHAT DUP LOAD (@) >R SWAP DUP LOAD (@) >R SWAP R> SWAP STORE (!) R> SWAP STORE (!) EXIT

   

Page 131: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 118  

LIT M LIT N CALL WHAT HALT WHAT OVER OVER SUB(-) LIT x80 AND(&) IF CONT DROP EXIT CONT SWAP OVER SUB(-) SWAP CALL WHAT EXIT

LIT M LIT N (M > N เสมอ) CALL WHAT HALT WHAT OVER OVER SUB(-) IF RET SWAP OVER SUB(-) OVER OVER SUB(-) LIT x80 AND(&) IF NEXT SWAP NEXT CALL WHAT EXIT RET DROP EXIT

9. จงเตมโปรแกรม Fibonacci ตอไปนใหสมบรณ f(0) = 0, f(1) = 1, f(n) = f(n – 1) + f(n - 2)

LIT N CALL FIB HALT FIB DUP IF RET ………… LIT 1 SUB(-) ………… DUP LIT 1 SUB(-) CALL FIB ………… LIT 2 SUB(-) CALL FIB ………… RET EXIT

รายการอางอง

[1] Philip Koopman, Jr., Stack Computers: the new wave, reprinted and distributed by Mountain View

Press, 1989.

[2] ชชวทย อาภรณเทวญ, การออกแบบ Stack CPU ดวยภาษา Verilog เพอสงเคราะหบน FPGA, เซมคอน

ดกเตอร อเลกทรอนกส ฉบบท 316 และ 317 (พ.ค.-ม.ย. 2551).

Page 132: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 119

บทท 11 แอลซทรโพรเซสเซอร

วตถประสงคของการเรยนในบทน

• อธบายสถาปตยกรรมและการทางานของแอลซทรโพรเซสเซอร (LC-3 Processor)

• อธบายชดคาสง (instruction set) ของแอลซทรโพรเซสเซอร (LC-3 Processor)

ในบทนเราจะมาดโปรเซสเซอรอกตวนงทชอวาแอลซทร (Little Computer 3 หรอ LC-3) ทมสถาปตยกรรม

ชดคาสงตางจากสแตกซพย (Stack CPU) โดยสนเชง ทจรงแลวยงมโปรเซสเซอรอกหลายตวทมสถาปตยกรรม

แตกตางกน แตเนองจากเวลามจากด ผมจงเลอกสแตกซพยมาใหศกษากอน เพราะฮารดแวรมขนาดเลกและม

ชดคาสงไมมาก ทาใหศกษาลงรายละเอยดไดทงฮารดแวรและซอฟตแวร แตแอลซทรมฮารดแวรขนาดใหญ

เกนไป ไมเหมาะจะใชสอนแบบลงรายละเอยดใหดจนถงระดบหนวยควบคม (control unit) ดงนนในบทนผมจะ

ไมเนนทฮารดแวรของแอลซทร เพราะถอวาไดสอนเรองฮารดแวรไปแลวในบทสแตกซพย แตจะเนนท

สถาปตยกรรมชดคาสงและการเขยนโปรแกรมทจะโยงไปถงเนอหาในวชา 2301371 ระบบปฏบตการ

(Operating Systems)

ผพฒนาแอลซทรโพรเซสเซอรคอ Yale N. Patt และ Sanjay J. Patel แอลซทรถกออกแบบมาสาหรบการสอน

มากกวาทจะเอาไปใชในอตสาหกรรมจรงๆ เนองจากการออกแบบไมโครโพรเซสเซอรเชงพาณชยจาเปนตอง

ปรบแตงสมรรถนะในหลายๆ จด เพอใหมสมรรถนะเหนอกวาผลตภณฑอนๆ ในทองตลาด ทาใหการออกแบบม

ความซบซอนมาก นอกจากนไมโครโพรเซสเซอรเชงพาณชยยงเปนความลบทางธรกจทไมเปดเผยสถาปตยกรรม

การออกแบบภายใน แตเปดเผยเฉพาะชดคาสงเพอใหโปรแกรมไดเทานน เนอหาทเกยวกบแอลซทรสวนใหญ

เรยบเรยงจากหนงสอของ Patt และ Patel คอ Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003 นอกจากนแบบฝกหดบางสวนกประยกตมาจากหนงสอของ Patt และ Patel ใน

การฝกเขยนโปรแกรมใหนสตดาวนโหลด LC3 Simulator จากเวบไซตของรายวชา

คณลกษณะโดยทวๆ ไปของแอลซทร

แอลซทรมคณลกษณะทวๆ ไปดงน

• เปนโปรเซสเซอรแบบ 16 บต

• มสถาปตยกรรมแบบโหลดสโตร (load/store architecture) โพรเซสเซอรทมสถาปตยกรรมแบบ

นจะโหลด (load) ขอมลจากหนวยความจาขนมาเกบไวบนเรจสเตอรกอน แลวคอยประมวลผล

เชน บวกคาในเรจสเตอรทงสองเขาดวยกน แลวเกบในเรจสเตอรตวทสาม จากนนจงเขยน

(store) คาจากเรจสเตอรผลลพธลงหนวยความจา ทงหมดนใชหลายคาสงผสมกน เชน load,

add, store เปนตน จะไมมคาสงเดยวสาหรบบวกคาสองคาทอยในหนวยความจาแลวเกบผลลพธ

ลงหนวยความจาดวย สถาปตยกรรมแบบโหลดสโตรจะทาใหโปรแกรมทเปนภาษาเครองยาวมาก

แตมขอดททาการคานวณแบบสายทอ (pipeline) และ superscalar ได (รอดในบทตอๆ ไป)

• มเรจสเตอรสาหรบใชงานทวไป (general purpose register) ทงหมด 8 ตว แตละตวเกบคาได

16 บต เราอางถงเรจสเตอรตามเบอรนบจาก 0 ไปจนถง 7

Page 133: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 120

• มหนวยความจา 216 = 65,536 ชอง ชองละ 16 บตทงโปรแกรม (program) และขอมล (data)

อยบนหนวยความจาชนเดยวกน สงเกตวามหนวยความจาชนเดยว ไมเหมอนสแตกซพยทม

หนวยความจาหลายชนทง MEM, DS, RS แยกตามประเภทของของทเกบ

โหมดเลขทอย (Addressing Mode)

แอลซทรโพรเซสเซอรมโหมดเลขทอยดงน (จะอธบายในหวขอสถาปตยกรรมชดคาสง)

• Immediate

• Register

• PC-relative

• Indirect

• Base + offset

รหสเงอนไข (Condition Code)

แอลซทรโพรเซสเซอรมรหสเงอนไข 3 บต (จะอธบายในหวขอสถาปตยกรรมชดคาสง)

• N (negative)

• Z (zero)

• P (positive)

สถาปตยกรรมชดคาสง (Instruction Set Architecture)

ทกคาสงของแอลซทร รวมตวดาเนนการ (opcode) กบตวถกดาเนนการ (operand) มความยาวคงทคอ 16 บต

ตางจากคาสงของสแตกซพยทสนบางยาวบาง เชน คาสง LIT ใชท 2 ไบต คาสง ADD ใชท 1 ไบต เปนตน ดรปท

11.1

รปท 11.1 ชดคาสงของแอลซทร

คาสงทมเครองหมาย + จะเปลยนรหสเงอนไข (condition code) ทงสามบตคอ N, Z, P ตามผลลพธทเกดขน

จากคาสงนน เชน ถาผลลพธเปนบวก NZP จะมคาเทากบ 001 เปนตน

Page 134: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 121

ตวยอของสวนประกอบตางๆ ในแอลซทรมดงน

IR Instruction register

PC Program counter

R Register (R[0] ถง R[7])

N, Z, P Condition code (neg, zero, pos)

M Memory (M[0] ถง M[65535])

แตละคาสงจะทางานดงน (DR / SR ยอมาจาก Destination Register / Source Register, ดานซายมอคอคาสง

ดานขวามอคอผลลพธทเกดขนจากคาสงนน)

คาสง Add (Register & Immediate mode)

ADD+ (IR[5] = 0) R[DR] = R[SR1] + R[SR2]

ADD+ (IR[5] = 1) R[DR] = R[SR1] + imm5 (2’s com)

คาสง And (Register & Immediate mode)

AND+ (IR[5] = 0) R[DR] = R[SR1] & R[SR2]

AND+ (IR[5] = 1) R[DR] = R[SR1] & imm5 (เตม 0 หนา imm)

คาสง Branch (PC-relative mode)

BR PC = PC + PCoffset9 (2’s com)

IR[11:9] เปนการเลอก N, Z, P มาสรางเงอนไข เชน 011 คอ ≥ 0

ถาเงอนไขเปนจรงถงจะทา PC = PC + PCoffset9 ถาไมจรงกเลอนไปทาคาสงถดไป

คาสง Jump (Register mode)

JMP PC = R[BaseR]

คาสง Jump Subroutine (PC-relative mode)

JSR R[7] = PC

PC = PC + PCoffset11 (2’s com)

คาสง Jump Subroutine (Register mode)

JSRR R[7] = PC, PC = R[BaseR] (unsigned int)

คาสง Load (PC-relative, Indirect, Base + offset mode)

LD+ R[DR] = M[PC + PCoffset9] (2’s com)

LDI+ R[DR] = M[M[PC + PCoffset9]] (2’s com)

LDR+ R[DR] = M[R[BaseR] + offset6] (2’s com)

คาสง Load Effective Address (PC-relative mode)

LEA+ R[DR] = PC + PCoffset9 (2’s com)

คาสง Not (Register mode)

NOT R[DR] = ~R[SR]

Page 135: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 122

คาสง Return from Subroutine (Register mode)

RET PC = R[7]

คาสง Return from Interrupt (Register mode)

RTI PC = R[7], change from supervisor (privileged) mode to user mode

คาสง Store (PC-relative, Indirect, Base + offset mode)

ST M[PC + PCoffset9] = R[SR] (2’s com)

STI M[M[PC + PCoffset9]] = R[SR] (2’s com)

STR M[R[BaseR] + offset6] = R[SR] (2’s com)

คาสง Trap to Subroutine (Immediate mode)

TRAP R[7] = PC, PC = M[trapvect8] คาสงนจะไมเปลยน CPU mode

จากโหมดการทางานของแตละคาสงขางตน นสตนาจะพอเดาไดวาแตละโหมดเลขทอย (addressing mode)

หมายถงอะไร แตละโหมดขนอยกบการนาตวถกดาเนนการ (operand) ในแตละคาสงไปใช เชน สมมตวาตวถก

ดาเนนการคอ 5

• Immediate คอเอาตวถกดาเนนการไปใชเปนคาคงท 5 ไดทนทเลย

• Register คอเอาตวถกดาเนนการไปคนคาเรจสเตอรเบอร 5 (R[5]) มาใช

• PC-relative คอเอาตวถกดาเนนการไปใชเปนเลขทอย (address) โดยบวกกบคา PC ณ ปจจบน

เพอคนคา M[PC + 5]

• Indirect คอเอาตวถกดาเนนการไปใชเหมอนตวช (pointer) ในภาษาซ เพอคนคา M[M[5]]

• Base + offset คอเอาตวถกดาเนนการไปใชเปน offset โดยบวกกบเบสเรจสเตอรเพอคนคา

R[base] + 5

ตวอยางการโปรแกรมดวยภาษาแอสเซมบล

ตวอยางโปรแกรม คณหก (x6)

Line 1: ; comment

Line 2: .ORIG x3050

Line 3: LD R1, SIX

Line 4: LD R2, NUMBER

Line 5: AND R3, R3, #0

Line 6: LOOP ADD R3, R3, R2

Line 7: ADD R1, R1, #-1

Line 8: BRp LOOP

Line 9: HALT

Line 10: NUMBER .BLKW 1

Line 11: SIX .FILL x0006

Line 12: HELLO .STRINGZ “Hello, World!”

Line 13: .END

Page 136: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 123

บรรทดท 1 ขอความหลง semicolon เปน comment

บรรทดท 2 บอกวาโปรแกรมเรมตนทเลขทอย x3050

บรรทดท 3 – 9 เปนโปรแกรม ทเอาคาทอยในชอง NUMBER มาคณ 6 โดยทา for-loop

เพอบวกกน 6 ครง และเกบผลลพธไวใน R3

บรรทดท 10 – 11 เรยกวา assembler directives อยในหนวยความจาถดจากตวโปรแกรม

.BLKW คอ block ขนาด 1 word (2 ไบต หรอ 16 บต)

.FILL คอ คาเรมตนในหนวยความจาในทนคอ 0x0006

.STRINGZ คอ string ในรหส ASCII และปดทายดวย null เชน Hello, World! คอ

0x0048, 0x0065, 0x006c, …, 0x0000 (x48, x65, x6C คอ H, e, l ในรหส

ASCII ตามลาดบ)

กอนทโปรแกรมนจะทางาน ตองเอาคาทตองการคณดวยหกไปวางไวท NUMBER กอน จากนนจงเรมให

โปรแกรมทางาน เมอโปรแกรม HALT ผลลพธจะอยใน R3

เวลาหดเขยนโปรแกรมใหใช LC3Edit.exe ในไฟล Zip ทใหดาวนโหลดจะมไฟล demo.asm เมอเปดดวย

โปรแกรม LC3Edit จะไดดงรปท 10.2

รปท 11.2 โปรแกรม LC3Edit

กดปม asm เพอสงคอมไฟลเปน executable code จะไดไฟล demo.obj เปดดวยโปรแกรม Simulate.exe จะไดดง

รปท 11.3 เราสามารถสง step เพอจาลองการทางานทละคาสง หรอจะสงใหทาไปจนกวาจะ HALT กได

Page 137: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 124

รปท 11.3 โปรแกรม Simulate

เอกสารประกอบ (สาหรบอานเพมเตม)

อานเพมเตมเกยวกบแอลซทรโพรเซสเซอรไดจากหนงสอเลมน

• Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003.

Page 138: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 125

แบบฝกหด

1. จงแปลโปรแกรมทเขยนดวยภาษาแอสเซมบลตอไปนใหเปนภาษาเครอง .ORIG x3000 LD R1, OPER1 LD R2, OPER2 ADD R0, R1, R2 ST R0, RESULT HALT OPER1 .FILL x0001 OPER2 .FILL x0002 RESULT .BLKW 1 .END

แปลเปนภาษาเครองไดดงน (เตมชองวางทเวนไว) x3000 0010 0010 0000 0100 x3001 ………………………… x3002 ………………………… x3003 0011 0000 0000 0011 x3004 1111 0000 0010 0101 x3005 0000 0000 0000 0001 x3006 0000 0000 0000 0002 x3007 0000 0000 0000 0000

.ORIG x3000 LEA R0, AAA JMP R0 AAA BRn BBB BBB BRz CCC CCC BRp AAA HALT .END

แปลเปนภาษาเครองไดดงน (เตมชองวางทเวนไว) x3000 1110 0000 0000 0001 x3001 1100 0000 0000 0000 x3002 0000 1000 0000 0000 x3003 ………………………… x3004 0000 0011 1111 1101 x3005 1111 0000 0010 0101

จงตอบคาถามตอไปน

หลงจากทาคาสง LEA แลว R0 จะมคาเทาใด

2. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร .ORIG x3000 LD R2, ZERO LD R0, M0 LD R1, M1 LOOP BRz DONE ADD R2, R2, R0 ADD R1, R1, -1 BR LOOP DONE ST R2, RESULT HALT RESULT .FILL x0000 ZERO .FILL x0000 M0 .FILL x0004 M1 .FILL x0803 .END หลงจากโปรแกรมทางานจนเสรจ RESULT จะมคาเปนเทาใด

3. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร .ORIG x3000 AND R0, R0, #0 D LD R1, A AND R2, R1, #1 BRp B E ADD R1, R1, #-1 B ADD R0, R0, R1 ADD R1, R1, #-2 F BRp B ST R0, C TRAP x25 A .BLKW 1 C .BLKW 1 .END

4. จงเขยนโปรแกรมเพอนบจานวนบตทเปน 1 ใน R0 เชน ถา R0 มคา 0001 0011 0111 0000 เมอ

โปรแกรมทางานเสรจ R1 จะตองมคาเปน 0000 0000 0000 0110

Page 139: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 126

5. จงหาขอผดพลาด (error) ของโปรแกรมตอไปน ขอผดพลาดนจะถกตรวจพบเมอ ก. เวลาคอมไพล

(assembly time) หรอ ข. เวลารนบนแอลซทรโพรเซสเซอร (run time) ADD R3, R3, #30 ST R3, A HALT A .FILL #0

6. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร .ORIG x3000 AND R5, R5, #0 AND R3, R3, #0 ADD R3, R3, #8 LDI R1, A ADD R2, R1, #0 AG ADD R2, R2, R2 ADD R3, R3, #-1 BRnp AG LD R4, B AND R1, R1, R4 NOT R1, R1 ADD R1, R1, #1 ADD R2, R2, R1 BRnp NO ADD R5, R5, #1 NO HALT B .FILL xFF00 A .FILL x4000 .END

7. โปรแกรมตอไปนบวกคาในหนวยความจาทตาแหนง A, B, C แลวเขยนผลลพธลงไปในหนวยความจา จงหา

ขอผดพลาด (error) 2 ท และจะพบขอผดพลาดนจะถกตรวจพบเมอ ก. เวลาคอมไพล (assembly time)

หรอ ข. เวลารนบนแอลซทรโพรเซสเซอร (run time) .ORIG x3000 ONE LD R0, A ADD R1, R1, R0 TWO LD R0, B ADD R1, R1, R0 THREE LD R0, C ADD R1, R1, R0 ST R1, SUM TRAP x25 A .FILL x0001 B .FILL x0002 C .FILL x0003 D .FILL x0004 .END

8. โปรแกรมตอไปนเปรยบเทยบขอความ 2 ขอความทมความยาวเทากน ขอความแรกเรมตนทหนวยความจา

x4000 ขอความทสองเรมท x4100 ถาขอความทงสองเหมอนกน โปรแกรมจะทาให R5 = 1 ถาไม R5 = 0

จงเตมโปรแกรมใหสมบรณ โดยเพม 3 instructions ท (a) (b) และ (c) .ORIG x3000 LD R1, FIRST LD R2, SECOND AND R0, R0, #0 LOOP ........................ (a) LDR R4, R2, #0 BRz NEXT ADD R1, R1, #1 ADD R2, R2, #1 ........................ (b) ........................ (c) ADD R3, R3, R4 BRz LOOP AND R5, R5, #0 BRnzp DONE

Page 140: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 127

NEXT AND R5, R5, #0 ADD R5, R5, #1 DONE TRAP x25 FIRST .FILL x4000 SECOND .FILL x4100 .END

9. โปรแกรมตอไปนตรวจสอบวาขอความท x4000 เปนพาลนโดรม (palindrome) หรอไม ถาเปนจะให R5 =

1 ถาไม R5 = 0 จงเตมโปรแกรมใหสมบรณ โดยเพม 5 คาสง ท (a) - (e) .ORIG x3000 LD R0, PTR ADD R1, R0, #0 AGAIN LDR R2, R1, #0 BRz CONT ADD R1, R1, #1 BRnzp AGAIN CONT ...................... (a) LOOP LDR R3, R0, #0 ...................... (b) NOT R4, R4 ADD R4, R4, #1 ADD R3, R3, R4 BRnp NO ...................... (c) ...................... (d)

NOT R2, R0 ADD R2, R2, #1 ADD R2, R1, R2 BRnz YES ...................... (e) YES AND R5, R5, #0 ADD R5, R5, #1 BRnzp DONE NO AND R5, R5, #0 DONE HALT PTR .FILL x4000 .END

10. โปรแกรมตอไปนเลอน (shift) R3 ไปทางซาย 4 บต (R3 = R3 << 4) จงหาขอผดพลาดและแกไขให

โปรแกรมถกตอง .ORIG x3000 AND R2, R2, #0 ADD R2, R2, #4 LOOP BRz DONE ADD R2, R2, #-1 ADD R3, R3, R3 BR LOOP DONE HALT .END

11. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร หรอเตมโปรแกรมใหสมบรณ .ORIG x3000 LD R1, A LD R2, B ST R1, B ST R2, A HALT A .BLKW 1 B .BLKW 1 .END

.ORIG x3000 AND R0, R0, #0 LEA R1, INPUT LOOP LDR R2, R1, #0 BRz END ADD R0, R0, #1 ADD R1, R1, #1 BRnzp LOOP END ST R0, OUTPUT HALT INPUT .STRINGZ "ComputerSystems" OUTPUT .BLKW 1 .END

Page 141: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 128

.ORIG x3000 AND R1, R1, #0 LD R2, N LEA R3, LIST LD R4, MAX LOOP LDR R5, R3, #0 NOT R6, R5 ADD R6, R6, #1 ADD R7, R4, R6 BRnz NEXT ADD R4, R5, #0 NEXT ADD R3, R3, #1 ADD R1, R1, #1 NOT R7, R1 ADD R7, R7, #1 ADD R7, R7, R2 BRnp LOOP END ST R4, OUTPUT HALT MAX .FILL 0x7FFF N .FILL 0x0005 LIST .FILL 0x0046 .FILL 0x0028 .FILL 0x0013 .FILL 0x0007 .FILL 0x0009 OUTPUT .BLKW 1 .END

.ORIG x3000 LD R2, Q LOOP1 LDI R1, KBSR BRzp LOOP1 LDI R0, KBDR NOT R3, R0 ADD R3, R3, #1 ADD R4, R2, R3 BRz END LOOP2 LDI R1, DSR BRzp LOOP2 STI R0, DDR BRnzp LOOP1 END HALT KBSR .FILL xFE00 KBDR .FILL xFE02 DSR .FILL xFE04 DDR .FILL xFE06 Q .FILL x0071 .END

โปรแกรมหา parity bit: ถาจานวนบตทเปน 1 ใน INPUT

เปนเลขค parity bit คอ 1 ถาจานวนบตทเปน 1 ใน INPUT

เปนเลขค parity bit คอ 0 เมอโปรแกรมนทางานเสรจ

OUTPUT มคาเปน 1 .ORIG x3000 LD R0, INPUT AND R1, R1, #0 LD R2, CONST LD R3, MASK AND R7, R7, #0 LOOP ADD R0, R0, #0 BRzp NEXT ......................... AND R7, R7, R3 NEXT ADD R0, R0, R0 ADD R1, R1, #1 NOT R4, R1 ADD R4, R4, #1 ADD R5, R2, R4 BRp LOOP ST R7, OUTPUT HALT MASK .FILL 0x0001 CONST .FILL 0x0010 INPUT .FILL 0x1234 OUTPUT .BLKW 1 .END

โปรแกรมหาผลรวมในแถวลาดบ (array) A[0] + A[1] +

A[2] + … + A[n – 1] เมอโปรแกรมนทางานเสรจ OUTPUT

มคาเปน 15 .ORIG x3000 AND R0, R0, #0 AND R1, R1, #0 LD R2, N LEA R3, INPUT LOOP ADD R4, R3, R1 LDR R5, R4, #0 ADD R0, R0, R5 ADD R1, R1, #1 NOT R6, R1 ADD R6, R6, #1 ADD R7, R2, R6 ......................... ST R0, OUTPUT HALT N .FILL 5 INPUT .FILL 0x0001 .FILL 0x0002 .FILL 0x0003 .FILL 0x0004 .FILL 0x0005 OUTPUT .BLKW 1 .END

Page 142: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 129

โปรแกรมหา M ÷ N กาหนดให M และ N เปนจานวนเตม

บวกเทานน ปดเศษทง เชน 23 ÷ 5 = 4 .ORIG x3000 AND R0, R0, #0 LD R1, M LD R2, N ......................... ......................... LOOP ADD R1, R1, R2 BRn END ADD R0, R0, #1 BRnzp LOOP END ST R0, OUTPUT HALT M .FILL 100 N .FILL 7 OUTPUT .BLKW 1 .END

โปรแกรมพมพเลขฐาน 16 INPUT มคาอยระหวาง 0 ถง 15

ให OUTPUT ออกมาเปนรหส ASCII .ORIG x3000 LEA R1, HEX LD R2, INPUT ......................... ......................... ST R4, OUTPUT HALT INPUT .FILL #12 OUTPUT .BLKW 1 HEX .STRINGZ "01234567890ABCDE" .END

เมอโปรแกรมนทางานเสรจ OUTPUT จะมคาเปน 0x0043

หรออกขระ C ในรหส ASCII

12. จงเขยนโปรแกรมตรวจสอบ palindrome แบบเรยกซา (recursive call) เรยกฟงกชน f(a,b) เมอ a เปน

address ของอกขระตวแรก และ b เปน address ของอกขระตวสดทาย ครงตอไปกเรยกฟงกชน f(a + 1, b

– 1) และ f(a + 2, b – 2) ไปเรอยๆ กาหนดใหมอกขระเปนจานวนค ดงนนจะหยดเรยกซากตอเมอ a

เทากบ b

13. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร .ORIG x3000 LD R1, OPER1 LD R2, OPER2 NOT R3, R2 ADD R3, R3, #1 ADD R0, R1, R3 BRn NEXT ST R1, RESULT HALT NEXT ST R2, RESULT HALT OPER1 .BLKW 1 OPER2 .BLKW 1 RESULT .BLKW 1 .END

.ORIG x3000 LEA R1, HELLO LEA R2, TEMP ADD R2, R2, #-2 BEGIN LDR R3, R1, #0 LDR R4, R2, #0 STR R4, R1, #0 STR R3, R2, #0 ADD R1, R1, #1 ADD R2, R2, #-1 NOT R5, R2 ADD R5, R5, #1 ADD R0, R1, R5 BRn BEGIN END HALT HELLO .STRINGZ "abcdefg" TEMP .BLKW 1 .END

Page 143: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 130

14. จงตอบสนๆ วาโปรแกรมตอไปนทาอะไร

.ORIG x3000 AND R3, R3, #0 LD R1, XXX LD R2, YYY LOOP BRnz END ADD R3, R3, R1 ADD R2, R2, #–1 BRnzp LOOP END ST R3, ZZZ HALT XXX .BLKW 1 ; X (X ≥ 0 เสมอ) YYY .BLKW 1 ; Y (Y ≥ 0 เสมอ) ZZZ .BLKW 1 ; Z .END

.ORIG x3000 LEA R1, SSS LEA R2, SSS LOOP1 ADD R2, R2, #1 LDR R3, R2, #0 BRnp LOOP1 LOOP2 LDR R3, R1, #0 LDR R4, R2, #-1 STR R3, R2, #-1 STR R4, R1, #0 ADD R1, R1, #1 ADD R2, R2, #-1 NOT R5, R1 ADD R5, R5, #1 ADD R0, R2, R5 BRp LOOP2 HALT SSS .STRINGZ "hello world!" .END

.ORIG x3000 AND R0, R0, #0 LEA R1, AAA LEA R4, RESULT LOOP LDR R2, R1, #0 ADD R0, R0, R2 ADD R1, R1, #1 NOT R2, R1 ADD R2, R2, #1 ADD R2, R4, R2 BRp LOOP STR R0, R4, #0 HALT AAA .BLKW 10 RESULT .BLKW 1 .END

.ORIG x3000 AND R5, R5, #0 AND R3, R3, #0 ADD R3, R3, #8 LD R1, NUMBER ADD R2, R1, #0 LOOP ADD R2, R2, R2 ADD R3, R3, #-1 BRnp LOOP LD R4, MASK AND R1, R1, R4 NOT R1, R1 ADD R1, R1, #1 ADD R2, R2, R1 BRnp NEXT ADD R5, R5, #1 NEXT ST R5, RESULT HALT MASK .FILL xFF00 NUMBER .BLKW 1 RESULT .BLKW 1 .END

รายการอางอง

[1] Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003.

Page 144: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 131

บทท 12

การโปรแกรมแอลซทรโพรเซสเซอร

วตถประสงคของการเรยนในบทน

เขยนโปรแกรมดวยชดค าสงของแอลซทร

อธบายการท างานของการเรยกฟงกชน (function call), การเรยกซ า (recursive call), กบดก (trap), การ

ขดจงหวะ (interrupt)

ในบทนเราจะมาเขยนโปรแกรมดวยชดค าสงของแอลซทรซงมสถาปตยกรรมชดค าสงทแตกตางจากสแตกซพย

โดยสนเชง และยงมอปกรณรบอนพตและแสดงเอาตพต เชน คยบอรดและจอภาพ เนอหาทเกยวกบแอลซทรสวน

ใหญเรยบเรยงจากหนงสอของ Patt และ Patel คอ Introduction to Computing Systems: From bits & gates to

C & beyond, McGraw-Hill, 2003 นอกจากน แบบฝกหดบางสวนกประยกตมาจากหนงสอของ Patt และ Patel

ในการฝกเขยนโปรแกรมใหนสตดาวนโหลด LC3 Simulator จากเวบไซตของรายวชา

ภาษาแอสเซมบลของแอลซทร

ในบททแลวเราไดเหนภาษาเครอง (machine language) ของแอลซทรไปแลว แตเวลาเขยนโปรแกรมเราจะใช

ภาษาแอสเซมบล (assembly language) แลวคอยใชแอสเซมเบลอร (assembler) แปลใหเปนภาษาเครอง

ค าสง Add

Register mode: ADD R0, R1, R2 ; R[0] = R[1] + R[2]

Immediate mode: ADD R0, R1, #1 ; R[0] = R[1] + 1

ค าสง And

Register mode: AND R0, R1, R2 ; R[0] = R[1] & R[2]

Immediate mode: AND R0, R1, #255 ; R[0] = R[1] & x0F

ค าสง Branch

PC-relative mode: BRn A (label) ; PC += offset, if n=1

BRzp A (label) ; PC += offset, if z=p=1

ค าสง Jump

Register mode: JMP R0 ; PC = R[0]

ค าสง Jump Subroutine

PC-relative mode: JSR A (label) ; R[7] = PC, PC += offset

Register mode: JSSR R0 ; R[7] = PC, PC = R[0]

Page 145: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 132

ค าสง Load

PC-relative mode: LD R0, A ; R[0] = M[PC + offset]

Indirect mode: LDI R0, A ; R[0] = M[M[PC+offset]]

Base+offset mode: LDR R0, R1, #1 ; R[0] = M[R[1] + 1]

ค าสง Load Effective Address

PC-relative mode: LEA R0, A ; R[0] = PC + offset

ค าสง Not

Register mode: NOT R0, R1 ; R[0] = ~R[1]

ค าสง Store

PC-relative mode: ST R0, A ; M[PC + offset] = R[0]

Indirect mode: STI R0, A ; M[M[PC+offset]] = R[0]

Base+offset mode: STR R0, R1, #1 ; M[R[1] + 1] = R[0]

ค าสง Return / Return from Interrupt / Trap to Subroutine

Register mode: RET ; PC = R[7]

Register mode: RTI ; PC = R[7], change mode

Immediate mode: TRAP x21 ; R[7] = PC, PC = M[x21]

ตวแปร (Variable)

ตวแปรจะประกาศไวในสวนทเรยกวา assembler directives เชน มตวแปร A กประกาศวา

A .BLKW 1

แตถาจะใหมคาเรมตนดวย เชน A = 1 กประกาศวา

A .FILL 0x0001

ถาไมใช assembler directives โปรแกรมเมอรจะตองจ าเอาเองวาตวแปรนนอยทเลขทอย (address) ใด การใช

assembler directives ท าใหอางถงเลขทอยของตวแปรไดงายๆ ดวยชอตวแปร เชน A, B, C เปนตน

แถวล าดบ (Array)

แถวล าดบกประกาศเหมอนตวแปรธรรมดา เพยงแตเพมจ านวนชองตามทตองการ เชน ถาตองการแถวล าดบ 3

ชองกประกาศวา

A .BLKW 3

แตถาจะใหมคาเรมตนดวย เชน A = {1, 2, 3} กประกาศวา

A .FILL 0x0001

.FILL 0x0002

.FILL 0x0003

ตวแปรแบบสายอกขระ (string) กเปนแถวล าดบแบบหนง แตละชองกคอตวอกขระ (character) เชน

S .STRINGZ “Hello, World!” กนท 14 ชอง ชองสดทายเปน null

Page 146: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 133

กระโดด (Jump)

ถาตองการกระโดดจากบรรทดหนงเพอไปท างานยงอกบรรทดหนง กท าไดหลายแบบ เชน

BRnzp A ; กระโดดไปยง A

แตค าสง BRnzp จะกระโดดไปไดไมไกลกวา offset 9 บต (เปนสวนเตมเตมสอง) ท าใหจะกระโดดขนไปทาง

เลขทอย x0000 (offset เปนลบ) หรอกระโดดลงไปทางเลขทอย xFFFF (offset เปนบวก) ถาจะกระโดดไปไกล

กวานนกตองโหลดเลขทอย (address) ทจะกระโดดไปมาเกบไวในเรจสเตอรกอน เพราะเรจสเตอรมขนาด 16 บต

จะท าใหกระโดดไปไดไกลกวา

LD R0, A ; A ตองอยไมไกลจากบรรทดนมาก

JMP R0 ; กระโดดไปท 0x1000

… … …

A .FILL 0x1000

ค าสง if-then

โคดตามรปนเลย

รปท 12.1 โครงสรางโปรแกรมแบบ if-then

ค าสง if-else

โคดตามรปนเลย

รปท 12.2 โครงสรางโปรแกรมแบบ if-else

Page 147: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 134

การสรางบตเงอนไข (Condition Bit)

ไมวาเราจะโปรแกรมเงอนไขอะไรกตามแอลซทรมบตเงอนไขเพยง 3 บตเทานน และค าสง BR จะท างาน

ตามบตเงอนไขเสมอ ดงนนเราตองแปลงเงอนไขของเราใหเขากบบตเงอนไขแลวคอยใชค าสง BR เชน

A = 0, A != 0 LD R0, A

BRz … ; branch taken if A = 0

BRnp … ; branch taken if A != 0

A >= 2 LD R1, A

ADD R0, R1, #-2

BRzp … ; branch taken if A – 2 >= 0

A > B LD R1, A

LD R2, B

NOT R2, R2

ADD R2, R2, #1

ADD R0, R1, R2

BRp … ; branch taken if A – B > 0

การท า for-loop

ท าเหมอนการโปรแกรมสแตกซพยดรปท 10.5

การท า while-loop

ท าเหมอนการโปรแกรมสแตกซพยดรปท 10.6

Page 148: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 135

การเรยกฟงกชน (Functional Call) และการเรยกซ า (Recursive Call)

ปญหาของแอลซทรคอไมมฮารดแวรส าหรบ Data Stack (DS) และ Return Stack (RS) ดงนนจงเปนหนาทของ

โปรแกรมเมอรทจะตดหนวยความจ าบางสวนมาท าสแตก เมอมการเรยกใชฟงกชนจะเกดสแตกเฟรมขน (stack

frame หรอเรยกอกชอหนงวา activation record) สแตกเฟรมของการเรยกฟงกชน 1 ครงประกอบดวยสวนตางๆ

ดงแสดงในรปท 12.3 ทงกอนสแตกเฟรมคอออบเจกต (object) 1 ชนทเราจะ push ลงไปใน stack

รปท 12.3 สแตกเฟรม

ในชองสเหลยม 1 ชนคอหนวยความจ า 1 ชอง มขนาด 16 บต ตวช (pointer) ทชทออบเจกตสแตกเฟรม จะชไป

ทชอง frame pointer ดงนนถาเราเอา R5 เปนตวชกจะอานคาตางๆ ในสแตกเฟรมไดดงน

LD R0, R5, #0 ; R0 = frame pointer

LD R0, R5, #-1 ; R0 = local variable ตวท 1

LD R0, R5, #-2 ; R0 = local variable ตวท 2

LD R0, R5, #-3 ; R0 = local variable ตวท 3

LD R0, R5, #1 ; R0 = return address

LD R0, R5, #2 ; R0 = return value

LD R0, R5, #3 ; R0 = argument ตวสดทาย

การเรยกฟงกชนแตละครงจะสรางสแตกเฟรมขนมา 1 ออบเจกตเสมอ (แมวาจะเปนการเรยกฟงกชนเดม

ซ า) แตละระเบยน (record) ในสแตกเฟรมคอ

Local variable หมายถง ตวแปรทประกาศและใชอยในฟงกชนทท าใหเกดสแตกเฟรมน

Frame pointer คอ ฟงกชนทชกลบไปทสแตกเฟรมของ caller

Return address คอ เมอท า callee เสรจแลว ตองให PC = return address เพอกลบไปท างานตอ

ใน caller ใหถกตอง

Return value คอ คาทสงกลบจากฟงกชนทเปนเจาของสแตกเฟรมน (callee) ไปให caller

Argument คอ อารกวเมนตของฟงกชนททเปนเจาของสแตกเฟรมน (caller) ซงรบมาจาก caller

Page 149: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 136

ผมใหสแตกเรมตนจากหนวยความจ าเลขท 0xFDFF และสแตกจะโตขนไปทาง x0000 การเรยกฟงกชนม

ขนตอนดงน (ให R5 ชทสแตกเฟรมปจจบน, R6 ชท TOS)

1. caller เรม push อารกวเมนตลงไปในสแตก (เรมสรางสแตกเฟรมใหมให callee)

2. เรยกค าสง JSR หรอ JSRR เพอกระโดดไปท างานใน callee

3. callee จะสรางสแตกเฟรมใหมใหเสรจ โดยบนทกคา R7 ลงชอง return address, เซตคา

frame pointer ใหชกลบไปทสแตกเฟรมของ caller จองทในแสตกส าหรบ local variable (ถา

ม) โดย push คาเรมตนของ local variable ลงไปสแตก

4. callee ท าการค านวณผลลพธจนเสรจ และเขยนผลลพธลงในชอง return value

5. เมอจะกลบไปยง caller ตองเลอน R6 (TOS) ใหไปชท return value, เอา return address

กลบมาไวท R7, เซต R5 ใหชกลบไปยงสแตกเฟรมของ caller

6. เรยกค าสง RET เพอกระโดดกลบไปท างานใน caller

7. caller จะรวาผลลพธทสงกลบจาก callee อยท TOS (R6)

8. caller จะอานผลลพธมาใช แลวท าลายสแตกเฟรมของ callee ทงไป

9. caller จะท างานตอจากค าสงทเรยก callee

ลองดตวอยางตอไปน

sum(a, b) {

return a + b

}

main(void) {

x = sum(1,2)

}

เขยนโปรแกรมดวยภาษาแอสเซมบลไดดงน

.ORIG x3000

; make a stack frame for main program (operating systems will do this)

LD R6, TOS

LD R0, ZERO

ADD R6, R6, #-1

STR R0, R6, #0 ; push 0 (return value)

ADD R6, R6, #-1

STR R0, R6, #0 ; push 0 (return address)

ADD R6, R6, #-1

STR R0, R6, #0 ; push 0 (frame pointer)

ADD R5, R6, #0 ; R5 = R6, set frame pointer

ADD R6, R6, #-1 ; local variable (x)

Page 150: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 137

; main program

LD R0, ONE

ADD R6, R6, #-1

STR R0, R6, #0 ; push argument, 1

LD R0, TWO

ADD R6, R6, #-1

STR R0, R6, #0 ; push argument, 2

JSR SUM

LDR R0, R6, #0

STR R0, R5, #-1 ; x = R0

ADD R6, R6, #3 ; pop 3 items, destroy callee's stack frame

HALT

SUM ADD R6, R6, #-2

STR R7, R6, #0 ; push R7 (save return address)

ADD R6, R6, #-1

STR R5, R6, #0 ; push R5 (save frame pointer)

ADD R5, R6, #0 ; R5 = R6 (move to the new frame)

LDR R1, R5, #4 ; R1 = the 1st argument

LDR R2, R5, #3 ; R2 = the 2nd argument

ADD R0, R1, R2

STR R0, R5, #2 ; save return value

ADD R6, R6, #2 ; R6 += 2 (-> return value)

LDR R7, R5, #1 ; restore R7 (if R7 has been overwritten)

LDR R5, R5, #0 ; R5 -> caller's stack frame

RET

ZERO .FILL 0x0000

ONE .FILL 0x0001

TWO .FILL 0x0002

TOS .FILL 0xFE00 ; 0xFDFF + 1

.END

Page 151: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 138

อปกรณอนพตเอาตพตทแมพลงไปบนหนวยความจ า (Memory-mapped I/O)

ทผานมาไดแสดงใหดแลววาไมโครโปรเซสเซอรอานและเขยนหนวยความจ าไดอยางไร ทนถามอปกรณอนพต

เอาตพตแลวไมโครโปรเซสเซอรจะอานและเขยนอปกรณเหลานนไดอยางไร วธหนงกคอใชการแมพลงไปบน

หนวยความจ า (memory-mapped I/O) หลกการคอท าใหอปกรณนนมเลขทอย (address) ซอนทบกบเลขทอย

ของหนวยความจ า เชน คยบอรดอยท 0xFF01 เมอจะอานคาจากคยบอรดกใหโหลดคาจาก 0xFF01 ไดเลย (ขอ

ไมอธบายวาออกแบบฮารดแวรยงไง ใหลองจนตนาการดเอง) แตวธนมขอเสยกคอจะเสยหนวยความจ าไป

บางสวน ถาไมท า memory-mapped I/O กตองใชค าสงพเศษส าหรบอานเขยนอปกรณอนพตเอาตพต เชน

สมมตวามค าสง RKB อานคาจากคยบอรด ถามค าสงพเศษกไมตองระบเลขทอย แตขอเสยวธนคอจะเสยค าสงไป

เพอจดการกบอปกรณอนพตเอาตพต แทนทจะใชค าสง LD/ST ทมอยแลว

คยบอรด (Keyboard)

คยบอรดทตอกบแอลซทรมเรจสเตอร 2 ตวคอ KBSR และ KBDR ดงรปท 12.4 บตทท าเครองหมายกากบาท

ไวคอไมไดใช

รปท 12.4 KBSR และ KBDR

ถา MSB ของ KBSR เทากบ 0 คอยงไมมการกดคยบอรด แตถามคาเปน 1 คอคยบอรดถกกดแลว และปมทถก

กดจะแสดงใน KBDR เปนรหส ASCII ตอไปนคอตวอยางโปรแกรมทรอใหมการกดคยบอรดและอานคาจาก

คยบอรดมาเกบไวใน R[0]

.ORIG x3000

START LDI R1, KBSR

BRzp START

LDI R0, KBDR

HALT

KBSR .FILL 0xFE00

KBDR .FILL 0xFE02

.END

Page 152: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 139

มอนเตอร (Monitor)

มอนเตอรกใชเรจสเตอรสองตวเหมอนคยบอรดคอ Display Status Register (DSR) และ Display Data Register

(DDR) ซงอยท 0xFE04 และ 0xFE06 ตามล าดบ ตอไปนคอโปรแกรมทพมพตวอกษรใน R[0] ออกไปท

จอภาพ ใน LC3 Simulator สามารถก าหนดคาเรมตนให R[0] ไดโดยใช Set Value ลองก าหนดคาเรมตนให

R[0] เปน 0x0041

.ORIG x3000

START LDI R1, DSR

BRzp START ; DSR = 0 คอ busy, 1 คอ ready

STI R0, DDR

HALT

DSR .FILL 0xFE04

DDR .FILL 0xFE06

.END

กบดก (Trap)

ค าสง trap เปนการเรยกใชรทน (routine) ของระบบปฏบตการ (operating system) ลองดตวอยางโปรแกรม

ตอไปน เมอปอนอนพตเปนอกษรตวใหญ โปรแกรมจะเอาตพตเปนอกษรตวเลก และโปรแกรมจะหยดเมอกด 7

.ORIG x3000

LD R2, TERM

LD R3, ASCII

START TRAP x23 ; R[0] <- keyboard

ADD R1, R2, R0

BRz EXIT

ADD R0, R0, R3

TRAP x21 ; monitor <- R[0]

BRnzp START

TERM .FILL 0xFFC9 ; character 7 (2’com)

ASCII .FILL 0x0020 ; ใชแปลงตวใหญเปนตวเลก

EXIT TRAP x25 ; HALT

.END

Trap vector ในหนวยความจ าเลขท x21, x23, x25 จะชไปทรทนทท าหนาทตอไปน

x21 เขยนคา R0 ไปทมอนเตอร

x23 อานคาจากคยบอรดมาเกบใน R0

x25 ให shutdown หรอ halt

Page 153: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 140

รทนนเปนสวนหนงของระบบปฏบตการซงถกโหลดมากอนท user program จะท างานแลว

Character output service routine (x21) ตามหนงสอของ Patt และ Patel

01 .ORIG x0430 ; system call starting address

02 ST R1, SaveR1 ; R1 will be used to poll the DSR

03 ; hardware

04 ; write the character

05 TryWrite LDI R1, DSR ; get status

06 BRzp TryWrite ; bit 15 on says display is ready

07 WriteIt STI R0, DDR ; write character

08

09 ; return from trap

0A Return LD R1, SaveR1 ; restore registers

0B RET ; return from trap (JMP R7, actually)

0C DSR .FILL xFE04 ; address of display status register

0D DDR .FILL xFE06 ; address of display data register

0E SaveR1 .BLKW 1

0F .END

Character input service routine (x23)ตามหนงสอของ Patt และ Patel

01 ; Service Routine for Keyboard Input

02 ;

03 .ORIG 0x04A0

04 START ST R1, SaveR1 ; save the values in the registers

05 ST R2, SaveR2 ; that are used so that they

06 ST R3, SaveR3 ; can be restored before RET

07 ;

08 LD R2, NewLine

09 L1 LDI R3, DSR ; check DDR – is it free?

0A BRzp L1

0B STI R2, DDR ; move cursor to new clean line

0C ;

0D LEA R1, Prompt ; prompt is starting address

0E ; of prompt string

0F Loop LDR R0, R1, #0 ; get next prompt character

10 BRz Input ; check for end of prompt string

11 L2 LDI R3, DSR

12 BRzp L2

13 STI R0, DDR ; write next character of

14 ; prompt string

15 ADD R1, R1, #1 ; increment prompt pointer

16 BRnzp Loop

17 ;

Page 154: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 141

HALT service routine (x25) ตามหนงสอของ Patt และ Patel

01 .ORIG xFD70 ; where this routine resides

02 ST R7, SaveR7

03 ST R1, SaveR1 ; R1: a temp for MC register

04 ST R0, SaveR0 ; R0 is used as working space

05

06 ; print message that machine is halting

07 08 LD R0, ASCIINewLine

09 TRAP x21

0A LEA R0, Message

0B TRAP x22

0C LD R0, ASCIINewLine

0D TRAP x21

0E ;

0F ; clear bit 15 at xFFFE to stop the machine

10 ; 11 LDI R1, MCR ; load MC register into R1 12 LD R0, MASK ; R0 = x7FFF

13 AND R0, R1, R0 ; mask to clear the top bit

14 STI R0, MCR ; store R0 into MC register

15 ADD R1, R1, #1 ; increment prompt pointer

16 BRnzp Loop

17 ;

18 Input LDI R3, KBSR ; has a character been typed?

19 BRzp Input

1A LDI R0, KBDR ; load it into R0

1B L3 LDI R3, DSR

1C BRzp L3

1D STI R0, DDR ; echo input character

1E ; to the monitor

1F ;

20 L4 LDI R3, DSR

21 BRzp L4

22 STI R2, DDR ; move cursor to new clean line

23 LD R1, SaveR1 ; service routine done, restore

24 LD R2, SaveR2 ; original values in registers

25 LD R3, SaveR3 ;

26 RET ; return from trap (i.e., JMP R7)

27 ;

28 SaveR1 .BLKW 1

29 SaveR2 .BLKW 1

2A SaveR3 .BLKW 1

2B DSR .FILL xFE04

2C DDR .FILL xFE06

2D KBSR .FILL xFE00

2E KBDR .FILL xFE02

2F Newline .FILL x000A ; ASCII code for newline

30 Prompt .STRINGZ “Input a character>”

31 .END

อนพตเอาตพตทถกขบดวยการขดจงหวะ (Interrupt-driven I/O)

ตวอยางการเขยนโปรแกรมในหวขอคยบอรดและมอนเตอรเปนการโปรแกรมแบบ “polling” ขอเสยของ polling

คอซพยตองคอยอาน status register อยตลอด ท าใหเสยเวลาไปโดยเปลาประโยชน แทนทจะเอาซพยไปท างาน

อยางอน ในหวขอนจะแสดงใหเหนวาเราสามารถเปลยนโหมดการท างานของอปกรณอนพตเอาตพตใหเปนแบบ

ขดจงหวะ (interrupt) ได ตวอยางการขดจงหวะในแอลซทรเชน การอานคยบอรด เราไมตองใชซพยไปคอยอาน

คา KBSR อยตลอดเวลา ปลอยซพยไปท างานอยางอนได ตอเมอมการกดปม คยบอรดจะสงสญญาณกลบไปบอก

Page 155: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 142

ซพยเอง เมอซพยไดรบสญญาณขดจงหวะ (ร วามาจากคยบอรด) กจะกระโดดไปท างานในรทนทใชจดการกบ

คยบอรด ซงอยทหนวยความจ าเลขท x0180 ดงนนซพยกจะเซตคา PC ใหมคาเทากบ M[x0180]

ซพยโดยทวๆ ไปจะตองมอยางนอย 2 โหมด คอ 1) โหมดก ากบดแล (supervisor หรอ privilege mode) และ

2) โหมดผใช (user mode) โหมดแรกจะท าไดทกอยาง ไมวาจะเปนการท า (execute) ค าสงใดๆ และอาน/

เขยนเรจสเตอรไดทกตว โหมดทสองจะถกจ ากดสทธ เชน ไมสามารถท าบางค าสง หรอไมสามารถอาน/เขยนเรจส

เตอรบางตวได ทตองมสองโหมดเพราะวาโหมดแรกใชส าหรบระบบปฏบตการและโหมดทสองส าหรบโปรแกรม

ผใช (user program) ในแอลซทรโหมดผใชจะท าค าสง RTI ไมได และแกไขเรจสเตอรบางตวเชน Processor

Status Register (PSR) ไมได

โดยปกตเมอโปรแกรมผใชท างาน ซพยจะอยในโหมดผใชเมอเกดการขดจงหวะจะเปลยนเปนโหมดก ากบดแล

เพออาน/เขยนเรจสเตอรของอปกรณทท าใหเกดสญญาณขดจงหวะ เรจสเตอรพวกนจะไมสามารถอานเขยนใน

โหมดผใชได ลองนกถงระบบทมโปรแกรมผใชอยหลายๆ โปรแกรม แลวถาโปรแกรมผใชตองการใชอปกรณ

อยางหนง เชน เครองพมพ กจะเกดการแยงกนใชงาน ดงนนกตองใหระบบปฏบตการซงเปนคนกลางคอย

จดล าดบการใชงานให เรองนจะไปเรยนตอในวชา 2301371 ระบบปฏบตการ

การเปดทาง (enable) ใหคยบอรดท างานแบบขดจงหวะท าไดโดยเซตบตท 14 ของ KBSR ใหเปน “1” ดงแสดง

ในรปท 12.5

รปท 12.5 Interrupt Enable (IE)

ระบบปฏบตการของแอลซทรแบงการใชหนวยความจ าดงรปท 12.6 สามสวนแรกเปนตารางเวกเตอร (vector

table) ส าหรบ กบดก (trap), ความผดปรกต (exception), และการขดจงหวะ (interrupt) ในโปรแกรม LC3

simulator มการขดจงหวะเฉพาะคยบอรดเทานน โดยม interrupt vector อยท x0180 สวนความผดปรกต

(exception) ในแอลซทรมสองตว ซงจะสรางสญญาณขดจงหวะขน เมอเกดเหตการณตอไปน

Privilege mode violation เชน เมอท าค าสง RTI ในโหมดผใช

Illegal opcode เชน opcode = 1101 (ไมมรหสด าเนนการนในแอลซทร)

โดยม interrupt vector อยท x0100 และ x0101 ตามล าดบ (ความผดปรกตหรอ exception กเปนการขดจงหวะ

ประเภทหนง ท างานเหมอนการขดจงหวะ) หนวยความจ าสวนถดมาจะเปนของระบบปฏบตการ โปรแกรมผใช

และสดทายเปน memory-mapped I/O ส าหรบแมพ (map) ไปยงเรจสเตอรของอปกรณตางๆ

Page 156: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 143

รปท 12.6 การแบงใชหนวยความจ าของแอลซทร

ตวอยางโปรแกรมตอไปนจะใชการขดจงหวะเพอแสดงตวอกขระทปอนทางคยบอรดใหน ามาแสดงทจอภาพ USP

หมายถง user stack pointer (หรอ TOS ของ user stack)

.ORIG x3000

LD R6, USP

LEA R0, INTR

STI R0, VECT

LD R0, ENAB

STI R0, KBSR

WAIT BRnzp WAIT

HALT

INTR LDI R0, KBDR

TRAP x21

RTI

VECT .FILL x0180

ENAB .FILL x4000

KBSR .FILL xFE00

KBDR .FILL xFE02

USP .FILL xFE00

.END

Page 157: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 144

เวลา “step over” โปรแกรมนใน LC3 simulator มนจะไมเขาไปท างานใน interrupt service routine ตองใชวธ

สงเกตคาในเรจสเตอร R0 ทจะเปลยนไปตามตวอกขระทเราปอนทางคยบอรด

เรจสเตอรสถานะของโพรเซสเซอร (Processor Status Register)

เรจสเตอรอกตวหนงในแอลซทรทไมไดกลาวถงตงแตแรกคอ processor status register (PSR) แสดงในรปท

12.7

รปท 12.7 Processor Status Register (PSR)

เราจะใชแคบางบตของเรจสเตอรเทานน

บตท 15 ถาเปน 0 คอ โหมดก ากบดแล (supervisor mode), 1 คอ โหมดผใช (user mode)

บตท 10, 9, 8 คอ ล าดบความส าคญ (priority) ของโปรแกรม

อปกรณ (device) ทล าดบความส าคญสงกวาจะสามารถขดจงหวะโปรแกรมทล าดบ

ความส าคญต ากวาได เชน คยบอรด ม PL = 4 เปนตน (max = 7, min = 0)

บตท 2, 1, 0 คอ รหสเงอนไข (condition code) ตามทสอนไปแลว

ล าดบความส าคญของการขดจงหวะ (Interrupt Priority)

ในกรณทมอปกรณหลายชนสรางสญญาณขดจงหวะข นมาพรอมๆ กน จะตองมวงจรทใชเลอกอปกรณทมล าดบ

ความส าคญสงสด และตองมล าดบความส าคญสงกวาโปรแกรมปจจบนดวย ถงจะขดจงหวะได ดงรปท 12.8

รปท 12.8 ฮารดแวรส าหรบเลอกอปกรณทมล าดบความส าคญสงสด

Page 158: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 145

เมอเกดการขดจงหวะแลวระบบปฏบตการจะตองท าอะไรบาง

ตอไปนเปนหนาทของระบบปฏบตการทจะตองท าเมอโพรเซสเซอรไดรบสญญาณขดจงหวะ

เปลยนโหมดผใช (user mode) เปนโหมดก ากบดแล (supervisor mode)

PSR[15] = 0, PSR[10:8] = PL ของอปกรณทสรางสญญาณขดจงหวะ, PSR[2:0] = 000

บนทกคา user stack pointer และโหลดคา supervisor stack pointer โดยท าดงน

(Saved.USP และ Saved.SSP เปนเรจสเตอรพเศษทใชเพองานนโดยเฉพาะ)

o Saved.USP = R[6] // R[6] เกบ stack pointer เสมอ

o R[6] = Saved.SSP

แตถาเปนการขดจงหวะซอนการขดจงหวะกไมตองท าขนตอนน เพราะ R6 จะเปน Saved.SSP อยแลว

บนทก (push) คา PC และ PSR ลง supervisor stack

บนทกคาเรจสเตอร เชน R0, R1, … โดยเกบไวใน supervisor stack (ถา callee จะใชเรจสเตอร)

เซต PC ใหมคาเทากบ interrupt vector

เรมท า interrupt service routine

interrupt service routine จะจบดวยค าสง RTI ซงมการท างานดงน

pop คาเรจสเตอร R0, R1, … ทบนทกไว (ถาม)

pop คา PSR และ PC ออกมาจาก supervisor stack

ถาเปนโหมดผใช (ด PSR ท pop ออกมา) ใหบนทกคา supervisor stack pointer

และโหลด user stack pointer โดยท าดงน

o Save.SSP = R[6]

o R[6] = Saved.USP

แตถาเปนการขดจงหวะซอนการขดจงหวะจะยงอยในโหมดก ากบดแลกไมตองท าอะไร

เซต PC ใหเทากบคา PC ท pop ออกมาจาก supervisor stack

กลบไปท างานตอใน caller จากจดทถกขดจงหวะ

หมายเหต - ค าสง RTI ท างานไดใน supervisor mode เทานน

- ในขณะทท า interrupt service routine หนงอย (ยงไมเสรจ) กอาจจะโดนขดจงหวะซอนได

เอกสารประกอบ (ส าหรบอานเพมเตม)

อานเพมเตมเกยวกบแอลซทรโพรเซสเซอรไดจากหนงสอเลมน

Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003.

ใหนสตอานเรอง synchronous และ asynchronous I/O จากหนงสอของ Patt และ Patel

Page 159: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 146

แบบฝกหด

1. จงตอบค าถามตอไปน

ก. device register คออะไร

ข. device data register คออะไร

ค. device status register คออะไร

2. ท าไม ready bit ถงไมจ าเปน ถาใช synchronous I/O

3. อปกรณตอไปนท างานแบบประสานเวลา (synchronous) หรอไมประสานเวลา (asynchronous)

ก. รโมตและโทรทศน

ข. บรษไปรษณย ตจดหมาย (mailbox) และผรบจดหมาย

ค. เมาสและคอมพวเตอร

4. ถาโปรแกรมไมเชค ready bit ของ KBSR กอนอาน KBDR จะเกดปญหาอยางไร (จะเกดความเสยหายใน

รปแบบไหน ลกษณะใด) แลวถาโปรแกรมไมเชค KBSR กอนเขยน KBDR จะเกดปญหาอยางไร

5. ถาโปรแกรมไมเชค DSR กอนเขยน DDR จะเกดปญหาอยางไร

6. การจดการกบอปกรณอนพตเอาตพตแบบ polling กบ interrupt-driven I/O อยางใดมประสทธภาพมากกวา

กน เพราะเหตใด

7. Synchronous I/O ตางจาก Asynchronous I/O อยางไร

8. โปรแกรมตอไปนท าอะไร .ORIG x3000

LD R3, A

STI R3, KBSR

AGAIN LD R0, B

TRAP x21

BRnzp AGAIN

A .FILL x4000

B .FILL x0032

KBSR .FILL xFE00

.END

9. รทน (routine) ตอไปนจะถกเรยกเมอเกดการขดจงหวะ (interrupt) จากการกดคยบอรด รทนนท าอะไร

.ORIG x1000

LDI R0, KBDR

TRAP x21

TRAP x21

RTI

KBDR .FILL xFE02

.END

10.โปรแกรมตอไปนท าอะไร

.ORIG x3000

LD R0, ASCII

LD R1, NEG

AGAIN LDI R2, DSR

BRzp AGAIN

STI R0, DDR

ADD R0, R0, #1

ADD R2, R0, R1

BRnp AGAIN

HALT

ASCII .FILL x0041

NEG .FILL xFFB6 ; -x004A

DSR .FILL xFE04

DDR .FILL xFE06

.END

Page 160: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 147

11. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร และการเขยนโปรแกรมมขอผดพลาดอะไรบาง .ORIG x3000 BEGIN LD R0, KBDR ST R0, DDR BRnzp BEGIN KBDR .FILL xFE02 DDR .FILL xFE06

.END

12. จากโปรแกรมทใหจงตอบค าถามตอไปน

.ORIG x3000 LD R6, SSP LEA R0, INTR STI R0, VECT LD R0, ENAB STI R0, KBSR WAIT BRnzp WAIT HALT INTR LDI R0, KBDR TRAP x21 RTI VECT .FILL x0180 ENAB .FILL x4000 KBSR .FILL xFE00 KBDR .FILL xFE02 SSP .FILL x3000

.END

ก. โปรแกรมนจะเขาสโหมดก ากบดแล (supervisor mode)

เมอเกดเหตการณใด

ข. โปรแกรมนจะออกจากโหมดผใช (user mode)

เมอท าค าสงใด

ค. ค าสง STI R0, KBSR ท าเพออะไร

ง. เมอเกดการขดจงหวะ (interrupt) จะตองบนทก

เรจสเตอรตวใดบางลง supervisor stack

13. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร .ORIG x3000 LDI R1, KB LDI R2, DP STI R1, DP STI R2, KB HALT KB .FILL x23 DP .FILL x21

.END

Page 161: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 148

14. จากโปรแกรมทให จงตอบค าถามตอไปน

.ORIG x3000 LD R6, TOS LD R0, ZERO ADD R6, R6, #-1 STR R0, R6, #0 ADD R6, R6, #-1 STR R0, R6, #0 ADD R6, R6, #-1 STR R0, R6, #0 ADD R6, R6, #-1 STR R0, R6, #0 ADD R5, R6, #0 LD R0, N ADD R6, R6, #-1 STR R0, R6, #0 JSR SUM LDR R0, R6, #0 STR R0, R5, #0 ADD R6, R6, #2 HALT SUM ADD R6, R6, #-1 ADD R6, R6, #-1 STR R7, R6, #0 ADD R6, R6, #-1 STR R5, R6, #0 ADD R5, R6, #-1 ADD R6, R6, #-1 LDR R0, R5, #4 BRz NEXT1 BRp POS BRn NEG POS LD R1, ZERO BR CONT NEG LD R1, ONE CONT STR R1, R5, #4 ADD R0, R0, R0 ADD R6, R6, #-1 STR R0, R6, #0 JSR SUM LDR R0, R6, #0 ADD R6, R6, #2 LDR R1, R5, #4 ADD R0, R1, R0 BR NEXT2 NEXT1 LD R0, ZERO NEXT2 STR R0, R5, #3 LDR R7, R5, #2 LDR R5, R5, #1 ADD R6, R6, #3 RET TOS .FILL xFE00 ZERO .FILL x0000 ONE .FILL x0001 N .FILL x000A .END

Note: R5 คอ frame pointer (ชท local var ตวแรก)

R6 คอ top of stack

R7 คอ return address

ค าถาม

ก. ฟงกชน SUM รบอารกวเมนตกตว ข. โปรแกรมนท าอะไร

ค. เมอโปรแกรม HALT, R0 จะมคาเปนเทาใด

Page 162: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 149

15. จงเตมโปรแกรม sum(n) ตอไปนใหสมบรณ

sum(0) = 0, sum(n) = n + sum(n – 1)

เชน sum(5) = 5 + 4 + 3 + 2 + 1 + 0 = 15 .ORIG x3000

LD R6, TOS

AND R0, R0, #0

ADD R6, R6, #-1

STR R0, R6, #0 ; push 0 (return value)

ADD R6, R6, #-1

STR R0, R6, #0 ; push 0 (return address)

ADD R6, R6, #-1

STR R0, R6, #0 ; push 0 (frame pointer)

ADD R5, R6, #0 ; R5 = R6, set frame pointer

ADD R6, R6, #-1 ; local variable (x)

; main program

ADD R0, R0, #5 ; n = 5

ADD R6, R6, #-1

STR R0, R6, #0 ; push argument (n)

JSR SUM

LDR R0, R6, #0

STR R0, R5, #-1 ; x = R0

ADD R6, R6, #2 ; pop 2 items, destroy callee's stack frame

HALT

SUM ADD R6, R6, #-2

STR R7, R6, #0 ; push R7 (save return address)

ADD R6, R6, #-1

STR R5, R6, #0 ; push R5 (save frame pointer)

ADD R5, R6, #0 ; R5 = R6 (move to the new frame)

LDR R1, R5, #3 ; R1 = current argument (n)

BRz NEXT

ADD R1, R1, #-1

ADD R6, R6, #-1

STR R1, R6, #0 ; push the next argument (n - 1)

....................

LDR R1, ......... ; load n

LDR R2, ......... ; load sum(n - 1)

ADD R3, R1, R2 ; R3 = n + sum(n - 1)

STR R3, R5, #2 ; save return value

.................... ; R6 -> return value

LDR R7, R5, #1 ; restore R7 (if R7 has been overwritten)

LDR R5, R5, #0 ; R5 -> caller's stack frame

RET

NEXT STR R1, R5, #2 ; save return value (0)

ADD R6, R6, #2 ; R6 -> return value

LDR R7, R5, #1 ; restore R7 (if R7 has been overwritten)

LDR R5, R5, #0 ; R5 -> caller's stack frame

RET

TOS .FILL 0xFE00 .END

main() {

x = sum(5)

}

sum(n) { // n >= 0 เสมอ if (n == 0) {

return 0

} else {

return n + sum(n – 1)

}

}

Page 163: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 150

16. จงตอบค าถามตอไปน

ก. โปรแกรมรบ character จากคยบอรดและพมพ

ออกทจอภาพ โปรแกรมนผดตรงไหน

.ORIG x3000

LOOP1 LDI R1, KBSR

BRzp LOOP1

LDI R0, KBDR

LOOP2 LDI R1, DSR

BRzp LOOP2

ST R0, DDR

HALT

KBSR .FILL xFE00

KBDR .FILL xFE02

DSR .FILL xFE04

DDR .FILL xFE06

.END

ข. โปรแกรมนท าอะไร

.ORIG x3000

LD R0, ASCII

LD R1, NEG

AGAIN LDI R2, DSR

BRzp AGAIN

STI R0, DDR

ADD R0, R0, #1

ADD R2, R0, R1

BRnp AGAIN

HALT

ASCII .FILL x0041 ; letter A

NEG .FILL xFFB6 ; -x004A

DSR .FILL xFE04

DDR .FILL xFE06

.END

ค. จงเตมโปรแกรมเชค valid ASCII ใหสมบรณ รหส

ASCII จะมคาระหวาง 0 – 255 เทานน (x00 – xFF)

ถา ASCII valid, RESULT = 1 ถาไม RESULT = 0

(2 คะแนน)

.ORIG x3000

AND R0, R0, #0

LD R1, ASCII

LD R2, MASK

AND R3, R1, R2

...............

ADD R0, R0, #1

NEXT ST R0, RESULT

HALT

ASCII .BLKW 1

MASK .FILL ......

RESULT .BLKW 1

.END

ง. นสตคนหนงเขยนโปรแกรมเพอพมพ character ออก

ไปทางจอภาพทละตว ผลปรากฎวา character บางตว

ไมแสดงบนจอภาพ ปญหาน นาจะเกดจากอะไร

จ. จงเตมโปรแกรมตอไปน ใหสมบรณ โปรแกรมรบ character จากคยบอรดโดยใช interrupt และพมพออกทางจอภาพ

.ORIG x3000

LD R6, USP

......................

......................

......................

......................

WAIT BRnzp WAIT

HALT

VECT LDI R0, KBDR

TRAP x21

RTI

INTR .FILL x0180

ENAB .FILL x4000

KBSR .FILL xFE00

KBDR .FILL xFE02

USP .FILL xFE00

.END

Page 164: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 151

รายการอางอง

[1] Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003.

Page 165: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 152

บทท 13 สถาปตยกรรมไมโครโพรเซสเซอร

วตถประสงคของการเรยนในบทน

อธบายสถาปตยกรรมของไมโครโพรเซสเซอรตอไปนได

o การท างานแบบสายทอ (pipeline)

o Superscalar

o Very Long Instruction Word (VLIW)

o Multithreading

o Multi-core

ในบททผานๆ มาเราไดเหนแลววาไมโครโพรเซสเซอรท างานไดอยางไร แตวายงมสถาปตยกรรมการออกแบบอก

หลายๆ อยางทท าใหไมโครโพรเซสเซอรท างานไดเรวย งข น และสถาปตยกรรมเหลานกมอยใน ไมโคร

โพรเซสเซอรทวางขายอยทวไปในทองตลาด ดงนนเราควรจะศกษาใหเขาใจวาสถาปตยกรรมเหลานมหลกการ

ท างานอยางไร และมผลกระทบตอสมรรถนะของไมโครโพรเซสเซอรอยางไร เพอทวาเราจะเลอกใชไมโครไปรเซส

เซอรไดถกตองและเหมาะสมกบงาน

การท างานแบบสายทอ (Pipeline)

เพอใหเขาใจวาการท างานแบบสายทอท าใหงานเรวขนไดอยางไร ลองคดตามตวอยางตอไปน สมมตวาธรกจราน

ซกรดมขนตอนยอยๆ 3 ขนคอ

Wash คอการซกดวยเครองซกผา

Dry คอการท าใหผาแหงดวยเครองอบผา

Iron คอการรดผาดวยเตารด

สมมตวาแตละขนตอนใชเวลาเทากนคอ 1 หนวย ถาใชคนหนงคนท างานตงแตขนแรกถงขนสดทายทละขน

ตามล าดบจะใชเวลา 3 หนวยตอผา 1 ถง และสงเกตวาในขณะใดขณะหนงจะใชฮารดแวรแค 1/3 เทานน ทเหลอ

2/3 อยวางๆ ไมไดท าอะไร

ลองแบงงานแบบแรก ใชคน 3 คน แตละคนแยกกนรบผดชอบแตละขนตอนคนทหนงท าหนาทซก คนทสองท า

หนาทอบ คนทสามท าหนาทรด กจะใชเวลาเพยง 1 หนวยตอผา 1 ถง เพราะทกคนท างานตลอดเวลา และมผาท

ยงไมไดซกเขามาเรอยๆ จะเหนวาถาสามารถแบงงานไดเปน 3 สวน แลวแยกกนท าแตละสวนได กจะท างานได

เรวขนถง 3 เทา และฮารดแวรทงหมดถกใชอยตลอดเวลา

ลองแบงงานแบบทสอง แตละคนจะไดผาคนละตะกรา ทกคนตองท าทกขนตอนคอ ซก อบ รด เอง ถาท าเสรจก

มาเอาใหม แบบนกจะใชเวลา 3 หนวยตอผา 3 ถง หรอโดยเฉลยกคอใชเวลา 1 หนวยตอผา 1 ถงเหมอนการแบง

งานแบบแรก ท าใหไดปรมาณงาน (throughput) เทาเดม แตจะแบงงานแบบนไดตองมเครองซกผา เครองอบผา

และเตารด อยางละ 3 ชด ซงสนเปลองฮารดแวรมากกวา

Page 166: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 153

ทนลองอปมาวา

ผา 1 ถง คอ ค าสง (instruction) ทตองท า (execute) ใหเสรจ

การซกอบรด คอ การแบงงานหรอแบงการท างานของ 1 ค าสงใหเปน 3 สวนหรออาจจะแบงไดมากกวานน

จ านวนเครองซกผา เครองอบผา เตารด คอ จ านวนหนวยประมวลผลหรอฮารดแวรทม

จ านวนคนทท างาน อาจจะเปรยบไดกบหนวยควบคม (control unit) วามความซบซอนมากแคไหน

การแบงงานแบบแรกเรยกวา “task parallelism” หรอการท างานแบบสายทอ (pipeline) คอแบงงาน 1 หนวย

(ผา 1 ถง) ออกเปนขนตอนยอยๆ คอ ซก อบ รด การแบงงานแบบทสองเรยกวา “data parallelism” เหมาะ

ส าหรบกรณทมงานซ าๆ กนเขามาเยอะๆ เชน ผาหลายรอยหลายพนถง ถงใช task parallelism ชวยกยงตองใช

เวลาเปนวนๆ งานถงจะเสรจ กตองใช data parallelism ชวยดวยถงจะท าใหงานเสรจเรวขน

ลองดการเปรยบเทยบการท างานแบบตางๆ รปท 13.1 - 13.4

รปท 13.1 การซกอบรดแบบไมใช task parallelism และ data parallelism

รปท 13.2 การซกอบรดแบบใช task parallelism

Page 167: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 154

รปท 13.3 การซกอบรดแบบใช data parallelism

รปท 13.4 การซกอบรดแบบใชทง task parallelism และ data parallelism

ส าหรบการเรยนในระดบปรญญาตร การแบงค าสง (instruction) ออกเปนสวนๆ เพอท า task parallelism ดจะ

ยากเกนไป และจ าเปนตองออกแบบชดค าสง (instruction set) ใหมทงหมด เพราะใชชดค าสงของสแตกซพยหรอ

แอลซทรไมได ผมขอใชตวอยางการค านวณนพจนแทน เชน สมมตวาเราตองค านวณนพจน ((A + B) x (C +

D)) ÷ E เยอะมากๆ เรากเลยสรางฮารดแวรดงรปท 13.5 เมอท างานแบบสายทอกแบงเปน 3 ระยะ (stage)

ระยะท 1 ท า (A + B) และ (C + D)

ระยะท 2 ท า x (คณ)

Page 168: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 155

ระยะท 3 ท า ÷ (หาร)

เมอท าการค านวณแบบสายทอจะตองใสบฟเฟอร (buffer) หรอหนวยความจ าเขาไป เพอคนระหวางระยะ

(stage) ตางๆ ขอมล A, B, C, D, E จะเขามาใหมทกๆ รอบสญญาณนาฬกา (clock cycle) ในแตละรอบขอมล

จากระยะ (stage) หนง กจะไหลไปยงอกระยะ (stage) หนง โดยเกบขอมลไวในบฟเฟอร การออกแบบหนวย

ควบคมกจะซบซอนตามไปดวย เพราะตองควบคมใหทกมอดลท างานสอดประสานกนอยางลงตว สมมตใหคา

ความหนวง (delay) ของแตละมอดลเทากบ 1 หนวย การค านวณนพจนในรปท 13.5 จะใชเวลา 3 หนวย และ

ไดปรมาณงาน (throughput) เทากบ 1/3 ตอหนงหนวยเวลา แตเมอใชการท างานแบบสายทอดงรปท 13.6 จะ

ท าใหไดปรมาณงานเทากบ 1 ตอหนงหนวยเวลา ดขนสามเทา

รปท 13.5 ฮารดแวรส าหรบการค านวณนพจน ((A + B) x (C + D)) / E

รปท 13.6 ฮารดแวรส าหรบการค านวณนพจน ((A + B) x (C + D)) / E แบบสายทอ

Page 169: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 156

โปรเซสเซอรทมสถาปตยกรรมแบบ MIPS (Microprocessor without Interlocked Pipeline Stages) จะแบงการ

ท า 1 ค าสงออกเปน 5 ระยะคอ

1. IF (instruction fetch) เปนการน า (fetch) ค าสง (instruction ประกอบดวย opcode และ operand)

ขนมาจากหนวยความจ า โดยปกตจะน าไปเกบไวในเรจสเตอรทอยในโพรเซสเซอร เพอทโพรเซสเซอรจะ

ไดร วาตองท าค าสงอะไร

2. ID (instruction decode) หลงจากทโพรเซสเซอรรวาตองท าค าสงอะไรแลว เชน ค าสงคอ R0 = R1+

R2 กตองถอดรหส (decode) ออกมาวาตองใชตวถกด าเนนการ (operand) ทอยในเรจสเตอรเบอร 1

และเบอร 2 ในขนนจะสงสญญาณทมคา 1 และ 2 ไปใหมอดลเรจสเตอรเพอใหไดคาทอยในเรจสเตอร

เบอร 1 และเบอร 2 ตามล าดบ

3. EX (execute) จะท าตวด าเนนการ (operator) ตามทระบไวใน opcode เชน add คอเอาตวถกด าเนนการ

(operand) ทงสองตวทเตรยมไวแลวในระยะ ID มาบวกกน

4. MEM (memory) ในระยะนจะท าเฉพาะค าสงทมการอาน/เขยนหนวยความจ า เชน load/store เปนตน

ค าสงอนๆ จะผานระยะน ไปเฉยๆ

5. WB (write back) ในขนน จะเขยนผลลพธลงเรจสเตอร เชน เขยน R1 + R2 ลง R0

ผมขอไมกลาวลกไปกวาน เพราะเนอหาสวนน เกนขอบเขตของวชาบงคบในระดบปรญญาตรไปมาก และเวลาสอน

มจ ากด นสตทสนใจสามารถอานเพมเตมไดจากรายการเอกสารทใหไวในทายบท หรอไปเรยนตอในวชาเลอกทม

เนอหาเกยวกบสถาปตยกรรมคอมพวเตอร (Computer Architecture)

Superscalar

สถาปตยกรรมแบบ superscalar กคอ การท างานแบบสายทอ หรอ task parallelism ทเพม data parallelism เขา

ไปดวย คอท า (execute) หลายๆ ค าสงไดพรอมกน ดรปท 13.7 แตกตองมฮารดแวรหลายชด ความยากของ

superscalar อยทฮารดแวรทท าหนาทเรยงค าสงใหม เพอเพม data parallelism ลองดตวอยางตอไปน

ค าสงท 1: R3 = R1 + R2

ค าสงท 2: R4 = R3 / 2

ค าสงท 3: R5 = R5 + 1

ค าสงท 4: R6 = R6 – 1

จะเหนวาค าสงท 2 ท าพรอมค าสงท 1 ไมได เพราะตองรอใชคา R3 จากค าสงท 1 เรยกวาม data dependency

แตเราสามารถเรยงค าสงใหมเพอก าจด data dependency ได เชน

ค าสงท 1: R3 = R1 + R2

ค าสงท 2: R5 = R5 + 1

ค าสงท 3: R4 = R3 / 2

ค าสงท 4: R6 = R6 – 1

จากนนกท าค าสงท 1 และ 2 พรอมกน (สมมตวามฮารดแวรสองชด) แลวคอยท าค าสงท 3 และ 4 พรอมกน ไม

โครโพรเซสเซอรแบบ superscalar จะมฮารดแวรทท าหนาทเรยงค าสงทเขามาใหม โดยรบประกนวาจะไดผลลพธ

ถกตองเหมอนเดม และก าจด data dependency ไปดวย

Page 170: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 157

รปท 13.7 เปรยบเทยบไมโครโพรเซสเซอรทม pipeline (บน) และ superscalar (ลาง)

ตวอยางของไมโครโพรเซสเซอรแบบ superscalar ในทองตลาด เชน Pentium ของ Intel เปนตน สาเหตทตองใช

ฮารดแวรในการเรยงชดค าสงเพราะวา executable code เกาๆ ถกคอมไพลมาส าหรบรนบนโปรเซสเซอรธรรมดา

ทไมม superscalar ถาไมมตวเรยงค าสงใหใหมกจะม data dependency เตมไปหมด ท าใหใชประโยชนจาก

superscalar ไดไมเตมท แตถาเปนคอมไพเลอรใหมๆ ทรจก superscalar คอมไพเลอรจะพยายามสราง

executable code ทม data dependency นอยๆ

Very Long Instruction Word (VLIW)

สถาปตยกรรมแบบ VLIW เกดขนเพอแกปญหาฮารดแวรทใชเรยงค าสงของ superscalar ซงออกแบบยากและ

ซบซอนมาก สาระส าคญของ VLIW คอแทนทจะใชฮารดแวรเพอคนหาค าสงทไมม dependency ตอกนมาท าไป

พรอมๆ กน กใชซอฟตแวรหรอคอมไพเลอรแทน เชน เมอเราเขยนโปรแกรมดวยภาษาซแลวคอมไพล

คอมไพเลอรจะหาค าสง (instruction) ทท าไปพรอมๆ กนได แลวเอามามดรวมกน ไมโครโพรเซสเซอรแบบ

VLIW จะมค าสงทยาวมาก (เชน 200 – 300 บต) เพราะสามารถท า (execute) หลายๆ ค าสงไปพรอมกนใน

ครงเดยว (ดรปท 13.8) แตไมโครโพรเซสเซอรแบบ VLIW จะไมเชควาค าสงทรบเขามาม data dependency

หรอไม เปนหนาทของโปรแกรมเมอรหรอคอมไพเลอรทจะตองเชคเอง ขอดคอท าใหฮารดแวรมขนาดเลก ใช

จ านวนทรานซสเตอรนอย และลด data dependency ไดมากกวาแบบ superscalar เพราะการก าจด data

dependency ดวยฮารดแวรมขอจ ากดมากทงในแงจ านวนทรานซสเตอร ความยากในการออกแบบ และตองท าให

เสรจภายในเวลาทจ ากด ตางจาก VLIW ทใชซอฟตแวรและมเวลาไมจ ากด จะคอมไพลนานๆ กไมเปนไร

Page 171: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 158

อยางไรกตามขอจ ากดของสถาปตยกรรมแบบ VLIW คอคอมไพเลอรไมสามารถหาค าสง 5 ค าสงมาเตมใหเตม

instruction format ในรปท 13.8 ใหเตมไดทกครง เพราะอาจจะม data dependency ทเลยงไมได อนนขนอยกบ

ความสามารถของคอมไพเลอรดวยวาฉลาดแคไหน ขอจ ากดนท าใหบางครง VLIW อาจจะท างานไดไมเตม

สมรรถนะอยางทควรจะเปน ตวอยางของโปรเซสเซอรแบบ VLIW ในทองตลาด เชน Itanium ของ Intel เปนตน

Itanium จะรนไดเฉพาะโปรแกรมทคอมไพลมาส าหรบ VLIW เทานน ไมสามารถรนโปรแกรมหรอ executable

code ของ x86 ได ในเชงพาณชยจะเรยก VLIW วา EPIC ยอมาจาก Explicitly Parallel Instruction Computing

รปท 13.8 สถาปตยกรรมแบบ VLIW

Multithreading

การทจะเขาใจสถาปตยกรรมแบบ multithreading นสตตองเขาใจวาเทรด (thread) คออะไรกอน ซงเราจะไปเรยน

เรองเทรดอยางละเอยดในวชา 2301371 ระบบปฏบตการ ในวชาน ขออธบายแบบงายๆ ไปกอนวาเทรดกคอ

โปรแกรมนนเอง ระบบปฏบตการในปจจบนรองรบการท างานแบบ multitasking เชน นสตอาจจะใชโปรแกรม

พมพงานพรอมกบโปรแกรมเลนเพลงไปพรอมๆ กน สาเหตทท าเชนนไดเพราะไมโครโพรเซสเซอรสลบการ

ท างานไปมาระหวางสองโปรแกรมนเรวมาก เชน ท าโปรแกรมหนง 10 ms แลวสวตชไปท าอกโปรแกรมหนง 10

ms ท าใหดเหมอนวาทงสองโปรแกรมท างานไดพรอมๆ กน ในการสวตช (เรยกวา context switch จะไปเรยนใน

วชา 2301371 ระบบปฏบตการ) จะตองบนทกคาเรจสเตอรของโปรแกรมทท างานอยลงหนวยความจ า และ

โหลดคาเรจสเตอรของโปรแกรมทจะเขามาท างานตอ ปกตการสวตชจะท าโดยใชซอฟแวรซ งกคอตว

ระบบปฏบตการ แตสถาปตยกรรมแบบ multithreading ใชวธเพมฮารดแวรพเศษเขาไปส าหรบท าการสวตช ซงจะ

ท าใหสวตชไดเรวกวาการใชซอฟตแวรมาก สถาปตยกรรมแบบ multithreading ใชทรานซสเตอรเพมขนไมมาก

และท าใหสมรรถนะโดยรวมดขนประมาณ 30% ดรปท 13.7

Page 172: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 159

Multithreading จะหลอกใหระบบปฏบตการเหนจ านวนโปรเซสเซอรเพมขน ตวอยางเชน ม physical processor 1

ตว เปน multithreading ทรบไดทละ 2 เทรด ระบบปฏบตการจะมองเหนวามโปรเซสเซอร 2 ตว จ านวน

โปรเซสเซอรทระบบปฏบตการมองเหนเรยกวา logical processor ดรปท 13.10

รปท 13.9 เปรยบเทยบเวลาทใชท า context switch ดวยซอฟตแวรและฮารดแวร (multithreading)

รปท 13.10 จ านวน logical processor (core) บน Windows OS

(8 คอร แตละคอรเปน hyperthreading รบได 2 เทรด ท าใหม logical processor ทงหมด 8 x 2 = 16 ตว)

Multi-core

เนองจากความสามารถในการผลตไมโครโพรเซสเซอรทเพมขนอยางรวดเรว โดยเฉพาะจ านวนทรานซสเตอรตอ

ชพ (chip) ทเพมขนเรวมาก จนวศวกรทออกแบบไมรจะเอาทรานซสเตอรทเพมขนไปท าอะไร วธงายๆ ทจะใช

ทรานซสเตอรทมบนชพใหหมดคอ เพมจ านวนโปรเซสเซอรหรอจ านวนคอร (core) ซงแตละคอรกมลกษณะ

เหมอนกน เพยงกอปปใหเปนหลายๆ ชด สถาปตยกรรมแบบนเหมาะส าหรบสภาพการท างานแบบ multitasking

ในขณะหนงอาจจะมหลายโปรแกรมท างานไปพรอมๆ กน เชน โปรแกรมเวบเซรฟเวอร โปรแกรมฐานขอมล เปน

ตน แตละโปรแกรมกจะแยกไปท างานในแตละคอร ถามคอรเดยวแตละโปรแกรมกตองผลดกนใช ท าใหงานเสรจ

ชาลง

นอกจากน สถาปตยกรรมแบบ multi-core ยงเหมาะกบโปรแกรมทท างานแบบขนาน (parallel) ได เชน การบบ

อดขอมลไฟลขนาดใหญ เราอาจจะเขยนโปรแกรมเพอเชความกคอร สมมตวาม n คอรทวางอย เรากแบงไฟลเปน

n สวน (data parallelism) แลวรนโปรแกรมบบอดขอมลในแตละคอรไปพรอมๆ กน หรอการประมวลผลภาพ

Page 173: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 160

(image processing) ทมขนาดใหญและใชเวลานาน เรากตดแบงภาพเปนหลายๆ สวนได แตโปรแกรมทไมได

เขยนมาส าหรบการท างานบนสถาปตยกรรมแบบ multi-core จะใชเพยงคอรเดยวเสมอ ในปจจบน

ระบบปฏบตการไมสามารถแบงงานจากหนงโปรแกรมไปยงคอรตางๆ ไดโดยอตโนมต ดงนนถาตองการใช

ความสามารถของ multi-core กตองใชโปรเซสเซอรทม multi-core และตองใชโปรแกรมทเขยนมาเพอ multi-

core เทานน

รปท 13.11 แสดงใหเหนวา multithreading ท าใหระบบปฏบตถกหลอกวามโปรเซสเซอร 2 ตว (คอร) แตงาน

ไมไดเสรจเรวขนเปนสองเทา แตเรวขนเลกนอยเทานนจากฮารดแวรทท าหนาทสวตช ในขณะทโปรเซสเซอรทม 2

คอรจรงๆ ท าใหงานเสรจเรวเปน 2 เทาได

รปท 13.11 เปรยบเทยบ multithreading และ multi-core

สถาปตยกรรมแบบ multi-core มกจะใชรวมกบ multithreading แตละคอรอาจจะเปน multithreading ไดดวย

เชน โปรเซสเซอรทม 4 คอร แตละคอรรบได 2 เทรด ระบบปฏบตการจะมองเหนวาม logical processor ทงหมด

4 x 2 = 8 ตว (หรอ 8 คอร) โพรเซสเซอรทใชในปจจบนอาจจะผสมผสานระหวาง multithreading และ multi-

core เชน แตละคอรกเปน multithreading ดวย ท BIOS สามารถ enable/disable multithreading ได

การแพรความคลาดเคลอน(Error Diffusion)

ตวอยางหนงทจะท าใหนสตไดเหนประโยชนจากการประยกตใช multi-threading และ multi-core คอการแพร

ความคลาดเคลอน (error diffusion) สาเหตทตองท าการแพรความคลาดเคลอนเกดจากความตองการแปลงภาพ

grey scale เปนภาพแบบ black & white ดรปท 13.12 เนองจากเครองพมพในสมยกอนเปนแบบ dot matrix

คอใชเขมหมกจมลงไปบนกระดาษ ดงนนจะท าใหเกดจดไดเพยงสเดยวบนกระดาษคอ “สด า” ตางจากภาพแบบ

grey scale ทแสดงบนจอภาพมเฉดสตงแต 0 ถง 255 ไลจากสด าไปหาสขาว

รปท 13.12 รปลงบาบน แบบ gray scale (ซาย) black & white (ขวา)

Page 174: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 161

เนองจากแตละจดภาพ (pixel) ของอนพทมคาระหวาง 0 (ด า) ถง 255 (ขาว) วธทงายทสดคอปดใหเปน 0

หรอ 255 เชน

100 ปดใหเปน 0 (ด า) มคาผดพลาด (error) เทากบ 100 - 0 = +100

200 ปดใหเปน 255 (ขาว) มคาผดพลาด (error) เทากบ 200 – 255 = -55

แตถาใชวธปดเศษเชนนกบทกจดภาพ ผลลพธทออกมาจะไมสวย วธแกไขคอหลงจากปดเศษแลวตองแพรความ

คลาดเคลอนไปยงจดภาพขางๆ ดวยดงน

การปดเศษใหท าจากบนลงลาง ซายไปขวา เมอปดเศษแลวจะเกดคาผดพลาดขน ใหกระจายคาผดพลาดนนไปยง

จดภาพขางๆ โดยแบงคาผดพลาดเปน 4 สวนคอ 3/16, 5/16, 1/16, 7/16 แลวบวกเพมเขาไปกบจดภาพ

ขางๆ เขยนเปนโปรแกรมไดดงน

for (i = 0; i < HEIGHT; i++) {

for (j = 0; j < WIDTH; j++) { OutputImage[i][j] = (InputImage[i][j] < 128 ? 0 : 1);

err = InputImage[i][j] - (255 * OutputImage[i][j]);

InputImage[i][j+1] += (err * 7) / 16;

InputImage[i+1][j-1] += (err * 3) / 16;

InputImage[i+1][j] += (err * 5) / 16;

InputImage[i+1][j+1] += (err * 1) / 16;

}

}

ถาเขยนโปรแกรมงายๆ แบบน โปรแกรมกจะใชคอรเพยงคอรเดยว แตถาอยากใชหลายๆ คอรมาชวยกนใหงาน

เสรจเรวขนกตองสรางเทรดขนมาเยอะๆ ดรปท 13.13

Page 175: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 162

รปท 13.13 การใช thread เพอชวยประมวลผลการแพรความคลาดเคลอน

แตละเทรดจะแยกไปท างานบนแตละคอร (ในทางปฏบตเราจะไมสรางเทรดมาเกนจ านวนคอรทม) Thread 1 จะ

เรมท างานกอน หลงจาก Thread 1 ท างานไปสกพก คอยสงให Thread 2, 3, 4, ... เรมท างานตามล าดบ สาเหต

ท Thread i ตองรอ Thread i – 1 เนองจาก Thread i ตองรอคาผดพลาดทจะกระจายมากจาก Thread i – 1 สง

ส าคญทตองระมดระวงเปนพเศษคอ ตองไมให Thread i วงแซง Thread i – 1 (ปญหานเรยกวา data

dependency เหมอนกบปญหาทเกดขนใน superscalar) รปท 13.14 แสดงผลการรนจบเวลาบนซพยทม 2 คอร

รปท 13.14 เปรยบเวลาทใชประมวลผลการแพรความคลาดเคลอน

(Intel CoreTM2 CPU T5500 1.66 GHz, รปขนาด 10,000 x 10,000 จดภาพ)

Page 176: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 163

เอกสารประกอบ (ส าหรบอานเพมเตม)

นกเรยนทสนใจเรองสถาปตยกรรมของไมโครโพรเซสเซอรสามารถอานเพมเตมไดจากหนงสอตอไปน เลมแรก

เนอหาจะสนกระชบและงายกวา เลมทสองเขยนโดยผแตงคนเดยวกน แตมรายละเอยดและเนอหาเชงลกมากกวา

John L. Hennessy and David A. Patterson, Computer Organization and Design: The

Hardware/Software Interface, Morgan Kaufmann; 4 edition, 2011.

John L. Hennessy and David A. Patterson, Computer Architecture: A Quantitative Approach,

Morgan Kaufmann; 5 edition, 2011.

ผมและนสตปรญญาโท (G. Delgado) พบวาการโปรแกรมพลวต (dynamic programming) นนสามารถ

ประยกตใชกบสถาปตยกรรมแบบ multithreading และ multi-core ไดเปนอยางด เราไดเสนอวธแบงขอมลแบบ

ใหมซงท าให data dependency ลดลง และท าใหประมวลผลแบบ multithreading ไดเรวขน

G. Delgado, C. Aporntewan, Data Dependency Reduction in Dynamic Programming Matrix, Eight

International Joint Conference on Computer Science and Software Engineering (JCSSE), May 11-

13, 2011, Nakhon Pathom, Thailand.

นสตจะไดเรยนเรองการโปรแกรมพลวตในรายวชา 2301365 การออกแบบและวเคราะหขนตอนวธ (Algorithm

Designs and Analysis)

แบบฝกหด

1. การใชหนวยวด เชน million instructions per second หรอวดจ านวนค าสงท execute ไดภายในเวลา 1 วนาท

หนวยวดนเหมาะสมทจะน ามาเปรยบเทยบสมรรถนะของไมโครโพรเซสเซอรทมชดค าสงไมเหมอนกนหรอไม

เชน เปรยบเทยบสมรรถนะของ Stack CPU และ LC3

2. ไมโครโพรเซสเซอรทท างานไดทความถสงกวา (GHz) จะท าใหโปรแกรมรนเสรจเรวกวาเสมอ จรงหรอไม

เพราะเหตใด ลองยกตวอยางประกอบ

3. SPEC (Standard Performance Evaluation Corporation), SPECint, SPECfp คออะไร

4. ชดค าสง x86, Microprocessor without Interlocked Pipeline Stages (MIPS), และ Reduced Instruction

Set Computing (RISC) คออะไร ใหนสตคนควาอานเพมเตมดวย

รายการอางอง

[1] John L. Hennessy and David A. Patterson, Computer Organization and Design: The

Hardware/Software Interface, Morgan Kaufmann, 4th edition, 2011.

[2] John L. Hennessy and David A. Patterson, Computer Architecture: A Quantitative Approach, Morgan

Kaufmann, 5th edition, 2011.

[3] Shameem Ahkter and Jason Roberts, Multi-Core Programming Increasing Performance through

Software, Intel Corporation, 1st edition, 2006.

Page 177: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 164

บทท 14 โครงงานเครองคดเลข

วตถประสงคของการเรยนในบทน

• ออกแบบเครองคดเลขดวยโปรแกรม LogicWorks

• ออกแบบวงจรดจทลโดยแยกเปนมอดล (module) และใชหนวยควบคม (control unit) เพอควบคมการทางาน

ของแตละมอดล

ผมคดโครงงานเครองคดเลขข นมา เพอใหนกเรยนไดนาเนอหาภาคทฤษฎมาทดลองปฏบต เพอใหเกดความ

เขาใจมากขน ในการออกแบบเครองคดเลขจะบงคบใหตองแยกเปนมอดล และใชหนวยควบคมเพอควบคมการ

ทางานของแตละมอดล ซงมลกษณะคลายกบการทางานของไมโครโพรเซสเซอร

คณสมบตของเครองคดเลข

คณสมบตพนฐานของเครองคดเลข

• เกบจานวนทศนยมขนาด 32 บต ใหออกแบบเองวาจะเกบขอมลยงไง จะใช fixed point, IEEE

754 หรอจะออกแบบเองกได

• บวก/ลบ/คณ/หาร ได

• มคยบอรดใหปอนอนพตทงตวดาเนนการ (operator) และตวถกดาเนนการ (operand) เปน

เลขฐานสบ

• ปอนตวถกดาเนนการทเปนคาลบไดดวย เชน 2 × -3 หรอ -2 × 3 เปนตน ตองแยกปมลบท

เปนตวดาเนนการชนดเอกภาค (unary) ออกมาจากปมลบทเปนตวดาเนนการชนดทวภาค

(binary)

• มหนาจอแสดงผลเปนเลขฐานสบ

• มหนาจอเชงโตตอบ (interactive) กบผใชตลอดเวลา โดยแสดงตวถกดาเนนการและตว

ดาเนนการทผใชปอน และแสดงผลลพธลาสดเสมอ

• ทาแฟกทอเรยล (factorial) ได หามสรางวงจรเพอทาการคานวณแฟกทอเรยลตรงๆ ใหใชเพยง

วงจรบวก/ลบ/คณ/หาร เพอทาใหเกดแฟกทอเรยล ยกตวอยางเชน 5! = 5 x (5 - 1) x (5 -

2) x (5 - 3) x ( 5 - 4) ในการออกแบบทวๆ ไปจะมวงจรบวก/ลบ/คณ/หาร อยอยางละตว

เทานน แตเราจะใชวงจรเหลานนซาหลายๆ ครง เพอทาใหเกดแฟกทอเรยล ในการทจะทาอยาง

นนไดกตองมตวควบคมทเปนเครองจากดสถานะ (FSM)

• ใหออกแบบเครองคดเลขโดยแบงเปนมอดลยอยๆ และตวควบคม ตองมวถขอมล (data path)

ทชดเจน ดรปท 14.1 แตละมอดลใหออกแบบเปน schematic คอใชเกตพนฐานมาตอๆ กนเปน

วงจร หามใช VHDL เดดขาด ยกเวนหนวยควบคมทซบซอน จะทาแบบ schematic หรอ VHDL

กได

Page 178: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 165

รปท 14.1 วถขอมล (data path) ของเครองคดเลข

ขอคดในการออกแบบ

กอนลงมอทาควรคดใหรอบคอบกอน มฉะนนอาจจะเสยเวลาไปมากโข แลวตองกลบมาเรมใหม ลองพจารณา

ประเดนตอไป

• เลอกระบบตวเลขทจะใชกอน IEEE 754 จะไดคะแนนมากทสด แตอาจจะเสยเวลาทาวงจรบวก

ลบคณหารมาก นกเรยนอาจจะเลอกระบบตวเลขทงายกวา IEEE 754 เพอไมใหยากเกนไป

• เรมตนทาใหใชคยบอรดและหนาจอแสดงผลเปนเลขฐานสองไปกอนกได เพราะงายด อยาเพงไป

เสยเวลาทาเปนเลขฐานสบ เกบไวทาเปนขนตอนสดทาย

• ออกแบบวถขอมลกอน และตรวจสอบใหแนใจวา สามารถทาบวก/ลบ/คณ/หาร และแฟกทอ

เรยลได

• แบงงานเปนสวนๆ อยาใหลมเหลวทงหมด ถาทาคณ/หารไมไดกขอใหมบวก/ลบมาสง ถา

แสดงผลเปนเลขฐานสบไมได กใหแสดงเปนเลขฐานสอง

• ใชไอซ (IC) สาเรจรปทมใน LogicWorks เพอทนแรงได

Page 179: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 166

เกณฑการใหคะแนน

การใหคะแนนพจารณาจาก (เตม 100 คะแนน)

• ระบบตวเลขทใช

ο IEEE 754 20 คะแนน

ο แบบอนๆ จะไดคะแนนนอยกวา

• การรบอนพตเปนเลขฐานสบ 5 คะแนน

• การแสดงผลเปนเลขฐานสบ 5 คะแนน

• การทางานเชงโตตอบของหนาจอ 5 คะแนน

• ความถกตองของผลลพธ

ο บวก 5 คะแนน

ο ลบ 5 คะแนน

ο คณ 10 คะแนน

ο หาร 10 คะแนน

ο แฟกทอเรยล 20 คะแนน

• รายงาน 10 คะแนน

• การนาเสนอ 5 คะแนน

“การลอกผลงานของผอนไมวาจะเปนของเพอน ของรนพ หรอจากแหลงอนๆ มาสงมความผด และจะถกหก

คะแนนตามวนจฉยของอาจารย การชวยเหลอกนและพดคยกนนนเปนเรองด แตอยาใหเพอนลอก โดยปกตแลว

งานออกแบบจะซากนยากมาก แคเฉยดๆ ยงยากเลย ถามผลงานทซากนจะหกคะแนนทงหมด โดยไมตองสบสวน

หาตนฉบบ”

Page 180: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 167

ถานสตรสกวาโครงงานทไดรบมอบหมายนนยากหรอตองใชเวลามากเกนไป

ขอใหพงระลกวาเธอกาลงทางานผดวธ ใหลองหาวธใหมทฉลาดกวานน

Work hard, and work smart.

Page 181: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 168

บทท 15 ควอนตมคอมพวเตอร

วตถประสงคของการเรยนในบทน

อธบายคณสมบตเชงคณตศาสตรของควบต (qubit), ควอนตมเรจสเตอร (quantum register),

เกตควอนตม (quantum gate), วงจรควอนตม (quantum circuit)

อธบายการท างานของควอนตมอลกอรทมงายๆ เชน อลกอรทมของ Deutsch

กระตนใหนสตสนใจความกาวหนาของวทยาการคอมพวเตอร และบรณาการความรทางวทยาการคอมพวเตอร

กบศาสตรดานอนๆ เชน กลศาสตรควอนตม (quantum mechanics) เปนตน

ควบต (Qubit)

หนวยเกบขอมลทเลกทสดของคอมพวเตอรทเราใชในปจจบนคอ “บต” แตในควอนตมคอมพวเตอรหนวยเกบ

ขอมลทเลกทสดคอ “ควบต” ควบตกคอสถานะของอนภาค (particle) เชน ทศทางทอนภาคเคลอนทไป หรอ

ทศทางการหมน แตทวาอนภาคในระดบทเลกมากๆ เชน อเลกตรอนนน อนภาคอาจจะเคลอนทหรอหมนไปใน

สองทศทางไดพรอมๆ กน ฟงดอาจจะเปนเรองเหลอเชอ แตถาบอกวาอนภาคนนเปนคลน (wave) กคงไมคอย

แปลกใจเทาไหร เพราะคลนเคลอนทไปในทกทศทางพรอมๆ กนได เชน คลนเสยง เปนตน แลวอเลกตรอนเปน

อนภาคหรอคลน? การทดลองทางวทยาศาสตรหลายๆ ชนบงชวา อเลกตรอนเปนทงคลนและอนภาคในเวลา

เดยวกน ถาเราไมไปรบกวนมนโดยการพยายามวดต าแหนงหรอทศทางการเคลอนทของมน มนจะประพฤตตว

เปนคลน คอเคลอนทไปในหลายทศทาง มการแทรกสอด (interference) ซงเปนพฤตกรรมปรกตของคลน แตถา

เราไปรบกวนมน อเลกตรอนจะประพฤตตวเปนอนภาค คอมต าแหนงและทศทางการเคลอนททแนนอน ทงหมด

ทกลาวฟงดไมนาเชอ แตกเปนความจรงทพสจนใหดไดดวยการทดลองทางวทยาศาสตรงายๆ ตราบเทาทยงไมม

การทดลองหรอทฤษฎใหมๆ มาหกลาง

ปญหาของนกฟสกสคอจะหาตวแบบทางคณตศาสตรใดมาอธบายปรากฏการณทคนพบ เพราะอเลกตรอนเปนทง

คลนและอนภาคในเวลาเดยวกน ดงนนนกฟสกสจงไดประดษฐตวแบบทางคณตศาสตรขนใหม ซงเปนทมาของ

“ควบต” หรอสถานะของอนภาค เขยนอธบายไดดงน

α|0> + β|1>

สญลกษณ | > เรยกวา ket คาทอยภายใน ket คอสถานะทเปนไปได เชน ในกรณนสถานะทเปนไปไดของควบต

คอ 0 หรอ 1 สวน α และ β คอแอมพลจด (amplitude) เปนจ านวนเชงซอน (complex number) ทมเงอนไข

วา|α|2 + |β|

2 = 1 สาเหตทผลรวมตองได 1 เพราะ |α|

2 คอความนาจะเปนทถาเราวดจะสงเกตเหน

สถานะ |0> และ|β|2 คอความนาจะเปนทถาเราวดจะสงเกตเหนสถานะ |1> แตถาเราไมวด (ไมไปรบกวน

มน) ควบตจะอยในสถานะทเรยกวา superposition คอเปนทง |0> และ |1> ในเวลาเดยวกน โดยมแอมพลจด

α และ β การวดจะท าให superposition พง (collapse) แลวสถานะของควบตจะกลายเปน |0> หรอ |1> ตาม

ความนาจะเปน สาเหตทตองใชจ านวนเชงซอนกเพอแทนทงแอมพลจด (amplitude) และเฟส (phase) ของคลน

Page 182: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 169

ควอนตมเรจสเตอร (Quantum Register)

ควอนตมเรจสเตอรกประกอบดวยควบตหลายๆ ตว เชน ถาเอาควบต 2 ตวมารวมกนจะเขยนอธบายไดดงน

|00> +

|01> +

|10> +

|11>

สงเกตวาผลรวมของแอมพลจดยกก าลงสองได (½)2 + (½)

2 + (½)

2 + (½)

2 = 1 เสมอเพราะเปนความนาจะ

เปน บางสถานะเชนสถานะขางตนอาจจะแยกตวประกอบได (decomposable) เชน

(

|0> +

|1>)(

|0> +

|1>)

วงเลบทางซายคอควบตตวแรก วงเลบทางขวาคอควบตตวทสอง แตบางสถานะกแยกตวประกอบไมได เชน ERP

pair (ERP ยอมาจาก Einstein, Podolsky, Rosen)

|00> +

|11>

มขอสงเกตวาถาวดบตแรกของ ERP pair ได 0 ทงสองควบตจะยบ (collapse) เปน |00> ท าใหบตทสองเปน 0

แนๆ โดยทไมจ าเปนตองไปวดอก กรณทวดบตแรกของ ERP pair ได 1 กท านองเดยวกน แลวถาจบสองควบต

(สองอนภาค เชน อเลกตรอนสองตว) ทเปน EPR pair แยกกนไวคนละสดขอบจกรวาลจะยงมพฤตกรรมเชนน

อกหรอไม?

วงจรควอนตม (Quantum Circuit)

ในชนน เราจะไมกลาวถงวสดหรอเทคโนโลยทจะน ามาใชสรางวงจรควอนตม แตจะมาดคณสมบตทางคณตศาสตร

วาเปนอยางไร วงจรควอนตมกมลกษณะคลายๆ กบวงจรเชงผสม (combinatorial circuit) กลาวคอวงจรท า

หนาทรบอนพต และใหเอาตพตออกไป ตางกนทวงจรควอนตมรบอนพตและเอาตพตเปนควบต ถาเขยนอธบาย

ดวยสมการทางคณตศาสตร วงจรควอนตมแทนดวยเมทรกซ M อนพตทเปนควบตแทนดวยคอลมนเมทรกซ A

และเอาตพตแทนดวยคอลมนเมทรกซ B คาทอยในเมทรกซ A และ B คอ แอมพลจด (amplitude) เชน ถา

อนพตคอ α|0> + β|1> เมทรกซ A คอ [α,β]T หรอถาอนพตคอ a|00> + b|01> + c|10> +

d|11> เมทรกซ A คอ [a, b, c, d]T ถาอนพตม n ควบต เมทรกซ A และ B จะมขนาด 2n x 1

สวนเม ทรกซ

C จะมขนาด 2n x 2

n การท างานของวงจรจะเปนตามสมการ MA = B สงเกตวาถาเราจ าลองการท างานของ

ควอนตมคอมพวเตอรดวยคอมพวเตอรแบบคลาสสกอยางทใชในปจจบนจะตองเสยเวลาเพมขนเปนเอกโปเนน

เชยล (exponential) ตามจ านวนควบตทเพมขน

ลองดตวอยางเลกๆ กอน เชน วงจรควอนตมทมอนพตแค 1 หรอ 2 ควบต ทจรงกคอเกตควอนตม (quantum

gate) นนเอง เราสามารถน าเกตควอนตมหลายๆ ตวมาประกอบกนใหเปนวงจรทใหญขนได

Quantum not gate

MN =

ทเรยกวา not-gate กเพราะ M

N[1,0]

T = [0,1]

T และ M

N[0,1]

T = [1,0]

T

[1,0] T คอสถานะ |0> และ [0,1]

T คอสถานะ |1>

Page 183: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 170

Square root of the not gate

MS =

ทเรยกวา square root of the not gate เพราะวามนท าแคครงเดยวของ not

MSM

S = M

N

Hadamard gate

MH =

Hadamard gate จะท าหนาทเหมอนเมทรกซเอกลกษณ (identity matrix, I) แตท าเพยงครงเดยว (IA = A)

MHM

H = I ท าให M

HM

H[1,0]

T = [1,0]

T และ M

HM

H[0,1]

T = [0,1]

T

Phase flip

MP =

Phase flip ท าหนาทเปลยนเฟส (phase) ของสวนทมคณสมบตเปนคลน โดยจะเปลยนเฉพาะเฟส ไมเปลยน

ขนาดแอมพลจด

วงจรควอนตมในมมมองทางคณตศาสตรกคอเมทรกซทเปลยนสถานะควอนตมเรจสเตอร จากสถานะหนงไปยง

อกสถานะหนง และเมทรกซนเปน unitary matrix ดวย ท าใหผลลพธทไดจะยงรกษากฎของความนาจะเปนอย คอ

ผลรวมของแอมพลจดยกก าลงสองตองได 1 เสมอ

ผลคณเทนเซอร (Tensor Product)

ผลคณเทนเซอร (tensor product) เปนตวด าเนนการทส าคญส าหรบการคณเมทรกซ อยาลมวาเกตพนฐานกคอ

เมทรกซ ดงนนเมอเราเอาเกตหรอวงจรเลกๆ มาตอกนเขา กเหมอนประกอบเมทรกซเลกๆ ใหเปนเมทรกซท

ใหญขน และจ าเปนตองใชตวด าเนนการทเรยกวาผลคณเทนเซอร (tensor product) เพอรวมเมทรกซหลายๆ อน

เขาดวยกน ผลคณเทนเซอรระหวาง A และ B เขยนวา A ⨂ B ดงตวอยางตอไปน

เมทรกซผลลพธหรอ A ⨂ B จะมขนาด rt × su

Page 184: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 171

การประกอบวงจรเลกๆ เขาดวยกนกมไมกรปแบบดงน (กรณทเปนสายเปลา ใหคดวามเมทรกซเอกลกษณอย)

วงจรควอนตม เมทรกซทแทนวงจรทงหมด

M = M2M

1

(นสตมกจะท าผดเปน M = M1M

2)

M = M1 ⨂ M

2

M = M2(M

1 ⨂ I)

อลกอรทมของ Deutsch

อลกอรทมของ Deutch ใชตรวจสอบวาฟงกชน f: {0,1} x {0,1} เปนฟงกชนสมดลย (balance) หรอเปน

ฟงกชนคงท (constant) นยามของฟงกชนคงทคอ f(x) = constant ส าหรบทกๆ x สวนนยามของฟงกชนท

สมดลยคอครงหนงของโดเมนของฟงกชนจะใหคาคงทหนง และอกครงหนงของโดเมนจะใหคาคงทอกตวหนง ด

รปท 15.1 นยามนสามารถขยายไปใชกบฟงกชนทใหญขนได เชน f: {0,1}n x {0,1} แตในชนนเราจะพจารณา

เฉพาะฟงกชน f ทเลกทสดคออนพตและเอาตพตมขนาด 1 บต ฟงกชนนเปนไปไดทงหมด 4 แบบ 2 แบบเปน

ฟงกชนสมดลย (ฟงกชน identity และ inverse) และอก 2 แบบเปนฟงกชนคงท (ฟงกชนใหคาคงท 0 หรอ 1)

ถาฟงกชน f เปนกลองด า (blackbox function) เรามองไมเหนภายในฟงกชนวาเปนอยางไร ท าใหตอบไมไดวา

เปนฟงกชนสมดลยหรอฟงกชนคาคงท แตเราสามารถปอนอนพตเขาไปแลวดเอาตพตทออกมาได ถาใชการ

ค านวณแบบคลาสสกจะตองค านวณ f(0) และ f(1) สองครงถงจะทราบวาฟงกชนสมดลยหรอคงท ดรปท 15.1

รปท 15.1 การแจกแจงกรณทเปนไปไดทงหมดของฟงกชน f : {0,1} x {0,1}

Page 185: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 172

วงจรทท าอลกอรทมของ Deutsch แสดงในรปท 15.2

รปท 15.2 วงจรควอนตมส าหรบค านวณอลกอรทมของ Deutsch

เรมจากทางซายมอ วงจรนมอนพต 2 ควบต อนพตเปนคาคงทคอ |0> และ |1> กลอง H คอ Hadamard gate

ซงรบอนพตแค 1 ควบต วงจร Uf (f คอฟงกชนทเราจะตรวจสอบวาสมดลยหรอคงท) รบอนพต 2 ควบต ท างาน

ดงน

มเตอรทอยทางขวามอสดของรปท 15.2 หมายถงการวด การวดจะท าใหบตบน (ถาอยในสถานะ superposition)

พง (collapse) ลงมาเปน 0 หรอ 1 ถารวม Hadamard gate ทงสามตวและ Uf เขาดวยกนเปนวงจรเดยว กจะได

เมทรกซขนาด 4x4 คอ (H ⨂ I)Uf(H ⨂ H) เมอ I คอเมทรกซเอกลกษณขนาด 2x2

การใชงานวงจรในรปท 15.2 เราจะใสอนพตเขาไป 1 ครง แลววดบตบน ถาบตบนมคาเปน 0 ฟงกชน f เปน

ฟงกชนคงท แตถาบตบนมคาเปน 1 ฟงกชน f เปนฟงกชนสมดลย ขอท งการพสจนเรองนไวใหเปนการบาน

ส าหรบนสต มฟงกชน f ทเปนไปไดทงหมดแค 4 แบบ และวงจรในรปท 15.2 กมทงหมด 4 แบบ ขนอยกบวา

ฟงกชน f จะเปนอะไร (ฟงกชน f ซอนอยในกลอง Uf) หวงวาคงไมยากจนเกนไปส าหรบการค านวณดวยมอ

ขอสงเกตทส าคญคอ ถาเปนการค านวณแบบคลาสสกเราตองค านวณฟงกชน f สองครง แตถาใชควอนตม

คอมพวเตอรเราค านวณฟงกชน f เพยงครงเดยวกจะทราบไดทนทวาเปนฟงกชนสมดลยหรอฟงกชนคงท

ตวอยางเลกๆ นแสดงใหเหนวาควอนตมคอมพวเตอรมสมรรถนะการค านวณทสงกวาคอมพวเตอรแบบคลาสสก

งานวจยในปจจบนแสดงใหเหนวาควอนตมคอมพวเตอรสามารถแกปญหาการแยกตวประกอบ (ทเปนผลคณของ

จ านวนเฉพาะ 2 ตว) หรอปญหาทเรยกวา prime factoring ไดเรวกวาคอมพวเตอรแบบคลาสสกมาก ปญหาการ

แยกตวประกอบนเปนเรองส าคญเพราะเปนพนฐานการเขารหสขอมลแบบ RSA ทนยมใชกนทวไป ถามคน

สามารถแยกตวประกอบไดเรวๆ การเขารหสแบบ RSA กจะไมปลอดภยอกตอไป

ปจจบนเราทราบวาควอนตมคอมพวเตอรมพลงการค านวณทเหนอกวาคอมพวเตอรแบบคลาสสกแนๆ แตจะ

ดกวาแคไหนนน ยงเปนเรองทยงตองคดวจยกนตอไป ควอนตมคอมพวเตอรจะแกปญหาในกลม NP ซงจดวา

เปนปญหาการค านวณทยากทสด (หรอใชเวลามากทสด) ไดหรอไม กยงเปนสงทตองรอการพสจน

Page 186: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 173

เอกสารประกอบ (ส าหรบอานเพมเตม)

งานวจยของผสอนทเกยวกบควอนตมคอมพวเตอร บทความแรกเปนการออกแบบฮารดแวรส าหรบ Compact

Genetic Algorithm บนเทคโนโลยเดมคอใชทรานซสเตอร บทความทสองออกแบบวงจรเดมแตใชเทคโนโลยแบบ

ควอนตม

C. Aporntewan, P. Chongstitvatana, A Hardware Implementation of the Compact Genetic

Algorithm, Proc. of the Congress on Evolutionary Computation (CEC2001), Vol. 1, pp. 624-

629, Seoul, Korea, 2001.

S. Yingchareonthawornchai, C. Aporntewan, P. Chongstitvatana, An Implementation of Compact

Genetic Algorithm on a Quantum Computer, Int. Joint Conf. on Computer Science and Software

Engineering (JCSSE), 30 May - 1 June 2012, pp.131-135.

นสตทสนใจเรองควอนตมคอมพวเตอรสามารถอานเพมเตมไดจากหนงสอในรายการอางองทายบท

รายการอางอง

[1] Michael A. Nielsen, Isaac L. Chuang, Quantum Computation and Quantum Information, Cambridge

University Press, 10th Aniversary edition, 2011.

[2] Eleanor G. Rieffel, Wolfgang H. Polak, Quantum Computing: A Gentle Introduction, The MIT Press, 1st

edition, 2011.

Page 187: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 174

สอการสอน (ซอฟตแวร)

สอการสอนหลกทใชในวชานคอซอฟตแวรหลายตว เรยงตามล ากบเนอหาดงน

โปรแกรม Karnaugh Minimizer

โปรแกรมนใชส าหรบวาด Karnaugh map ตามตารางคาความจรง (truth table) ทปอนให วตถประสงคของการใช

ซอฟตแวรตวนกเพอใหนสตใชตรวจค าตอบเวลาท าแบบฝกหดทายบท จะไดมเฉลยไวดวานสตท าไดถกตอง

หรอไม นสตจะไดฝกท ากอนสอบกลางภาค ขอสอบกลางภาคจะใหวาด Karnaugh map ทกป

ดาวนโหลดโปรแกรม

http://161.200.126.13/MyWebsite/2301274_Computer_Systems/KarnaughMinimizer2.zip

คมอการใชงาน

ในโปรแกรมกด Help เลอก Contents หรอกด F1 ทโปรแกรมไดเลย

โปรแกรม LogicWorks

โปรแกรมนใชส าหรบท าโครงงานเครองคดเลข นสตตองออกแบบเครองคดเลขแบบดจทลดวยโปรแกรมน

โปรแกรม LogicWorks สนบสนนการออกแบบดวยเกตชนดตางๆ ไอซส าเรจรป และภาษา VHDL นสตสามารถ

ออกแบบวงจรดจทลและจ าลองการท างานไดบนโปรแกรมนเลย ท าใหไมตองใชฮารดแวรจรง ซงตองใชเวลา

เตรยมอปกรณมาก มราคาแพง และช ารดเสยหายไดงาย

ดาวนโหลดโปรแกรม

อยในซดรอมทแถมมากบหนงสอคมอการใชงาน หรอดาวนโหลดไดจากเวบไซตของรายวชา

http://161.200.126.13/MyWebsite/2301274_Computer_Systems/LogicWorks5.zip คมอการใชงาน

LogicWorks LogicWorks 5 Interactive Software, Prentice Hall, 2003.

โปรแกรม Stack CPU simulator

โปรแกรมนผมเปนผพฒนาข นเอง เขยนดวย Javascript ดงนนตองรนบนเบราเซาร เชน IE, Firefox หรอ

Chrome โปรแกรมนจ าลองการท างานของสแตกซพย นสตสามารถปอนโปรแกรมแลวสงซพยใหท าทละค าสง

(instruction) แลวดการเปลยนแปลงของคาภายใน TOS, DS, RS, MEM ได

ดาวนโหลดโปรแกรม

ตวเกา http://161.200.126.13/MyWebsite/2301274_Computer_Systems/Simulator_Orig.html

ตวใหม http://161.200.126.13/MyWebsite/2301274_Computer_Systems/Simulator_New.html

Page 188: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 175

โปรแกรมตวเกามหนวยความจ าแค 16 ชองเทานน ผมเพมเปน 32 ชองในโปรแกรมตวใหม และเพมคาคงทท

มกจะตองใชบอยๆ ลงไปดวย คมอการใชงาน

ไมมคมอการใชงาน โปรแกรมเปนเวบเพจ (web page) หนาเดยว ปอนค าสง (instruction) ลงไปในแตละ

บรรทด (ซงกคอแตละชองหนวยความจ า) แลวกด Step เพอท า (execute) ทละค าสง สงเกตการเปลยนแปลง

ของ Memory, Data Stack, และ Return Stack

โปรแกรม LC3 Simulator

โปรแกรมนมาจากผพฒนาแอลซทรโพรเซสเซอร Patt และ Patel

ดาวนโหลดโปรแกรม

ดาวนโหลดจากเวบไซตของ McGraw-Hill มทงเวอรชนส าหรบ Windows และ Unix

http://highered.mcgraw-hill.com/sites/0072467509/student_view0/lc-3_simulator.html

หรอดาวนโหลดไดจากเวบไซตของรายวชา

http://161.200.126.13/MyWebsite/2301274_Computer_Systems/LC3Simulator.zip คมอการใชงาน

Introduction to Computing Systems: From bits & gates to C & beyond, McGraw-Hill, 2003.

Page 189: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 176

ผลงานวจยของผสอน

มงานวจยของผมหลายชน แตในทนคดมาเฉพาะงานวจยทเกยวกบรายวชา 2301274 ระบบคอมพวเตอร

การออกแบบ Stack CPU ดวยภาษา Verilog เพอสงเคราะหบน FPGA

งานวจยนเปนการออกแบบสแตกซพยดวยภาษา Verilog ชดค าสงเดม (instruction set) ของ Stack CPU นนม

อยแลว ออกแบบโดย Philip Koopman ผมเพยงแตน ามาแบงมอดลและออกแบบวถขอมล (data path) ใหม

แลวออกแบบฮารดแวรของแตละมอดลดวยภาษา Verilog

An FPGA implementation of a fixed-point square root operation

งานวจยนเปนการออกแบบวงจรหารากทสอง (square root) ของจ านวนแบบจดตรง (fixed-point) ขนาด 32

บต วงจรทไดจากการออกแบบน าไปสงเคราะหบน Field-Programmable Gate Array (FPGA)

Data dependency reduction in dynamic programming matrix

งานวจยนน าเสนอการแบงขอมลแบบใหมส าหรบการโปรแกรมพลวต (dynamic programming) โดยปกตแลว

การโปรแกรมพลวตจะใชประโยชนจาก multithreading และ multi-core ไดอยแลว โดยแบงการค านวณเปน

หลายๆ เทรด แตละเทรดรบผดชอบการเตมตารางแตละบรรทด แตการแบงงานแบบเดมนมขอจ ากดท data

dependency การแบงงานแบบใหมทเราน าเสนอนนชวยลด data dependency ท าใหงานเสรจแลวข น และใช

ประโยชนจาก multithreading ไดเตมท

A hardware implementation of the compact genetic algorithm

งานวจยนเปนการออกแบบฮารดแวรส าหรบ Compact Genetic Algorithm (CGA) เนองจากเราเลงเหนวา CGA

มลกษณะทเหมาะส าหรบจะเอาไปท าเปนฮารดแวรพเศษมากกวาทจะรนบนไมโครโพรเซสเซอร ผลการทดลอง

แสดงใหเหนวาฮารดแวร CGA ท างานไดเรวกวาไมโครโพรเซสเซอรทวๆ ไป

An implementation of compact genetic algorithm on a quantum computer

งานวจยนตอเนองมาจากงานทท าฮารดแวรส าหรบ Compact Genetic Algorithm (CGA) ซงใชเทคโนโลยแบบ

ทรานซสเตอร แตงานวจยนเปนการทดลองออกแบบอลกอรทมบนควอนตมคอมพวเตอร ทมสถาปตยกรรมทตาง

จากคอมพวเตอรแบบคลาสสกทเราใชอยในปจจบนอยางมหาศาล ปจจบนยงไมมเครองควอนตมคอมพวเตอรท

รนอลกอรทมนไดจรง แตเราสามารถออกแบบอลกอรทมและตรวจสอบความถกตองโดยใชโปรแกรมจ าลองบน

เครองคอมพวเตอรแบบคลาสสกได

Page 190: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 177

Page 191: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 178

Page 192: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 179

Page 193: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 180

Page 194: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 181

Page 195: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 182

Page 196: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 183

Page 197: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 184

Page 198: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 185

Page 199: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 186

Page 200: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 187

Page 201: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 188

Page 202: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 189

Page 203: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 190

Page 204: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 191

Page 205: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 192

Page 206: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 193

Page 207: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 194

Page 208: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 195

Page 209: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 196

Page 210: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 197

Page 211: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 198

Page 212: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 199

Page 213: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 200

Page 214: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 201

Page 215: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 202

Page 216: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 203

Page 217: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 204

Page 218: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 205

Page 219: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 206

Page 220: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 207

Page 221: รายวิชา 2301274 ระบบคอมพิวเตอร์

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 208

Page 222: รายวิชา 2301274 ระบบคอมพิวเตอร์