KR20100017744A - 콤팩트 명령 세트 인코딩 - Google Patents

콤팩트 명령 세트 인코딩 Download PDF

Info

Publication number
KR20100017744A
KR20100017744A KR1020097025743A KR20097025743A KR20100017744A KR 20100017744 A KR20100017744 A KR 20100017744A KR 1020097025743 A KR1020097025743 A KR 1020097025743A KR 20097025743 A KR20097025743 A KR 20097025743A KR 20100017744 A KR20100017744 A KR 20100017744A
Authority
KR
South Korea
Prior art keywords
operand
bits
bit
decoding
opcode
Prior art date
Application number
KR1020097025743A
Other languages
English (en)
Other versions
KR101528614B1 (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 KR20100017744A publication Critical patent/KR20100017744A/ko
Application granted granted Critical
Publication of KR101528614B1 publication Critical patent/KR101528614B1/ko

Links

Images

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
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 발명은 프로세서에서 명령들을 디코딩하는 디코딩 유닛을 제공한다. 디코딩 유닛은 오피코드 디코딩 로직과, 오퍼랜드 디코딩 로직과, 그리고 16 비트의 입력을 포함한다. 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가진다. 상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능하다.

Description

콤팩트 명령 세트 인코딩{COMPACT INSTRUCTION SET ENCODING}
본 발명은 프로세서에 대한 명령들을 인코딩하는 것에 관한 것으로, 특히 인터페이스하는 애플리케이션에 적합한 명령 포맷 및 복수의 명령 쓰레드들의 관리에 관한 것이지만 반드시 여기에만 한정되는 것은 아니다.
프로세서 명령은 두 부분, 즉 오피코드 부분(opcode portion)과 오퍼랜드 부분(operand portion)으로 구성되는 것으로 고려될 수 있다. 오피코드 부분의 오피코드는 명령의 타입을 정의하고, 그리고 프로세서의 실행 유닛에 의해 디코딩될 때 프로세서가 대응하는 동작(덧셈, 뺄셈, I/O 등)을 수행하게 한다. 오퍼랜드 부분은 하나 또는 그 이상의 오퍼랜드 특정자(operand specifier)들을 포함한다. 이러한 오퍼랜드 특정자들은, 오피코드에 의해 정의된 명령이, 만약 있다면, 프로세서의 오퍼랜드 레지스터들 중 어느 것에 관해 동작해야하는 지를 특정한다. 대안적으로 혹은 추가적으로, 오퍼랜드 부분은 "즉시(immediate)" 오퍼랜드, 즉 특정 레지스터로부터 취해진다기보다는 명령의 오퍼랜드 부분에 직접 포함된 오퍼랜드를 포함할 수 있다. 만약 명령이 어떠한 오퍼랜드도 포함하지 않는다면, 오퍼랜드 부분은 사용되지 않거나, 혹은 추가적인 오피코드를 인코딩하는데 사용될 확률이 높다.
전형적으로 명령이 사전에 결정된 크기 혹은 포맷을 가진다면, 이것은 프로 세서 설계시 오피코드의 크기와 오퍼랜드 부분의 크기 간에 상충관계가 존재함을 의미한다.
작은 오피코드가 사용되는 경우, 오피코드 비트들의 제한된 순열로 인해 단지 제한된 세트의 명령들만이 인코딩될 수 있다. 이러한 명령 세트들은 일반적으로, 프로세서의 기본적인 동작을 수행하기 위한, 단지 간단한 저레벨의 머신 코드를 포함한다. 이로 인해, 명령 데이터 단위 당 더 적은 개수의 동작들이 저장될 수 있다는 점에서, 코드 밀도는 낮아지는데, 왜냐하면 복잡한 명령들은 더 낮은 레벨의 명령들의 전체 시퀀스들로서 소프트웨어에서 정의되야 하기 때문이다. 일부 흔하지 않는 프로세서들에서, 작은 오피코드들은 작은 개수의 더 복잡한 명령들을 인코딩하는데 사용될 수 있고, 그럼으로써 복잡한 명령들이 하드웨어에서 구현되고, 그리고 전용 명령에 의해 호출된다. 그러나, 제한된 개수의 오피코드가 가용함으로 인해 프로세서는 단지 매우 전문화된 세트의 가능한 동작들만을 가질 수 있다. 어떤 경우에, 작은 오피코드들은 명령 세트 크기를 제한하고, 그래서 프로세서를 제한한다. 그러나, 더 많은 비트들이 오퍼랜드들에 대한 명령에서 이용가능할 수 있다는 점에서, 작은 오피코드들을 사용하는 것은 또한 이점이 있다.
큰 오피코드가 사용될 때, 더 다양한 타입의 명령이 오피코드 비트들의 더 많은 개수의 순열로 인해 인코딩될 수 있다. 따라서, 더 다양한 명령 타입이 프로세서 설계자에게 가용하게 된다. 그러나, 단점은 더 적은 비트들이 오퍼랜드들에 대한 명령에서 이용가능하게 된다는 것이다.
따라서, 어는 정도의 오피코드 크기가 오퍼랜드 부분의 크기와 균형을 이루 어야 하는지 알 수 있다.
예를 들어, 도 1은 16 비트(i[15:0])를 갖는 종래의 명령 포맷을 나타낸다. 16개의 명령 비트는 각각 명령 레지스터(50)로부터 실행 유닛의 디코딩 로직으로 입력된다. 디코딩 로직은 명령의 4 비트 오피코드 부분(12)을 디코딩하는 오피코드 디코딩 로직(70)과, 명령의 각각의 오퍼랜드 부분(104, 106, 및 108)으로부터 3개의 4 비트 오퍼랜드 특정자들을 결정하는 오퍼랜드 디코딩 로직(80)을 포함한다. 이러한 포맷에 따르면, 소스 오퍼랜드를 판독하거나 목적지 오퍼랜드를 저장하도록 16개의 오퍼랜드 레지스터들의 세트 중 어느 하나를 특정하기 위해, 3개의 오퍼랜드 특정자들은 각각은 영(0000)에서 15(1111)까지의 값을 취할 수 있다.
이러한 종래의 16 비트 스타일의 명령들이 가진 문제는, 16개의 가능한 오퍼랜드 레지스터들 및 3개의 오퍼랜드 특정자들(104, 106, 및 108)을 갖는 경우, 각각의 명령의 12 비트(i[11 :0])가 오퍼랜드 특정자들로 채워진다는 것이다. 이것은 명령 오피코드(102)에 대해 단지 4 비트(i[15:12])만을 남겨두어, 단지 서로 다른 16개의 명령들만이 인코딩될 수 있게 한다. 이러한 것을 극복하기 위한 기존 기술로는, 제한된 오퍼랜드 특정자(예를 들어, 단지 3비트만을 사용하는 ARM 썸(Thumb))을 제공하는 것 혹은 대부분의 명령에 단지 2개의 레지스터 오퍼랜드만을 제공하는 것이 있다. 다른 해법으로는 16 비트 명령 포맷을 벗어나는 것이 있다. 그러나, 이것은 명령 크기가 다수의 비트들로 상황에 맞게 표현되지 않거나 혹은 불필요하게 큰 24 비트 혹은 32 비트 명령을 요구하다는 점에서 자체적인 문제를 가지고 있다.
또한, 명령 세트 복잡도는 프로세서의 속도에 영향을 미칠 수 있다. 큰 명령 세트 프로세서는 때때로 작은 명령 세트 프로세서들보다 더 빠를 수 있는데, 왜냐하면 복잡한 동작을 실행하기 위한 코드가 더 적게 요구되기 때문이다. 그러나, 실행 유닛의 속도는 가장 복잡한 명령을 디코딩하는 시간에 의해 제한된다. 따라서, 더 큰 명령 세트 프로세서는, 만약 이러한 세트 내에 너무 많은 과잉 명령, 사용되지 않는 명령, 혹은 불필요하게 복잡한 명령이 존재한다면, 실제로 더 느려질 수 있다.
또한, 큰 명령 세트와 비교하여, 작은 명령 세트는, 비록 작은 세트들이 전형적으로 더 많은 프로그램 메모리를 요구하고 더 많은 오퍼랜드 레지스터를 사용할지라도, 오피코드를 디코딩하고 실행하기 위해 실행 유닛 내에서 더 적은 하드웨어 로직을 요구한다. 따라서, 명령 세트의 크기는, 특정 명령 포맷과 함께 요구되는 오퍼랜드 레지스터, 디코딩 로직 및 프로그램 메모리에 따라, 비용, 전력 소비, 및 프로세서의 실리콘 영역과 관계를 가질 수 있다.
본 발명의 목적은, 명령의 오피코드의 크기와 그 명령의 오퍼랜드 부분의 크기 간의 바람직한 균형을 찾는 것이고, 아울러 오피코드들을 효율적으로 소정의 명령 길이에 압축시킬 수 있고 동시에 빠른 디코딩이 가능한 인코딩 방식을 사용하여 이것을 달성하는 것이다. 본 발명의 또 다른 목적은 외부 디바이스들과의 인터페이스를 위한 프로세서에서의 사용에 대해 장점을 갖는 균형을 찾는 것이다. 본 발명의 또 다른 목적은 복수의 쓰레드들의 실행을 관리하기 위한 프로세서에서의 사용에 대해 장점을 갖는 균형을 찾는 것이다.
본 발명의 일 실시형태에 따르면, 프로세서에서 명령들을 디코딩하는 디코딩 유닛(decode unit)이 제공되고, 상기 디코딩 유닛은 오피코드 디코딩 로직(opcode decoding logic)과, 오퍼랜드 디코딩 로직(operand decoding logic)과, 그리고 16 비트의 입력을 포함하며, 여기서 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소(operand element)들을 결정하도록 동작가능하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값(binary value)들 중 하나를 가지며, 상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 아울러 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹(verbatim group)을 축어적으로 판독하도록 동작가능하다.
본 발명자가 알아낸 것은, 설명된 인코딩 부분과 축어적 부분을 사용하여 이렇게 5비트/11 비트로 분할하는 것이 인터페이스 프로세서에서의 사용에 있어 뛰어난 코드 밀도를 제공하고, 또한 복수의 쓰레드들을 처리하는 프로세서들에 있어 뛰어난 코드 밀도를 제공한다는 것이다. 또한, 장점으로서, 본 발명은 디코딩하기에 빠르고 효율적인 명령 포맷을 사용하여 상대적으로 큰 명령 세트가 16 비트로 압축될 수 있게 할 수 있다. 더욱이, 아래 설명되는 바와 같은 실시예들은 개선된 코드 밀도 및 디코딩 효율을 제공한다.
실시예에서, 인코딩 부분은 5 비트일 수 있고, 축어적 부분은 6 비트일 수 있고, 각각의 오퍼랜드 요소의 제 1 부분은 2 비트일 수 있고, 그리고 각각의 오퍼랜드 요소의 제 2 부분은 2 비트일 수 있다.
상기 디코딩 유닛은 상기 11 비트 중 적어도 하나의 비트를 상기 오퍼랜드 디코딩 로직으로부터 상기 오피코드 디코딩 로직으로 전환시키도록 동작가능한 스위칭 로직(switching logic)을 포함할 수 있으며, 여기서 상기 오피코드 디코딩 로직은 상기 5 비트 및 상기 전환된 적어도 하나의 비트를 사용하여 오피코드를 결정하도록 동작가능할 수 있다. 상기 오퍼랜드 디코딩 로직은 상기 11 비트 중 잔존하는 비트로부터 적어도 하나의 오퍼랜드를 결정하도록 동작가능할 수 있다. 상기 스위칭 로직은, 상기 11 비트가 상기 3개의 4 비트 오퍼랜드 요소들을 인코딩하는데 사용되지 않은 값을 가지는 경우에, 상기 적어도 하나의 비트를 전환시키도록 구성될 수 있다. 상기 스위칭 로직은, 상기 5 비트가 사전에 결정된 값 혹은 사전에 결정된 범위의 값들을 가지는 경우에 상기 적어도 하나의 비트를 전환시키도록 구성될 수 있다.
상기 입력은 16 비트 명령 레지스터를 포함할 수 있다. 상기 디코딩 유닛의 입력은 64 비트 명령 버퍼로부터 명령들을 수신하도록 구성될 수 있다.
상기 오퍼랜드 요소들 중 적어도 하나는 12개의 오퍼랜드 레지스터들의 세트 중 어느 하나로부터 오퍼랜드 레지스터를 특정하는 오퍼랜드 특정자(operand specifier)일 수 있다. 상기 3개의 오퍼랜드 요소들 각각은 상기 세트 중 어느 하나로부터 오퍼랜드 레지스터를 각각 특정하는 각각의 오퍼랜드 특정자를 포함할 수 있다. 상기 3개의 오퍼랜드 요소들은, 하나의 즉시 오퍼랜드(immediate operand)와, 그리고 상기 세트로 중 어느 하나로부터 두 개의 오퍼랜드 레지스터들을 각각 특정하는 두 개의 오퍼랜드 특정자들을 포함할 수 있다. 3개의 오퍼랜드들은 3개의 소스 오퍼랜드들을 포함할 수 있다.
상기 3개의 오퍼랜드 요소들은, 2개의 소스 오퍼랜드 요소들과, 그리고 1개의 목적지 오퍼랜드 특정자를 포함하고, 여기서 상기 2개의 소스 오퍼랜드 요소들 각각은 즉시 소스 오퍼랜드(immediate source operand) 이거나 혹은 상기 세트 중 어느 하나로부터 각각의 소스 오퍼랜드 레지스터를 특정하는 소스 오퍼랜드 특정자이고, 상기 1개의 목적지 오퍼랜드 특정자는 상기 세트 중 어느 하나로부터 목적지 오퍼랜드 레지스터를 특정하며, 그리고 상기 디코딩 유닛은, 상기 소스 오퍼랜드들에 관한 동작을 수행하고 상기 동작의 결과를 상기 목적지 오퍼랜드 레지스터에 저장하는 것을 포함하는 오피코드에 따라 대응하는 명령을 실행하도록 동작가능할 수 있다.
상기 스위칭 로직은 상기 11 비트 중 하나의 비트를 상기 오퍼랜드 디코딩 로직으로부터 상기 오피코드 디코딩 로직으로 전환시키도록 동작가능할 수 있고, 상기 오피코드 디코딩 로직은 상기 5 비트와 상기 전환된 하나의 비트를 사용하여 오피코드를 결정하도록 동작가능할 수 있고, 그리고 상기 오퍼랜드 디코딩 로직은 잔존하는 10 비트로부터 2개의 4 비트 오퍼랜드 특정자들을 결정하도록 동작가능할 수 있고, 각각의 4 비트 오퍼랜드 특정자는 12개의 오퍼랜드 레지스터들의 상기 세트 중 어느 하나로부터 오퍼랜드 레지스터를 특정하기 위해 12개의 가능한 바이너리 값들 중 하나를 가지며, 그리고 상기 오퍼랜드 디코딩 로직은 상기 2개의 오퍼랜드 특정자들 각각의 제 1 부분을 결정하기 위해 상기 10 비트의 인코딩된 그룹을 디코딩하도록 동작가능할 수 있고, 아울러 상기 두 개의 오퍼랜드 특정자들 각각의 제 2 부분을 결정하기 위해 상기 10 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능할 수 있다.
상기 디코딩 유닛은 복수의 쓰레드들을 실행하도록 구성될 수 있으며, 각각의 쓰레드는 명령들의 시퀀스를 포함할 수 있고, 그리고 상기 디코딩된 명령들 중 적어도 하나의 명령은 상기 시퀀스들 중 하나의 구성요소일 수 있다. 상기 적어도 하나의 명령은 상기 복수의 쓰레드들 중 하나 또는 그 이상의 스케쥴링을 관리하기 위한 쓰레드 스케쥴링 명령일 수 있다. 상기 프로세서는 12개의 오퍼랜드 레지스터들의 복수의 세트들을 포함할 수 있고, 각각의 세트는 상기 쓰레드들 중 각각의 하나에 관한 오퍼랜드들을 저장하도록 구성될 수 있다.
상기 명령들 중 적어도 하나는, 이벤트와 관련된 조건을 설정하기 위한 이벤트 조건 설정 명령, 이벤트 조건과 관련된 데이터를 설정하기 위한 조건 데이터 설정 명령, 이벤트와 관련된 연속 포인트 벡터를 설정하기 위한 벡터 설정 명령, 이벤트를 발생시키도록 이벤트 소스를 인에이블시키기 위한 소스 이벤트 인에이블 명령, 및 이벤트들에 반응하도록 쓰레드를 인에이블시키기 위한 쓰레드 이벤트 인에이블 명령 중 하나일 수 있다.
상기 디코딩 유닛은 전치 명령(prefix instruction)의 오퍼랜드를 순차적으로 실행되는 명령의 오퍼랜드와 연결시키도록 동작가능할 수 있다.
실행 유닛이, 2개의 각각의 16 비트 명령들을 병렬로 동시에 실행하도록 구성된 적어도 2개의 병렬 파이프라인들을 포함할 수 있고, 각각의 파이프라인은 앞서 설명된 것들 중 어느 하나를 따르는 디코딩 유닛을 포함할 수 있다. 상기 실행 유닛은 듀얼 발행 모드(dual issue mode) 및 단일 발행 모드(single issue mode)에서 동작가능하고, 상기 듀얼 발행 모드에서는, 상기 2개의 파이프라인들은 2개의 각각의 명령들을 병렬로 동시에 실행하고, 그리고 상기 단일 발행 모드에서는, 상기 파이프라인들 중 단지 하나만이 임의의 소정 시간에 명령을 실행한다. 상기 2개의 파이프라인들은 32 비트 명령을 실행하도록 함께 동작가능할 수 있다.
프로세서가 앞서 설명된 것들 중 어느 하나를 따르는 디코딩 유닛 혹은 실행 유닛을 포함할 수 있고, 그리고 상기 프로세서는 12개의 오퍼랜드 레지스터들의 복수의 세트들을 포함할 수 있으며, 각각의 세트는 상기 쓰레드들 중 각각의 하나에 관한 오퍼랜드들을 저장하도록 구성될 수 있다.
상기 프로세서는 제 1 외부 디바이스와 제 2 외부 디바이스 간의 인터페이스를 위한 인터페이스 프로세서일 수 있다. 상기 제 1 외부 디바이스는 또 다른 프로세서일 수 있고, 그리고 상기 제 2 외부 디바이스는 주변 장치일 수 있다. 상기 제 1 외부 디바이스와 상기 제 2 외부 디바이스 양쪽 모두는 다른 프로세서들일 수 있다.
상기 명령들 중 적어도 하나는, 상기 외부 디바이스들 중 하나로부터 상기 인터페이스 프로세서에 데이터를 입력하기 위한 입력 명령과, 그리고 상기 인터페이스 프로세서로부터 상기 외부 디바이스들 중 하나에 데이터를 출력하기 위한 출력 명령 중 하나일 수 있다.
본 발명의 또 다른 실시형태에 따르면, 오피코드 디코딩 로직, 오퍼랜드 디코딩 로직, 및 16 비트의 입력을 포함하는 디코딩 유닛을 사용하여 프로세서에서 명령들을 디코딩하는 방법이 제공되고, 상기 방법은, 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 상기 오피코드 디코딩 로직를 동작시키는 단계와; 그리고 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 상기 오퍼랜드 디코딩 로직을 동작시키는 단계를 포함하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지며, 상기 3개의 오퍼랜드 요소들을 결정하는 것은, 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하는 것과, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하는 것을 포함한다.
본 발명의 또 다른 실시형태에 따르면, 모바일 애플리케이션 프로세서, 적어도 하나의 주변 장치, 그리고 상기 모바일 애플리케이션 프로세서와 상기 주변 장치 사이에 연결된 인터페이스 프로세서를 구비하는 모바일 단말기가 제공되고, 상기 인터페이스 프로세서는 프로세서에서 명령들을 디코딩하는 디코딩 유닛을 가지며, 상기 디코딩 유닛은 오피코드 디코딩 로직과, 오퍼랜드 디코딩 로직과, 그리고 16 비트의 입력을 포함하고, 여기서 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지며, 상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능하다.
본 발명의 또 다른 실시형태에 따르면, 상호연결된 프로세서들의 어레이가 제공되고, 상기 프로세서들 중 적어도 하나는 프로세서에서 명령들을 디코딩하는 디코딩 유닛을 가지며, 상기 디코딩 유닛은 오피코드 디코딩 로직과, 오퍼랜드 디코딩 로직과, 그리고 16 비트의 입력을 포함하고, 여기서, 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지며, 상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능하다.
본 발명의 또 다른 실시형태에 따르면, 명령들을 디코딩하는 디코딩 유닛을 포함하는 프로세서가 제공되고, 상기 디코딩 유닛은 오피코드 디코딩 로직과, 오퍼랜드 디코딩 로직과, 그리고 16 비트의 입력을 포함하며, 여기서, 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하며, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지고, 상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능하다.
본 발명의 또 다른 실시형태에 따르면, 프로세서에서 명령들을 디코딩하는 디코딩 유닛이 제공되고, 상기 디코딩 유닛은 16 비트의 입력 수단과, 상기 입력 중 5 비트를 사용하여 오피코드를 결정하는 오피코드 디코딩 수단과, 그리고 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하는 오퍼랜드 디코딩 수단을 포함하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지고, 상기 오퍼랜드 디코딩 수단은, 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독한다.
본 발명이 더 잘 이해되도록 하기 위해, 그리고 본 발명이 어떻게 수행될 수 있는지를 보여 주기 위해, 대응하는 도면을 참조하여 이제 예시적으로 본 발명이 설명된다.
도 1은 종래의 RISC 명령 포맷을 나타낸다.
도 2는 인터페이스 프로세서의 예시적 애플리케이션을 나타낸다.
도 2A는 인터페이스 프로세서의 또 다른 예시적 애플리케이션을 나타낸다.
도 3은 예시적 프로세서의 아키텍처를 나타낸다.
도 4는 이러한 프로세서 대한 예시적 레지스터 아키텍처를 나타낸다.
도 5는 제1의 예시적 명령 포맷을 나타낸다.
도 6은 제2의 예시적 명령 포맷을 나타낸다.
도 7는 제3의 예시적 명령 포맷을 나타낸다.
도 8은 제4의 예시적 명령 포맷을 나타낸다.
도 9는 듀얼 명령 발행 특징의 예를 나타낸다.
본 발명이 유용하게 사용될 수 있는 애플리케이션의 예로서, 도 2는 모바일 전화기의 모바일 애플리케이션 프로세서(2)와 함께 사용되는 인터페이스 프로세서(14)를 나타낸다. 모바일 애플리케이션 프로세서(2)는 복수의 주변 장치들(8)과 통신할 필요가 있다. 애플리케이션 프로세서(2)는 CPU(4)와, 그리고 복수의 주변 장치들(8c-8l)과 통신할 필요가 있는 복수의 포트들(7)을 포함한다. 모바일 애플리케이션 프로세서(2)는 또한 하드 드라이브(HDD)(8a) 및 SDRAM 메모리(8b)와 인터페이스하는 메모리 제어기(6)를 포함한다. 인터페이스 제어기(6) 및 포트들(7)은 전형적으로 버스(3)를 통해 CPU(4)에 연결된다. 시스템은 또한 파워 제어기(power controller)(10) 및 무선 제어기(radio processor)(12)를 포함한다.
이러한 예에서, 범용 포트(7a 및 7b)가 카메라(8c) 및 LCD 디스플레이(8d)와의 인터페이스를 위해 제공되고, 범용 포트(7c)가 마이크로폰(8e), 스피커(8f), 및 헤드셋(8g)과의 인터페이스를 위해 제공되고, 그리고 범용 포트(7d)가 키보드(8h), 범용 직렬 버스(Universal Serial Bus, USB) 디바이스(8i), SD(Secure Digital) 카드(8j), MMC(Multi-Media Card)(8k), 및 범용 비동기 수신기/송신기(Universal Asynchronous Receiver/Transmitter, UART) 디바이스(81)와의 인터페이스를 위해 제공된다.
도 2에서, 인터페이스 프로세서(14a, 14b 및 14c)는 관련 포트들(7)의 출력에 놓일 수 있고, 이 경우 제 1 인터페이스 프로세서(14a)는 이미지 디바이스들(8c-8d)과 포트들(7a-7b) 사이에 연결되고, 제 2 인터페이스 프로세서(14b)는 오디오 디바이스들(8e-8g)과 포트들(7c) 사이에 연결되고, 그리고 제 3 인터페이스 프로세서(14b)는 포트들(7d)과 다양한 접속 디바이스들(8h-8m) 사이에 연결된다. 포트들(7)은 단지 범용의 포트일 필요가 있는데, 왜냐하면 애플리케이션 특정 디스플레이, 오디오 및 접속 기능이 이후 설명되는 방식으로 인터페이스 프로세서(14a-14c)에 의해 구현되기 때문이다. 인터페이스 프로세서(14a)는 포트들(7a 및 7b)에 연결되는 포트들(22a 및 22b)를 가지고, 그리고 외부 디바이스(8c 및 8g)에 연결되는 포트들(22c, 22d, 22e 및 22f)을 갖는다. 인터페이스 프로세서들(14b 및 14c)은 도 2에 도시되지 않은 유사한 포트들을 갖는다.
인터페이스 프로세서들은 전형적으로, 인터페이스를 통해 데이터를 전달하기 위해 사용되는 특정 프로토콜을 구현하고, 데이터를 다시 포맷팅(이것은 데이터를 병렬 포맷과 직렬 포맷 간에 변환하는 것을 포함함)하고, 그리고 가능하게는 더 높은 레벨의 기능, 예를 들어, 데이터를 인코딩하는것, 데이터를 압축하는 것, 혹은 데이터를 암호화하는 것을 수행한다.
인터페이스 프로세서의 또 다른 애플리케이션은 도 2A에 도시된 멀티프로세서 칩(202)에서의 타일(tile)로서 존재한다. 이러한 칩(202)은, 칩(202) 상의 프로세서들(14) 간의 통신을 지원하는 고성능 상호접속(204)과, 그리고 시스템들이 복수의 칩들로부터 쉽게 구성될 수 있도록 하는 인터칩 링크(inter-chip links)(206)를 사용한다. 각각의 프로세서(14)는 포트들(22)을 통해 인터칩 링크(206)와 고성능 상호접속(204)에 연결된다.
장점으로서, 인터페이스 프로세서들(14)은 본 발명에 따른 명령 포맷을 사용하는 바, 이는 또 다른 프로세서(2)와 하나 또는 그 이상의 주변 장치들(8) 간을 중재하거나 혹은 복수의 프로세서들 간을 중재하는데 사용되는 다양한 인터페이스 명령 및 입력-출력(I/O) 명령을 구현하는데 최적화되어 있다. 즉, 이러한 명령 포맷은 이러한 동작들을 수행하는 데 있어 과잉되지 않은 충분한 개수의 오피코드를 제공하고, 그리고 유사하게는 과잉되지 않은 충분한 개수의 오퍼랜드 혹은 오퍼랜드 레지스터들을 특정할 수 있다. 이러한 명령들은 또한 디코딩하기에 빠르고 효율적이며, 필요한 디코딩 로직을 감소시키고 빠른 인터페이스를 가능하게 한다.
본 발명의 명령 포맷이 수용하는 또 다른 장점적인 특징은 쓰레드들을 관리하는 능력이다. 각각의 프로세서는 다수의 동시 프로그램 쓰레드들을 실행하기 위 한 하드웨어 지원을 가지며, 동시 프로그램 쓰레드들 각각은 명령들의 시퀀스를 포함한다. 아래에서 더 완전히 설명되는 바와 같이, 하드웨어 지원은,
- 오퍼랜드 레지스터들을 포함하는 각각의 쓰레드를 위한 레지스터들의 세트와,
- 어떤 쓰레드를 실행할지를 동적으로 선택하는 쓰레드 스케쥴러와,
- 입력과 출력을 위해 사용되는 포트들의 세트(포트들(22))와,
- 레지스터들 간의 채널을 확립하기 위한 상호접속 시스템과,
- 실시간 실행을 제어하기 위한 타이머들의 세트와,
- 입력과 출력을 클럭킹하기 위한 클럭 발생기들의 세트를 포함한다.
본 발명의 명령 포맷은 또한, 적당한 명령 세트 및 오퍼랜드 레지스터로 하여금, 쓰레드들의 초기화, 종료, 시작, 및 정지를 지원할 수 있게 하고, 아울러 포트를 통해 입력 및 출력을 제공하고 그리고 채널을 통해 쓰레드 간 통신을 제공할 수 있게 한다.
각각의 프로세서 상에서 쓰레드들의 작은 세트의 사용은, 프로세서에 의해 처리되는 다른 계류중인 태스크들과 함께 통신 혹은 입력/출력이 진행할 수 있도록 사용될 수 있으며, 그리고 일부 쓰레드들이 계속될 수 있는 반면에 다른 쓰레드들은 원격 인터페이스 프로세서들로의 혹은 원격 인터페이스 프로세서로부터의 통신 중 정지됨으로써 상호접속에서의 대기시간 숨김(latency hiding)이 가능하도록 사용될 수 있다.
도 3은 본 발명의 일 실시예에 따른 인터페이스 프로세서(14)의 예시적인 아 키텍처를 도식적으로 나타낸다. 프로세서(14)는 쓰레드 스케쥴러(18)의 제어 하에서 명령들의 쓰레드들을 실행하는 실행 유닛(16)을 포함한다. RAM(Random Access Memory)(24)이 버스(13)를 통해 실행 유닛에 연결되어 프로그램 코드 및 다른 데이터를 보유한다. 프로세서(14)는 또한, 클럭 및 타이머(미도시), 그리고 부트 코드(boot code)와 같은 영구적 정보를 저장하기 위한 ROM(Read Only Memory)(역시 미도시)을 포함한다.
쓰레드 스케쥴러(18)에 의해 고려되는 m개의 쓰레드들 각각은, 쓰레드 스케쥴러(18)가 액세스하는 레지스터들의 뱅크(20)에서의 쓰레드 레지스터들(20i ... 20m)의 각각의 세트로 나타내진다. 명령 버퍼(Instruction buffers, INSTR)(19)가 또한, 메모리(24)로부터 페치(fetch)된 명령들을, 실행 유닛(16)에 후속적으로 발행되기 전에, 일시적으로 보유하기 위해 제공된다.
도 4는 쓰레드들에 관한 정보를 저장하는 데 사용되는 쓰레드 레지스터들(20)의 예시적 뱅크를 나타낸다. 뱅크(20)는 레지스터들의 복수의 세트를 포함하고, 각각의 세트는 쓰레드 스케쥴러(18)에 의해 현재 고려 중인 각각의 쓰레드(T1 내지 Tm)에 대응한다. 이렇게 바람직한 예에서, 각각의 쓰레드의 상태는 18개의 레지스터들(2개의 제어 레지스터, 4개의 액세스 레지스터, 12개의 오퍼랜드 레지스터)로 나타내진다. 이러한 것들은 다음과 같다.
제어 레지스터들:
- PC는 프로그램 카운터(Program Counter)
- SR은 상태 레지스터(Status Register)
액세스 레지스터들:
- GP는 글로벌 풀 포인터(Global pool Pointer)
- DP는 데이터 포인터(Data Pointer)
- SP는 스택 포인터(Stack Pointer)
- LR은 링크 레지스터(Link Register)
오퍼랜드 레지스터: OP1 ... OP12
제어 레지스터는 쓰레드의 상태에 관한 정보 및 쓰레드의 실행을 제어하는데 사용하기 위한 정보를 저장한다. 특히, 이벤트 혹은 인터럽트를 수용하는 쓰레드의 능력은 쓰레드 상태 레지스터(SR)에 보유된 정보에 의해 제어된다. 상태 레지스터(SR)는 또한, 아래에서 더 상세히 설명되는 바와 같이, 쓰레드가 단일 명령 모드에 있는지 혹은 듀얼 명령 모드에 있는지 여부에 관한 정보를 포함할 수 있다. 액세스 레지스터는 프로시져(procedure)들의 로컬 변수를 위해 사용되는 스택 포인터(stack pointer)와, 프로시져들 간에 공유된 데이터를 위해 보통 사용되는 데이터 포인터와, 그리고 커다란 상수 및 프로시져 엔트리 포인트(procedure entry point)들에 액세스하기 위해 사용되는 상수 풀 포인터(constant pool pointer)를 포함한다. 오퍼랜드 레지스터(OP1 ... OP12)는 산술 및 로직 동작을 수행하고, 데이터 구조에 액세스하고, 그리고 서브루틴을 호출하는 명령들에 의해 사용된다. 상호접속 시스템(42)은 오퍼랜드 레지스터들의 세트들 간에, 바람직하게는 한 세트의 오퍼랜드 레지스터로부터 다른 세트의 오퍼랜드 레지스터로, 데이터를 전달하기 위 한 하나 또는 그 이상의 채널을 제공한다.
다수의 명령 버퍼(INSTR)(19)가 또한 쓰레드의 실제 명령을 일시적으로 저장하기 위해 제공된다. 각각의 명령 버퍼의 길이는 바람직하게는 64 비트이고, 각각의 명령의 길이는 바람직하게는 16 비트가 되어, 버퍼 당 4개의 명령이 가능하다. 쓰레드 스케쥴러(18)의 제어 하에서, 프로그램 메모리(24)로부터 명령이 페치되고 그리고 명령 버퍼(19)에 일시적으로 놓인다.
실행 유닛은 레지스터들(20) 및 버퍼들(19) 각각에 액세스한다. 더욱이, 쓰레드 스케쥴러(18)는 적어도 각각의 쓰레드에 대한 상태 레지스터(SR)에 액세스한다.
쓰레드 스케쥴러(18)는, 실행 유닛(16)이 어떤 쓰레드를 실행시켜야 하는지를 동적으로 선택한다. 종래에, 쓰레드 스케쥴러의 기능은 단지 프로세서가 완전히 사용되도록 하기 위해 프로그램 메모리로부터 쓰레드들을 스케쥴링하는 것이다. 그러나, 본 발명에 따르면, 쓰레드 스케쥴러(18)에 의한 스케쥴링은 또한 포트들(22), 채널들, 클럭 및 타이머들의 동작과 관련되어 있다. 포트들, 채널들, 클럭들 및 타이머들은 본 명세서에서 일반적으로 "리소스(resources)"로 언급된다. 이러한 점에 있어서, 유의할 것으로, 쓰레드 스케쥴러는 다양한 리소스들(22)에 직접 연결될 수 있어, 해당 리소스에서의 동작의 결과로서 쓰레드가 실행가능하게 될 때 지연을 최소화시킬 수 있다.
m개의 쓰레드들 중에서, 쓰레드 스케쥴러(18)는 실행가능한 쓰레드들의 세트를 유지하고, 상기 세트는 "실행(run)"으로 명명되고, 이로부터, 교대로, 바람직하 게는 라운드 로빈 방식으로 명령을 취한다. 쓰레드가 계속될 수 없을 때, 실행 세트로부터 쓰레드를 제거함으로써, 쓰레드는 정지된다. 예를 들어, 그 이유는 쓰레드가, 하나 또는 그 이상의 다음과 같은 동작 타입을 기다리고 있기 때문일 수 있다.
- 쓰레드의 레지스터들은 쓰레드가 실행될 수 있기 이전에 초기화된다.
- 준비되지 않은 혹은 가용한 데이터를 가지지 않은 포트 혹은 채널로부터의 입력을 시도한다.
- 준비되지 않은 혹은 데이터를 위한 공간이 없는 포트 혹은 채널로의 출력을 시도한다.
- 일정 조건이 소정의 리소스에 대해 충족될 때 발생될 수 있는 하나 또는 그 이상의 이벤트를 쓰레드가 기다리도록 하는 명령을 실행한다.
입력 혹은 출력 명령이 쓰레드 내에서 발견되고 관련 포트 혹은 채널이 준비되지 않은 경우, 쓰레드 스케쥴러는 준비 신호가 포트 혹은 채널로부터 수신될 때까지 실행 세트로부터 쓰레드를 제거함으로써 쓰레드를 일시정지시킨다. 예를 들어, 포트 혹은 채널은 입력에 대해 준비가 된 데이터를 가지지 않을 수 있거나, 또는 포트 혹은 채널의 출력 버퍼가 가득 찰 수 있어 출력에 대해 가용하지 않을 수 있다. 포트 혹은 채널과 관련된 로직은, 해당 포트 혹은 채널이 준비되었는지 여부를 쓰레드 스케쥴러에 표시하기 위해 준비 플래그를 어써팅 혹은 디어써팅한다.
만약 포트 혹은 채널이, 입력 또는 채널 명령이 실행되기 이전에 준비된다면, 입력 또는 채널은 일시정지됨이 없이 완료된다.
쓰레드는 또한 이벤트를 처리하기 위해 리소스를 설정할 수 있다. 이를 위해, 쓰레드는, 실행되는 경우, 쓰레드 식별자, 연속 포인트 벡터 및 조건을 해당 리소스에 전송하는 명령들을 포함한다. 쓰레드 식별자는 이벤트가 어떤 쓰레드와 관련되어 있는지를 식별하고, 연속 포인트 벡터는 이벤트가 발생한 경우 실행이 계속되어야만 하는 코드 내의 포인트를 식별하고, 그리고 조건은 어떤 타입의 이벤트가 검출되야 하는 지를 정의한다. 추가로, 또 다른 명령이 선택에 따라서는 조건과 관련된 조건 데이터를 전송할 수 있다. 각각의 리소스는 쓰레드 식별자, 연속 포인트 벡터, 조건 및 조건 데이터를 저장하기 위한 관련 레지스터들을 가진다. 예를 들어, 만약 해당 리소스가 포트라면, 이벤트는 어떤 특정 데이터가 그 포트에서 수신되고 있는 것일 수 있다. 이러한 경우, 조건은 이벤트를 입력 이벤트인 것으로 정의하고, 조건 데이터는 검출될 특정 데이터를 특정하고, 그리고 연속 포인트 벡터는 해당 데이터를 처리하기에 적합한 어떤 코드의 시작을 특정한다. 만약 리소스가 타이머라면, 이벤트는 타이머가 일정 값에 도달한 것일 수 있고, 또는 만약 리소스가 클럭이라면, 이벤트는 일정 클럭 에지가 검출되는 것일 수 있다.
이벤트가 설정되면, 쓰레드는 대기 명령을 실행하고 이벤트가 발생할 때까지 실행 세트로부터 쓰레드를 제거함으로써, 정지된다. 각각의 리소스는 리소스에서 일어나는 동작과 조건을 비교하는 로직을 구비한다. 동작이 조건과 정합하는 경우, 로직은, 쓰레드 식별자를 쓰레드 스케쥴러에 반환하고, 연속 포인트 벡터를 실행 유닛에 반환하여 이벤트가 발생했음을 표시한다. 그 다음에 쓰레드는 실행 세트에 다시 도입됨으로써 재개된다.
만약 대기 명령이 실행되기 전에 조건이 충족된다면, 쓰레드는 정지됨이 없이 계속 진행한다.
또 다른 이벤트 처리 명령은, 이벤트들을 발생시키도록 리소스를 인에이블 및 디스에이블시키기 위한 명령, 이벤트들을 수용하도록 쓰레드를 인에이블 및 디스에이블시키 위한 명령, 리소스를 쓰레드에 할당하기 위한 명령, 및 할당된 리소스를 해제하기 위한 명령을 포함할 수 있다. 또 다른 쓰레드 처리 명령은, 다양한 쓰레드 레지스터들에 대한 판독 및 기입을 수행하기 위한 명령들을 포함할 수 있다.
I/O 및 이벤트들을 처리하기 위한 명령들에 추가하여, 본 발명에 따른 명령 세트는 또한 쓰레드들을 초기화시키기 위한 명령들을 요구할 뿐만 아니라, 산술 동작, 분기(branching), 인터럽트(interrupts), 제외(exceptions), 트랩(traps), 디버깅(debugging), 스택(stacks) 및 풀(pools) 처리, 등과 같은 종래의 명령 타입을 요구할 수 있다. 이러한 종래의 명령 타입은 본 발명의 기술분야에서 숙련된 자들에게 익숙하다.
다음은 앞서 설명된 레지스터가 12개인 아키텍처에 특히 적합한 명령 포맷을, 쓰레드 스케쥴링, I/O, 이벤트 처리, 및 앞서 설명된 바와 같은 프로세서를 동작시키기 위한 다른 명령들을 수용할 수 있는 명령 세트와 관련하여, 설명한다.
도 5는 본 발명에 따른 3개의 오퍼랜드 명령 포맷을 나타내고, 이것은 본 명세서에서 "포맷 Ⅰ"로 언급되며, 일부 관련된 디코딩 로직(72, 82, 84 및 90)의 개략적인 예가 함께 제공된다.
명령 포맷은 i[15:0]으로 명명되는 16 비트를 가진다. 명령 중 5 비트(i[15:11])는 오피코드(502)이고, 11 비트(i[10:0])는 오퍼랜드 부분이다. 오퍼랜드 부분(i[10:0])은 최대 3개의 오퍼랜드 특정자들을 포함할 수 있다. 3개의 4-비트 오퍼랜드 특정자들(x[3:0], y[3:0] 및 z[3:0])이 명령 중 11 비트 오퍼랜드 부분(i[10:0])에 인코딩된다. 예를 들어, y 및 z는 각각 소스 오퍼랜드 레지스터를 특정할 수 있고, 그리고 x는 목적지 오퍼랜드 레지스터를 특정할 수 있다.
각각의 오퍼랜드 특정자(x, y 및 z)의 2 비트는 다음과 같이 간단히 명령으로부터 "축어적(verbatim)"으로 판독된다. 이러한 축어적 2 비트 부분은 도 5에서 506, 508 및 510으로 명명된다.
x[1:0] = i[5:4]
y[1:0] = i[3:2]
z[1:0] = i[1:0]
각각의 오퍼랜드 특정자(x, y 및 z)의 다른 2 비트(전체 6 비트)는, 도 5에서 504로 명명되는 오퍼랜드 부분의 잔존하는 5 비트로부터 디코딩될 수 있다. 예시적 디코딩이 아래에 주어진다. 디코딩은 바람직하게는 하드웨어 로직에서 구현되지만, 원리적으로 알고리즘 혹은 룩-업 테이블로 구현될 수 있다.
오퍼랜드 특정자 비트(i[10:6]) 오퍼랜드 어드레스에 대한 디코딩
00000 x[3:2]=00, y[3:2]=00, z[3:2]=00
00001 x[3:2]=00, y[3:2]=00, z[3:2]=01
00010 x[3:2]=00, y[3:2]=00, z[3:2]=10
00011 x[3:2]=00, y[3:2]=01, z[3:2]=00
00100 x[3:2]=00, y[3:2]=01, z[3:2]=01
00101 x[3:2]=00, y[3:2]=01, z[3:2]=10
00110 x[3:2]=00, y[3:2]=10, z[3:2]=00
00111 x[3:2]=00, y[3:2]=10, z[3:2]=01
01000 x[3:2]=00, y[3:2]=10, z[3:2]=10
01001 x[3:2]=01, y[3:2]=00, z[3:2]=00
01010 x[3:2]=01, y[3:2]=00, z[3:2]=01
01011 x[3:2]=01, y[3:2]=00, z[3:2]=10
01100 x[3:2]=01, y[3:2]=01, z[3:2]=00
01101 x[3:2]=01, y[3:2]=01, z[3:2]=01
01110 x[3:2]=01, y[3:2]=01, z[3:2]=10
01111 x[3:2]=01, y[3:2]=10, z[3:2]=00
10000 x[3:2]=01, y[3:2]=10, z[3:2]=01
10001 x[3:2]=01, y[3:2]=10, z[3:2]=10
10010 x[3:2]=10, y[3:2]=00, z[3:2]=00
10011 x[3:2]=10, y[3:2]=00, z[3:2]=01
10100 x[3:2]=10, y[3:2]=00, z[3:2]=10
10101 x[3:2]=10, y[3:2]=01, z[3:2]=00
10110 x[3:2]=10, y[3:2]=01, z[3:2]=01
10111 x[3:2]=10, y[3:2]=01, z[3:2]=10
11000 x[3:2]=10, y[3:2]=10, z[3:2]=00
11001 x[3:2]=10, y[3:2]=10, z[3:2]=01
11010 x[3:2]=10, y[3:2]=10, z[3:2]=10
11011 Alt
11100 Alt
11101 Alt
11110 Alt
11111 Alt
따라서, 앞서의 방식을 사용하여, 오퍼랜드 특정자들(x[3:0], y[3:0] 및 z[3:0]) 각각은 0(0000)에서 11(1011)까지의 값을 취하여 다음과 같은 12개의 오퍼랜드 레지스터들 중 어느 하나를 각각 특정할 수 있다.
오퍼랜드 레지스터 어드레스
OP1 0000
OP2 0001
OP3 0010
OP4 0011
OP5 0100
OP6 0101
OP7 0110
OP8 0111
OP9 1000
OP10 1001
OP11 1010
OP12 1011
선택에 따라서는, 값들(x, y 및 z) 중 일부 혹은 모두는 즉시 오퍼랜드를 제공하기 위해 사용될 수도 있는데, 즉 오퍼랜드 자체가, 특정 레지스터로부터 검색되는 것이 아니라, 명령으로 직접 인코딩될 수 있다. 바람직한 포맷에서, 단지 하나의 오퍼랜드 특정자만이 허용되고, 옵션은 즉시 오퍼랜드로 대체되는 것이다. 이러한 특정자의 경우, 즉시 오퍼랜드는 0 내지 11의 범위에 있어야 한다. 값들(x, y 및 z)은 각각 일반적으로 본 명세서에서, 오퍼랜드 특정자 또는 즉시 오퍼랜드를 나타내기 위해, "오퍼랜드 요소(operand element)"로 언급될 수 있다.
디코딩 로직은 스위칭 로직(90), 오피코드 디코딩 로직(72), 및 오퍼랜드 디코딩 로직(82, 84)을 포함한다. 명령은 명령 레지스터(50)로부터 디코딩 로직에 의해 검색된다. 명령 레지스터(50)는 개별적인 16 비트 레지스터일 수 있고, 이곳에 명령 버퍼(19)로부터 명령이 페치되고 혹은 명령 레지스터는 명령 버퍼(19) 자체의 일부일 수 있다.
포맷 Ⅰ를 디코딩하기 위해, 스위칭 로직(90)은 비트(i[15:11])를 오피코드 디코딩 로직(72)에 공급하도록 동작가능하다. 스위칭 로직(90)은 인코딩된 오퍼랜드 비트(i[10:6])를 오퍼랜드 디코딩 로직의 디코딩 섹션(82)에 공급하고, 축어적 비트(i[5:0])를 오퍼랜드 디코딩 로직의 결합 섹션(84)에 직접 공급하도록 동작가능하다. 오퍼랜드 디코딩 로직의 디코딩 섹션(82)은 x[3:2], y[3:2], z[3:2]를 결정하기 위해 인코딩된 비트(i[10:6])를 디코딩하도록 동작가능하다. 오퍼랜드 디코딩 로직의 결합 섹션(84)은 x[3:2]을 x[1:0]과 결합시키고, y[3:2]을 y[1:0]과 결합시키고, 그리고 z[3:2]를 z[1:0]과 결합시키도록 동작가능하다. 오피코드 디코딩 로직(72)은, 특정된 오퍼랜드 레지스터들와, 그리고/또는 오피코드를 따르는 즉시 오퍼랜드들에 따라 동작하도록 동작가능하다.
쓰레드 당 단지 12개의 레지스터들만이 있기 때문에, 오퍼랜드 특정자들(x[3:0], y[3:0] 및 z[3:0]) 각각은 단지 0(0000)부터 11(1011)까지의 값만을 취할 필요가 있다. 이것이 의미하는 것은, 5 비트(i[10:6]), 즉 오퍼랜드 부분의 디코딩된 부분이 단지 0(00000) 내지 26(11010) 범위를 가질 수 있음을 의미한다. 이것은 27(11011) 내지 31(11111) 범위 내의 5개의 값을 남기게 되는데, 앞서 설명된 3개의 오퍼랜드 포맷에서 사용되지 않은 것으로 "Alt"로 표시되어 있다. 본 발명의 장점을 갖는 실시예에 따르면, 이러한 5개의 값들은 명령이 다른 포맷에 따라 디코딩되도록 하는데 사용될 수 있다.
예를 들어, 도 6은 본 발명에 따른 대안적인 2개의 오퍼랜드 명령 포맷을 나타내고, 이것은 본 명세서에서 "포맷 Ⅱ"로 언급된다. 이러한 특정적인 대안적 포맷에 있어 중요한 것으로, 스위칭 로직은, 5 비트 부분(i[10:6])이 27(11011) 내지 31(111111) 범위에 있는 것으로 인식하도록 구성된다. 이것은 스위칭 로직(90)으로 하여금 명령의 포맷이 포맷 Ⅱ인 것으로 인식하게 하고, 그리고 포맷 Ⅰ에 대한 대 안적인 방식으로, 비트들을 디코딩 로직에 제공하게 한다.
포맷 Ⅱ에 따르면, 비트(i[15:11]) 및 비트(i[4])는, 도 6에서 602로 명명된, 오피코드이다. 그래서 오퍼랜드에 대해 통상적으로 사용되는 비트 중 하나가 6 비트 오피코드를 생성하기 위해 대신 사용된다. 2개의 4 비트 오퍼랜드 특정자들(x[3:0] 및 y[3:0])이 비트(i[10:5] 및 i[3:0])로부터 디코딩된다. 각각의 오퍼랜드 특정자(x 및 y)로부터의 2 비트는 간단하게 다음과 같은 명령으로부터 축어적으로 판독된다. 이러한 축어적 2 비트 부분은 도 6에서 606 및 608로 명명된다.
x[1:0]=i[3:2]
y[1:0]=i[1:0]
각각의 오퍼랜드 특정자(x 및 y)의 다른 2 비트(총 4 비트)는, 도 6에서 604로 명명되는, 오퍼랜드 부분의 잔존하는 6 비트(i[10:5])로부터 디코딩되어야만 한다. 기억할 것으로, 포맷 Ⅱ에서 i[10:6]은 단지 27(11011)로부터 31(11111)까지의 값만을 취할 수 있기 때문에, 추가 비트(i[5])가 포함되는 경우 단지 10개 값만이 가능하게 된다. 예시적 디코딩은 아래와 같다.
오퍼랜드 특정자 비트(i[10:5]) 오퍼랜드 어드레스에 대한 디코딩
110110 x[3:2]=00, y[3:2]=00
111000 x[3:2]=00, y[3:2]=01
111010 x[3:2]=00, y[3:2]=10
111100 x[3:2]=01, y[3:2]=00
111110 x[3:2]=01, y[3:2]=01
110111 x[3:2]=01, y[3:2]=10
111001 x[3:2]=10, y[3:2]=00
111011 x[3:2]=1O, y[3:2]=01
111101 x[3:2]=10, y[3:2]=10
111111 Alt
따라서, 앞서의 방식을 사용하여, 오퍼랜드 특정자들(x[3:0] 및 y[3:0]) 각각은 0(0000) 내지 11(1011) 범위의 값을 취하여 앞서의 12개의 오퍼랜드 레지스터들 중 어느 하나를 각각 특정할 수 있다.
선택에 따라서는, 오퍼랜드 특정자들(x 및 y) 중 하나 혹은 양쪽 모두는 즉시 오퍼랜드로 대체될 수 있다. 바람직한 포맷에서, 단지 하나의 오퍼랜드 특정자만이 허용되고, 옵션은 즉시 오퍼랜드로 대체되는 것이다. 또한, 이러한 즉시 오퍼랜드는 0 내지 11의 범위에 있어야 한다.
포맷 Ⅱ를 디코딩하기 위해, 스위칭 로직(90)은 비트(i[15:11]) 및 비트(i[4])를 오피코드 디코딩 로직(72)에 공급하도록 동작가능하다. 스위칭 로직(90)은 또한 인코딩된 오퍼랜드 비트(i[10:6]) 및 비트(i[5])를 오퍼랜드 디코딩 로직의 디코딩 섹션(82)에 공급하고, 축어적 비트(i[3:0])를 오퍼랜드 디코딩 로직의 결합 섹션(84)에 직접 공급하도록 동작가능하다. 오퍼랜드 디코딩 로직의 디코딩 섹션(82)은 x[3:2], y[3:2], z[3:2]를 결정하기 위해 인코딩된 비트(i[10:6]) 및 비트(i[5])를 디코딩하도록 동작가능하다. 오퍼랜드 디코딩 로직의 결합 섹션(84)은 x[3:2]을 x[1:0]과 결합시키고, y[3:2]을 y[1:0]과 결합시키고, 그리고 z[3:2]를 z[1:0]과 결합시키도록 동작가능하다. 오피코드 디코딩 로직(72)은, 특정된 오퍼랜드 레지스터들과, 그리고/또는 오피코드를 따르는 즉시 오퍼랜드들에 따라 동작하도록 동작가능하다.
쓰레드 당 단지 12개의 레지스터들만이 있기 때문에, 오퍼랜드 특정자들(x[3:0] 및 y[3:0]) 각각은 단지 0(0000)부터 11(1011)까지의 값만을 취할 필요가 있다. 이것이 의미하는 것은, 6 비트(i[10:5]), 즉 오퍼랜드 부분의 디코딩된 부분이 포맷 Ⅱ에서 앞서 "Alt"로 표시된 값(1111111)을 사용하지 않는다는 것을 의미한다. 이러한 값은 명령이 또 다른 대안적 포맷에 따라 디코딩되도록 하는데 사용될 수 있다.
예를 들어, 도 7은 본 발명에 따른 대안적인 1개의 오퍼랜드 명령 포맷을 나타내고, 이것은 본 명세서에서 "포맷 Ⅲ"으로 언급된다. 이러한 특정적인 대안적 포맷에 있어 중요한 것으로, 스위칭 로직은, 5 비트 부분(i[10:6])이 31(11111)인 것으로 인식하고 아울러 비트(i[5])을 1(1)인 것으로 인식하도록 구성된다. 이것은 스위칭 로직(90)이 명령의 포맷이 포맷 Ⅲ인 것으로 인식하게 하고, 그리고 이에 따라, 비트들을 디코딩 로직에 제공하게 한다.
부분(i[10:5])은 도 7에서 704로 표시된다. 6 비트 오피코드는 비트(i[15:11]) 및 비트(i[4])이고, 도 7에서 702로 표시되어 있다. 오퍼랜드 특정자(x[3:0])는 도 7에서 706으로 명명된 비트(i[3:0])로부터 축어적으로 판독되고, 그리고 0(0000) 내지 11(1011) 범위에 있게 되어 앞서의 12개의 오퍼랜드 레지스터들 중 하나가 특정되게 된다. 대안적으로, 오퍼랜드 특정자(x)는 0 내지 11 범위 에서 즉시 오퍼랜드로 교체될 수 있다.
포맷 Ⅲ을 디코딩하기 위해, 스위칭 로직(90)은 비트(i[15:11]) 및 비트(i[4])를 오피코드 디코딩 로직(72)에 공급하도록 동작가능하다. 스위칭 로직(90)은 또한 결합 혹은 디코딩에 대한 필요 없이 직접 축어적 비트(i[3:0])를 공급하도록 구성된다. 오피코드 디코딩 로직(72)은, 특정된 오퍼랜드 레지스터들, 또는 오피코드를 따르는 즉시 오퍼랜드에 따라 동작하도록 동작가능하다.
쓰레드 당 단지 12개의 레지스터들만이 있기 때문에, 비트(i[3:0])는 포맷 Ⅲ에서 12(1100) 내지 15(1111) 범위를 사용하지 않는다. 이러한 값은 명령이 또 다른 대안적 포맷에 따라 디코딩되도록 하는데 사용될 수 있다.
예를 들어, 도 8은 본 발명에 따른 대안적인 0개의 오퍼랜드 명령 포맷을 나타내고, 이것은 본 명세서에서 "포맷 Ⅳ"으로 언급된다. 여기서, 비트(i[15:11]) 및 비트(i[4])는 오피코드이고, 802로 명명되어 있으며, 비트(i[10:6])은 31(11111)과 같고 비트(i[5])는 1(1)이며 함께 804로 명명되어 있고, 그리고 비트(i[3:0])는 12(1100) 내지 15(1111) 범위 중 어딘 가에 있을 수 있으며 806으로 명명되어 있다. 스위칭 로직(90)은, 비트(i[10:5]) 및 비트(i[3:0])가 이러한 범위 내에 있는 것으로 인식하고 아울러 이에 따라 비트(i[15:11]) 및 비트(i[4])를 디코딩 로직의 오피코드 디코딩 섹션(72)에 공급하도록 구성된다.
다른 명령 포맷들이 앞서의 포맷 Ⅰ 내지 포맷 Ⅳ 방식으로부터 개별적으로 인코딩될 수 있다. 예를 들어, 본 명세서에서 "포맷 Ⅴ", "포맷 Ⅵ", "포맷 Ⅶ", 및 "포맷 Ⅷ"로 언급되는 복수의 포맷들 각각은 5 비트 이상의 오피코드를 사용한 다. 이것을 위해, 스위칭 로직(90)은 초기에 상위 5 비트(i[15:11])가 특정의 사전에 결정된 값 혹은 사전에 결정된 범위의 값들에 있는 것으로 인식해야만 하고, 이것은 디코딩 로직(72, 82, 84 및 90)이 포맷 I 내지 포맷 IV 대신 대안적인 포맷 Ⅴ 내지 포맷 Ⅷ 중 특정된 하나에 따라 명령을 디코딩하게 한다. 특히, 스위칭 로직이 비트(i[15:11])를 특정된 값 혹은 특정된 범위의 값들을 가지는 것으로 인식하는 경우, 스위칭 로직은 적어도 비트(i[10]) 및 가능하다면 후속적 비트(i[9...])를 오퍼랜드 디코딩 섹션(82, 84) 대신에 오피코드 디코딩 섹션(72)에 공급해야 함을 알게 된다.
포맷 V는 하나의 레지스터 특정자와 하나의 즉시 오퍼랜드를 포함한다. 비트(i[15:10])는 오피코드이고, 비트(i[9:6])는 레지스터 특정자이고, 그리고 비트(i[5:0])는 즉시 오퍼랜드이다. 포맷 V에서, 비트(i[9:6])는 0(0000)부터 15(1111)까지 전 범위를 취할 수 있어, 16개의 레지스터들(GP, DP1 SP, LR 및 OP1 ... OP12) 중 어느 하나에 관해 동작이 가능하다. 레지스터들(GP, DP, SP 및 LR)은, 예를 들어, 1100, 1101, 1110 및 1111로 각각 어드레싱될 수 있다. 그래서 포맷 Ⅴ의 명령은 예를 들어 스택 및 풀을 처리하기 위해 쓰레드의 레지스터들 중 다른 것들에 관해 동작할 수 있다.
포맷 Ⅵ은 포맷 Ⅴ와 동일하지만, 예외적으로 비트(i[9:6])가 0(0000) 내지 11(1011) 범위로 제한되고, 그래서 레지스터 특정자는 오퍼랜드 레지스터(OP1 내지 OP12) 중 하나만을 특정할 수 있다.
포맷 Ⅶ은 10 비트 오피코드 및 6 비트 즉시 오퍼랜드를 가진다. 비 트(i[15:6])는 오피코드이고, 이 경우 비트(i[9:6])는 12(1100) 내지 15(1111) 범위에 있다. 비트(i[5:0])는 즉시 오퍼랜드이다.
포맷 Ⅷ은 6 비트 오피코드와 10 비트 즉시 오퍼랜드를 가진다. 비트i[15:10]은 오피코드이고, 그리고 i[9:0]은 즉시 오퍼랜드이다.
스위칭 로직(90)에 관하여, 유의할 것으로, 결코 전환되지 않는 i[15:11]와 같은 일부 비트들은, 도 6 내지 도 9에 도시된 바와 같이, 스위칭 로직(90)을 통과하기보다는, 명령 레지스터(50)로부터 오피코드 디코딩 부분(72)으로 직접 제공될 수 있다. 그러나, 이럼에도 불구하고, 실시예들에서, 스위칭 로직(90)은, 명령이 포맷 Ⅴ 내지 포맷 Ⅷ 중 하나에 따라 코딩되어야 하는지를 검출하기 위해 비트(i[15:11]) 중 적어도 일부를 판독할 수 있어야만 한다.
바람직한 실시예에 따르면, 실행 유닛은 전치 명령들을 지원한다. 전치는 즉시 오퍼랜드의 범위를 확장시키기 위해 사용되고, 그리고 더 많은 레지스터 간 동작을 제공하거나 레지스터 간 동작에 더 많은 오퍼랜드를 제공하기 위해 사용된다. 전치 명령들은 컴파일러와 어셈블러에 의해 자동으로 삽입된다. 전치 명령들은 다음과 같다.
PFIX 이 명령은 그 10 비트 즉시 오퍼랜드를 후속의 16 비트 명령의 즉시 오퍼랜드와 연결시킨다. 이것은 포맷 Ⅷ에 관한 것이다.
EOPR 이 명령은 그 11 비트 오퍼랜드 부분을 후속의 명령과 연결시킨다. 이것은 간단히 오피코드로서 비트(i[15:11])를 가지며, 즉시 오퍼랜드로서 비트(i[10:0])를 갖는 또 다른 포맷을 갖는다.
또 다른 바람직한 특징은 도 9에 도시된 바와 같이 듀얼 명령 발행의 특징이다. 여기서, 실행 유닛(16)은 실제로, 적어도 두 개의 병렬 실행 유닛들을 포함하며, 바람직하게는 병렬 파이프라인(16a 및 16b)을 포함한다. 실행 유닛은, 앞서 설명된 바와 같은 포맷의 2개의 16 비트 명령, 각각이 한번에 두 개의 각각의 파이프라인(16a, 16b)에 발행될 수 있도록 구성된 발행 로직(60)을 포함한다. 도 2 내지 도 4와 관련하여 설명된 바와 같은 프로세서에서, 듀얼 발행 특징은 클럭 속도를 증가시킴 없이 애플리케이션에 따라 성능을 50% 내지 90% 만큼 증가시킬 수 있다. 프로그램 메모리 사용에 있어 최대 25%의 오퍼헤드가 존재한다.
바람직하게는 두 개의 파이프라인은 서로 다른 능력을 가진다. 파이프라인(16a)에 의해 실행되는 바와 같은 첫 번째 명령은 산술 로직 유닛(Arithmetic Logic Unit, ALU) 타입 명령, 또는 메모리 액세스 명령, 또는 분기 명령 중 하나일 수 있다. 파이프라인(16b)에 의해 실행되는 바와 같은 두 번째 명령은 ALU 타입 명령, 또는 입력-출력 명령 중 하나일 수 있다. 이것은 추가적인 디코더 및 추가적인 ALU를 요구하지만, 장점으로는 복잡도를 감소시키는데, 왜냐하면 단일 파이프라인이 메모리 액세스 명령과 리소스 명령을 양쪽 모두를 처리할 필요가 없기 때문이다. 더욱이, 프로세서는 각 쌍에서의 2개의 16 비트 명령에 관한 종속성 점검을 할 필요가 없는데, 왜냐하면 컴파일러가 이들 사이에 종속성이 존재하지 않도록 해당 쌍을 할당하기 때문이다.
가용한 명령 세트는 두 개의 명령 길이에 따라 달라진다. 16 비트 명령 혹은 "짧은" 명령은 많아야 두 개의 소스 오퍼랜드와 많아야 하나의 목적지 오퍼랜드를 갖는다. 이러한 것의 완전한 세트는 범용 코드에서 공통으로 사용되는 명령들 모두를 인코딩한다. 32 비트 명령 혹은 "긴" 명령은 많아야 내 개의 소스 오퍼랜드와 많아야 두 개의 목적지 오퍼랜드를 갖는다. 이것은 (긴 즉시 오퍼랜드를 갖는 것들을 포함하는) 범용 코드에서의 공통 명령들을 더 적게 인코딩하고, 그리고 애플리케이션 특정 코드의 성능을 크게 증가시키는 다수의 복수-오퍼랜드 명령들을 또한 인코딩한다.
듀얼 발행은, 매 싸이클 마다, 16 비트 명령의 쌍(50)을 두 개의 병렬 파이프라인에 발행하거나, 혹은 단일의 32 비트 명령을 하나의 파이프라인에 발행함으로써 동작한다. 단일 발행에 대해, 단일의 16 비트가 간단히 적절한 파이프라인에 발행된다. 예를 들어, 모든 리소스 명령은 두 번째 파이프 라인(16b)으로 라우팅될 수 있다. 듀얼-발행을 수행할 때, 분기 오프셋은 32 비트 오프셋으로 해석되고, 그리고 언제나 16 비트 명령의 쌍으로 분기하거나 단일의 32 비트 명령으로 분기한다.
쓰레드 상태 레지스터(SR)에서의 플래그는 쓰레드가 듀얼-발행을 수행하는지 혹은 단일-발행을 수행하는 지를 결정하기 위해 사용된다. 발행 로직(60)은 쓰레드 레지스터들(20)의 각각의 세트로부터 SR 레지스터에 액세스하고, 그리고 단일 발행 모드 혹은 듀얼 발행 모드에 따라 명령(50)을 발행하도록 구성된다. 따라서, 상태 레지스터(SR)에 의해, 임의의 소정 시간에 쓰레드 스케쥴러(18)에 의해 고려 중인 쓰레드들(T) 중 일부는 단일 발행 모드에 있을 수 있고, 반면에 이러한 쓰레드들 중 다른 것들은 듀얼 발행 모드에 있을 수 있다. 이것의 이점은 복수의 쓰레드들을 관리함에 있어서 유연성이 더 커질 수 있다는 것이다. 실시예들에서, 동일 쓰레드에 관한 듀얼-발행과 단일-발행 간의 제어 전달에 대한 지원이 없을 수 있다.
듀얼 코드는 어셈블러 내의 코드 스케쥴러에 의해 만들어져, 컴파일된 소프트웨어와 수동 코딩된 소프트웨어 양쪽 모두를 최적화시킨다. 코드는 보통의 실행에서보다 더 크지만, 프로그램 오프셋들의 추가적인 범위는 "no-op" 명령을 가진 재순서화(reordering) 및 패딩(padding)과는 다른 어떠한 변화도 요구되지 않도록 한다(no-op 명령은 스케쥴러 쓰레드가 그 명령 버퍼에 어떠한 명령도 가지지 않을 때 발행됨).
프로그램 메모리(24)는 병렬로 액세스될 수 있는 두 개의 뱅크로서 구현될 수 있다. 하나는 짝수의 어드레스를 보유하고, 그리고 다른 것은 홀수의 어드레스를 보유한다. 명령 페치는 항상 64 비트를 페치한다(명령 버퍼(19)의 폭은 각각 64 비트임). 32 비트 명령들과, 64 비트 명령들의 쌍은 메모리 내에서 32 비트 경계 상에서 정렬되어야만 한다. 듀얼 프로그램 어드레스는 모두 32 비트 정렬되고, 프로그램 오프셋은 모두 2 대신 4만큼 스케일링된다. 이러한 구성은 또한 양쪽 메모리 뱅크형 명령 페치를 사용하여 메모리 액세스 명령이 동작하도록 함으로써 64 비트 실시예에 대해 동작할 수 있다. 64 비트 데이터 타입의 장점을 제외하고는 성능에서의 차이는 없을 수 있다.
듀얼 명령 발행에 도움을 주는 다른 특징들은 다음을 포함할 수 있는데, 즉, 단지 사소한 성능 영향력만을 가지는 4개의 판독 포트와 2개의 기입 포트를 지원하는 레지스터 파일을 사용하는 것과, 그리고 하나보다 많은 트랩이 한번에 일어나는 상황을 처리할 수 있도록 트랩-처리를 변경하는 것을 포함할 수 있다. 이러한 더블 트랩 처리는, 이러한 트랩이 해당 쌍의 첫 번째 명령에 의해 일어났는지 혹은 두 번째 명령에 의해 일어났는지 여부를 표시하는 상태 레지스터(SR)에서의 임의의 비트에 의해 달성될 수 있다. 만약 양쪽 명령들이 모두 트랩을 일으킨다면, 이들은 한번에 하나씩 처리될 수 있다.
다음은 본 발명에 따라 인코딩될 수 있는 3, 2, 1, 및 0개의 오퍼랜드 명령들의 예이다. 아래에서 사용되는 약자 "reg"은 레지스터(register)를 나타내고, "op reg"은 오퍼랜드 레지스터(operand register)를 나타내며, "imm"은 즉시 오퍼랜드(immediate operand)를 나타내고, 그리고 "dest"는 목적지 오퍼랜드 레지스터(destination operand register)를 나타낸다.
ADDI dest, source, constant 소스(source)를 상수(constant)에 더하기 (2개의 op reg들 & 4비트 imm)
MUL dest, sourcel, source2 소스1(sourcel)과 소스2(source2)를 곱하기 (3개의 op reg들)
LSU dest, sourcel, source2 더 작은 것 무부호형 (3개의 op reg들)
STW data, base offset 데이터를 메모리에 저장 (3개의 op reg들)
LDW data, base, offset 데이터를 메모리로부터 로딩 (3개의 op reg들)
LDWSP data, offset 데이터를 스택으로부터 로딩 (임의의 reg & 6-비트 imm)
LDC data, constant 상수 로딩 (임의의 reg & 6-비트 imm)
STB data, addr 바이트를 메모리에 저장 (2개의 op reg들)
BRFT flag, offset 만약 플래그가 참(true)이면 전방 분기(branch forward) (op reg & 6-비트 imm)
BRBF flag, offset 만약 플래그가 거짓(false)이면 후방 분기(branch backward) (op reg & 6-비트 imm)
BRFU offset 상대적 전방 분기 비조건형 (6-비트 imm)
BLRF offset 상대적 전방 분기 및 링크 (10-비트 imm 서브루틴 콜)
GETR resource, type 리소스(resource)를 쓰레드에 할당 (2개의 op reg들)
IN resource, data 입력 (2개의 op reg들)
OUT resource, data 출력 (2개의 op reg들)
INSHR resource, data 입력 및 오른쪽 시프트 (2개의 op reg들)
NOT dest, source 비트별 부정 (2개의 op reg들)
EET flag, resource 만약 플래그가 참이면 이벤트 인에이블 (2개의 op reg들)
EEU resource 이벤트 인에이블 비조건형 (1개의 op reg)
WAITEU 이벤트 대기 비조건형 (오퍼랜드 없음)
CLRE 쓰레드에 대한 이벤트들을 소거 (오퍼랜드 없음)
듀얼 명령 발행의 몇 가지 예가 본 명세서에 개시된다. 여기서, 2개의 명령은 동일 라인 상에서 보여지고, 이것은 명령들이 2개의 병렬 파이프라인에 함께 발행되는 것을 나타낸다.
첫 번째 예는 두 개의 어레이들(a 및 b)의 곱하기-누적을 수행한다.
MACC:
LDW x, a, i LSU go, i, limit
LDW y, b, i ADD i, i, 1
MUL prod, x, y
BRBF go, MACC ADD sum, sum, prod
다음 두 개는 DMA(Direct Memory Access) 제어기에 의해 통상적으로 수행되는 것과 동일한 입력 및 출력 기능을 수행한다. 이들은 메모리 내의 어드레스 베이스에서 시작하는 채널(c)를 사용하여 워드들의 블럭을 전달한다.
DMAI:
LSU go, i, limit IN c, x
STW x, base, i
BRBF go, DMAI ADDI i, i, 1
DMAO:
LDW x, base, i LSU go, l, limit
ADDI i, i, 1 OUT c, x
BRBF go, DMAO
다음의 예는 이더넷에서 사용되는 미디어 독립형 인터페이스로부터 입력을 수행한다. 이것은 4 비트 dport로부터의 데이터 및 1 비트 vport로부터의 유효 신호들에서 시프트한다. 4 비트 값들의 각각의 쌍은 바이트를 형성하고 그리고 각각의 바이트는 메모리에 저장된다. 유효 신호들이 매 바이트마다 점검되어 바이트들의 시퀀스가 언제 종료되는 지가 결정된다.
MACI:
STB data, ptr INSHR dport, data
ADDI ptr, ptr, 1 INSHR vport, valid
NOT go, valid INSHR dport, data
BRBF go, MACI INSHR vport, valid
마지막 예는 명령 싸이클 당 한 아이템(비트, 니블, 바이트 등)의 포트 속도에서 입력되는 데이터를 나타낸다. 이것은, 토큰들을 통한 카운팅 그리고/또는 토큰 값들을 끝내기 위한 스캐닝 동안 수행될 수 있다. 이러한 아이템들은 바이트, 하프워드, 또는 워드로 전환되거나 혹은 이로부터 전환될 수 있고, 그리고 메모리에 전송되거나 혹은 이로부터 전송될 수 있다.
이해할 것으로, 앞서의 실시예는 단지 예시적으로 설명되었다. 본 발명의 명령 포맷들은 인터페이스 프로세서 및 명령 세트 그리고 쓰레드 스케쥴링, 이벤트 처리 및 I/O와 관련하여 특히 유용한 것으로 설명되었다. 그러나, 본 발명은 이러 한 실시예들로만 한정되는 것이 아니며, 다른 애플리케이션 및 명령 세트가 본 발명의 기술분야에서 숙련된 자들에게는 명백하게 될 것이다. 더욱이, 다른 실시예에서는, 다른 인코딩/디코딩 방식, 전치 및/또는 병렬 파이프라인 구성이 사용될 수 있다. 본 발명의 범위는 앞서 설명된 실시예들에 의해 한정되지 않으며 단지 다음의 특허청구범위에 의해서만 한정된다.

Claims (56)

  1. 프로세서에서 명령들을 디코딩하는 디코딩 유닛으로서,
    오피코드 디코딩 로직과;
    오퍼랜드 디코딩 로직과; 그리고
    16 비트의 입력을 포함하여 구성되며,
    상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지며,
    상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹(verbatim group)을 축어적으로 판독하도록 동작가능한 것을 특징으로 하는 디코딩 유닛.
  2. 제1항에 있어서,
    상기 11 비트 중 적어도 하나의 비트를 상기 오퍼랜드 디코딩 로직으로부터 상기 오피코드 디코딩 로직으로 전환시키도록 동작가능한 스위칭 로직을 포함하며, 여기서 상기 오피코드 디코딩 로직은 상기 5 비트 및 상기 전환된 적어도 하나의 비트를 사용하여 오피코드를 결정하도록 동작가능한 것을 특징으로 하는 디코딩 유닛.
  3. 제2항에 있어서,
    상기 오퍼랜드 디코딩 로직은 상기 11 비트 중 잔존하는 비트로부터 적어도 하나의 오퍼랜드를 결정하도록 동작가능한 것을 특징으로 하는 디코딩 유닛.
  4. 제2항에 있어서,
    상기 스위칭 로직은, 상기 11 비트가 상기 3개의 4 비트 오퍼랜드 요소들을 인코딩하는데 사용되지 않은 값을 가지는 경우에, 상기 적어도 하나의 비트를 전환시키는 것을 특징으로 하는 디코딩 유닛.
  5. 제2항에 있어서,
    상기 스위칭 로직은, 상기 5 비트가 사전에 결정된 값 혹은 사전에 결정된 범위의 값들을 가지는 경우에 상기 적어도 하나의 비트를 전환시키는 것을 특징으로 하는 디코딩 유닛.
  6. 제1항에 있어서,
    인코딩된 부분이 5 비트이고, 축어적 부분이 6 비트이고, 각각의 오퍼랜드 요소의 제 1 부분이 2 비트이고, 그리고 각각의 오퍼랜드 요소의 제 2 부분이 2 비 트인 것을 특징으로 하는 디코딩 유닛.
  7. 제1항에 있어서,
    상기 입력은 16 비트 명령 레지스터를 포함하는 것을 특징으로 하는 디코딩 유닛.
  8. 제1항에 있어서,
    상기 오퍼랜드 요소들 중 적어도 하나는 12개의 오퍼랜드 레지스터들의 세트 중 어느 하나로부터 오퍼랜드 레지스터를 특정하는 오퍼랜드 특정자인 것을 특징으로 하는 디코딩 유닛.
  9. 제8항에 있어서,
    상기 3개의 오퍼랜드 요소들 각각은 상기 세트 중 어느 하나로부터 오퍼랜드 레지스터를 각각 특정하는 각각의 오퍼랜드 특정자를 포함하는 것을 특징으로 하는 디코딩 유닛.
  10. 제8항에 있어서,
    상기 3개의 오퍼랜드 요소들은, 하나의 즉시 오퍼랜드(immediate operand)와, 그리고 상기 세트로 중 어느 하나로부터 두 개의 오퍼랜드 레지스터들을 각각 특정하는 두 개의 오퍼랜드 특정자들을 포함하는 것을 특징으로 하는 디코딩 유닛.
  11. 제8항에 있어서,
    상기 3개의 오퍼랜드 요소들은, 2개의 소스 오퍼랜드 요소들과, 그리고 1개의 목적지 오퍼랜드 특정자를 포함하고, 여기서 상기 2개의 소스 오퍼랜드 요소들 각각은 즉시 소스 오퍼랜드(immediate source operand)이거나 혹은 상기 세트 중 어느 하나로부터 각각의 소스 오퍼랜드 레지스터를 특정하는 소스 오퍼랜드 특정자이고, 상기 1개의 목적지 오퍼랜드 특정자는 상기 세트 중 어느 하나로부터 목적지 오퍼랜드 레지스터를 특정하며,
    상기 디코딩 유닛은, 상기 소스 오퍼랜드들에 관한 동작을 수행하고 상기 동작의 결과를 상기 목적지 오퍼랜드 레지스터에 저장하는 것을 포함하는 오피코드에 따라 명령을 실행하도록 동작가능한 것을 특징으로 하는 디코딩 유닛.
  12. 제1항에 있어서,
    상기 3개의 오퍼랜드들은 3개의 소스 오퍼랜드들인 것을 특징으로 하는 디코딩 유닛.
  13. 제2항, 제3항, 제4항 및 제8항에 있어서,
    상기 스위칭 로직은 상기 11 비트 중 하나의 비트를 상기 오퍼랜드 디코딩 로직으로부터 상기 오피코드 디코딩 로직으로 전환시키도록 동작가능하고,
    상기 오피코드 디코딩 로직은 상기 5 비트와 상기 전환된 하나의 비트를 사 용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 잔존하는 10 비트로부터 2개의 4 비트 오퍼랜드 특정자들을 결정하도록 동작가능하고, 각각의 4 비트 오퍼랜드 특정자는 12개의 오퍼랜드 레지스터들의 상기 세트 중 어느 하나로부터 오퍼랜드 레지스터를 특정하기 위해 12개의 가능한 바이너리 값들 중 하나를 가지며, 그리고
    상기 오퍼랜드 디코딩 로직은 상기 2개의 오퍼랜드 특정자들 각각의 제 1 부분을 결정하기 위해 상기 10 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 아울러 상기 두 개의 오퍼랜드 특정자들 각각의 제 2 부분을 결정하기 위해 상기 10 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능한 것을 특징으로 하는 디코딩 유닛.
  14. 제1항에 있어서,
    상기 디코딩 유닛은 복수의 쓰레드들을 실행하며, 각각의 쓰레드는 명령들의 시퀀스를 포함하고, 그리고 상기 디코딩된 명령들 중 적어도 하나의 명령은 상기 시퀀스들 중 하나의 구성요소인 것을 특징으로 하는 디코딩 유닛.
  15. 제14항에 있어서,
    상기 적어도 하나의 명령은 상기 복수의 쓰레드들 중 하나 또는 그 이상의 스케쥴링을 관리하기 위한 쓰레드 스케쥴링 명령인 것을 특징으로 하는 디코딩 유닛.
  16. 제1항에 있어서,
    상기 명령들 중 적어도 하나는, 이벤트와 관련된 조건을 설정하기 위한 이벤트 조건 설정 명령, 이벤트 조건과 관련된 데이터를 설정하기 위한 조건 데이터 설정 명령, 이벤트와 관련된 연속 포인트 벡터를 설정하기 위한 벡터 설정 명령, 이벤트들을 발생시키도록 이벤트 소스를 인에이블시키기 위한 소스 이벤트 인에이블 명령, 및 이벤트들에 반응하도록 쓰레드를 인에이블시키기 위한 쓰레드 이벤트 인에이블 명령 중 하나인 것을 특징으로 하는 디코딩 유닛.
  17. 제1항에 있어서,
    상기 디코딩 유닛은 전치 명령(prefix instruction)의 오퍼랜드를 순차적으로 실행되는 명령의 오퍼랜드와 연결시키도록 동작가능한 것을 특징으로 하는 디코딩 유닛.
  18. 제1항에 있어서,
    상기 입력은 64 비트 명령 버퍼로부터 명령들을 수신하는 것을 특징으로 하는 디코딩 유닛.
  19. 2개의 각각의 16 비트 명령들을 병렬로 동시에 실행하도록 동작가능한 적어도 2개의 병렬 파이프라인들을 포함하는 실행 유닛으로서, 각각의 파이프라인은 제 1항을 따르는 디코딩 유닛을 포함하는 것을 특징으로 하는 실행 유닛.
  20. 제19항에 있어서,
    상기 실행 유닛은 듀얼 발행 모드(dual issue mode) 및 단일 발행 모드(single issue mode)에서 동작가능하고, 상기 실행 유닛은, 상기 듀얼 발행 모드에서는, 단일 싸이클에서 상기 2개의 파이프라인들 각각에 2개의 16 비트 명령들을 발행하도록 동작가능하고, 그리고 상기 단일 발행 모드에서는, 단일 싸이클에서 임의의 파이프라인에 단지 하나의 16 비트 명령을 발행하도록 동작가능한 것을 특징으로 하는 실행 유닛.
  21. 제19항에 있어서,
    상기 실행 유닛은 단일 싸이클에서 상기 파이프라인들 중 하나로 32 비트 명령을 발행하도록 동작가능한 것을 특징으로 하는 실행 유닛.
  22. 제14항을 따르는 디코딩 유닛을 포함하는 프로세서로서,
    상기 프로세서는 12개의 오퍼랜드 레지스터들의 복수의 세트들을 포함하고, 각각의 세트는 상기 쓰레드들 중 하나 각각에 관한 오퍼랜드들을 저장하는 것을 특징으로 하는 프로세서.
  23. 제1항을 따르는 디코딩 유닛을 포함하는 프로세서로서,
    상기 프로세서는 제 1 외부 디바이스와 제 2 외부 디바이스 간의 인터페이스를 위한 인터페이스 프로세서인 것을 특징으로 하는 프로세서.
  24. 제23항에 있어서,
    상기 제 1 외부 디바이스는 또 다른 프로세서이고, 그리고 상기 제 2 외부 디바이스는 주변 장치인 것을 특징으로 하는 프로세서.
  25. 제23항에 있어서,
    상기 제 1 외부 디바이스와 상기 제 2 외부 디바이스 양쪽 모두는 다른 프로세서들인 것을 특징으로 하는 프로세서.
  26. 제23항에 있어서,
    상기 명령들 중 적어도 하나는, 상기 외부 디바이스들 중 하나로부터 상기 인터페이스 프로세서에 데이터를 입력하기 위한 입력 명령과, 그리고 상기 인터페이스 프로세서로부터 상기 외부 디바이스들 중 하나에 데이터를 출력하기 위한 출력 명령 중 하나인 것을 특징으로 하는 프로세서.
  27. 오피코드 디코딩 로직, 오퍼랜드 디코딩 로직, 및 16 비트의 입력을 포함하는 디코딩 유닛을 사용하여 프로세서에서 명령들을 디코딩하는 방법으로서,
    상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 상기 오피코드 디코 딩 로직을 동작시키는 단계와; 그리고
    상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 상기 오퍼랜드 디코딩 로직을 동작시키는 단계를 포함하여 구성되고,
    상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지며,
    상기 3개의 오퍼랜드 요소들을 결정하는 것은, 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하는 것과, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하는 것을 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  28. 제27항에 있어서,
    상기 11 비트 중 적어도 하나의 비트를 상기 오퍼랜드 디코딩 로직으로부터 상기 오피코드 디코딩 로직으로 전환시키는 단계와, 그리고
    상기 5 비트와 상기 전환된 적어도 하나의 비트를 사용하여 오피코드를 결정하도록 상기 오피코드 디코딩 로직을 동작시키는 단계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  29. 제28항에 있어서,
    상기 11 비트 중 잔존하는 비트로부터 적어도 하나의 오퍼랜드를 결정하도록 상기 오퍼랜드 디코딩 로직을 동작시키는 단계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  30. 제28항에 있어서,
    상기 적어도 하나의 비트를 전환시키는 단계는, 상기 11 비트가 상기 3개의 4 비트 오퍼랜드 요소들을 인코딩하는데 사용되지 않은 값을 가지는 경우에, 수행되는 것을 특징으로 하는 명령을 디코딩하는 방법.
  31. 제28항에 있어서,
    상기 적어도 하나의 비트를 전환시키는 단계는, 상기 5 비트가 사전에 결정된 값 혹은 사전에 결정된 범위의 값들을 가지는 경우에, 수행되는 것을 특징으로 하는 명령을 디코딩하는 방법.
  32. 제27항에 있어서,
    인코딩 부분이 5 비트이고, 축어적 부분이 6 비트이고, 각각의 오퍼랜드 요소의 제 1 부분이 2 비트이고, 그리고 각각의 오퍼랜드 요소의 제 2 부분이 2 비트인 것을 특징으로 하는 명령을 디코딩하는 방법.
  33. 제27항에 있어서,
    상기 입력은 16 비트 명령 레지스터를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  34. 제27항에 있어서,
    상기 오퍼랜드 요소들 중 적어도 하나는 12개의 오퍼랜드 레지스터들의 세트 중 어느 하나로부터 오퍼랜드 레지스터를 특정하는 오퍼랜드 특정자인 것을 특징으로 하는 명령을 디코딩하는 방법.
  35. 제34항에 있어서,
    상기 3개의 오퍼랜드 요소들 각각은 상기 세트 중 어느 하나로부터 오퍼랜드 레지스터를 각각 특정하는 각각의 오퍼랜드 특정자를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  36. 제34항에 있어서,
    상기 3개의 오퍼랜드 요소들은, 하나의 즉시 오퍼랜드와, 그리고 상기 세트로 중 어느 하나로부터 두 개의 오퍼랜드 레지스터들을 각각 특정하는 두 개의 오퍼랜드 특정자들을 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  37. 제34항에 있어서,
    상기 3개의 오퍼랜드 요소들은, 2개의 소스 오퍼랜드 요소들과, 그리고 1개의 목적지 오퍼랜드 특정자를 포함하고, 여기서 상기 2개의 소스 오퍼랜드 요소들 각각은 즉시 소스 오퍼랜드이거나 혹은 상기 세트 중 어느 하나로부터 각각의 소스 오퍼랜드 레지스터를 특정하는 소스 오퍼랜드 특정자이고, 상기 1개의 목적지 오퍼랜드 특정자는 상기 세트 중 어느 하나로부터 목적지 오퍼랜드 레지스터를 특정하며,
    상기 방법은, 상기 소스 오퍼랜드들에 관한 동작을 수행하고 상기 동작의 결과를 상기 목적지 오퍼랜드 레지스터에 저장하는 것을 포함하는 오피코드에 따라 명령을 실행하는 단계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  38. 제27항에 있어서,
    상기 3개의 오퍼랜드들은 3개의 소스 오퍼랜드들인 것을 특징으로 하는 명령을 디코딩하는 방법.
  39. 제28항, 제29항, 제30항, 및 제34항에 있어서,
    상기 11 비트 중 하나의 비트를 상기 오퍼랜드 디코딩 로직으로부터 상기 오피코드 디코딩 로직으로 전환시키는 단계와;
    상기 5 비트와 상기 전환된 하나의 비트를 사용하여 오피코드를 결정하도록 상기 오피코드 디코딩 로직를 동작시키는 단계와; 그리고
    잔존하는 10 비트로부터 2개의 4 비트 오퍼랜드 특정자들을 결정하도록 상기 오퍼랜드 디코딩 로직을 동작시키는 단계를 포함하고,
    각각의 4 비트 오퍼랜드 특정자는 12개의 오퍼랜드 레지스터들의 상기 세트 중 어느 하나로부터 오퍼랜드 레지스터를 특정하기 위해 12개의 가능한 바이너리 값들 중 하나를 가지며,
    상기 2개의 오퍼랜드 특정자들을 결정하는 것은 상기 2개의 오퍼랜드 특정자들 각각의 제 1 부분을 결정하기 위해 상기 10 비트의 인코딩된 그룹을 디코딩하는 것과, 그리고 상기 두 개의 오퍼랜드 특정자들 각각의 제 2 부분을 결정하기 위해 상기 10 비트의 축어적 그룹을 축어적으로 판독하는 것을 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  40. 제27항에 있어서,
    복수의 쓰레드들을 실행하도록 상기 디코딩 유닛을 동작시키는 단계를 포함하며, 각각의 쓰레드는 명령들의 시퀀스를 포함하고, 그리고 상기 디코딩된 명령들 중 적어도 하나의 명령은 상기 시퀀스들 중 하나의 구성요소인 것을 특징으로 하는 명령을 디코딩하는 방법.
  41. 제40항에 있어서,
    상기 적어도 하나의 명령은 상기 복수의 쓰레드들 중 하나 또는 그 이상의 스케쥴링을 관리하기 위한 쓰레드 스케쥴링 명령인 것을 특징으로 하는 명령을 디코딩하는 방법.
  42. 제27항에 있어서,
    상기 명령들 중 적어도 하나는, 이벤트와 관련된 조건을 설정하기 위한 이벤트 조건 설정 명령, 이벤트 조건과 관련된 데이터를 설정하기 위한 조건 데이터 설정 명령, 이벤트와 관련된 연속 포인트 벡터를 설정하기 위한 벡터 설정 명령, 이벤트들을 발생시키도록 이벤트 소스를 인에이블시키기 위한 소스 이벤트 인에이블 명령, 및 이벤트들에 반응하도록 쓰레드를 인에이블시키기 위한 쓰레드 이벤트 인에이블 명령 중 하나인 것을 특징으로 하는 명령을 디코딩하는 방법.
  43. 제27항에 있어서,
    전치 명령의 오퍼랜드를 순차적으로 실행되는 명령의 오퍼랜드와 연결시키도록 상기 디코딩 유닛을 동작시키는 단계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  44. 제27항에 있어서,
    상기 입력에서 64 비트 명령 버퍼로부터 명령들을 수신하는 단계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  45. 제27항에 있어서,
    2개의 각각의 병렬 파이프라인들을 포함하는 실행 유닛을 사용하여, 적어도 2개의 16 비트 명령들을 동시에 실행하는 단계를 포함하며, 각각의 파이프라인은 제27항의 방법에 따라 동작되는 것을 특징으로 하는 명령을 디코딩하는 방법.
  46. 제45항에 있어서,
    상기 실행 유닛을 듀얼 발행 모드에서 동작시킬지 단일 발행 모드에서 동작시킬지를 선택하는 단계를 포함하고, 상기 듀얼 발행 모드에서 상기 실행 유닛은, 단일 싸이클에서 상기 2개의 각각의 파이프라인들에 2개의 16 비트 명령들을 발행하도록 동작가능하고, 그리고 상기 단일 발행 모드에서 상기 실행 유닛은, 단일 싸이클에서 임의의 파이프라인에 단지 하나의 16 비트 명령을 발행하도록 동작가능한 것을 특징으로 하는 명령을 디코딩하는 방법.
  47. 제45항에 있어서,
    단일 싸이클에서 32 비트 명령을 실행하도록 상기 파이프라인들 중 하나를 동작시키는 단계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  48. 제40항에 있어서,
    각각의 쓰레드들에 관한 오퍼랜드들을 12개의 오퍼랜드 레지스터들의 각각의 세트들에 저장하는 단계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  49. 제27항에 있어서,
    상기 프로세서는 인터페이스 프로세서이고, 상기 방법은 상기 프로세서를 사용하여 제 1 외부 디바이스와 제 2 외부 디바이스 간의 인터페이스를 수행하는 단 계를 포함하는 것을 특징으로 하는 명령을 디코딩하는 방법.
  50. 제49항을 따르는 프로세서로서, 상기 제 1 외부 디바이스는 또 다른 프로세서이고, 상기 제 2 외부 디바이스는 주변 장치인 것을 특징으로 하는 프로세서.
  51. 제49항에 있어서,
    상기 제 1 외부 디바이스와 상기 제 2 외부 디바이스 양쪽 모두는 다른 프로세서들인 것을 특징으로 하는 프로세서.
  52. 제49항에 있어서,
    상기 명령들 중 적어도 하나는, 상기 외부 디바이스들 중 하나로부터 상기 인터페이스 프로세서에 데이터를 입력하기 위한 입력 명령과, 그리고 상기 인터페이스 프로세서로부터 상기 외부 디바이스들 중 하나에 데이터를 출력하기 위한 출력 명령 중 하나인 것을 특징으로 하는 프로세서.
  53. 모바일 애플리케이션 프로세서, 적어도 하나의 주변 장치, 그리고 상기 모바일 애플리케이션 프로세서와 상기 주변 장치 사이에 연결된 인터페이스 프로세서를 구비하는 모바일 단말기로서,
    상기 인터페이스 프로세서는 프로세서에서 명령들을 디코딩하는 디코딩 유닛을 가지며, 상기 디코딩 유닛은 오피코드 디코딩 로직과, 오퍼랜드 디코딩 로직과, 그리고 16 비트의 입력을 포함하고,
    여기서 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지며,
    상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능한 것을 특징으로 하는 모바일 단말기.
  54. 상호연결된 프로세서들의 어레이로서,
    상기 프로세서들 중 적어도 하나는 프로세서에서 명령들을 디코딩하는 디코딩 유닛을 가지며, 상기 디코딩 유닛은 오피코드 디코딩 로직과, 오퍼랜드 디코딩 로직과, 그리고 16 비트의 입력을 포함하고,
    여기서, 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하고, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나 를 가지며,
    상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능한 것을 특징으로 하는 상호연결된 프로세서들의 어레이.
  55. 명령들을 디코딩하는 디코딩 유닛을 포함하는 프로세서로서,
    상기 디코딩 유닛은 오피코드 디코딩 로직과, 오퍼랜드 디코딩 로직과, 그리고 16 비트의 입력을 포함하며,
    여기서, 상기 오피코드 디코딩 로직은 상기 입력 중 5 비트를 사용하여 오피코드를 결정하도록 동작가능하고, 그리고 상기 오퍼랜드 디코딩 로직은 상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하도록 동작가능하며, 상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지고,
    상기 오퍼랜드 디코딩 로직은 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하도록 동작가능하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하도록 동작가능한 것을 특징으로 하는 프로세서.
  56. 프로세서에서 명령들을 디코딩하는 디코딩 유닛으로서,
    16 비트의 입력 수단과;
    상기 입력 중 5 비트를 사용하여 오피코드를 결정하는 오피코드 디코딩 수단과; 그리고
    상기 입력 중 잔존하는 11 비트로부터 3개의 4 비트 오퍼랜드 요소들을 결정하는 오퍼랜드 디코딩 수단을 포함하여 구성되고,
    상기 3개의 오퍼랜드 요소들은 각각 12개의 가능한 바이너리 값들 중 하나를 가지고,
    상기 오퍼랜드 디코딩 수단은, 상기 3개의 오퍼랜드 요소들 각각의 제 1 부분을 결정하기 위해 상기 11 비트의 인코딩된 그룹을 디코딩하고, 그리고 상기 3개의 오퍼랜드 요소들 각각의 제 2 부분을 결정하기 위해 상기 11 비트의 축어적 그룹을 축어적으로 판독하는 것을 특징으로 하는 디코딩 유닛.
KR1020097025743A 2007-05-09 2008-05-02 콤팩트 명령 세트 인코딩 KR101528614B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/797,968 US7676653B2 (en) 2007-05-09 2007-05-09 Compact instruction set encoding
US11/797,968 2007-05-09
PCT/EP2008/055436 WO2008138781A1 (en) 2007-05-09 2008-05-02 Compact instruction set encoding

Publications (2)

Publication Number Publication Date
KR20100017744A true KR20100017744A (ko) 2010-02-16
KR101528614B1 KR101528614B1 (ko) 2015-06-12

Family

ID=39651396

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097025743A KR101528614B1 (ko) 2007-05-09 2008-05-02 콤팩트 명령 세트 인코딩

Country Status (6)

Country Link
US (1) US7676653B2 (ko)
EP (1) EP2145249B1 (ko)
JP (1) JP5222941B2 (ko)
KR (1) KR101528614B1 (ko)
CN (1) CN101720460B (ko)
WO (1) WO2008138781A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101084728B1 (ko) 2009-12-24 2011-11-22 서울대학교산학협력단 동적 암시 어드레싱 모드를 지원하는 파이프라인 방식의 프로세서
US20120284488A1 (en) * 2011-05-03 2012-11-08 Qualcomm Incorporated Methods and Apparatus for Constant Extension in a Processor
US9329869B2 (en) 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
US9286072B2 (en) 2011-10-03 2016-03-15 International Business Machines Corporation Using register last use infomation to perform decode-time computer instruction optimization
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US10078515B2 (en) 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US9697002B2 (en) 2011-10-03 2017-07-04 International Business Machines Corporation Computer instructions for activating and deactivating operands
US9354874B2 (en) 2011-10-03 2016-05-31 International Business Machines Corporation Scalable decode-time instruction sequence optimization of dependent instructions
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US9690583B2 (en) 2011-10-03 2017-06-27 International Business Machines Corporation Exploiting an architected list-use operand indication in a computer system operand resource pool
US20150019845A1 (en) * 2013-07-09 2015-01-15 Texas Instruments Incorporated Method to Extend the Number of Constant Bits Embedded in an Instruction Set
US10061592B2 (en) * 2014-06-27 2018-08-28 Samsung Electronics Co., Ltd. Architecture and execution for efficient mixed precision computations in single instruction multiple data/thread (SIMD/T) devices
US9696992B2 (en) * 2014-12-23 2017-07-04 Intel Corporation Apparatus and method for performing a check to optimize instruction flow
US10394568B2 (en) 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
US10761852B2 (en) 2015-09-30 2020-09-01 International Business Machines Corporation Extending data range addressing
US10877759B2 (en) 2015-09-30 2020-12-29 International Business Machines Corporation Managing the capture of information in applications with prefix instructions
US9870305B2 (en) 2015-09-30 2018-01-16 International Business Machines Corporation Debugging of prefixed code
US10089077B1 (en) 2017-01-10 2018-10-02 Apple Inc. Parallel processing circuitry for encoded fields of related threads
CN110175048A (zh) * 2019-05-15 2019-08-27 童先娥 一种指令处理方法及处理器
US11288072B2 (en) * 2019-09-11 2022-03-29 Ceremorphic, Inc. Multi-threaded processor with thread granularity
CN110995285B (zh) * 2019-12-27 2023-05-05 成都达安众科技有限公司 一种uhf rfid分步式指令解码方法及芯片
CN113805942A (zh) * 2021-08-23 2021-12-17 北京奕斯伟计算技术有限公司 处理器核、处理器及指令处理方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5303358A (en) * 1990-01-26 1994-04-12 Apple Computer, Inc. Prefix instruction for modification of a subsequent instruction
JP3505266B2 (ja) * 1995-06-15 2004-03-08 三洋電機株式会社 プログラム実行装置
US5905893A (en) * 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
GB2329495B (en) 1996-06-10 2000-09-20 Lsi Logic Corp An apparatus and method for detecting and decompressing instructions from a variable-length compressed instruction set
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
EP0942357A3 (en) 1998-03-11 2000-03-22 Matsushita Electric Industrial Co., Ltd. Data processor compatible with a plurality of instruction formats
JP3472504B2 (ja) * 1998-03-11 2003-12-02 松下電器産業株式会社 命令解読方法、命令解読装置及びデータ処理装置
JP4457474B2 (ja) * 2000-04-04 2010-04-28 ソニー株式会社 情報記録装置、情報再生装置、情報記録方法、情報再生方法、および情報記録媒体、並びにプログラム提供媒体
US6976152B2 (en) * 2001-09-24 2005-12-13 Broadcom Corporation Comparing operands of instructions against a replay scoreboard to detect an instruction replay and copying a replay scoreboard to an issue scoreboard
US7428631B2 (en) * 2003-07-31 2008-09-23 Intel Corporation Apparatus and method using different size rename registers for partial-bit and bulk-bit writes

Also Published As

Publication number Publication date
CN101720460B (zh) 2013-02-13
KR101528614B1 (ko) 2015-06-12
JP2010526383A (ja) 2010-07-29
US7676653B2 (en) 2010-03-09
US20080282066A1 (en) 2008-11-13
EP2145249A1 (en) 2010-01-20
JP5222941B2 (ja) 2013-06-26
WO2008138781A1 (en) 2008-11-20
CN101720460A (zh) 2010-06-02
EP2145249B1 (en) 2015-12-09

Similar Documents

Publication Publication Date Title
KR101528614B1 (ko) 콤팩트 명령 세트 인코딩
KR100236527B1 (ko) 벡터 레지스터의 복수 뱅크를 사용한 단일 명령복수 데이터 처 리
US5961628A (en) Load and store unit for a vector processor
US6058465A (en) Single-instruction-multiple-data processing in a multimedia signal processor
JP2931890B2 (ja) データ処理装置
EP1001335B1 (en) Data processing unit with coprocessor interface
CA2337172C (en) Method and apparatus for allocating functional units in a multithreaded vliw processor
US20020049894A1 (en) Method and apparatus for interfacing a processor to a coprocessor
US7401205B1 (en) High performance RISC instruction set digital signal processor having circular buffer and looping controls
JP2006004042A (ja) データ処理装置
US6950926B1 (en) Use of a neutral instruction as a dependency indicator for a set of instructions
EP1146420A1 (en) Method and apparatus for splitting packets in a multithreaded VLIW processor
US6925548B2 (en) Data processor assigning the same operation code to multiple operations
KR100267089B1 (ko) 스칼라/벡터연산이조합된단일명령복수데이터처리
US7340591B1 (en) Providing parallel operand functions using register file and extra path storage
US7024540B2 (en) Methods and apparatus for establishing port priority functions in a VLIW processor
US6681319B1 (en) Dual access instruction and compound memory access instruction with compatible address fields
EP0992892A1 (en) Compound memory access instructions
JP2004005738A (ja) データ処理装置及び命令セット拡張方法
JP2000029686A (ja) デ―タ処理装置及び命令フォ―マット
JP2000215059A (ja) 命令並列性検証装置付きプロセッサ

Legal Events

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

Payment date: 20180529

Year of fee payment: 4