맨위로가기

레지스터 파일

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

레지스터 파일은 CPU 내에서 데이터를 저장하고 빠르게 접근하기 위한 메모리 장치이다. ARM, x86, MIPS, SPARC 등 다양한 아키텍처에서 레지스터 뱅크 전환, 구현 방식, 마이크로아키텍처, 레지스터 리네이밍, 레지스터 윈도우 등의 기술을 통해 레지스터 파일을 활용한다. 레지스터 파일은 디코더, 배열, 섀도우 레지스터 파일 아키텍처, 레지스터 윈도우 등의 다양한 구성 요소와 기술을 통해 성능을 향상시키고 면적을 절약한다.

더 읽어볼만한 페이지

  • 디지털 레지스터 - 명령 레지스터
  • 디지털 레지스터 - 시프트 레지스터
    시프트 레지스터는 클럭 신호에 따라 데이터를 순차적으로 이동시키는 디지털 회로로, 입출력 방식에 따라 다양한 종류가 있으며, 데이터 변환, 지연 회로, 펄스 폭 확장, 스택 구현, I/O 핀 확장 등 다양한 용도로 활용된다.
  • 디지털 전자공학 - 트랜지스터-트랜지스터 논리
    트랜지스터-트랜지스터 논리(TTL)는 1961년 제임스 L. 부이에 의해 발명된 바이폴라 접합 트랜지스터 기반의 디지털 회로 기술로, 텍사스 인스트루먼츠의 7400 시리즈를 통해 널리 사용되었으며, 저렴한 비용으로 디지털 기술 발전에 기여했다.
  • 디지털 전자공학 - 플립플롭
    플립플롭은 1비트 이상의 정보를 저장하는 디지털 논리 회로로, 에클스-조던 트리거 회로에서 기원하여 SR, D, T, JK 등 다양한 유형으로 구현되며, 컴퓨터 기억 장치의 기본 구성 요소로 사용되지만 타이밍 요소에 민감하게 설계해야 한다.
  • 컴퓨터 구조 - PA-RISC
    PA-RISC는 휴렛 팩커드에서 개발한 RISC 기반 명령어 집합 아키텍처로, HP 서버 및 워크스테이션에 사용되었으며 대용량 L1 캐시와 SIMD 명령어 확장 등의 특징을 가졌으나 아이테니엄 아키텍처로의 전환으로 단종되었다.
  • 컴퓨터 구조 - 메모리 관리
    메모리 관리는 운영체제의 핵심 기능으로, 여러 프로세스의 원활한 실행을 위해 메모리 공간을 할당하고 관리하며, 릴로케이션, 보호, 공유, 가상 메모리 관리, 자동/수동 메모리 관리 등의 기능을 수행한다.
레지스터 파일
레지스터 파일
종류컴퓨터 기억 장치
사용 위치CPU
기능
설명CPU에서 사용하기 위한 데이터를 보관한다.
접근 속도주기억 장치보다 훨씬 빠르다.
구성
주요 구성 요소레지스터
레지스터 개수CPU마다 다르다.
레지스터 크기CPU마다 다르다.
특징
휘발성전원이 끊기면 데이터가 사라진다.
비용주기억 장치보다 비싸다.
활용
용도주소 저장
데이터 저장
명령어 저장
연산 결과 저장
사용 예시프로그램 카운터 (PC)
스택 포인터 (SP)
누산기 (AC)
관련 기술
관련 기술캐시
주기억 장치
가상 메모리

2. 레지스터 뱅크 전환 (Register-bank switching)

ARM 프로세서는 뱅크된 레지스터와 뱅크되지 않은 레지스터를 모두 가지고 있다. 모든 모드에서 처음 8개의 범용 레지스터(GPR), R0부터 R7까지는 항상 동일한 물리적 레지스터를 공유하지만, 뱅크된 레지스터 R8부터 R14까지가 가리키는 물리적 레지스터는 프로세서가 속한 작동 모드에 따라 달라진다.[2] 특히, FIQ 모드는 R8부터 R12까지의 레지스터에 대한 자체 뱅크를 가지며, 아키텍처는 모든 인터럽트 모드에 대해 개인 스택 포인터(R13)도 제공한다.

x86 프로세서는 명령이 발행되기 전에 둘 이상의 명령, 디코더, GPR 및 레지스터 파일 간의 전환을 위해 컨텍스트 전환 및 고속 인터럽트를 사용하지만, 이는 슈퍼스칼라 실행을 지원하는 프로세서에서만 존재한다. 그러나 컨텍스트 전환은 ARM의 레지스터 내 레지스터 뱅크와는 완전히 다른 메커니즘이다.

MODCOMP 및 이후의 8051 호환 프로세서는 프로그램 상태 워드의 비트를 사용하여 현재 활성 레지스터 뱅크를 선택한다.

3. 구현 (Implementation)

레지스터 파일은 일반적으로 수직으로 읽히는 간단한 배열 형태로 구성된다. 가로로 뻗어 있는 단일 워드 라인은 비트 셀의 행이 수직으로 뻗어 있는 비트 라인에 데이터를 넣도록 한다. 낮은 스윙 읽기 비트 라인을 전체 스윙 논리 레벨로 변환하는 감지 증폭기는 일반적으로 하단에 위치한다. 큰 레지스터 파일은 미러링 및 회전된 단순 배열을 타일링하여 구성될 수 있다.[3]

레지스터 파일은 포트당 항목당 하나의 워드 라인, 읽기 포트당 폭의 비트당 하나의 비트 라인, 쓰기 포트당 폭의 비트당 두 개의 비트 라인을 갖는다. 각 비트 셀은 Vdd 및 Vss도 갖는다. 따라서 와이어 피치 영역은 포트 수의 제곱에 따라 증가하고, 트랜지스터 영역은 선형적으로 증가한다.[3]

어느 시점에서는 모든 읽기 포트가 있는 단일 레지스터 파일보다 읽기 포트 수가 적은 여러 개의 중복 레지스터 파일을 갖는 것이 더 작고/또는 빠를 수 있다. 예를 들어, MIPS 아키텍처의 R8000 정수 장치는 0.7 μm 공정으로 구현된 9개의 읽기 포트와 4개의 쓰기 포트를 가진 32개 항목 64비트 레지스터 파일을 가지고 있었다.

레지스터를 여러 레지스터 파일로 나누는 두 가지 인기 있는 방법은 분산 레지스터 파일 구성과 분할된 레지스터 파일 구성이다.[3]

원칙적으로 많은 읽기 및 쓰기 포트가 있는 64비트 폭 레지스터 파일로 수행할 수 있는 모든 작업은 단일 읽기 포트와 단일 쓰기 포트가 있는 단일 8비트 폭 레지스터 파일로 수행할 수 있다. 그러나 많은 포트가 있는 넓은 레지스터 파일의 비트 수준 병렬 처리를 사용하면 훨씬 빠르게 실행할 수 있으므로, 포트 수가 적거나 비트 폭이 좁거나 둘 다인 경우 여러 사이클이 걸릴 작업을 단일 사이클로 수행할 수 있다.

3. 1. 디코더 (Decoder)


  • 디코더는 종종 프리디코더와 디코더 자체로 나뉜다.
  • 디코더는 워드 라인을 구동하는 일련의 AND 게이트이다.
  • 읽기 또는 쓰기 포트당 하나의 디코더가 있다. 예를 들어, 배열에 4개의 읽기 포트와 2개의 쓰기 포트가 있는 경우, 배열의 비트 셀당 6개의 워드 라인이 있으며, 디코더의 행당 6개의 AND 게이트가 있다. 디코더는 배열에 피치 매칭되어야 하므로 이러한 AND 게이트는 넓고 짧아야 한다.

3. 2. 배열 (Array)

일반적인 레이아웃에서 레지스터 파일은 간단한 배열 형태로 구성되며, 수직으로 읽을 수 있다. 가로 방향으로 뻗어 있는 하나의 워드 라인은 비트 셀의 행이 수직으로 뻗어 있는 비트 라인에 데이터를 넣도록 한다. 낮은 스윙 읽기 비트 라인을 전체 스윙 논리 레벨로 변환하는 감지 증폭기는 일반적으로 하단에 위치한다. 더 큰 레지스터 파일은 때때로 미러링되거나 회전된 단순 배열을 타일링하여 구성된다.[3]

레지스터 파일은 포트당 항목당 하나의 워드 라인, 읽기 포트당 폭의 비트당 하나의 비트 라인, 쓰기 포트당 폭의 비트당 두 개의 비트 라인을 갖는다. 각 비트 셀은 Vdd 및 Vss도 갖는다. 따라서 와이어 피치 영역은 포트 수의 제곱에 따라 증가하고, 트랜지스터 영역은 선형적으로 증가한다.[3]

비트 셀의 기본 구조는 다음과 같다.

  • 상태는 인버터 쌍에 저장된다.
  • 데이터는 NMOS 트랜지스터를 통해 비트 라인으로 읽힌다.
  • 데이터는 두 개의 NMOS 스택을 통해 한쪽을 접지에 단락시켜 기록한다.
  • 따라서 읽기 포트는 비트 셀당 하나의 트랜지스터를 사용하고, 쓰기 포트는 네 개의 트랜지스터를 사용한다.


다음과 같은 다양한 최적화가 가능하다.

  • 셀 간 Vdd 및 Vss 라인 공유.
  • 읽기 비트 라인은 종종 Vdd와 Vss 사이의 어딘가로 사전 충전(프리차지)된다.
  • 읽기 비트 라인은 종종 Vdd 또는 Vss까지의 일부만 스윙한다. 감지 증폭기는 이 작은 스윙 신호를 전체 논리 레벨로 변환한다. 작은 스윙 신호는 비트 라인이 구동력이 적지만 많은 기생 커패시턴스를 가지기 때문에 더 빠르다.
  • 쓰기 비트 라인은 꼬아져서 근처의 읽기 비트라인에 동일하게 결합될 수 있다. 쓰기 비트라인은 전체 스윙이므로 읽기 비트라인에 상당한 방해를 일으킬 수 있다.
  • Vdd가 수평 라인인 경우, 해당 사이클 동안 쓰기 포트 중 하나라도 해당 라인에 쓰고 있다면 또 다른 디코더를 통해 전원을 끌 수 있다. 이 최적화는 쓰기 속도를 증가시킨다.
  • 레지스터 파일에서 사용되는 에너지를 줄이는 기술은 저전력 전자공학에 유용하다.[4]

4. 마이크로아키텍처 (Microarchitecture)

대부분의 레지스터 파일은 여러 쓰기 포트가 동시에 같은 항목에 쓰는 것을 방지하기 위한 특별한 조항을 두지 않는다. 대신 명령어 스케줄링 하드웨어가 특정 주기에서 하나의 명령어만 특정 항목에 쓰도록 보장한다. 만약 동일한 레지스터를 대상으로 하는 여러 명령어가 발행되는 경우, 하나를 제외한 모든 명령어의 쓰기 인에이블(write enable)은 꺼진다.[3]

교차 결합된 인버터(cross-coupled inverters)는 쓰기 작업 후에 안정되는 데 시간이 걸리며, 이 시간 동안 읽기 작업은 더 오래 걸리거나 잘못된 데이터를 반환할 수 있다. 이러한 문제를 방지하기 위해, 동일한 항목에 대한 동시 읽기 및 쓰기가 명령될 때 쓰여진 데이터를 읽기 포트로 우회하는 우회 멀티플렉서(bypass multiplexer)를 사용하는 것이 일반적이다. 이러한 우회 멀티플렉서는 종종 기능 유닛 간에 아직 커밋되지 않은 결과를 전달하는 더 큰 우회 네트워크의 일부이다.[3]

레지스터 파일은 일반적으로 제공하는 데이터패스에 피치 매칭(pitch matched)된다. 피치 매칭은 많은 버스가 데이터패스 위로 코너를 도는 것을 피하게 해주며, 이는 많은 면적을 절약하게 해준다. 그러나 모든 유닛이 동일한 비트 피치를 가져야 하므로, 데이터패스의 모든 유닛은 가장 넓은 유닛에 의해 강제된 비트 피치로 끝나 다른 유닛에서 면적을 낭비할 수 있다. 레지스터 파일은 쓰기 포트당 비트당 두 개의 와이어가 있고 모든 비트 라인이 모든 비트 셀에서 실리콘에 접촉해야 하기 때문에 종종 데이터패스의 피치를 설정할 수 있다.[3]

데이터패스에 여러 유닛이 있는 머신에서는 두 개의 데이터패스를 나란히 배치하여 면적을 절약할 수 있으며, 각 데이터패스는 단일 데이터패스보다 더 작은 비트 피치를 가진다. 이 경우 일반적으로 각 데이터패스에 대해 하나의 레지스터 파일의 여러 복사본을 강제한다. 알파 21264는 "섀도우 레지스터 파일 아키텍처"를 구현한 최초의 대규모 마이크로아키텍처였다.[3]

레지스터 리네이밍을 수행하는 프로세서에서는 각 기능 유닛이 물리 레지스터의 일부에 쓰도록 할당할 수 있다. 이를 통해 비트마다 여러 개의 포트를 갖출 필요가 없어지고 면적을 크게 절약할 수 있다.[3]

4. 1. 섀도우 레지스터 파일 아키텍처 (Shadow Register File Architecture)

알파 21264, SPARC, MIPS 및 일부 x86 구현에서는 섀도우 레지스터 파일 아키텍처가 사용된다. 이 아키텍처는 정수 및 부동 소수점 레지스터 파일을 복제하여 성능을 향상시킨다.

  • 알파 21264 (EV6): 정수 레지스터 파일과 부동 소수점 레지스터 파일을 각각 두 개씩 복제하여 사용했다. 각 복사본은 2개의 읽기 포트와 2개의 쓰기 포트를 가졌다. 컨텍스트 전환 중에는 두 파일 간에 데이터를 전파하는 데 추가 사이클이 필요했지만, 발행 로직이 데이터 전송 횟수를 최소화하여 정수 성능을 크게 개선했다. 이는 슈퍼스칼라 아키텍처에서 제한된 수의 범용 레지스터로 인한 영향을 줄이는 데 도움이 되었다.[1]

  • MIPS: R8000 부동 소수점 유닛은 부동 소수점 레지스터 파일의 두 복사본을 사용했다. 각 복사본은 4개의 쓰기 포트와 4개의 읽기 포트를 가졌으며, 컨텍스트 전환 시 두 복사본에 동시에 쓰기가 수행되었다. 그러나 정수 연산은 지원하지 않아 정수 레지스터 파일은 그대로 유지되었다. 이후 임베디드 시장을 위한 새로운 디자인에서는 섀도우 레지스터 파일이 사용되지 않았다.[1]

  • SPARC: 하이엔드 라인에서 섀도우 레지스터 파일 아키텍처를 사용했다. 최대 4개의 정수 레지스터 파일 복사본(future, retired, scaled, scratched, 각각 7개의 읽기 포트와 4개의 쓰기 포트 포함)과 2개의 부동 소수점 레지스터 파일 복사본을 가졌다. 알파 및 x86과 달리, 이들은 아웃오브오더 유닛과 레지스터 파일의 이름 변경 직후인 백엔드의 퇴역 유닛에 위치했다. 섀도우 레지스터는 명령어 페칭 및 디코딩 단계에서 명령어를 로드하지 않으며, 이 디자인에서는 컨텍스트 전환이 필요하지 않았다.[1]

  • x86 프로세서:
  • P6 (마이크로아키텍처)|P6 계열 (펜티엄 M, 요나): 듀얼 포트 정수 아키텍처 레지스터 파일의 두 복사본을 사용하여 섀도우 레지스터 파일 아키텍처를 도입했다. 이는 마이크로 연산 퓨전 도입 이후 x86 아키텍처에서 발생한 레지스터 병목 현상을 해결하기 위한 것이었다. 그러나 파일당 총 용량은 32바이트로, 8개의 32비트 아키텍처 레지스터를 가졌다.[1]
  • 코어 2: 링 버스를 24바이트로 늘리고, 레지스터 파일을 듀얼 포트(1 읽기/1 쓰기)에서 쿼드 포트(2 읽기/2 쓰기)로 확장했다. 레지스터는 총 파일 크기에서 8개 항목, 32비트를 유지하고 x64에서는 16개 항목으로 확장되어 파일당 총 128바이트 크기를 가졌다. FP XMM 레지스터 파일도 쿼드 포트(2 읽기/2 쓰기)로 증가했으며, 레지스터는 8개 항목, 32비트를 유지하고 x64 모드에서 16개 항목으로 확장되었다. 섀도우 레지스터 파일 아키텍처는 부동 소수점/SSE 기능을 포함하지 않아 숫자는 여전히 1개였다.[1]
  • 네할렘 이후: 정수 및 부동 소수점 레지스터가 통합된 옥타 포트(6 읽기/2 쓰기) 범용 레지스터 파일(32비트에서 8+8, x64에서 파일당 16+16)로 통합되었다. 레지스터 파일은 하이퍼 스레딩을 실행하기 위해 향상된 섀도우 레지스터 파일 아키텍처로 2개로 확장되었으며, 각 스레드는 자체 디코더에 독립적인 레지스터 파일을 사용한다. 샌디 브리지 이후에는 섀도우 레지스터 테이블과 아키텍처 레지스터를 디코딩 전에 훨씬 더 크고 발전된 물리적 레지스터 파일로 대체하여 아키텍처 레지스터를 더 이상 사용하지 않게 되었다.[1]

5. 레지스터 리네이밍 (Register renaming)

레지스터 리네이밍을 수행하는 프로세서는 각 기능 유닛이 물리적 레지스터 파일의 하위 집합에 쓸 수 있도록 배열할 수 있다. 이러한 배열은 각 비트 셀당 여러 개의 쓰기 포트가 필요하지 않도록 하여 면적을 크게 절약할 수 있다.[1] 결과적으로 단일 쓰기 포트가 있는 레지스터 파일 스택인 레지스터 파일은 복제 및 읽기 포트의 하위 집합으로 이점을 얻는다.[1] 극한의 경우 이 기술은 각 기능 유닛의 입력에 1-쓰기, 2-읽기 레지스터 파일 스택을 배치한다.[1] 소수의 포트가 있는 레지스터 파일은 종종 트랜지스터 면적에 의해 지배되므로 이 기술을 이 한계까지 밀어붙이지 않는 것이 가장 좋지만, 그래도 유용하다.[1]

레지스터 리네이밍을 수행하는 프로세서에서는, 각 기능 유닛이 물리 레지스터의 일부에 쓰도록 할당할 수 있다.[1] 이것에 의해, 비트마다 여러 개의 포트를 갖출 필요가 없어지고, 면적을 크게 절약할 수 있다.[1] 그 결과, 레지스터 파일은 여러 레지스터 파일에 대해 하나의 쓰기 포트를 갖는 것이 된다.[1] 이 기술은 레지스터 간의 복제 및 읽기 포트의 서브셋화 부분에서 이점이 있으며, 궁극적으로 각 기능 유닛에 쓰기 1개, 읽기 2개의 레지스터 파일을 배치하게 된다.[1] 소수의 포트를 갖는 레지스터 파일의 대부분은 트랜지스터이므로, 이 방법을 극한까지 밀어붙이는 것이 최선은 아니지만, 그래도 유용하다.[1]

6. 레지스터 윈도우 (Register windows)

SPARC ISA는 레지스터 윈도우를 정의하는데, 레지스터의 5비트 아키텍처 이름은 실제로 수백 개의 항목을 가진 훨씬 더 큰 레지스터 파일의 윈도우를 가리킨다.[1] 레지스터 윈도우는 이동 시 16개의 레지스터만큼 슬라이드되므로, 각 아키텍처 레지스터 이름은 더 큰 배열에서 소수의 레지스터만 참조할 수 있다.[1] 예를 들어, 물리적 파일에 7개의 윈도우만 있는 경우, 아키텍처 레지스터 r20은 물리적 레지스터 #20, #36, #52, #68, #84, #100, #116만 참조할 수 있다.[1]

면적을 절약하기 위해 일부 SPARC 구현에서는 각 셀이 7개의 "비트"를 갖는 32개의 항목을 가진 레지스터 파일을 구현한다.[2] 외부 포트를 통해 읽고 쓸 수 있는 것은 하나뿐이지만, 비트의 내용은 회전할 수 있다.[2] 회전은 레지스터 윈도우를 한 사이클에 이동하는 것을 달성한다.[2] 상태 이동을 수행하는 대부분의 와이어가 로컬이기 때문에 적은 전력으로 엄청난 대역폭을 사용할 수 있다.[2]

참조

[1] 문서 Register Bank https://en.wikibooks[...]
[2] 웹사이트 ARM Architecture Reference Manual http://cs107e.github[...] ARM Limited 2021-10-13
[3] 논문 Compiler Strategies for Transport Triggered Architectures http://ce-publicatio[...] 2001
[4] 간행물 Energy efficient asymmetrically ported register files http://d.wanfangdata[...] 2003
[5] 간행물 Energy efficient asymmetrically ported register files http://d.wanfangdata[...] 2003



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com