Processor Datapath and Instruction Cycle by akkapolkinbuangam

VIEWS: 348 PAGES: 18

More Info
									                                                 บทที่ 11
                                  Processor Datapath and Instruction Cycle

           เนื้อหาในบทนี้มีจุดประสงคเพื่อใหนักศึกษาเขาใจการทํางานภายในของไมโคร-โพรเซสเซอร
ซึ่งเปนพื้นฐานสําคัญที่นักศึกษาสาขาคอมพิวเตอรทุกคนควรจะรู โดยจะยกตัวอยางใหนักศึกษาไดเขา
ใจจากโพรเซสเซอรอยางงายขนาด 8 บิตซึ่งมีชื่อวา “Simple1” โดยเนื้อหาจะอธิบายโครงสรางในสวน
ของ Datapath ของโพรเซสเซอรตัวนี้ทั้งหมดพรอมทั้งสัญญาณควบคุมตางๆ ซึ่งจะถูกควบคุมโดยตัว
Control unit ที่จะเรียนในบทที่ 12 เปนลําดับตอไป
           โพรเซสเซอร Simple1 เปนซีพียูอยางงายขนาด 8 บิต ซึ่งผูเขียนออกแบบขึ้นมาเองเพื่อวัตถุ
ประสงคหลักสําหรับใชในการเรียนการสอนวิชา Computer Architecture ตัวซีพียูมีแอดเดรสบัส
จํานวน 16 เสน สามารถอางหนวยความจําไดสูงสุด 64 กิโลไบต และมีดาตาบัสขนาด 8 บิต ดังแสดง
ในรูป 11.1 มีรีจิสเตอรใชงานทั่วไปจํานวน 16 ตัว ชื่อ R0-R15 สถาปตยกรรมของซีพียูมีคําสั่งควบคุม
ทั้งสิ้น 16 คําสั่ง และยังไมสนับสนุนการอินเตอรรัพต(ในขณะนี้)



                                           A0-A15            Address bus


                                           D0-D7              Data bus


                                              RD

                                              WR


                                       รูปที่ 11.1 โพรเซสเซอร Simple1

             โพรเซสเซอรมีแฟลกสําหรับเก็บสถานะทางดานคณิตศาสตรและลอจิกจํานวน 5 ตัวดวยกัน
ซึ่งไดแก
             - CF = Carry Flag                เก็บสถานะการทดและการยืมของคําสั่งทางคณิตศาสตร
             - OV = Overflow Flag             เซ็ทเปน 1 กรณีที่ผลลัพธการคูณเลขแบบมีเครื่องหมายเกิด
                                              สถานะ Overflow หรือ underflow
             - ZF = Zero Flag                 เซ็ทเปน 1 เมื่อผลลัพธการคํานวณจาก ALU เปนศูนย
             - PF = Parity Flag               แสดงคาพาริตี้ของผลลัพธจากการทํางานของ ALU โดย
                                              ทํางานแบบ Odd Parity


241-307 Computer Systems Architectures and Organizations                            ปญญยศ ไชยกาฬ
ตารางที่ 11.1 คําสั่งควบคุมของ Simple1 จํานวน 16 คําสั่ง
                                                                                               ความยาว            ผลกระทบตอแฟลก
       คําสั่ง                                       ความหมาย
                                                                                                ของคําสั่ง   CF   SF ZF OV         PF
INV Rn                 กลับคาบิตของรีจิสเตอร Rn เปนตรงกันขาม                               1 byte                   x           x
SETF b,v               เซ็ทคาบิตของแฟลกที่ระบุใหมีคาตามที่กําหนด เชน SETF CF,1             1 byte        ?     ?    ?     ?     ?
Load Rn,[R1R0]         กอปปคาในหนวยความจําตําแหนงที่ระบุมาใสในรีจิสเตอร Rn             1 byte
Store [R1R0], Rn       กอปปคาในรีจิสเตอร Rn มาใสในหนวยความจําตําแหนงที่ระบุ            1 byte
Branch [R1R0]          บรานชแบบไมมีเงื่อนไขไปยังแอดเดรสที่ระบุ                               1 byte
Branch ZF, [R1R0]      บรานชไปยังแอดเดรสที่ระบุหาก ZF=1                                       1 byte
Branch SF, [R1R0]      บรานชไปยังแอดเดรสที่ระบุหาก SF=1                                       1 byte
Branch PF, [R1R0]      บรานชไปยังแอดเดรสที่ระบุหาก PF=1                                       1 byte
Branch OV, [R1R0]      บรานชไปยังแอดเดรสที่ระบุหาก OV=1                                       1 byte
Branch CF, [R1R0]      บรานชไปยังแอดเดรสที่ระบุหาก CF=1                                       1 byte
ADD Rx,Ry              Rx <= Rx+Ry (Addition)                                                  2 bytes       x    x     x     x    x
ADDC Rx,Ry             Rx <= Rx+Ry+CF (Addition with carry flag)                               2 bytes       x    x     x     x    x
SUBB Rx,Ry             Rx <= Rx – Ry – CF (Subtraction with borrow flag)                       2 bytes       x    x     x     x    x
AND Rx,Ry              Rx <= Rx & Ry                                                           2 bytes                  x          x
OR Rx,Ry               Rx <= Rx | Ry                                                           2 bytes                  x          x
Load Rx,#data8         อานคาคงที่คา #data8 มาใสในรีจิสเตอร Rx                             2 bytes

241-307 Computer Systems Architectures and Organizations                       ปญญยศ ไชยกาฬ
          เพื่อใหงายตอการทําความเขาใจของผูเริ่มตน ผูเขียนจึงไดออกแบบซีพียูซึ่งมีการทํางานที่พื้น
ฐานที่สุด โดยออกแบบใหคําสั่งมี 2 ขนาดความยาว คือ คําสั่งขนาด 1 ไบตจํานวน 10 คําสั่ง และคํา
สั่งขนาด 2 ไบตจํานวน 6 คําสั่ง รีจิสเตอร R0 และ R1 นอกจากสามารถใชเก็บตัวตั้งและผลลัพธการ
ทํางานทางคณิตศาสตรตามปกติแลวยังใชเปนตัวชี้ตําแหนงแอดเดรสของหนวยความจําขนาด 16 บิต
อีกดวย โดยรีจิสเตอร R1 เก็บตําแหนงแอดเดรสไบตสูง และรีจิสเตอร R0 เก็บ ตําแหนงแอดเดรสไบต
ต่ํา สมมุติ ตองการอานหนวยความจําตําแหนง 0x2F38H เขามาใสในรีจิสเตอร R7 สามารถทําไดโดย
ใชคําสั่งดังนี้
                                                Load R1, #2FH
                                                Load R0,#38H
                                                Load R7,[R1R0]

        คําสั่ง SETF ใชสําหรับเซ็ทคาแฟลกของซีพียูใหมีคาตามที่ระบุ เชน
        SETF CY, 0 เซ็ทให Carry Flag มีคาเทากับ ศูนย
        SETF CY, 1 เซ็ทให Carry Flag มีคาเทากับ หนึ่ง
        SETF ZF, 1 เซ็ทให Zero Flag มีคาเทากับ หนึ่ง

         รูปที่ 11.2 แสดงโครงสรางภายในของซีพียู Simple1 โดยโครงสรางภายในจะประกอบไปดวย
รีจิสเตอรและวงจรอื่นๆ ตอรวมกันโดยใช Single bus ขนาด 16 บิตในการเชื่อมตอ รีจิสเตอรทุกตัว
ในระบบมีขนาด 8 บิต ยกเวนรีจิสเตอร Z,PC,IR และ MAR จะมีขนาด 16 บิต วงจรที่แสดงการเชื่อม
ตอกันของสวนประกอบภายในของโพรเซสเซอรดังรูปที่ 11.2 นี้เรียกโดยรวมวา processor datapath
         ALU ของซีพียูนอกจากจะสามารถทําโอเปอเรชั่นทางคณิตศาสตรและลอจิกขนาด 8 บิตได
แลวยังสามารถทําการบวกเลขแบบ 16 บิตไดอีกดวยซึ่งความสามารถนี้จําเปนตองใชสําหรับการเพิ่ม
คาในรีจิสเตอร PC ดังจะอธิบายรายละเอียดในหัวขอ Instruction cycle ตอไป
         เอาตพุตของรีจิสเตอรแตละตัวจะตอกับ internal bus โดยมี tri-state gate คั่นอยู โดยมี
สัญญาณควบคุมการไหลของขอมูลวาจะอนุญาตใหเอาตพุตของรีจิสเตอรนั้นๆ            สามารถไหลลงสู
internal bus ไดหรือไม เชน ที่เอาตพุตของรีจิสเตอร Z จะมีสัญญาณ Zout คอยควบคุมอยู หาก
สัญญาณ Zout มีคาเปน 1 ขอมูลเอาตพุตของรีจิสเตอร Z ก็จะสามารถไหลลงสู internal bus ได ใน
ทางกลับกัน หากสัญญาณ Zout มีคาเปน 0 ขอมูลเอาตพุตของรีจิสเตอร Z ก็ไมสามารถไหลลงสู
internal bus ได



241-307 Computer Systems Architectures and Organizations                              ปญญยศ ไชยกาฬ
                                                                                      Constant 1
                                                                                                               DataBus

                                                                                                   MDRoutE           MDRinE




                                                                           MUX
                                                ALU




                                                                                                             MDR



                                                                                                                             MAR



                                                                                                                                              PC
                                                                                             Y
                                                                         MUX_sel_Y
                  register Z




                                                                                                       Yin         MDRin           MARin             PCin
                                                Flags
                                                                                                                    MDRout           MARout              PCout
         Zout                  Zin




                                                                        16 bit internal bus

                                     R15out                R1out

                                                                          R0out_F
                                     R1out_to_H
                                                                                                                                          Flag_decoder
                                                                                         Instruction
                                                                                          Decoder                                                  ...




                                                                                                                     IR
          R15in                          R1in                                 R0in                                                 IRin
                               R15




                                                      R1



                                                                   R0




                                                                                                ...
                                        ::




                                                                                                                               IR_H_in


                                                                              รูปที่ 11.2 Simple1’s Datapath


241-307 Computer Systems Architectures and Organizations                                       ปญญยศ ไชยกาฬ
ตารางที่ 11.2สัญญาณควบคุมตางๆ ของ Simple1
สัญญาณ             หนาที่ใชงาน
Zout               สงขอมูลจากเอาตพุตขนาด 16 บิตของรีจิสเตอร Z ลงสู Internal Bus
Zin                เขียนขอมูลลงสูรีจิสเตอร Z
ZFin               เขียนขอมูลลงสู Zero Flag
PFin               เขียนขอมูลลงสู Parity Flag
SFin               เขียนขอมูลลงสู Sign Flag
CFin               เขียนขอมูลลงสู Carry Flag
OVin               เขียนขอมูลลงสู Overflow Flag
R0in               เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R0
R1in               เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R1
R2in               เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R2
R3in               เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R3
R4in               เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R4
R5in               เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R5
...                ...
R14in              เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R14
R15in              เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร R15
R0out              สัญญาณเสนที่ 1 สําหรับสงขอมูลจากเอาตพุตของรีจิสเตอร R0 ลงสู Internal Bus

R1out              สงขอมูลจากเอาตพุตของรีจิสเตอร R1 ลงสู Internal Bus
R2out              สงขอมูลจากเอาตพุตของรีจิสเตอร R2 ลงสู Internal Bus
R3out              สงขอมูลจากเอาตพุตของรีจิสเตอร R3 ลงสู Internal Bus
R4out              สงขอมูลจากเอาตพุตของรีจิสเตอร R4 ลงสู Internal Bus
R5out              สงขอมูลจากเอาตพุตของรีจิสเตอร R5 ลงสู Internal Bus
...
R14out             สงขอมูลจากเอาตพุตของรีจิสเตอร R14 ลงสู Internal Bus
R15out             สงขอมูลจากเอาตพุตของรีจิสเตอร R15 ลงสู Internal Bus
R1out_to_H         สงขอมูลจากเอาตพุตของรีจิสเตอร R1 ลงสู บิตที่ 8-15 ของ Internal Bus
IRin               เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร IR ไบตลาง
IR_H_in            เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร IR ไบตสูง

241-307 Computer Systems Architectures and Organizations                            ปญญยศ ไชยกาฬ
ตารางที่ 11.2สัญญาณควบคุมตางๆ ของ Simple1 (ตอ)
สัญญาณ             หนาที่ใชงาน
Yin                เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร Y
MUX_sel_Y          ในกรณีที่ MUX_sel_Y=0 เปนการสั่งให MUX สงคาคงที่คา “1” ใหกับ ALU
                   แตถา MUX_sel_Y =1 เปนการสงคาจากรีจิสเตอร Y ใหกับ ALU
MDRin              เขียนขอมูลจาก Internal bus ลงสูรีจิสเตอร MDR
MDRout             สงขอมูลจากเอาตพุตของรีจิสเตอร MDR ลงสู Internal Bus
MDRoutE            สงขอมูลจากเอาตพุตของรีจิสเตอร MDR ลงสู DataBus (External)
MDRinE             เขียนขอมูลจาก (External) Databus ลงสูรีจิสเตอร MDR
MARin              เขียนขอมูลจาก Internal bus ทั้ง 16 บิตลงสูรีจิสเตอร MAR
MARout             สงขอมูลจากเอาตพุตทั้ง 16 บิตของรีจิสเตอร MAR ลงสู Internal Bus
PCin               เขียนขอมูลจาก Internal bus ทั้ง 16 บิตลงสูรีจิสเตอร PC
PCout              สงขอมูลจากเอาตพุตทั้ง 16 บิตของรีจิสเตอร PC ลงสู Internal Bus
ALUadd             บวกขอมูลขนาด 16 บิตซึ่งรับจาก MUX และ Internal bus
ALUaddc            บวกขอมูลขนาด 8 บิตซึ่งรับจาก MUX และ Internal bus และคาจาก Carry
                   flag เขาดวยกัน
ALUsubb            ลบขอมูลขนาด 8 บิตซึ่งรับจาก MUX และ Internal bus และคาจาก Carry
                   flag ดวย
ALUand             ทําโอเปอเรชั่น AND ขอมูลขนาด 8 บิต
ALUor              ทําโอเปอเรชั่น OR ขอมูลขนาด 8 บิต
ALUinv             ทําโอเปอเรชั่น Invert ขอมูลขนาด 8 บิต
End_if_flag_set    รีเซ็ทการทํางานของวงจรนับใน Control Unit เมื่อแฟลกที่ตรวจสอบมีคา
                   เปนลอลิก 1
End                รีเซ็ทการทํางานของวงจรนับใน Control Unit
upd_flag           อัพเดทคาในแฟลกรีจิสเตอร
Mwrite             Memory Write
Mread              Memory Read
R0out_int_bus      สัญญาณเสนที่ 2 สําหรับสงขอมูลจากเอาตพุตของรีจิสเตอร R0 ลงสู Internal Bus

R0out_F            สัญญาณคอยควบคุมการสงขอมูลเอาตพุตจากรีจิสเตอร R0 สู internernal bus




241-307 Computer Systems Architectures and Organizations                          ปญญยศ ไชยกาฬ
                      7      6     5     4     3      2    1     0

                      n3     n2    n1    n0    i3     i2   i1   i0


                                     Rn             0000 = Branch
                                  0000=R0           0001 = INV
                                  0001=R1           0010 = SETF
                                  0010=R2           0011 = LOAD Rn,[R1,R0]
                                     ...            0100 = STORE
                                                    0101 = Branch PF
                                      ..
                                                    0110 = Branch SF
                                 1111=R15
                                                    0111 = Branch CF
                                                    1000 = Branch OV
                                                    1001 = Branch ZF

               second byte                                      first byte

7    6     5      4    3      2     1     0     7      6    5     4     3      2       1   0

0    0     0      0   y3      0
                             y2     y1   y0    x3     x2   x1    x0     i3     i2     i1   i0

                               Ry                        Rx                  1010 = ADD
                            0000=R0                   0000=R0                1011 = ADDC
                            0001=R1                   0001=R1                1100 = SUBB
                            0010=R2                   0010=R2                1101 = AND
                               ...                       ...                 1110 = OR
                               ..                        ..                  1111 = LOAD Rx,#data8
                           1111=R15                  1111=R15


                             รูปที่ 11.3 ฟอรแมตของคําสั่งของ Simple1

       รูปที่ 11.3 แสดงฟอรแมตของคําสั่งทั้งหมดของ Simple1 โดยจะใชขอมูล 4 บิตลางของคําสั่ง
ในการเขารหัส Opcode สวนการเขารหัสของคําสั่ง SETF จะแสดงในรูปที่ 11.4
       ตัวอยางการเขารหัสคําสั่งของคําสั่ง SETF
       SETF CY,1 สามารถเขารหัสไดเปน 10000010
       SETF CY,0 สามารถเขารหัสไดเปน 00000010
       SETF SF,1 สามารถเขารหัสไดเปน 10110010
       SETF SF,0 สามารถเขารหัสไดเปน 00110010
       SETF OV,1 สามารถเขารหัสไดเปน 10010010
       SETF OV,0 สามารถเขารหัสไดเปน 00010010

241-307 Computer Systems Architectures and Organizations                            ปญญยศ ไชยกาฬ
                           0
                           V    b3    b2       b1     0     0      1   0

                                      b
                                000= Carry flag
                                001 = Overflow flag
                                010 = Zero flag
                                011 = Parity flag
                                100 = Sign flag
                               รูปที่ 11.4 การเขารหัสคําสั่ง SETF

Instruction Cycle ของ Simple1
         ไซเคิลการทํางานของคําสั่งของ Simple1 แบงเปน 2 ขั้นตอนหลักคือการเฟตชและเอกซีคิวต
โดยการเฟตชจะใชเวลาในการทํางาน 4 คลอกไซเคิล ดังนี้

คลอกไซเคิลที่.. Register Transfer Notation         สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      0          MAR <= PC                          PCout, MARin
      1          address_bus<= MAR,                 PCout, Mread, MDRinE, Zin, ALUadd,MUXselY=0
                 mem_read, Z<=PC+1,
                 MDR<=mem[MAR]
      2          PC<=Z                              PCin, Zout
      3          IR<=MDR                            IRin, MDRout

        ในการอธิบายการไหลของขอมูลระหวางรีจิสเตอรนั้น มักจะเขียนอธิบายอยูในรูปของ RTN
หรือ Register Transfer Notation เชน สัญลักษณ MAR<=PC จะมีความหมายวาใหสงคาในรีจิสเตอร
PC ไปเขียนใสในรีจิสเตอร MAR เปนตน
        ไซเคิลการทํางานในขั้นตอนการเอกซีคิวตของแตละคําสั่งจะแตกตางกันไป เนื่องจากการเอกซี
คิวตจะทําตอจากการเฟตช ดังนั้นคลอกไซเคิลของการเอกซีคิวตจะเริ่มตนที่คลอกที่ 4

ไซเคิลการเอกซีคิวตของคําสั่ง INV Rn
คลอกไซเคิลที่.. Register Transfer Notation         สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          Z                <= not(Rn)        ALUinv, Zin, Rnout, PFin, ZFin
      5          Rn               <= Z              Zout, Rnin, End


241-307 Computer Systems Architectures and Organizations                        ปญญยศ ไชยกาฬ
ไซเคิลการเอกซีคิวตของคําสั่ง SETF b,V
คลอกไซเคิลที่.. Register Transfer Notation     สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          Flagb <= v                     upd_flag, End

ไซเคิลการเอกซีคิวตของคําสั่ง LOAD Rn,[R1R0]
คลอกไซเคิลที่.. Register Transfer Notation     สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MARH <= R1, MARL<= R0          MARin, R1_out_to_H, R0out_int_bus
      5          mem_read,                      MDRinE, Mread
                 MDR <= memory[MAR]
      6          Rn<= MDR                       MDRout, Rnin ,End

ไซเคิลการเอกซีคิวตของคําสั่ง STORE [R1R0],Rn
คลอกไซเคิลที่.. Register Transfer Notation     สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MARH <= R1, MARL<= R0          MARin, R1_out_to_H, R0out_int_bus
      5          MDR <= Rn,                     MDRin, Rnout
      6          mem[MAR] <= MDR,               MDRoutE, Mwrite
                 mem_write
      7          deactivate write signal        MDRoutE,End

ไซเคิลการเอกซีคิวตของคําสั่ง Branch [R1R0]
คลอกไซเคิลที่.. Register Transfer Notation     สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          PCH <= R1, PCL<= R0            PCin, R1_out_to_H, R0out_int_bus ,End

ไซเคิลการเอกซีคิวตของคําสั่ง Branch OV,[R1R0]
คลอกไซเคิลที่.. Register Transfer Notation สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          if OV=1 then End              End_if_flag_set
      5          PCH <= R1, PCL<= R0           PCin, R1_out_to_H, R0out_int_bus ,End




241-307 Computer Systems Architectures and Organizations                  ปญญยศ ไชยกาฬ
ไซเคิลการเอกซีคิวตของคําสั่ง Branch ZF,[R1R0]
คลอกไซเคิลที่.. Register Transfer Notation สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          if ZF=1 then End              End_if_flag_set
      5          PCH <= R1, PCL<= R0           PCin, R1_out_to_H, R0out_int_bus ,End

ไซเคิลการเอกซีคิวตของคําสั่ง Branch SF,[R1R0]
คลอกไซเคิลที่.. Register Transfer Notation สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          if SF=1 then End              End_if_flag_set
      5          PCH <= R1, PCL<= R0           PCin, R1_out_to_H, R0out_int_bus ,End

ไซเคิลการเอกซีคิวตของคําสั่ง Branch CF,[R1R0]
คลอกไซเคิลที่.. Register Transfer Notation สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          if CF=1 then End              End_if_flag_set
      5          PCH <= R1, PCL<= R0           PCin, R1_out_to_H, R0out_int_bus ,End

ไซเคิลการเอกซีคิวตของคําสั่ง Branch PF,[R1R0]
คลอกไซเคิลที่.. Register Transfer Notation สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          if PF=1 then End              End_if_flag_set
      5          PCH <= R1, PCL<= R0           PCin, R1_out_to_H, R0out_int_bus ,End




                                                รั้งที่ 4
                                              ค
                                   ับแ กไข
                              ฉบ


                                                                               มีตอ....

241-307 Computer Systems Architectures and Organizations              ปญญยศ ไชยกาฬ
ไซเคิลการเอกซีคิวตของคําสั่ง ADD Rx, Ry
คลอกไซเคิลที่.. Register Transfer Notation   สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MAR <= PC                    PCout, MARin
      5          address_bus<= MAR,           PCout, Mread, MDRinE, Zin, ALUadd,MUXselY=0
                 mem_read, Z<=PC+1,
                 MDR<=mem[MAR]
      6          PC<=Z                        PCin, Zout
      7          IR<=MDR                      IR_Hin, MDRout
      8          Y       <= Ry                Yin, Ryout
      9          Z       <= Rx +Y             Rxout,MUXselY=1,ALUADD, Zin, CFin, OVin,
                                              ZFin,SFin,PFin
     10         Rx       <= Z                 Zout, Rxin, End

ไซเคิลการเอกซีคิวตของคําสั่ง ADDC Rx, Ry
คลอกไซเคิลที่.. Register Transfer Notation   สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MAR <= PC                    PCout, MARin
      5          address_bus<= MAR,           PCout,Mread, MDRinE, Zin, ALUadd,MUXselY=0
                 mem_read, Z<=PC+1,
                 MDR<=mem[MAR]
      6          PC<=Z                        PCin, Zout
      7          IR<=MDR                      IR_Hin, MDRout
      8          Y<= Ry                       Yin, Ryout
      9          Z<= Rx +Y+CF                 Rxout,MUXselY=1,ALUADDC, Zin, CFin, OVin,
                                              ZFin,SFin,PFin
     10         Rx<= Z                        Zout, Rxin, End


                                                  รั้งที่ 4
                                                ค
                                     ับแ กไข
                                ฉบ
241-307 Computer Systems Architectures and Organizations                   ปญญยศ ไชยกาฬ
ไซเคิลการเอกซีคิวตของคําสั่ง SUBB Rx, Ry
คลอกไซเคิลที่.. Register Transfer Notation   สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MAR <= PC                    PCout, MARin
      5          address_bus<= MAR,           PCout,Mread, MDRinE, Zin, ALUadd,MUXselY=0
                 mem_read, Z<=PC+1,
                 MDR<=mem[MAR]
      6          PC<=Z                        PCin, Zout
      7          IR<=MDR                      IR_Hin, MDRout
      8          Y<= Ry                       Yin, Ryout
      9          Z<= Rx –Y - CF               Rxout,MUXselY=1,ALUSUBB, Zin, CFin, OVin,
                                              ZFin,SFin,PFin
     10         Rx<= Z                        Zout, Rxin, End

ไซเคิลการเอกซีคิวตของคําสั่ง AND Rx, Ry
คลอกไซเคิลที่.. Register Transfer Notation   สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MAR <= PC                    PCout, MARin
      5          address_bus<= MAR,           PCout,Mread, MDRinE, Zin, ALUadd,MUXselY=0
                 mem_read, Z<=PC+1,
                 MDR<=mem[MAR]
      6          PC<=Z                        PCin, Zout
      7          IR<=MDR                      IR_Hin, MDRout
      8          Y       <= Ry                Yin, Ryout
      9          Z       <= Rx & Y            Rxout,MUXselY=1,ALUAND, Zin, ZFin,PFin
      10         Rx <= Z                      Zout, Rxin, End




241-307 Computer Systems Architectures and Organizations                   ปญญยศ ไชยกาฬ
ไซเคิลการเอกซีคิวตของคําสั่ง OR Rx, Ry
คลอกไซเคิลที่.. Register Transfer Notation    สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MAR <= PC                     PCout, MARin
      5          address_bus<= MAR,            PCout,Mread, MDRinE, Zin, ALUadd,MUXselY=0
                 mem_read, Z<=PC+1,
                 MDR<=mem[MAR]
      6          PC<=Z                         PCin, Zout
      7          IR<=MDR                       IR_Hin, MDRout
      8          Y       <= Ry                 Yin, Ryout
      9          Z       <= Rx | Y             Rxout,MUXselY=1,ALUOR, Zin, ZFin,PFin
      10         Rx <= Z                       Zout, Rxin, End

ไซเคิลการเอกซีคิวตของคําสั่ง Load Rx,#data8
คลอกไซเคิลที่.. Register Transfer Notation    สัญญาณควบคุมที่แอกตีฟในแตละคลอกไซเคิล
      4          MAR <= PC                     PCout, MARin
      5          address_bus<= MAR,            PCout,Mread, MDRinE, Zin, ALUadd,MUXselY=0
                 mem_read, Z<=PC+1,
                 MDR<=mem[MAR]
      6          PC<=Z                         PCin, Zout
      7          Rx<= MDR                      Rxin, MDRout, End


       ที่คลอกไซเคิลสุดทายของการเอกซีคิวตทุกคําสั่งจะมีสัญญาณ End แอกตีฟเสมอ โดย
สัญญาณ End นี้จะใชรวมกับสัญญาณ End_if_flag_set ดังรปที่ 11.5 ในการสรางสัญญาณสําหรับ
การ Reset ตัววงจรนับภายใน Control Unit ซึ่งจะเรียนรายละเอียดในบทถัดไป




241-307 Computer Systems Architectures and Organizations                    ปญญยศ ไชยกาฬ
  Branch_ZF_detected
                   ZF

  Branch_CF_detected
                  CF

  Branch_SF_detected
                   SF
                                                                                                   CU_END
  Branch_PF_detected
                   PF

 Branch_OV_detected
                   OV


        End_if_flag_set


                  End


                รูปที่ 11.5 วงจรสรางสัญญาณเพื่อที่จะรีเซ็ทวงจรนับในตัว Control Unit

Instruction Decoder
         เปนตัวถอดรหัสคําสั่งที่อยูในรีจิสเตอร IR วาเปนคําสั่งใด เนื่องจากคําสั่งของซีพียูมี 16 คําสั่ง
ดังนั้นเอาตพุตของวงจร instruction decoder จึงมีจํานวน 16 บิต โดยมีรายชื่อของแตละสัญญาณดัง
แสดงในตารางที่ 11.3

ตารางที่ 11.3 สัญญาณเอาตพุตซึ่งไดจากวงจร Instruction Decoder
ชื่อสัญญาณ                                                       สัญญาณแอกตีฟเปนลอจิก 1 เมื่อ
Branch_ZF_detected                      คําสั่งใน IR คือคําสั่ง Branch ZF,[R1R0]
Branch_CF_detected                      คําสั่งใน IR คือคําสั่ง Branch CF,[R1R0]
Branch_PF_detected                      คําสั่งใน IR คือคําสั่ง Branch PF,[R1R0]
Branch_SF_detected                      คําสั่งใน IR คือคําสั่ง Branch SF,[R1R0]
Branch_OV_detected                      คําสั่งใน IR คือคําสั่ง Branch OV,[R1R0]
Branch_detected                         คําสั่งใน IR คือคําสั่ง Branch [R1R0]
instruction_SETF_detected               คําสั่งใน IR คือคําสั่ง SETF b,V
instruction_ADD_detected                คําสั่งใน IR คือคําสั่ง ADD Rx,Ry
instruction_ADDC_detected               คําสั่งใน IR คือคําสั่ง ADDC Rx,Ry
instruction_SUBB_detected               คําสั่งใน IR คือคําสั่ง SUBB Rx,Ry
instruction_AND_detected                คําสั่งใน IR คือคําสั่ง AND Rx,Ry
instruction_OR_detected                 คําสั่งใน IR คือคําสั่ง OR Rx,Ry
instruction_INV_detected                คําสั่งใน IR คือคําสั่ง INV Rn
instruction_LD_Rn_detected              คําสั่งใน IR คือคําสั่ง Load Rn,[R1R0]
instruction_LD_Rx_detected              คําสั่งใน IR คือคําสั่ง Load Rx,#data8
instruction_STORE_detected              คําสั่งใน IR คือคําสั่ง Store [R1R0],Rn

241-307 Computer Systems Architectures and Organizations                                         ปญญยศ ไชยกาฬ
          รีจิสเตอร Flag ใชสําหรับเก็บสถานะผลลัพธทางดานคณิตศาสตรและลอจิก โดยตารางที่ 11.1
แสดงใหเห็นวาคําสั่งใดบางมีผลกระทบตอแฟลกตัวใด นอกเหนือจากคําสั่งทางคณิตศาสตรและลอจิก
จะมีการอัพเดทคาในแฟลกแลว คําสั่ง SETF เปนคําสั่งที่สามารถเขาถึงขอมูลแฟลกแตละบิตไดโดย
ตรงดวยการใชวงจร flag_decoder ดังแสดงในรูปที่ 11.7 เพื่อที่จะถอดรหัสวาคําสั่ง SETF จะทําการ
เขาถึงขอมูลในแฟลกตัวใด
          รูปที่ 11.6 แสดงตัวอยางวงจรของ Zero flag หากเปนการเขียนคาลงแฟลกจากผลลัพธการ
ทํางานของคําสั่งทางคณิตศาสตรและลอจิกแลว สัญญาณ ZFin จะแอกตีฟและซีเลกเตอร Sel1 จะทํา
การเลือกคา Status_from_Alu สงใหกับอินพุตของแฟลกรีจิสเตอร
          ในกรณีที่มีการเขียนคาลงแฟลกโดยใชคําสั่ง SETF ตัวซีเลกเตอร Sel1 จะเลือกที่จะสงคา
สัญญาณบิตที่ 7 ของรีจิสเตอร IR ไปใหกับอินพุตของแฟลกรีจิสเตอร ดังรูปที่ 11.6 โดยการเขียนคาใน
แฟลกจะเกิดขึ้นก็ตอเมื่อตรวจจับไดวาคําสั่งไดระบุแฟลกนั้น และสัญญาณ upd_flag จะแอกตีฟใน
คลอกไซเคิลที่ 4 ของคําสั่ง SETF


                 status from ALU

                                                  Sel1         data_in     data_out

                    from IR(7)


                                                                  CLK

         instruction_SETF_detected
                                                                   write_enable
                            Clock




                   zero_flag_detected

                       upd_flag

                         ZFin

                                     รูปที่ 11.6 วงจรการอัพเดทคา Zero Flag

                                             flag_decoder

                                                         ZF        zero_flag_detected
                                 IR(6)       D2
                                                         PF       parity_flag_detected
                                 IR(5)       D1          CF        carry_flag_detected
                                                         OV       overflow_flag_detected
                                 IR(4)       D0
                                                         SF        sign_flag_detected

      instruction_SETF_detected


                            รูปที่ 11.7 วงจรถอดรหัสเลือกแฟลกของคําสั่ง SETF


241-307 Computer Systems Architectures and Organizations                                   ปญญยศ ไชยกาฬ
สัญญาณควบคุมการอานเขียนหนวยความจํา
        สัญญาณ Mread และ Mwrite ที่แอกตีฟในแตละขั้นตอนการทํางานดังอธิบายมาแลวนั้น
แอกตีฟที่ลอจิกสูง แตเนื่องจากสัญญาณอานเขียนหนวยความจําที่ซีพียู Simple1 สงออกไปใหกับ
วงจรหนวยความจําภายนอกนั้นแอกตีฟที่ลอจิกต่ําซึ่งก็คือ สัญญาณ RD และ WR ดังรูปที่ 11.1 ดังนั้น
จึงตองมีอินเวอรทเตอรกลับคาลอจิกของสัญญาณดังรูปที่ 11.8
                                  Mread                                  RD



                                  Mwrite                                 WR



                                รูปที่ 11.8 วงจรสรางสัญญาณ RD และ WR
สัญญาณ R0out_F
       R0 สามารถสงขอมูลออกไปสู internal bus ได ดวย 2 เงื่อนไขดวยกันคือ (1) สัญญาณ R0out
แอกตีฟ หรือ (2) สัญญาณ R0out_int_bus แอกตีฟ ดังนั้น สัญญาณ R0out_F สามารถสรางขึ้นมาดวยการใช
โอเปอเรชั่นดังรูปที่ 11.9
                   R0out_int_bus
                                                                              R0out_F



                                                                                                   ที่ 4
                       R0out



                                                                                              ครั้ง
                                         รูปที่ 11.9 การสราง สัญญาณ R0out_F

                                                                                       กไข
                                           Rxout




                                                                                   ับแ
                                  Rnout




                                                                              ฉบ
                                           Rxin

                                  Rnin



                                                                    R0                        R0out
                        IR(7)
                                                                                               R0in
                                                                    R1                        R1out
                        IR(6)
                                                                                               R1in
                        IR(5)                      Rx_and_Rn_Decoder

                        IR(4)


                                                                   R15                        R15out
                                                                                              R15in


                          Ryout

                         Ryin

                                                                    R0
                       IR(11)

                                                                    R1
                       IR(10)


                        IR(9)                         Ry_Decoder

                        IR(8)


                                                                   R15




                        รูปที่ 11.10 วงจรถอดรหัสสัญญาณ Rx, Ry, Rn
241-307 Computer Systems Architectures and Organizations                                      ปญญยศ ไชยกาฬ
ตัวอยางการเขียนโปรแกรมควบคุมซีพียู Simple1
    โปรแกรมตัวอยางที่จะกลาวถึงตอไปนี้เปนการทําการวนลูปเพื่อที่จะบวกคาในอะเรย โดยมีการ
ทํางานเทียบไดกับอัลกอริทึมที่ระบุในโปรแกรมภาษา C ตอไปนี้
                              char i;
                              char a[16], b[16], c[16];
                              for(i=0;i<16;i++)
                              {
                                     c[i] = a[i] +b[i];
                              }
                              i= 74;



         สามารถเขียนโปรแกรมภาษาแอสเซมบลี้ของ Simple1 ไดดังนี้
;เก็บตัวแปร a ไวที่ตําแหนงแอดเดรส 0x8000-0x800F
;เก็บตัวแปร b ไวที่ตําแหนงแอดเดรส 0x8010-0x801F
;เก็บตัวแปร c ไวที่ตําแหนงแอดเดรส 0x8020-0x802F
;เก็บตัวแปร i ไวที่ตําแหนงแอดเดรส 0x8030
                  org 0000H
                  Load R15,#1           ;R15 เก็บคาคงที่คาเทากับ 1
                  Load R12,#00H         ;R12 เก็บ pointer ของตัวแปร a
                  Load R11,#10H         ;R11 เก็บ pointer ของตัวแปร b
                  Load R10,#20H         ;R10 เก็บ pointer ของตัวแปร c
                  Load R1,#80H
                  Load R0,#30H          ;R1R0 ชี้ตัวแปร i
                  Load R14,#0           ;R14 เก็บคาคงที่คาเทากับ 0
                  Store [R1R0],R14      ;ใหตัวแปร i เริ่มตนเปน 0
                  Load R2,[R1R0]        ;ใช R2 เก็บคาตัวแปร i
ADDR17:           ADD R14,R14           ;เคลียรคาใน CF ใหมีคาเปน 0
                  Load R13,#0FH         ;R13 เก็บคาคงที่คาเทากับ 16
                  SUBB R13,R2           ;เช็ควา i < 16 หรือไม
                  Load R1,#00H
                  Load R0,#63           ;เตรียมกระโดดไปยังตําแหนง 006310 หาก ZF=1
                  Branch ZF, [R1R0] ;หาก i==16 ใหจบการวนลูป
                  Load R1,#80H          ;R1 กลับมาชี้ตําแหนงของ data ใหม
                  ADD R12, R2           ;บวก pointer ของ a ดวย i
                  ADD R11, R2           ;บวก pointer ของ b ดวย i
241-307 Computer Systems Architectures and Organizations                      ปญญยศ ไชยกาฬ
                ADD R10, R2                ;บวก pointer ของ c ดวย i
                Load R0,#0
                ADD R0,R12
                Load R3,[R1R0]             ;อานตัวแปร a[i] ใสใน R3
                Load R0,#0
                ADD R0,R11
                Load R4,[R1R0]             ;อานตัวแปร b[i] ใสใน R4
                ADD R4,R3                  ;R4 = a[i]+b[i]
                Load R0,#0
                ADD R0,R10
                Store [R1R0],R4            ;c[i] = a[i]+b[i]
                ADD R2,R15                 ;i=i+1
                Load R0,#30H               ;R0R1 ชี้ตัวแปร i
                Store [R1R0],R2            ;update คาตัวแปร i ใสในหนวยความจํา
                Load R1,#00H
                Load R0,#17                ;เตรียมกระโดดไปยังตําแหนง 001710
                Branch [R1R0]              ;กลับไปยังแอดเดรส 17 ใหม
ADDR63:         Load R1,#00H
                Load R0,#30H
                Load R2,#74                ;ให i =74
                Store [R1R0],R2

      จากตัวอยางที่กลาวมานักศึกษาคงพอจะสังเกตเห็นไดวาซีพียูที่มีคําสั่งใหใชงานนอยนั้นเขียน
โปรแกรมไดยากกวาซีพียูที่มีคําสั่งใหใชงานมากกวา ซึ่งโปรแกรมดังกลาว หากนําไปเขียนดวยภาษา
แอสเซมบลี้ของ 80x86 จะสามารถทําไดงายกวามาก




                        -------------------------------------------------------------



241-307 Computer Systems Architectures and Organizations                                ปญญยศ ไชยกาฬ

								
To top