DRAM(Dynamic Random Access Memory) 셀은 매우 간단한 구조로, 하나의 캐패시터와 하나의 트랜지스터로 구성됩니다. DRAM은 데이터를 저장하는 메모리 중 하나로, 휘발성 메모리라는 특징을 가지고 있습니다. 즉, 전원이 차단되면 데이터가 소멸되기 때문에, 데이터를 유지하기 위해서는 주기적인 **리프레시(refresh)**가 필요합니다.

DRAM 셀의 동작 원리는 다음과 같습니다:

  1. 캐패시터: DRAM 셀의 기본적인 저장 장치로, 전하를 저장합니다. 캐패시터에 전하가 있으면 '1', 없으면 '0'으로 간주됩니다. 하지만, 캐패시터의 전하는 시간이 지나면서 자연스럽게 누설되기 때문에, 이를 주기적으로 리프레시해야 데이터가 유지됩니다.
  2. 액세스 트랜지스터: DRAM 셀에 접근하기 위한 스위치 역할을 합니다. 이 트랜지스터는 워드 라인을 통해 제어되며, 워드 라인이 활성화되면 트랜지스터가 열려 셀의 데이터를 읽거나 쓸 수 있습니다. 트랜지스터가 열리면 비트 라인을 통해 데이터가 읽혀지거나 기록됩니다.
  3. 리프레시(refresh): 캐패시터의 전하가 시간이 지남에 따라 누설되므로, 일정한 주기마다 모든 셀의 데이터를 다시 읽고 쓰는 리프레시 동작이 필요합니다. 리프레시가 이루어지지 않으면 데이터가 소실될 수 있습니다.

DRAM의 주요 특징:

  • 저장 밀도가 높습니다. 캐패시터와 트랜지스터 한 쌍으로 구성된 구조는 매우 작아서 대용량 메모리를 구현하는 데 적합합니다.
  • 비교적 저렴한 비용으로 대량의 데이터를 저장할 수 있습니다.
  • 휘발성 메모리로 전원이 꺼지면 데이터가 사라집니다.
  • 리프레시를 통해 데이터를 유지해야 하므로 추가적인 회로가 필요합니다.

DRAM은 컴퓨터 시스템에서 주 메모리로 많이 사용되며, 고속으로 대량의 데이터를 처리하는 데 적합합니다.

 

* https://www.researchgate.net/figure/General-DRAM-cell-structure_fig1_3137124

'CPU ARCHITECTURE1 > DRAM' 카테고리의 다른 글

07. DRAM CMD FLOW  (0) 2024.10.02
05. DRAM Signals  (0) 2024.10.02
04. DRAM Structure  (0) 2024.10.02
03. DRAM Array  (0) 2024.10.02
02. DRAM Write & Read  (0) 2024.10.02

1. 웨어 레벨링 (Wear Leveling)

설명

  • 웨어 레벨링은 NAND 플래시 메모리에서 데이터가 특정 블록에 반복적으로 쓰이거나 지워지는 것을 방지하여 플래시 메모리의 수명을 연장하는 기술입니다. 플래시 메모리는 제한된 쓰기 및 지우기 사이클을 가지고 있기 때문에, 특정 블록이 과도하게 마모되는 것을 방지하는 것이 중요합니다.

작동 원리

  • 일반 웨어 레벨링: 데이터를 블록 간에 분산시켜, 특정 블록에 집중적으로 쓰이지 않도록 합니다. 예를 들어, 데이터를 쓸 때마다 사용 가능한 블록 중 가장 덜 사용된 블록을 선택하여 데이터를 저장합니다.
  • 동적 웨어 레벨링: 읽기 및 쓰기 작업이 수행될 때마다 사용된 블록의 카운터를 유지하고, 가장 적게 사용된 블록에 새로운 데이터를 기록합니다.
  • 정적 웨어 레벨링: 사용하지 않는 블록이 없을 때도 데이터를 정기적으로 이동시켜 모든 블록이 고르게 사용되도록 합니다. 이는 사용 중인 데이터도 포함되어 있습니다.

2. 오류 수정 코드 (ECC)

설명

  • ECC는 저장된 데이터의 오류를 감지하고 수정하는 데 사용되는 알고리즘입니다. NAND 플래시 메모리에서는 외부 요인(전압 변동, 온도 변화 등)이나 내부 요인(셀의 wear-out)으로 인해 비트 오류가 발생할 수 있습니다.

작동 원리

  • 오류 탐지 및 수정: ECC는 데이터를 저장할 때 추가적인 비트를 추가하여 오류를 감지하고 수정할 수 있는 정보를 제공합니다. 예를 들어, Hamming 코드와 같은 단순한 ECC는 단일 비트 오류를 수정할 수 있으며, Reed-Solomon 코드와 같은 고급 ECC는 다중 비트 오류를 수정할 수 있습니다.
  • 데이터 읽기 시점의 검증: 데이터가 읽힐 때, ECC는 읽은 데이터를 확인하여 오류가 있는 경우 이를 감지하고 수정합니다.
  • 다양한 ECC 수준: NAND 플래시 메모리는 종종 여러 수준의 ECC를 지원합니다. 더 높은 비트 오류율을 처리하기 위해 더 복잡한 ECC 알고리즘이 필요할 수 있습니다.

'CPU ARCHITECTURE1 > NAND' 카테고리의 다른 글

02. NAND UNIT  (0) 2024.09.30
01. NAND CELL  (0) 2024.09.30

1. 페이지(Page)

  • 페이지는 NAND 플래시에서 데이터를 저장하는 가장 작은 단위입니다. 일반적으로 한 페이지의 크기는 2KB, 4KB, 8KB 등으로 정의됩니다.
  • 한 페이지에는 사용자가 저장하는 데이터 외에도 오류 수정 코드(ECC)나 다른 메타데이터를 저장하는 영역이 포함됩니다.
  • 데이터를 쓰고 읽는 최소 단위이며, 페이지 단위로 데이터를 쓸 수 있지만, 삭제는 할 수 없습니다. 삭제는 블록 단위로 이루어집니다.

2. 블록(Block)

  • 블록은 여러 개의 페이지로 구성된 더 큰 저장 단위입니다. 일반적으로 하나의 블록은 64개, 128개 또는 그 이상의 페이지로 구성됩니다.
  • NAND 플래시 메모리에서 데이터 삭제(Erase)는 블록 단위로 이루어집니다. 즉, 데이터를 쓰기 전에 기존 데이터를 지우려면 해당 블록 전체를 지워야 합니다. 이러한 특성 때문에 NAND 플래시는 쓰기 속도보다 삭제 속도가 느립니다.
  • 블록의 크기는 NAND 플래시 성능과 수명에 큰 영향을 미칩니다. 더 큰 블록은 메모리 밀도를 높일 수 있지만, 삭제 작업이 더 많은 페이지에 영향을 미치기 때문에 성능이 저하될 수 있습니다.

3. 플레인(Plane)

  • 플레인은 NAND 플래시 메모리에서 여러 개의 블록이 모여 구성된 논리적인 단위입니다. 여러 플레인이 한 다이(Die) 내에 존재하며, NAND 메모리의 병렬 접근을 가능하게 합니다.
  • 각 플레인은 독립적으로 동작할 수 있어, 동시에 여러 플레인에서 읽기/쓰기/삭제 작업이 이루어지면 NAND 플래시의 성능이 크게 향상됩니다.

4. 다이(Die)

  • 다이는 실제 반도체 칩 내에서 데이터를 저장하는 기본 단위입니다. 하나의 다이는 하나 이상의 플레인으로 구성되며, 이는 실제 물리적인 메모리 공간입니다.
  • 다이는 기본적으로 메모리 셀 어레이와 주변 회로가 결합된 형태로, NAND 플래시 메모리 내부에서 가장 큰 물리적 단위입니다.

5. 패키지(Package)

  • 패키지는 여러 개의 다이가 하나로 통합된 물리적 패키징입니다. 예를 들어, SSD 같은 장치는 여러 개의 NAND 패키지를 포함할 수 있으며, 패키지 내부에는 여러 다이가 존재할 수 있습니다. 패키지 간에도 병렬 동작이 가능하여 대규모 데이터 저장을 처리할 수 있습니다.

NAND Unit 계층 구조 요약

  • 페이지(Page): 데이터를 읽고 쓰는 가장 작은 단위.
  • 블록(Block): 여러 페이지로 구성되며, 데이터 삭제는 블록 단위로 이루어짐.
  • 플레인(Plane): 여러 블록으로 구성된 논리적 단위, 병렬 처리를 가능하게 함.
  • 다이(Die): 여러 플레인으로 구성된 물리적 저장 단위.
  • 패키지(Package): 여러 개의 다이로 구성된 물리적 패키징.

NAND Unit에서의 데이터 처리 흐름

  1. 쓰기(Write): 데이터를 페이지 단위로 쓸 수 있으며, 데이터는 빈 페이지에만 쓸 수 있습니다. 이전 데이터를 덮어쓰려면 해당 블록 전체를 먼저 지워야 합니다.
  2. 읽기(Read): 데이터를 페이지 단위로 읽습니다. 읽기 속도는 매우 빠른 편입니다.
  3. 삭제(Erase): 블록 단위로 삭제됩니다. 쓰기 전에 해당 블록을 지워야 하며, 블록을 삭제한 후 새로운 데이터를 쓸 수 있습니다.

NAND Unit의 설계 및 활용

  • NAND 컨트롤러는 페이지, 블록, 플레인, 다이 간의 효율적인 데이터 관리와 병렬 처리를 통해 성능을 최적화합니다.
  • NAND 유닛의 복잡한 구조는 웨어 레벨링(Wear Leveling), 배드 블록 관리(Bad Block Management), 오류 정정 코드(ECC) 등의 기술을 필요로 하며, 이는 NAND 플래시 메모리의 성능과 수명을 유지하는 데 중요한 역할을 합니다.

 

 

https://flashdba.com/2014/06/20/understanding-flash-blocks-pages-and-program-erases/

'CPU ARCHITECTURE1 > NAND' 카테고리의 다른 글

03. NAND Problem & Solution  (0) 2024.09.30
01. NAND CELL  (0) 2024.09.30

1. NAND 플래시 메모리의 기본 구조

NAND 플래시 메모리는 여러 개의 플로팅 게이트 트랜지스터(Floating Gate Transistor)로 이루어진 배열을 사용합니다. 각 트랜지스터는 플로팅 게이트라는 구조를 가지고 있으며, 이 플로팅 게이트에 전자가 주입되면 트랜지스터가 꺼져(off)져 데이터를 저장하고, 전자가 없으면 켜져(on) 데이터를 읽어낼 수 있습니다.

2. NAND 셀 트랜지스터

NAND 셀에서 사용되는 트랜지스터는 플로팅 게이트컨트롤 게이트의 두 가지 게이트를 가지고 있습니다:

  • 플로팅 게이트(Floating Gate): 전자를 저장하는 부분으로, 전자가 주입되거나 제거될 수 있습니다.
  • 컨트롤 게이트(Control Gate): 외부 전압이 적용되는 부분으로, 이 전압에 따라 플로팅 게이트에 저장된 전자를 제어합니다.

이 트랜지스터의 핵심 동작 원리는 전자의 주입과 제거를 통해 플로팅 게이트에 전자를 저장하거나 제거함으로써 데이터를 기록합니다.

3. 읽기, 쓰기, 삭제 동작

  • 쓰기(Program): 플로팅 게이트에 전자를 주입하여 트랜지스터를 끄는 동작입니다. 이를 통해 논리 0을 저장할 수 있습니다.
  • 읽기(Read): 트랜지스터의 상태를 읽어내는 동작으로, 플로팅 게이트에 전자가 없는 경우 전류가 흐르며 논리 1로 읽힙니다. 반대로 전자가 있으면 전류가 흐르지 않으며 논리 0으로 읽힙니다.
  • 삭제(Erase): 플로팅 게이트에서 전자를 제거하여 트랜지스터를 다시 켜는 동작입니다. 이를 통해 셀을 초기화할 수 있습니다.

4. NAND 셀의 장점

  • 높은 집적도: NAND 셀은 셀이 직렬로 연결된 구조를 사용하므로, 매우 높은 밀도로 데이터를 저장할 수 있습니다. 이러한 구조 덕분에 대용량 메모리 저장 장치를 만들 수 있습니다.
  • 저렴한 비용: 높은 집적도 덕분에 제조 비용이 상대적으로 낮아 대용량 저장 장치를 저렴하게 생산할 수 있습니다.

5. NAND 셀의 단점

  • 쓰기 및 삭제 속도 느림: NAND 셀은 쓰기와 삭제가 상대적으로 느린데, 이 때문에 쓰기 성능이 중요한 애플리케이션에서는 제약이 있을 수 있습니다.
  • 제한된 쓰기 수명: NAND 플래시 메모리는 각 셀이 일정한 횟수 이상의 쓰기/삭제 사이클을 거치면 성능이 저하되고 결국 고장날 수 있습니다. 이를 보완하기 위해 웨어 레벨링 같은 기법이 사용됩니다.

 

https://blog.naver.com/hupp0974/222635080199

'CPU ARCHITECTURE1 > NAND' 카테고리의 다른 글

03. NAND Problem & Solution  (0) 2024.09.30
02. NAND UNIT  (0) 2024.09.30

1. 데이터 포워딩 (Forwarding)

정의: 데이터 포워딩은 ALU의 출력 결과를 직접 다음 명령어의 입력으로 연결하여, 데이터가 필요할 때 바로 사용할 수 있도록 하는 기술입니다. 이 방법은 데이터 해저드를 줄이고 파이프라인의 효율성을 높이는 데 매우 효과적입니다.

작동 원리:

  • ALU는 명령어가 실행되는 동안 결과를 계산하고, 이 결과를 레지스터에 쓰기 전에 다음 명령어가 사용할 수 있도록 포워딩합니다.
  • 예를 들어, 두 개의 명령어가 있을 때:
    assembly
    코드 복사
    add $t1, $t2, $t3 # $t1 = $t2 + $t3 sub $t4, $t1, $t5 # $t4 = $t1 - $t5
    sub 명령어는 $t1의 값을 필요로 합니다. add 명령어가 결과를 레지스터에 쓰기 전에 ALU의 출력을 직접 sub 명령어로 포워딩하여 $t1을 사용할 수 있게 합니다.

장점:

  • 파이프라인의 지연을 최소화하고 성능을 극대화할 수 있습니다.
  • 레지스터에 쓰기 사이클을 줄여 전체 사이클 수를 감소시킵니다.

2. 스톨 (Stall)

정의: 스톨은 명령어 실행 사이에 지연 사이클을 삽입하여, 필요한 데이터가 준비될 때까지 기다리는 방법입니다. 이 방식은 데이터 해저드를 해결하기 위해 간단한 접근 방식이지만, CPU의 성능을 저하시킬 수 있습니다.

작동 원리:

  • 파이프라인에서 특정 명령어가 이전 명령어의 결과를 필요로 할 때, 스톨을 발생시킵니다.
  • 예를 들어, 위의 명령어를 사용할 경우, add 명령어가 끝나기 전에 sub 명령어가 실행되려고 하면, 스톨 사이클을 삽입하여 sub가 실행되기 전에 add가 완료되도록 합니다.

장점:

  • 구현이 간단하고, 특정 상황에서 안전하게 동작할 수 있습니다.

단점:

  • 스톨을 사용하면 CPU의 파이프라인이 비활성 상태가 되어 성능이 저하됩니다. 특히 여러 번의 스톨이 발생할 경우, 전체 성능에 심각한 영향을 미칠 수 있습니다.
  • 예를 들어, 두 개의 명령어 사이에 1~2 사이클의 지연을 추가하게 되어, 프로그램의 실행 속도가 느려질 수 있습니다.

결론

  • 데이터 포워딩은 성능을 유지하면서 데이터 해저드를 해결하는 데 매우 효과적입니다. 현대 CPU 설계에서 일반적으로 사용되는 방법입니다.
  • 스톨은 간단하고 안전한 방법이지만, 성능 저하를 초래할 수 있으므로 가능하면 데이터 포워딩과 함께 적절히 조합하여 사용해야 합니다.

이 두 가지 방법을 통해 데이터 해저드를 효과적으로 관리하고 CPU의 파이프라인 성능을 최적화할 수 있습니다.

 

 

https://hackmd.io/@yW7HKRexRASTmH3kBDXQpQ/Sy395BDg5#data-hazards27

'CPU ARCHITECTURE1 > CPU' 카테고리의 다른 글

15. Hazard  (0) 2024.09.30
14. Active at same clock  (0) 2024.09.30
13. Pipeline Register  (0) 2024.09.30
12. Advantage of Pipeline  (0) 2024.09.30
11. CPU DATA PATH - J - Type(JUMP)  (0) 2024.09.30

1. 데이터 해저드 (Data Hazard)

데이터 해저드는 파이프라인의 한 단계에서 필요한 데이터가 아직 이전 단계에서 처리되지 않았을 때 발생합니다. 주로 다음과 같은 경우에 발생합니다:

  • RAW (Read After Write): 이전 명령어가 결과를 쓴 후, 다음 명령어가 같은 데이터를 읽으려 할 때 발생합니다.
  • WAR (Write After Read): 이전 명령어가 데이터를 읽은 후, 다음 명령어가 같은 데이터를 쓰려 할 때 발생합니다.
  • WAW (Write After Write): 두 명령어가 같은 레지스터에 데이터를 쓰려 할 때 발생합니다.

2. 구조적 해저드 (Structural Hazard)

구조적 해저드는 하드웨어 자원(예: ALU, 메모리, 레지스터 파일 등)이 부족하여 두 개 이상의 명령어가 동시에 자원에 접근할 수 없을 때 발생합니다.

예시:

  • ALU와 메모리를 동시에 사용하려는 명령어가 있을 때, ALU가 명령어 실행 중이어서 메모리 접근을 할 수 없는 경우 발생합니다.

3. 제어 해저드 (Control Hazard)

제어 해저드는 분기(branch) 명령어가 실행될 때 발생합니다. 분기 명령어는 프로그램의 흐름을 변경하므로, 다음에 어떤 명령어를 실행해야 할지 결정하기 어렵게 만듭니다.

예시:

  • 만약 분기 명령어가 실행되고, 분기 조건이 참인 경우와 거짓인 경우에 따라 실행해야 할 명령어가 다릅니다. 이 때문에 분기 명령어가 완료될 때까지 다음 명령어를 가져오지 못하게 됩니다.

'CPU ARCHITECTURE1 > CPU' 카테고리의 다른 글

16. Data Hazard(Forwarding & Stall)  (0) 2024.09.30
14. Active at same clock  (0) 2024.09.30
13. Pipeline Register  (0) 2024.09.30
12. Advantage of Pipeline  (0) 2024.09.30
11. CPU DATA PATH - J - Type(JUMP)  (0) 2024.09.30

1. IF

 

  • PC(Program Counter): 프로그램 카운터는 현재 실행할 명령어의 주소를 가리키는 레지스터입니다.
  • 명령어 가져오기: PC가 가리키는 주소에서 명령어를 메모리로부터 읽어옵니다.
  • PC 값 증가: 다음 명령어를 가리키기 위해 PC 값을 4만큼 증가시킵니다. 이는 대부분의 아키텍처에서 명령어의 크기가 4바이트일 때 사용됩니다.
  • IF/ID 레지스터: Instruction Fetch/Instruction Decode 레지스터에 현재 가져온 명령어와 업데이트된 PC 값을 저장합니다.
  • 분기 명령어 처리: PC 값을 저장하는 이유는 분기 명령어와 같은 상황에서 프로그램의 흐름을 관리하기 위함입니다. 분기 명령어는 실행 중에 PC 값을 변경하여 프로그램의 흐름을 제어하기 때문에, 이전 PC 값을 저장해두어야 이후에 필요한 경우에 다시 사용할 수 있습니다.

2. ID

 

 

 

  • 명령어 분해: CPU가 가져온 명령어를 각 구성 요소로 나누는 과정입니다. 이 과정에서 명령어의 오퍼코드, 소스 레지스터, 대상 레지스터, 즉각적인 값(immediate value) 등이 식별됩니다.
  • 레지스터 접근: 분해된 명령어를 기반으로 필요한 레지스터에 접근하여 데이터를 읽어옵니다. 이 단계에서는 명령어에서 지정된 레지스터를 확인합니다.
  • 부호 확장(sign-extend): 즉각적인 값은 종종 고정된 비트 수로 표현되므로, 이를 32비트와 같이 필요한 비트 수로 확장하는 과정입니다. 이 과정에서 원래 비트의 부호를 유지합니다. 예를 들어, 16비트의 즉각적인 값이 음수인 경우, 부호 확장을 통해 상위 비트를 모두 1로 설정하여 32비트로 변환합니다.
  • ID/EX 레지스터: 명령어 디코딩 단계에서 처리된 정보를 ID/EX 레지스터에 저장합니다. 이 레지스터에는 다음 세 가지 값이 포함됩니다:
    • 즉각적인 값 (sign-extended immediate value)
    • 읽기용 레지스터 (source register)
    • 쓰기용 레지스터 (destination register)
  • R형과 I형의 차이: 명령어가 R형인지 I형인지에 관계없이 동일한 처리를 수행합니다. R형 명령어는 주로 레지스터 간의 연산을 수행하고, I형 명령어는 레지스터와 즉각적인 값 간의 연산을 포함합니다. 그러나 두 경우 모두 ID/EX 레지스터에 필요한 값을 저장해야 합니다.

 

3. EX

 

 

  • 제어 유닛(Control Unit): CPU의 제어 유닛은 명령어의 종류에 따라 다중화기(multiplexer)의 설정을 조정합니다. 이는 ALU의 동작 방식(ALUSrc와 ALUOp)을 결정하는 데 필요한 정보를 제공합니다.
  • 다중화기(Multiplexer): 명령어 유형에 따라 ALU의 입력을 선택하는 역할을 합니다. ALUSrc는 ALU의 두 번째 입력으로 사용할 데이터의 출처를 결정하고, ALUOp는 ALU가 수행할 연산의 종류를 결정합니다.
  • 즉각적인 값 시프트 및 더하기: 분기 명령어의 경우, 즉각적인 값은 2 비트 시프트되어야 합니다. 이는 MIPS 아키텍처에서 주소 계산 시 즉각적인 값을 4바이트(2비트 시프트)의 단위로 이동시키기 위함입니다. 그 후, 시프트된 즉각적인 값은 PC+4에 더해져 분기 목표 주소를 계산합니다.
  • EX/MEM 레지스터: 계산된 두 결과(즉각적인 값과 ALU 연산 결과)는 EX/MEM 레지스터에 저장됩니다. 이는 다음 단계인 메모리 접근 단계에서 사용될 수 있도록 준비하는 과정입니다.
  • ALU 계산: 이 경우, 다중화기는 ALU가 $rs(소스 레지스터)와 offset(오프셋) 값을 더하는 계산을 수행하도록 설정됩니다. 그 결과는 EX/MEM 레지스터에 저장됩니다.
  • 분기 명령어 여부: 이 문맥에서 강조하는 점은 현재 처리하는 명령어가 분기 명령어가 아니므로, 시프트된 즉각적인 값은 중요하지 않다는 것입니다. 즉, ALU가 계산한 결과가 EX/MEM 레지스터에 저장되고, 이후 단계에서 메모리 접근을 수행할 때 사용됩니다.

4. MEM

 

 

  • EX/MEM: EX/MEM 레지스터는 실행(EX) 단계와 메모리(MEM) 단계 사이의 정보를 저장합니다. 여기에는 ALU의 계산 결과, 메모리 주소, 및 필요한 제어 신호가 포함됩니다.
  • 제어 유닛(Control Unit): 제어 유닛은 EX/MEM에서 읽은 정보를 바탕으로 다음 단계에서 수행할 작업을 결정합니다. 이 단계에서는 메모리 접근과 관련된 작업을 포함합니다.
  • 결과 저장: 제어 유닛은 EX/MEM에서 받은 결과를 MEM/WB 레지스터에 저장합니다. MEM/WB는 메모리(MEM) 단계와 쓰기 백(WB) 단계 사이의 정보를 저장합니다. 이 결과는 최종적으로 레지스터에 기록되거나 다른 연산에 사용됩니다.
  • 메모리 접근: 제어 유닛은 메모리 주소에 접근하여 데이터의 읽기 또는 쓰기를 수행합니다.
    • MemWrite: 메모리에 데이터를 쓰는 신호입니다. EX/MEM에서 메모리 주소와 데이터를 가져와 메모리에 기록합니다.
    • MemRead: 메모리에서 데이터를 읽어오는 신호입니다. 메모리 주소에 접근하여 필요한 데이터를 가져옵니다.
  • 분기 여부 결정: 제어 유닛은 또한 EX/MEM에서 얻은 정보를 바탕으로 분기가 발생했는지 여부를 판단합니다. 이 결정은 다음 명령어의 실행 흐름에 중요한 영향을 미칩니다. 분기 명령어인 경우, 프로그램 카운터(PC)를 업데이트하여 분기 주소로 이동합니다.

5. WB

 

 

 

  • 제어 유닛(Control Unit): 제어 유닛은 명령어의 종류에 따라 어떤 결과를 선택하고 이를 레지스터에 기록할지 결정합니다. 이 단계에서는 MemtoReg와 RegWrite 신호가 중요한 역할을 합니다.
  • MemtoReg: 이 신호는 메모리에서 읽은 데이터를 레지스터에 쓸 것인지 여부를 결정합니다. 메모리에서 데이터를 읽어올 때, 이 신호를 사용하여 레지스터에 쓸 데이터를 선택합니다.
  • RegWrite: 이 신호는 레지스터 파일에 데이터를 쓸 수 있도록 허용합니다. RegWrite가 활성화되면, 선택된 데이터가 지정된 레지스터에 기록됩니다.
  • 명령어의 유형: 만약 현재 처리하는 명령어가 레지스터에 데이터를 다시 쓰는 것과 관련이 없다면, 이 명령어는 이 단계에서 아무 작업도 수행하지 않습니다. 예를 들어, 데이터 처리나 메모리 접근을 하지 않고, 단순히 흐름 제어만 수행하는 명령어일 수 있습니다.
  • 메모리 데이터의 레지스터로의 기록: 이 경우, 메모리에서 읽은 데이터가 레지스터에 기록됩니다. 즉, 메모리 접근 단계에서 가져온 데이터가 최종적으로 레지스터 파일에 저장되는 과정입니다.

 

* https://hackmd.io/@yW7HKRexRASTmH3kBDXQpQ/Sy395BDg5#pipeline-overview

 

'CPU ARCHITECTURE1 > CPU' 카테고리의 다른 글

16. Data Hazard(Forwarding & Stall)  (0) 2024.09.30
15. Hazard  (0) 2024.09.30
13. Pipeline Register  (0) 2024.09.30
12. Advantage of Pipeline  (0) 2024.09.30
11. CPU DATA PATH - J - Type(JUMP)  (0) 2024.09.30

 

  • 데이터 안정성: 파이프라인 레지스터는 각 단계에서 처리되는 데이터를 안정적으로 저장합니다. 이를 통해 다음 단계로 전달되는 데이터가 안정된 상태로 유지되므로, 데이터 무결성을 보장할 수 있습니다.
  • 동기화: 각 단계는 클럭 주기에 따라 동작하며, 파이프라인 레지스터는 각 단계에서 처리된 결과를 동기화하는 역할을 합니다. 이는 CPU의 여러 구성 요소가 동일한 클럭 신호에 의해 제어되도록 하여 타이밍 문제를 방지합니다.
  • 경합 방지: 파이프라인 구조에서는 여러 명령어가 동시에 처리되기 때문에 데이터 경합(race condition)이나 메타스테이빌리티(metastability) 문제를 일으킬 수 있습니다. 파이프라인 레지스터는 이러한 문제를 완화하고 안정적인 데이터 전달을 보장합니다.
  • 병렬 처리 효율성: 파이프라인 레지스터는 명령어 간의 병렬 처리를 가능하게 합니다. 각 명령어가 다른 단계에서 동시에 처리되므로, CPU의 처리량(throughput)을 높이고 성능을 향상시킬 수 있습니다.
  • 단계 간의 데이터 전송: 파이프라인 레지스터는 각 단계에서 처리된 데이터가 다음 단계로 원활하게 전달되도록 도와줍니다. 이를 통해 CPU가 여러 명령어를 동시에 처리할 수 있는 능력을 갖추게 됩니다.
  • 설계의 유연성: 파이프라인 레지스터를 사용함으로써 설계자는 각 단계의 처리 시간을 조정하거나 추가적인 처리 단계를 삽입할 수 있는 유연성을 가질 수 있습니다. 이를 통해 성능 최적화 및 다양한 구조의 구현이 가능합니다.
  • 복잡한 명령어 처리 지원: 파이프라인 레지스터는 복잡한 명령어 처리에 필요한 여러 단계를 효율적으로 관리할 수 있게 해줍니다. 각 단계에서 수행되는 작업이 많아질수록, 레지스터를 통해 작업을 분할하고 효과적으로 관리할 수 있습니다.

 

 

* https://hackmd.io/@yW7HKRexRASTmH3kBDXQpQ/Sy395BDg5#pipeline-overview

'CPU ARCHITECTURE1 > CPU' 카테고리의 다른 글

15. Hazard  (0) 2024.09.30
14. Active at same clock  (0) 2024.09.30
12. Advantage of Pipeline  (0) 2024.09.30
11. CPU DATA PATH - J - Type(JUMP)  (0) 2024.09.30
10. CPU DATA PATH - I -Type(Branch)  (0) 2024.09.30

+ Recent posts