MIPS 아키텍처
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
MIPS 아키텍처는 1981년 스탠퍼드 대학교의 존 L. 헤네시가 이끄는 팀에 의해 시작된 RISC(Reduced Instruction Set Computing) 프로세서 설계이다. 명령어 파이프라인을 깊게 하여 성능을 향상시키는 것을 목표로 했으며, 초기 MIPS 프로세서는 1980년대 중반에 등장했다. MIPS는 로드/스토어 아키텍처를 사용하며, 명령어 세트는 R, I, J의 세 가지 형식을 가진다.
MIPS 아키텍처는 32비트 및 64비트 버전으로 발전했으며, MIPS II, MIPS III, MIPS IV, MIPS V 등의 주요 버전이 존재한다. MIPS32와 MIPS64는 1999년에 발표되었으며, 응용 프로그램별 확장(ASE)을 통해 디지털 신호 처리, 멀티미디어 처리 등의 기능을 지원한다. MIPS는 임베디드 시스템, 비디오 게임 콘솔, 슈퍼컴퓨터 등 다양한 분야에서 활용되었으며, MIPS 아키텍처는 다양한 호출 규약을 가지고 있다. 2021년에는 개발이 중단되었지만, 일부 라이선스 보유자는 자체적으로 MIPS 호환 ISA의 확장을 계속하고 있다.
더 읽어볼만한 페이지
- MIPS 아키텍처 - IRIX
IRIX는 실리콘 그래픽스에서 개발한 유닉스 기반 운영 체제로, 컴퓨터 애니메이션 및 과학적 시각화 분야에서 널리 사용되었으며 실시간 디스크 및 그래픽 입출력을 지원하고 OpenGL의 기원이 된 IRIS GL 기술을 포함했지만 SGI 파산 후 지원이 종료되었다. - MIPS 아키텍처 - 남코 시스템 246
남코 시스템 246은 플레이스테이션 2를 기반으로 제작된 아케이드 게임 기판으로, CPU 클럭 및 VRAM 강화 모델, 그래픽 성능 향상 모델, 염가판 모델 등 다양한 파생 모델이 있으며 여러 아케이드 게임에 사용되었으나 부품 조달 문제로 수리 지원이 종료되었다. - 명령어 집합 구조 - ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다. - 명령어 집합 구조 - PA-RISC
PA-RISC는 휴렛 팩커드에서 개발한 RISC 기반 명령어 집합 아키텍처로, HP 서버 및 워크스테이션에 사용되었으며 대용량 L1 캐시와 SIMD 명령어 확장 등의 특징을 가졌으나 아이테니엄 아키텍처로의 전환으로 단종되었다. - 마이크로프로세서 - 중앙 처리 장치
중앙 처리 장치(CPU)는 컴퓨터 시스템의 핵심 부품으로, 프로그램 명령어를 해석하고 실행하여 데이터를 처리하는 장치이다. - 마이크로프로세서 - ARM 아키텍처
ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다.
| MIPS 아키텍처 | |
|---|---|
| 기본 정보 | |
| 설계자 | 미프스 테크놀로지스, 이매지네이션 테크놀로지스 |
| 비트 수 | 64비트 (32 → 64) |
| 소개 연도 | 1985년 |
| 버전 | MIPS32/64 릴리스 6 (2014) |
| 설계 방식 | RISC |
| 유형 | 로드-스토어 |
| 인코딩 | 고정 |
| 분기 | 분기 조건 확인 후 1개 명령어 지연과 함께 비교 및 분기 |
| 엔디언 | 양방향 |
| 페이지 크기 | 4KB |
| 확장 | MDMX, MIPS-3D |
| 개방 여부 | 부분적으로 개방. R16000 프로세서는 20년 이상 시장에 판매되었으므로 특허 청구의 대상이 될 수 없음. 따라서 R16000 및 이전 프로세서는 완전히 개방됨. |
| 범용 레지스터 | 32 |
| 부동 소수점 레지스터 | 32 |
| 추가 정보 | |
| 추가 명령어 집합 | MDMX MIPS-3D |
| 관련 링크 | MIPS32 아키텍처 MIPS64 아키텍처 MIPS-3D ASE MIPS16e MIPS 멀티스레딩 |
2. 역사
MIPS 컴퓨터 시스템즈가 R2000 마이크로프로세서를 위해 설계한 MIPS 아키텍처의 첫 번째 버전은 1985년에 MIPS와 R2000이 함께 소개되었다.[11] MIPS II가 도입되면서 이전 버전과 구별하기 위해 ''MIPS''는 ''MIPS I''으로 이름이 변경되었다.[3]
MIPS 컴퓨터 시스템즈의 R6000 (1989)은 최초의 MIPS II 구현이었다.[3] 서버용으로 설계되었지만 상업적으로 실패했다. 1990년대 중반에는 많은 32비트 MIPS 프로세서가 MIPS II를 기반으로 임베디드 시스템용으로 만들어졌다. 1991년에 64비트 MIPS III 아키텍처가 도입되었지만, 1999년에 MIPS32가 나올 때까지 MIPS II가 최신 32비트 MIPS 아키텍처였다.[3]
MIPS 컴퓨터 시스템즈의 R4000 (1991)은 최초의 MIPS III 구현으로, 개인용, 워크스테이션, 서버 컴퓨터에 사용되었다. ACE 컨소시엄을 통해 ARC 표준을 발전시키려 했지만, 개인용 컴퓨터에서는 성공하지 못했다. 하지만 실리콘 그래픽스를 중심으로 워크스테이션과 서버 컴퓨터에서 널리 사용되었다. MIPS III는 Quantum Effect Design의 R4600 (1993), MIPS Technologies의 R4200 (1994) 등 여러 임베디드 마이크로프로세서에 구현되었다. NEC 일렉트로닉스의 R4300i는 닌텐도 64에 사용되어, 플레이스테이션과 함께 1990년대 중반 MIPS 아키텍처 프로세서를 가장 많이 사용한 제품 중 하나였다.
최초의 MIPS IV 구현은 MIPS Technologies R8000 칩셋 (1994)이었다. 주로 과학 및 기술 응용 분야의 고급 워크스테이션 및 서버에서 사용되었다. 이후 MIPS Technologies R10000 (1996), Quantum Effect Devices R5000 (1996) 및 RM7000 (1998) 등이 출시되었다. R10000은 워크스테이션, 서버, 슈퍼컴퓨터에 사용되었고, R5000과 R7000은 고급 임베디드 시스템, 개인용 컴퓨터, 저가 워크스테이션 및 서버에 사용되었다. 도시바의 R5900은 플레이스테이션 2의 Emotion Engine에 사용되었다.
MIPS V는 1996년에 3D 그래픽 성능 향상을 위해 발표되었지만, 실제 구현은 이루어지지 않았다.[12] 1997년에 실리콘 그래픽스는 MIPS V 기반 마이크로프로세서를 발표했지만, 1998년에 프로젝트가 취소되었다. MIPS V의 기능은 MIPS64 릴리스 1 (1999)에 포함되었다.
1998년 MIPS Technologies는 실리콘 그래픽스에서 분사되어 임베디드 시장에 집중했다. MIPS V까지는 이전 버전의 상위 집합이었지만, 이 속성이 문제가 되어 32비트 및 64비트 아키텍처인 MIPS32 및 MIPS64를 정의했다. 둘 다 1999년에 도입되었으며,[15] MIPS32는 MIPS II를, MIPS64는 MIPS V를 기반으로 한다.[15] NEC, 도시바, SiByte (나중에 Broadcom에 인수됨) 등이 MIPS64 라이선스를 획득했다.[15] MIPS32/MIPS64 릴리스 5는 2012년에 발표되었다.[16]
2018년, Wave Computing은 MIPS Open 이니셔티브를 통해 MIPS ISA를 오픈 소스화한다고 발표했지만,[18] 2019년에 프로그램이 종료되었다.[23]
2021년, Wave Computing은 MIPS 아키텍처 개발 중단을 발표하고 RISC-V로 전환했다.[10][24]
2024년, Loongson은 MIPS 아키텍처 사용 권한 소송에서 승소했다.[26]
2. 1. 초기 RISC 개념의 등장 (1980년대)
1981년, 스탠퍼드 대학교의 존 L. 헤네시가 이끄는 팀은 최초의 MIPS 프로세서를 낳은 프로젝트를 시작했다.[63] 기본 개념은 명령어 파이프라인을 깊게 하여 성능을 향상시키는 것이었다. IBM 801 등의 연구나 선례에서 이 방법은 잘 알려져 있었지만, 그 가능성이 완전히 밝혀지지 않았다. 일반적인 프로세서는 명령어 디코더, 산술 논리 장치(ALU), 메모리와 통신하는 로드/스토어 유닛 등으로 구성되어 있다.파이프라인화되지 않은 기존의 "마이크로프로세서" 설계에서는 하나의 명령어 처리를 (거의) 완료해야 다음 명령어 처리를 시작할 수 있었고, 내부에서는 대부분의 시간을 처리에 관여하지 않고 대기하는 회로가 많아졌다. 이에 비해 "기존의 마이크로프로세서"가 아닌, 예를 들어 1960년대의 IBM 7030 무렵에 실현되었던 명령어 파이프라인 방식에서는 하나의 명령어 처리 과정을 여러 단계(스테이지)로 나누어 각 스테이지를 순차적으로 다음 서브 유닛으로 보내 여러 서브 유닛이 겹쳐서 동작할 수 있도록 한다.
명령어 파이프라인에서는 곱셈·나눗셈 명령어처럼 명령어 실행에 오랜 시간이 걸리는 경우, 파이프라인에 다음 명령어를 가져오는 것을 기다릴 필요가 있었다. 이 문제의 해결책으로 파이프라인의 각 스테이지가 처리 중임을 나타낼 수 있도록 하고, 파이프라인을 인터록하여 다음 명령어의 스테이지가 진행되지 않도록 멈춰야 한다. 이것이 스톨이다. 분기 명령어를 실행하면, 후속 명령어가 중간 스테이지까지 진행했던 것을 취소해야 하며, 스톨에 더하여 낭비된 처리 시간도 추가된다. 이것들이 인터록의 손실이 된다.[63]
MIPS 설계에서는 모든 명령어를 단순화하여 실행 처리가 1클록 사이클 안에 완료되도록 계획했다. 그렇게 하면 인터록을 없앨 수 있다. 이러한 설계로 곱셈이나 나눗셈 등의 복잡한 명령어가 1개의 명령어로는 실행할 수 없게 되지만, 단순한 명령어만 있다면 프로세서에 부여하는 클록을 고속으로 할 수 있어 빨리 동작시켜 성능이 향상될 것으로 예상되었다.
복잡하지만 유용했던 명령어를 제거하는 것은 논쟁의 중심이 되었다. 많은 사람들이 "복잡한 곱셈을 단순한 많은 덧셈으로 해서 어떻게 속도가 향상되는가"라고 이 설계 방법과 RISC 일반의 선전에 회의적이며 과대 광고라고 말했다. 그러나 이러한 의견은 이 설계에서 속도 향상의 포인트가 명령어의 기능이 아니라 파이프라인에 있다는 것을 무시한 것이었다. 시간이 걸리는 처리에 관련된 문제는 딜레이 슬롯으로 해결되었다.
예를 들어, 2클록 사이클이 걸리는 명령어가 있는 경우, 다음 명령어를 딜레이 슬롯으로 하고, 거기에 앞의 명령어와 의존 관계가 없는, 즉 앞의 명령어의 결과를 필요로 하지 않고, 또한 앞의 명령어에 관여하고 있는 레지스터를 사용하지 않는 명령어를 배치함으로써 파이프라인을 멈추지 않도록 했다. 이를 실현하기 위해서는 프로세서에 부여하는 명령어 열을 생성하는 컴파일러가 미리 각 명령어마다의 클록 사이클 수를 파악하여 가능한 한 딜레이 슬롯을 유효한 명령어로 채우도록 할 필요가 있었다.
초기 MIPS와 함께, RISC의 전형이며 대표로 여겨지는 Berkeley RISC영어 (SPARC에 미치는 영향이 크다)와 비교하면, 서브루틴 호출의 처리 방식이 크게 다르다. 버클리 RISC는 빈번하게 실행되어 성능에 미치는 영향이 큰 서브루틴 호출의 성능 향상을 위해 큰 레지스터 파일을 가짐과 동시에 레지스터 윈도우라는 메커니즘을 도입했지만, 그것에 의해 서브루틴 호출의 중첩 단수가 제한되어 있다. 헤네시는 훌륭한 컴파일러라면 하드웨어로의 구현에 의존하지 않고 사용하지 않은 레지스터를 찾아낼 수 있으며, 단순히 레지스터를 유효 이용할 뿐만 아니라 모든 태스크의 성능 향상에도 기여한다고 생각했다.
MIPS는 RISC의 제창자인 헤네시와 패터슨이 각각 설계한 명령어 집합(명령어 집합 아키텍처)이라는 것을 이유로, MIPS와 버클리 RISC의 설계가 "전형적인 RISC"라고 여겨지며, 그들의 특징을 가지고 "RISC의 정의"라고 하고 있기 때문에, "MIPS는 가장 전형적인 RISC"라는 언명은 그 반대가 되고 있다.
명령어의 비트 수를 절약하기 위해 명령어 수를 억제함으로써 명령어 형식 중의 연산 코드부로서 필요하게 되는 비트 수를 억제하고 있다. 기본 연산 코드는 명령어 32비트 중의 6비트를 사용하고[71], 나머지 부분의 구성의 차이에 의해 몇 종류의 분류가 있다. 이러한 설계로 실행해야 할 명령어와 필요한 데이터(피연산자)를 1사이클로 로드할 수 있게 되었다.
2. 2. 최초의 MIPS 프로세서 (1980년대 중반 ~ 1990년대 초)
1984년 존 헤네시는 제자, 친구들과 함께 MIPS 컴퓨터 시스템즈를 설립하고, 1985년 최초의 상용 MIPS 프로세서 디자인인 R2000을 출시했다.[11] 1988년에는 R2000을 개선한 R3000을 출시했다. 이러한 32비트 CPU를 통해 MIPS 컴퓨터 시스템즈는 1980년대에 기반을 다졌다. 이 프로세서들은 SGI, DECstation, 소니 NEWS, NEC EWS4800 등에 사용되었다.[69] MIPS 프로세서는 SGI, 소니의 NEWS, NEC의 EWS4800 외에도 DEC의 워크스테이션에도 잠시 사용되며 상업적 성공을 거두었다.2. 3. 64비트 확장 및 MIPS 테크놀로지스 (1990년대)
1991년, MIPS 컴퓨터 시스템즈는 최초의 64비트 마이크로프로세서 R4000을 출시했다.[3] R4000은 가상 주소와 가상 공간 ID를 저장할 수 있는 진보된 트랜슬레이션 룩어사이드 버퍼(TLB)를 채용하여, 빈번한 컨텍스트 스위치 시 TLB를 플러시할 필요성을 줄였다. 이는 다른 경쟁 아키텍처(펜티엄, PowerPC, 알파)에 비해 마이크로커널 구현 시 성능 문제를 개선했다.그러나 R4000 출시 무렵 MIPS사는 재정 위기에 처했고, 1992년 최대 고객이었던 실리콘 그래픽스(SGI)에 인수되었다. MIPS 컴퓨터 시스템즈는 SGI의 자회사가 되어 MIPS 테크놀로지스로 사명을 변경했다.
1990년대 초, 컴팩 등 여러 기업이 ACE 컨소시엄을 설립하여 MIPS 프로세서 기반 컴퓨팅 환경을 구축하려 했다. 이들은 MIPS 등 강력한 RISC 프로세서가 인텔의 IA-32 아키텍처를 대체할 것으로 예측했다. 마이크로소프트의 Windows NT 초기 버전이 Alpha, MIPS, PowerPC 등 RISC 아키텍처를 지원한 것도 이러한 예측을 뒷받침했다. 그러나 인텔이 펜티엄 CPU를 출시하고, Windows NT v4.0에서 지원 아키텍처가 축소되면서, 데스크톱 시장에서 MIPS 프로세서는 거의 사라졌다.[78]
1990년대 후반, MIPS는 임베디드 시스템 시장에서 큰 성공을 거두었다. 1997년에는 4800만 개째의 MIPS 기반 칩이 출하되어, MIPS CPU 패밀리가 모토로라의 MC68000 패밀리를 출하 개수로 넘어섰다.
2. 4. 아키텍처 라이선스 및 다양한 MIPS 프로세서 (1990년대 후반 ~ 현재)
1990년 초, MIPS 테크놀로지스는 프로세서 설계를 서드파티에 라이선스하기 시작했다.[70] 프로세서 코어의 단순함 덕분에 "MIPS 코어"는 다양한 분야에서 사용되었다. 1990년대 후반, MIPS는 임베디드 시스템용 프로세서 분야의 선두 주자가 되었다. 1997년에는 4800만 개째의 MIPS 기반 칩이 출하되어, MIPS CPU 패밀리는 모토로라의 MC68000 패밀리를 출하 개수로 넘어섰다. 1998년 SGI는 MIPS 테크놀로지스를 스핀오프시켰다.[70]1999년, MIPS 테크놀로지스는 32비트의 '''MIPS32'''와 64비트의 '''MIPS64'''로 라이선스 체계를 정리했다.[77] MIPS32는 MIPS II를 기반으로 하며, MIPS64는 MIPS V를 기반으로 한다.[15] NEC, 도시바, SiByte (후에 Broadcom에 인수됨)가 MIPS64 라이선스를 받았다.[15] 필립스, LSI 로직, IDT 등도 참여했다.[15]
몇몇 벤처 기업도 MIPS 아키텍처 라이선스를 받았다. Quantum Effect Devices가 그중 하나였다.[70] MIPS사에서 '''R4300i'''를 설계한 팀은 SandCraft|샌드크래프트영어사를 설립하여 NEC용 '''R5432'''를 설계하고, 후에 임베디드 분야를 위한 최초의 아웃 오브 오더 실행 프로세서인 '''SR7100'''을 만들었다.[70] DEC에서 처음으로 StrongARM을 설계한 팀은 SiByte와 Alchemy Semiconductor라는 두 개의 MIPS 관련 벤처를 설립했다.[70] SiByte는 '''SB-1250'''이라는 MIPS 기반 최초의 시스템 온 칩(SOC)을 만들었고, Alchemy는 '''Au-1000'''이라는 저전력 SOC를 만들었다.[70] SiByte는 브로드컴에 인수되었고, Alchemy는 AMD에 인수되었다가 RMI에 매각되었다.[70] Lexra는 MIPS와 유사한 아키텍처를 기반으로 DSP 및 멀티 스레드 기능을 부가한 칩을 출시했다.[70] Lexra는 MIPS 라이선스를 받지 않아 소송이 발생했지만, 결국 MIPS 테크놀로지스가 Lexra에 무상 라이선스와 배상금을 지불하는 것으로 해결되었다.[70]
Raza Microelectronics, Inc.와 Cavium Networks는 MIPS 아키텍처를 사용한 멀티 코어 장치 구축에 특화된 기업이다.[70] Raza Microelectronics는 8코어 제품을, Cavium Networks는 최대 32코어 버전을 개발했다.[70]
2000년대 이후 MIPS 아키텍처는 주로 임베디드 시스템 분야에서 활용되었다.
2018년 12월, Wave Computing은 MIPS Open 이니셔티브를 통해 MIPS ISA를 오픈 소스화할 것이라고 발표했다.[18] 그러나 2019년에 이 프로그램은 종료되었다.[23]
2021년 3월, Wave Computing은 MIPS 아키텍처 개발 중단을 발표하고 RISC-V로 전환했다.[10][24]
2024년 1월, Loongson은 MIPS 아키텍처 사용 권한 소송에서 승소했다.[26]
3. MIPS 아키텍처의 버전
MIPS는 모듈형 아키텍처로, 최대 4개의 보조 프로세서 (CP0/1/2/3)를 지원한다. CP0는 시스템 제어 보조 프로세서이고, CP1은 선택적인 부동 소수점 장치 (FPU)이다. CP2/3는 선택적으로 구현되는 보조 프로세서이다.
MIPS 아키텍처는 여러 버전이 존재하며, 주요 버전은 다음과 같다.
- MIPS I: 초기 버전으로, 8비트 바이트, 16비트 하프워드 및 32비트 워드를 로드하고 저장하는 명령어를 가지고 있다. 주소 지정 방식은 기본 + 변위 방식 한 가지뿐이다. 32비트 미만의 데이터를 로드할 때는 부호 확장 또는 0으로 확장하여 32비트로 만든다. 모든 로드 명령어는 로드 지연 슬롯을 따른다. MIPS I에는 덧셈, 뺄셈, 비트 연산 (AND, OR, XOR, NOR), ''관계'' 설정, 좌/우 논리 시프트, 우측 산술 시프트, 부호 있는/없는 정수 곱셈 및 나눗셈 명령어가 있다. 모든 MIPS I 제어 흐름 명령어는 분기 지연 슬롯을 따른다.
- MIPS II: 로드 지연 슬롯을 제거하고, 공유 메모리 다중 처리를 위한 명령어, 조건 트랩 명령어, ''분기 가능성'' 명령어, 더블 워드 로드 및 저장 명령어를 추가했다.
- MIPS III: MIPS II와 하위 호환되며, 64비트 메모리 주소 지정 및 정수 연산을 지원한다. GPR, HI/LO 레지스터 및 프로그램 카운터를 64비트로 확장했다. 더블 워드 로드/저장, 정수 연산, 시프트 연산, GPR과 HI/LO 레지스터 간 더블 워드 이동을 위한 명령어가 추가되었다. 기존 32비트 명령어는 대부분 32비트 결과를 부호 확장하여 워드와 더블 워드를 동일하게 처리하도록 재정의되었다.
- MIPS IV: MIPS III의 상위 집합으로, 부동 소수점(FP) 성능 향상을 위해 설계되었다. FP 로드/저장에 인덱스된 어드레싱 모드(베이스 + 인덱스) 및 메모리 프리페칭을 위한 프리페치 명령어가 추가되었다. 부동 소수점 제어/상태 레지스터에 조건 코드 비트 7개가 추가되어 총 8개가 되었다.
- MIPS V: 64비트 부동 소수점 레지스터에 저장된 두 개의 단정밀도(32비트) 부동 소수점 숫자로 구성된 Paired Single(PS) 데이터 타입을 추가했다. 기존 부동 소수점 명령어의 변형이 PS 데이터에 SIMD 방식으로 작동하도록 추가되었다.
- MIPS32/MIPS64: MIPS32는 MIPS II를 기반으로, R4000 및 R5000 계열 64비트 프로세서의 조건부 이동, 프리페치 명령어 등을 추가했다. MIPS64는 32비트 코드 실행을 위한 MIPS32 모드를 추가했다. 2014년 MIPS32/MIPS64 릴리스 6은 지연 슬롯 없는 분기 계열, 대형 절대 주소 지원 지연 슬롯 없는 인덱스 점프 명령어, 특정 비트 위치에서 16비트 즉시 값 로드 명령어, PC 상대 로드 명령어, 비트 역전/바이트 정렬 명령어 등을 추가하고, 자주 사용되지 않는 명령어는 제거했다.
- microMIPS32/64: MIPS16e ASE를 대체하기 위해 설계된 MIPS32/MIPS64 상위 집합이다. 자주 사용되는 32비트 명령어의 16비트 버전을 추가하여 코드 압축을 제공한다.
각 버전에 대한 자세한 내용은 하위 섹션을 참고할 수 있다.
3. 1. MIPS I
MIPS I은 최초의 MIPS 아키텍처이다. 32개의 32비트 범용 레지스터(GPR)를 가지고 있으며, 프로그램 카운터는 32비트이다.[2] 레지스터 `$0`는 항상 0이고, `$31`은 링크 레지스터이다.MIPS I 명령어는 32비트 길이이며, 3가지 형식(R, I, J)으로 나뉜다. 모든 명령어는 6비트 연산 코드(opcode)로 시작한다.[2]
- R 형식: 연산 코드(6비트), 레지스터 3개(각 5비트), 시프트 양(5비트), 기능 코드(6비트)
- I 형식: 연산 코드(6비트), 레지스터 2개(각 5비트), 즉시 값(16비트)
- J 형식: 연산 코드(6비트), 점프 대상 주소(26비트)
| 유형 | -31- 형식(비트) -0- | |||||
|---|---|---|---|---|---|---|
| R | 연산 코드(6) | rs (5) | rt (5) | rd (5) | shamt (5) | funct (6) |
| I | 연산 코드(6) | rs (5) | rt (5) | 즉시 값(16) | ||
| J | 연산 코드(6) | 주소(26) | ||||
MIPS는 로드/스토어 아키텍처이므로, 컴퓨터 메모리 접근은 로드/스토어 명령어로만 가능하다.
MIPS I에는 딜레이 슬롯이 존재한다.
3. 2. MIPS II
MIPS II는 MIPS I에 비해 다음과 같은 주요 기능들이 추가되어 성능과 기능이 향상되었다.- 로드 지연 슬롯 제거: MIPS I의 특징이었던 로드 지연 슬롯(load delay slot)을 제거하여 프로그래밍을 간편하게 하고, 컴파일러 최적화를 용이하게 했다.
- 공유 메모리 다중 처리 지원: 공유 메모리 다중 처리(shared memory multiprocessing) 환경을 지원하기 위해 "Load Linked"와 "Store Conditional" 명령어를 추가했다. 이 명령어들은 여러 개의 프로세서가 동시에 같은 메모리 위치에 접근할 때 발생할 수 있는 문제를 해결하는 데 사용된다.
- 조건 트랩 명령어: 조건 트랩(conditional trap) 명령어를 추가하여 프로그램 실행 중 특정 조건이 만족되면 예외 처리를 할 수 있도록 했다.
- 분기 가능성 명령어: 분기 가능성(branch likely) 명령어를 추가하여 분기 예측의 정확도를 높여 성능을 향상시켰다.
3. 3. MIPS III
MIPS III는 최초의 64비트 명령어 집합 구현이다. 64비트 정수 곱셈 (32비트 및 64비트 피연산자) 및 나눗셈 연산이 추가되었다. 이 명령어들은 결과를 저장하기 위해 HI 및 LO 레지스터를 사용하며, 이 레지스터들 간의 전송을 위한 추가 명령어들이 존재한다.MIPS III는 기존의 32비트 레지스터를 64비트로 확장하고, 64비트 주소 지정을 지원한다. z-buffer 액세스를 위해 부동 소수점 레지스터와 정수 레지스터를 결합하는 기능이 추가되었다. MIPS III는 이전 버전인 MIPS I 및 MIPS II와 하위 호환된다.
MIPS III는 사용자 모드와 커널 모드 외에 감독자 권한 레벨을 추가했다.[63][64]
3. 4. MIPS IV
MIPS IV는 다음과 같은 점이 추가되었다.- 부동 소수점 수 로드/스토어 명령에 "레지스터 + 레지스터" 형식 (인덱스)의 주소 지정을 추가했다.[3]
- 단정밀도 및 배정밀도 부동 소수점 수의 곱셈-덧셈 연산 명령을 추가했다.[3]
- 조건 전송 명령 (정수 레지스터와 부동 소수점 레지스터)을 추가했다.[3]
- FPU의 제어/상태 레지스터에 새로운 조건 비트를 추가하여, 총 8비트로 했다.[3]
3. 5. MIPS V
MIPS V는 1996년 10월 21일 마이크로프로세서 포럼 1996에서 발표된 다섯 번째 아키텍처이다.[84] 주로 3차원 그래픽 성능 향상을 목적으로 설계되었다. 1990년대 중반, 임베디드 용도 외에는 주로 SGI가 그래픽 워크스테이션에 MIPS 마이크로프로세서를 사용했기 때문이다. MIPS V와 동시에 이를 보완하는 MDMX (MIPS Digital Media Extensions, 정수만)도 발표되었다.[85]MIPS V는 페어 싱글 (Paired Single, PS)이라는 새로운 데이터 형식을 추가했다. 이는 단정밀도 (32비트) 부동 소수점 수의 쌍을 64비트 FPU 레지스터에 저장하는 것이다. 산술 연산, 비교, 조건 전송 명령에서 PS 데이터를 SIMD처럼 다룬다. 또한 PS 데이터의 로드, 배치 변경, 변환 등의 명령이 추가되었다. 기존 자원으로 부동 소수점 SIMD를 실현하려는 시도였다.[85]
MIPS V를 구현한 제품은 실제로 등장하지 않았다. 1997년, SGI는 코드명 "H1" (또는 "Beast")와 "H2" (또는 "Capitan")라는 마이크로프로세서를 발표했으나, 이 프로젝트들은 1998년에 중단되었다.
3. 6. MIPS32/MIPS64
MIPS II는 R4000 및 R5000 계열 64비트 프로세서의 조건부 이동, 프리페치 명령어 등의 기능이 추가된 아키텍처이다.[15] MIPS V는 1996년 10월 21일 마이크로프로세서 포럼 1996에서 발표되었으며, 3차원 그래픽 성능 향상을 주 목적으로 하였다.[84] MIPS V는 pair-single (PS)이라는 새로운 데이터 형식을 추가하여, 기존 자원으로 부동 소수점 SIMD를 실현하려 했다.[85]MIPS32는 MIPS II를 기반으로 하며, 이전의 일부 구현에서 사용 가능했던 MUL 및 MADD (곱셈-덧셈) 명령어와 캐시 제어 명령어가 추가되었다.[15] 캐시 제어를 위해 `SYNC` 및 `SYNCI` 명령어가 모두 준비되었다.[30][31] MIPS64는 32비트 코드를 실행하기 위한 MIPS32 모드를 추가했다.[15]
2014년의 MIPS32/MIPS64 릴리스 6은 다음과 같은 사항이 추가되었다.[32]
- 지연 슬롯이 없는 새로운 분기 계열
- 대형 절대 주소를 지원하도록 설계된 지연 슬롯이 없는 인덱스 점프 명령어
- 비트 위치 16, 32 또는 48에서 16비트 즉시 값을 로드하는 명령어 (큰 상수 생성 용이)
- PC 상대 로드 명령어 및 큰(PC 상대) 오프셋을 사용한 주소 생성
- 비트 역전 및 바이트 정렬 명령어 (이전에는 DSP 확장으로만 사용 가능)
- 곱셈 및 나눗셈 명령어는 결과에 대해 단일 레지스터를 사용하도록 재정의
- 진리 값을 생성/사용하는 명령어 개선
또한, 자주 사용되지 않는 일부 조건부 이동, ''분기 유력'' 명령어, 정수 오버플로 트래핑 명령어, 정수 누산기 명령어, 정렬되지 않은 로드 명령어가 제거되었다. 명령어 인코딩을 재구성하여 향후 확장을 위한 공간을 확보했다.
microMIPS32/64 아키텍처는 MIPS16e ASE를 대체하기 위해 설계된 MIPS32 및 MIPS64 아키텍처(각각)의 상위 집합이다. microMIPS는 가장 자주 사용되는 32비트 명령어의 16비트 명령어 버전들을 추가하여, 프로그램이 모드 전환 없이 16비트 및 32비트 명령어를 혼합할 수 있도록 한다. MIPS32/64 릴리스 6부터 MIPS16e에 대한 지원이 종료되었으며, microMIPS는 MIPS에서 유일한 코드 압축 형태이다.
4. 응용 프로그램별 확장 (ASE)
MIPS32 및 MIPS64 기본 아키텍처는 여러 선택적 아키텍처 확장 기능으로 보완될 수 있으며, 이를 통칭하여 ''응용 프로그램별 확장'' (ASE)이라고 한다. 이러한 ASE는 디지털 신호 처리와 같은 특정 작업 부하의 효율성과 성능을 향상시키는 기능을 제공한다.
- MIPS MCU: 마이크로컨트롤러 응용 프로그램에 특화된 기능으로, 인터럽트 처리를 개선한다.
- MIPS16/MIPS16e/MIPS16e2: 코드 밀도를 높여 프로그램 크기를 줄이고 전력 효율성을 개선한다.
- MIPS DSP: 디지털 신호 처리 (DSP) 연산을 가속화한다.
- MIPS SIMD 아키텍처 (MSA): 멀티미디어 처리 성능을 향상시킨다.
- MIPS 가상화: 하드웨어 지원 가상화 기술이다.
- MIPS 멀티 스레딩 (MT): 멀티스레딩을 지원하여 성능을 향상시킨다.
- SmartMIPS: 스마트 카드 응용 프로그램에 최적화되어 있다.
- MIPS 디지털 미디어 eXtension (MDMX): 멀티미디어 응용 프로그램 가속화한다.
- MIPS-3D: 3D 그래픽 성능을 향상시킨다.
4. 1. MIPS MCU
MIPS MCU는 마이크로컨트롤러 응용 프로그램의 향상을 위한 기능 확장의 모음이다. MCU ASE (응용 프로그램별 확장)는 인터럽트 컨트롤러 지원을 확장하고, 인터럽트 지연 시간을 줄이며, 마이크로컨트롤러 시스템 설계에 일반적으로 필요한 I/O 주변 장치 제어 기능을 향상시키기 위해 개발되었다.[34]MIPS MCU는 다음과 같은 기능을 제공한다.
- 별도의 우선 순위 및 벡터 생성
- EIC (외부 인터럽트 컨트롤러) 모드에서 최대 256개의 인터럽트 및 8개의 하드웨어 인터럽트 핀 지원
- 16비트 벡터 오프셋 주소 제공
- 인터럽트 예외 벡터의 사전 인출
- 자동 인터럽트 서문 – 인터럽트 처리 루틴 전에 시스템 상태를 저장하고 업데이트하기 위한 하드웨어 추가
- 자동 인터럽트 후문 – 인터럽트에서 반환하기 위해 스택에 이전에 저장된 시스템 상태 복원
- 인터럽트 체이닝 – 초기 인터럽트 루틴을 종료할 필요 없이 보류 중인 인터럽트 서비스를 지원하여 여러 활성 인터럽트를 저장하고 복원하는 데 필요한 사이클 절약
- 인터럽트 벡터 주소의 추측적 사전 인출 지원. 파이프라인 플러시 및 예외 우선 순위 지정과 메모리 액세스를 중첩시켜 인터럽트 서비스 사이클 수를 줄임.
- 원자적 비트 설정/지우기 명령어를 포함하여 일반적으로 외부 주변 기능 모니터링 또는 제어에 사용되는 I/O 레지스터 내의 비트를 중단 없이 수정하여 작업이 안전하게 수행되도록 보장.
4. 2. MIPS16/MIPS16e/MIPS16e2
MIPS16은 LSI Logic 및 MIPS Technologies가 설계한 응용 프로그램별 확장으로, 1996년 10월 21일 LSI Logic TinyRISC 프로세서에서 처음 구현되었다.[33] 이후 NEC 일렉트로닉스, 필립스 반도체, 도시바 등에서 라이선스를 받아 MIPS I, II 및 III 아키텍처의 확장 기능으로 구현되었다. MIPS16은 32비트 명령어 대신 16비트 명령어를 사용하여 응용 프로그램 크기를 최대 40%까지 줄이고, 전력 효율성과 명령어 캐시 적중률을 개선하면서도 기본 아키텍처와 동일한 성능을 제공한다.[34] MIPS Technologies 및 기타 제공업체의 하드웨어 및 소프트웨어 개발 도구에서 지원된다. MIPS16e는 MIPS32 및 MIPS64 릴리스 1에서 처음 지원되는 MIPS16의 개선된 버전이며, MIPS16e2는 MIPS32 및 MIPS64 (릴리스 5까지)에서 지원되는 MIPS16의 또 다른 개선 버전이다. 릴리스 6에서는 microMIPS로 대체되었다.4. 3. MIPS DSP
Digital signal processing|DSP영어 ASE는 MIPS32/MIPS64 릴리스 2 이상 명령어 세트에 대한 선택적 확장으로, 오디오 및 비디오를 포함한 광범위한 "미디어" 계산을 가속화하는 데 사용될 수 있다. DSP 모듈은 정수 파이프라인의 명령어 세트 및 상태로 구성되며 MIPS 프로세서 코어에 구현하기 위해 최소한의 추가 로직만 필요하다. ASE의 개정 2는 2006년 하반기에 도입되었다. 이 개정은 원래 ASE에 추가 명령어를 추가하지만 다른 방식으로는 역호환된다.[35] MIPS 아키텍처의 대부분과 달리, 이는 다소 불규칙한 일련의 연산이며, 대부분은 특정 주요 알고리즘과 관련하여 선택되었다. 주요 새로운 기능 (기존 MIPS32 대비)은 다음과 같다:[36]- 포화 산술 (계산이 오버플로되면 오버플로되지 않은 답에 가장 가까운 표현 가능한 숫자 전달).
- 범위가 -1에서 +1인 부호 있는 32비트 및 16비트 고정 소수점 분수에 대한 고정 소수점 산술 ("Q31" 및 "Q15"라고 널리 부름).
- 기존 정수 곱셈 및 곱셈-누산 명령어는 이중 크기 누산기 ("hi/lo" 및 MIPS32 CPU에서 64비트)에 결과를 제공한다. DSP ASE는 3개의 누산기를 더 추가하고 곱셈-누산의 몇 가지 다른 종류를 추가한다.
- 32비트 레지스터에 팩된 4 x 부호 없는 바이트 또는 2 x 16비트 값을 대상으로 하는 SIMD 명령어 (DSP ASE의 64비트 변형도 더 큰 벡터를 지원).
- SIMD 연산은 기본 산술, 시프트 및 일부 곱셈-누산 유형 연산이다.
4. 4. MIPS SIMD 아키텍처 (MSA)
MIPS SIMD 아키텍처(MSA)는 멀티미디어 처리 성능 향상을 위해 설계된 명령어 세트 확장이다.[36] MSA는 다음과 같은 주요 특징을 갖는다.- 벡터 레지스터: 32개의 벡터 레지스터를 가지며, 각 레지스터는 16 x 8비트, 8 x 16비트, 4 x 32비트, 2 x 64비트 벡터 요소를 저장할 수 있다.
- 벡터 연산: 정수, 고정 소수점, 부동 소수점 데이터에 대한 효율적인 벡터 병렬 연산을 지원한다.
- 절대값 연산: 절대값 피연산자에 대한 연산을 지원한다.
- 반올림 및 포화: 반올림 및 포화 옵션을 사용할 수 있다.
- 곱셈 및 곱셈-덧셈: 전체 정밀도 곱셈 및 곱셈-덧셈을 지원한다.
- 데이터 변환: 정수, 부동 소수점, 고정 소수점 데이터 간 변환을 지원한다.
- 비교 및 분기: 조건 플래그가 없는 벡터 수준 비교 및 분기 명령을 제공한다.
- 셔플 연산: 벡터(1D) 및 배열(2D) 셔플 연산을 지원한다.
- 엔디안 독립성: 엔디안 독립적인 연산을 위한 유형화된 로드 및 저장 명령어를 제공한다.
- IEEE 표준 준수: IEEE 부동 소수점 산술 표준 754-2008을 준수한다.
- 예외 신호: 요소 정밀 부동 소수점 예외 신호를 지원한다.
- 확장성: 더 많은 게이트/트랜지스터를 가진 칩을 위한 사전 정의된 확장 가능한 확장을 제공한다.
- 컴파일러 지원: 일반 컴파일러 지원을 활용하여 컴퓨팅 집약적인 응용 프로그램 가속화를 지원한다.
- 소프트웨어 프로그래밍: 소비 가전 응용 프로그램 또는 전용 하드웨어에서 다루지 않는 기능에 대한 소프트웨어 프로그래밍 가능 솔루션을 제공한다.
- 응용 분야: 새로운 데이터 마이닝, 기능 추출, 이미지 및 비디오 처리, 인간-컴퓨터 상호 작용 응용 프로그램, 고성능 과학 컴퓨팅 등 다양한 분야에 활용될 수 있다.[36]
4. 5. MIPS 가상화
MIPS 가상화는 하드웨어 지원 가상화 기술이다.4. 6. MIPS 멀티 스레딩 (MT)
각 멀티 스레드 MIPS 코어는 단일 파이프라인 및 기타 하드웨어 리소스를 공유하는 최대 2개의 VPE (가상 처리 요소)를 지원할 수 있다.[36] 각 VPE에는 소프트웨어 시스템에서 볼 수 있는 완전한 프로세서 상태의 복사본이 포함되어 있으므로, 각 VPE는 SMP 리눅스 운영 체제에 완전한 독립형 프로세서로 표시된다.[36]더 세분화된 스레드 처리 응용 프로그램의 경우, 각 VPE는 최대 9개의 TC (Thread Contexts, 스레드 컨텍스트)를 지원할 수 있다.[36] TC는 공통 실행 유닛을 공유하지만, 각 TC에는 자체 프로그램 카운터 및 코어 레지스터 파일이 있으므로 각 TC는 소프트웨어의 스레드를 처리할 수 있다.[36]
MIPS MT 아키텍처는 프로세서 사이클을 스레드에 할당하고 선택적 QoS 관리자 블록을 사용하여 상대적 스레드 우선 순위를 설정할 수 있다.[36] 이를 통해 버스를 통한 정보 흐름을 결정하는 두 가지 우선 순위 지정 메커니즘을 사용할 수 있다.[36] 첫 번째 메커니즘은 사용자가 한 스레드의 우선 순위를 다른 스레드보다 높게 지정할 수 있도록 한다.[36] 두 번째 메커니즘은 지정된 사이클 비율을 시간이 지남에 따라 특정 스레드에 할당하는 데 사용된다.[36] 이 두 메커니즘을 함께 사용하면 스레드 집합에 대역폭을 효과적으로 할당하고 지연 시간을 더 잘 제어할 수 있다.[36]
실시간 시스템에서는 시스템 수준의 결정성이 매우 중요하며, QoS 블록은 시스템의 예측 가능성을 개선하는 데 도움이 된다.[36] 고급 시스템의 하드웨어 설계자는 MIPS Technologies에서 제공하는 표준 QoS 블록을 해당 응용 프로그램에 맞게 특별히 조정된 블록으로 대체할 수 있다.[36]
4. 7. SmartMIPS
SmartMIPS는 스마트 카드 소프트웨어의 성능을 개선하고 메모리 소비를 줄이기 위해 Gemplus International 및 MIPS Technologies에서 설계한 응용 프로그램별 확장(ASE)이다. 스마트 카드는 MIPS64 프로세서의 기능을 필요로 하지 않으므로 MIPS32만 지원한다. 소수의 스마트 카드만이 SmartMIPS를 사용한다.[33]4. 8. MDMX (MIPS 디지털 미디어 확장)
MIPS 디지털 미디어 확장 (MDMX)는 1990년대에 RISC 및 CISC 시스템에서 일반적이었던 멀티미디어 응용 프로그램 가속을 위한 확장이다.[36]4. 9. MIPS-3D
MIPS-3D는 3D 그래픽 응용 프로그램의 성능을 향상시키기 위한 추가 명령어 집합이다.[90]5. 호출 규약
MIPS는 여러 호출 규약을 가지고 있으며, 특히 32비트 플랫폼에서 그러하다.
O32 ABI는 MIPS를 위한 최초의 System V ABI로서의 지위 덕분에 가장 일반적으로 사용되는 ABI이다.[37][38] 이는 순전히 스택 기반이며, 인수를 전달하는 데 네 개의 레지스터($a0–$a3)만 사용할 수 있다. 호출 대상이 인수를 저장해야 하는 경우를 대비하여 스택에 공간이 예약되지만, 호출자는 레지스터를 여기에 저장하지 않는다. 반환 값은 레지스터 ($v0)에 저장되고, 두 번째 반환 값은 ($v1)에 저장될 수 있다.
64비트의 경우, Silicon Graphics의 N64 ABI가 가장 일반적으로 사용된다. 가장 중요한 개선 사항은 이제 8개의 레지스터를 인수 전달에 사용할 수 있다는 것이며, 부동 소수점 레지스터의 수도 32개로 늘렸다. 또한 ILP32 버전인 N32가 있는데, 이는 x32 ABI와 유사하게 더 작은 코드를 위해 32비트 포인터를 사용한다. 둘 다 CPU의 64비트 모드에서 실행된다.[39] N32 및 N64 ABI는 처음 8개의 함수 인수를 레지스터 ($a0–$a7)에 전달하고, 그 다음 인수는 스택에 전달한다. 반환 값 (또는 이에 대한 포인터)은 레지스터 ($v0)에 저장되고, 두 번째 반환 값은 ($v1)에 저장될 수 있다.
O32를 N32와 더 유사한 32비트 ABI로 대체하려는 몇 가지 시도가 있었다. 1995년 컨퍼런스에서 32비트 버전이 상당히 유사한 MIPS EABI가 나왔다.[40]
O32 및 N32/N64 모두에서 반환 주소는 $ra 레지스터에 저장된다. 이는 JAL (jump and link) 또는 JALR (jump and link register) 명령어를 사용하여 자동으로 설정된다.
| 이름 | 번호 | 용도 | 호출 대상이 보존해야 하는가? |
|---|---|---|---|
| $zero | $0 | 상수 0 | #redirect |
| $at | $1 | 어셈블러 임시 레지스터 | |
| $v0–$v1 | $2–$3 | 함수 반환 및 표현식 평가를 위한 값 | |
| $a0–$a3 | $4–$7 | 함수 인수 | |
| $t0–$t7 | $8–$15 | 임시 레지스터 | |
| $s0–$s7 | $16–$23 | 저장된 임시 레지스터 | |
| $t8–$t9 | $24–$25 | 임시 레지스터 | |
| $k0–$k1 | $26–$27 | OS 커널용 예약 | #redirect |
| $gp | $28 | 전역 포인터 | (PIC 코드 제외) |
| $sp | $29 | 스택 포인터 | |
| $fp | $30 | 프레임 포인터 | |
| $ra | $31 | 반환 주소 | #redirect |
6. MIPS 프로세서 활용
MIPS 프로세서는 임베디드 시스템, 주거용 게이트웨이, 라우터 등에서 널리 사용된다. 1980년대와 1990년대에는 개인용 컴퓨터, 워크스테이션, 서버에도 사용되었으며, 디지털 이큅먼트 코퍼레이션, MIPS 컴퓨터 시스템즈, NEC, 실리콘 그래픽스 등 많은 회사에서 MIPS 프로세서를 채택했다.
닌텐도 64, 소니의 플레이스테이션, 플레이스테이션 2, 플레이스테이션 포터블과 같은 비디오 게임 콘솔에도 MIPS 프로세서가 사용되었다. 1990년대에는 슈퍼컴퓨터에도 사용되었지만, 현재는 TOP500 목록에서 모두 사라졌다.
1990년대 중후반에는 생산된 RISC 마이크로프로세서 셋 중 하나가 MIPS 프로세서라는 추산이 있을 정도로 널리 사용되었다.[47] 2010년대 후반까지도 자동차, 무선 라우터, LTE 모뎀, 마이크로컨트롤러 등 임베디드 시장에서 여전히 널리 사용되고 있지만, 개인용 컴퓨터, 서버 등에서는 대부분 사라졌다.
6. 1. 임베디드 시스템
주거용 게이트웨이 및 라우터와 같은 임베디드 시스템에서 MIPS 프로세서가 사용된다.[47] 1990년대에 걸쳐 MIPS 아키텍처는 컴퓨터 네트워크, 전기 통신, 아케이드 게임, 게임기, 프린터, 디지털 셋톱 박스, 디지털 TV, DSL 모뎀, 케이블 모뎀, PDA와 같은 임베디드 시장에서 널리 채택되었다.MIPS의 임베디드 구현은 저전력 및 저발열을 특징으로 하며, 임베디드용 개발 도구도 충실하고, 관련 지식도 많이 축적되어 있어 지금도 임베디드 시장에서 인기를 유지하고 있다.[79]
6. 2. 워크스테이션/서버 (과거)
SGI, DEC, NEC, 소니 등에서 MIPS 프로세서를 탑재한 워크스테이션 및 서버 컴퓨터를 제조했다. 1980년대와 1990년대에 이들 회사는 MIPS 프로세서를 사용하여 개인용, 워크스테이션, 서버 컴퓨터를 생산했다.[47]MIPS 컴퓨터 시스템즈는 1985년 최초의 디자인 R2000과 1988년 이를 개선한 R3000 32비트 CPU를 통해 1980년대에 기반을 다졌다. 이 프로세서들은 SGI, DEC DECstation, 소니 NEWS, NEC EWS4800 등에 사용되었다.[47]
1991년, MIPS 컴퓨터 시스템즈는 최초의 64비트 마이크로프로세서 R4000을 출시했다. R4000은 가상 주소와 가상 공간 ID를 저장하는 진보된 TLB를 채택하여 마이크로커널 구현 시 성능 문제를 줄였다. 1992년 SGI는 재정 위기에 빠진 MIPS사를 인수하여 MIPS 아키텍처의 존속을 보장했다.[47]
MIPS 프로세서를 사용한 워크스테이션 시스템을 제조했던 기업으로는 SGI, MIPS 컴퓨터 시스템즈, 화이트채플 워크스테이션, 올리베티, 지멘스-닉스도르프, 에이서, DEC, NEC, 소니, 데스크스테이션 등이 있었다. MIPS 아키텍처로 이식된 운영 체제로는 SGI의 IRIX, 마이크로소프트의 Windows NT (v4.0까지), Windows CE, 리눅스, BSD, UNIX System V, QNX, MIPS 자체의 RISC/os 등이 있다.[47]
1990년대 초, 컴팩 외 다수의 기업이 MIPS 프로세서 기반 컴퓨팅 환경을 만들기 위해 Advanced Computing Environment (ACE) 컨소시엄을 설립했다. 그러나 인텔이 펜티엄 CPU를 출시하면서, 마이크로소프트의 Windows NT v4.0에서는 지원 아키텍처가 축소되었고, 이후 SGI가 아이테니엄 및 IA-32 아키텍처로 이전하면서 데스크톱 시장에서 MIPS 프로세서는 거의 사라졌다.[78]
6. 3. 게임 콘솔
역사적으로, 닌텐도 64, 소니의 플레이스테이션, 플레이스테이션 2, 플레이스테이션 포터블에서 MIPS 프로세서를 사용했다.[47]6. 4. 슈퍼컴퓨터 (과거)
실리콘 그래픽스(SGI)는 1990년대 초반부터 데스크톱형 그래픽스 워크스테이션뿐만 아니라 고성능 컴퓨팅 시장에도 주력했다.[47] R4400 및 R8000을 사용한 Challenge 시리즈라는 서버 시스템으로 성공을 거두었고, 이후 R10000도 채택했다.[47] 그 후 SGI는 더욱 강력한 시스템 개발에 주력하여,[47] R10000을 채택한 Origin 2000을 개발했는데, 이는 NUMA형으로 최대 1024개의 프로세서를 상호 연결하는 시스템이었다.[47] SGI는 더 나아가 R14000 및 R16000을 최대 1024개 구성할 수 있는 Origin 3000을 개발했다.[47] 그러나 SGI는 2005년에 IA-64 아키텍처로 전환을 결정하고, MIPS 기반 슈퍼컴퓨터 개발을 중단했다.[47]6. 5. 기타
1990년대에 걸쳐 MIPS 아키텍처는 컴퓨터 네트워크, 전기 통신, 아케이드 게임, 게임기, 프린터, 디지털 셋톱 박스, 디지털 TV, DSL 모뎀 및 케이블 모뎀, PDA와 같은 임베디드 시장에서 널리 채택되었다.[79]MIPS의 임베디드 구현은 저전력 및 저발열을 특징으로 하며, 임베디드용 개발 도구도 충실하고, 지식 축적도 있기 때문에 지금도 임베디드 시장에서 인기를 유지하고 있다.[79]
2008년 시점에서, MIPS는 디지털 TV에서 68%, DVD 레코더에서 72%, 블루레이 레코더에서 77%, 케이블 TV 셋톱 박스에서 70%, IP TV 셋톱 박스에서 77%의 점유율을 차지하며, 동영상 디코더 및 인코더를 필요로 하는 영상 관련 분야에서 널리 사용되었다.[79]
7. 시뮬레이터
OVPsim은 비상업적 용도로 자유롭게 사용할 수 있는 시뮬레이터로, 프로세서, 주변 장치 및 플랫폼 모델 라이브러리와 사용자가 자체 모델을 개발할 수 있게 해주는 API를 포함한다.[48] MIPS 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, microAptiv, interAptiv, proAptiv 32비트 코어와 MIPS 64비트 5K 범위의 코어를 포함하는 모델들은 Imperas에서 제작 및 유지 관리하며 MIPS Technologies와의 파트너십을 통해 MIPS-Verified 마크를 받았다.[49] OVPsim은 Imperas에서 개발 및 유지 관리하며 매우 빠르고, 멀티코어 동종 및 이종 아키텍처와 시스템을 처리하도록 구축되었다.
교육용으로 SPIM이라는 MIPS32 시뮬레이터가 있으며, EduMIPS64[50]는 Java/Swing으로 작성된 GPL 그래픽 크로스 플랫폼 MIPS64 CPU 시뮬레이터이다.
MARS[51]는 교육용, 특히 Hennessy의 ''컴퓨터 구성 및 설계''에 사용하도록 설계된 또 다른 GUI 기반 MIPS 에뮬레이터이다.
WebMIPS[52]는 일반적인 파이프라인 프로세서의 시각적 표현이 있는 브라우저 기반 MIPS 시뮬레이터이다.
QtMips는 기본적인 컴퓨터 아키텍처 강좌를 위해 간단한 5단계 파이프라인 시각화와 캐시 원리 시각화를 제공한다.[53][54][55] 이는 웹 애플리케이션과 Windows, 리눅스, macOS용 다운로드 가능한 프로그램으로 모두 제공된다.
GXemul (이전에는 mips64emul 프로젝트로 알려짐) 및 QEMU 프로젝트에서 더 발전된 무료 에뮬레이터를 사용할 수 있다.
상용 시뮬레이터는 Wind River Simics (MIPS 4Kc 및 5Kc, PMC RM9000, QED RM7000, Broadcom/Netlogic ec4400, Cavium Octeon I), Imperas (모든 MIPS32 및 MIPS64 코어), VaST Systems (R3000, R4000), CoWare (MIPS4KE, MIPS24K, MIPS25Kf 및 MIPS34K)가 있다.
Creator 시뮬레이터[56][57][58][59][60]는 이식 가능하며 사용자가 다양한 프로세서의 다양한 어셈블리 언어를 배울 수 있도록 한다.
WepSIM[61][62]는 MIPS 명령의 하위 집합이 마이크로프로그래밍되는 브라우저 기반 시뮬레이터이다.
8. 龍芯 (Loongson)
중국과학원이 설계한 MIPS 호환 마이크로프로세서로, 초기에는 MIPS 테크놀로지스(MIPS Technologies)로부터 라이선스를 받지 않았다. 초기 설계에서는 MIPS 아키텍처에 있는 4개의 명령이 구현되지 않았다.[80] 2009년 6월, 중국과학원은 MIPS 테크놀로지스로부터 직접 MIPS32 및 MIPS64 아키텍처의 라이선스 제공을 받았다.[81]
2006년부터 각 회사에서 룽신(Loongson)을 기반으로 한 컴퓨터를 출시하고 있으며, 저전력 넷북이나 넷탑도 있다.[82][83]
9. MIPS 마이크로프로세서 모델
750 (65nm)
1468 (40nm)
1454 (40nm)
65nm
40nm