KR20060009872A - 프로세싱 시스템, 이 프로세싱 시스템에 의해서인스트럭션의 집합을 수행하는 방법 및 컴파일러 프로그램제품 - Google Patents

프로세싱 시스템, 이 프로세싱 시스템에 의해서인스트럭션의 집합을 수행하는 방법 및 컴파일러 프로그램제품 Download PDF

Info

Publication number
KR20060009872A
KR20060009872A KR1020057020437A KR20057020437A KR20060009872A KR 20060009872 A KR20060009872 A KR 20060009872A KR 1020057020437 A KR1020057020437 A KR 1020057020437A KR 20057020437 A KR20057020437 A KR 20057020437A KR 20060009872 A KR20060009872 A KR 20060009872A
Authority
KR
South Korea
Prior art keywords
value
register file
program counter
processing system
instructions
Prior art date
Application number
KR1020057020437A
Other languages
English (en)
Other versions
KR101099828B1 (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 KR20060009872A publication Critical patent/KR20060009872A/ko
Application granted granted Critical
Publication of KR101099828B1 publication Critical patent/KR101099828B1/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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

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)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

인스트럭션으로 인코딩된 프로그램 정보에 기초해서 입력 데이터를 출력 데이터로 변환하는 데 프로그래밍 가능 프로세서가 사용된다. 최종 출력 데이터의 값은 무엇보다 주어진 시간의 프로세서의 순간 상태에 따라 달라진다. 이러한 상태는 레지스터에 저장된 일시적인 데이터 값, 예컨대 소위 플래그로 이루어진다. 플래그 원리의 단점은 이들이 프로세서, 특히 동시형 프로세서에 부작용을 일으킨다는 점이다. 그러나, 종래의 플래그의 컨셉을 제거하면, 남은 문제는 브랜칭의 구현이다. 본 발명에 따른 프로세싱 시스템은 수행 유닛(EX1, EX2)과, 데이터를 저장하는 제 1 레지스터 파일(RF1, RF2)과, 인스트럭션 메모리(PM)와, 프로그램 카운터를 저장하는 제 2 레지스터 파일(RF3)을 포함한다. 수행 유닛은 프로그램 카운터의 값을 제 2 레지스터 파일에 기록하는 전용 인스트럭션을 조건부로 수행한다. 그 결과 본 발명에 따른 프로세싱 시스템은 플래그를 사용하지 않고 조건부 브랜칭을 가능하게 할 수 있다.

Description

프로세싱 시스템, 이 프로세싱 시스템에 의해서 인스트럭션의 집합을 수행하는 방법 및 컴파일러 프로그램 제품{ZERO OVERHEAD BRANCHING AND LOOPING IN TIME-STATIONARY PROCESSORS}
본 발명은 전반적으로 디지털 처리의 개선에 관한 것이고, 더 상세하게는 병렬 처리의 루핑은 물론 조건부 브랜칭을 지원하는 방법, 장치 및 컴파일러에 관한 것이다.
프로그래밍 가능 프로세서가 사용되어서 인스트럭션에 인코딩된 프로그램 정보에 기초해서 입력 데이터를 출력 데이터로 변환시킨다. 결과로 나온 출력 데이터의 값은 입력 데이터, 프로그램 정보 및 임의의 시점의 프로세서의 순간적인 상태에 따라 달라진다. 종래의 프로세서에서, 이러한 상태는 예컨대 레지스터에 저장된 일시적인 데이터 값 및 소위 플래그로 이루어진다. 이들 플래그는 계산하는 동안 특정 라운딩 모드(rounding modes)를 설정하거나, 특정 동작의 세메틱(semantic)에 영향을 미치거나 프로그램 플로우를 변화시키는 데 사용되는 것이 통상적이다. 플래그는 통상적으로 특별한 플래그 레지스터에 저장되며, 여기서 플래 그는 하나 이상의 플래그를 변화시킬 수 있는 모든 인스트럭션 이후에 재기록된다. 프로세서 내에서 어떤 주어진 시점에 같은 플래그의 다양한 값을 활성화시키는 것은 통상적으로 불가능하다.
고성능 컴퓨팅을 증가시키기 위한 지속적인 요구가 있었으며, 이로 인해 동시 처리, 즉 일부 병행(parallelism)의 형태가 프로세서 아키텍쳐에 도입되는 몇가지 솔루션이 나타났다. 프로그램의 다수의 스레드가 동시에 수행되는 멀티스레딩 컨셉과, VLIW(Very Large Instruction Word) 컨셉의 2가지 주요 컨셉이 채택되었다. VLIW 프로세서의 경우에, 다수의 인스트럭션이 하나의 긴 인스트럭션, 이른바 VLIW 인스트럭션으로 패키지화된다. VLIW 프로세서는 다수의, 독립된 수행 유닛을 사용해서 이들 다수의 인스트럭션을 동시에 수행한다. 이 프로세서는 인스트럭션 레벨의 병행을 프로그램에서 사용할 수 있게 하며, 이로써 한번에 2개 이상의 인스트럭션을 수행할 수 있게 한다. 이러한 형태의 동시 처리로 인해서, 프로세서의 성능이 증가된다. 소프트웨어 프로그램이 VLIW 프로세서를 수행할 수 있도록 하기 위해서는, VLIW 인스트럭션의 세트로 변환되어야 한다. 컴파일러는 병행을 최적화시킴으로써 프로그램을 수행하는 데 필요한 시간을 최소화시키려 한다. 컴파일러는 하나의 VLIW 인스트럭션에 할당된 인스트럭션들은 동시에 수행될 수 있다는 제한 및 데이터 의존성(data dependency) 제한 하에서 인스트럭션들을 하나의 VLIW 인스트럭션으로 결합한다. 하나의 VLIW 인스트럭션의 동시 인스트럭션들을 인코딩하는 것은 코드 크기를 크게 증가시킨다. 코드 크기가 크면, 필요한 메모리 크기 및 필요한 메모리 대역폭 면에서 프로그램 메모리 비용을 증가시킨다. 최근 VLIW 프로세서에서는 코드 크기를 줄이기 위해서 다른 방식이 사용된다. 한가지 중요한 예는 데이터 정지(stationary) VLIW 프로세서의 NOP(no operation) 연산의 압축 표현으로 즉, NOP 연산은 VLIW 프로세서 앞에 부착된 특정 헤더의 하나의 비트에 의해 인코딩되며, 이로써 압축된 VLIW 인스트럭션을 생성한다.
프로세서의 데이터 파이프라인의 연산을 제어하기 위해서, 통상적으로 IEEE의 1997년 3월 회보의 vol.85, no.3, "Embedded software in real-time signal processing systems:design technologies"(G.Goossens, J.van Praet, D.Lanneer, W.Geurts, A.Kifli, C.Liem 및 P.Paulin)에 개시된 바와 같은 데이터 정지 인코딩 및 시간 정지 인코딩의 2개의 다른 메커니즘이 컴퓨터 아키텍쳐에서 사용되는 것이 통상적이다. 데이터 정지 인코딩의 경우에, 프로세서의 인스트럭션 세트의 일부인 모든 인스트럭션이, 데이터 파이프라인을 지나가는 특정 데이터 아이템에 대해서 수행되어야 하는 전체 연산의 시퀀스를 제어한다. 일단 인스트럭션이 프로그램 메모리로부터 페치되어서 디코딩되면, 프로세서 컨트롤러 하드웨어는 컴포징 연산(composing operations)이 정확한 머신 사이클에서 확실히 수행되게 할 것이다. 시간 정지 코딩의 경우에, 프로세서의 인스트럭션 세트의 일부인 모든 인스트럭션이 하나의 머신에서 수행되어야 하는 전체 연산의 세트를 제어한다. 이들 연산은 데이터 파이프라인을 지나는 다수의 서로 다른 데이터 아이템에 적용될 수 있다. 이 경우, 데이터 파이프라인을 설정하고 유지하는 것은 프로그래머 또는 컴파일러의 책임이다. 최종 파이프라인의 스케쥴은 머신 코드 프로그램에서 완전히 볼 수 있다. 시간 정지 인코딩은 애플리케이션 지정 프로세서에서 종종 수행되며, 이는 코드 크기가 커지는 대신 인스트럭션에 제공되는 제어 정보를 지연시키는 데 필요한 하드웨어의 오버헤드를 줄이기 때문이다. 데이터 정지 프로세서의 경우에, 점프 연산을 사용하지 않고도 연산의 조건부 수행이 구현될 수 있다. 그러나, 종래의 시간 정지 프로세서의 경우에 연산의 조건부 수행은 점프 연산을 사용하지 않고는 불가능했다. 종래의 출원에서 (EP 출원번호 03101038.2(대리인 정리 번호 : PHNL030384EPP), 점프 연산을 사용하지 않고 연산의 조건부 수행을 가능하게 하는 시간 정지 프로세서가 개시된다.
플래그 및 이들이 저장 및 갱신되는 원리의 단점은 프로세서에 이른바 부작용, 즉 프로그램에서 명시적으로(explicitly) 볼 수 없는 특성을 유발한다는 점이다. 대신 이러한 부작용은 같은 연산이 이전에 수행된 동작에 따라서 프로그램의 다른 부분에서 다른 세매틱을 나타낼 수 있다는 암시적인(implicit) 특성을 유발할 것이다. 플래그의 갱신이 프로그램에 의해서 더 양호하게 제어될수만 있다면, 프로그램이 더 효율적으로 될 수 있을 것이다. 예컨대, 브랜치가 감산에서 제로 출력에 대해 브랜치가 수행되어야 하는 경우에, 조건으로서 제로 플래그를 사용하는 브랜치가 사용될 수 있다. 그러나, 이 경우 감산 연산과 브랜치 연산 사이에서 제로 플래그를 변화시키지 않는 NOP이 스케쥴될 수 있다. 통상적으로 많은 연산이 플래그를 갱신시키기 때문에, 감산 연산은 종종 브랜치 연산 바로 전에 스케쥴링되어야 한다. 이러한 종류의 제한은 프로그램의 스케쥴의 자유도를 크게 제한하며, 이는 잠재적으로 더 효율적인 스케쥴을 제한한다. C 프로그래밍 언어와 같이 하이 레벨의 언어의 경우에 플래그가 강력한 컴파일러를 만드는 것을 더 힘들게 한다는 것이 일반적이다. 특히 VLIW 프로세서와 같은 동시 프로세서에서, 플래그는 추가적인 문제를 일으키며, 그 이유는 다수의 연산이 동시에 수행될 수 있는 경우에 플래그 레지스터를 갱신하기 위해서 어느 연산이 허용되어야 할지 불분명하기 때문이다. 이상적으로, 컴파일러 친밀형(compiler-friendly) VLIW 프로세서는 최소한의 부작용만을 유발한다. 종래의 플래그의 컨셉을 제거함으로써 이러한 부작용 중 상당 부분이 제거될 수 있다. 예컨대, 특수 라운딩 모드 또는 다른 특수 연산 세메틱이, 예컨대 통상의 add 인스트럭션의 데이터 입력에 이어지는 제 3의 데이터 입력으로서 취해진 올림수(carry)와의 가산을 위한 특수 add 인스트럭션과 같은 특수 op코드를 사용해서 구현될 수 있다. 이런식으로, 플래그가 데이터로서 처리된다. 그러나 플래그를 사용해서, 예컨대 제로 플래그를 취해서 동일 브랜치(a branch-on-equal)를 결정함으로써 통상적으로 처리되는 브랜칭을 구현하는 문제가 남아있다.
본 발명의 목적은 프로세서에서, 특히 동시형 프로세서에서 플래그를 사용하지 않고도 브랜칭 및 루핑을 사용할 수 있게 하는 것이다.
이러한 목적은 프로그램 카운터의 제어하에서 인스트럭션의 집합을 수행하도록 구성된 프로세싱 시스템에 의해 구현되며, 이 프로세싱 시스템은 수행 유닛과, 데이터를 저장하며 이 수행 유닛이 액세스 가능한 제 1 레지스터 파일과, 인스트럭션의 집합을 저장하는 프로그램 메모리와, 프로그램 카운터의 값을 저장하며 수행 유닛이 액세스 가능한 제 2 레지스터 파일을 포함하되, 여기서 수행 유닛은 프로그램 카운터의 값을 제 2 레지스터 파일에 기록하기 위한 전용 인스트럭션을 조건부로 수행하도록 구성된다. 계산 수단은 가산기, 승산기, 예컨대 AND, OR, XOR 등과 같은 논리 연산을 수행하는 수단, 검색표 연산, 메모리 액세스 등을 포함할 수 있다.
통상적인 인스트럭션의 순차 수행 동안, 프로그램 카운터의 값은 각각의 사이클마다 증가된다. 그러나, 인스트럭션을 수행하는 동안의 브랜칭 및 루핑으로 인해서 프로그램 카운터는 다음으로 수행될 목표 인스트럭션을 가리키도록 그 증분과는 다른 값으로 스위칭할 수 있어야 한다. 전용 인스트럭션을 조건부로 수행함으로써, 조건이 참인 경우에, 수행 유닛은 프로그램 카운터의 값을 제 2 레지스터 파일에 기록할 수 있습니다. 이 조건이 참이 아니라면, 프로그램 카운터의 값은 제 2 레지스터 파일에 기록되지 않는다. 전자의 경우에, 프로그램 카운터는 다음으로 수행될 브랜치 또는 루프 목표 인스트럭션을 가리킬 것이다. 후자의 경우에, 프로그램 카운터는 통상적으로 증가될 수 있으며, 브랜칭 또는 루핑은 수행되지 않는다. 그 결과, 조건부 브랜칭 및 루핑이 플래그 없이도 가능하다.
US 6,366,999는 VLIW 프로세서에서의 조건부 수행을 지원하는 방법 및 장치를 개시하고 있다. 수행 인스트럭션에 의해 생성된 조건 상태는 이른바 ACF(arithmetic condition flag)에 저장된다. ACF는 조건부 브랜칭 및 조건부 수행 모두에 사용된다. 더욱이, ACF는 인스트럭션 수행의 결과로서 설정되거나 상태 정보의 불 조합(Boolean combination)의 결과로서 수행된 상태 정보를 포함한다. 이들 ACF는 조건부 인스트럭션에 의해 지정되어서 사용될 수 있으며, 이로써 조건부 브랜치의 사용을 최소화한다. 그러나, 플래그를 사용하지 않고 프로세서에서 조건부 브랜칭을 수행하는 방법은 개시하지 않고 있으며, 또한 이러한 프로세서가 어떻게 구현되는지도 개시하지 않고 있다.
본 발명의 일실시예는 수행 유닛이 브랜치 조건을 평가하고, 후속해서 그 평가 결과를 가드로 사용해서 프로그램 카운터의 값을 제 2 레지스터 파일에 기록하는 제 1 전용 인스트럭션을 조건부로 수행하도록 구성되는 것을 특징으로 한다. 브랜치 조건은 미리 계산될 수 있으며, 전용 인스트럭션을 사용해서 프로그램 카운터의 값을 제 2 레지스터 파일에 조건부로 기록한다.
본 발명의 일 실시예는 수행 유닛이 제 2 전용 인스트럭션을 수행하도록 더 구성되는 것을 특징으로 하며. 이 제 2 전용 인스트럭션은 적어도 제 1 인수 및 제 2 인수를 가지며, 제 2 인수는 프로그램 카운터의 값이고, 여기서 제 2 전용 인스트럭션은 제 1 인수의 값에 따라서 프로그램 카운터의 값을 제 2 레지스터 파일에 기록하도록 구성된다. 제 1 인수는 브랜치 조건의 값 또는 임의의 다른 데이터 값이 될 수 있다. 이론상, 임의의 종류의 연산 및 임의의 종류의 수행 유닛이 이런식으로 프로그램 카운터 값을 변화시킬 수 있으며, 따라서 조건부 브랜칭 또는 루핑을 구현할 수 있다.
본 발명의 또 다른 실시예가 종속항에 개시되어 있다. 본 발명에 따라서, 이러한 처리 시스템을 프로그래밍하는 방법 및 컴퓨터 시스템에서 수행될 때 프로세싱 시스템을 프로그래밍하기 위해서 이러한 방법의 모든 단계를 구현하도록 구성된 컴파일러 프로그램 제품이 개시된다.
도 1은 본 발명에 따른 제 1 VLIW 프로세서의 개략 블록도,
도 2는 본 발명에 따른 제 2 VLIW 프로세서의 개략 블록도.
도 1 및 도 2를 참조하면, 개략 블록도는 복수의 수행 유닛(EX1, EX2)을 포함한 시간 정지 VLIW 프로세서 및 레지스터 파일(RF1, RF2)을 포함한 분산 레지스터 파일을 도시하고 있다. 레지스터 파일(RF1, RF2)은 레지스터 파일로부터 입력 데이터(ID)를 수집하기 위해서 수행 유닛(EX1, EX2)에 의해 각각 액세스될 수 있다. 수행 유닛(EX1, EX2)은 통신 네트워크(CN) 및 멀티플렉서(MP1, MP2)를 통해서 레지스터 파일(RF1, RF2)에도 연결되어서 수행 유닛으로부터의 결과 데이터(RD1, RD2)를 기록 데이터(WD1, WD2)로서 분산 레지스터 파일로 전송한다. 이 프로세서는 프로그램 카운터(PC)의 값을 저장하는 레지스터 파일(RF3)을 더 포함한다. 수행 유닛(EX2)은 통신 네트워크(CN) 및 멀티플렉서(MP3, MP4)를 통해서 레지스터 파일(RF3)에 연결되어서 결과 데이터(RD2)를 기록 데이터(WD3)로서 레지스터 파일(RF3)에 기록한다. 수행 유닛(EX2)은 수행 유닛(EX2)과 레지스터 파일(RF3) 사이의 직접 접속을 통해서 프로그램 카운터(PC)의 값도 레지스터 파일(RF3)로부터 판독할 수 있다. 컨트롤러(CTR)는 레지스터 파일(RF3)로부터 프로그램 카운터(PC)의 값을 판독한다. 이 프로그램 카운터의 값은 프로그램 메모리(PM)의 어드레스를 가리키며, 여기에는 다음으로 수행될 인스트럭션이 저장된다. 프로그램 카운터(PC)의 값을 사용해서, 컨트롤러(CTR)는 프로그램 메모리(PM)로부터 인스트럭션(IN)을 페치한다. 인스트럭션(IN)은 인스트럭션 레지스터(IR)에 저장된다. 이어서 인스트럭션(IN)은 컨트롤러(CTR)에 의해서 인스트럭션 레지스터(IR)로부터 검색되고, 컨트롤러(CTR)는 인스트럭션(in)을 디코딩한다. 컨트롤러(CTR)는 또한 유닛(INCR)을 사용해서 레지스터 파일(RF3)로부터 판독된 프로그램 카운터(PC)의 값을 증가시키고, 증가된 프로그램 카운터(PC)의 값을 멀티플렉서(MP4)로 전송한다. 멀티플렉서(MP4)를 통해서, 기록 가능 인덱스(WE3)의 값에 따라서, 증가된 프로그램 카운터(PC)의 값 또는 기록 데이터(WD3)에 대응하는 프로그램 카운터의 값이 레지스터 파일(RF3)에 저장된다. 기록 가능 인덱스(WE3)가 참인 경우에, 기록 데이터(WD3)에 대응하는 프로그램 카운터의 값은 레지스터 파일(RF3)에 기록되고, 참이 아닌 경우에 증가된 프로그램 카운터(PC)의 값이 레지스터 파일(RF3)에 기록된다. 일반적으로 수행되는 인스트럭션은 2개의 오퍼랜드만을 필요로 하고, 1개의 결과만을 생성하는 RISC와 같은 연산 및 3개 이상의 오퍼랜드를 소비할 수 있고 2개 이상의 결과를 생성할 수 있는 통상의 연산을 포함한다. 일부 인스트럭션은 오퍼랜드 데이터로서 작거나 혹은 큰 중간 값을 요구할 수 있다. 디코딩 단계의 결과는 기록 선택 인덱스(WS1, WS2, WS3), 기록 레지스터 인덱스(WR1, WR2), 판독 레지스터 인덱스(RR1, RR2), 연산 유효 인덱스(OPV1, OPV2) 및 op코드(OC1, OC2)이다. 컨트롤러(CTR)와 멀티플렉서(MP1, MP2, MP3) 사이의 연결을 통해서, 기록 선택 인덱스(WS1, WS2, WS3)가 멀티플렉서(MP1, MP2, MP3)에 각각 제공된다. 기록 선택 인덱스(WS1, WS2, WS3)는 대응하는 멀티플렉스에 의해서 레지스터 파일(RF1, RF2, RF3)에 기록될 데이터(WD1, WD2, WD3)용 통신 네트워크(CN)로부터 필요한 입력 채널을 선택하기 위해서 사용된다. 기록 선택 인덱스(WS1, WS2, WS3)는 대응하는 레지스터 파일(RF1, RF2 또는 RF3)에 데이터(WD1, WD2, WD3)를 실제로 기록하게 하거나 불가능하게 하는데 사용되는 기록 가능 인덱스(WE1, WE2, WE3)용 통신 네트워크(CN)로부터 인력 채널을 선택하기 위해서 대응 멀티플렉서에 의해 사용된다. 컨트롤러(CTR)는 기록 레지스터 인덱스(WR1, WR2)를 각각 제공하는 레지스터 파일(RF1, RF2)에 연결되어서 레지스터 파일로부터 데이터가 기록될 대응하는 레지스터를 선택한다. 컨트롤러(CTR)는 판독 레지스터 인덱스(RR1, RR2)를 레지스터 파일(RF1, RF2)에 각각 제공해서, 대응하는 레지스터 파일로부터 입력 데이터(ID)가 수행 유닛(EX1, EX2)에 의해 각각 판독될 레지스터를 선택한다. 레지스터 파일(RF3)은 하나의 레지스터만을 갖고 있어서, 판독 레지스터 인덱스나 기록 레지스터 인덱스를 필요로 하지 않는다. 컨트롤러(CTR)는 수행 유닛(EX1, EX2)에 연결되어서, 수행 유닛(EX1, EX2)이 대응하는 입력 데이터(ID)에 대해서 수행할 연산의 종류를 정의하는 op코드(OC1, OC2)를 각각 제공한다. 연산 유효 인덱스(OPV1, OPV2)도 수행 유닛(EX1, EX2)에 각각 제공되며, 이들 인덱스는 유효 연산이 대응하는 op코드(OC1, OC2)에 의해 정의되었는지 여부를 나타낸다. 연산 유효 인덱스(OPV1, OPV2)의 값은 VLIW 인스트럭션을 디코딩하는 동안 결정된다. 컨트롤러는 기록 선택 인덱스(WS1, WS2, WS3)를 디코딩 이후에 프로그램으로부터 획득하고, 기록 선택 인덱스를 대응하는 멀티플렉서(MP1, MP2 또는 MP3)에 직접 제공한다.
도 1을 참조하면, 컨트롤러(CTR)는 레지스터(105)에 연결된다. 컨트롤러(CTR)는 디코딩 단계 동안 프로그램으로부터 연산 유효 인덱스(OPV1, OPV2)를 획득하고, 이들 연산 유효 인덱스(OPV1, OPV2)는 레지스터(105)에 제공된다. 인코딩된 연산이 NOP 연산인 경우에, 연산 유효 인덱스는 거짓으로 설정되고, 그렇지 않으면, 참으로 설정된다. 연산 유효 인덱스(OPV1, OPV2)는 레지스터(105, 107, 109)를 사용해서 대응하는 수행 유닛(EX1, EX2)의 파이프라인에 따라서 지연된다. 다른 실시예에서는 대응하는 수행 유닛의 파이프라인 깊이에 따라서 다른 수의 레지스터가 제공될 수 있다. 수행 유닛(EX1, EX2)에 의해서 연산이 수행된 이후에, 각각 op코드(OC1, OC2)에 의해 정의된 바에 따라서, 대응하는 결과 데이터(RD1, RD2) 및 대응하는 출력 유효 인덱스(OV1, OV2)가 생성된다. 출력 유효 인덱스(OV1, OV2)는 대응하는 결과 데이터(RD1 또는 RD2)가 유효하면 참이고, 유효하지 않으면 거짓이다. 유닛(101)은 지연된 연산 유효 인덱스(OPV1) 및 출력 유효 인덱스(OV1)에 대해서 논리 AND를 수행해서 결과 유효 인덱스(RV1)를 생성한다. 유닛(103)은 지연된 연산 유효 인덱스(OPV2) 및 출력 유효 인덱스(OV2)에 대해서 논리 AND를 수행해서 결과 유효 인덱스(RV2)를 생성한다. 유닛(101, 103)은 부분적으로 접속된 네트워크(CN)를 통해서 결과 유효 인덱스(RV1, RV2)를 멀티플렉서(MP1, MP2)에 전송하도록 모두 멀티플렉서(MP1, MP2)에 연결된다. 유닛(103)만이 결과 유효 인덱스(RV2)를 멀티플렉서(MP3)에 전송하도록 부분적으로 접속된 네트워크(CN)를 통해서 멀티플렉서(MP3)에 연결된다. 기록 선택 인덱스(WS1, WS2)는 접속 네트워크 (CN)로부터 결과 데이터가 각각 기록 데이터(WD1 또는 WD2)로서 대응하는 레지스터 파일에 기록될 때 나오는 채널을 선택하기 위해서 대응하는 멀티플렉서(MP1, MP2)에 의해 사용된다. 결과 데이터 채널이 멀티플렉서(MP1 또는 MP2)에 의해 선택되는 경우에, 결과 데이터(RD1, RD2)를 레지스터 파일(RF1, RF2)에 각각 기록하는 것을 제어하기 위해서 결과 유효 인덱스(RV1, RV2)가 기록 가능 인덱스(WE1, WE2)를 설정하는 데 사용된다. 멀티플렉서(MP1 또는 MP2)가 결과 데이터(RD1)에 대응하는 입력 채널을 선택한 경우, 결과 유효 인덱스(RV1)가 그 멀티플렉서에 대응하는 기록 가능 인덱스를 설정하는 데 사용되고, 결과 데이터(RD2)에 대응하는 입력 채널이 선택된 경우, 결과 유효 인덱스(RV2)가 대응하는 기록 가능 인덱스를 설정하는 데 사용된다. 멀티플렉서(MP3)가 결과 데이터(RD2)에 대응하는 입력 채널을 선택한 경우, 결과 유효 인덱스(RV2)가 기록 데이터(WD3)를 레지스터 파일(RF3)로 저장하는 것을 제어하기 위해서 기록 가능 인덱스(WE3)를 설정하는 데 사용된다. 기록 유효 인덱스(RV1 또는 RV2)가 참이면, 적절한 기록 가능 인덱스(WE1, WE2 또는 WE3)가 대응하는 멀티플렉서(MP1, MP2, MP3)에 의해서 참으로 설정된다. 기록 가능 인덱스(WE1 또는 WE2)가 참인 경우, 결과 데이터(RD1 또는 RD2)는 그 레지스터 파일에 대응하는 기록 레지스터 인덱스(WR1 또는 WR2)를 통해서 선택된 레지스터에서, 레지스터 파일(RF1 또는 RF2)에 기록된다. 기록 레지스터 인덱스(WR1 또는 WR2)가 거짓으로 설정된 경우에, 대응하는 기록 선택 인덱스(WS1 또는 WS2)를 통해서 데이터를 대응하는 레지스터 파일(RF1 또는 RF2)에 기록할 입력 채널이 선택되었더라도, 데이터는 레지스터 파일에 기록되지 않을 것이다. 기록 가능 인덱스 (WE3)가 참으로 설정된 경우에, 멀티플렉서(MP4)는 대응하는 기록 데이터(WD3)를 입력으로서 선택하고, 결과 데이터(RD2)가 레지스터 파일(RF3)에 기록된다. 기록 가능 인덱스(WE3)가 거짓으로 설정된 경우에, 멀티플렉서(MP4)는 프로그램 카운터(PC)에 대응하는 채널을 입력으로서 선택하고, 프로그램 카운터(PC)의 값은 레지스터 파일(RF3)에 기록된다. 레지스터 파일(RF1, RF2, RF3)의 주어진 기록 포트를 통해서 각각 임의의 결과 데이터(RD1 또는 RD2)를 재기록하는 것을 차단하기 위해서, 그 레지스터 파일에 대응하는 기록 선택 인덱스(WS1, WS2 또는 WS3)는 대응하는 멀티플렉서(MP1, MP2 또는 MP3)로부터의 디폴트 입력(111)을 선택하는 데 사용될 수 있으며, 이 경우 대응하는 기록 가능 인덱스(WE1, WE2 또는 WE3)는 거짓으로 설정된다.
도 2를 참조하면, 컨트롤러(CRT)는 논리 유닛(201, 205)에 연결된다. 컨트롤러(CRT)는 디코딩 단계 동안 프로그램으로부터 연산 유효 인덱스(OPV1, OPV2)를 수집하고, 이들 연산 유효 인덱스(OPV1, OPV2)는 논리 유닛(201, 205)에 각각 제공된다. 인코딩된 연산이 NOP 연산인 경우에, 연산 유효 인덱스는 거짓으로 설정되고, 그렇지 않으면, 참으로 설정된다. 레지스터 파일(RF1, RF2)은 유닛(201, 205)에 각각 연결되어서, 대응하는 가드(GU1, GU2)의 값이 레지스터 파일(RF1, RF2)로부터 유닛(201, 205)으로 각각 기록될 수 있다. 가드(GU1, GU2)는 그 가드를 나타내는 데이터의 값이 결정되는 동안의 연산 결과에 기초해서 참 또는 거짓으로 설정될 수 있다. 유닛(201, 205)은 대응하는 연산 유효 인덱스(OPV1 또는 OPV2) 및 대응하는 가드(GU1 또는 GU2)에 대해서 논리 AND를 수행한다. 결과 인덱스는 레지스 터(209, 211, 213)를 사용해서 대응하는 수행 유닛(EX1, EX2)의 파이프라인에 따라서 지연된다. 각각 op코드(OC1, OC2)에 의해 정의된 바에 따라서, 수행 유닛(EX1, EX2)에 의해 연산이 각각 수행된 이후에 대응하는 결과 데이터(RD1, RD2) 및 대응하는 출력 유효 인덱스(OV1, OV2)가 생성된다. 대응하는 결과 데이터(RD1 또는 RD2)가 유효 출력 데이터인 경우에는 출력 유효 인덱스(OV1, OV2)는 참이고, 그렇지 않으면 거짓이다. 유닛(203)은 가드(GU1)로부터 나온 지연된 인덱스, 연산 유효 인덱스(OPV1) 및 출력 유효 인덱스(OV1)에 대해서 논리 AND를 수행해서 결과 유효 인덱스(RV1)를 생성한다. 유닛(207)은 가드(GU2)로부터 나온 지연된 인덱스, 연산 유효 인덱스(OPV2) 및 출력 유효 인덱스(OV2)에 대해서 논리 AND를 수행해서 결과 유효 인덱스(RV2)를 생성한다. 유닛(203, 207)은 각각 부분적으로 접속된 네트워크(CN)를 통해서 결과 유효 인덱스(RV1, RV2)를 멀티플렉서(MP1, MP2)에 전송하도록 멀티플렉서(MP1, MP2)에 연결된다. 유닛(207)만이 결과 유효 인덱스(RV2)를 멀티플렉서(MP3)에 전송하도록 부분적으로 접속된 네트워크(CN)를 통해서 멀티플렉서(MP3)에 연결된다. 기록 선택 인덱스(WS1, WS2)는 접속 네트워크(CN)로부터 결과 데이터가 각각 기록 데이터(WD1 또는 WD2)로서 대응하는 레지스터 파일에 기록될 때 나오는 채널을 선택하기 위해서 대응하는 멀티플렉서(MP1, MP2)에 의해 사용된다. 결과 데이터 채널이 멀티플렉서에 의해 선택되는 경우에, 결과 데이터(RD1, RD2)를 레지스터 파일(RF1, RF2)에 각각 기록하는 것을 제어하기 위해서 결과 유효 인덱스(RV1, RV2)가 기록 가능 인덱스(WE1, WE2)를 설정하는 데 사용된다. 멀티플렉서(MP1 또는 MP2)가 결과 데이터(RD1)에 대응하는 입력 채널을 선택한 경 우, 결과 유효 인덱스(RV1)가 그 멀티플렉서에 대응하는 기록 가능 인덱스를 설정하는 데 사용되고, 결과 데이터(RD2)에 대응하는 입력 채널이 선택된 경우, 결과 유효 인덱스(RV2)가 대응하는 기록 가능 인덱스를 설정하는 데 사용된다. 멀티플렉서(MP3)가 결과 데이터(RD2)에 대응하는 입력 채널을 선택한 경우, 결과 유효 인덱스(RV2)가 기록 데이터(WD3)를 레지스터 파일(RF3)로 저장하는 것을 제어하기 위해서 기록 가능 인덱스(WE3)를 설정하는 데 사용된다. 기록 유효 인덱스(RV1 또는 RV2)가 참이면, 적절한 기록 가능 인덱스(WE1, WE2 또는 WE3)가 대응하는 멀티플렉서(MP1, MP2, MP3)에 의해서 참으로 설정된다. 기록 가능 인덱스(WE1 또는 WE2)가 참인 경우, 결과 데이터(RD1 또는 RD2)는 그 레지스터 파일에 대응하는 기록 레지스터 인덱스(WR1 또는 WR2)를 통해서 선택된 레지스터에서, 레지스터 파일(RF1 또는 RF2)에 기록된다. 기록 레지스터 인덱스(WR1 또는 WR2)가 거짓으로 설정된 경우에, 대응하는 기록 선택 인덱스(WS1 또는 WS2)를 통해서 데이터를 대응하는 레지스터 파일(RF1 또는 RF2)에 기록할 입력 채널이 선택되었더라도, 데이터는 레지스터 파일에 기록되지 않을 것이다. 기록 가능 인덱스(WE3)가 참으로 설정된 경우에, 멀티플렉서(MP4)는 대응하는 기록 데이터(WD3)를 입력으로서 선택하고, 결과 데이터(RD2)가 레지스터 파일(RF3)에 기록된다. 기록 가능 인덱스(WE3)가 거짓으로 설정된 경우에, 멀티플렉서(MP4)는 프로그램 카운터(PC)에 대응하는 채널을 입력으로서 선택하고, 프로그램 카운터(PC)의 값은 레지스터 파일(RF3)에 기록된다. 기록 가능 인덱스(WE3)가 거짓으로 설정된 경우에, 멀티플렉서(MP4)는 프로그램 카운터(PC)에 대응하는 채널을 입력으로서 선택하고, 프로그램 카운터(PC)의 값은 레 지스터 파일(RF3)에 기록된다. 레지스터 파일(RF1, RF2) 또는 레지스터 파일(RF3)의 각각의 주어진 기록 포트를 통해서 각각 임의의 결과 데이터(RD1 또는 RD2)를 재기록하는 것을 차단하기 위해서, 그 레지스터 파일에 대응하는 기록 선택 인덱스(WS1, WS2 또는 WS3)는 대응하는 멀티플렉서(MP1 또는 MP2)로부터의 디폴트 입력(215)을 선택하는 데 사용될 수 있으며, 이 경우 대응하는 기록 가능 인덱스(WE1, WE2 또는 WE3)는 거짓으로 설정된다.
도 1 및 도 2에 따른 시간 정지 VLIW 프로세서는 레지스터 파일(RF1, RF2, RF3)에 결과 데이터를 재기록하는 것을 동적으로 제어할 수 있다. 수행된 연산의 결과 데이터가 레지스터 파일(RF1, RF2, RF3)에 재기록되어야 할지 여부가 수행 시간 동안 결정될 수 있다. 그 결과, 연산의 조건부 수행은 인스트럭션의 시간 정지 인코딩을 사용하면서 이들 프로세서에 의해 구현될 수 있다.
본 발명에 따른 프로세서에 의해 수행될 프로그램 코드의 일부의 예가 이하 제공될 것이다. 각각의 라인은 하나의 VLIW 인스트럭션을 나타내며, 이는 예컨대 인스트럭션(A0, A1)을 포함하는 VLIW 인스트럭션과 같이 동시에 수행될 수 있는 선언문(statement)을 포함할 수 있다. 이러한 프로그램 코드에서, 문자(A0, A1, B0, B1, C0, C1)는 인스트럭션을 나타내고, Z 및 P는 변수를 나타내며, X는 참 또는 거짓이 될 수 있는 조건을 나타낸다. L1은 프로그램 메모리(PM)의 어드레스를 나타낸다. 약자 bra는 브랜치 인스트럭션을 나타내고, 이는 조건부 브랜칭에 사용되는 전용 인스트럭션이다.
...
A0,A1;
Z = bra(X, P);
B0, B1;
...
L1: C0,C1;
...
프로그램 코드는 다음과 같이 본 발명에 따라서 프로세서에 의해 수행될 수 있다. 도 1을 참조하면, 컨트롤러(CTR)는 VLIW 인스트럭션을 디코딩해서, 결과로 나온 기록 선택 인덱스(WS1, WS2, WS3)를 대응하는 멀티플렉서(MP1, MP2, MP3)로 전송하고, 기록 레지스터 인덱스(WR1, WR2) 및 판독 레지스터 인덱스(RR1, RR2)는 대응하는 레지스터 파일(RF1, RF2)로 전송하며, 연산 코드(OC1, OC2)는 대응하는 수행 유닛(EX1, EX2)으로 전송하고, 연산 유효 인덱스(OPV1, OPV2)는 대응하는 레지스터(105)로 전송한다. 이들 연산 유효 인덱스(OPV1, OPV2)는 "참"이다. 인스트럭션이 수행 유닛(EX1 또는 EX2)에 의해 수행되어서 조건의 값(X)을 결정한다. 이 인스트럭션은 결과적인 "참"을 생성하고, 그 결과는 레지스터 파일(RF2)에 저장된다. 파라미터 P의 값은 레지스터 파일(RF2)에 저장된다. 파라미터 P의 값은 프로그램 카운터의 값으로, 조건부 브랜치를 수행할 때 수행될 인스트럭션이 저장되는 프로그램 메모리의 어드레스, 즉 프로그램 메모리 어드레스(L1)를 나타낸다. 프로그램을 컴파일하는 동안, 컴파일러는 이 값이 파라미터 P에 확실히 할당되게 한다. 브랜치 인스트럭션(bra)은 수행 유닛(EX2)에 의해 수행된다. 조건 X 및 파라미터 P의 값은 수행 유닛(EX2)에 의해서 입력 데이터(ID)로서 수신된다. 인스트럭션(bra)을 수행하는 동안, 조건 X의 값은 수행 유닛(EX2)에 의해 평가되고, 이 값이 참이면 출력 유효 인덱스(OV2)는 참으로 설정된다. 조건 X의 값이 거짓인 경우에, 출력 유효 인덱스(OV2)는 거짓으로 설정된다. 이 예에서, 조건 X의 값은 참이고, 따라서 출력 유효 인덱스(OV2)의 값도 참으로 설정된다. 따라서, 수행 유닛(EX2)은 파라미터 P의 값을 파라미터 Z에 할당하고, 즉 파라미터 Z는 조건부 브랜치를 수행할 때 수행될 인스트럭션이 저장되는 프로그램 메모리의 어드레스를 나타내는 프로그램 카운터의 값과 같다. 유닛은 인스트럭션(bra)에 대응하는 연산 유효 인덱스(OPV2) 및 출력 유효 인덱스(OV2)에 대해서 논리 AND를 수행한다. 연산 유효 인덱스(OPV2)의 값이 참이기 때문에, 최종으로 나온 결과 유효 인덱스(RV2)도 참이다. 파라미터 Z의 값의 형태인 결과 유효 인덱스(RV2) 및 결과 데이터(RD2)가 부분적으로 접속된 네트워크(CN)를 통해서 멀티플렉서(MP1, MP2, MP3)로 전송된다. 기록 선택 인덱스(WS3)를 사용해서 멀티플렉서(MP3)는 결과 데이터(RD2)에 대응하는 채널을 입력 채널로서 선택한다. 멀티플렉서(MP3)는 기록 가능 인덱스(WE3)를 결과 유효 인덱스(RV2)를 사용해서 참으로 설정하고, 파라미터 Z의 값이 기록 데이터(WD3)로서 멀티플렉서(MP4)에 기록된다. 기록 가능 인덱스(WE3)가 참이기 때문에 멀티플렉서(MP4)는 WD3에 대응하는 채널을 입력 채널로서 선택한다. 이후에, 파라미터 Z의 값, 즉 프로그램 카운터(PC)의 값이 레지스터 파일(RF3)에 기록된다. 그 결과, 레지스터 파일(RF3)에 저장된 프로그램 카운터는 프로그램 메모리 어드레 스(L1)를 가리키고, 인스트럭션(C0, C1)을 포함해서 그 어드레스에 저장된 VLIW 인스트럭션은 다음 사이클에서 프로그램 메모리(PM)로부터 페치되고 후속해서 디코딩되고 수행된다.
조건 X가 거짓이면, 출력 유효 인덱스(OV2)도 거짓으로 설정된다. 유닛(103)은 인스트럭션(bra)에 대응하는 연산 유효 인덱스(OPV2) 및 출력 유효 인덱스(OV2)에 대해서 논리 AND를 수행한다. 연산 유효 인덱스(OPV2)가 참이여도, 출력 유효 인덱스(OV2)가 거짓이기 때문에 최종으로 나온 결과 유효 인덱스(RV2)는 거짓이다. 파라미터 Z의 값의 형태인 결과 유효 인덱스(RV2) 및 결과 데이터(RD2)가 부분적으로 접속된 네트워크(CN)를 통해서 멀티플렉서(MP1, MP2, MP3)로 전송된다. 기록 선택 인덱스(WS3)를 사용해서 멀티플렉서(MP3)는 결과 데이터(RD2)에 대응하는 채널을 입력 채널로서 선택한다. 멀티플렉서(MP3)는 기록 가능 인덱스(WE3)를 결과 유효 인덱스(RV2)를 사용해서 거짓으로 설정하고, 파라미터 Z의 값이 기록 데이터(WD3)로서 멀티플렉서(MP4)에 기록된다. 그러나, 기록 가능 인덱스(WE3)의 값이 참이기 때문에, 멀티플렉서(MP4)는 프로그램 카운터(PC)에 대응하는 채널을 입력 채널로서 선택한다. 이후에, 파라미터 Z의 값, 즉 프로그램 카운터(PC)의 값이 레지스터 파일(RF3)에 기록된다. 그 결과, 레지스터 파일(RF3)에 저장된 프로그램 카운터는 프로그램 메모리 어드레스(L1)를 가리키고, 인스트럭션(C0, C1)을 포함해서 그 어드레스에 저장된 VLIW 인스트럭션은 다음 사이클에서 프로그램 메모리(PM)로부터 페치되고 후속해서 디코딩되고 수행된다. 이후에, 조건부 브랜치 인스트럭션(bra)의 파라미터 Z와 같은 프로그램 카운터의 값이 아닌, 증가된 프로그램 카운 터(PC)의 값이 레지스터 파일(RF3)에 기록된다. 그 결과, 다음 사이클에서, 선언문(B0, B1)을 포함하는 VLIW 인스트럭션이 프로그램 메모리(PM)로부터 페치되고, 후속해서 디코딩되고 수행된다.
본 발명에 따른 프로세서에 의해 수행될 프로그램 코드의 일부의 다른 예가 이하 제공될 것이다. 이러한 프로그램 코드에서, 문자(A0, A1, B0, B1, C0, C1)는 인스트럭션을 나타내고, Z는 변수를 나타내며, X는 참 또는 거짓이 될 수 있는 조건을 나타낸다. L1은 프로그램 메모리(PM)의 어드레스를 나타낸다. 각각의 라인은 예컨대, 인스트럭션(A0, A1)을 포함하는 VLIW 인스트럭션과 같이 하나의 VLIW 인스트럭션을 나타내고, 이는 동시에 수행될 수 있는 선언문을 포함할 수 있다.
...
A0, A1;
if (X)Z= jmp L1;
B0, B1;
...
L1 : C0, C1;
...
도 2를 참조하면, 컨트롤러(CTR)는 VLIW 인스트럭션을 디코딩해서, 결과로 나온 기록 선택 인덱스(WS1, WS2, WS3)를 대응하는 멀티플렉서(MP1, MP2, MP3)로 전송하고, 기록 레지스터 인덱스(WR1, WR2) 및 판독 레지스터 인덱스(RR1, RR2)는 대응하는 레지스터 파일(RF1, RF2)로 전송하며, 연산 코드(OC1, OC2)는 대응하는 수행 유닛(EX1, EX2)으로 전송하고, 연산 유효 인덱스(OPV1, OPV2)는 대응하는 유닛(201, 205)으로 전송한다. 이들 연산 유효 인덱스(OPV1, OPV2)는 "참"이다. 인스트럭션이 수행 유닛(EX1 또는 EX2)에 의해 수행되어서 조건의 값(X)을 결정한다. 이 인스트럭션은 결과적인 "참"을 생성하고, 그 결과는 레지스터 파일(RF2)에 저장된다. 유닛(205)은 조건 X의 값도 대응하는 가드(GU2)로서 수신해서, 가드(GU2) 및 연산 유효 인덱스(OPV2)의 논리 AND를 수행한다. 가드(GU2)와 연산 유효 인덱스(OPV2) 모두 참이기 때문에 유닛(205)은 결과로 "참"을 생성할 것이다. 선언문 Z = jmp L1 이 수행 유닛(EX2)에 의해 수행되는 동안, 즉 프로그램 카운터(L1)의 값이 파라미터(Z)에 할당되는 동안, 논리 AND의 결과가 수행 유닛(EX2)의 레지스터(209, 211, 213)를 통해서 클로킹된다. 출력 유효 인덱스(OV2)는 참이다. 유닛(207)은 출력 유효 인덱스(OV2) 및 유닛(205)에 의해 수행되는 논리 AND의 결과에 대한 논리 AND를 수행할 것이다. 논리 AND의 결과는 참이 될 것이고, 따라서, 결과 유효 인덱스(RV2)는 참일 것이다 부분적으로 접속된 네트워크(CN)를 통해서 결과 유효 인덱스(RV2)의 값 및 대응하는 결과 데이터(RD2)의 값, 즉 파라미터 Z의 값이 멀티플렉서(MP1, MP2, MP3)로 전송된다. 기록 선택 인덱스(WS3)를 사용해서 멀티플렉서(MP3)는 결과 데이터(RD2)에 대응하는 입력 채널을 선택한다. 기록 가능 인덱스(WE3)는 후속해서 결과 유효 인덱스(RV2)를 사용해서 참으로 설정하고, 결과 데이터(RD2)는 기록 데이터(WD3)로서 멀티플렉서(MP4)에 기록된다. 기록 가능 인덱스(WE3)의 값이 참이기 때문에, 멀티플렉서(MP4)는 WD3에 대응하는 채널을 입력 채널로 선택한다. 이후에, 파라미터 Z의 값, 즉 프로그램 카운터(PC)의 값이 레지스터 파일(RF3)에 기록된다. 그 결과, 다음 사이클에서 인스트럭션(C0, C1)을 포함하는 VLIW 인스트럭션이 프로그램 메모리(PM)로부터 페치되고 후속해서 디코딩되고 수행된다.
조건 X가 거짓이면, 가드(GU2)의 값도 거짓으로 설정된다. 유닛(205)은 가드(GU2) 및 연산 유효 인덱스(OPV2)에 대해서 논리 AND를 수행한다. 가드(GU2)가 거짓이기 때문에 유닛(205)은 결과로서 "거짓"을 생성할 것이다. 선언문 Z = jmp L1 이 수행 유닛(EX2)에 의해 수행되는 동안, 즉 프로그램 카운터(L1)의 값이 파라미터(Z)에 할당되는 동안, 논리 AND의 결과가 수행 유닛(EX2)의 레지스터(209, 211, 213)를 통해서 클로킹된다. 출력 유효 인덱스(OV2)는 참이다. 유닛(207)은 출력 유효 인덱스(OV2) 및 유닛(205)에 의해 수행되는 논리 AND의 결과에 대한 논리 AND를 수행할 것이다. 논리 AND의 결과는 참이 될 것이고, 따라서, 결과 유효 인덱스(RV2)는 참일 것이다 부분적으로 접속된 네트워크(CN)를 통해서, 결과 유효 인덱스(RV2)의 값 및 대응하는 결과 데이터(RD2)의 값, 즉 파라미터 Z의 값이 멀티플렉서(MP1, MP2, MP3)로 전송된다. 기록 선택 인덱스(WS3)를 사용해서 멀티플렉서(MP3)는 결과 데이터(RD2)에 대응하는 입력 채널을 선택한다. 기록 가능 인덱스(WE3)는 후속해서 결과 유효 인덱스(RV2)를 사용해서 거짓으로 설정되고, 결과 데이터(RD2)는 기록 데이터(WD3)로서 멀티플렉서(MP4)에 기록된다. 기록 가능 인덱스(WE3)의 값이 거짓이기 때문에, 멀티플렉서(MP4)는 프로그램 카운터(PC)에 대응하는 채널을 입력 채널로 선택한다. 이후에, 파라미터 Z와 같은 프로그램 카운터의 값이 아닌 증가된 프로그램 카운터(PC)의 값이 레지스터 파일(RF3)에 기록된다. 다음 사이클에서 인스트럭션(B0, B1)을 포함하는 VLIW 인스트럭션이 프로그램 메모리(PM)로부터 페치되고 후속해서 디코딩되고 수행된다.
이들 실시예는 본 발명이 플래그를 필요로 하지 않고 조건부 브랜칭을 수행할 수 있게 한다는 것을 보여준다. 브랜치 조건은 미리 계산될 수 있으며, 프로그램 카운터의 새로운 값을 레지스터 파일(RF3)에 기록하는 동작을 조건부로 수행하도록 가드로서 사용되거나 프로그램 카운터의 새로운 값을 레지스터 파일(RF3)로 기록하는 조건부 동작의 인수로서 사용된다. 브랜치 조건이 참인 경우에, 프로그램 카운터(PC)의 새로운 값이 레지스터 파일(RF3)에 기록된다. 컨트롤러(CTR)는 레지스터 파일(RF3)에 저장된 프로그램 카운터의 값을 판독하고, 이 값을 사용해서 프로그램 메모리(PM)로부터의 인스트럭션을 페치한다. 컨트롤러(CTR)는 프로그램 카운터의 값도 증가시킨다. 증가된 프로그램 카운터(PC)의 값은 멀티플렉서(MP4)로 전송된다. 프로그램 카운터(PC)의 증가된 값과 기록 데이터(WD3)에 대응하는 프로그램 카운터의 값 중 어느 것이 레지스터 파일(RF3)에 기록되어야하는지는 기록 가능 인덱스(WE3)의 값에 의해 결정된다. 수행 유닛(EX2)에 의해서 레지스터 파일(RF3)에 명시적인 기록이 수행되지 않는 한, 프로그램은 후속해서 프로그램 메모리에 리스트된 인스트럭션을 수행함으로써 간단하게 계속될 것이다. 새로운 프로그램 카운터의 값이 수행 유닛(EX2)에 의해서 레지스터 파일(RF3)에 기록되는 경우에, 기록된 프로그램 카운터의 값은 기록 값에 대응하는 프로그램 메모리의 어드레스로부터 인스트럭션 수행을 계속하도록 프로그램을 변화시킬 것이다.
다른 실시예에서, 프로세싱 시스템은 데이터 정지 VLIW 프로세서이다. 인스 트럭션 세트의 일부인 모든 인스트럭션이 특정 데이터 아이템에서 수행될 전체 연산의 시퀀스를 제어하기 때문에 데이터 정지 VLIW 프로세서는 레지스터 파일에 기록 데이터를 재기록하는 것을 직접 동적으로 제어할 수 있다. 따라서, 데이터 정지 VLIW 프로세서는 연산의 조건부 수행도 구현할 수 있다. 그 결과, 본 발명에 따라서 이러한 프로세서는 플래그를 요구하지 않고도 조건부 브랜칭 및 루핑을 구현할 수 있다.
일부 실시예에서, 레지스터 파일(RF3)의 판독 포트 접속을 통해서, 수행 유닛(EX2)은 레지스터 파일(RF3)로부터 직접 프로그램 카운터(PC)의 값을 판독할 수 있다. 수행 유닛(EX2)은 이런식으로 위치 독립 코드(position independent code)에 대해서 "프로그램 카운터 관련 브랜칭"을 구현할 수 있다. 예컨대, 오프셋 값은 레지스터 파일(RF3)로부터 판독된 프로그램 카운터(PC)에 추가될 수 있고, 이로써 프로그램 카운터 관련 점프 목표 어드레스를 생성한다. 다른 실시예에서, 예컨대 프로그램 카운터 관련 브랜칭이 적용되지 않으면, 프로그램 카운터(PC)의 값을 판독하기 위한 레지스터 파일(RF3)과 수행 유닛(EX2) 사이의 접속은 사용되지 않고 남아 있거나 존재하지 않을 수 있다.
다른 실시예에서, 하나의 가드된 혹은 조건부 연산이 임의의 주어진 사이클에서 유효 출력을 생성한다는 것을 즉, 프로그램 카운터의 하나의 값만이 레지스터 파일(RF3)에 기록된다는 것을 컴파일러 또는 어셈블리 프로그래머가 보장하는 한 레지스터 파일(RF3)에 저장된 프로그램 카운터의 값을 갱신하도록 다수의 가드된 혹은 조건부 연산이 동시에 수행될 수 있다. 이는 조건이 어긋나는 한(disjoint) 보장될 수 있다. 그 결과, 브랜치 목표의 동시 수행 및 브랜치의 유효화가 예컨대 이른바 경우 선언문(case statements)을 구현하는 데 사용될 수 있다.
프로세서 구현이 충분히 높은 클록 주파수에서 수행되게 하기 위해서, 프로세서의 컨트롤러는 파이프라인화될 수 있다. 도 1 및 도 2를 참조하면, 하나의 인스트럭션 레지스터(IR)가 프로그램 메모리(PM)의 출력단에 제공되어서 프로그램 메모리(PM)로부터 로딩된 인스트럭션(IN)을 저장한다. 그 결과, 새로운 프로그램 카운터의 값을 레지스터 파일(RF3)에 기록하는 것과 이 새로운 값에 대응하는 프로그램 메모리 어드레스로부터 수집된 인스트럭션을 수행하는 것 사이의 지연은 적어도 2 사이클이다. 이러한 지연은 브랜치 지연으로 간주되고, 이는 프로세서의 파이프라인화 정도에 따라서 0이 아닌 임의의 값이 될 수 있다. 브랜치 셰도우라고도 불리는 브랜치의 지연의 일부인 사이클이 다른 연산을 수행하는 데 사용될 수 있지 않는 한, 이러한 브랜치 지연으로 인해서 수행 시간 오버헤드가 유발된다. 이들 다른 연산은 프로그램에 의해서 나타내어지는 원본 알고리즘에서 프로그램 플로우에 있어서의 변화가 발생하기 전에 수행되어야 하는 연산이 될 연산이 될 것이다. 다른 실시예에서, 프로세서는 비 브랜치 연산이 브랜치의 셰도우에서 수행될 수 있는, 지연 브랜칭이라고도 알려진 컨셉을 구현한다. 그 결과, 브랜치 연산에는 브랜치가 실제로 취해지는 시점 전에 브랜치 지연이 스케줄된다. 이는 다음 프로그램 구조로 도시되며, 여기서 각각의 라인은 하나의 VLIW 인스트럭션을 나타내고, z, x, y, u, d, e는 변수를 나타내며, pc는 프로그램 카운터의 값을 나타내는 변수를 나타내고, A는 프로그램 메모리의 어드레스를 나타내며, add는 두 값을 합산하 는 연산을 나타내고, mul은 두 값을 곱하는 연산을 나타내며, jmp는 브랜치 연산을 나타낸다.
...
pc = jmp A; /* 두번 지연한 브랜치 연산 */
z = add x y; /* 연산 add가 수행되는 동안의 브랜치 셰도우 */
/* A로의 점프가 발생하는 지점 */
u = mul d e; /* 취해진 브랜치로 인해서 이 선언문은 스킵됨 */
...
A:... /* 브랜치 목표 */
...
지연된 브랜칭은 대부분의 종래의 디지털 신호 프로세서에서 통상적으로 사용되는 루프 스택 등과 같은 추가 하드웨어 없이 사실상 오버 헤드없는 브랜칭을 가능하게 한다.
다른 실시예에서, 브랜치 셰도우에서 브랜치 연산을 스케쥴링할 수 있다. 본 발명은 브랜치 지연보다 짧은 수의 인스트럭션 또는 사이클로 이루어진 루프 바디를 생성할 수 있도록 오버헤드 없는 브랜칭 컨셉이 더 연장될 수 있는 컨셉도 지원한다. 이는 예컨대 2 사이클의 브랜치 지연이 가정되는 다음 프로그램 구조에 의해 획득되며, 여기서 각각의 라인은 하나의 VLIW 인스트럭션을 나타내고, z, x, y, u, d, e는 변수를 나타내며, i는 루프 카운터를 나타내고, pc는 프로그램 카운터의 값을 나타내는 변수를 나타내며, A는 프로그램 메모리의 어드레스를 나타내 며, add는 두 값을 합산하는 연산을 나타내고, dec는 한 값을 결정하는 연산을 나타내며, mul은 두 값을 곱하는 연산을 나타내고, brnz는 비-제로로 조건부 브랜치를 구현하는 연산을 나타낸다.
...
z=add x y, i=dec i, pc=brnz i A;
A :u=mul d e, i=dec i, pc= brnz i A;
...
위의 실시예에서, 루프는 다른 연산과 동시에 루프 카운터 i가 증가된다는 프리앰블에 의해 계속되고, 비-제로 즉, 루프 카운터 i가 0이 아닌 조건부 브랜치가 루프 개시 어드레스(A)로 취해진다. 어드레스(A)에서의 다음 인스트럭션은 루프 바디의 시작이고, 여기서 루프 카운터(i)는 더 감소되고, 0에 대해서 체크되어서 조건부 브랜치를 어드레스(A)로 유도한다. 이러한 구성의 결과, 프리앰블로부터 개시하는 모든 사이클에서, 레지스터 파일(RF3)에 기록된 프로그램 카운터(PC)의 값은 어드레스(A)와 같을 것이며, 이로써 루프 카운터(i)가 0이 되지 않는 한 프로그램 카운터(PC)는 이 어드레스에 효율적으로 유지된다. 그 결과 이 실시예의 브랜치 지연이 2이상이여도 하나의 인스트럭션 루프가 생성된다. 이와 유사한 구성이, 이 브랜치 지연보다 작은 수의 인스트럭션을 포함하는 루프 바디에서 같은 혹은 3이상의 지연에서도 동일하게 작용할 것이다.
다른 실시예에, 통신 네트워크(CN)는 부분적으로 접속된 통신 네트워크가 될 수 있으며, 즉 모든 수행 유닛(EX1, EX2)이 모든 레지스터 파일(RF1, RF2)에 연결 되는 것은 아니다. 수행 유닛이 많은 경우에, 실리콘 면적, 지연 및 전력 소비 면에서 전체 접속된 통신 네트워크의 오버헤드는 상당할 것이다. VLIW 프로세서를 설계하는 동안, 수행될 애플리케이션의 범위에 따라서 수행 유닛이 어느 정도까지 레지스터 파일에 연결될지 결정된다.
다른 실시예에서, 더 많은 수행 유닛이 프로그램 카운터의 새로운 값을 레지스터 파일(RF3)에 기록할 수 있다. 더 많은 수행 유닛이 레지스터 파일(RF3)에 프로그램 카운터의 값을 기록하는 연산의 조건부 수행을 실행할 수 있게 함으로써, 이들 연산의 스케쥴링은 잠재적으로 프로그램을 더 효율적으로 할 것이며, 이는 많은 가드된 혹은 조건부 연산이 동시에 수행될 수 있기 때문이다.
다른 실시예에서, 레지스터 파일(RF1, RF2)을 포함하는 분산 레지스터 파일은 하나의 레지스터 파일이다. VLIW 프로세서의 수행 유닛의 수가 비교적 작은 경우에, 하나의 레지스터 파일의 오버 헤드도 비교적 작다.
다른 실시예에서, VLIW 프로세서는 다른 수의 수행 유닛을 가질 수 있다. 수행 유닛의 수는 특히 VLIW 프로세서가 수행할 애플리케이션의 타입에 따라 달라진다. 프로세서는 이 실행 유닛에 접속된 레지스터 파일을 더 많이 가질 수 있다.
다른 실시예에서, 수행 유닛(EX1, EX2)은 수행 유닛이 실행할 연산의 종류에 따라서, 즉 3개 이상의 오퍼랜드를 요구하거나 2개 이상의 결과를 생성하는 연산에 따라서 다수의 입력단 및/또는 다수의 출력단을 가질 수 있다. 분산된 레지스터 파일은 레지스터 파일 마다 다수의 판독 및/또는 기록 포트를 가질 수도 있다.
VLIW 프로세서와 마찬가지로, 슈퍼스칼라 프로세서도 동시에 많은 연산을 수 행할 수 있는 다중 이슈 슬롯도 포함한다. 그러나, 이 프로세서 하드웨어는 실행 시간에 연산 의존성이 존재하는지 판정하고, 다른 충돌은 발생하지 않을 것이라는 확신하에 이들 의존성에 기초해서 연산을 동시에 수행할지 판정한다. 여기 설명된 VLIW 프로세서 실시예의 원리는 슈퍼스칼라 프로세서에도 적용될 수 있다. 일반적으로 VLIW 프로세서는 슈퍼스칼라 프로세서에 비해서 더 많은 이슈 슬롯을 가질 수 있다. VLIW 프로세서의 하드웨어는 슈퍼스칼라 프로세서에 비해서 충돌이 적어서, 그 결과 더 양호한 크기 조정 가능 아키텍쳐를 생성한다. 무엇보다 이슈 슬롯의 수 및 각각의 이슈 슬롯의 복잡성이 본 발명을 통해서 어느 정도까지 이득을 볼 수 있는 지 결정할 것이다.
위에 설명된 실시예는 본 발명을 한정하는 것이 아니며, 당업자가 첨부된 청구의 범위의 범주를 벗어남없이 많은 다른 실시예를 설계할 수 있을 것이라는 점에 주의해야 한다. 청구범위에서 괄호 안의 참조 번호는 청구항을 한정하는 의미가 아니다. 또한, 용어 "포함한다"는 여기에 열거되지 않은 소자 또는 단계의 존재를 배제하지 않는다. 본 상세한 설명과 특허 청구 범위에서 용어 "하나의"는 그러한 구성 요소가 복수개 존재할 가능성을 배제하지 않는다. 몇가지 수단을 열거한 장치 청구항에서, 다수의 이들 수간은 하나로 혹은 동일한 아이템의 하드웨어에 의해 수행될 수 있다. 특정 방법이 서로 다른 독립항에서 인용되었다고 해서 이들 방법의 조합이 유익하게 사용될 수 없는 것은 아니다.

Claims (13)

  1. 프로그램 카운터(PC)의 제어하에서 인스트럭션의 집합을 수행하도록 구성된 프로세싱 시스템에 있어서,
    수행 유닛(EX1, EX2)과,
    데이터를 저장하며 상기 수행 유닛이 액세스 가능한 제 1 레지스터 파일(RF1, RF2)과,
    상기 인스트럭션의 집합을 저장하는 프로그램 메모리(PM)와,
    상기 프로그램 카운터의 값을 저장하며 상기 수행 유닛(EX2)이 액세스 가능한 제 2 레지스터 파일(RF3)을 포함하되,
    상기 수행 유닛(EX2)은 상기 프로그램 카운터의 값을 상기 제 2 레지스터 파일에 기록하기 위한 전용 인스트럭션을 조건부로 수행하도록 구성되는
    프로세싱 시스템.
  2. 제 1 항에 있어서,
    컨트롤러(CTR)를 더 포함하되,
    상기 제 2 레지스터 파일은 상기 컨트롤러에 의해 액세스 가능하고,
    상기 컨트롤러는 상기 제 2 레지스터 파일에 저장된 상기 프로그램 카운터의 값을 사용하고, 상기 프로그램 메모리로부터 인스트럭션을 페치하도록 구성되는
    프로세싱 시스템.
  3. 제 2 항에 있어서,
    상기 컨트롤러는 상기 프로그램 카운터의 값을 증가시키고, 상기 증가된 프로그램 카운터의 값을 상기 제 2 레지스터 파일에 기록하도록 더 구성되는
    프로세싱 시스템.
  4. 제 3 항에 있어서,
    브랜치 조건의 평가 결과에 따라서, 상기 컨트롤러에 의해서 증가된 상기 프로그램 카운터의 값 혹은 상기 수행 유닛에 의해 생성된 상기 프로그램 카운터의 값을 상기 제 2 레지스터 파일에 기록하도록 더 구성되는
    프로세싱 시스템.
  5. 제 1 항에 있어서,
    상기 수행 유닛(EX2)은 브랜치 조건을 평가하고, 후속해서 상기 평가 결과를 가드(GU2)로 사용해서 상기 프로그램 카운터의 값을 상기 제 2 레지스터 파일에 기록하는 제 1 전용 인스트럭션을 조건부로 수행하도록 더 구성되는
    프로세싱 시스템.
  6. 제 1 항에 있어서,
    상기 수행 유닛(EX2)은 제 2 전용 인스트럭션을 수행하도록 더 구성되되,
    상기 제 2 전용 인스트럭션은 적어도 제 1 인수(argument) 및 제 2 인수를 구비하며,
    상기 제 2 인수는 상기 프로그램 카운터의 값이고,
    상기 제 2 전용 인스트럭션은 상기 제 1 인수의 값에 따라서 상기 프로그램 카운터의 값을 상기 제 2 레지스터 파일에 기록하도록 구성되는
    프로세싱 시스템.
  7. 제 1 항에 있어서,
    상기 복수의 전용 인스트럭션을 동시에 수행하도록 더 구성되며,
    컴파일 단계 동안 상기 복수의 전용 인스트럭션 중 하나의 인스트럭션 만이 조건부로 수행되는 것이 보장되는
    프로세싱 시스템.
  8. 제 1 항에 있어서,
    상기 프로세싱 시스템은 데이터 정지 VLIW 프로세서이고,
    상기 VLIW 프로세서는 복수의 수행 유닛(EX1, EX2)과, 상기 수행 유닛과 상기 제 1 레지스터 파일을 연결시키는 통신 장치(CN)를 더 포함하는
    프로세싱 시스템.
  9. 제 1 항에 있어서,
    상기 프로세싱 시스템은 시간 정지 VLIW 프로세서이고,
    상기 VLIW 프로세서는 복수의 수행 유닛(EX1, EX2)과, 상기 수행 유닛과 상기 레지스터 파일을 연결시키는 통신 장치(CN)를 더 포함하며,
    상기 VLIW 프로세서는 상기 인스트럭션의 집합으로부터 획득된 제어 정보에 기초해서, 복수의 수행 유닛 중 하나의 수행 유닛으로부터 상기 제 1 레지스터 파일 및 상기 제 2 레지스터 파일로 결과 데이터를 전송하는 것을 동적으로 제어하도록 구성되는
    프로세싱 시스템.
  10. 제 8 항 또는 제 9 항에 있어서,
    상기 레지스터 파일은 분산형 레지스터 파일(RF1, RF2)인
    프로세싱 시스템.
  11. 제 8 항 또는 제 9 항에 있어서,
    상기 통신 장치는 부분적으로 접속된 통신 네트워크(CN)인
    프로세싱 시스템.
  12. 프로세싱 시스템에 의해서 인스트럭션의 집합을 수행하는 방법에 있어서,
    상기 프로세싱 시스템은
    수행 유닛(EX1, EX2)과,
    데이터를 저장하며, 상기 수행 유닛이 액세스 가능한 제 1 레지스터 파일(RF1, RF2)과,
    상기 인스트럭션의 집합을 저장하는 프로그램 메모리(PM)와,
    상기 프로그램 카운터의 값을 저장하며 상기 수행 유닛이 액세스 가능한 제 2 레지스터 파일(RF3)을 포함하고,
    상기 방법은
    상기 프로그램 카운터의 값을 상기 제 2 레지스터 파일에 기록하는 전용 인스트럭션을 수행하는 단계와,
    상기 프로그램 카운터의 값을 사용해서 상기 프로그램 메모리로부터의 인스트럭션을 페치하는 단계와,
    상기 인스트럭션을 수행하는 단계
    를 포함하는
    프로세싱 시스템에 의해서 인스트럭션의 집합을 수행하는 방법.
  13. 컴퓨터 시스템 상에서 수행될 때, 제 12 항에 개시된 프로세싱 시스템 프로그래밍 방법의 모든 단계를 구현하도록 구성된 컴파일러 프로그램 제품.
KR1020057020437A 2003-04-29 2004-04-27 프로세싱 시스템, 이 프로세싱 시스템에 의해서 인스트럭션의 집합을 실행하는 vliw 프로세서, 방법 및 컴퓨터 판독가능한 저장 매체 KR101099828B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP03101175.2 2003-04-29
EP03101175 2003-04-29
PCT/IB2004/050527 WO2004097625A2 (en) 2003-04-29 2004-04-27 Zero overhead branching and looping in time-stationary processors

Publications (2)

Publication Number Publication Date
KR20060009872A true KR20060009872A (ko) 2006-02-01
KR101099828B1 KR101099828B1 (ko) 2011-12-27

Family

ID=33395949

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057020437A KR101099828B1 (ko) 2003-04-29 2004-04-27 프로세싱 시스템, 이 프로세싱 시스템에 의해서 인스트럭션의 집합을 실행하는 vliw 프로세서, 방법 및 컴퓨터 판독가능한 저장 매체

Country Status (6)

Country Link
US (1) US7302555B2 (ko)
EP (1) EP1620791A2 (ko)
JP (1) JP5068529B2 (ko)
KR (1) KR101099828B1 (ko)
CN (1) CN1826583A (ko)
WO (1) WO2004097625A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100810138B1 (ko) * 2007-05-21 2008-03-07 세종공업 주식회사 진공펌프용 소음기

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7991984B2 (en) * 2005-02-17 2011-08-02 Samsung Electronics Co., Ltd. System and method for executing loops in a processor
JP2011090592A (ja) * 2009-10-26 2011-05-06 Sony Corp 情報処理装置とその命令デコーダ
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US10846098B2 (en) * 2018-05-29 2020-11-24 Arm Limited Execution pipeline adaptation

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6014338A (ja) * 1983-06-30 1985-01-24 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション 計算機システムにおける分岐機構
JP2834292B2 (ja) * 1990-08-15 1998-12-09 株式会社日立製作所 データ・プロセッサ
JP2875909B2 (ja) * 1991-07-12 1999-03-31 三菱電機株式会社 並列演算処理装置
JP3442225B2 (ja) * 1996-07-11 2003-09-02 株式会社日立製作所 演算処理装置
US6055628A (en) * 1997-01-24 2000-04-25 Texas Instruments Incorporated Microprocessor with a nestable delayed branch instruction without branch related pipeline interlocks
US6366999B1 (en) 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
JP3487421B2 (ja) * 2000-02-16 2004-01-19 日本電気株式会社 Simd型並列計算装置
AU2001245520A1 (en) * 2000-03-08 2001-09-17 Sun Microsystems, Inc. Vliw computer processing architecture having a scalable number of register files
US7080234B2 (en) * 2000-03-08 2006-07-18 Sun Microsystems, Inc. VLIW computer processing architecture having the problem counter stored in a register file register

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100810138B1 (ko) * 2007-05-21 2008-03-07 세종공업 주식회사 진공펌프용 소음기

Also Published As

Publication number Publication date
JP5068529B2 (ja) 2012-11-07
WO2004097625A2 (en) 2004-11-11
EP1620791A2 (en) 2006-02-01
US20070055851A1 (en) 2007-03-08
CN1826583A (zh) 2006-08-30
WO2004097625A3 (en) 2006-03-16
KR101099828B1 (ko) 2011-12-27
JP2006525583A (ja) 2006-11-09
US7302555B2 (en) 2007-11-27

Similar Documents

Publication Publication Date Title
Mahlke et al. A comparison of full and partial predicated execution support for ILP processors
US7493475B2 (en) Instruction vector-mode processing in multi-lane processor by multiplex switch replicating instruction in one lane to select others along with updated operand address
KR100638501B1 (ko) 다중 명령 컴퓨터 프로그램을 구성하는 방법
US20050114850A1 (en) Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
GB2294341A (en) Providing support for speculative execution
JP2004511043A (ja) リターゲッタブルコンパイルシステム及び方法
EP1378824A1 (en) A method for executing programs on multiple processors and corresponding processor system
US6910123B1 (en) Processor with conditional instruction execution based upon state of corresponding annul bit of annul code
KR101099828B1 (ko) 프로세싱 시스템, 이 프로세싱 시스템에 의해서 인스트럭션의 집합을 실행하는 vliw 프로세서, 방법 및 컴퓨터 판독가능한 저장 매체
KR101147190B1 (ko) 다중-명령어 워드 프로세서에서 피드백 접속의 런타임 선택
KR101154077B1 (ko) 시간 고정형 프로세서 및 그의 제어 방법
US9201657B2 (en) Lower power assembler
JP2001243070A (ja) プロセッサ及び分岐予測方法並びにコンパイル方法
KR20100094214A (ko) Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법
Song Demystifying epic and ia-64
JP2006524859A (ja) 並列処理システム
Connors et al. An architecture framework for introducing predicated execution into embedded microprocessors
JP2001236227A (ja) プロセッサ、コンパイラ、コイパイル方法及び記録媒体
WO2007048988A1 (en) A data processing apparatus and method for handling procedure call instructions
Leupers et al. Performance Optimization with Conditional Instructions
EP1117032A2 (en) Processor with improved branch efficiency
Surender Compiler Optimization to exploit Pipeline registers and Forwarding circuitry

Legal Events

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

Payment date: 20141128

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151201

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161129

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20181129

Year of fee payment: 8