KR20010092736A - 데이터 밀도가 높은 risc 프로세서 - Google Patents

데이터 밀도가 높은 risc 프로세서 Download PDF

Info

Publication number
KR20010092736A
KR20010092736A KR1020017006015A KR20017006015A KR20010092736A KR 20010092736 A KR20010092736 A KR 20010092736A KR 1020017006015 A KR1020017006015 A KR 1020017006015A KR 20017006015 A KR20017006015 A KR 20017006015A KR 20010092736 A KR20010092736 A KR 20010092736A
Authority
KR
South Korea
Prior art keywords
instruction
register
field
instructions
source register
Prior art date
Application number
KR1020017006015A
Other languages
English (en)
Other versions
KR100412920B1 (ko
Inventor
킬리안얼에이.
곤잘레스리카도이.
딕시티애시쉬비.
램모니카
리히텐스타인월터디.
로웬크리스토퍼
루텐버그존시.
윌슨로버트피.
Original Assignee
추후기재
텐실리카 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 추후기재, 텐실리카 인코포레이티드 filed Critical 추후기재
Publication of KR20010092736A publication Critical patent/KR20010092736A/ko
Application granted granted Critical
Publication of KR100412920B1 publication Critical patent/KR100412920B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants

Abstract

RISC 프로세서는 프로그램의 실행을 위하여 요구된 명령어 수, 클럭 주기 및 명령어당 평균 클럭수간의 관계를 최적화하는 것에 부가하여 수식 S=IS*BI 를 최적화하기 위해 설계되기도 하는 명령어 집합을 구현하는 것으로, 여기서 S는 비트 단위의 프로그램 명령어의 사이즈이고, IS는 프로그램을 표현하기 위해 요구되는 명령어의정적인 수(실행에 의해 요구되는 수가 아님)이며, BI는 명령어당 평균 비트수이다. 종래의 RISC 구조와 비교하여, 본 프로세서는 BI 및 IS가 낮아 클럭 주기와 명령어당 평균 클럭수에 있어 최소 증가를 나타낸다. 본 프로세서는 로드/저장 구조를 갖는 범용 레지스터를 포함하는 RISC 원칙을 기초로 하여 고정-길이 고성능 인코딩에 있어서 우수한 코드 밀도를 제공한다. 또한, 본 프로세서는 고성능을 유지하는 간단한 가변-길이 인코딩을 구현한다.

Description

데이터 밀도가 높은 RISC 프로세서{HIGH DATA DENSITY RISC PROCESSOR}
프로세서 명령어 집합의 설계는 잘 확립되어 있는 기술이다. 대부분의 명령어 집합의 특성들은 그들 자체적으로 새로운 것은 아니다. 그러나, 개개의 특성들은 상기 기술 상태를 개선시키는 새롭고 독특한 방법들과 조합될 수 있다. 특히, 명령어 집합의 설계가 이전의 명령어 집합과 다른 용도로 최적화될 때, 상당한 진보가 상기 명령어 집합를 구현시키는 프로세서가 목표 응용에 사용될 때 초래될 수 있다.
명령어 집합의 설계는 다양한 알고리즘을 인코딩하기 위해 필요한 기계어 코드의 크기, 새로운 알고리즘과 응용을 위한 명령어 집합의 확장성과 적응성, 이러한 알고리즘상에 명령어 집합을 구현시키는 프로세서의 성능과 전력소비, 명령어 집합을 구현시키는 프로세서의 비용, 시간에 대한 다중 프로세서 구현을 위한 명령어 집합의 적합성; 명령어 집합을 구현시키는 프로세서 설계의 복잡성, 및 고레벨 프로그래밍 언어로부터 컴파일링 하기 위한 타겟으로서 명령어 집합의 적합성을 포함하여 많은 경쟁적인 목표들을 균형화시킬 필요가 있다.
명령어 집합은 프로세서 성능에 한가지 직접적인 영향 및 두가지 간접적인 영향을 갖는다. 컴파일하기 위한 타겟으로서 명령어 집합의 적합성이 본 명세서에서 또한 하나의 인자가 되지만, 명령어 집합은 주어진 알고리즘을 구현시키기 위해서 필요한 명령어수(IE)를 직접적으로 결정한다. 프로세서 성능의 다른 요소들은 클럭 주기(CP)와 명령어당 평균 클럭들(CPI)이다. 이러한 것들은 명령어 집합을 구현시키기 위한 본질적인 속성이지만, 명령어 집합의 특징들은 클럭당 시간과 명령어당 클럭의 목표를 동시에 충족시키도록 이행기(implementor)의 성능에 영향을 미칠 수 있다. 예를 들어, 인코딩 선택은 이행기가 클럭당 시간을 증가시키거나 보통 명령어당 클럭을 증가시키는 가산적인 파이프라인 단계를 추가함으로써 어드레싱하는 명령어 실행의 나머지와 함께 연속적으로 가산적인 논리를 명령할 것이다.
1980년대와 1990년대에, RISC 라 불려지는 새로운 명령어 집합의 구성이 개발되었다. 그것은 상술된 트레이드오프(tradeoff) 즉, T = IE * CPI * CP 라는 것을 실현시켜 탄생되었다.
여기서, T는 초단위의 프로그램 실행 시간이고 다른 변수들은 상술된 바와 같다. RISC 명령어 집합은 IE를 훨씬 크게 증가시키지 않고 이행기들이 CPI와 CP를 상당히 개선시키도록 한다. RISC 명령어 집합은 프로세서의 성능을 개선시켰고, 설계의 복잡성을 낮추었고, 주어진 성능 레벨에서 더 낮은 비용 프로세서의 구현을 시켰으며 고레벨 프로그래밍 언어로부터 컴파일링하는데에 매우 적합했다.
프로세서 구조 단체는 RISC의 정의를 충분히 만족할 정도로 동의하지는 않았지만, 일반적으로 대부분 다음 속성들; 고정된 크기의 명령 단어, 16개 이상의 레지스터들을 갖는 범용 레지스터 파일로부터 읽혀진 피연산자상에 실행된 산술 및 다른 계산 연산들과 동일한 레지스터 파일에 기록된 결과들, 레지스터 파일 액세스가 명령어 디코딩과 병행하여 발생할 수 있도록 근원 레지스터 필드용 명령 단어에서의 고정된 위치, 주로 로드에 의해 메모리로부터 레지스터로 행해지고 (계산 명령어에서 메모리 피연산자를 갖는 것과 대조적으로) 레지스터로부터 메모리에 저장하는 메모리 액세스, 메모리 어드레스를 계산하는 방법들의 작은 수(종종 1, 보통 4 미만), 명령어의 파이프라인된 실행을 어렵게 만들 수 있는 특성들의 회피(예를 들어, 일단 주어진 명령보다 더 많은 하드웨어 리소스의 사용), 및 마이크로 코드 또는 그것의 등가물을 필요로하는 특성들의 회피를 포함하고 있다. RISC으로 되도록 고려되는 모든 프로세서들은 상술된 요소들 모두를 포함하지는 않지만, 상술된 요소의 대부분을 포함한다.
그러나, 초기의 RISC 명령어 집합은 압축된 기계어 코드를 생성하는데 있어서 현저하게 효과적이지는 않았다. 특히, RISC 명령어 집합은 응용 프로그램을 인코딩하기 위해서 RISC 이전의 명령어 집합보다 보통 더 많은 비트를 필요로했다. 응용 프로그램을 수용하기 위해서는 더 큰 메모리가 필요하기 때문에 응용 프로그램을 위한 기계어 코드의 크기는 전체 솔루션(solution) 비용에서 프로세서 그 자체의 비용보다 종종 더 중요해진다. RISC은 성능이 가장 중요한 많은 응용 프로그램에서 여전히 받아들여질 수 있지만 줄어든 코드 크기를 제외하고 RISC의 이점을 갖는 명령어 집합은 많은 다른 프로세서 응용 프로그램에서 유용해질 수 있다.
초기의 프로세서 명령어 집합(IBM 7090, CDC6600, DEC PDP6, GE635)중 일부는 그것들이 RISC등의 마이크로코드 없이 하드웨어에 의해 직접 실행되도록 설계되었기 때문에 RISC의 특성들 중 일부를 가지고 있었다. 대부분의 이러한 명령어 집합들은 워드 (바이트에 대조되는) 어드레싱, 제한된 어드레스 공간 및 특이한 연산의 조합 특성들 때문에 현대 고레벨 언어와 응용 프로그램에 매우 적합한 것은 아니다. 사실, 대부분은 어셈블리 언어 프로그래밍용으로 의도되었다. 또한 몇몇은 36비트 데이터 워드와 명령어 폭을 기초로 되었고 36비트 명령어들은 코드 밀도에 매우 좋은 것은 아니다. 몇몇은 성능에 제약을 주는 계산용 누산기와 메모리 패러다임을 기초로한 것이다. 본 발명의 일부 개별적인 특성들이 이들 세대의 기계에서 흔적이 남아 있으나, 요구되는 특성을 갖고 있지는 못하다.
프로세서를 구현시키기 위한 마이크로코드의 사용은 더욱 복잡한 명령어 집합(IBM360, DEC PDP11, DEC VAX, Intel x86, LLNL S-1, Motorola 68000)을 실행가능하게 만들었다. 따라서, 차세대 프로세서는 부분적으로 복잡한 변수 명령어 길이 인코딩으로 인해 양호한 코드 밀도를 갖는 복잡한 명령어 집합을 구비했다. 그러나, 때로는 마이크로코드화된 프로세서들과 그것들의 복잡한 명령어 집합들은 고성능에 적합하지 않았다. 복잡한 명령어들은 증가된 CPI인 하드웨어 파이프라인에서의 직접적인 실행 대신 마이크로-엔진의 반복에 의해 구현되었다. 다양한 다른 스타일들을 갖는 명령어 집합의 설계가 하나 또는 두 개의 누전기들로부터 벗어나 범용 레지스터 구조 또는 스택 구조에로의 경향을 가지고 이 시대에 부상했다. 레지스터 구조 또는 스택 구조의 구현 비용은 명령어 집합이 이들 유익한 스타일을 사용할 수 있을 만큼 저렴해졌다.
상술된 바와 같이, RISC는 성능면에서는 상당히 개선되었지만, 코드 밀도면에서는 방해(set-back)가 되었다. 대부분의 RISC 명령어 집합은 고정된 길이 32-비트 명령어를 기초로하고, 32비트는 필요한 것보다 더 많은 것으로 판명된다. 또한, 가변 길이 인코딩의 어떤 종류는 가장 좋은 코드 밀도를 이루기 위해서 필요하다. 스택 구조는 그들의 코드 크기의 이점에도 불구하고 저성능때문에 이 점에서 사라졌으며 이는 명령어 집합이 성능과 코드 크기 목표 모두를 달성하는 것이 얼마나 중요한지를 보여주고 있다.
RISC의 코드 크기의 불리함을 보상하기 위해서 몇몇 프로세서 설계자들은 명령어 집합의 압축 인코딩을 도입했다. ARM's Thumb과 MIP'S MIPS16는 그 예시가 된다. 이것들은 소수의 32비트 명령어와 함께 16비트 명령어들을 주로 사용한다. (명령어당 비트수를 이등분함으로써 더 적은 코드를 제공하는) 이러한 16비트 인코딩은 (IE를 증가시키는) 단지 8개의 레지스터를 갖고 있기 때문에 나쁜 성능, 암시된 근원 레지스터 피연산자의 사용, (IE를 증가시키는)명령 단어에서 제한된 상수의 범위, (CP 또는 CPI를 증가시키는) 명백한 레지스터 피연산자(IE를 증가시키는 대부분의 명령어에서 2개 이하) 수의 한정을 초래한다.
Hitachi SH 명령어 집합은 RISC-형이고, 코드 크기를 목적으로서 겨냥한 것이다. 그것은 16비트 명령어 집합으로 시작되었지만, 나중에 32비트 명령어들을 추가시킬 필요가 있다는 것을 발견했다. 그것은 16개의 레지스터들을 갖지만, 아직은 (IE를 증가시키는) 명령어당 2개의 레지스터 필드를 갖고, 심하게 분기 오프셋을제한한다.
필요한 것은 RISC의 성능 및 다른 이점을 주면서도 적은 비용으로 효과를 얻는 기계어 코드를 제공하는 명령어 집합 설계이다. 지나치게 복잡함 없이 고성능 구현을 촉진시키기 위해서, 명령어 집합은 마이크로코드 없이 간단하고 쇼트 파이프라인에 의해 직접 실행가능하여야 한다. 좋은 성능을 얻고 컴파일러들을 최적화시키기 위해 적절한 타겟이 되도록 충분한 수의 범용 레지스터들이 있어야만 한다. 또한 다른 기술들은 코드 크기를 감소시키기 위해 사용될 수도 있을 것이다.
본 발명은 마이크로프로세서 시스템에 관한 것이다. 더욱 특별히, 본 발명은 명령어 폭의 고효율 사용을 구현시키는 고성능의 간소화된 명령어 집합 컴퓨터(RI SC)에 관한 것이다.
도1은 본 발명의 바람직한 실시예에 따른 명령어 집합을 구현시키는 프로세서의 블록도, 및
도2는 상기 바람직한 실시예에 따라 프로세서에서 사용된 파이프라인의 블록도이다.
선행 기술의 상술된 문제들에 대해서, 본 발명의 목적은 완전 특성화된 RISC 명령어 집합의 24비트 인코딩을 구현시키는 프로세서를 제공하는 것이다.
또한 본 발명의 목적은 명령어당 제한된 평균 비트수를 가지고 명령어 인코딩을 이용할 때 프로그램을 나타내는데 필요한 명령어들의 정적 개수를 낮추도록 함께 상승작용으로 작용하는 명령어를 갖는 명령어 집합을 구현시키는 프로세서를 제공하는 것이다. 협소한 명령 단어에서 명령어 상수의 효과적인 암호화를 제공하는 것은 상기 기술에서 본 발명의 기여 부분이 된다.
본 발명의 또다른 목적은 공통적인 경우를 위한 더 긴 목표 특정기를 구비한 형태 및 단지 가장 유용한 비교를 사용하는 비교 및 분기 명령을 인코딩하는 24비트 명령 단어를 사용하는 RISC 명령어 집합을 구현하는 프로세서를 제공하는 것이다.
또한 본 발명의 목적은 명령어의 정적 개수를 감소시키는 감소된 오버헤드루핑 능력과 프로그램을 나타내는데 필요한 사이클과 프로그램을 실행시키는데 필요한 명령어수를 갖는 (DSP와 같이 상술된 바와 반대인) 일반적인 목적을 갖는 명령어 집합을 구현시키는 프로세서를 제공하는 것이다.
상술된 목적들은 본 발명의 제1실시예에 따라서 상술된 바와 같이 상기 방정식 T = IE * CPI * CP 에 맞을 뿐아니라 다음의 코드 크기 방정식으로도 설계된 명령어 집합을 구현시키는 RISC 프로세서를 제공함으로써 달성된다.
S = IS * BI
여기서 S는 비트 단위의 프로그램 명령어의 크기이다.
IS는 (앞에서와 같이 실행에 의해 필요로 하는 수가 아님) 프로그램을 나타내기 위해 필요한 명령어의 정적 개수이다.
BI는 명령어당 비트의 평균 개수이다.
RISC와 비교하여, 본 발명은 CP 및 CPI에서 최소의 증가와 함께 BI 와 IS 모두를 줄인다.
동시에 IE를 증가 및 감소시키는 특성을 갖는다.
본 발명의 이러한 형태는 로드/저장 구조를 갖는 범용 레지스터를 포함하는 RISC 원리를 기초로 고정된 길이 고성능 인코딩에서 양호한 코드 밀도를 제공해야만 한다는 인식을 가지고 설계된 것이다.
예를 든 코드 밀도를 얻기 위하여, 본 실시예에서는 성능을 떨어뜨리지 않는 단순 가변-길이 인코딩을 가산한다. 또한 본 실시예는 프로세서 구현 비용을 최적화한다.
본 발명의 상술된 다른 목적들은 첨부된 도면을 참조로 다음의 상세한 설명을 이해할 때 쉽게 명백해질 것이다.
본 발명의 바람직한 실시예에 따라 명령어 집합을 구현시키기에 적합한 프로세서는 도1에 나타난다. 일반적으로, 프로세서는 232바이트, 즉, 4GB인 명령어와 데이터용 가상 메모리, 32비트 프로그램 카운터 IPC, 16개 이상인 32비트 범용 레지스터, 쉬프트 어드레스 레지스터 SAR, 32비트 루프 시작 어드레스 레지스터 LBEG, 32 비트 루프 엔드 어드레스 레지스터 LEND, 및 32비트 루프 카운트 레지스터 LCOUNT를 갖고 이들중 세가지는 다음에서 더욱 상세히 설명된 감소된 오버헤드 루프 명령어에 의해 사용된다. 루프 명령어의 더욱 상세한 설명과 상기 바람직한 실시예에 의해 구현된 명령어 집합의 나머지 부분은 이하에서 "the ISA manual" 로 언급된 "XtenasTMInstruction SET Architecture (ISA) Reference Manual Rev. 1.10" by Tensilica, Inc.,에서 설명된다.
더욱 상세히 말하자면, 프로세서 파이프라인은 5개의 기본 단계; 명령어 페치 또는 I단계(100), 명령어 해독 및 레지스터 액세스 또는 R단계(200), 실행 및 어드레스 계산, 또는 E단계(300), 메모리 액세스 또는 M단계(400), 및 재기록, 또는 W단계(500)를 갖는다. I단계(100)에서, 프로그램 메모리는 실행될 명령어를 검색하기 위해 액세스된다. R단계(200)에서, 이렇게 페치된 명령어가 해독되고, 임의의 경우에는 그것을 사용하는 레지스터가 액세스된다. 다음, E단계(300)에서는, R단계(200)에서 해독된 레지스터 내용과 상수가 명령어 피연산자에 따른 프로세서의 ALU(332)에 의해 처리된다. M단계(400)에서는, 로드, 저장등과 같은 임의의 필요한 메모리 액세스가 실행된다. 마지막으로, W단계(500)에서는, 명령어를 실행하는 결과가 명령어 피연산자에 의해 지명된 범용 레지스터에 재기록된다.
더욱 상세히 말하자면, I단계(100)에서 워드는 I단계 프로그램 카운터 IPC(104)에 유지된 어드레스를 기초로 명령어 캐시(102)로부터 추출된다. 그 다음 상기 워드는 정렬 유닛 ALIGN(108)에 의해 마지막 페치 레지스터 LFETCH(106)에 유지되는 (이하에서 설명된 다른 구성요소와 함께 명령어 캐시(116)를 형성하는) 명령어 캐시 RAM IC(102)로부터 읽혀진 마지막 워드와 조합되어 R단계 명령어 레지스터 RINST(202)에 저장된다. 따라서, 스테이징 레지스터 IREFILL(110)를 통해 주프로그램 메모리로부터 캐시 RAM IC(102)와 태그까지 메모리 페치들에 의해 처리된 캐시 적중 실패는 레지스터 IMISSA(112)와 태그 캐시 RAM ITAG(114)를 사용하여 적절히 조절된다. 멀티플렉서(118)는 캐시 RAM IC(102)의 출력 또는 주메모리로부터 직접 페치된 명령어를 선택하고 마지막 페치 레지스터(106)에 저장된 마지막 페치된 워드로 그것을 연결시키고 필요하다면 명령어 길이 변동을 조절하기 위해 그것의 서브셋을 선택하는 정렬 유닛(108)에서 선택된 데이터를 출력한다. 태그 비교기(122)는 캐시 오류를 검출하고 그것의 지시를 스테이지의 모든 연산을 제어하는 I단계 제어기(124)에 제공한다.
본 명세서에서는 소자(104)로서 표시된 회로가 프로그램 카운터라 불려지지만, 실제로 I스테이지 프로그램 카운터(104)는 명령어가 페치되도록 카운트하기 위해 사용되지 않는다. 오히려, 그것은 워드를 카운트한다. 그러나, 바람직한 실시예에서 R단계 프로그램 카운터(204)등의 후속 프로그램 카운터들은 실제 명령어를 카운트한다. 또한, 당업자는 I단계 제어기(124) 뿐만 아니라, R단계 제어기(224)에 대응하는 E단계 제어기(324)와 M단계 제어기(424) 각각은 그것의 각각의 단계의 전반적인 작동을 제어한다. 또한, R단계 상태 레지스터(203), E단계 상태 레지스터 (303), M단계 상태 레지스터(403) 및 W단계 상태 레지스터(503) 각각은 예를 들어, 데이터가 유효한지 아닌지에 따라 각각의 제어기에서 그것의 각각의 파이프라인 단계에 있는 명령어에 대하여 관련된 상태 정보를 제공한다. 또한, 멀티플렉서등의 어떤 기구들은 단계 제어기로부터 그들 각각의 멀티플렉서까지 움직이는 회선들을 선택하고, 클럭 신호, 예외 벡터 어드레스등은 설명의 편의를 위해 생략된다. 그러나, 그것들의 배치는 당업자들에게 쉽게 명백해져 있다.
명령어들이 R단계 명령어 레지스터(202)에 공급되는 동안, 다음 어드레스 생성부(126)에서의 가산기(128)는 페치될 다음 워드의 점에서 현재의 워드 어드레스를 증가시키고 그것을 명령어 프로그램 카운터(104)에 다시 공급하는 멀티플렉서 (130)에 제공한다. (아래에서 더욱 상세히 설명된)루프 명령이 실행될 때, 그것은루프 시작 레지스터 LBEG(132)내부에 시작 루프 어드레스를 로드한 후, 멀티플렉서(130)는 프로그램 카운터(104)에 시작 어드레스를 공급한다. 또한, 루프 명령어에서 사용된 루프 엔드 레지스터(134)는 루프 상태 끝을 감지하고 루프 인텍스 레지스터 LCOUNT(138)를 감소시키기 위해서 비교기(136)에 의해서 현재의 어드레서에 비교된 값을 공급한다. 루프 외부에서 실행을 계속하도록 카운트가 0이 될 때 비교기(140)는 지시를 명령 제어기(124)에 제공한다. 그렇지않으면, LCOUNT (138)는 감소기(142)에 의해 감소되고 (또한 레지스터를 로드하기 위해 사용되는) 멀티플렉 서(144)를 통과한다. 마지막으로, 아래에서 더욱 상세히 설명되겠지만 R단계 PC 선택 멀티 플렉서(146)는 E단계(300)에서 공급될 어드레스 값을 선택한다.
R단계 명령어 레지스터(202)에 저장된 명령어는 소정의 파라미터 필드를 추출하고 명령어 연산 코드에 따른 즉시 필드 또는 상수 필드를 해독하기 위해 디코더(201)에 의해 해독된다. 해독된 명령어는 실행하기 위해 E단계 명령어 해독 레지스터(302)에 파이프라인된다. 아래에서 더욱 상세히 설명되겠지만, 명령 해독 동작과 병행하여 명령어로부터의 필드가 가산기(208 내지 212)를 통해 레지스터 파일 (206)에 통과되고 윈도우된 레지스터 동작을 위해 윈도우 베이스 값을 그것에 가산시킨다. 명령어에 제공될 수 있는 2개의 근원 레지스터 필드 및 하나의 목적 레지스터 필드 각각을 위하여 하나의 가산기가 사용된다.
레지스터 파일(206)에서의 값들이 판독되고 멀티플렉서(214 및 216)에 공급된 후 E단계 S 및 T레지스터(304 및 306)에 공급된다. 멀티플렉서(214 및 216)는 레지스터 파일(206)로부터 값들을 공급할 수 있거나, 필요한 데이터가 파일(206)내부에서 기록되지 않는다면 아래에 기술된 바와 같이 E단계로부터 공급된 값들을 사용할 수 있다. 멀티플렉서(214)는 또한 명령어 디코더(204)로부터 일정한 값을 받을 수 있다.
가산기(218)는 R단계 프로그램 카운터(201)의 내용을 기초로 색인 타겟 어드레스와 명령 디코드(204)로부터 색인 상수를 계산하고 E단계 분기 레지스터(308)에서 그 결과를 저장한다. 가산기(220)는 멀티플렉서(222)를 거쳐 명령어 길이에 의존하는 R단계 프로그램 카운터(201)에서의 값에 2 또는 3을 가산시킴으로써 다음 명령어 어드레스를 계산할 수 있고 분기가 없을 때 사용할 수 있도록 다음 PC 레지스터(310)에 그 결과를 패스한다.
E단계(300)로 이동하면서, 바이패스 멀티플렉서(318 및 320)은 다양한 기능 단위(분기(326), 쉬프트/마스크(330), ALU(332), AGEN(334), 및 저장 정렬(336)을 위해 피연산자를 선택한다. 멀티플렉서 선택은 각각의 레지스터들(228, 230 및 23 2)에 의해 일반적으로 E단계(300), M단계(400) 및 W단계(500)에서의 명령어를 기초로 바이패스 블록 EBYP(314)에 의해 R단계(200)에서 계산되었다. 결과들이 R단계 (200)으로부터 얻어질 때, 각각의 멀티플렉서(318. 320)는 ET 레지스터(312) 또는 ES 레지스터(316)를 선택한다. 멀티플렉서(318 및 320)에서의 다른 입력들은 M단계 (400) 및 W단계(500)로부터 온다.
분기 유닛(326)은 그 안에 멀티플렉서 선택 뿐만 아니라 각각 I단계(100)와 R단계(200)를 발생시키기 위해서 멀티플렉서(318 및 320)으로부터 두 개의 피연산자를 사용한다. 쉬프트/마스크 유닛(330)은 쉬프트를 임플리먼트시키고 멀티플렉서(328)의 출력을 기초로 명령을 추출한다. M단계 명령어 레지스터 MINSTD(402)를 또한 공급하는 해독된 명령어 레지스터 EINSTD(302)로부터 마스크 입력뿐만 아니라 멀티플렉서(318 및 320)로부터 두 개의 피연산자를 갖는다. 쉬프트양은 상수에 의해 쉬프트 하기 위해서 EINSTD(302)로부터 선택되거나 가변양에 의해 쉬프트하기 위해 ESAR(322)에 의해 선택된다. ESAR(322)는 E단계(300)을 위해 ISA 단계를 포함한다.
ALU(332)는 ADD, ADDI, ADDX2, SUB, AND, OR, XOR을 포함하는 산술 및 논리 기능을 구현시킨다. 쉬프트/마스트 유닛(330)과 ALU(332)의 출력은 멀티플렉서 (338)에서 명령어 형태를 기초로 멀티플렉스되고 MALU 레지스터(406)에 공급된다. 어드레스 생성 유닛 AGEN(334)는 레지스터 피연산자의 합과 EINSTD(302)에서 해독된 명령으로부터 오프셋을 계산한다. 출력은 M단계 변수 어드레스 레지스터 MVA(408)에 보내진다. 저장 위치 맞춤 유닛(336)은 메모리를 위해 적절한 바이트로 저장 데이터를 위치 맞춤하기 위해 0, 8, 16, 또는 24 점들에 의해 출력된 ET 멀티플렉서(318)를 쉬프트한다. 상기 출력은 M단계 저장 데이터 레지스터 MSD (410)에 보내진다.
이전의 파이프 단계와 유사한 ECTL(324)은 E단계(300)를 조절하고 그 안에서 실행된 명령어 상태를 업데이트한다. E단계 명령어 어드레스 프로그램 카운터 ETC(304)는 예외 프로세싱을 위해 M단계 명령어 어드레스 프로그램 카운터 MPC (404)를 따라 파이프라인된다.
파이프라인의 M단계(400)는 로드의 제2하프(half)와 저장 명령어 및 모든 단계동안 예외결정을 처리한다. MPC(404)의 출력은 WPC 레지스터(504)로 보내진다. M단계(400)에서의 명령어가 예외 또는 인터럽트에 의해 무효화된다면, WPC (504)의 출력은 (E단계 프로그램 카운터 EPC(304)와 다른) ISA-상술된 예외 명령어 어드레스 레지스터들(EPC)[i](도시 안됨)중 하나 안으로 로드될 것이다. M단계(40 0)에서의 명령어가 재시행되어야 한다면 그 후, WPC 레지스터(504)의 내용은 구조 페치를 재시작하기 위해 I단계에 다시 보내진다.
쉬프트 또는 ALU 명령어는 단지 이 단계에서 MALU(406)로부터 WALU(506)까지 데이터를 전송한다. MALU(406)의 출력은 그것이 레지스터 파일에 기록되기 전에 쉬프트 또는 ALU 명령어의 출력이 다음 명령어에 의해 사용되도록 이단계에서 바이패스 멀티플렉서(318 및 320)에 제공된다. W단계(500)에서 로드 명령어들은 데이터 캐시 RAM 과 데이터 태그 RAM 모두를 판독한다. W단계(500)에서 저장 명령어는 단지 데이터 태그 RAM를 판독한다. 데이터 캐시 RAM 기록은 태그 비교가 완료될 때까지 지연된다. 비로드 명령어들은 데이터 캐시 RAM에서 임의의 보류 저장 데이터를 기록한다. 저장 데이터가 데이터 캐시 RAM에서 기록되지 않을 것이기 때문에 동일한 어드레스에서 저장 다음의 로드는 특별한 바이어스를 필요로한다.
그것의 W스테이지(500)에서의 로드 명령어는 가상 어드레스 MVA(408)의 색인 부분을 데이터 태그 RAM의 어드레스 입력 및 또한 멀티플렉서(422)를 통해 직접 맵핑된 데이터 캐시 RAM DC(434)의 어드레스 입력에 전송한다. DC(434)의 판독과 동시에 어드레스는 STVI(416)에서 보류 저장 가상 색인과 유효 비트와 비교된다. 비교기(428)의 출력에 기초하여 판독이 보류 저장의 캐시 색인이라면, 멀티플렉서(432)는 보류 저장 데이터 버퍼(418)의 결과들을 선택한다. 즉, DA 판독 데이터가 선택된다. 멀티플렉서(432)는 가상 어드레스의 낮은 2비트를 기초로 0, 8, 16 또는 24 에 의해 로드 데이터를 쉬프트하는 로드 위치 맞춤 회로(436)를 공급한 후 L8UI 및 L16UI 명령어들은 각각 비트 7 또는 15로부터 제로 확장하고 L16SI 명령어는 비트 위치(15)로부터 사인 연장한다. 이러한 결과는 WLOAD(508)에 의해 래치(latch)된다. 데이터 태그 RAM의 출력은 비교기(430)에 의해 MVA(408)로부터 M단계 가상 어드레스의 고차수 비트와 비교되고 이러한 적중/적중 실패 결과는 캐시 적중 실패와 예외를 조절하는 M단계 제어 논리 MCTL(424)에 전송된다. 마지막으로, 로드 가상 어드레스는 캐시 적중 실패를 다루기 위해 WMA(510)에서 컴퓨터 기계어로 변환된다.
로드 캐시 적중 실패는 파이프라인의 1 내지 M단계에서 명령어들을 무효화시킨다. WMA(510)으로부터 로드 어드레스는 외부 메모리로 전송된다. 상기 메모리로부터 데이터 판독은 어드레스로서 WMA(510)의 저차수 비트를 사용하는 멀티플렉서(412)와 STDATA(418)를 통해 데이터 캐시 RAM(424)에 기록된다. DTAG(420)가 MVA(408)로부터 다소 유효하지 않은 비트에 의해서 어드레스될 때 데이터 태그 RAM(426)는 WMA(510)에서 컴퓨터 기계어로 변환된 고차수 적중 실패 어드레스로부터 멀티플렉서(414)와 STADDR(420)를 거쳐 기록된다.
그것의 W단계(500)에서의 저장 명령은 저장 어드레스와 데이터를 STADDR (418) 및 STDATA(420) 내부에 입력한다. 또한 저장 어드레스가 적중 또는 적중 실패인지를 결정하기 위해서 데이터 태그 RAM(426)가 액세스되고 그 결과를MVA(408)의 고차수 비트와 비교했다. 그 후, 이러한 저장이 제1비로드 사이클상의 캐시에 적중한다면, STDATA(418)의 내용들이 STDATA(418)에 저장된 어드레스에서 데이터 캐시 RAM(424)안에 기록될 것이다. 캐시 적중 실패 리필이 완성된다면, 명령어 패치 유닛은 적중 실패된 로드 명령어로 다시 시작하는 페칭 명령어들로 시작한다. 이러한 실시예의 데이터 캐시가 기록-스루(write-thru)되어서 저장 어드레스와 데이터는 또한 STADDR(420) 및 STDATA(418)로부터 그것들이 외부 메모리에 기록될 때까지 유지되는 기록 버퍼(438)로 전송된다.
WALU 및 WLOAD 레지스터(506 및 508)의 출력은 명령어가 이 지점에서 여전히 유효하고 그것이 A레지스터 결과를 갖는 명령어라면 R단계(200)에서 레지스터 파일(206)에 기록되도록 멀티플렉서(512)에 의해 선택된다.
또한, 프로세서는 논리적 좌측(logical left), 논리적 우측(logical right), 산술 우측(arithmetic right)등의 종래의 이미디에이트 쉬프트(immediate shift)를 제공하기 위해 사용되지만 직접적인 가변 쉬프트들이 임계 타이밍 경로일 수 있기 때문에 쉬프트양이 레지스터 피연산자인 단일 명령어 쉬프트를 제공하지 않는 6비트 쉬프트양 레지스터를 갖고, 간단한 쉬프트들은 더 큰 폭으로 효과적으로 확장하지 않는다. 퍼널 쉬프트(funnel shifts)는 확장될 수 있지만, 그것들은 지나치게 많은 피연산자를 필요로한다. 본 발명의 바람직한 실시예에 따른 프로세서는 SAR 레지스터로부터 쉬프트양을 갖는 퍼널 쉬프트를 제공함으로써 이러한 문제점들을 해결한다. 범용 레지스터에서는 쉬프트양으로부터 SAR을 계산하기 위해서 명령어를 사용하는 컴파일러에 의해 종합된 가변 쉬프트 후에 퍼널 쉬프트가 나타났다. SAR값들의 적법 범위는 0 내지 31이 아닌 0 내지 32이며, 레지스터는 6비트를 사용한다.
물론, 아래에서 상세히 설명되고 ISA 매뉴얼에서 더 상세히 설명된 명령어 집합의 설명이 주어진 본 발명을 따르는 다양한 다른 프로세서 구조는 당업자들에게 용이하게 명백해질 것이다. 또한 이러한 구조는 첨부된 청구항들의 범위안에 포함되는 것을 목적으로 한다.
다양한 파이프라인 구조들은 프로세서 내부에서 사용될 수 있다. 그러나, 명령어의 어떤 특징들은 어떤 구현 집합들과 가장 좋게 작용하고, 일반적으로 이러한 형태는 도2에서 도시된다. 이러한 형태의 구조는 부동 소수점 유닛과 DSP등의 중요한 계산 유닛에서 사용될 수 있고 이러한 파이프라인 구조의 두드러진 점은 (도2에서 DReg/DALU 라벨 표시된 위치에서) Dcache 다음의 이러한 유닛에 대한 그것의 배치가 상기 유닛용 명령어를 일 근원 피연산자로서 메모리 참조를 포함하도록 한다는 것이다. 이것은 사이클당 복합 명령어의 패치와 실행을 필요로하지 않고 매 사이클마다 데이터 캐시 참고와 동작을 허락한다.
범용 명령어 집합 설계 고찰
많은 명령어 집합의 특징들은 프로세서 구현 비용을 증가시켜 성능(IE를 낮춤으로써)과 코드(IS를 낮춤으로써)를 개선시킨다. 예를 들어, (베이스 어드레스 레지스터가 판독된 후 증가된 어드레스로 재기록되는) "자동-증가" 어드레스 모드는 로드를 위해 제2레지스터 파일 기록 포트를 필요로한다. (두 개의 레지스터 합이 가상 어드레스를 형성하기 위해 사용되는) "색인" 어드레싱 모드는 저장을 위해세 개의 레지스터 파일 판독 포트를 필요로한다. 상기 바람직한 실시예는 두 개의 판독 포트에 맞춰지고 하나의 기록 포트 레지스터 파일은 적당한 성능을 위해 최소한 필요하다.
상기 바람직한 실시예는 구현 비용을 증가시키는 어떤 특징들을 가지고 있지만 가산 레지스터 파일 포트를 증가시킬 정도로 필요한 특징들은 제거된다. 특별히, 이것은 포트의 개수가 프로세서의 최대 실행 용량(예를 들어, 2 내지 8)에 의해 복잡해지기 때문에 구현 실행이 사이클당 복잡한 명령어를 실행할 때 중요하다.
성능을 유지하기 위해서, 명령어 집합은 적어도 두 개의 근원 레지스터 필드와 한 개의 다른 목적 레지스트를 한다. 즉 IE와 IS 모두 증가한다. 코드 밀도만을 최적화하는 범용 레지스터 명령어 집합은 때때로 두 개의 레지스터 필드(예를 들어, Hitachi SH) 부근에서 디자인된다. 이것은 IS에서의 증가가 BI에서의 감소에 의해 오프셋될 때 코드 크기를 감소시키지만, IE에서의 증가를 보상할 방법이 없다. 몇몇 레지스터들을 조건으로 지정하는 명령어 집합은 더 좁은 레지스터 필드를 사용하여 BI를 낮추지만 더욱 가변적이고 일시적인 값들이 메모리에 남아있게 함으로써 IE와 IS를 증가시킨다. 코드 밀도만이 우선시될 때, 네트 저장을 위해 BI의 감소에 의해 IS의 증가가 오프셋될 수 있지만, 좋은 성능이 또한 필요로될 때 IE의 증가를 보충시킬 방법이 없다.
레지스터의 수가 증가함에 따라 IE와 IS에서의 감소는 일정해진다. 명령어 집합이 리턴(return)을 감소시키는 점에 도달하기 위해서 적어도 충분한 레지스터를 공급해야만 한다 즉, 그 결과 레지스터 카운트에서의 증가는 IE에서 상당한 대응 감소를 초래하지는 않는다. 특히, 적어도 16 개의 범용 레지스터들은 RISC 성능 레벨을 위해 필요로된다. 또한, 세 개의 4비트 레지스터 필드는 암호화하기 위해 적어도 12비트를 필요로한다. 또한 연산 코드와 상수 필드용 비트가 필요하며 어떤 프로세서에 의해 사용되었던 16비트 인코딩은 충분하지 않을 수 있다.
24 비트 인코딩
대부분의 선행 기술이 코드 크기와 성능 사이에서 적절한 균형을 이루지 못하는 한 가지 이유는 명령어 집합 설계자들이 16비트와 32비트등의 어떤 명령어 크기에 구속되어 생각하고 있기 때문이다. 프로세서의 데이터 워드폭에 단순비율이 있는 명령어 크기를 사용하는 것은 대단한 이점이 된다. 하지만, 이러한 한정을 약간씩 줄이는 것은 상당한 이점을 갖는다.
바람직한 실시예는 개시점에서와 같이 24비트 길이 인코딩을 사용하고, 24비트는 IE를 감소시킬 명령어를 위해 신장성과 룸을 제공할 뿐만 아니라 고성능을 만족시킬 수 있다. 대안 실시예들은 18-28비트 범위에서 인코딩을 사용할 수 있지만 24비트보다 못한 이러한 것들은 제한된 확장성과 제한된 분기 범위를 가질 수 있다. 상기 24비트 인코딩은 BI에서 25% 감소를 나타내고 따라서 대부분의 RISC 명령어 집합으로부터 코드 크기를 나타낸다. 그리고 결국, 24비트는 32데이터 경로 폭을 갖는 프로세서에서 수용가능할 정도로 간단하다.
바람직한 실시예는 필드 수용 성능에 필요한 최고점과 24비트 명령어 워드안에 적합한 최소점인 4비트 레지스터 필드를 사용한다. 많은 명령어 집합들은 32개의 레지스터(5비트 레지스터 필드)를 사용한다. 세 개의 5비트 레지스터 필드 다음에, 24비트 명령어들은 연산 코드와 상수 코드를 위해 단지 9비트가 된다. 쇼트 상수 필드는 부적합한 범위에서 분기, 호출, 및 다른 PC 관련 참조를 초래할 수 있다. 연산 코드에서 지나치게 작은 비트는 부적합한 확장성을 제공한다. 이러한 두 가지 이유때문에, 5비트 레지스터 필드를 갖는 24비트 명령 단어는 바람직하지 않다. 16범용 레지스터와 32범용 레지스터사이에서 (IE차이에 따른)성능 차이(대략 6%)는 8범용 레지스터와 16범용 레지스터사이에서의 성능 차이만큼 크지 않고 잃어버린 성능(예를 들어, 복합 명령어 및 레지스터 윈도우, 아래 참조)을 보충하기 위해 다른 특징들이 도입될 수 있도록 충분히 작다. IS에서의 증가(또한 대략 6%)는 24비트 인코딩과 32비트 인코딩 사이의 차이에 의한 오프셋보다 더 크다.
5비트 레지스터 필드를 갖는 많은 명령어 집합은 컴파일을 위해 32개의 범용 레지스터를 제공하지 않는다는 것을 또한 주목해야 한다. 대부분은 제로를 유지하도록 레지스터를 제공하지만 제로 레지스터의 필요성은 여분의 명령어 연산 코드를 제공함으로써 쉽게 제거될 수 있다. 또한, 다른 레지스터들은 명령어 집합에 다른 특징들을 포함함으로써 제거될 수 있는 특정한 용도를 받는다. 예를 들어, MIPS는 예외 처리 코드를 위해 그것의 31개의 범용 레지스터들 중 두 개를 사용하고 전체 영역 포인터(pointer)를 위해 하나를 사용하여, 사실상 그것은 가변 레지스터와 임시 레지스터용으로 28개의 레지스터, 4비트 레지스터 필드를 갖는 12개 이상의 명령 집합 및 적절한 명령 집합 특징들을 갖는다. 소프트 웨어 협정에 의한 호출자와 피호출자 저장 레지스터 안으로 범용 레지스터의 분류는 보편적이고 또한 더 큰 레지스터의 유틸리티를 더욱 감소시킨다. 바람직한 실시예는 아래에서 더욱 상세히설명될 바와 같이 이것을 제거하는 특징들을 포함한다.
복합 명령어
IS 및 IE를 낮추기 위해서, 본 바람직한 실시예에서는 RISC 및 기타 명령어 집합에서 전형적으로 발견되는 다중 명령어의 함수를 조합한 단일 명령어를 또한 사용한다. 간단한 복합 명령어의 예는 좌측 쉬프트 및 가/감산이다. HP PA-RISC 및 DEC Alpha는 이들 연산을 제공하는 명령어 집합의 예이다. 이들 연산이 증가하는 CP의 잠재 비용에서 IE 및 IS 모두를 감소시키면(컴퓨터 연산 파이프라인 단계에서의 부가적인 급수 논리로 인하여), 때로는 어드레스 산술 및 작은 상수로의 곱셈연산이 이들 조합을 사용한다. 다양한 구현들이 쉬프트가 0 내지 3으로 한정될 때, 엑스트라 논리가 CP상의 가장 중요한 제한이 아니라는 것을 보여준다. 역으로, ARM 명령어 집합은 임의의 쉬프트 및 가산을 제공하며, 그것의 구현은 매우 열악한 CP를 가지고 있다.
때로는 우측 쉬프트가 더 큰 워드로부터 필드를 추출하는 데 사용된다. 사인되지 않은 필드를 확장하기 위해서, 전형적으로 두 개의 명령어(좌측 쉬프트에 뒤이은 우측 쉬프트나 우측 쉬프트에 뒤이은 상수를 가진 AND 중 하나)이 사용된다. 본 바람직한 실시예는 이 기능을 수행하기 위해 단일의 복합 명령어, extui를 제공한다. 이것은 단지 4비트인 명령어 워드에 특정하여 인코딩된 마스크를 가진 AND가 뒤따르는 쉬프트로서 구현된다. extui의 AND부는 논리적으로 대수롭지 않은 것이어서 명령어 집합에 그것을 산입하는 것은 구현의 CP를 증가시키지는 않을 것이다. 이것은 사인된 필드를 확장하는 명령어에 대하여는 사실이 아니며, 따라서 이것은포함되지 않는다.
대부분의 명령어 집합, RISC 및 그 밖의 것들(예를 들어, ARM, DEC PDP11, DEC VAX, Intel x86, Motorola 68000, Sun SPARC, Motorola 88000) 모두는, 제어의 흐름을 결정하기 위한 조건 코드(들)를 시험하는 조건 분기 명령어에 뒤이은 조건 코드(들)를 이루는 비교 명령어를 사용한다. 조건 분기는 대부분의 RISC 명령어 집합상의 명령어 중 10~20%를 차지하며, 그 각각은 통상 비교 명령어와 짝지어지는데 이러한 유형의 명령어 집합은 낭비이다. 훨씬 오래된 명령어 집합이 컴페어-앤드-스킵 유형의 조건부에 의거하였지만, 이것은 개별 비교 및 분기와 동일한 단점을 갖는다.
몇몇 명령어 집합(예를 들어, Cray-1, MIPS, DEC Alpha, HP PA-RISC 및 Sun SPARC의 최근 V9 버젼)은 복합 비교 및 융통성이 다양한 분기 성능을 제공한다. Cray 및 DEC Alpha는 레지스터와 제로의 비교 및 분기만을 제공한다. MIPS는 레지스터-제로 비교와 레지스터-레지스터 동일성 및 비동일성 및 분기를 제공한다. HP PA-RISC는 레지스터-레지스터 비교 및 분기 명령어의 꽤 완벽한 집합을 제공한다.
본 바람직한 실시예는 가장 유용한 복합 비교 및 분기 명령어를 제공한다. 정확한 집합을 선택하는 것은 각 비교의 유틸리티 및 그것을 소비하는 연산코드 공간을 가진 분기의 균형을 요구하며, 특히 24비트(32비트와는 대조적으로) 인코딩이 목표인 경우에는 더욱 그러하다. 그 밖의 명령어 집합은 이 시험을 통과하지 못했다. 예컨대, HP PA-RISC는 수 개의 복합 비교 및 거의 유틸리티가 아닌(예를 들어, 전혀 그러하지 않거나 덧셈 후의 오버플로우) 분기 오피코디를 제공하며, 몇몇 유용한 것은 생략한다. 본 바람직한 실시예에 대하여 선택된 복합 비교 및 분기 명령어의 집합은,
A == 0, A! = 0, A < S0, A >= S0,
A == B, A! = B, A < SB, A <UB, A >= SB, A >=UB,
(A & B) == 0, (A & B)! = 0, (~A & B) == 0, (~A & B)! = 0,
A == I, A! = I, A < SI, A < UI, A >= SI, A >=UI,
bit B of A == 0, bit B of A! = 0,
bit I of A == 0, bit I of A! = 0,
이며, 여기서 A 및 B는 레지스터의 내용을 표시하며, "U" 또는 "S"는 레지스터 내용이 사인되었는지 아닌지에 대한 "사인되지 않은" 또는 "사인된"을 각각 표시한 레지스터를 관련 연산자에 첨가한 것이며, 관련 연산자에 붙은 첨자 0(예를 들어, A < S0)는 0에 대하여 사인되었는지 아닌지를 표시하고, I는 인덱스 상수를 표시한다.
복합 비교 및 분기는 개별 비교 및 분기 명령어 집합에 비하여 IE 및 IS를 감소시키고, MIPS 및 DEC Alpha와 유사한 부분 비교 및 분기 명령어와 비교해 봐도 그러하다. 본 바람직한 실시예는 복합 비교 빛 분기를 구현하기 위해서 CPI에서의 증가를 요구할 수도 있지만, 전반적인 성능 효과는 여전히 향상된다.
개별 비교 및 분기 명령어 집합의 주된 장점은 두 개의 명령어 워드가 비교 연산자, 비교 피연산자 및, 각각에 일반적인 필드 폭 할당을 허용하는 분기 목표를 특정하여 사용할 수 있다는 것이다. 복합 비교 및 분기 명령어 집합이 이들 모두를단일의 명령어 워드 안에 집어넣어야만 하는 것과는 대조적으로, 더 작은 필드내에 결과물과 그 값을 조작하기 위한 메카니즘에 대한 요구는 꼭 들어맞지는 않을 것이다(예를 들어, 더 긴 범위를 갖는 분기). 본 바람직한 실시예는 비교 연산코드, 두 개의 근원 레지스터 필드 및 8비트 PC 관련 오프셋을 24비트 명령어 워드 안에 담는다. 8비트 목표 특정기는 어떤 경우에는 불충분할 것이고, 컴파일러 또는 어셈블러는 본 바람직한 실시예가 제공하는 더 긴 범위를 가진 비조건 분기의 주변에 반대 성질의 조건 분기를 사용하는 것이 필요할 것이다. 이것은 IE 및 IS를 증가시키는 과정의 상황이며, 바람직하지 않다. 이러한 이유로 하여, 본 바람직한 실시예는 또한 0에 대하여 시험하는 분기 및 복합 비교의 급수를 제공하며, 이것이 가장 일반적인 경우이다. 이들 복합 비교 및 분기 명령어는 그들의 동류의 것보다 훨씬 큰 범위를 제공하는 12비트 PC 관련 오프셋을 갖는다. 두 가지 형태 모두를 제공하는 것의 여분의 복잡성은 IE 및 IS에서의 향상에 의해 균형 잡힌다. 본 바람직한 실시예는 MIPS 및 DEC Alpha와는 달리, 0에 대한 모든 비교를 제공하지 않으며(0보다 작거나 0과 같은 레지스터 및 0보다 큰 레지스터는 생략), 또 균형 프로그램이 연산코드 공간을 가질 것을 필요로 하는 일련의 명령어를 제공한다.
모든 명령어를 인코딩하는 데 단지 24비트를 사용하는 하나의 결론은 명령어 워드 안에서의 상수 필드가 그 크기에서 제한된다는 것이다. 이것은 잠재적으로 IS 및 IE를 증가시킬 수 있었다(비록 증가된 IE가 루프 바깥 쪽의 레지스터에 상수를 로딩함에 따라 감소될 수 있더라도). 본 바람직한 실시예는 이 문제를 몇 가지 방법으로 해결하려 한다. 우선, 그것은 작은 상수 필드를 제공하여 가장 공통적인 상수를 확보한다. 협소한(예를 들어, 4비트) 상수 필드를 최대로 사용하기 위해서, 명령어 집합은 그것을 직접적으로 특정하기 보다는 오히려 상수값을 인코딩하기 위한 필드를 사용한다. 인코딩된 값은 프로그램 통계의 넓은 배열로부터 N(예를 들어, 16)개의 가장 빈번한 상수로서 선택된다. 본 바람직한 실시예는 addi.n 명령어에서 이 기술을 사용하며, 여기서 0 내지 15가 아닌 -1과 1 내지 15가 되도록 16개의 값이 선택된다. 0을 더하는 것은 아무런 소용이 없으므로(별개의 mov.n 명령어이 있음), -1을 더하는 것이 일반적이다. beqi, bnei, blti, bgei 명령어도 또한 여러 가지 공통 상수를 인코딩하는 4비트 필드를 사용한다. bltui 및 bgeui 명령어는 서로 다른 유용값의 집합을 가진 사인되지 않은 비교와 같이 서로 다른 인코딩을 사용한다.
가장 공통적인 상수는 일반적으로 꽤 작으며, 협소한 필드는 대부분의 소정값을 잡아낸다. 하지만, 비트별 논리 연산(예를 들어, AND, OR, XOR 등)에서 사용되는 상수는 여러 종류의 비트 마스크를 표현하며, 때로는 작은 상수 필드에 들어맞지 않는다. 예컨대, 임의의 위치에서 1에 대한 단일 비트 집합을 갖거나, 임의의 위치에서 0에 대한 단일 비트 집합을 가진 상수들은 공통이다. 또한 공통적인 것은 1의 시퀀스에 뒤이은 0의 시퀀스 및 0의 시퀀스에 뒤이은 1의 시퀀스로 구성되는 비트 패턴이다. 이러한 이유로 하여, 본 바람직한 실시예는 마스크를 직접적으로 명령어 워드에 넣어야 할 필요를 피하는 명령어를 갖는다. 본 바람직한 실시예에서는 레지스터의 특정된 비트가 각각 0인지 1인지에 따라 분기하는 bbci 및 bbsi 명령어이다. 비트는 마스크가 아닌 비트 수로서 주어진다. (전술한) extui 명령어는1의 수가 명령어에서의 상수 필드인 경우에 일련의 1이 따르는 일련의 0으로 구성된 마스크가 뒤따르는 쉬프트를 행한다.
코프로세서 부울리언 레지스터 및 분기
복합 비교 및 분기가 32비트보다 넓지 않은 명령어 워드 안에 상당히 많이 담기기 때문에, 상기 열거된 명령어는 이용할 수 있는 명령어 워드의 중요한 부분을 소모시킨다. 이것은 그들의 주파수 및 그 결과 남는 절약으로 인하여 이들 분기를 위하여는 우수한 트레이드-오프이다.
명령어 집합상에 그밖의 제한에 부가하여, 설계는 명령어 집합이 광범위해야 하며(신규 데이터 형태의 부가를 허용하는), 밀접하게 결합된 코프로세서에서 이용된 형상이어야 한다는 조건을 필요로 한다. 하지만, 쇼트 명령어 워드는 부동소수점, DSP 등과 같은 그 밖의 데이터 형태를 위하여 복합 비교 및 분기 명령어를 더욱 부가하는 데에는 공간이 모자를 수도 있다. 또한, 각각의 코프로세서에 대하여 그 자신의 복합 비교 및 분기를 구현하는 것이 타당하지 않을 수도 있다. 개별적인 복합 비교 및 분기의 구현이 가능한 경우에도, 그러한 데이터 형태 상의 비교 및 분기가 많은 적용례에 대한 정수 데이터의 경우에 비해 또한 덜 빈번하기 때문에 그것이 낭비일 수도 있다.
이러한 이유로 하여, 본 발명의 바람직한 실시예는 코프로세서 조건 분기에 대하여 서로 다른 방법을 사용한다. 바람직한 실시예에서, 명령어 집합은 임의의 코프로세서 패키지에 대한 전제 조건인 선택적 패키지를 포함한다. 이 패키지는 16개의 단일 비트 부울리언 레지스터와, 이들 부울리언 레지스트 및 그에 따른 분기를 시험하는 BF(거짓이면 분기) 및 BT(참이면 분기) 명령어를 더한다. 그러면 코프로세서는 예를 들어, 그들의 지원된 데이터 형태의 비교에 의거하여 부울리언 레지스터를 이루는 명령어를 제공한다. 상기 부울리언 레지스터와 BF 및 BT 명령어는 모든 코프로세서에 의해 공유되며 쇼트 명령어 워드의 사용을 효율적이게 한다.
이것은 상술한 바와 같이 이전의 많은 명령어 집합에서 발견된 조건 코드기반 비교 및 분기의 새로운 변형이다. 이전의 명령어 집합은 프로세서와 그것의 코프로세서간에 다중비트 조건 코드를 다중 공유하고 있었으며(예를 들어, PowerPC), 코프로세서당 다중의 단일비트 조건 코드(예를 들어, MIPS)를 사용하고 있었다. 본 발명의 바람직한 실시예는 다중 공유된 단일비트 조건 코드를 사용한다.
비교에 대하여 다중의 목적지를 제공하면(예를 들어, 본 발명의 바람직한 실시예에서 MIPS, PowerPC), 컴파일러가 더욱 자유롭게 코드를 계획하고 명령어에 대하여는 다중 결과를 만들어 내는 단일 명령어에서 다중 데이터 값을 비교할 수 있게 한다(예를 들어, MIPS MDMX).
다중 코프로세서들간에(본 실시예) 또는 프로세서와 코프로세서간에(PowerPC에서와 같이) 비교 결과 레지스터를 공유하는 것은 비교 결과를 시험하는데 필요한 연산코드의 수를 절약하게 한다. 또한 이것은 비교 결과 레지스터상의 논리연산을 수행하는 명령어를 제공할 수 있는 타당성을 높인다(본 발명의 바람직한 실시예와 PowerPC에서와 같이).
다중비트(대부분의 ISA) 대신에 단일비트 비교 결과 레지스터의 사용(본 발명의 바람직한 실시예, MIPS)은 요구되는 비교 연산코드의 수를 증가시키지만 요구되는 분기 연산코드의 수를 감소시킨다. 본 바람직한 실시예는 명령어가 또한 PC 관련 목표 어드레스를 제공해야 하기 때문에 단일비트 비교 결과 (부울리언) 레지스터를 사용하며, 따라서 분기 연산코드를 부가하는 것은 많은 수의 코프로세서가 없다면 더욱 비용이 많아진다.
요컨대, 복합 비교 및 분기가 코드 크기를 최소화하는 중요한 기술인 동시에, BI를 작게 유지해야 하는 필요성은 서로 다른 주파수와 요구되는 서로 다른 코프로세서 연산코드의 수로 인하여 스플리트 접근이 코프로세서 비교 및 분기에 적합하다는 것을 찾는다. 스플리트 비교 및 분기 선택의 스펙트럼내에서, 코프로세서들간에 공유되어 있는 다중의 단일비트 비교 결과 레지스터를 사용하는 것은 연산코드 공간의 사용을 가장 효율적이게 한다.
로드 및 저장 명령어
본 바람직한 실시예의 로드 및 저장 명령어는 레지스터로부터 베이스 어드레스에 부가된 8비트 상수 오프셋을 갖는 명령어 형식을 사용한다. 첫째로 본 바람직한 실시예는 이들의 대부분을 8비트로 만들고, 둘째로 이것이 불충분한 경우에는 단순 확장 방법을 제공한다. 또한, 본 바람직한 실시예의 4개의 로드/저장 오프셋은 128부터 255까지의 값이 -128부터 -1까지의 값보다 더 공통적이므로 사인 확장되기 보다는 제로 확장된다(그 밖의 명령어 집합에서 공통). 또한, 오프셋은 대부분의 참조가 정렬된 베이스 레지스터로부터 정렬된 어드레스로 있기 때문에 참조 크기에 대하여 적절히 좌측으로 쉬프트된다. 32비트 로드 및 저장에 대한 오프셋은 2만큼 쉬프트되고, 16비트 로드 및 저장에 대한 오프셋은 1만큼 쉬프트되며, 8비트로드 및 저장에 대한 오프셋은 쉬프트되지 않는다. 대부분의 로드 및 저장은 32비트이어서, 이 기술은 2 부가 비트의 범위를 제공한다.
로드/저장 명령어(또는 addi 명령어)에서 특정된 8비트 상수 오프셋이 불충분한 경우에, 본 바람직한 실시예는 8만큼 좌측으로 쉬프트된 그것의 8비트 상수를 부가하는 addmi 명령어를 제공한다. 따라서, 2 명령어 시퀀스는 addmi로부터의 8과 로드/저장/addi로부터의 8을 더한 16비트의 범위를 갖는다. 또한, 상술한 방법 중 하나로 인코딩되지 않은 상수는 별도 명령어에 의해 레지스터에 로딩된다(이 기술은 두 개 대신에 단일의 레지스터 피연산자를 취하는 로드/저장 명령어에 대하여는 적용할 수 없으며, 따라서 상술한 addmi 해가 요구된다). 본 바람직한 실시예는 상수를 레지스터에 로딩하기 위한 두 가지 방법을 제공한다. 첫번째는 이러한 목적을 위한 movi(및 후술하는 쇼트 명령어 형식에서의 movi.n) 명령어이다. movi는 명령어 워드내의 12비트 사인 확장된 필드의 쌍에 그것의 상수를 특정화한다. 또한, 레지스터 변수에 상수를 할당하는 것은 그 자체로 공통이다.
32비트 또는 그보다 작은 명령어 형식에서, 명령어는 임의의 32비트 상수를 인코딩할 수 없어서, 임의의 상수값에 대한 레지스터를 설정하는 데에는 몇개의 다른 방법이 요구된다. 적어도 두 가지 방법이 다른 명령어 집합에서 사용되어 왔으며, 이들 방법 중의 어느 하나는 해를 제공하는 상기 기술들과 연계하여 사용될 수도 있다. 첫번째 해는 각각의 명령어에서 다중의 상수를 사용하는 32비트 상수를 함께 합성하는 한 쌍의 명령어를 제공하는 것이다(예를 들어, 상위 16비트와 하위 16비트를 두 개의 별도 명령어에 특정화하는 명령어를 가진, MIPS LUI/ADDI, DECAlpha, IBM PowerPC). 두 번째 해(예를 들어, MIPS 부동소수점 상수, MIPS16 및 ARM Thumb)는 로드 명령어를 갖는 메모리로부터 상수를 읽기 위한 간단한 방법을 제공하는 것이다.
참조 상수에 대해 로드 명령어를 사용함으로써, 만일 로드 자체가 단일 명령어만을 요구한다면 명령어의 시퀀스를 사용하는 것보다 낮은 IS 및 IE를 제공할 수 있다. 예컨대, MIPS 컴파일러는 31개의 일반적 레지스터 중 하나를 전용하여 4바이트 및 8바이트 부동소수점이 유지되어 있는 상수 풀(constant pool)에 (다른 것들 중에서) 포인터를 잡아두게 한다. 만일 이 레지스터가 어드레싱한 면적이 64KB보다 작다면, MIPS가 로드에서 64KB의 오프셋 범위를 가지므로 상수는 단일 로드 명령어에 의해 참조될 수 있다. 한 번 참조된 상수에 대하여는, 32비트 로드 명령어 + 32비트 상수가 두 개의 사용하는 명령어 워드의 총 크기와 동일하다. 만일 상수가 두 번이상 참조된다면, 상수 풀은 총 크기를 더 작게 한다. 트레이드 오프는 24비트 크기의 바람직한 실시예에서와 같이 기타 명령어 길이에 대하여 상이하며, 여기서 상수 풀 플러스 로드는 한 쌍의 24비트 명령어에 대하여 56비트 대 48비트이다. 그럼에도 불구하고, 상수가 여러 번 사용되는 경우에 상수 풀은 거의 항상 총 크기 솔루션을 우수하게 한다.
상술한 바와 같이, 더 협소한 명령어 워드는 일반적으로 32개보다 적은 레지스터를 제공하고 따라서 각각의 레지스터가 더욱 중요해지므로, 레지스터를 상수 및 기타 값에 어드레싱하도록 활용하는 MIPS 기술은 본 발명의 바람직한 실시예 및 기타 실시예를 위해서는 바람직하지 않다. 또한, 더 협소한 명령어 집합에서 레지스터로부터 이용가능한 오프셋은 제한되어 있어서, 단일 레지스터가 단지 작은 상수 풀(너무 작아서 쓸모없는)에만 엑세스를 제공한다. 본 바람직한 실시예(ISA 메뉴얼에서 L32R을 참조)는 상수 풀을 엑세스하는 데 사용될 수 있는 PC 관련 로드를 제공함에 있어서 많은 명령어 집합의 솔루션(예를 들어, PDP11, Motorola 68000, MIPS16, ARM Thumb)을 채택한다.
임의의 상수를 로딩하기 위하여는 어느 기술이든 본 발명에 적용가능하다. 본 바람직한 실시예는 두 번째 기술을 사용하는 반면에, 대안적인 실시예는 완전 상수의 일부를 각각 포함하는 복수의 명령어를 사용할 것이다. 24비트 명령어 워드에 대한 대안적인 실시예의 구체적인 예는 레지스터의 높은 부분에 16비트 명령어 상수를 넣은 하나의 명령어(16비트 상수 + 4비트 레지스터 목적지 + 4비트 연산코드 = 24비트) 및 레지스터에 16비트 사인된 상수를 더하도록 두 번째 명령어(16비트 상수 + 4비트 레지스터 소스 및 목적지 + 4비트 연산코드 = 24비트)을 가질 것이다.
축소된 오버헤드 루프 명령어
본 바람직한 실시예는 또한 RISC 프로세서에서 발견되지 않은 것을 제외하고 몇몇의 디지털 신호 프로세서(DSP)에서 발견된 루프 형상을 제공한다. 대부분의 RISC 프로세서는, 새로운 형상을 제공하여 루프를 구현하기보다는 루프를 생성하기 위해서 그들의 현존하는 조건 분기 명령어를 사용한다. 이러한 절약성은 프로세서를 더 간단하게 유지시키지만, IE 및 CPI를 증가시킨다. 예를 들어, C 루프
for (i = 0; i < n; i += 1) {
body
}는 본 바람직한 실시예에서는
movi.n a3, 0 //initialize i
blti a2, 1, done //no iterations if n <= 0
loop:
body
addi.n a3, a3, 1 //i += 1
blt a3, a2, loop //continue if i < n
로 컴파일될 것이다. 모든 반복에는 "루프 오버헤드"의 두 가지 명령어 즉, 가산(add) 및 조건 분기가 있다. (오버헤드의 세 가지 명령어는 본 바람직한 실시예의 비교 및 분기 형상이 없이 요구될 것이다.) 이것은 IE에 명확히 더해진다. 또한, 어떤 프로세서 구현에서 취해진 조건 분기는 파이프라이닝 및/또는 분기 예견으로 인하여 그 밖의 명령어들보다 더 많은 싸이클이 실행될 것을 요구할 것이다. 따라서 CPI는 증가할 것이다. 몇몇 명령어 집합은 단일 명령어를 부가하여 레지스터를 인크리멘트 또는 디크리멘트시키고, 비교 및 분기하여 (예를 들어, DEC PDP6, DEC PDP11, IBM PowerPC) 이 경우에 있어서 IE를 낮춘다(IBM PowerPC 명령어의 구현은 또한 CPI를 낮추는데 목표를 둔다).
루프 오버헤드의 성능 임팩트는 루프 바디(loop body)가 작을 때보다 더 높다. 많은 컴파일러는 이 경우에 루프 언롤링이라고 불리는 최적화를 사용하여 2 또는 그이상의 반복에 걸쳐 루프 오버헤드를 펼친다. C에서는, 상기 루프가 예를 들어,
i = 0;
if (n > 0) {
if ((i & 1)! = 0) {
body
i += 1;
if (n == 1) goto done;
}
do {
body
i += 1;
body
i += 1;
} while (i < n);
done:;
}
으로 변형될 수 있었다.
어떤 경우에는
body
i += 1;
body
i += 1;
은,
body(i)
body(i + 1)
i += 2;
로 대체될 수도 있으며, i + 상수는 바디의 명령어 안에(예를 들어, 로드 및 저장 명령어의 오프셋 안에) 접혀질 수 있어서, 매 반복당 한 번의 인크리멘트만이 요구된다.
2보다 큰 팩터에 의한 루프 언롤링은 상당히 보편화된 것으로, 4개 및 8개의 공통이 된다(두 개의 어떤 장점을 갖는 파워). 두 개의 언롤의 팩터를 동등하게 하는 것에 관하여 주의할 것은 그 결과 생기는 코드 크기의 증가이다(상기 예시에서 바디는 세 번 발생한다). RISC 프로세서에서 수행작업을 달성하기 위해서 이 기술을 사용하는 것은 코드 크기를 초과하는 성능 및 단순성에 관한 그들의 강조점과 부합한다.
많은 DSP 및 몇몇 일반적인 목적의 프로세서는 어떠한 종류의 루프를 수행하기 위한 다른 방법을 제공해 왔다. 첫번째 방법은 제2명령어를 고정된 횟수로 반복하는 명령어를 제공하는 것이다(예를 들어, TI TMS320C2x, Intel x86). 이것은 구현하는 데 있어서 상당히 간단하게 된다는 장점을 갖고 있다. 그것이 적용 가능한 경우에는, 그것이 루프 오버헤드를 제거하고, 반복적으로 동일한 명령어를페치(fetch)해야할 필요를 없앰으로써 전력 소비를 절약한다. 반복 명령어를 갖는 몇몇 명령어 집합은 프로세서가 루프동안에 방해를 배제할 것을 요구하는데, 이것은 상당한 제약이다. 또한, 단일 명령어 루프는 제한된 환경에서만 유용하고, 반복된 명령어가 다중 효과를 가질만큼 충분히 복잡해서 그것이 각각의 반복에 서로 다른 데이터를 연산하는 경우에만 유용하다.
간단한 반복 명령어에서의 개선점은 명령어의 블럭을 감소된 또는 제로 루프 오버헤드와 여러 번 되풀이하게 하는 능력이다(예를 들어, TI TMS 320C5x). 본 바람직한 실시예는 그것의 loop, loopgtz 및 loopnez 명령어를 통해 이 능력을 제공한다. 상술한 첫번째 C 루프는 다음 명령어로 컴파일될 것이다.
movi.n a3, 0 //i = 0
loopgtz a2, done //goto done if a2 <= 0, otherwise
//set LCOUNT to a2 - 1, LBEG to loop,
//and LEND to DONE, and then fall
//into body
loop:
body
addi.n a3, a3, 1 //i += 1
//the processor returns automatically
//to loop when it reaches here(LEND)
done:
본 바람직한 실시예의 루프 명령어의 세부사항은 ISA 메뉴얼에서 찾을 수 있다. LCOUNT, LBEG 및 LEND 레지스터는 명령어 집합에서 명확하게 되어 루프가 중단될 수 있다. 그것은 또한 이들 레지스터가 다른 명령어 실행과 병행하여 읽히고 쓰이게 한다(만일 일반적인 레지스터가 사용되었으면, 레지스터 파일 읽기/쓰기 포트가 증가될 필요가 있을 것이다). 본 바람직한 실시예는 LCOUNT 레지스터가 그것이 명령어 펫치에 작용하기 위한 최대 시간을 부여하도록 시험된 후 즉시 디크리멘팅되는 것을 명기한다. 루프 명령어는 본 바람직한 실시예가 루프의 조건 분기 컴파일레이션과 결부될 분기 패널티를 회피하게 할 것으로 기대된다.
a3(i)의 인크리멘트는 루프 명령어에 의해 자동으로 수행되지는 않는다. 상술한 바와 같이, 많은 루프가 특히 힘 감소 최적화 후에 서로 다른 양으로 가변하는 유도의 인크리멘트 또는 디크리멘트를 요구하기 때문에, 개별 명령어로서 남아있다. 또한, 몇몇 경우에 있어서, 이들 인크리멘트는 자동-인크리멘트와 같은 코프로세서 어드레스 모드 안에 접힐 수 있다. 마지막으로, 일반적인 레지스터를 인크리멘팅하는 것은 일반적인 레지스터 파일상의 여분의 포트를 요구할 것이다.
상기 예시 및 논의로부터 알 수 있듯이, 루프 명령어는 IE 및 IS 모두를 감소시키고 감소 CPI의 구현을 촉진한다. IS상의 임팩트는 루프 명령어가 루프 언롤링을 행할 필요성을 회피하는 때에 최대이지만, 언롤링된 경우에도 존재한다. 하지만, 당업자라면 쉽게 알 수 있듯이, 본 바람직한 실시예에서 이들 명령어의 존재함에 따라 부가적 프로세서 구현 비용이 요구될 것이다.
해저드(Hazards)
이제 대부분의 명령어 집합은 파이프라이닝된 하드웨어에 의해 구현된다. 때로는 파이프라인의 사용이 명령어 실행 동안에 해저드를 만들어 내기도 하는데, 이것은 하드웨어 또는 소프트웨어 중 하나에서 회피되어야 한다. 예컨대, 많은 파이프라인들은 파이프라인의 끝에서(또는 적어도 후반부에서) 레지스트 파일을 기재한다. 올바른 연산을 위해서, 소스 피연산자로서 기재될 레지스터를 사용하는 후속 명령어는 값이 기재될 때까지 레지스터 파일을 읽도록 반드시 대기해야 하던가, 기재될 값이 의존 명령어 및 무시된 레지스터 파일 컨텐츠를 지나치게 되거나 앞서 나아가게 되어야만 한다.
대부분의 프로세서들은 결과물이 이용 가능하여 그것이 레지스터 파일에 기재되기 전에 의존 연산에 그것을 통과시킬 때까지 그들의 일반적인 레지스터 파일 및 두 개의 지연 의존성 명령어를 위한 하드웨어 내에 의존성 검출을 제공한다. 소프트웨어에서의 명령어를 지연시킴(통상 NOP를 삽입함으로써)은 코드 사이즈를 확실히 증가(IS를 증가시킴으로써)시킬 것이며, 통과시키지 않음은 성능을 확실히 감소시킬 것이다. 따라서, 검출, 스톨(stall) 및 바이패스 하드웨어는 그것의 비용을 들일 만큼의 가치가 있게 한다.
하지만, 일반적인 목적의 레지스터 파일과는 다른 프로세서 상태를 위해서, 트레이드오프는 그러한 레지스터가 비주기적으로 참조되기도 하기 때문에 달라질 수도 있다. 따라서, 몇몇의 명령어 집합(예를 들어, MIPS)는 특별 레지스트 해저드의 소프트웨어 조작으로(예를 들어, 사용으로부터의 쓰기를 분리시키도록 NOP를 삽입함으로써) 스위칭한다. 이것은 불행히도 파이프라인의 인식이 명령어 스트림내에세워질 것을 요구한다.
해저드를 피하기 위해서 모든 후속 명령어를 지연시키는 특별한 레지스터 쓰기를 갖는 것은 대안책이 될 수 있다. 이것은 간단하고 문제를 해결하는 한편, 특별한 레지스터 쓰기가 때로는 그룹에서 발생하기도 하고(예를 들어, 문맥 스위치 또는 방해 후의 복구 상태로) 때로는 이유도 없이 다른 특별한 레지스터 쓰기 및 그들이 의존하는 명령어를 지연시키기도 하므로 비효율적일 수 있다. 본 발명의 바람직한 실시예는 하이브리드 접근을 채택한다. 그것은 하드웨어에 의해 검출되지 않고 막아지지 않는 해저드를 피하도록 소프트웨어가 삽입되어야 하는 ISYNC, RSYNC, ESYNC 및 DSYNC 명령어(자세한 것은 ISA 매뉴얼을 참조)를 제공한다. NOP의 사용과는 다르게, 이들 명령어는 모든 특별한 레지스터 쓰기가 완료될 때까지 지연을 시킨다. 이것은 단일 구현-의존성 명령어가 그렇지 않았더라면 잠재적으로 많은 수의 구현-특정 NOP를 요구할 수 있는 것을 성취하게 한다. 그것은 또한 프로그래머가 성능을 최대화하기 위해 스톨 없이 특별한 레지스터 쓰기를 모두 함께 그룹화할 수 있도록 하게 한다.
코드 밀도 옵션
본 바람직한 실시예의 명령어 집합은 명령어 집합의 모든 구현내에 바람직하게 존재하는 명령어의 핵심집합 및 주어진 구현내에 존재할 수도 존재하지 않을 수도 있는 선택적 명령어 패키지의 집합으로 이루어진다. 하나의 그러한 패키지는 명령어당 평균 비트인 BI를 줄임으로써 확실한 코드 크기 감소를 제공하는 쇼트 명령어 형식이다. 이들 쇼트 형식 명령어가 존재하는 경우에, 본 바람직한 실시예는 고정된 길이(24비트)의 명령어 집합으로부터 두 개의 명령어 크기(24비트 및 16비트)를 갖는 하나로 바뀐다. 대안적인 실시예는 명령어 크기의 다른 집합을 선택할 수 있을 것이다. 예컨대, 세 개 대신에 쇼트 형태로 두 개의 레지스터 필드가 있는 경우에는, 24/16 인코딩에 유사한 코드 밀도를 갖는 하나의 대안책은 24/12이다.
쇼트 명령어 형태는 선택적이므로, 이들 형태는 코드 크기를 개선하기 위해 단독으로 사용된다. 이들 명령어에는 새로운 기능성이 존재하지 않는다. 16비트로 인코딩될 수 있는 명령어의 집합은 꼭 맞을 것 같은(또는 예를 들어, 상수 필드 폭을 감소시킴으로써 꼭 맞게 변경될 수 있는) 통계적으로 가장 빈번한 명령어로 선택된다. 대부분의 명령어 집합에서 가장 빈번한 명령어는 로드, 저장, 분기, 부가 및 이동이다. 이들은 본 바람직한 실시예의 16비트 인코딩에서 틀림없이 존재하는 명령어이다. BI를 줄이기 위해서 전체적으로 쇼트 형식을 사용하는 것은, 각각의 명령어가 피연산자의 수와 피연산자 종류에 주로 의존하고 사용의 정적인 주기성에는 의존하지 않는 인코딩을 갖는 Motorola 68000, Intel x86 및 DEC VAX와 같은 기타의 가변적 길이의 명령어 집합과는 대조적이다.
본 발명과 유사한 특성을 갖는다고 알려진 명령어 집합은 Siemens Tricore 뿐인데, 이것은 BI를 줄이기 위한 16비트 쇼트 형식과 32비트 주요 형식을 갖는다. 우리의 발명과는 다르게, 주요 형식은 전형적인 BI를 달성하기에는 너무 길고, 쇼트 형태는 그것이 소스와 행선지 레지스터 중 하나를 강제로 동일화되게 하거나 소스 또는 행선지 레지스터 중 하나를 작동코드에 의해 함축되도록 하는 두 개의 레지스터 필드만을 제공하기 때문에 기능적이지 않다. 앞에서 논의한 바와 같이, 함축된 근원 레지스터의 사용은 구현의 CP 또는 CPI 중 하나를 증가시키기 쉽다.
16비트 명령어 집합만으론 수행능력 및 기능성에서 불충분하다는 것을 앞에서 보여주었다. 가장 빈번한 명령어의 16비트 인코딩은 이 위험성을 피한다. 가장 빈번한 명령어만이 쇼트 인코딩을 필요로 하므로, 세 개의 레지스터 필드가 이용 가능하며, 협소한 상수 필드는 사용의 중요한 일부분을 확보할 수 있다. 응용프로그램을 표현하는데 필요한 명령어의 거의 반은 레지스터 특정치 또는 상수를 위해 3개의 4비트 필드를 비축해 놓은 후에 16비트 인코딩내에 이용 가능한 16개의 작동코드의 단지 6개내에 인코딩될 수 있다.
16비트 인코딩된 조밀 명령어 옵션(dense instruction option)의 상세한 설명은 ISA 메뉴얼의 표 26에서 찾을 수 있으며, 거기에 도시된 바와 같이, 선택적 명령어 집합은 132i.n 명령어 (로드 32비트, 4비트 오프셋); s32i.n (저장 32비트, 4비트 오프셋); mov.n (하나의 레지스터의 내용을 다른 쪽으로 이동); add.n (두 개의 레지스터의 내용을 더함); addi.n (레지스터와 이미디에이트(immediate)를 더함, 여기서 이미디에이트는 -1이거나 1에서 15의 범위내이다); movi.n(이미디에이트로 레지스터를 로드, 여기서 이미디에이트는 -32에서 95의 범위내이다); nop.n (비연산); break.n(브레이크); ret.n, retw.n (ret 및 retw); beqz.n (레지스터가 0이면 6비트 사인되지 않은 오프셋으로 전방 분기); 및 bnez.n (레지스터가 0이 아니면 6비트 사인되지 않은 오프셋으로 전방 분기)를 포함한다.
대안적인 실시예는 상기 기술된 바와 같은 12비트 쇼트 형태를 사용할 것이다. 12비트 형태는 4비트 주 작동코드에 덧붙여 두 개의 4비트 필드를 지원할 뿐이다. 이것은 오프셋을 갖지 않는(때로는 필드에서의 레지스터 간접 어드레싱이라고 불리는) 로드와 저장 및, 행선지와 하나의 근원 레지스터가 동일한 경우의 부가 명령어만을 지원한다. 컴파일러는 더 긴 세 개의 피연산자 형식이 적합한 때에 사용이 자유롭기 때문에, 이들 제약조건이 다른 환경에 있을 것이므로 성능상의 한계가 아니다. 상기 제약조건은 바로 12비트 형태가 자주 사용되는 것을 방지하지만, 그것의 감소된 크기가 부분적으로 보상한다. 30% 12비트 및 70% 24비트에서, BI는 20.4비트가 될 것이며, 50% 16비트 및 50% 24비트에 의해 성취되는 20.0비트와 거의 동일하다. 하나의 형식이 다른 것의 크기의 반일 때 오는 몇몇의 구현 단순화가 있지만, 명령어 크기 및 데이터 폭의 최대공약수가 작을 때(이것은 24, 12 및 32에 대하여는 4이고, 24, 16 및 32에 대하여는 8이다)에는 구현상이 몇몇 논쟁점이 있다. 전반적으로 상기 둘은 구현 비용에서 거의 동등하며, 따라서 본 바람직한 실시예는 24/16인 더 우수한 코드 크기를 부여하는 것이다.
24/12에 비해 24/16은 하나의 부가적인 코드 사이즈 단점을 가진다. 분기 오프셋(명령어 상수가 명령어 주소의 상이함을 통해 목표 명령어를 특정화함)은 모든 명령어 사이즈의 최대공약수의 배수이어야만 된다. 이것은 24/12에서는 12, 24/16에서는 8이다. 이 숫자가 클수록 분기가 더 멀리(비트 단위로) 도달할 수 있다. 이러한 범위를 초과하는 분기는 다중-명령어 시퀀스를 요구하고, 이는 IS를 증가시킨다.
대부분의 RISC에서 보는 바와 같이, 고정길이 명령어의 가장 두드러진 장점은 프로세서 구현이 사이클당 다수의 명령어를 실행할 때에 이루어진다. 이 경우,명령어들은 보통 병렬로 디코딩된다. 가변길이 명령어라면, 제2명령어의 시작을 찾기 위해 제1명령어상에 충분한 디코딩이 반드시 되어 있으므로 디코딩이 그것에서 시작될 수 있는데, 예컨대 제3명령어의 시작을 찾기 위해 제2명령어상에서도 충분한 디코딩이 이루어져 있어야만 된다. 이것은 CP를 증가시킬 수 있다. CP 증가를 피하기 위하여 파이프라인 스테이지를 부가하는 것은 CPI를 분명히 증가시킬 것이다. 소정의 구현은 각개의 포텐셜 명령어 시작을 디코딩하고, 그 후 정보가 이전 명령어의 디코드로부터 이용가능해질 때 실제 명령어를 선택함으로써 초기 시작(early start)을 한다. 이것은 명백하게 구현의 비용을 증가시킨다. 명령어를 구별하기 위해 파이프라인 스테이지를 부가하는 것 등도 비용을 증가시킨다. 여전히 다른 가능성, 예를 들어 명령어 캐시내에 예비디코딩을 하는 것도 가능하지만, 그 어떤 것도 구현 비용을 증가시킨다.
바람직한 실시예는 가변길이 디코딩 문제는 제거하지 못하는 반면, 첫째로 2 명령어 길이만을 사용하고, 둘째로 2 명령어 길이 사이에 식별을 위한 단일 명령어 비트를 사용하여 가능한 한 단순하게 만든다. 이것은 구현 비용을 최소화하고 CP에 있어서 소정의 효과가 있다. 마지막으로 선택적인 쇼트 폼(short forms)을 만듦으로써, 상기 바람직한 실시예는 코드 사이즈가 제1우선순위가 아닐 때 비용 및 CP 효과를 제거하는 것이 가능하다.
많은 명령어 집합이 리틀-엔디안(little-endian) 또는 빅-엔디안(big-endian) 바이트 오더링(ordering)으로 작동한다. 이것을 달성하는 기술은, 예를 들면 미국 특허 제4,959,779호 등에 개시되어 있다. 그러나, 가변 크기의 명령어를갖는 명령어 집합은 부가적인 주의를 요구한다. MIPS 명령어 집합은 빅 엔디안 및 리틀 엔디안 바이트 오더를 위한 동일한 명령어 형식을 사용하는데, 이는 명령어들이 모두 하나의 사이즈이기 때문이다. 바람직한 실시예는 상기 특성을 유지하도록 빅 엔디안 및 리틀 엔디안 바이트 오더를 위한 상이한 명령어 워드를 특정화하고, 최저 숫자로 어드레싱된 바이트(본 바람직한 실시예에서는 최소로 어드레싱할 수 있는 유닛)에 존재하는 명령어 사이즈를 결정하기 위해 상기 비트들이 필요하게 된다.
윈도우 레지스터 옵션
또 다른 선택 패키지는 윈도우 레지스터 옵션이다. 이것은 IE 및 IS를 낮추기 위하여 제공된다. 낮아진 IE로부터의 성능의 향상은 32개 대신에 16개 레지스터를 구비함으로써 IE의 증가를 보상하기도 한다. 레지스터 원도우는 몇몇 다른 프로세서, 예를 들면 Sun SPARC 등에서 발견된다. 상기 주제에 대한 상세한 설명을 위해서는 Sun SPARC 문헌을 참조할 것임. "레지스터 윈도우"란 명칭은 명령어의 레지스터 필드가 더 큰 레지스터 파일상의 현재 윈도우내에서 레지스터를 특정하는 곳에서의 통상적인 구현을 나타낸다. 윈도우의 위치는 윈도우 베이스 레지스터에 의해 설명된다.
레지스터 윈도우는 프로시저 입구 및 출구에 레지스터를 저장하고 복원할 필요가 없다(이것은 IS 및 IE를 감소시킨다). 이것은 이들 점의 포인터를 바꿈으로써 달성되는데, 이것은 본질적으로 소정의 레지스터를 숨기고 새로운 레지스터를 노출시키는 것이다. 노출된 레지스터는 일반적으로 유효한 데이터를 포함하지 않고, 직접 사용될 수 있다. 그러나, 노출된 레지스터가 유효한 데이터를 포함하는 경우에는(윈도우는 멀리 이동하였기 때문에 이전 호출 프레임의 레지스터(previous call frame's registers) 주위에 둘러싸여 있다), 하드웨어가 이것을 검출하고 실행을 계속하기 전에 유효한 레지스터를 메모리에 저장한다(이것은 보통 소프트웨어 핸들러로의 트랩에 의해 달성된다). 이것은 레지스터 윈도우 오버플로우라 불리운다. 그 레지스터가 메모리에 저장된 프레임으로 호출이 되돌아가는 경우에는, 레지스터 윈도우 언더플로우가 발생하고, 프로세서는 메모리로부터 값들을 대부분 로딩한다(이것 역시 보통 소프트웨어 핸들러로의 트랩에 의해 달성된다).
호출자와 피호출자간의 물리적인 레지스터 파일에 비추어서 중첩되는 레지스터 윈도우는, 프로시저에 대한 인자들이 레지스터에서 패스되는 때에 발생할 수 있는 인자 셔플링을 피하기도 한다(인자 셔플링은 IS 및 IE를 증가시킨다). 마지막으로, 레지스터 윈도우는 레지스터에 가변 또는 임시값을 할당하기 위한 손익분기점을 변화시켜 레지스터 사용을 조장하는데, 이는 메모리 로케이션을 사용하는 것보다 고속이고 소형이다(또한 IS 및 IE를 감소시킨다).
이러한 본 발명의 레지스터 윈도우와 SPARC의 레지스터 윈도우간의 주요 차이점은, (1) SPARC는 윈도우 포인터에 있어서 16의 고정된 인크리멘트를 가지며; (2) SPARC는 윈도우 레지스터에 추가로 전역 레지스터를 가지지만, 본 바람직한 실시예는 그렇지 않으며; (3) SPARC는 현재 윈도우가 이전 윈도우와 중첩되는 상태에서 윈도우 오버플로우를 검출하는 반면, 본 바람직한 실시예는 레지스터가 이전 윈도우의 부분인 것을 참조하여 윈도우 오버플로우를 검출한다.
고정 인크리멘트로부터 가변 인크리멘트로의 변화는 구현 비용을 낮게 유지하는 것에 있어 중요하다. 그것은 훨씬 더 작은 물리적인 레지스터 파일을 사용되는 것을 허용한다. 예를 들면, 많은 Sun SPARC 구현에서는 136 엔트리의 물리적인 레지스터 파일을 사용하는 반면, 본 바람직한 실시예에서는 동일한 윈도우 성능을 달성하는데 64 엔트리의 레지스터 파일만이 요구될 수도 있다. 가변 인크리멘트를 위한 복잡성의 증가가 있지만, 프로세서 구현 비용의 차이는 30% 또는 그 이상(이것은 더 간단한 고정-인크리멘트 SPARC 방법에 의해 요구된 더 큰 레지스터의 비용이다)일 수 있다. 본 바람직한 실시예는 오버플로우 및 언더플로우를 감지하고, ISA 매뉴얼에 더욱 상세하게 기술된 스택 프레임을 구축하는 새로운 방법을 특정한다.
겉보기에는, 레지스터 윈도우 메카니즘이 레지스터 파일 읽기와 직렬로 가산(짧은 것임에도 불구하고)을 요구함으로써 CP(또는 CPI)를 증가시키는 것처럼 보일 것이다. (덧셈을 하기 위하여 파이프라인에 1 사이클이 있을 때에, 레지스터 쓰기는 논쟁 대상가 아니다.) 그러나, 비-윈도우 레지스터 액세스에 대한 타이밍을 윈도우의 크기를 갖는 레지스터 파일과 유사하게 레지스터 윈도우 액세스를 구현하는 것이 가능하다. 예를 들면, 64개의 레지스터의 물리적인 레지스터파일 및 어떠한 소정의 명령어에 대하여도 가시적인 16 윈도우를 고려한다. 이 경우, 16개의 (64:1) 멀티플렉서가 윈도우 포인터만을 기초로 하여 16개의 비지블(visible) 레지스터를 선택하는데 사용될 수 있으면, 이들 16개의 멀티플렉서는 16-엔트리 레지스터 파일과 같이 액세스된 것과 같은 결과를 나타낸다. 16개의 (64:1) 멀티플렉서를사용하는 것은 높은 구현 비용을 가진다. 이러한 이유로 본 바람직한 실시예에서는 이 비용을 4의 인수로 감소시키면서 4의 배수로 한정된 윈도우 포인터를 특정시킨다. 더 느린 합계 비트(4 비트 및 2 비트 입력의 합계)가 액세스의 나중의 포인트에 사용되면서, 직렬 덧셈(series addition)을 이용하기 위해 선택하는 구현에 있어서도, 이것은 레지스터 수의 2 비트가 즉시 레지스터 파일 액세스를 시작하는데 사용될 수 있다는 것을 보증한다. 마지막으로, 중간 구현 비용을 갖는 이들 두 구현 사이의 하이브리드가 가능하다.
본 바람직한 실시예의 수정예와 변형예는 본 기술분야의 당업자에게는 명백할 것이다. 이러한 변형예는 청구범위에 기재된 본 발명의 범위내에 있다.

Claims (21)

  1. 적어도 16개의 범용 레지스터;
    상기 레지스터와 데이터를 교환하도록 메모리를 액세스하는 수단; 및
    상기 메모리로부터 실질적으로 28비트 이하의 길이를 갖는 모든 명령어를 처리하는 연산 유닛을 포함하고,
    명령어중 적어도 하나는 연산코드 필드, 상수 피연산자를 상기 명령어에 특정하는 필드, 상기 범용 레지스터 중 어느 하나를 근원 레지스터로서 지정할 수 있는 근원 레지스터 필드, 및 상기 범용 레지스터중 어느 하나를 목적 레지스터로서 지정할 수 있는 목적 필드를 가지고;
    명령어중 적어도 하나는 연산코드 필드, 상기 범용 레지스터 중 어느 하나를 근원 레지스터로서 각각 지정할 수 있는 복수의 근원 레지스터 필드, 및 상기 범용 레지스터중 어느 하나를 목적 레지스터로서 지정할 수 있는 목적 필드를 가지고;
    명령어중 적어도 하나는 연산 유닛이 복수의 복합 연산을 수행하게 하고, 상기 연산중 제1연산은 제1산술 및 논리 연산 중의 하나이고, 상기 연산중 제2연산은 제2산술 연산 및 조건 분기 연산 중의 하나인 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서,
    상기 명령어는 동일한 제1고정명령어 길이를 갖는 제1명령어그룹 및 상기 제1고정명령어 길이와 다른 동일한 제2고정명령어 길이를 갖는 제2명령어그룹을 포함하고;
    두 그룹에 공통인 연산코드 필드내의 소정의 비트 필드는 상기 비트 필드를 갖는 명령어가 속하는 그룹을 가리키는 것을 특징으로 하는 프로세서.
  3. 제1항에 있어서,
    상기 연산중 제1연산은 상기 명령어내의 근원 레지스터 필드에 의해 지정된 레지스터 값의 비교이고, 상기 연산중 제2연산은 상기 비교의 결과에 응답하는 분기 연산인 것을 특징으로 하는 프로세서.
  4. 제1항에 있어서,
    상기 연산중 제1연산은 근원 레지스터 필드에 의해 지정된 레지스터의 컨텐츠의 논리 좌측 쉬프트이고, 상기 연산중 제2연산은 또 다른 근원 레지스터값 및 시프트된 레지스터 컨텐츠에 관한 산술 연산인 것을 특징으로 하는 프로세서.
  5. 제1항에 있어서,
    상기 연산중 제1연산은 근원 레지스터 필드에 의해 지정된 레지스터의 컨텐츠의 논리 우측 쉬프트이고, 상기 연산중 제2연산은 상기 명령어의 상수 필드에 의해 특정된 값을 갖는 상기 시프트의 결과에 관한 논리 AND 연산인 것을 특징으로 하는 프로세서.
  6. 제1항에 있어서,
    적어도 하나의 명령어는 상기 프로세서가 제2명령어주소가 도달될 때까지 제1명령어주소에서 시작하는 명령어를 수행하게 하고, 그 후 상기 제1명령어주소에서 계속해서 다시 수행하게 하며, 상기 명령어의 근원 레지스터 필드에 의해 지정된 근원 레지스터의 컨텐츠에 의한 결정을 다수회 반복하게 하는 것을 특징으로 하는 프로세서.
  7. 제1항에 있어서,
    상기 프로세서는 룩업 테이블의 상수값을 지정하는 상수 필드를 갖는 적어도 하나의 명령어를 포함하는 것을 특징으로 하는 프로세서.
  8. 제1항에 있어서,
    복수의 특수목적용 레지스터; 및
    그 내부의 데이터를 코프로세서와 교환하기 위하여 상기 특수목적용 레지스터를 액세스하는 수단을 더 포함하고,
    명령어중 적어도 하나는 미리결정된 값인 특수목적용 레지스터내의 데이터에 응답하는 조건 분기인 것을 특징으로 하는 프로세서.
  9. 제8항에 있어서,
    상기 특수목적용 레지스터는 1-비트 레지스터이고;
    액세스하는 수단은 상기 1-비트 레지스터와 복수의 코프로세서간에 데이터를 교환하는 것을 특징으로 하는 프로세서.
  10. 제1항에 있어서,
    특수목적용 레지스터; 및
    상기 특수목적용 레지스터로의 쓰기의 수행이 아직 완료되지 않은 것과, 모든 대기중인 특수목적용 레지스터 쓰기의 수행이 완료된 것을 선택적으로 지시하는 상태 지시 수단을 더 포함하고,
    상기 명령어 집합은 상기 상태 지시 수단이 모든 대기중인 쓰기의 수행이 완료되었다는 것을 가리킬 때까지 상기 연산 유닛이 후속 명령어의 수행을 지연시키게 하는 명령어를 포함하는 것을 특징으로 하는 프로세서.
  11. 그 내부에 데이터를 저장하기 위한 다중 레지스터;
    상기 메모리와 레지스터간에 데이터를 교환하기 위하여 메모리를 액세스하는 수단; 및
    상기 레지스터에 저장된 데이터를 처리하기 위하여 상기 메모리로부터 명령어를 실행하는 연산 수단을 포함하는 프로세서로서,
    상기 복수의 명령어는 각 레지스터 필드가 적어도 4 비트 폭인 다중 레지스터 필드를 가지고;
    상기 명령어는 로드, 저장, 동일성의 조건 분기, 비동일성의 조건 분기, 및28 비트 이하로 각각 인코딩된 산술 연산 중 적어도 하나를 포함하고;
    상기 연산 수단은 로드 명령어 수행에 응답하여 상기 명령어의 근원 레지스터 필드 및 상기 로드 명령어의 상수 필드에 의해 특정된 레지스터의 컨텐츠의 합에 대응하는 메모리 위치로부터 상기 로드 명령어의 목적 레지스터 필드의 컨텐츠에 의해 지정된 레지스터내로 데이터를 로딩하기 위한 것이고;
    상기 연산 수단은 저장 명령어 수행에 응답하여 상기 저장 명령어의 제2 근원 레지스터 필드 및 상기 저장 명령어의 상수 필드에 의해 특정된 레지스터의 컨텐츠의 합에 대응하는 메모리 위치내에 상기 저장 명령어의 제1 근원 레지스터 필드의 컨텐츠에 의해 지정된 레지스터로부터의 데이터를 저장하기 위한 것이고;
    상기 연산 수단은 동일성의 조건 분기 명령어 수행에 응답하여 비동일성의 조건 분기 명령어에 의해 지시된 두 레지스터의 컨텐츠가 동일할 때 동일성의 조건 분기 명령어에 의해 지시된 상대적 오프셋값에 대응하는 위치에서 시작하는 메모리로부터 명령을 순차적으로 수행하기 위한 것이고;
    상기 연산 수단은 비동일성의 조건 분기 명령어 수행에 응답하여 비동일성의 조건 분기 명령어에 의해 지시된 두 레지스터의 컨텐츠가 동일하지 않을 때 비동일성의 조건 분기 명령어에 의해 지시된 상대적 오프셋값에 대응하는 위치에서 시작하는 메모리로부터 명령어를 순차적으로 수행하기 위한 것이고;
    상기 연산 수단은 산술 명령어의 수행에 응답하여 산술 명령어의 각각의 근원 레지스터 필드에 의해 지시된 복수의 레지스터의 컨텐츠상의 산술 연산을 수행하고, 상기 산술 명령어의 목적 레지스터 필드에 의해 지시된 레지스터내에 그 결과를 저장하기 위한 것인 것을 특징으로 하는 프로세서.
  12. 제11항에 있어서,
    상기 로드, 저장, 동일성의 조건 분기, 비동일성의 조건 분기 및 산술 명령어 각각의 근원 레지스터 필드는 각 명령어의 경계에 대해 동일한 위치에 있고;
    상기 저장, 동일성의 조건 분기, 비동일성의 조건 분기 및 산술 명령어의 부가적인 근원 레지스터 필드는 각 명령어의 경계에 대해 동일한 위치에 있는 것을 특징으로 하는 프로세서.
  13. 제12항에 있어서,
    상기 연산 수단은 또한 한번의 루프 명령어 수행에 응답하여 다른 명령어를 다수회 수행하기 위한 것인 것을 특징으로 하는 프로세서.
  14. 제13항에 있어서,
    상기 로드, 저장, 동일성의 조건 분기, 비동일성의 조건 분기 및 산술 명령어는 각각 동일한 제1고정길이로 인코딩되고;
    상기 연산 수단은 상기 제1고정길이보다 더 짧은 동일한 제2고정길이로 각각 인코딩된 각각의 쇼트 로드, 쇼트 저장, 쇼트 동일성 조건 분기, 쇼트 비동일성 쇼트 조건 분기 및 쇼트 산술 명령어의 수행에 응답하여 상기 각각의 로드, 저장, 동일성의 조건 분기, 비동일성의 조건 분기 및 산술 명령어의 대응하는 연산을 수행하는 것을 특징으로 하는 프로세서.
  15. 제13항에 있어서,
    상기 연산 수단은 레지스터 파일내 레지스터의 그룹을 가리키는 윈도우 베이스 레지스터를 포함하고;
    상기 연산 수단은 또한 상기 레지스터 필드가 레지스터의 그룹내 윈도우에 관련된 레지스터를 가리키도록 상기 레지스터 파일내 레지스터의 그룹을 윈도우잉하는 것을 특징으로 하는 프로세서.
  16. 제15항에 있어서,
    윈도우 베이스 레지스터 상대 인크리멘트는 서브루틴 호출 명령어내의 상수에 의해 특정되는 것을 특징으로 하는 프로세서.
  17. 그 내부에 데이터를 저장하기 위한 다수의 레지스터;
    메모리와 레지스터간에 데이터를 교환하기 위하여 메모리를 액세스하는 수단; 및
    상기 레지스터에 저장된 데이터를 처리하기 위하여 상기 메모리로부터 명령어를 실행하는 연산 수단을 포함하는 프로세서로서,
    각각의 명령어는 32 비트 폭보다 작고, 복수의 상기 명령어는 목적 레지스터 필드 및 다수의 근원 레지스터 필드를 가지며, 각각의 상기 레지스터 필드는 적어도 4 비트 폭이고;
    상기 연산 수단은 로드 명령어의 수행에 응답하여 상기 명령어의 근원 레지스터 필드 및 상기 명령어의 상수 필드에 의해 특정화된 레지스터 중 하나의 컨텐츠의 합에 대응하는 메모리 위치로부터 상기 로드 명령어의 목적 레지스터 필드에 의해 특정된 레지스터내로 데이터를 로딩하기 위한 것이고;
    상기 연산 수단은 저장 명령어의 수행에 응답하여 상기 명령어의 제2 근원 레지스터 필드 및 상기 명령어의 상수 필드에 의해 특정화된 레지스터 중 하나의 컨텐츠의 합에 대응하는 메모리 위치내에 상기 명령어의 제1 근원 레지스터 필드에 의해 특정된 레지스터로부터의 데이터를 저장하기 위한 것이고;
    상기 연산 수단은 조건 분기 명령어 수행에 응답하는 테스트를 수행하여 상기 테스트의 결과가 참이면, 상기 조건 분기 명령어에 의해 지시된 상대 오프셋값에 대응하는 위치에서 시작하는 상기 메모리로부터 명령어를 순차적으로 수행하고, 상기 테스트는,
    2개의 근원 레지스터의 컨텐츠의 동일성,
    2개의 근원 레지스터의 컨텐츠의 비동일성,
    2개의 근원 레지스터의 비트별 논리 AND가 0 과 같음,
    2개의 근원 레지스터의 비트별 논리 AND가 0 과 같지 않음,
    제2 근원 레지스터의 컨텐츠에 의해 지정된 제1 근원 레지스터의 컨텐츠의 한 비트가 0 임,
    제2 근원 레지스터의 컨텐츠에 의해 지정된 제1 근원 레지스터의 컨텐츠의한 비트가 1 임,
    상기 명령어의 필드에 의해 지정된 근원 레지스터의 컨텐츠의 한 비트가 0 임,
    상기 명령어의 필드에 의해 지정된 근원 레지스터의 컨텐츠의 한 비트가 1 임,
    상기 명령어의 필드에 의해 지정된 제1 근원 레지스터의 컨텐츠가 제2 근원 레지스터의 컨텐츠보다 적은 2의 보수임,
    상기 명령어의 필드에 의해 지정된 제1 근원 레지스터의 컨텐츠가 제2 근원 레지스터의 컨텐츠보다 크거나 같은 2의 보수임,
    상기 명령어의 필드에 의해 지정된 제1 근원 레지스터의 컨텐츠가 제2 근원 레지스터의 컨텐츠보다 적게 언사인(unsign)됨,
    상기 명령어의 필드에 의해 지명된 제1 근원 레지스터의 컨텐츠가 제2 근원 레지스터의 컨텐츠보다 크거나 같게 언사인됨,
    근원 레지스터의 컨텐츠와 상기 명령어의 상수 필드의 동일성,
    근원 레지스터의 컨텐츠와 상기 명령어의 상수 필드의 비동일성,
    근원 레지스터의 컨텐츠가 상기 명령어의 상수 필드보다 적은 2의 보수임,
    근원 레지스터의 컨텐츠가 상기 명령어의 상수 필드보다 크거나 같은 2의 보수임,
    근원 레지스터의 컨텐츠가 상기 명령어의 상수 필드보다 적게 언사인(unsign)됨, 및
    근원 레지스터의 컨텐츠가 상기 명령어의 상수 필드보다 크게 언사인됨 등으로 구성된 제1그룹으로부터 선택되는 것을 특징으로 하는 프로세서.
  18. 제17항에 있어서,
    상기 테스트는,
    근원 레지스터의 컨텐츠가 0 임;
    근원 레지스터의 컨텐츠가 0 이 아님;
    근원 레지스터의 컨텐츠가 0 보다 적은 2의 보수임; 및
    근원 레지스터의 컨텐츠가 0 보다 큰 2의 보수임 등으로 구성된 제1그룹 및 제2그룹 중 하나로부터 선택되고,
    0 에 대한 각각의 비교는 근원 레지스터를 0 이 아닌 인자와 비교하는 대응 명령어의 오프셋보다 큰 분기 목표를 지정하는 오프셋을 특정하는 것을 특징으로 하는 프로세서.
  19. 제18항에 있어서,
    테스트는 필드 값에 의해 특정된 룩업 테이블내의 위치를 참조하여 상수로부터의 상기 명령어의 상수 필드와 근원 레지스터와의 비교를 포함하는 것을 특징으로 하는 프로세서.
  20. 제19항에 있어서,
    모든 명령어는 32 비트보다 작은 길이인 것을 특징으로 하는 프로세서.
  21. 제20항에 있어서,
    상기 명령어는 보다 적은 수의 비트로 인코딩된 조건 분기 명령어를 포함하고, 대응하는 조건 분기 명령어보다 더 짧은 상대 오프셋 필드를 사용하며, 근원 레지스터의 컨텐츠가 0 인지 아니면 근원 레지스터의 컨텐츠가 0 이 아닌지를 테스팅하는 테스트를 포함하는 것을 특징으로 하는 프로세서.
KR10-2001-7006015A 1998-11-13 1999-11-10 데이터 밀도가 높은 risc 프로세서 KR100412920B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/192,395 US6282633B1 (en) 1998-11-13 1998-11-13 High data density RISC processor
US09/192,395 1998-11-13

Publications (2)

Publication Number Publication Date
KR20010092736A true KR20010092736A (ko) 2001-10-26
KR100412920B1 KR100412920B1 (ko) 2003-12-31

Family

ID=22709471

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-7006015A KR100412920B1 (ko) 1998-11-13 1999-11-10 데이터 밀도가 높은 risc 프로세서

Country Status (8)

Country Link
US (1) US6282633B1 (ko)
EP (1) EP1129402A1 (ko)
JP (2) JP3795757B2 (ko)
KR (1) KR100412920B1 (ko)
CN (1) CN1204490C (ko)
AU (1) AU1346500A (ko)
TW (1) TW452693B (ko)
WO (1) WO2000029938A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100864890B1 (ko) * 2001-05-21 2008-10-22 에이알엠 리미티드 데이터 처리장치에서의 소스 레지스터 록킹
WO2016064131A1 (ko) * 2014-10-20 2016-04-28 삼성전자 주식회사 데이터 처리 방법 및 장치

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2984463B2 (ja) * 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
US6990570B2 (en) * 1998-10-06 2006-01-24 Texas Instruments Incorporated Processor with a computer repeat instruction
US7779236B1 (en) * 1998-12-31 2010-08-17 Stmicroelectronics, Inc. Symbolic store-load bypass
US6842853B1 (en) * 1999-01-13 2005-01-11 Sun Microsystems, Inc. Thread suspension system and method
JP2000353092A (ja) * 1999-06-09 2000-12-19 Nec Corp 情報処理装置及びそのレジスタファイル切替方法
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6446195B1 (en) * 2000-01-31 2002-09-03 Intel Corporation Dyadic operations instruction processor with configurable functional blocks
US7418580B1 (en) * 1999-12-02 2008-08-26 International Business Machines Corporation Dynamic object-level code transaction for improved performance of a computer
US6754892B1 (en) * 1999-12-15 2004-06-22 Transmeta Corporation Instruction packing for an advanced microprocessor
US6633181B1 (en) * 1999-12-30 2003-10-14 Stretch, Inc. Multi-scale programmable array
US6763327B1 (en) * 2000-02-17 2004-07-13 Tensilica, Inc. Abstraction of configurable processor functionality for operating systems portability
US7036106B1 (en) 2000-02-17 2006-04-25 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
US7051189B2 (en) 2000-03-15 2006-05-23 Arc International Method and apparatus for processor code optimization using code compression
KR100379837B1 (ko) * 2000-06-30 2003-04-11 주식회사 에이디칩스 확장명령어 축약장치
US6922773B2 (en) * 2000-12-29 2005-07-26 Stmicroelectronics, Inc. System and method for encoding constant operands in a wide issue processor
US6857110B1 (en) 2001-01-30 2005-02-15 Stretch, Inc. Design methodology for merging programmable logic into a custom IC
JP3776732B2 (ja) * 2001-02-02 2006-05-17 株式会社東芝 プロセッサ装置
US7010558B2 (en) * 2001-04-19 2006-03-07 Arc International Data processor with enhanced instruction execution and method
US7493470B1 (en) 2001-12-07 2009-02-17 Arc International, Plc Processor apparatus and methods optimized for control applications
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
EP1470476A4 (en) * 2002-01-31 2007-05-30 Arc Int CONFIGURABLE DATA PROCESSOR WITH MULTI-LENGTH INSTRUCTION KIT ARCHITECTURE
US20030167460A1 (en) * 2002-02-26 2003-09-04 Desai Vipul Anil Processor instruction set simulation power estimation method
AU2003223746A1 (en) * 2002-04-25 2003-11-10 Arc International Apparatus and method for managing integrated circuit designs
US6986023B2 (en) 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
AU2003256870A1 (en) * 2002-08-09 2004-02-25 Intel Corporation Multimedia coprocessor control mechanism including alignment or broadcast instructions
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
FR2845784B1 (fr) * 2002-10-11 2005-01-14 St Microelectronics Sa Dispositif de memorisation de donnees de type lifo incorporant deux memoires a acces aleatoire
US7600096B2 (en) * 2002-11-19 2009-10-06 Stmicroelectronics, Inc. Coprocessor extension architecture built using a novel split-instruction transaction model
GB2402764B (en) * 2003-06-13 2006-02-22 Advanced Risc Mach Ltd Instruction encoding within a data processing apparatus having multiple instruction sets
GB2402763B (en) * 2003-06-13 2006-03-01 Advanced Risc Mach Ltd Data access program instruction encoding
US7698539B1 (en) * 2003-07-16 2010-04-13 Banning John P System and method of instruction modification
US7606997B1 (en) 2003-07-18 2009-10-20 Guillermo Rozas Method and system for using one or more address bits and an instruction to increase an instruction set
US7373642B2 (en) * 2003-07-29 2008-05-13 Stretch, Inc. Defining instruction extensions in a standard programming language
US7526757B2 (en) * 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7216216B1 (en) * 2004-06-30 2007-05-08 Sun Microsystems, Inc. Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window
US7620042B2 (en) * 2004-12-17 2009-11-17 Samsung Electronics Co., Ltd. Apparatus and method for inter-processor communications in a multiprocessor routing node
US7664928B1 (en) 2005-01-19 2010-02-16 Tensilica, Inc. Method and apparatus for providing user-defined interfaces for a configurable processor
US7415599B1 (en) * 2005-11-01 2008-08-19 Zilog, Inc. Instruction operation and operand memory location determined based on preceding instruction operation and operand memory location
US7971132B2 (en) * 2007-01-05 2011-06-28 Dialogic Corporation Universal multimedia engine and method for producing the same
CN101382884B (zh) * 2007-09-07 2010-05-19 上海奇码数字信息有限公司 指令编码方法、指令编码系统及数字信号处理器
JP4526560B2 (ja) * 2007-12-05 2010-08-18 日本テキサス・インスツルメンツ株式会社 プロセッサおよび信号処理方法
WO2010096119A1 (en) * 2008-10-29 2010-08-26 Adapteva Incorporated Variable instruction width digital signal processor
JP5437878B2 (ja) * 2010-03-29 2014-03-12 ルネサスエレクトロニクス株式会社 情報処理装置
US8738860B1 (en) * 2010-10-25 2014-05-27 Tilera Corporation Computing in parallel processing environments
CN104011645B (zh) * 2011-12-22 2018-06-26 英特尔公司 用于产生其中在连续位置中的整数相差恒定整数跨度且最小整数从零偏移整数偏移量的整数序列的处理器、方法、系统和含有指令的介质
US9292291B2 (en) * 2012-03-28 2016-03-22 International Business Machines Corporation Instruction merging optimization
US20150324199A1 (en) * 2012-07-06 2015-11-12 Koninklijke Philips N.V. Computer processor and system without an arithmetic and logic unit
US9411589B2 (en) 2012-12-11 2016-08-09 International Business Machines Corporation Branch-free condition evaluation
US20150178078A1 (en) * 2013-12-21 2015-06-25 H. Peter Anvin Instructions and logic to provide base register swap status verification functionality
US9250900B1 (en) 2014-10-01 2016-02-02 Cadence Design Systems, Inc. Method, system, and computer program product for implementing a microprocessor with a customizable register file bypass network
US10620957B2 (en) * 2015-10-22 2020-04-14 Texas Instruments Incorporated Method for forming constant extensions in the same execute packet in a VLIW processor
US10331449B2 (en) * 2016-01-22 2019-06-25 Arm Limited Encoding instructions identifying first and second architectural register numbers
US10157164B2 (en) * 2016-09-20 2018-12-18 Qualcomm Incorporated Hierarchical synthesis of computer machine instructions
WO2020192587A1 (zh) * 2019-03-22 2020-10-01 中科寒武纪科技股份有限公司 人工智能计算装置及相关产品

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5051885A (en) 1988-10-07 1991-09-24 Hewlett-Packard Company Data processing system for concurrent dispatch of instructions to multiple functional units
EP0374419A3 (en) 1988-12-21 1991-04-10 International Business Machines Corporation Method and apparatus for efficient loop constructs in hardware and microcode
US5155820A (en) 1989-02-21 1992-10-13 Gibson Glenn A Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits
US5493687A (en) 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
JP2683488B2 (ja) 1992-06-30 1997-11-26 インターナショナル・ビジネス・マシーンズ・コーポレイション 3−1論理演算装置
JP3532975B2 (ja) * 1993-09-27 2004-05-31 株式会社ルネサステクノロジ マイクロコンピュータおよびそれを用いて命令を実行する方法
DE69424626T2 (de) 1993-11-23 2001-01-25 Hewlett Packard Co Parallele Datenverarbeitung in einem Einzelprozessor
EP0660223B1 (en) 1993-11-30 2001-10-04 Texas Instruments Incorporated Three input arithmetic logic unit with barrel rotator
US5581717A (en) 1994-03-01 1996-12-03 Intel Corporation Decoding circuit and method providing immediate data for a micro-operation issued from a decoder
US5655132A (en) 1994-08-08 1997-08-05 Rockwell International Corporation Register file with multi-tasking support
JP3630804B2 (ja) * 1995-11-30 2005-03-23 三洋電機株式会社 データ処理装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100864890B1 (ko) * 2001-05-21 2008-10-22 에이알엠 리미티드 데이터 처리장치에서의 소스 레지스터 록킹
WO2016064131A1 (ko) * 2014-10-20 2016-04-28 삼성전자 주식회사 데이터 처리 방법 및 장치
US10915323B2 (en) 2014-10-20 2021-02-09 Samsung Electronics Co., Ltd. Method and device for processing an instruction having multi-instruction data including configurably concatenating portions of an immediate operand from two of the instructions

Also Published As

Publication number Publication date
EP1129402A1 (en) 2001-09-05
CN1204490C (zh) 2005-06-01
KR100412920B1 (ko) 2003-12-31
JP2006185462A (ja) 2006-07-13
JP3795757B2 (ja) 2006-07-12
TW452693B (en) 2001-09-01
WO2000029938A1 (en) 2000-05-25
AU1346500A (en) 2000-06-05
CN1348560A (zh) 2002-05-08
JP2003521753A (ja) 2003-07-15
US6282633B1 (en) 2001-08-28

Similar Documents

Publication Publication Date Title
KR100412920B1 (ko) 데이터 밀도가 높은 risc 프로세서
KR100513358B1 (ko) Risc형명령세트및슈퍼스칼라마이크로프로세서
US5794063A (en) Instruction decoder including emulation using indirect specifiers
EP0427245B1 (en) Data processor capable of simultaneously executing two instructions
US5481751A (en) Apparatus and method for storing partially-decoded instructions in the instruction cache of a CPU having multiple execution units
JP3173793B2 (ja) 多重命令セットによるデータ処理装置及びデータ処理方法
US7475222B2 (en) Multi-threaded processor having compound instruction and operation formats
WO2003065165A2 (en) Configurable data processor with multi-length instruction set architecture
US5969975A (en) Data processing apparatus registers
JP3670668B2 (ja) データ処理装置
US5881259A (en) Input operand size and hi/low word selection control in data processing systems
Pan et al. Heads and tails: a variable-length instruction format supporting parallel fetch and decode
Gwennap MAJC gives VLIW a new twist
EP0853783A1 (en) Instruction decoder including two-way emulation code branching
JP2001504956A (ja) データ処理システム・レジスタ制御
Wallace et al. Performance issues of a superscalar microprocessor
Song Demystifying epic and ia-64
EP0853782B1 (en) Instruction decoder including emulation using indirect specifiers
McMahan et al. 6/spl times/86: the Cyrix solution to executing/spl times/86 binaries on a high performance microprocessor
Agrawal et al. SPARC: An ASIC Solution for High-Performance Microprocessors
Dandamudi Processor Design Issues
Hewlett-Packard et al. D. 1 Introduction
Mathew 1.2 Very Large Instruction Word Architectures
Lewis et al. DISE: Implementing Application Meta-Features via Software-Programmable Decoding
WO1998006040A1 (en) Architectural support for software pipelining of nested loops

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121127

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20131125

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20141125

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20151125

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20161128

Year of fee payment: 14

LAPS Lapse due to unpaid annual fee