AMD Am29000

섬네일|AMD 29000 마이크로프로세서
right|섬네일|AMD 29030
AMD Am29000은 일반적으로 29k로 줄여 쓰이며, AMD에서 개발하고 제조한 32비트 RISC 마이크로프로세서 및 마이크로컨트롤러 제품군이다. 핵심적인 버클리 RISC를 기반으로 한 29k는 상당한 개선을 추가했다. 이들은 당시 여러 제조업체의 레이저 프린터에 일반적으로 사용되었으며, 최초 모델 컬러 레이저젯(Am29030)부터 Am29040을 사용하는 HP 컬러 레이저젯 5에 이르기까지 HP의 고급 컬러 레이저젯 시리즈에 사용된 것으로 잘 알려져 있다.

1984~1985년부터 개발되어 1987년 3월에 발표되고 1988년 5월에 출시된 최초의 Am29000에 이어 1995년 Am29040에 이르기까지 몇 가지 버전이 출시되었다. 29050은 곱셈-누산기 연산을 사이클당 한 번 실행할 수 있는 부동소수점 장치를 일찍부터 탑재한 것으로 유명하다.

AMD는 1995년 말까지 슈퍼스칼라 버전을 설계하고 있었지만, 설계팀이 PC (x86) 비즈니스 지원으로 이전되면서 29k 개발을 중단했다. AMD의 임베디드 비즈니스에서 남은 부분은 80186 파생 제품인 임베디드 186 제품군으로 재편되었다. 이때까지 AMD의 대부분의 자원은 29k 설계의 많은 아이디어와 개별 부품을 사용하여 AMD K5를 생산하는 데 집중되었다.

 설계 
29k는 선 SPARC, 인텔 i960, ARM, RISC-V와 같은 버클리 RISC 설계에서 진화했다.

버클리 RISC 파생 설계 중 일부에서 사용된 설계 요소 중 하나는 레지스터 윈도우 개념이다. 이것은 프로시저 호출 속도를 크게 높이는 데 사용되는 기술이다. 아이디어는 큰 집합의 프로세서 레지스터를 스택으로 사용하여 호출 중에 로컬 데이터를 레지스터 집합에 로드하고, 프로시저가 반환될 때 "데드"로 표시하는 것이다. 루틴에서 반환되는 값은 SPARC(예시)에서 상위 8개 레지스터인 "글로벌 페이지"에 배치된다. 스탠퍼드 대학교의 경쟁적인 초기 RISC 설계인 스탠퍼드 MIPS도 이 개념을 살펴보았지만, 개선된 컴파일러가 고정된 윈도우보다 범용 레지스터를 더 효율적으로 사용할 수 있다고 판단했다.

원래 버클리 설계, SPARC 및 i960에서는 윈도우 크기가 고정되어 있었다. 하나의 로컬 변수만 사용하는 루틴은 SPARC에서 여전히 8개의 레지스터를 사용하며, 이 비싼 자원을 낭비했다. 29000은 가변 윈도우 크기를 사용하여 이러한 초기 설계와 달랐다. 이 예시에서는 두 개의 레지스터만 사용되며, 하나는 로컬 변수용, 다른 하나는 반환 주소용이다. 또한 더 많은 레지스터를 추가했는데, 프로시저 스택용으로 동일한 128개 레지스터 외에 글로벌 액세스용으로 64개를 추가했다. 비교하자면 SPARC는 총 128개 레지스터를 가졌고, 글로벌 집합은 표준 윈도우 8개였다. 이러한 변화로 인해 다양한 워크로드에서 29000의 레지스터 사용이 훨씬 향상되었다.

29000은 또한 레지스터 윈도우 스택을 인메모리(그리고 이론적으로 인캐시) 스택으로 확장했다. 윈도우가 가득 차면 호출은 레지스터 스택의 끝에서 메모리로 푸시되어 루틴이 반환될 때 필요에 따라 복원되었다. 일반적으로 29000의 레지스터 사용은 버클리 개념을 기반으로 한 경쟁 설계보다 훨씬 발전했다.

섬네일|AMD 29040

버클리 설계와 또 다른 차이점은 29000에는 특수 목적의 조건 코드 레지스터가 포함되지 않았다는 것이다. 어떤 레지스터든 이 목적으로 사용할 수 있어 일부 코드를 복잡하게 만드는 대신 조건을 쉽게 저장할 수 있었다. 분기 대상 캐시(29000에는 512바이트, 29050에는 1024바이트)는 분기 대상 주소에서 발견되는 4개 또는 2개의 순차적 명령어 집합을 저장하여 분기가 이루어질 때 명령어 페치 지연 시간을 줄였다. 29000은 분기 예측 시스템을 포함하지 않았기 때문에 분기가 이루어질 때 지연이 발생했다. 즉, 29000은 단일 분기 지연 슬롯을 가진다. 이 버퍼는 분기 대상 주소에서 네 개 또는 두 개의 명령어를 저장하여 페치 버퍼가 메모리에서 새 명령어로 다시 채워지는 동안 즉시 실행할 수 있게 함으로써 이를 완화했다.

가상 주소 변환 지원은 MIPS 아키텍처와 유사한 접근 방식을 따랐다. 64개 엔트리의 변환 색인 버퍼(TLB)는 가상 주소에서 물리 주소로의 매핑을 유지했으며, 변환되지 않은 주소가 발생하면 그 결과인 TLB "미스"로 인해 프로세서가 소프트웨어 루틴으로 트랩되어 물리 메모리에 대한 적절한 매핑을 제공하는 역할을 수행했다. TLB 미스 이벤트 발생 시 교체할 TLB 엔트리를 선택하기 위해 임의의 레지스터를 사용한 MIPS 접근 방식과는 대조적으로, 29000은 전용 lru(최근 사용되지 않음) 레지스터를 제공했다. 29000 제품군 중 일부는 실리콘 일부를 주변 장치에 할애하기 위해 16개의 TLB 엔트리만 제공했다. 이를 보완하기 위해 매핑에 사용되는 최대 페이지 크기는 8 키비바이트에서 16 메가바이트로 증가했다.

 버전 
최초의 Am29000은 1988년에 출시되었으며, 내장 MMU를 포함했지만 부동소수점 지원은 Am29027 FPU로 오프로드되었다. MMU 또는 분기 대상 캐시에 실패한 장치는 Am29005로 판매되었다.

1991년에 제품군은 Am29030 및 Am29035로 확장되었으며, 각각 8 KB 또는 4 KB의 명령어 캐시를 포함했다. 그 때쯤 Am29050도 출시되었으며, 온칩 캐시는 없지만 완전히 파이프라인화된 단일 곱셈-누산기 연산을 갖춘 부동소수점 장치를 특징으로 하며, 80%의 적중률을 주장하는 더 큰 1 KB 분기 대상 캐시, 그리고 4개 엔트리의 TLB와 유사한 물리 주소 캐시로 가속화된 더 나은 파이프라인화된 로드 연산을 갖추고 있다. 슈퍼스칼라 프로세서는 아니지만, 부동소수점 연산과 정수 연산이 같은 사이클에 완료되도록 허용한다. 정수 및 부동소수점 측은 각각 레지스터에 자체 쓰기 포트를 가지고 있다. 1마이크론 공정에서 428,000개의 트랜지스터를 포함했으며 0.8마이크론의 유효 채널 길이를 가졌다 그리고 20, 25, 33, 40 MHz에서 사용할 수 있었다. 이후 Am29040이 33, 40, 50 MHz에서 출시되었으며, 4 KB 데이터 캐시, 곱셈 장치 및 몇 가지 다른 개선 사항을 제외하고는 Am29030과 같았다. 119 mm2 Am29040은 0.7마이크론 공정에서 120만 개의 트랜지스터를 포함했다.

슈퍼스칼라 버전의 29K가 설계되고 있었지만, x86에 유리하게 취소되었다. 코드명은 재규어였으며, 1994년 11월과 1995년 8월에 설명되었다. 이것은 고급 설계였으며, 여섯 개의 예약 스테이션으로 4방향 디스패치를 수행하고 명령어의 투기적 비순차적 명령어 처리를 수행하며, 4방향 은퇴를 수행할 수 있었다. 레지스터 파일은 한 번에 네 번 읽기와 두 번 쓰기를 허용했다. 명령어 및 데이터 캐시는 각각 8 KB였다. 캐시에서 로드는 저장을 우회할 수 있었다. 비용 문제와 대상 시장 때문에 온칩 FPU가 없었다. 0.4마이크론 공정에서 100 MHz 주파수를 달성할 것으로 예상되었다.

AMD는 출시되지 않은 29K 마이크로아키텍처를 K5 시리즈의 x86 호환 프로세서의 기반으로 사용했다. ALU는 약간의 수정과 함께 재정렬 버퍼처럼 계승되었다. FPU는 29050에서 가져왔지만 80비트 정밀도로 확장되었다. K5는 디코딩 시 x86 명령어를 "RISC-OP"로 변환했으며, 캐시된 명령어의 프리디코딩 정보의 도움을 받았다. AMD는 슈퍼스칼라 29K가 K5보다 성능이 약간 낮지만 크기 차이 때문에 비용은 훨씬 낮을 것이라고 주장했다.

하니웰 29KII는 AMD 29050을 기반으로 하는 CPU로, 실시간 항공전자 장비에 널리 사용되었다.

 제품 및 응용 프로그램 
유닉스 워크스테이션에서의 잠재적인 사용과 함께 "중고급 임베디드 응용 프로그램"을 위한 제품으로 포지셔닝된 29000은 X 터미널, 레이저 프린터 컨트롤러 카드, 그래픽 가속기 카드, 광학 문자 인식 솔루션, 네트워크 브리지 등 다양한 제품에 사용되었다. 29000의 메모리 아키텍처는 제품 설계자들에게 특히 매력적이었으며, 외장 캐시 메모리를 포기하고 허용 가능한 성능을 유지하면서 동적 RAM을 직접 사용할 수 있게 했다. 프로그램 명령어 및 데이터를 보존하는 데 사용되는 메모리 기술 선택에 대한 어느 정도의 유연성을 허용했다.

29k는 계산 가속기 또는 코프로세서로 일부 사용되었으며, 특히 매킨토시 및 IBM PC 호환 플랫폼에서 그랬다. 예를 들어, 야크 시스템즈 코퍼레이션(Yarc Systems Corporation)은 매킨토시 II 및 PC AT 시스템용 29k 기반 "RISC 코프로세서" 카드와 모토로라 68020 및 68030 프로세서를 특징으로 하는 기타 "CISC 코프로세서" 카드, 그리고 T800 트랜스퓨터 프로세서를 특징으로 하는 "병렬 코프로세서" 카드를 생산했다. Am29000 CPU 및 Am29027 부동소수점 가속기를 사용하는 NuSuper (원래 McCray라고 명명됨) 및 AT-Super 카드에 이어 MacRageous가 Am29050으로 CPU를 업그레이드했다. 이러한 가속기 카드는 매킨토시 II 자체 성능의 여러 배를 제공했으며 DECstation 3100과 같은 RISC 워크스테이션과 경쟁력 있는 벤치마킹 결과를 보였다. 여러 장의 카드를 시스템에 장착할 수도 있었다. 그러나 이러한 카드를 장착한 매킨토시 II 시스템의 가격은 유닉스를 실행하는 기존 RISC 워크스테이션에 근접했다. AT-Super는 약 4,600달러였으며 유닉스를 실행하는 것으로 보고되었고, 인텔의 i860 프로세서를 사용하는 유사한 제품과 경쟁했다.

29k를 활용한 주목할 만한 제품 중 하나는 애플의 매킨토시 IIfx용 Macintosh Display Card 8·24 GC였다. 이 제품은 30 MHz Am29000 프로세서, 64 KB 정적 RAM 캐시, 2 MB 비디오 RAM을 특징으로 하며, QuickDraw 그래픽 툴킷에서 사용할 추가 2 MB 동적 RAM 옵션을 제공했다. 29k의 포함은 이 특정 버전의 카드를 애플에서 판매하는 다른 버전과 차별화했으며, 24비트 픽셀 이미지를 처리할 때 성능을 크게 향상시켰다.

 각주 

 외부 링크 
 AMD 29k (Streamlined Instruction Processor) ID Guide
 29k 제품군에 대한 PDF 책
 chipdb.org 다른 Am29000 프로세서 이미지

분류:마이크로컨트롤러
분류:AMD의 마이크로프로세서
분류:슈퍼스칼라 마이크로프로세서
분류:32비트 마이크로프로세서