Upload
vuongdang
View
363
Download
31
Embed Size (px)
Citation preview
เอกสารค าสอน
รายวชา 2301274 ระบบคอมพวเตอร
(CO M P U T E R S Y S T E M S)
ผชวยศาสตราจารย ดร. ชชวทย อาภรณเทวญ
ภาควชาคณตศาสตรและวทยาการคอมพวเตอร
คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | ก
ค ำน ำ
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร (Computer Systems) นเปนแนวทางการสอนแบบหนง
ทผมรวบรวมมาจากอาจารยของผมหลายๆ ทาน และจากประสบการณการท างานดานการออกแบบวงจรดจทลและการ
ออกแบบไมโครโพรเซสเซอรของผมเอง ผมไดพฒนาเนอหา แบบฝกหด และโครงงานส าหรบนสต เพอใหเหมาะสมกบ
หลกสตรวทยาการคอมพวเตอรทมวชาบงคบดานฮารดแวรเพยงตวเดยว ซงตางจากหลกสตรอนๆ ทมวชาบงคบดาน
ฮารดแวรหลายตวและมแลบใหนสตทดลองปฏบตดวย ท าใหเนอหาของเอกสารค าสอนนตองสนกระชบและครอบคลม
พนฐานดานฮารดแวรสวนใหญทนสตควรจะร และตองสอนนสตทเรยนฮารดแวรเปนครงแรกใหเขาใจการท างานของไม
โครโพรเซสเซอรในเชงลก เพอทจะเชอมโยงความรตอไปยงวชาอนๆ ได เชน 2301371 ระบบปฏบตการ (Operating
Systems) และ 2301380 หลกการและการประมวลภาษาโปรแกรม (Programming Language Principles and
Processing)
ในบทสดทาย ผมเพม “ควอนตมคอมพวเตอร (Quantum Computer)” ซงอยนอกเหนอจากเนอหาในหลกสตร
เขาไปดวย เนองจาก หนง เปนความสนใจสวนตวของผมเอง สอง มเนอหาเชงบรณาการกบควอนตมฟสกสและ
คณตศาสตร ซงกดเหมาะสมดกบนสตคณะวทยาศาสตร สาม การค านวณเชงควอนตมนาจะกระตนใหนสตเกดความใฝร
และตระหนกถงความเชอมโยงของศาสตรตางๆ อนจะน าไปสการเปดโลกทศนของนสตออกไปยงสาขาวชาอนๆ ท
เกยวของกบคอมพวเตอร และส เปนการแนะน ารายวชาเลอกทก าลงจะเปดใหมคอ 230xxxx การค านวณเชงควอนตม
(Quantum Computation) ของภาควชาคณตศาสตรและวทยาการคอมพวเตอร
สดทาย ขอกราบขอบพระคณบดามารดาผสนบสนนในการศกษาเลาเรยนของขาพเจาเสมอมา ขอขอบพระคณ
ครบาอาจารยหลายทานในภาควชาวศวกรรมคอมพวเตอร คณะวศวกรรมศาสตร จฬาลงกรณมหาวทยาลย ทไดประสทธ
ประศาสตรวชาความร ดานฮารดแวร สนบสนนใหเขาประกวดแขงขนออกแบบฮารดแวรในระดบประเทศ ใหชวย
เตรยมการสอนแลบฮารดแวร ความรและประสบการณทไดจากการท างานเหลานเปนประโยชนอยางมากตองานสอนของ
ผมในปจจบน
ชชวทย อาภรณเทวญ
ภาควชาคณตศาสตรและวทยาการคอมพวเตอร
จฬาลงกรณมหาวทยาลย
19 มถนายน 2556
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 บรรยาย สอบ
เอกสารค าสอนรายวชา 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 แบบฝกหด
เอกสารค าสอนรายวชา 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
การปรบปรงผลการประเมนการสอนครงทผานมา
ไมม
เอกสารค าสอนรายวชา 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 น.)
เอกสารคาสอนรายวชา 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 เปนตน
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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 เปนคอมพวเตอรแบบอเลกทรอนกสเครองแรก
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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) เปนอปกรณทเขามาแทนทหลอดสญญากาศ มหลกการทางานเหมอนกนคอ เปนสวตช
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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 (ขวา)
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 11
ตวอยางของสญญาณแอนะลอกและดจทลทเราพบในชวตประจาวนคอระบบเครองเสยง (รปท 1.16) ขอมลเสยง
ตามธรรมชาตเปนขอมลแบบแอนะลอกและตอเนอง (continuous) บนแกนเวลาอยแลว ในรปบนจะเกบขอมล
เสยงในจานแมเหลก โดยเกบเปนแบบแอนะลอก แปลงสญญาณเสยงใหเปนสญญาณแมเหลกบนจาน แกนเวลาก
คอการหมนของจาน เครองเลนจะอานสญญาณแอนะลอกจากจานแมเหลกและสงตอไปยงลาโพง ลาโพงปกตกรบ
สญญาณแอนะลอกและแปลงเปนคลนเสยง ในรปกลางเกบขอมลเปนดจทล เชน 01101 บนแผนบนทกขอมล
เครองเลนจะอานขอมลดจทลแลวแปลงเปนสญญาณแอนะลอกกอนสงไปยงลาโพง รปลางแสดงวธทใชทา A2D
และ D2A เนองจากขอมลเสยงมความตอเนองในแกนเวลา จงตองใชวธการชกตวอยาง (sampling) เพอทา A2D
ทบางเวลาเทานน ทาใหแทนรปคลนไดดวยคา y1 ถง y9 ซงคาเหลานอาจจะคลาดเคลอนจากคาจรงไปบางดวย
ขอจากดของ A2D เมอจะเลนเสยงกตองแปลงคา y1 ถง y9 กลบมาเปนรปคลนทตอเนองโดยใชการประมาณคา
ในชวง (interpolation) เพอเชอมจดในแกนเวลา กจะมความคลาดเคลอนทเกดจากการประมาณคาในชวงดวย ทา
ใหไดรปคลนไมเหมอนเดม
มขอสงเกตวาสญญาณแอนะลอกทอานจากจานแมเหลกอาจจะคลาดเคลอนกนไปบางในการอานแตละครง และ
อาจจะคลาดเคลอนมากข นเมอจานแมเหลกเสอมอายลง แมจะยงเลนเพลงไดแตเสยงกเพยนไป แตในระบบ
ดจทลการอานขอมลจากแผนบนทกขอมลจะอานได 0 หรอ 1 เหมอนเดมทกครง เมอแผนบนทกขอมลคอยๆ
เสอมคณภาพลง เครองอานจะตองพยายามอานหลายครงมากขน เพราะเครองเลนร วาขอมลทอานไดผดจากการ
ตรวจหาความผดพลาด (error detection) ทาใหตองพยายามอานขอมลใหมเรอยๆ จนกวาจะไดขอมลทถกตอง
ถงแมวาจะตองอานซาหลายครง แตถาอานสาเรจ ขอมลดจทลทอานไดจะเหมอนเดมเสมอ ทกครง ไม
เปลยนแปลง อนนเปนคณสมบตทสาคญของระบบดจทล
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 12
รปท 1.16 เครองเสยงแบบแอนะลอก (บน) แบบดจทล (กลาง) การประมวลผลสญญาณ (ลาง)
เอกสารคาสอนรายวชา 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)
ในปจจบนและอนาคตอนใกลกฎของมวรจะยงคงเปนจรงอยหรอไม
เอกสารคาสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 (หนงลานลาน)
เอกสารค าสอนรายวชา 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 จะไดสวนเตมเตมสอง สงเกตวาสวนเตมเตมสองของ
เลขจ านวนเตมบวกจะมคาเทากบเลขจ านวนเตมลบ และสวนเตมเตมสองของเลขลบจะมคาเทากบเลขบวก เชน
เอกสารค าสอนรายวชา 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)
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 ข น เพอใหมการเขา
รหสตวอกษรทเปนสากลส าหรบทกๆ ภาษาไมวาจะเปน องกฤษ ไทย จน ฯลฯ
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 ไว
ขางหนา หมายถง เปนเลขฐานสบหก)
เอกสารค าสอนรายวชา 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'));
}
}
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 ฟงกชนการท างานของเกตชนดตางๆ
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 27
รปท 3.3 โครงสรางทประกอบดวยทรานซสเตอรของเกต not, nand และ nor (เรยงจากซายไปขวาตามล าดบ)
สญลกษณทวไปทใชในการวาดวงจรดจทล
กอนทจะเขาสเน อหาตอไป ควรจะทราบความหมายของสญลกษณทใชในวงจรดจทลกอน ดรปท 3.4
สายไฟ (wire)
สายไฟ n เสน
สายอนพต
สายเอาตพต
จดกลมๆ คอจดทสายไฟเชอมตอกน เสนทตดกนไมได
เชอมตอกน
รปท 3.4 สญลกษณทวไปทใชในวงจรดจทล
ตวด าเนนการบต (Bit Operator)
หลงจากทเราทราบฟงกชนหลกๆ ทใชท ากบบตหนงบตแลว เราอาจจะใชฟงกชนนนท ากบหลายๆ บตไปพรอม
กนทเดยวกได เชน
0110 • 1101 จะไดผลลพธเทากบ 0100 (• คอ and)
0110 + 0101 จะไดผลลพธเทากบ 0111 (+ คอ or)
เอกสารค าสอนรายวชา 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) วาเปน
จรงหรอเทจ
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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)
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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”
เอกสารค าสอนรายวชา 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 ดงน
เอกสารค าสอนรายวชา 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 เปนอะไรกได
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 37
วงครงทสามเปนครงสดทายจะไดแบบน
เทอมสดทายคอ เทานกจะไดวงจรแบบสองชน (two-level) ดงรปขางลาง
ถาวงผด เชน วงเลกเกนไป ทงๆ ทวงใหใหญกวานนกได ไมเปนไร วงจรยงท างานไดถกตอง แตจะมขนาดใหญ
เกนจ าเปน เชน ถาครงทสอง (เทอมทสอง) วงกอนสเหลยมจตรสแคครงซายจะไดเทอม ซงใหญเกนจ าเปน
แค กพอแลว แตวงจรกยงท างานไดผลลพธถกตอง
ทนสตมกจะวงผด เพราะลมไปวาบางชองทเหนอยหางกน จรงๆ แลวมนอยตดกน (ตางกน 1 บต) ลองด
ตวอยางตอไปนแลวจะเขาใจ
ตวอยางทท าใหดน มอนพต 4 ตวแปร และใชตารางขนาด 4 × 4 ในกรณทวไปขนาดของ Karnaugh map (แถว ×
คอลมน) ขนอยกบจ านวนตวแปรดงน (ตวเลขในตารางคอคาอนพตในฐานสบ ลกศรในตารางแสดงรปแบบของ
ชองทเสมอนวาอยตดกน เพราะอนพตตางกนเพยง 1 บต)
เอกสารค าสอนรายวชา 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 ชอง
เอกสารค าสอนรายวชา 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 ดวยตวเอง เพราะในการสอบไมอนญาตใหใชโปรแกรมหรอ
เครองค านวณ
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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 ทขอบขาขนคาสถานะ จะถก
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 เปลยนไปใช
เอกสารค าสอนรายวชา 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 กคอฟงกชนเดยวกน
เอกสารค าสอนรายวชา 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)
เอกสารค าสอนรายวชา 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 เมอระดบน าลงมาถง
เซนเซอรตวลาง ใหปมน าท างานรวดเดยวจนน าแตะตวรบร ขางบน แลวหยดท างานจนกวาระดบน าจะลงมาแตะตวลางอก
ครง ถงจะเรมปมใหม ตวรบรทงสองตวควรจะอยหางกนพอสมควรเพอใหปมน าไดท างานรวดเดยว แลวกหยดพก
เอกสารค าสอนรายวชา 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 วนาท
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 50
รปท 5.15 แผนภาพเวลาของวงจร Even Parity (ใช FSM รปท 5.15)
เวลาดรปท 5.15 ขอใหคดวาอนพตมาชากวาขอบขาขนเลกนอย เหมอนรปท 5.9
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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 (ขวา)
เอกสารค าสอนรายวชา 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) เพอ
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 (ขวา)
เอกสารค าสอนรายวชา 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
ถาสวนทเปนทศนยมเปนศนย กแสดงวาไมมทศนยมหลกตอไปแลว ใหหยดแคน
เอกสารค าสอนรายวชา 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.
เอกสารคาสอนรายวชา 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 ลาดบชนของหนวยความจา
เอกสารคาสอนรายวชา 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 บต
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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) ลบขอมลดวยไฟฟาและบนทกใหมไดหลายครง
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 64
รปท 7.8 ROM (BIOS), EPROM, EPROM eraser, EEPROM burner
เอกสารคาสอนรายวชา 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.
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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 บต
จะไดไมตองเอาวงจรบวกเตมอตรามาตอกนทละบต
เอกสารคาสอนรายวชา 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 (ซาย) คยบอรดทสรางขนจากปมกดหลายๆ อน (ขวา)
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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 สาหรบการออกแบบวงจรดจตอล” ดในรายการอางองทายบท
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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 เปนตน หรอจะใชแทนวงจรเชงผสมโดยเกบ
ตารางคาความจรงกได แตในทางปฏบตไมคอยทากนเพราะใชจานวนทรานซสเตอรมากกวาการออกแบบดวยเกต
เอกสารคาสอนรายวชา 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 บต
เอกสารคาสอนรายวชา 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 ไว เพอใหนสตทดลองเลนดได อยากใหสญญาณ
ควบคมยงกโยกสวตชเอาเอง
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
(ทางานทขอบขาขน)
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 78
สราง FSM ทมขาอนพตเอาตพตตามทกาหนด แลวเชอมเขากบวงจรเดมทออกแบบไวจะไดดงรปท 8.14
รปท 8.14 วงจรคณทใชวงจรบวกสองตว (ม FSM)
เรมตนใชงานใหกดปม Reset FSM แลวกใชงานเหมอนเครองคดเลขปกต ปอนตวถกดาเนนการตวแรก
กดปม Multiply (x) ปอนตวถกดาเนนการตวทสอง กดปม Equal (=) ผลลพธของการคณจะอยใน Shift
Register
เอกสารคาสอนรายวชา 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;
เอกสารคาสอนรายวชา 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;
เอกสารคาสอนรายวชา 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 แสดงการออกแบบวงจรคณดวยวธทกลาว
มาขางตน
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 82
รปท 8.15 วงจรคณเชงผสม
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 83
ในรปท 8.15 ถาจะขยายขนาดวงจรคณใหทาไดมากกวา 4 บต จะตองใชสายไฟและวงจรบวกมากขน นสตควร
มดสายไฟรวมกน (ใชคาสง breakout) และสรางมอดลสาหรบการบวกทมากกวา 4 บต หรออาจจะยบเกต and
หลายๆ ตวใหเปนมอดลเดยว พยายามวางสายไฟและมอดลใหเปนระเบยบ เพอใหงายตอการทาความเขาใจและ
ตรวจสอบหากมขอผดพลาดเกดขน
สงเกตวาวงจรทผมออกแบบมลกษณะทซาซอนกน ทาใหใชวธ copy & paste ได ซงจะชวยลดเวลาทตองใชเมาส
ทางานลงไปไดมาก
เอกสารคาสอนรายวชา 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.
เอกสารคาสอนรายวชา 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) คาสงนน เปนเชนนไปเรอยๆ
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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;
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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 ทางานเหมอนกน)
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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];
เอกสารคาสอนรายวชา 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;
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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))
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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).
เอกสารคาสอนรายวชา 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 เลย
เอกสารคาสอนรายวชา 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 ชน
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 106
การทา if-then
โครงสรางของโปรแกรมแบบ if-then แสดงในรปท 10.1
รปท 10.1 โครงสรางโปรแกรมแบบ if-then
ถากลบเงอนไขกอน จะทาใหโปรแกรมสนลง เชน ถาจรงให push(คาทไมใช 0) แตถาไมจรงให push(0) ในบาง
กรณจะเขยนโปรแกรมงายกวามาก และทาใหโปรแกรมสนลงดวย ดรปท 10.2
รปท 10.2 โครงสรางโปรแกรมแบบ if-then (แบบกลบเงอนไข)
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 107
การทา if-else
โครงสรางของโปรแกรมแบบ if-else แบบงายๆ ตรงไปตรงมา แสดงในรปท 10.3 ลองเขยนอกแบบโปรแกรมจะ
สนกวาดงรปท 10.4
รปท 10.3 โครงสรางโปรแกรมแบบ if-else (แบบยาว)
รปท 10.4 โครงสรางโปรแกรมแบบ if-else (แบบสน)
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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)
เอกสารคาสอนรายวชา 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 ยงไง
เอกสารคาสอนรายวชา 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 บตจะทาอยางไร
เอกสารคาสอนรายวชา 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 เทานน
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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).
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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 เปนตน
เอกสารคาสอนรายวชา 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]
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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 กได
เอกสารคาสอนรายวชา 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.
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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
เอกสารคาสอนรายวชา 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.
เอกสารค าสอนรายวชา 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]
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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)
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 ;
เอกสารค าสอนรายวชา 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 อยตลอดเวลา ปลอยซพยไปท างานอยางอนได ตอเมอมการกดปม คยบอรดจะสงสญญาณกลบไปบอก
เอกสารค าสอนรายวชา 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) ไปยงเรจสเตอรของอปกรณตางๆ
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 ฮารดแวรส าหรบเลอกอปกรณทมล าดบความส าคญสงสด
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 จะมคาเปนเทาใด
เอกสารค าสอนรายวชา 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)
}
}
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 151
รายการอางอง
[1] Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C &
beyond, McGraw-Hill, 2003.
เอกสารค าสอนรายวชา 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 ชด ซงสนเปลองฮารดแวรมากกวา
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 (คณ)
เอกสารค าสอนรายวชา 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 แบบสายทอ
เอกสารค าสอนรายวชา 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 ไปดวย
เอกสารค าสอนรายวชา 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 ทใชซอฟตแวรและมเวลาไมจ ากด จะคอมไพลนานๆ กไมเปนไร
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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) แลวรนโปรแกรมบบอดขอมลในแตละคอรไปพรอมๆ กน หรอการประมวลผลภาพ
เอกสารค าสอนรายวชา 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 (ขวา)
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 จดภาพ)
เอกสารค าสอนรายวชา 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.
เอกสารคาสอนรายวชา 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
กได
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 165
รปท 14.1 วถขอมล (data path) ของเครองคดเลข
ขอคดในการออกแบบ
กอนลงมอทาควรคดใหรอบคอบกอน มฉะนนอาจจะเสยเวลาไปมากโข แลวตองกลบมาเรมใหม ลองพจารณา
ประเดนตอไป
• เลอกระบบตวเลขทจะใชกอน IEEE 754 จะไดคะแนนมากทสด แตอาจจะเสยเวลาทาวงจรบวก
ลบคณหารมาก นกเรยนอาจจะเลอกระบบตวเลขทงายกวา IEEE 754 เพอไมใหยากเกนไป
• เรมตนทาใหใชคยบอรดและหนาจอแสดงผลเปนเลขฐานสองไปกอนกได เพราะงายด อยาเพงไป
เสยเวลาทาเปนเลขฐานสบ เกบไวทาเปนขนตอนสดทาย
• ออกแบบวถขอมลกอน และตรวจสอบใหแนใจวา สามารถทาบวก/ลบ/คณ/หาร และแฟกทอ
เรยลได
• แบงงานเปนสวนๆ อยาใหลมเหลวทงหมด ถาทาคณ/หารไมไดกขอใหมบวก/ลบมาสง ถา
แสดงผลเปนเลขฐานสบไมได กใหแสดงเปนเลขฐานสอง
• ใชไอซ (IC) สาเรจรปทมใน LogicWorks เพอทนแรงได
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 166
เกณฑการใหคะแนน
การใหคะแนนพจารณาจาก (เตม 100 คะแนน)
• ระบบตวเลขทใช
ο IEEE 754 20 คะแนน
ο แบบอนๆ จะไดคะแนนนอยกวา
• การรบอนพตเปนเลขฐานสบ 5 คะแนน
• การแสดงผลเปนเลขฐานสบ 5 คะแนน
• การทางานเชงโตตอบของหนาจอ 5 คะแนน
• ความถกตองของผลลพธ
ο บวก 5 คะแนน
ο ลบ 5 คะแนน
ο คณ 10 คะแนน
ο หาร 10 คะแนน
ο แฟกทอเรยล 20 คะแนน
• รายงาน 10 คะแนน
• การนาเสนอ 5 คะแนน
“การลอกผลงานของผอนไมวาจะเปนของเพอน ของรนพ หรอจากแหลงอนๆ มาสงมความผด และจะถกหก
คะแนนตามวนจฉยของอาจารย การชวยเหลอกนและพดคยกนนนเปนเรองด แตอยาใหเพอนลอก โดยปกตแลว
งานออกแบบจะซากนยากมาก แคเฉยดๆ ยงยากเลย ถามผลงานทซากนจะหกคะแนนทงหมด โดยไมตองสบสวน
หาตนฉบบ”
เอกสารคาสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 167
ถานสตรสกวาโครงงานทไดรบมอบหมายนนยากหรอตองใชเวลามากเกนไป
ขอใหพงระลกวาเธอกาลงทางานผดวธ ใหลองหาวธใหมทฉลาดกวานน
Work hard, and work smart.
เอกสารค าสอนรายวชา 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) ของคลน
เอกสารค าสอนรายวชา 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>
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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}
เอกสารค าสอนรายวชา 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 ซงจดวา
เปนปญหาการค านวณทยากทสด (หรอใชเวลามากทสด) ไดหรอไม กยงเปนสงทตองรอการพสจน
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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) ซงใชเทคโนโลยแบบ
ทรานซสเตอร แตงานวจยนเปนการทดลองออกแบบอลกอรทมบนควอนตมคอมพวเตอร ทมสถาปตยกรรมทตาง
จากคอมพวเตอรแบบคลาสสกทเราใชอยในปจจบนอยางมหาศาล ปจจบนยงไมมเครองควอนตมคอมพวเตอรท
รนอลกอรทมนไดจรง แตเราสามารถออกแบบอลกอรทมและตรวจสอบความถกตองโดยใชโปรแกรมจ าลองบน
เครองคอมพวเตอรแบบคลาสสกได
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 177
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 178
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 179
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 180
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 181
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 182
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 183
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 184
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 185
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 186
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 187
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 188
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 189
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 190
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 191
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 192
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 193
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 194
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 195
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 196
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 197
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 198
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 199
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 200
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 201
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 202
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 203
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 204
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 205
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 206
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 207
เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 208