이모션 엔진

소니 이모션 엔진 **이모션 엔진**(Emotion Engine)은 소니 컴퓨터 엔터테인먼트와 도시바가 개발한 중앙 처리 장치이다. 플레이스테이션 2에 사용되었으며, 이후 플레이스테이션 3의 초기 모델에도 플레이스테이션 2와의 하위 호환을 위해 탑재되었다.
# 내부 구성
이모션 엔진은 프리스케일 세미컨덕터의 MIPS-III R5900을 기반으로 하여 개발한 것으로 CPU 코어, FPU, 벡터 프로세싱 유닛 2개(VPU0, VPU1), 그래픽 인터페이스(GIF), 10채널 DMA, 메모리 컨트롤러, 이미지 프로세싱 유닛(IPU), I/O 인터페이스로 구성되어 있으며 각 유닛들은 128비트의 내부 데이터 버스로 연결되어 있다. CPU와 첫 번째 VPU0은 128비트 전용 버스로 직접 연결되어 같이 작동하며 게임 코드 실행과 모델링 계산을 담당한다. 두 번째 VPU1은 지오메트리 변환과 광원 처리를 담당하며 CPU와 독립적으로 작동되며 마이크로코드로 제어한다. VPU0도 지오메트리 변환에 사용할 수 있다. 여기서 생성된 화면에 표시할 데이터(디스플레이 리스트)는 GIF를 통해 그래픽 신서사이저로 보내져 렌더링한다,
# CPU 코어
CPU 코어는 2웨이 슈퍼 스칼라 인오더 RISC 프로세서로 MIPS-III 시리즈 명령어 셋 아키텍처에 소니가 개발한 전용 128비트 SIMD(single instruction multiple data) 명령어를 추가하였다. 전용 명령어는 107개로 32비트 4개, 16비트 8개, 8비트 16개를 동시에 처리할 수 있다. 명령어는 뎃셈, 뺄셈, 곱셈, 나눗셈, 최소/최대, 시프트(shift), 논리 연산(logical), 128비트 load/store와 소니가 타 업체와의 경쟁을 이유로 공개하지 않은 256비트에서 128비트로의 시프트 등의 명령어로 구성되어 있다. MIPS 기반의 코어는 ALU 2개와 FPU 유닛으로 구성되어 있다. 정수 유닛은 64비트로 되어 있지만 FPU는 싱글 프리시전(single precision), 32비트로 되어 있다. 전용 명령어는 2개의 64비트 정수 유닛을 묶어 128비트처럼 사용할 수 있다. 전용 명령어를 사용하기 위해 128비트의 정수 레지스터를 갖추고 있다. 정수 유닛과 FPU는 둘 다 파이프 라인은 6단계이다. CPU 코어는 2웨이 방식의 16KB 명령어 캐시와 8KB 데이터 캐시, 16KB의 스크래치패드 램, 가상 주소 변환을 위해 48엔트리 TLB(translation lookaside buffer), 분기 예측을 위해 64엔트리 BTAC(branch target address cache)와 BHT(branch history table)을 내장하고 있다.
# 벡터 프로세싱 유닛
VPU0과 VPU1이라고 부르는 벡터 프로세싱 유닛은 이모션 엔진의 부동소수점 성능에 크게 이바지하고 있다. 각각의 VPU는 128비트 레지스터 32개, 16비트 고정 소수점 레지스터 16개, FMAC(Floating point Multiply-ACcumulate)유닛 4개, FDIV (Floating point DIVide), 로컬 데이터 메모리로 구성된다. 데이터 메모리는 VPU0은 4KB, VPU01은 16KB를 가지고 있다. 대역폭을 높이기 위해 VPU의 데이터 메모리는 GIF와 직접 연결되어 있으며 DMA 유닛으로 읽어들일 수 있다. 하나의 벡터 명령어는 32비트 IEEE 표준의 싱글 프리시전 부동소수점 데이터 4개로 되어있으며 4개의 32비트 FMAC에서 처리된다. 흔히 알려진 것과 다르게 이모션 엔진은 128비트 프로세서가 아니다. 단일 128비트 수치를 처리하는 것이 아니라 32비트 데이터 4개를 모아서 처리하는 것이다. 이 방식은 인텔의 SSEx와 비슷하다. FMAC 유닛은 한 개의 명령어를 실행하는데 4사이클이 걸린다. 하지만 6단계의 파이프 라인을 통과하기 때문에 사이클 당 1개의 명령어를 처리할 수 있다. FDIV 유닛은 9단계의 파이프 라인을 가지며 7사이클 당 1개의 명령어를 처리한다.
# 내부 데이터 버스
CPU 코어와 VPU, GIF, 메모리 컨트롤러 등의 유닛들은 128비트의 내부 데이터 버스로 연결되어 있으며 이모션 엔진 클럭의 절반 속도로 작동된다. 300Mhz에서 이론상 최대 대역폭은 2.4 GB/s다. DMA 전송은 구성된 패킷을 내부 데이터 버스를 통해 전송하며 최대 대역폭은 2 GB/s다.
# 외부 인터페이스
이모션 엔진은 내부 데이터 버스와 연결된 2채널의 DRDRAM(Direct Rambus Dynamic Random Access Memory) 메모리 컨트롤러를 가지고 있다. 각 채널은 16비트, 400MHz로 작동한다. 2채널 DRDRAM의 이론상 최대 대역폭은 3.2GB/s이며 내부 데이터 버스보다도 33%이상 빠르다. 메모리 컨트롤러 버퍼를 통해 DRDRAM 채널로 데이터를 전송하기 때문에 여분의 대역폭을 CPU에서 사용할 수 있다. 이모션 엔진은 GIF를 통해 그래픽 신서사이저와 150MHz의 64비트 전용 버스로 연결되며 이론상 최대 대역폭은 1.2GB/s다. 또, 입출력 프로세서 IOP와는 37.5MHz의 32비트 버스로 연결되어 있으며 이론상 최대 대역폭은 150MB/s다. 이모션 엔진 CXD9708GB（SCPH-70000)
# 생산과 사용
이모션 엔진은 0.25µm CMOS 공정으로 240mm2 다이에 1억5백만개의 트랜지스터를 집적하였으며 540핀의 PBGA(plastic ball grid array)로 소니와 도시바에서 생산되었으며 나중에 0.18µm 공정으로 전환되었다. 이모션 엔진은 플레이스테이션 2에 사용되었으며 플레이스테이션 3에도 플레이스테이션 2 게임의 호환성을 위해 사용되었다. 나중에 플레이스테이션 3에서 원가 절감을 위해 이모션 엔진을 빼고 셀 브로드밴드 프로세서를 통한 소프트웨어 에뮬레이션으로 변경되었으며 이후 출시된 플레이스테이션 3는 플레이스테이션 2와의 호환성을 제거하였다.
# 프로세서 사양
* 클럭 주파수 : 294 MHz (나중에 299 MHz로 증가) * 명령어 셋 : MIPS III, 일부 MIPS IV 명령어 포함, 107 벡터 명령어 * MIPS 기반 코어 : 64비트 정수 유닛 2개, 부동소수점 유닛, 6단계 파이프라인 * 16 KB 2웨이 명령어 캐시 * 8 KB 2웨이 데이터 캐시 * 16 KB 스크래치패드 램 * 48 엔트리 명령어/데이터 혼합 TLB * 벡터 프로세싱 유닛 : FMAC 유닛 4개, FDIV 유닛 1개 * 벡터 프로세싱 유닛 레지스터 : 128비트, 32 엔트리 * 이미지 프로세싱 유닛 : MPEG2 디코더 * 10 채널 DMA * VDD 볼트 : 1.8V * 전력 소비 : 1.8V에서 15W
# 이론적인 성능
* 부동소수점 : 초당 6.2백억 싱글 프리시전(32비트) 부동소수점 연산 * 퍼스펙티브(Perspective) 변환 : 초당 66백만 폴리곤 ** 조명, 안개 효과 적용시 초당 36백만 폴리곤 ** 베지에(Bézier) 표면 적용시 초당 16백만 폴리곤 * 이미지 압축해제(decompression) : 초당 150 백만 픽셀
# 참고 자료
* Hennessy, John L. and Patterson, David A. "*Computer Architecture: A Quantitative Approach, Third Edition*". . * Diefendorff, Keith. "Sony's Emotionally Charged Chip", *Microprocessor Report*, Volume 13, Number 5, 19 April 1999. Microdesign Resources.