[Computer Architecture] - processor (1)

2022. 10. 23. 03:08· Computer Science/Computer Architecture
목차
  1. 📕Introduction
  2. 📕Basic RISC - V Implementation
  3. 📕High - Level View of a RISC-V Implementation
  4. 📕Conciderations on Implementation
  5. 📕Basic implementation of the RISC - V subset
  6. 📕Logic Design Conventions
  7. 📕Clocking Methodlogy
  8. 📕Building Datapath
  9. 📕R-format Instruction Support
  10. 📕Load/Store Instruction Support
  11. 📕Branch Instruction Support
  12. 📕Datapath for Branch Instruction
  13. 📕Creating a Single Datapath
  14. 📕Full Datapath
  15. 📕ALU Control
  16. 📕ALU Control Input
  17. 📕Truth table for ALU control
  18. 📕Designing the Main control Unit
  19. 📕Simplifying the immGen HardWare
  20. 📕Simplifying ImmGen Hardware(2)
  21. 📕Datapath with Control Lines
  22. 📕Control Signals

📕Introduction

  • 컴퓨터의 성능은 3가지 요소로 결정된다.
    • Instruction count : ISA와 컴파일러
    • Clock Cycle time : CPU hardware에 의해 결정된다.
    • Clock Cycles Per Instruction(CPI) : CPU Hardware에 의해 결정된다.

📕Basic RISC - V Implementation

  • RISC - V 에는 두 가지 실행 버전이 있습니다.
    • A simplified (sequntial) version
    • pipelined version
  • RISC - instruction set
    • memory - reference instruction : load/store doubleword(LW, SW)
    • The arithmetic - logical instruction : add, sub , and , or
    • The conditional branch instruction  : branch if equal (beq)
  • 모든 인스트럭션 단계는 두 번째 단계는 동일하다.
    • 코드를 포함하고  메모리로부터 인스트럭션을 fetch 한 memory에게 Program Counter(PC)를 보낸다.
    • 하나 혹은 2개의 레지스터를 읽는다.
  • 위의 공통된 단계가 끝나면 각자의 인스트럭션에 따라 수행하는 동작들이 다르다.
    • ex) Arithmetic instructions은 두 개의 레지스터 (operation)을 수행, 1개의 레지스터(계산 결과 저장)

📕High - Level View of a RISC-V Implementation

  • RISC - V의 datapath를 간략화 한 그림이다.
    • data path는 PC, adder, ALU, instruction and data memory and registers를 포함한다.

📗Arithmetic instruction 실행 예

  •  예를 들어 add x5, x6, x7을 실행한다고 가정할 때
    • instruction fetch ( add x5, x6 , x7) 
      • 메모리로부터 인스트럭션을 fetch 함.
    • Register access  (read x6, x7)
    • Addition (x6+x7)
    • 계산 결과를 x5에다가 write 함.

📗Data transfer의 예

  • lw x5, 40(x6)을 실행한다고 가정할 때
    • instruction fetch (lw x5, 40(x6))
    • Register access ( read x6)
    • memory address를 계산한다.
    • 메모리를 읽는다 ( x6+40) 그리고 x5 레지스터에 data를 write 한다.

📕Conciderations on Implementation

  • 이러한 실행은 두 인스트럭션의 두 가지 중요한 측면을 빠뜨린다.
    • data line은 고정되어 있지 않다.
      • 여러 가지 길로 들어오는데 우리는 거기서 적절한 datapath를 선정해야 한다.
      • 따라서 우리는 multiplexers를 설치해서 적절한 datapath를 결정한다.
    • datapath의 통제가 부족하다.
      • control unit이 필요하다.
      • 예를 들어서 ALU가 어떤 연산을 해야 할지 결정하는 게 control unit이다.

 

📕Basic implementation of the RISC - V subset

  • RISC - V 실행은 3가지 multiplexers와 컨트롤 유닛을 포함한다.

Processor = Datapath + Control

📕Logic Design Conventions

  • datapath는 두 가지 타입의 논리적 elements로 구성되어 있다.
    • Combinational element : An operation element ,
      • 예를 들어 AND gate or an ALU
      • output은 input의 실행 결과이다.
    • State element : A memory element
      • 예를 들어 register or memory
      • 정보를 저장함.
    • A state element는 적어도 2개의 인풋과 하나의 아웃풋을 가진다.
      • 필요한 입력은 기록할 데이터 값과 데이터가 기록될 때를 결정하는 클럭입니다
      • 출력은 이전 클럭 사이클에서 작성된 값을 제공합니다.
    •  

wrtie신호가 1일 때 D에다가 data를 입력하고 Clock cycle이 1일 때 입력되어있던 Data를 Q에 옮긴다.
첫 번째 구간에서는 Clock cycle과 Write 신호가 둘 다 1이라서 Data -> Q로 쓰인다.
하지만 두 번째 구간에서는 Clock cycle과 Write가 둘 다 1이 아니라서 Q로 데이터가 쓰이지 않는다.
마지막 세 번째 구간에서는 Write 신호가 먼저 1로 바뀌어서 D에 data가 쓰이는데 Clock cycle도 Write 신호가 1일 때 1로 바뀌었기 때문에 Q에 data가 쓰인다.

 

💡즉 wrtie 신호와 clock cycle이 둘 다 1일 때 Data -> Q로 옮겨진다.

📕Clocking Methodlogy

  • A clocking methodology는 데이터를 읽고 써야 할 신호를 정의합니다.
  • 우리는  edge-triggered clocking methodology를 추정합니다.
    • 순차적인 논리적 element에 의해 저장된 값들이 오직 clock edge에 의해 업데이트된다는 의미입니다.
    • 즉 clock edge에 의해 값들이 변경되는 것이 edge-triggered-methodology입니다.
  • Combinational logic은 clock cycle 동안 data를 전송한다.
    • clock cycle 사이에서 발생한다. 
    • state element로부터 input을 받고, output을 state element로 보낸다.
    • 가장 긴 delay가 clock period를 결정합니다.

📕Building Datapath

  • Datapath는 프로세서 내에서 데이터를 작동하거나 보유하는 데 사용되는 단위입니다.
    • instruction과 data memories, register file, ALU, adders를 포함합니다.
  • 인스트럭션을 실행하기 위해 필요한 3가지 요소
    • memory : 주어진 주소에 인스트럭션을 저장하거나 제공하기 위해 저장함.
    • Program Counter (PC) : 현재 실행하는 instructio의 주소를 저장합니다.
    • adder : PC를 다음 명령의 주소로 증가시킨다.
  • 어떠한 인스트럭션을 실행하기 위해, 우리는 인스트럭션을 메모리로부터 fetch 해야 합니다. 그리고 다음 인스트럭션에 해당하는 값으로 PC를 증가시켜줘야 합니다.

 

📕R-format Instruction Support

  • R-format 인스트럭션은 두 개의 레지스터를 읽고, ALU 작업을 수행한다. 그리고 결과를 레지스터에 작성한다.
    • ex) add , sub , and or instructions -> add x1, x2, x3
  • 프로세서는 레지스터 파일이라고 불리는 구조에 32개의 레지스터를 저장한다.
    • {x0, x1 ,.... x31}
    • 레지스터에 숫자를 지정해서 읽거나 쓸 수 있다.
    • register가 이동하는 datapath는 5bit만 할당된다. 
      • 왜냐하면 x0~x31까지 있기에 5bit만 할당해도 충분하게 모두 다 사용 가능하기 때문이다.
    • data는 32-bit 
  • ALU는 두 개의 32bit input을 받아서 32-bit의 결괏값을 생산한다.
    • 1-bit zero  : ALU내에서 연산 결과가 0인지를 판단함.
    • 4-bit ALU Operation : ALU의 연산 부호를 결정함.

📕Load/Store Instruction Support

  • Load/store instructions은 base register에다가 12-bit sined offset field를 더해서 메모리 주소를 계산한다.
    • lw x1, offset(x2) or sw x1, offset(x2) ->  x2 : base register
    • Store instruction : register 값 (x1)를 메모리에 write 한다.
    • Load instruction : 메모리를 읽고, 레지스터를 업데이트한다. (x1)
  • 12-bit offset은 32-bit signed value로 확장될 필요성이 있다.
    • Immediate generator unit(Immgen)는 32-bit instruction을 입력으로 받고, Immgen은 12-bit field를 32-bit signed-extended value로 확장시켜준다.

📕Branch Instruction Support

  • Branch instructions는 3개의 연산자를 가진다.
    • 두 개의 레지스터는 동등성을 비교한다.
    • A 12-bit offset은 branch target address를 계산하기 위해 사용한다.
    • ex) beq x1, x2, offset
  • branch target address는 pc에 sign-extend offset을 더해서 계산된다.
    • offset은 1bit shift left 한다.
      • branch는 짝수로만 이동 가능하기에 offset은 짝수라고 가정하고, 하나의 비트를 더 사용하기 위해 1 bit shift left 해준다.
    • 1 bit shift left 하면 무조건 주소는 짝수가 될 것이다.
  • branch가 true인지 false인지에 따라 pc의 값이 결정된다.
    • branch is taken -> branch target address는 new PC가 된다.
    • branch is not taken -> 현재 PC에 값에서 증가한 값이 new PC가 될 것이다.

📕Datapath for Branch Instruction

  • Branch datapath는 두 가지 작업을 합니다.
    • branch target address를 계산합니다.
      • Immgen + Adder
      • 레지스터의 내용을 Test ->  두 개의 레지스터를 빼서 0인지 체크하고 그 결과를 ALU에게 줌. 

📕Creating a Single Datapath

  • 가장 간단한 datapath는 당연하게도 하나의 클럭 사이클에 의해 실행되는 인스트럭션이 될 것입니다.
    • 데이터 경로 리소스는 명령당 두 번 이상 사용할 수 없습니다.
    • 따라서 인스트럭션과 데이터 메모리를 분리했습니다.
  • Multiplexers를 둬서 여러 방향에 datapath 중에서 인스트럭션마다 적절한 datapath를 사용하게 만들었습니다.

 

📕Full Datapath

  • 인스트럭션과 데이터 두 개의 메모리가 있습니다.

  • 여기서 인스트럭션 add x5, x6, x7이 들어왔다고 가정해봅시다.
    1. 우선 인스트럭션 메모리에서 인스트럭션을 페치 합니다.
    2. 그러고 Read register 1,2에 x6, x7을 각각 넣어줍니다. 이때 datapath는 5-bit입니다. [레지스터는 5bit 할당]
    3. register 1,2에 있는 data를 읽어서 ALU에 전달합니다.
    4. 두 개의 data를 ALU에서 ALU operation에 의해서 연산을 하고 그 결과를 datamemory로 보내거나 데이터 메모리를 거치지 않고 바로 wrtie data로 넘어가서 write register인 x7에 값을 작성합니다.
    5. 인스트럭션의 실행이 완료되었으므로,  PC + 4를  PC에 넣어줍니다.
  • beq x5, x6, offset
    • 인스트럭션 메모리에 인스트럭션을 페치 합니다.
    • Read register 1,2에 x5, x6을 넣어줍니다.
    • beq 명령어이기에 ALU에서 x5와 x6을 sub 해줍니다. 
    • 여기서 결과가 0이라면 zero에 신호가 가서 pc+offset 에 해당하는 값이 PC에 저장됩니다.
    • 결과가 0이 아니라면 zero에 신호가 가지 않아서 기존에 진행하던 pc+4의 값이 pc에 저장됩니다.

📕ALU Control

  • RISC - V의 ALU는 4개의 control input에 따라 4개의 경우의 수를 정의합니다.
ALU control lines Function
0000 AND
0001 OR
0010 add
0110 subtract
  • 입력받은 인스트럭션에 따라 ALU는 4가지의 인스트럭션 동작을 실행합니다.
    • Load and Store : ALU가 메모리 주소를 덧셈함.
    • Branch : 두 개의 연산자를 뺄셈 계산하고 그것의 결과가 0인지 아닌지를 check 함.
    • R-type : ALU가 instruction의 funct7과 funct3의 값에 따라 AND, OR, add, subtract 할지를 결정함.
Instruction Format funct7 rs2 rs1 funct3 rd opcode
add(add) R 0000000 reg reg 000 reg 0110011
sub(sub) R 0100000 reg reg 000 reg 0110011

 

📕ALU Control Input

  • 4-bit ALU control input은 small control unit에 의해 생산된다.
    • Instruction funct7 & funct3에 값에 따라 바뀜.
    • ALUOP는 main control unit에 2-bit control field이다.
Instruction
opcode
ALUOP operations funct7 funct3 ALU action ALU control
input
lw 00 load word X X add 0010
sw 00 store word X X add 0010
beq 01 branch if equal X X sub 0110
R-type 10 add 0000000 000 add 0010
R-type 10 sub 0100000 000 sub 0110
R-type 10 and 0000000 111 and 0000
R-type 10 or 0000000 110 or 0001
  • 저기서 X 표시는 신경 쓸 필요 없다는 뜻이다. 굳이 저걸 보지 않아도 인스트럭션을 구별할 수 있음.
  • Multi-level decoding은 main control unit의 사이즈를 줄인다.
    • main control unit은 ALUOP bits를 생성한다.
    • ALUOP는 ALU unit을 컨트롤하는 신호를 만드는 입력으로 사용된다.
  • smaller control units는 또한 control unit의 지연성을 잠제적으로 줄여준다.

 

📕Truth table for ALU control

  • 많은 경우의 수를 굉장히 최적화 한 테이블이다.
  • 실제로 input에 따른 경우의 수는 2^12 = 4096인데 그건 너무나 많은 경우의 수가 있다.
  • 그래서 특정 값을 기준으로 바로바로 최적화할 수 있다.
  • 즉 ALUOP가 00이면 바로 load or store 인스트럭션이라는 것을 알 수 있다.
  • ALUOP 0 값이 1이면 beq, ALUOP1 값이 1이면 R-type이고 R-type 내에서는 funct3의 field와 funct7의 field를 참고해서 결정하면 된다.

 

📕Designing the Main control Unit

  • main control unit을 설계하기 위해서 우리는 인스트럭션의 fied와 control lines를 확인해야 합니다.
  • Opcode field (6 : 0 ) ->  opcode + funct3 (14:12) + funct7(31:25)
  • first register operand rs1 (19:15) -> R-type and Branch
  • second register operand rs2 (24:20 ) -> R-type and Branch
  • The destination register rd (11:7) -> R-type and load
  • 다른 operand는 12-bit offset으로 되는데 그것은 branch or load-store에 사용된다.

 

 

📕Simplifying the immGen HardWare

  • RISC - V는 복잡해 보이지만 hardware적으로는 간단한 instruction foramts를 가진다.
    • 이러한 점은 RISC-V 실행에서 clock cycle time을 향상해줍니다.
    • 특별하게 SB와 UJ 형식은 어셈블러에게 더 많은 작업을 제공함으로써 하드웨어를 다시 한번 단순화합니다.
  • RISC -V는 field의 크기가 같고 immediates가 같은 두 개의 형태가 있습니다.
    • SB vs S , UJ vs J
    • 두 형태가 비슷함.

 

📕Simplifying ImmGen Hardware(2)

  • 우선 제목은 slimplifying이라고 하는데 좀 많이 복잡하고 난해한 table이 등장했다.
  • 첫 번째 테이블은  SB와 UJ에게 S/U의 형태를 도입한 테이블이고, 두 번째 테이블은 SB/UJ 형태를 적용한 테이블이다.
  • 그럼 두 테이블의 차이는 SB와 UJ의 field일 것이다.
  • 우선 이 그림을 이해하려면 UJ타입가 SB타입의 instructions type을 알아야 이해하기 편하다.

  • 왼쪽 그림은 12bit만을 사용하는 SB format이고, 오른쪽 그림은 20 bit를 사용하는 UJ format이다.
  • 우선 저 테이블의 구조를 알면 이해하기 편하다.
    • 위의 0~31까지는 immediate의 index?라고 이해하면 편하겠다. 
    •  SB타입은 immedatie를 12bit 할당받는데, 0~11 bit를 사용해야 하지만, branch 이동은 address가 항상 짝수이기에 우리는 실질적으로 immediate [13:1]를 사용하므로 테이블에서도 1~13까지가 유효한 데이터가 들어가고 나머지 칸은 전부 sign-extend 한 값이다.
    • UJ 타입도 SB 타입과 동일하게 원래 할당된 크기보다 1bit 더 사용할 수 있기에, immediate [20:1]까지 사용하는 것이다. 나머지 값은 sign-extend 한 값이 들어가게 된다.
  • SB 테이블을 보면
    • SB타입은 immediate [0]은 사용하지 않기에 table [0]은 비어있다.
    • 그리고 immediate [4:1] 값은 instruction에 어느 비트에 매핑되어있는지 찾아보면 된다. 8번째 bit부터 11번째 bit가 들어가 있기에, table [1]~table [4] = i8~i11이 될 것이다.
    • immediate [10:5]는 25번째 bit부터 30번째 bit이기에 table [5]~table [10] = i25~i30이 될 것이다.
    • immedate [11] = table [7] 이기에 i7이 되고, immediate [12] = 31번째 bit이기에 table [12]= i31이 들어가게 되는 것이다.
  • UJ 테이블
    • UJ타입도 immediate [0]은 사용하지 않기에 table [0]은 비어있다.
    • immediate [10:1] = 21번째 bit~ 30번째 bit 이기에 table [1]~table [11] =i21~i30
    • immediate [11]= 20번째 bit라서 table [11]=i20
    • immediate [19:12] = 12번째 bit~19번째 bit라서 table [12]~table [19] = i12~i19
    • immediate [20]= 31번째 bit라서 table [20]= i31
  • 이렇게 SB/UJ 타입을 적용시킨 Immgen hardware는 하드웨어의 복잡도를 줄여준다.

 

📕Datapath with Control Lines

  • 데이터 경로는 인스트럭션 라벨과 필요한 모든 멀티플렉서 및 제어 신호를 추가하여 업데이트됩니다.

 

📕Control Signals

  • 컨트롤 유닛은 명령의 opcode 및 funct 필드만을 기준으로 제어 신호 중 하나를 제외한 모든 것을 설정할 수 있습니다.
    • PCSrs 컨트롤 라인은 예외입니다.
    • 인스트럭션이 beq이고 ALU의 0 출력이면 PCSrc가 asserted

  • Signal name
    • Regwrite 
      • 신호가 1일 때 : write register 입력의 레지스터는 write data input으로 기록됩니다.
      • 신호가 0일 때 : 아무 일 발생 x
    • ALUSRc
      • 신호가 1일 때 : 두 번째 ALU operand은 sign-extended 인스트럭션의 12비트입니다. -> 즉 offset임.
      • 신호가 0일 때: 두 번째 ALU operand는 register 2 출력에서 나옵니다
    • PCSrc
      • 신호가 1일 때 : pc는 branch target을 계산하는 adder의 출력으로 대체됩니다.
      • 신호가 0일 때 : pc는 pc+4의 값으로 대체된다.
    • MemRead
      • 신호가 1일 때 : 주소 입력에 의해 지정된 데이터 메모리 내용이 읽기 데이터 출력에 저장된다.
      • 신호가 0일 때 : 아무 일 발생 x
    • MemWrite
      • 신호가 1일 때 : 주소 입력에 의해 지정된 데이터 메모리 내용이 Write data input으로 대체된다.
      • 신호가 0일 때 : 아무일 발생 x
    • MemtoReg
      • 신호가 1일 때: register에 입력된 값 write data input은 데이터 메모리에서 가져옵니다
      • 신호가 0일 때 : regitser에 입력된 값 write data input은 ALU에서 가져온다.

📗인스트럭션 타입에 따른 Control Signals의 여부

 

 

요약

..할라햇는데 실패 ㅇㅇ

 

저작자표시 (새창열림)

'Computer Science > Computer Architecture' 카테고리의 다른 글

[Computer Architecture] - processor(3)-[pipeline, hazard]  (0) 2022.11.19
[Computer Architecture] - processor (2)  (0) 2022.11.12
[Computer Architecutre] - floating point  (0) 2022.10.20
[computer archiecture] - arithmetic_for_computers(1)  (0) 2022.10.19
[computer architecture]-instruction_language_of_computer(3)  (0) 2022.10.11
  1. 📕Introduction
  2. 📕Basic RISC - V Implementation
  3. 📕High - Level View of a RISC-V Implementation
  4. 📕Conciderations on Implementation
  5. 📕Basic implementation of the RISC - V subset
  6. 📕Logic Design Conventions
  7. 📕Clocking Methodlogy
  8. 📕Building Datapath
  9. 📕R-format Instruction Support
  10. 📕Load/Store Instruction Support
  11. 📕Branch Instruction Support
  12. 📕Datapath for Branch Instruction
  13. 📕Creating a Single Datapath
  14. 📕Full Datapath
  15. 📕ALU Control
  16. 📕ALU Control Input
  17. 📕Truth table for ALU control
  18. 📕Designing the Main control Unit
  19. 📕Simplifying the immGen HardWare
  20. 📕Simplifying ImmGen Hardware(2)
  21. 📕Datapath with Control Lines
  22. 📕Control Signals
'Computer Science/Computer Architecture' 카테고리의 다른 글
  • [Computer Architecture] - processor(3)-[pipeline, hazard]
  • [Computer Architecture] - processor (2)
  • [Computer Architecutre] - floating point
  • [computer archiecture] - arithmetic_for_computers(1)
재한
재한
안녕하세요 💻
재한
짜이한
전체
오늘
어제
  • 분류 전체보기 (504)
    • Skils (118)
      • Android (52)
      • C++ (5)
      • Kotlin (36)
      • Algorithm (24)
      • Server (1)
    • CodingTest (228)
      • Programmers (45)
      • Baekjoon (183)
    • Experience (8)
      • 후기(코딩테스트,프로그램,프로젝트) (8)
    • Computer Science (70)
      • Design Pattern (2)
      • OOP (2)
      • Computer Architecture (14)
      • OS (2)
      • Software Engineering (3)
      • DataBase (8)
      • Network (39)
    • 학교 (75)
      • R프로그래밍 (26)
      • 회계와 사회생활 (17)
      • 컴퓨터학개론 (20)
      • it기술경영개론 (12)

블로그 메뉴

  • 홈
  • 태그
  • 카테고리
  • 글쓰기
  • 설정

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
재한
[Computer Architecture] - processor (1)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.