KR100300001B1 - 명령어요소들의재조합에의한서로다른명령어코드들사이의동적변환 - Google Patents

명령어요소들의재조합에의한서로다른명령어코드들사이의동적변환 Download PDF

Info

Publication number
KR100300001B1
KR100300001B1 KR1019970052734A KR19970052734A KR100300001B1 KR 100300001 B1 KR100300001 B1 KR 100300001B1 KR 1019970052734 A KR1019970052734 A KR 1019970052734A KR 19970052734 A KR19970052734 A KR 19970052734A KR 100300001 B1 KR100300001 B1 KR 100300001B1
Authority
KR
South Korea
Prior art keywords
instruction
instructions
instruction set
code
elements
Prior art date
Application number
KR1019970052734A
Other languages
English (en)
Other versions
KR19980070019A (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 KR19980070019A publication Critical patent/KR19980070019A/ko
Application granted granted Critical
Publication of KR100300001B1 publication Critical patent/KR100300001B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control 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/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/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code

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

본 발명은 코드 A의 명령어를 코드 B의 명령어로 변환하기 위한 장치 및 방법을 개시하고 있다. 상기 변환은 테이블로부터 재구성 정보를 얻음으로써 실행되는데, 이 정보는 변환되어야 할 명령어에 대응한다. 상기 재구성 정보는 초기 명령어에 기능상 대응하는 코드 B의 명령어를 생성하기 위해 상기 초기 명령어의 명령어 요소들을 재구성하는데 사용된다.
상기 재구성은 초기 코드 A의 명령어의 상기 명령어 요소들을 입력으로서 사용하고 상기 명령어 요소들 중 하나 또는 다른 하나의 레지스터의 내용을 선택하고 이 선택된 데이터를 생성되어야 할 명령어로 전달하는 다중화 수단에 의해 실행될 수 있다. 상기 재구성 정보는 상기 다중화기에 의해 실행된 선택을 제어하는데 직접 사용된다.

Description

명령어 요소들의 재조합에 의한 서로 다른 명령어 코드들 사이의 동적 변환{DYNAMIC CONVERSION BETWEEN DIFFERENT INSTRUCTION CODES BY RECOMBINATION OF INSTRUCTION ELEMENTS}
본 발명은 하나의 명령어 세트를 다른 하나의 명령어 세트로 변환하는 명령어 변환(conversion of instructions)에 관한 것으로, 특히 제1 컴퓨터 구조의 코드를 제2 컴퓨터 구조의 코드로 변환하는 것에 관한 것이다.
각각의 컴퓨터 시스템에 있어서, 프로세서가 처리할 수 있는 명령어, 이러한 명령어의 형식(format), 및 이러한 명령어에 의해 요구되는 아규먼트(arguments) 및 오퍼런드(operands)에 대한 정확한 정의가 있어야 한다. 이러한 프로세서의 명령어 세트에 대한 정의는 보통 구조 코드(architectured code)라고 불리운다.
많은 종류의 상이한 코드들이 존재하고, 이러한 코드의 각각은 대응하는 프로세서 형식(processor type)에 의해서만 처리될 수 있다. 고급 언어로 쓰여져 있는 프로그램을 기본적인 프로세서 명령어들의 순차(sequence)로 변환하는 컴파일러는 단지 하나의 특정 컴퓨터 구조에 대응하는 코드를 생성할 수 있을 뿐이다. 상이한 코드들로 쓰여져 있는 프로그램들을 하나의 프로세서 형식에 의해 처리할 수있는 것이 바람직하다. 따라서, 상이한 컴퓨터 구조들에 대하여 쓰여져 있는 프로그램들이 처리될 수 있는데, 이는 각각의 프로세서 형식에 대하여 사용 가능한 프로그램의 범위가 증가된다는 것을 의미한다. 상이한 프로세서 형식들에 대하여 적합한 코드를 생성하기 위해 소스 코드를 리컴파일링하는 것은 더 이상 필요하지 않다.
흔히, 하나의 프로세서 형식에 대하여 상이한 명령어 세트의 버전들(versions)이 존재한다. 하나의 명령어 세트로부터 다른 하나의 명령어 세트로 변환할 수 있다면 업데이트된 코드를 신속하게 처리하는 것도 또한 가능할 것이다.
오랫 동안, CISC (복합 명령어 세트 계산: Complex Instruction Set Computing) 또는 RISC (축소 명령어 세트 계산: Reduced Instruction Set Computing) 중 어느 것이 고성능 계산에 더 적합한지에 대한 논쟁이 계속되어 왔다. CISC 명령어가 처리될 때는, 많은 태스크가 병렬로 실행된다. CISC 명령어는 보통 길고 복잡하다. 고유의 병렬 처리로 인하여 많은 프로세서 사이클 시간이 요구된다. CISC 계산을 위한 전형적인 파이프라인은 다소 적은 파이프라인 스테이지를 포함한다. CISC 명령어는 공통 형식(common format)으로 만들기가 어렵다.
이와는 대조적으로, RISC 명령어는 짧고 간단하며 명령어가 실행될 때 많은 병렬 태스크를 시작하지 않는다. RISC 명령어는 단지 하나의 잘 정의된 태스크만을 실행하며, 하나의 공통 형식으로 쉽게 만들어질 수 있다. RISC 처리를 위한 실행 유니트는 많은 파이프라인 스테이지를 갖는 파이프라인을 포함한다. RISC 처리를 위한 프로세서 사이클은 매우 짧을 수 있는데, 이는 명령어들이 상이한 파이프라인 스테이지들을 통해 빠르게 클록될(be clocked) 수 있다는 것을 의미한다.
현대의 슈퍼스칼라 처리 개념은 기본 명령어들을 그들의 순차적 순서에 상관없이 처리할 것을 제안하는데, 이는 순차적 프로그램에 숨어있는 임의의 병렬 처리가 사용된다는 것을 의미한다. 완전히 독립적인 다수의 명령어들을 명령어 스트림의 상이한 점들로부터 다양한 실행 유니트로 동일한 클록 사이클 내에서 디스패치함으로써 성능 향상이 이루어진다. 많은 이유로, RISC 명령어는 CISC 명령어보다 비순차적 처리(out-of-order processing)에 더 적합하다. 전형적인 RISC 명령어는 단지 하나의 태스크만을 정의하므로, 명령어 자체는 그의 소스 및 목적 어드레스와 함께 간단한 형식으로 만들어질 수 있다. 더욱이, 짧은 사이클 시간도 가능하다. 이는 레지스터 리네이밍과 같은, 데이터 종속 문제에 대한 해결책이 중요한 요구 사항 중 하나이므로 특히 비순차적 처리에 대하여 중요하다.
이러한 설명을 고려하면, RISC 구조를 갖는 슈퍼스칼라 프로세서가 유리하다는 것을 알 수 있을 것이다. 반면, CISC는 여러 분야에 널리 퍼져 있는 표준이고, CISC 구조를 위한 많은 코드가 존재한다. 이러한 이유로, 외부 CISC 명령어(external CISC instructions)를 슈퍼스칼라 RISC 프로세서에 의해 비순차적으로 처리될 수 있는 다수의 내부 RISC 명령어(internal RISC instructions)로 분해하는 것이 바람직할 것이다. 이러한 처리 개념은 강력한 CISC 대 RISC 변환기(CISC to RISC converter)를 요구할 것이다.
실행 시간 중의 코드 변환(code conversion at run time)에 대해 여러 가지의 해법이 제안되어져 왔다. IBM 출판의 "축소 명령어 세트 컴퓨터용 시스템/370 에뮬레이터 어시스트 프로세서", Vol. 30, No. 10 (1988년 3월, J. 가르시아, E.S. 하논, R. 칼라, J.A. 미첼 및 D.M. 자레스키)에는 CISC 코드인 외부 S/370 코드를 내부 RISC 명령어로 변환하는 마이크로코드-제어 변환이 기술되어 있다. 우선, "에뮬레이션 어시스트 프로세서"는 변환되어야 할 외부 S/370 명령어를 로딩한다. 다음으로, 상기 단일 S/370 명령어에 대한 복수개의 호스트 명령어를 생성하기 위해 특별 로컬 마이크로코드 제어 저장부(specilized local microcode control store)로부터의 마이크로코드가 실행된다.
실 하드웨어-제어 변환(real hardware-controlled translation)과 비교하면, 마이크로코드 루틴을 실행하여 행해지는 임의의 변환은 느리다. 실행 시간 중의 코드 변환에 대해서, 외부 CISC 명령어로부터 내부 RISC 명령어로 코드를 변환하는 것은 단지 몇 개의 사이클을 필요로 한다. 마이크로코드-제어 변환은 전체 마이크로 루틴이 실행되어야 하기 때문에 많은 사이클을 필요로 한다.
더욱이, 에뮬레이션 어시스트 프로세서는 단지 한번에 하나의 명령어만을 변환할 수 있다. 그러므로, 동시에 디스패치되는 여러개의 명령어의 병렬 변환은 불가능하다.
더욱 정교한 변환 기법이 유럽 특허 출원 651 320 Al, "슈퍼스칼라 명령어 디코더" (D. B. 위트 및 M. D. 고다드)에 기술되어 있다. 이 문서에는, 실행 시간 중에 CISC 명령어를 다수의 RISC 명령어로 변환하는 디코더가 기술되어 있다. 디코드 프로세스에서 생성되는 RISC 명령어는 RISC 슈퍼스칼라 프로세서로 전달된다.따라서, CISC 명령어 세트의 사용이 슈퍼스칼라 RISC 처리의 장점과 결합될 수 있다. 하나의 CISC 명령어로부터 생성되어야 할 RISC-형식의 연산(RISC-like operations)의 수에 따라, 두 개의 변환 경로(conversion paths)가 기술되어 있는데: 생성되어야 할 RISC 연산의 수가 3을 넘는 경우에는, 마이크로코드 루틴을 실행하여 코드를 변환한다. 3개 이하의 RISC-형식 연산에 의해 표현될 수 있는 덜 복잡한 CISC 연산에 대해서는, 고속 변환 경로(fast conversion path)가 구현된다. CISC 명령어의 레지스터 식별자(register identifiers)는 프로그램 가능 어레이 논리 (progammable array logic: PAL) 또는 조합 논리(combinational logic)에 의해 대응 RISC-형식 연산으로 라우팅된다(be routed).
외부 또는 내부 코드 중 하나에 임의의 구조 변화가 생기는 경우에는, 디코드 논리가 변경되어야 할 것이다. 디코드 논리는 또한 만일 변환 경로에 에러가 일어나는 경우에도 변경되어야 할 것이다. 조합 논리의 경우에는, 전체 논리가 리매핑되어야(be remapped) 할 것이다. 프로그램 가능 어레이 논리의 경우에는, 변경을 구현하기 위해 논리를 다시 프로그램하는 것이 가능하다. 그러나 선택적인 변경을 구현하는 것은 어렵다. PAL의 소정의 변환 기능을 다시 프로그램하는 것은 전체 논리를 다시 프로그램할 것을 요구하므로, 더욱 선택적인 방법으로 변환 경로를 변경하는 것이 바람직할 것이다.
본 발명의 목적은 종래 기술의 단점을 갖고 있지 않고, 실행 시간 중에 고속으로 명령어를 디코딩하는 것이 가능하며, 병렬로 여러개의 명령어를 디코딩하는것이 가능하고, 변환 경로의 변경을 쉽게 구현할 수 있으며, 코드 A에서 코드 B로 명령어를 변환하는 것이 가능한 코드 변환기를 제공하는 것이다.
도 1은 외부 명령어를 다수의 내부 명령어로 변환하는 명령어 변환기의 일반적인 구성을 도시하는 도면.
도 2는 외부 명령어의 OP-코드가 상기 외부 명령어를 변환하기 위하여 필요한 정보를 유지하고 있는 테이블의 정확한 엔트리를 액세스하는 방법을 도시하는 도면.
도 3은 변환 테이블 내의 엔트리의 구조를 도시하는 도면.
도 4는 내부 명령어가 가질 수 있는 형식의 예시를 도시하는 도면.
도 5는 명령어 변환을 위하여 여러개의 다중화기를 사용하는 명령어 변환기의 레이아웃을 도시하는 도면.
<도면의 주요 부분에 대한 부호의 설명>
100: 외부 명령어
104: 어드레스 생성 논리
105: 변환 테이블 엔트리
106: RAM 테이블
120-124: 다중화기
125, 126: 저장 셀
127: 보조 레지스터
509: 보조 레지스터
511, 512, 513: 다중화기
본 발명은 코드 A의 명령어들을 코드 B의 명령어들로 변환하기 위한 장치 및 방법을 제공하는데, 상기 코드 A의 명령어들의 각각 및 상기 코드 B의 명령어들의 각각은 명령어 요소들(instruction elements)로 구성되어 있다.
본 발명에 따르면, 제1 단계에서, 적어도 하나의 테이블로부터 재구성 정보(rearrangement information)가 얻어지는데, 상기 재구성 정보는 코드 B로 변환되어야 할 상기 코드 A의 명령어들의 명령어에 대응한다. 제2 단계에서, 상기 코드 A의 명령어의 명령어 요소들은 상기 코드 B의 명령어들의 적어도 하나의 명령어를 생성하기 위해 상기 재구성 정보에 따라 재구성된다.
상기 재구성은 재구성 수단(rearrangement means)에 의해 행해지는데, 이 재구성 수단은 상기 코드 A의 명령어의 명령어 요소들을 제1 입력으로서 사용하고 상기 코드 A의 명령어에 대응하는 상기 재구성 정보를 제2 입력으로서 사용하며, 상기 코드 A의 명령어에 기능상(functionally) 대응하는 상기 코드 B의 명령어들의 적어도 하나의 명령어를 생성하기 위해 상기 재구성 정보에 따라 상기 코드 A의 명령어의 상기 명령어 요소들을 재구성한다.
코드 A의 초기 명령어(initial instruction)는 이미 코드 B의 명령어를 생성하는데 필요한 논리 레지스터들의 식별자들을 포함하고 있다. 코드 B의 명령어를 생성하기 위해 OP-코드, 레지스터 식별자, 상태 정보, 어드레스 등을 논리 수단에의해 재구성하는 대신, 상기 코드 A의 초기 명령어와 관련된 테이블 내의 패턴에 따라 재조합(recombination)이 실행된다.
이는 상기 테이블에 저장되어 있는 비트 패턴(bit pattern)이 논리 레지스터 어드레스, 상태 비트, 논리 레지스터 식별자 등의 정확한 라우팅을 실행하기 위해 하드웨어에 의해 직접 사용될 수 있으므로, 단지 하나의 사이클 만을 요구하는 고속 명령어 변환을 제공한다. 이는 단지 하나의 사이클 만을 필요로 하므로, 실행 시간 중에 명령어 변환 및 디코딩이 실행될 수 있다.
본 발명의 다른 하나의 장점은 상기 테이블 수단에 포함되어 있는 재구성 정보가 쉽게 교환될(be exchanged) 수 있다는 것이다. 초기 명령어의 명령어 요소들이 새로운 명령어로 라우팅되는 방식에 에러 또는 불일치가 있는 경우, 이러한 에러는 그에 따라 테이블을 변경함으로써 수정될 수 있다. 구조 코드 A 또는 B 중 하나를 업데이트하는 경우나, 새로운 특징 및/또는 명령어들이 이러한 코드들 중 하나에 포함되는 경우에는, 상기 테이블 수단에 필요한 변경들이 행해질 수 있다. 중요한 점은 상기 변경들이 선택적으로 구현될 수 있다는 것인데, 이는 단지 변경된 명령어들만이 업데이트되어야 한다는 것을 의미한다.
성능을 향상시키기 위해서는, 여러개의 코드 A의 명령어들을 병렬로 변환하는 것이 바람직하다. 상기 명령어들 각각의 재구성은 하나의 공통 테이블을 액세스함으로써 행해질 수 있는데, 이는 상기 테이블의 여러개의 엔트리들이 병렬로 액세스될 수 있기 때문이다. 변환되어야 할 초기 명령어들의 수에 대응하여 복수개의 재구성 수단을 제공하는 것이 필요하다. 어떤 변경이 행해져야 하는 경우, 상기 변경은 하나의 중앙 테이블(central table)에 대해서만 행해져야 하는데, 이는 상기 테이블이 필요한 재구성 정보를 모두 포함하고 있기 때문이다. 이는 각각의 변환 경로가 변경되어야 하는 논리 변환 수단과 비교하여 훨씬 더 간단하게 업데이트하는 것을 가능하게 한다. 상기 테이블 수단을 사용하면, 어떻게 명령어들이 변환되어야 하는지를 쉽게 조사할 수 있다.
본 발명의 다른 실시예에 있어서, 상기 테이블 수단은 RAM 테이블 수단으로서 구현된다.
상기 테이블을 RAM 테이블로서 구현하는 것은 테이블의 내용을 변경하는 특히 쉬운 방법을 제공한다. 어떠한 구조 변경도 쉽게 고려될(be considered) 수 있다. 외부 구조는 잘 정의되어 있을 수 있지만, 설계자는 여기에 기능(functionality)을 부가하거나 잘 안쓰이는 명령어를 제거한다. 정의된 명령어들의 단지 일부분(subsets)만이 필요한 경우 또는 모든 명령어들이 사용되도록 허용되지 않는 경우도 있을 수 있다. 테이블로 로딩된 데이터를 변경함으로써, 이러한 요구 사항들이 고려될 수 있다.
또 다른 장점은 에러가 쉽게 보정될 수 있다는 것이다. 만일 명령어가 구현된 시간에 에러가 발생하였고 상기 에러는 설계 사이클에서 늦게, 예를 들면 첫 번째로 전원을 켠 다음에(after first power-on) 발견되었다면, 상기 테이블의 내용을 변경함으로써 고려되고 있는 명령어에 대한 서컴벤션(circumvention)을 만드는 것이 가능하다. 그리하여, 설계 검사를 계속하는 것이 가능하고 이는 제품화 시간(time-to-market)을 감소시켜 비용을 절감할 수 있게 한다.
본 발명의 다른 하나의 실시예에서, 상기 테이블 수단은 ROM 테이블 수단으로서 구현된다.
구조 변경 또는 에러에 기인하여 필요하게 되는 테이블 엔트리의 변경은 그에 따라 ROM을 변경함으로써 처리될 수 있다. 그러나, 이러한 구현의 주요 장점은 ROM으로 액세스하는 시간이 매우 짧다는 것이다. 또 다른 장점은 ROM 테이블에 요구되는 칩 면적이 매우 작다는 것이다.
본 발명의 또 다른 하나의 실시예에서, 상기 코드 A의 명령어는 CISC 명령어이고 상기 코드 B의 명령어는 RISC 명령어이다.
외부 명령어 스트림의 CISC 명령어 각각은 적어도 하나의 내부 RISC 명령어로 변환된다. 이러한 실시예는 CISC 명령어 순차가 슈퍼스칼라 RISC 프로세서에 의해 처리되어야 할 때 특히 유용하다. 각각의 CISC 명령어는 보통 다수의 RISC 명령어들에 의해 대체되어야 하므로, 요구되는 수의 RISC 명령어들을 생성하는데 필요한 모든 재구성 정보를 포함하고 있는 테이블 엔트리를 어드레싱하는 것이 바람직하다. 고속 및 고효율의 CISC/RISC 디코드가 가능하게 된다. 외부 CISC 코드 또는 내부 RISC 코드 모두의 변경이 쉽게 구현될 수 있다.
본 발명의 다른 하나의 실시예에서, 상기 코드 A의 명령어와 상기 코드 B의 명령어는 모두 RISC 명령어이다.
한 세트의 RISC 명령어를 상이한 세트의 RISC 명령어로 변환할 수 있는 것은 통상 단지 코드 B의 명령어만을 처리할 수 있는 프로세서에 의해 코드 A의 명령어 스트림을 처리하는 것을 가능하게 한다. 재구성 정보를 포함하는 변환 테이블에의해, 하나의 프로세서는 상기 프로세서의 구조 코드가 아닌 여러개의 상이한 RISC 코드들을 처리할 수 있다. 상이한 테이블들을 병렬로 사용하거나 테이블의 내용을 변경함으로써 상이한 코드들 사이에서 전환하는(switch) 것이 가능하다. 코드 변환이 실행 시간 중에 수행되므로, 하나의 프로세서는 여러개의 상이한 RISC 코드 플레이버(flavors)를 "이해할" 수 있다.
본 발명의 바람직한 실시예에 있어서, 상기 재구성 수단은 다중화 수단(multiplexing means)으로서 구현되는데, 이는 상기 코드 A의 명령어의 상기 명령어 요소들을 적어도 하나의 기능상(functionally) 대응하는 상기 코드 B의 명령어의 명령어 요소들을 나타내는 각각의 데이터 필드로 다중화한다.
외부 명령어의 명령어 요소들을 다시 어셈블하기 위해, 상기 명령어 요소들은 다중화기(multiplexer)로 전달되고, 이는 상기 명령어 요소들을 내부 명령어의 다양한 데이터 필드로 다중화한다. 많은 이유로, 초기 명령어 요소들을 재구성하기 위해 다중화기를 사용하는 것이 유리하다. 다중화기는 저렴하고 구현하기 쉬운 표준 장치이다. 다중화기는 고속-작동 장치로서 구현될 수 있으므로 상기 초기 명령어 요소들의 재구성은 하나의 프로세서 사이클 내에서 행해질 수 있다. 더욱이, 제어 라인은 쉽게 구현될 수 있고, 상기 제어 라인은, 결과 내부 명령어(resulting internal instruction)의 데이터 필드에 기록되기 위해, 소정의 다중화기의 출력으로 전달되어야 할 초기 명령어 요소를 선택한다.
본 발명의 다른 하나의 실시예에 따르면, 상기 코드 A의 명령어에 대응하는 상기 재구성 정보는 상기 코드 B의 명령어 또는 상기 코드 A의 명령어의 명령어 요소 마다 라우팅 정보를 포함하고, 상기 라우팅 정보는 상기 코드 A의 명령어의 상기 명령어 요소 중 어느 것이 상기 코드 B의 명령어 또는 상기 코드 A의 명령어의 상기 명령어 요소들 중 하나를 나타내는 각각의 데이터 필드로 전달되어야 하는지를 결정한다.
코드 A 외부 명령어가 코드 B 내부 명령어로 변환될 때, 상기 외부 명령어에 대응하는 상기 테이블 수단의 테이블 엔트리가 액세스된다. 이 테이블 엔트리는 상기 재구성 정보를 포함하고 있으며, 이는 내부 명령어를 생성하기 위해 외부 명령어의 상이한 부분들의 재구성을 제어한다. 상기 재구성 수단이 다중화기로서 구현되는 경우에, 상기 재구성 정보는 상기 다중화기를 직접 제어한다. 생성되어야 할 코드 B 내부 명령어 각각의 데이터 필드에 대하여, 코드 A 외부 명령어의 명령어 요소들 중 하나가 선택되어야 하고, 이는 상기 데이터 필드에 기록되어야 한다. 그리하여, 상기 테이블에 포함되어 있는 상기 재구성 정보는 코드 B 데이터 필드 마다 라우팅 정보를 포함하여야 하고, 이는 상기 코드 B 데이터 필드로 라우팅되어야 하는 명령어 요소를 선택한다. 외부 코드 A의 명령어의 모든 명령어 요소들은 다중화기로의 입력으로서 사용되고, 상기 다중화기의 출력은 생성되어야 할 코드 B의 명령어의 상기 데이터 필드 중 하나에 직접 기록된다. 이러한 해결책에 있어서, 내부 명령어의 데이터 필드 마다 하나의 다중화기가 제공되어야 한다.
생성되어야 할 명령어의 데이터 필드에 따라 상기 재구성 정보를 분할하는(segmenting) 것은 상기 정보가 정확한 입력을 선택하기 위해 직접 사용될 수 있으므로 상기 재구성 정보를 사용하여 상기 재구성 수단을 직접 제어하는 것을가능하게 한다. 상기 라우팅 정보는 어떤 입력이 상기 다중화기의 출력으로 직접 전달되어야할 지를 직접 결정하는데 사용될 수 있다. 그러므로, 상기 재구성 정보를 이와 같이 분할하는 것은 간단할 뿐만 아니라 고속 명령어 변환을 가능하게 한다.
본 발명의 다른 하나의 실시예에 따르면, 상기 테이블 수단은 상기 코드 A의 명령어를 기능상 대응하는 코드 B의 명령어의 수로 관련시킨다.
명령어를 변환할 때, 비록 코드들이 완전히 상이하더라도 외부 명령어에 의해 실행되는 동작과 정확하게 동일한 동작이 내부 명령어에 의해 실행되는 방식으로 외부 명령어가 내부 명령어에 의해 대체되어야 한다. 코드 B의 명령어는 상기 코드 A 외부 명령어에 기능상 대응하여야 한다. 많은 경우에 있어서 하나의 외부 명령어를 대응하는 하나의 내부 명령어로 대체하는 것은 불가능하다. 그 대신, 상기 외부 명령어를 완전히 에뮬레이트하기 위해서는 여러개의 내부 명령어들이 필요하다.
이는 복합 CISC 명령어(complex CISC instructions)를 보면 명백하다. 각각의 CISC 명령어는 많은 태스크를 실행하므로, 동일한 기능을 실행하는데 여러개의 내부 RISC 연산이 필요하다.
하나 이상의 내부 명령어가 생성되어야 하는 경우에, 외부 명령어에 대응하는 테이블 엔트리는 생성되어야 할 상기 내부 명령어들의 수를 포함하고 있다. 내부 명령어 각각에 대하여 재구성 정보가 제공된다. 그러므로, 모든 대응하는 코드 B의 명령어는 병렬로 생성될 수 있고, 이는 명령어 디코딩을 훨씬 더 빠르게 한다.
특히 실행 시간 중에 CISC 명령어를 디코딩할 때, 각각의 CISC 명령어에서 생성되는 RISC-형식 연산이 병렬로 생성될 수 있는 것이 중요하다.
본 발명의 또 다른 하나의 실시예에 따르면, 상기 테이블 수단은 상기 코드 A의 명령어를 기능상 대응하는 적어도 하나의 상기 코드 B의 명령어의 적어도 하나의 OP-코드로 관련시킨다.
변환되어야 하는 코드 A 외부 명령어의 OP-코드는 상기 테이블 수단에서 대응하는 엔트리를 발견하기 위하여 사용된다. 상기 엔트리는 상기 초기 OP-코드를 생성되어야 할 내부 명령어의 모든 OP-코드로 관련시킨다. 그리하여, 각각의 테이블 엔트리에는 하나 또는 그 이상의 OP-코드가 포함되어 있다. RISC-대-RISC 변환에 대한 일반적인 경우는 코드 A의 OP-코드와 코드 B의 OP-코드 사이의 일-대-일 대응이지만, CISC 디코딩의 경우에는 코드 A의 OP-코드 마다 코드 B의 OP-코드가 여러개 존재한다. 상기 테이블 수단으로부터 얻어진 코드 B의 OP-코드는 외부 명령어에 포함되어 있는 상태 정보, 레지스터 식별자 등과 함께 사용되어 코드 B의 대응하는 내부 명령어를 만들어낸다. 대응하는 코드 B OP-코드를 상기 테이블 수단에 직접 저장하는 것은 고속 명령어 변환을 가능하게 한다.
도 1은 CISC 명령어 또는 RISC 명령어 중 하나일 수 있는 외부 명령어(100)를 적어도 하나의 내부 명령어(101)로 변환하는 명령어 변환기의 일반적인 구성을 도시하고 있다. 상기 내부 명령어가 슈퍼스칼라 프로세서에 의해 처리되어야 하는 경우에는, 내부적으로 RISC 코드를 사용하는 것이 유리하다. 하나의 공통 형식으로 되어 있는 내부 RISC 명령어는 비순차적 처리에 이상적으로 적합하다.
코드 A의 명령어인 외부 명령어(100)은 코드 A의 OP-코드(102), "직접(immediate)" 데이터 필드(110), 명령어의 소스와 타겟 레지스터를 지정하는 논리 레지스터 식별자(111, 112), 및 상태 비트(status bits)와 같은 명령어에 대한 추가적인 정보(additional information)를 포함한다.
"직접" 데이터 필드에 포함되어 있는 값은 "OR 직접 연산", "AND 직접 연산" 등과 같은 소위 "직접 연산"을 실행하는데 필요할 수 있다. 상기 값은 직접 연산의 다른 오퍼런드와 AND되거나 OR되어야할 상수를 지정한다. 어드레스 산술에서, "직접" 데이터 필드에 포함되어 있는 값은 어드레스의 "변위(displacement)"를 지정하기 위하여 사용된다.
외부 명령어(100)을 한 세트의 내부 명령어(101)로 변환하는데 필요한 재구성 정보는 변환 테이블(106)에 포함되어 있다. 상기 변환 테이블은 ROM 테이블로서 또는 RAM 테이블로서 구현될 수 있다. 상기 테이블 각각의 엔트리(105)는 상기 외부 코드 A의 명령어 중 하나에 대응하고, 이 특정 명령어의 명령어 요소들이 대응하는 내부 명령어(101)을 형성하기 위하여 어떻게 재구성되어야 하는지를 결정한다.
각각의 변환 테이블 엔트리(105)는 하나의 외부 코드 A의 명령어(100)에 대응하므로, 상기 외부 명령어의 OP-코드(102)는 정확한 변환 테이블 엔트리를 결정하는데 사용될 수 있다. 이는 상기 OP-코드를 테이블 내의 대응 엔트리의 어드레스로 변환하는 어드레스 생성 논리(104)로 OP-코드를 전달함으로써 행해진다. 이 어드레스는 대응하는 변환 테이블 엔트리(105)를 액세스(103)하는데 사용된다. 상기 엔트리는 외부 명령어가 변환되는 모든 내부 코드 B의 명령어의 OP-코드와, 외부 명령어 요소들의 재조합을 제어하는데 사용되는 다중화기 제어 정보(129)를 포함한다.
테이블 엔트리에 포함되어 있는 코드 B OP-코드(107)은 생성되어야 할 내부 명령어 각각의 데이터 필드(109)로 전달된다(108).
"직접" 값(110), 논리 레지스터 식별자(111, 112), 상태 정보, 및 기타(113, 114)와 같은 외부 명령어 요소들의 재조합은 한 세트의 다중화기(120-124)에 의해 실행된다. 각각의 다중화기는 내부 코드 B의 하나의 데이터 필드에 대응하고, 각각의 다중화기의 출력은 대응하는 데이터 필드에 직접 기록된다. 그리하여, MUX 1(120)은 코드 B의 명령어 OP-B1의 데이터 필드(115)에 직접 기록하고(131), MUX 2(121)은 데이터 필드(116)에 대응하고, MUX 3(122)의 출력은 데이터 필드(117)로 직접 전달된다.
다중화기(120-124)의 각각은 여러개의 가능 입력(possible inputs) 중 하나를 선택할 수 있다. 상기 가능 입력은 "직접" 데이터 필드(110), 소스와 타겟 레지스터 양자를 위한 논리 레지스터 식별자(111, 112), 상태 정보, 및 기타(113, 114)와 같은 외부 코드 A의 명령어 내에 포함되어 있는 모든 데이터를 포함한다. 그러나, 외부 명령어에 포함되어 있는 데이터 이외에도, 정의된 프로세서 저장 셀에 포함되어 있는 데이터도 상기 다중화 수단에 대한 입력으로서 사용될 수 있다. 상기 저장 셀의 내용은 단순히 상기 저장 셀에 영구히 포함되어 있는 상수로 구성될 수 있다. 저장 셀(125 및 126)이 두 개의 서로 다른 상수를 포함할 수 있고,상기 두 개의 셀은 다중화기(120-124) 중 임의의 하나의 입력으로서 선택될 수 있다고 가정하자. 저장 셀(125)가 선택되는 경우, 상기 기술한 상수인 저장 셀(125)의 내용은 내부 명령어 데이터 필드에 기록된다. 그 상수는, 예를 들면 소정의 프로세서 레지스터를 지정할 수 있다. 이는 이 지정 레지스터의 이름이 다중화기에 의해 선택되어 소스 또는 타겟 레지스터로서 내부 명령어로 전달될 수 있다는 것을 의미한다. 그리하여, 저장 셀(125, 126)은 상기 내부 명령어에 의해 사용되어야 할 논리 레지스터의 이름을 포함한다.
부가적으로, 상기 다중화 수단의 입력으로서 사용되는 보조 레지스터(auxiliary: 127)이 존재한다. 보조 레지스터 내용이 입력으로서 선택되는 경우에, 보조 레지스터(127)의 내용은 내부 명령어의 데이터 필드로 전달된다. 이러한 보조 레지스터는 논리 레지스터의 이름을 일시적으로 포함한다.
예를 들어, 명령어(100)은 여러개의 논리 소스 및 타겟 레지스터를 사용하는 복잡한 CISC 명령어라고 가정하자. 이 CISC 명령어를 다수의 간단한 RISC 명령어로 디코딩할 때, 상기 RISC 연산은 중간 결과(intermediate results)를 생성한다. 하나의 CISC 명령어에 관련된 상이한 RISC 명령어들 간에 중간 결과를 전달하기 위해서는 논리 레지스터들이 일시적으로 제공되어야 한다. 중간 결과를 유지하는 그러한 논리 레지스터의 이름은 저장 셀(127)에 포함될 수 있다. 하나의 CISC 명령어에 대응하는 RISC 명령어가 생성되면, 상기 중간 논리 레지스터의 이름은 소스 또는 타겟 레지스터를 지정하기 위해 저장 셀(127)로부터 RISC 연산의 데이터 필드 중 임의의 하나로 전달될 수 있다.
각각의 다중화기는 위에서 논의된 상이한 입력들(128) 중 하나를 선택하고 선택된 입력을 그 출력으로 링크한다. 선택은 다수의 제어 라인(130)에 의해 실행된다.
각각의 변환 테이블 엔트리는 초기 코드 A의 명령어를 변환하는데 필요한 전체 MUX 제어 정보(129)를 유지하고 있다. 상기 제어 정보는 생성되어야 할 내부 연산의 수에 따라, 그리고 상기 내부 명령어들의 오퍼런드에 따라 분할된다(is segmented). 내부 명령어의 오퍼런드 마다, 다수의 비트들이 제공되는데, 이는 내부 명령어 오퍼런드의 데이터 필드로 전달되어야 하는 가능 입력들(110-114, 125, 126, 127) 중 하나를 선택한다. 변환 테이블(129) 내의 MUX 제어 정보는 내부 명령어 오퍼런드에 대응하는 다수의 비트 패턴들로 분할된다.
그러한 분할(segmentation)의 장점은 상기 비트 패턴이 상기 내부 명령어의 데이터 필드 중 하나에 대응하는 다중화기를 제어하는데 직접 사용될 수 있다는 것이다. 예를 들면, MUX 2(121)은 생성되어야 할 제1 내부 명령어의 제2 오퍼런드를 유지한다. 상기 MUX 2에는 데이터 필드(116)으로 전달되어야 할 입력을 선택하기 위해서 상기 MUX 제어 정보(129)의 데이터 필드(116)에 대응하는 부분이 제공된다. RAM 테이블에 의해서 전달되는 비트 패턴은 가능 입력(110-114, 125, 126, 127) 중 어느 것이 MUX 2의 출력을 통하여 데이터 필드(116)으로 전달되어야 하는지를 제어하는데(130) 직접 사용될 수 있다.
도 2에는, 하나의 외부 명령어가 하나 이상의 OP-코드에 의해 정의되어 있는 경우에, 상기 외부 명령어(100)에 대응하는 정확한 변환 테이블 엔트리를 발견하는방법이 도시되어 있다. 도 2의 예시에 있어서, 두 개의 OP-코드, 즉 OP-A1(201)과 OP-A2(202)는 모두 상기 OP-코드를 변환 테이블(106) 내의 어드레스로 디코딩하는 어드레스 생성 논리(203)으로 전달된다. 이 테이블 어드레스를 액세스함으로써(204), 대응하는 코드 B OP-코드(107), 및 대응하는 다중화기제어 정보(129)가 결정될 수 있다.
도 3은 변환 테이블 엔트리의 구조를 도시하고 있다. 변환 테이블(106)은 어레이로서 구현될 수 있는데, 상기 어레이 각각의 열(row)은 하나의 코드 A의 명령어에 대응하는 정보를 유지한다. 전형적인 어레이는 수백개의 엔트리를 포함한다.
도 3에 도시된 예시에 있어서, 외부 명령어는 여러개의 내부 명령어들로 변환되어야 한다. 엔트리의 제1 데이터 필드에는 상기 외부 코드 A의 명령어에 대응하는 내부 코드 B의 명령어들의 수 n이 유지되어 있다. 예시에 있어서, n은 4이고, 그러므로, 네 개의 내부 명령어들이 생성되어야 한다.
제어 정보는 생성되어야 할 명령어들에 따라 분할되고, 명령어 1(302), 명령어 2(303), 명령어(304), 및 명령어 4(305)에 대한 제어 데이터가 존재한다. 생성되어야 할 각각의 명령어에 대응하는 제어 정보는 상기 내부 명령어의 코드 B OP-코드를 포함한다. 명령어 1(302)에 대한 제어 데이터 필드에 있어서, OP-B1(306)이 주어지고, 이에 대응하여, 명령어 2 내지 4의 제어 정보 블록에 있어서, OP-B2(307), OP-B3(308), 및 OP-B4(309)가 주어진다.
다음으로, 상태 비트와 같은 소정의 추가적인 비트(310)가 각각의 코드 BOP-코드에 대하여 제공된다. 예를 들면, 각각의 내부 명령어에 대하여 어느 실행 유니트로 디스패치되어야(312) 하는 지가 지정된다. 이어서, MUX 제어를 위하여 사용되는 비트 패턴(311)이 제공된다.
어떻게 MUX 제어 비트 패턴이 내부 명령어 오퍼런드에 대응하는지를 이해하기 위해서, 명령어 2(303)의 제어 정보가 더욱 상세히 도시되어 있다. 명령어 2에 대한 MUX 제어 데이터 필드(313)은 내부 명령어 2의 각각의 오퍼런드에 대한 비트 패턴을 포함한다. 각각의 비트 패턴은 복수개의 가능 입력들 중 어느 것이 내부 명령어, 이 경우에 있어서는 명령어 2의 하나의 특정 오퍼런드 데이터 필드로 전달되어야 하는지를 지정한다. 그리하여, 내부 명령어 오퍼런드(314, 315, 317, 318, 319) 마다 하나의 비트 패턴이 존재한다.
논리 소스 레지스터는 5 비트(318, 319)에 의해 지정되어야 하고, 이에 의해 소스 오퍼런드로서 사용되는 조건 코드(condition code: 317)는 본 구현에 있어서 2 비트를 요구한다. 정확한 명령어 부분을 "직접" 데이터 필드로 라우팅하는데는 5개의 선택 비트가 필요하다(316). 정확한 코드 A의 명령어 부분을 명령어 2의 타겟 데이터 필드로 라우팅하기 위해서는, 5개의 선택 비트가 필요하다(315). 상기 내부 명령어 2가 실제 조건 코드(actual condition code)에 의존하는(depends on)지를 표시하기 위해, 2개의 비트가 제공되어야 한다(317). 상기 명령어 2가 새로운 조건 코드를 생성하는지 - 이는 실제 조건 코드가 수정되었음을 의미함 - 를 표시하기 위해, 2개의 비트가 요구된다(314).
도 4는 전형적으로 RISC 명령어인 내부 명령어의 형식을 도시하고 있다. 도4에 도시된 명령어 형식은 오퍼런드를 소스 오퍼런드와 타겟 오퍼런드로 분리하므로, 슈퍼스칼라 RISC 프로세서에서의 데이터 종속에 대한 해결책으로서 매우 적합하다. 내부 명령어 형식은 코드 B OP-코드 OP-B에 대한 데이터 필드(401) 및 여러개의 제어 비트(402)를 포함한다. 더욱이, 대응하는 코드 A의 명령어의 명령어 어드레스는 대응하는 내부 명령어로 전달되고 데이터 필드(043)에 저장된다. 이러한 명령어 어드레스에 의해서, 외부 명령어 순차 내의 점프(jumps) 및 분기(branches)가 내부 명령어 순차로 변환될 수 있다. 데이터 필드(404)는 직접 연산 또는 어드레스 산술에서 사용되는 상수를 포함하는 "직접" 데이터 필드이다. 데이터 필드(405, 406, 및 407)은 내부 명령어의 소스 오퍼런드를 지정한다. 소스 오퍼런드로서 사용되어야 할 두 개의 논리 레지스터의 이름은 데이터 필드(406 및 407)에 포함된다.
실제 조건 코드는 또한, 예를 들어 "조건상 분기(branch on condition)"에서 소스 오퍼런드로서 사용될 수 있다. 이러한 경우에 있어서, 데이터 필드(405)는 실제 조건 코드가 명령어의 소스 중 하나로 사용되어야 한다는 것을 표시한다.
결과 데이터가 어디에 기록되어야 하는지도 명령어에서 지정되어야 한다. 데이터 필드(409)는 타겟 레지스터로서 사용되어야 할 논리 레지스터의 이름을 포함한다. 부가적으로, 명령어는 실제 조건 코드를 수정할 수 있어야 하고 새로운 조건 코드 값을 생성할 수 있어야 한다. 이 경우에 있어서, 새로운 조건 코드는 타겟 오퍼런드로서 처리되고, 이는 데이터 필드(408)에서 표시된다.
도 5는 명령어 변환기의 레이아웃을 더욱 상세하게 도시하고 있다. 외부 코드 A의 명령어(100)은 코드 B로 변환된다. 이는 변환 테이블(106)으로부터 재구성 정보를 얻어서 행해지고, 상기 재구성 정보는 한 세트의 다중화기(510-516)을 제어하기 위해 사용된다. 각각의 다중화기의 출력은 생성되어야 할 내부 코드 B의 명령어의 하나의 데이터 필드에 대응한다.
외부 명령어의 OP-코드 OP-A(102)는 어드레스 생성 논리(104)로 전달된다. 이는 OP-A에 대응하는 변환 테이블 엔트리를 결정하도록 한다. 상기 변환 테이블 엔트리는 각각의 다중화기(510-516)에 대하여 필요한 모든 제어 정보를 포함한다. 그러므로, 상기 제어 정보는 생성되어야 할 내부 명령어의 데이터 필드에 따라 구성된다. 제어 정보의 각각의 부분은 각각의 다중화기의 가능 입력들 중 하나를 선택하기 위해 각각의 다중화기로 전달된다. 선택된 입력은 다중화기의 출력으로 전달되고 상기 다중화기에 대응하는 내부 명령어(400)의 데이터 필드에 기록된다.
상기 내부 명령어(400)을 생성하기 위해서, 코드 B OP-코드 OP-B는 OP-A에 대응하는 변환 테이블 엔트리로부터 판독되고, 내부 명령어로 전달되며, 데이터 필드(401)에 저장된다. 외부 명령어(100)의 명령어 어드레스(500)은 또한 상기 내부 명령어의 대응하는 데이터 필드(403)으로 직접 전달된다.
이러한 내부 명령어의 두 개의 데이터 필드, 즉 OP-코드에 대한 데이터 필드 및 명령어 어드레스에 대한 데이터 필드는 다중화기의 출력에 결합되지 않는 유일한 것들이다.
어떻게 다중화기가 작동하는지를 이해하기 위해, 어떻게 논리 레지스터의 이름이 내부 명령어의 소스 데이터 필드(406 및 407)로 전달되는지를 조사해 보자.대응하는 다중화기(515 및 516)의 각각은 넓은 범위의 가능 입력을 가지고 있다. 논리 소스 레지스터의 이름을 포함하고 있을 수 있는 외부 명령어의 명령어 요소들(501-505)가 상기 다중화기의 입력이다.
명령어의 문맥(context)에 따라, 미리-지정된 논리 레지스터 이름을 입력으로서 사용하는 것이 바람직할 것이다. 이러한 논리 레지스터의 "상수" 이름은 별도 저장부(separate storage: 508)에 포함되어 있다. 이러한 "상수"는 상기 다중화기(515 및 516)로 하드-와이어드된(hard-wired) 입력으로서 구현될 수 있다. 도 5의 예시에 있어서, 논리 레지스터 이름 "RN", "4C" 및 "4F"는 다중화기(516)의 상수 입력이다.
그러나, 이러한 상수 레지스터 이름을 사용하는 것 이외에, 동적으로 논리 레지스터를 할당하는 것도 가능하다. 상기 논리 레지스터의 이름은 보조 레지스터에 기록된다. 상기 다중화기는 상기 동적으로 할당된 레지스터의 이름을 각각의 소스 데이터 필드(406, 407)로 전달하기 위해 상기 보조 레지스터를 액세스할 수 있다.
상기 영구적으로 할당된 레지스터와 상기 동적으로 할당되는 레지스터는 복잡한 외부 명령어가 다수의 내부 RISC 명령어로 변환될 때 특히 유용하다. 상기 대응하는 RISC 명령어들 사이에 새로운 데이터 종속 문제가 생긴다. 예를 들면, 제1 RISC 명령어에 의해 생성되는 중간 결과는 제2 RISC 명령어로 전달되어야 한다. 이러한 경우에 있어서, 제1 명령어에 의해 타겟으로서 사용되고 제2 명령어에 의해 소스로서 사용되는 논리 레지스터는 내부 명령어들 사이에 데이터를 전달할수 있도록 지정되어야 한다.
어떻게 타겟 오퍼런드가 지정되는지를 고찰하는 경우에도 기본적으로 동일한 고려 사항(consideration)이 적용된다. 대응하는 다중화기(511)은 외부 명령어(501-505)의 명령어 요소 또는 미리-지정된 레지스터 이름을 타겟 오퍼런드 필드(409)로 전달할 수 있다.
외부 명령어(501-505)의 상기 명령어 요소들은 다중화기로 직접 전달되든지 또는 먼저 선처리 논리(preprocess logic: 506)에 의해 수정된다.
"직접" 데이터 필드(404)는 논리 레지스터의 이름을 포함하지 않고, 상수 값을 포함한다. 상기 상수는 외부 명령어의 명령어 요소(501-505)로부터 얻어지던지 또는 다중화기(513)의 입력으로 직접 인가되는 "0" 또는 "1"과 같은 상수 입력으로부터 얻어질 수 있다. 예를 들면, "1"을 선택함으로써, 이 값은 "직접" 데이터 필드(404)로 기록되고 "가산 직접(add immediate) " 연산은 단순히 1만큼의 증가를 실행한다.
소스 데이터 필드(405) 및 타겟 데이터 필드(408)은 조건 코드의 처리를 참조한다. 내부 명령어(400)이 실제 조건 코드에 의존하는 경우에, "CC"는 다중화기(514)에 의해 데이터 필드(405)로 전달된다. 이는 실제 조건 코드가 소스 오퍼런드로서 사용되어야 한다는 것을 표시한다. 내부 명령어가 소스 오퍼런드로서 조건 코드를 사용하지 않는 경우, 데이터 필드(405)에 "CN"이 기록된다.
타겟 데이터 필드(408)은 이에 따라 처리된다. 내부 명령어(400)이 실제 조건 코드를 수정하는 경우에, 새로운 조건 코드가 타겟 오퍼런드로서 고려되고,"CC"가 데이터 필드(408)에 기록된다. 그렇지 않은 경우, "CX"가 데이터 필드(408)에 저장된다.
내부 명령어의 여러개의 제어 비트(402)는 대응하는 변환 테이블 엔트리로부터 직접 얻어질 수 있다. 예를 들면, 내부 명령어가 디스패치되어야 하는(312) 실행 유니트가 직접 얻어질 수 있다. 부가적으로, 예외(exception: 517)이 발생할 때마다 대응하는 제어 비트가 그에 따라 수정되었는지를 처리하는 다중화기(512)가 존재한다.
많은 명령어 코드 중에, 전체 명령어 세트의 단지 서브세트(subset)만이 하드-와이어드된다. 이들은 실제로 기본적인 명령어들이다. 상기 명령어 코드의 다른 모든 명령어들은 마이크로코드 명령어로서 구현되는데, 이는 상기 하드-와이어드된 명령어에 의존한다(rely on). 각각의 마이크로코드 명령어는 하드-와이어드된 명령어의 순차로 구성된다.
예를 들면, 마이크로코드 명령어인 "문자 이동 긴(move character long)" 명령어는 기본적인 명령어 "문자 이동(move character)", 및 루프 제어(loop control)로 구성되어 있다.
기술된 명령어 변환 메커니즘을 마이크로 명령어에 적용하는 방법에는 두가지 방법이 가능하다. 제1 방법은 각각의 코드 A 마이크로코드 명령어를 명백하게 정의된 다수의 코드 B 내부 명령어에 관련시키는 것이다. 물론, 이러한 내부 명령어들은 순차적으로 생성되어야 한다.
제2 방법은 우선 코드 A의 상기 마이크로코드 명령어들은 대응하는 코드 A의하드-와이어드된 명령어의 순차로 변환하는 것이다. 이어서, 다음 단계에서, 하드-와이어드된 외부 명령어들의 각각은 변환 테이블(106)에 의해 대응하는 내부 명령어의 순차로 변환되어야 한다. 이러한 두 번째 해법의 장점은 각각의 하드-와이어드된 외부 명령어에 대하여 대응하는 내부 명령어가 병렬로 생성될 수 있다는 것이다.
그러한 각각의 마이크로코드 명령어의 2-단계 변환을 실행할 때, 상기 마이크로코드 명령어의 명령어 요소들은 상기 보조 레지스터(509)에 우선 버퍼링되어야 한다. 이어서, 상기 외부 마이크로코드 명령어에 대응하는 변환 테이블이 액세스된다. 이 테이블 엔트리는 메모리 내의 위치를 지시하고, 여기서 상기 마이크로코드 명령어에 대응하는 하드-와이어드된 외부 명령어의 순차가 저장된다.
이제, 하드-와이어드된 외부 명령어들의 각각은 내부 명령어들로 차례로 변환될 수 있다. 마이크로코드 명령어의 논리 레지스터가 어드레싱될 때, 상기 논리 레지스터의 이름은 상기 보조 레지스터로부터 얻어질 수 있다. 변환되어야 할 외부 명령어가 마이크로코드 명령어인지 또는 하드-와이어드된 명령어(507)인지에 따라, 적합한 변환 모드가 선택된다.
본 발명의 코드 변환기에 따르면, 실행 시간 중에 고속으로 여러개의 명령어를 병렬로 디코딩하는 것이 가능하며, 변환 경로의 변경을 쉽게 구현할 수 있다.

Claims (20)

  1. 제1 명령어 세트의 명령어들을 제2 명령어 세트의 명령어들 - 상기 제2 명령어 세트는 제1 프로세서 형식(processor type)에 의해 처리될 수 있고, 상기 제1 프로세서 형식은 상기 제1 명령어 세트를 처리할 수 없으며, 상기 제1 명령어 세트 및 상기 제2 명령어 세트의 상기 명령어들의 각각은 명령어 요소들(instruction elements)을 포함함 - 로 변환하기 위한 장치에 있어서,
    상기 제1 명령어 세트의 명령어를 상기 제1 명령어 세트의 상기 명령어에 대응하는 재구성 정보(rearrangement information)와 관련시키는(relating) 테이블 수단과,
    상기 제1 명령어 세트의 상기 명령어의 상기 명령어 요소들을 제1 입력으로서 사용하고, 상기 제1 명령어 세트의 상기 명령어에 대응하는 상기 재구성 정보를 제2 입력으로서 사용하며, 상기 제1 명령어 세트의 상기 명령어에 기능상(functionally) 대응하는 상기 제2 명령어 세트의 상기 명령어들 중의 적어도 하나의 명령어를 생성하기 위해 상기 재구성 정보에 따라 상기 제1 명령어 세트의 상기 명령어의 상기 명령어 요소들을 재구성하는 재구성 수단
    을 포함하는 변환 장치.
  2. 제1항에 있어서, 상기 테이블 수단은 RAM 테이블 수단으로서 구현되는 것을 특징으로 하는 변환 장치.
  3. 제1항에 있어서, 상기 테이블 수단은 ROM 테이블 수단으로서 구현되는 것을 특징으로 하는 변환 장치.
  4. 제1항에 있어서, 상기 제1 명령어 세트의 상기 명령어들은 CISC 명령어이고 상기 제2 명령어 세트의 상기 명령어들은 RISC 명령어인 것을 특징으로 하는 변환 장치.
  5. 제1항에 있어서, 상기 제1 명령어 세트의 상기 명령어들과 상기 제2 명령어 세트의 상기 명령어들은 모두 RISC 명령어인 것을 특징으로 하는 변환 장치.
  6. 제1항에 있어서, 상기 재구성 수단은 다중화 수단(multiplexing means)으로서 구현되고, 상기 다중화 수단은 상기 제1 명령어 세트의 상기 명령어들의 상기 명령어 요소들을 상기 제2 명령어 세트의 상기 명령어들 중의 적어도 하나의 기능상 대응하는 명령어의 명령어 요소들을 나타내는 각각의 데이터 필드들로 다중화하는 것을 특징으로 하는 변환 장치.
  7. 제1항에 있어서,
    상기 제1 명령어 세트의 상기 명령어에 대응하는 상기 재구성 정보는 상기 제2 명령어 세트의 상기 명령어 또는 상기 명령어들의 명령어 요소마다(perinstruction element) 라우팅 정보(routing information)를 포함하고,
    상기 제2 명령어 세트의 상기 명령어 또는 상기 명령어들은 상기 제1 명령어 세트의 상기 명령어에 기능상 대응하고,
    상기 라우팅 정보는 상기 제1 명령어 세트의 상기 명령어의 상기 명령어 요소들 중 어느 것이 상기 제2 명령어 세트의 상기 명령어 또는 상기 명령어들의 상기 명령어 요소들 중 하나를 나타내는 각각의 데이터 필드로 전달되어야 하는지를 결정하는 것을 특징으로 하는 변환 장치.
  8. 제1항에 있어서, 상기 테이블 수단은 상기 제1 명령어 세트의 상기 명령어들 중의 명령어를 상기 제2 명령어 세트의 명령어들 중의 적어도 하나의 기능상 대응하는 명령어의 적어도 하나의 OP-코드와 관련시키는 것을 특징으로 하는 변환 장치.
  9. 제1항에 있어서, 상기 테이블 수단은 상기 제1 명령어 세트의 상기 명령어들 중의 명령어를 상기 제2 명령어 세트의 복수개의 기능상 대응하는 명령어들과 관련시키는 것을 특징으로 하는 변환 장치.
  10. 제1 명령어 세트의 명령어들을 제2 명령어 세트의 명령어들 - 상기 제2 명령어 세트는 제1 프로세서 형식(processor type)에 의해 처리될 수 있고, 상기 제1 프로세서 형식은 상기 제1 명령어 세트를 처리할 수 없으며, 상기 제1 명령어 세트및 상기 제2 명령어 세트의 상기 명령어들의 각각은 명령어 요소들(instruction elements)을 포함함 - 로 변환하기 위한 방법에 있어서,
    적어도 하나의 테이블로부터 재구성 정보 - 상기 재구성 정보는 상기 제2 명령어 세트로 변환되어야 할 상기 제1 명령어 세트의 상기 명령어들 중의 명령어에 대응함 - 를 얻는 단계와,
    상기 제2 명령어 세트의 상기 명령어들 중의 적어도 하나의 명령어를 생성하기 위해, 상기 재구성 정보에 따라 상기 제1 명령어 세트의 상기 명령어의 상기 명령어 요소들을 재구성하는 단계
    를 포함하는 변환 방법.
  11. 제10항에 있어서, 상기 테이블 또는 상기 테이블들을 RAM 테이블 또는 RAM 테이블들로서 제공하는 것을 특징으로 하는 변환 방법.
  12. 제10항에 있어서, 상기 테이블 또는 상기 테이블들을 ROM 테이블 또는 ROM 테이블들로서 제공하는 것을 특징으로 하는 변환 방법.
  13. 제10항에 있어서, 상기 제1 명령어 세트의 상기 명령어들은 CISC 명령어이고 상기 제2 명령어 세트의 상기 명령어들은 RISC 명령어인 것을 특징으로 하는 변환 방법.
  14. 제10항에 있어서, 상기 제1 명령어 세트의 상기 명령어들과 상기 제2 명령어 세트의 상기 명령어들은 모두 RISC 명령어인 것을 특징으로 하는 변환 방법.
  15. 제10항에 있어서, 상기 재구성 정보에 따라, 상기 제1 명령어 세트의 상기 명령어의 상기 명령어 요소들을 상기 제2 명령어 세트의 상기 명령어들 중의 적어도 하나의 기능상 대응하는 명령어의 명령어 요소들을 나타내는 각각의 데이터 필드들로 다중화하는 단계를 더 포함하는 변환 방법.
  16. 제10항에 있어서, 상기 테이블 또는 상기 테이블들로부터 상기 제1 명령어 세트의 상기 명령어에 대응하는 상기 제2 명령어 세트의 명령어들의 수를 얻는 단계를 더 포함하는 변환 방법.
  17. 제10항에 있어서, 상기 테이블 또는 상기 테이블들로부터 상기 제1 명령어 세트의 명령어에 기능상 대응하는 상기 제2 명령어 세트의 상기 명령어들 중의 적어도 하나의 명령어의 적어도 하나의 OP-코드를 얻는 단계를 더 포함하는 변환 방법.
  18. 제10항에 있어서,
    상기 제1 명령어 세트의 상기 명령어에 기능상 대응하는 상기 제2 명령어 세트의 상기 명령어 또는 명령어들의 명령어 요소마다 라우팅 정보를 제공하는 단계와,
    상기 라우팅 정보에 따라, 상기 제1 명령어 세트의 상기 명령어의 상기 명령어 요소들 중 어느 것이 상기 제2 명령어 세트의 상기 명령어 또는 상기 명령어들의 상기 명령어 요소들 중 하나를 나타내는 각각의 데이터 필드로 전달되어야 하는지를 결정하는 단계
    를 더 포함하는 변환 방법.
  19. 제1항에 있어서, 상기 명령어 요소들은 적어도 하나의 OP-코드를 포함하고, 상기 변환 장치는, 상기 제1 명령어 세트의 상기 명령어의 상기 OP-코드를 디코딩하기 위한 디코더를 더 포함하며, 상기 디코딩된 OP-코드는 상기 제1 명령어 세트의 상기 명령어에 대응하는 상기 재구성 정보에 대한 상기 테이블 수단 내의 위치를 결정하는 변환 장치.
  20. 제19항에 있어서, 상기 명령어 요소들은 하나 또는 그 이상의 오퍼랜드를 포함하고, 상기 테이블 수단 내의 상기 위치 내의 상기 재구성 정보는 상기 제1 명령어 세트 내의 상기 명령어의 오퍼랜드들을 상기 제2 명령어 세트의 상기 명령어들 중의 상기 기능상 대응하는 적어도 하나의 명령어 내의 상기 오퍼랜드들에 대한 레지스터들로 다중화하기 위한 제어 정보를 포함하는 변환 장치.
KR1019970052734A 1997-02-27 1997-10-15 명령어요소들의재조합에의한서로다른명령어코드들사이의동적변환 KR100300001B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP97103233.9 1997-02-27
EP97103233 1997-02-27

Publications (2)

Publication Number Publication Date
KR19980070019A KR19980070019A (ko) 1998-10-26
KR100300001B1 true KR100300001B1 (ko) 2001-09-03

Family

ID=8226531

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970052734A KR100300001B1 (ko) 1997-02-27 1997-10-15 명령어요소들의재조합에의한서로다른명령어코드들사이의동적변환

Country Status (5)

Country Link
US (1) US5925124A (ko)
JP (1) JP3180075B2 (ko)
KR (1) KR100300001B1 (ko)
DE (1) DE69841769D1 (ko)
TW (1) TW368636B (ko)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001515240A (ja) * 1997-09-01 2001-09-18 フジツウ シーメンス コンピューターズ ゲゼルシャフト ミット ベシュレンクテル ハフツング オブジェクトコードからプログラムコードへの変換方法
US6460116B1 (en) 1998-09-21 2002-10-01 Advanced Micro Devices, Inc. Using separate caches for variable and generated fixed-length instructions
US6253309B1 (en) 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6275927B2 (en) * 1998-09-21 2001-08-14 Advanced Micro Devices. Compressing variable-length instruction prefix bytes
US6240506B1 (en) 1998-10-02 2001-05-29 Advanced Micro Devices, Inc. Expanding instructions with variable-length operands to a fixed length
US6339822B1 (en) 1998-10-02 2002-01-15 Advanced Micro Devices, Inc. Using padded instructions in a block-oriented cache
WO2000065440A2 (en) * 1999-04-27 2000-11-02 Transitive Technologies Limited Exception handling method and apparatus for use in program code conversion
US6654869B1 (en) * 1999-10-28 2003-11-25 International Business Machines Corporation Assigning a group tag to an instruction group wherein the group tag is recorded in the completion table along with a single instruction address for the group to facilitate in exception handling
US7418580B1 (en) * 1999-12-02 2008-08-26 International Business Machines Corporation Dynamic object-level code transaction for improved performance of a computer
US6697939B1 (en) * 2000-01-06 2004-02-24 International Business Machines Corporation Basic block cache microprocessor with instruction history information
US6978233B1 (en) * 2000-03-03 2005-12-20 Unisys Corporation Method for emulating multi-processor environment
JP2001275140A (ja) * 2000-03-28 2001-10-05 Matsushita Electric Ind Co Ltd 運用/待機構成の通信制御装置及び運用/待機系切替方法
US6732257B1 (en) * 2000-09-29 2004-05-04 Intel Corporation Reducing the length of lower level instructions by splitting and recombining an immediate
US7873814B1 (en) * 2000-12-22 2011-01-18 Lsi Corporation Microcode based hardware translator to support a multitude of processors
US6775892B2 (en) * 2000-12-22 2004-08-17 Diebolt International, Inc. Retaining ring installation tool
US6691306B1 (en) * 2000-12-22 2004-02-10 Lsi Logic Corporation Use of limited program space of general purpose processor for unlimited sequence of translated instructions
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
US7162617B2 (en) * 2003-02-14 2007-01-09 Fine Arc Incorporated Data processor with changeable architecture
US7219337B2 (en) * 2003-03-06 2007-05-15 Northrop Grumman Corporation Direct instructions rendering emulation computer technique
US7272700B1 (en) * 2003-12-23 2007-09-18 Altera Corporation Methods and apparatus for indirect compound VLIW execution using operand address mapping techniques
US8427490B1 (en) 2004-05-14 2013-04-23 Nvidia Corporation Validating a graphics pipeline using pre-determined schedules
JP2006092158A (ja) * 2004-09-22 2006-04-06 Toshiba Corp デジタル信号処理回路
US8624906B2 (en) * 2004-09-29 2014-01-07 Nvidia Corporation Method and system for non stalling pipeline instruction fetching from memory
US8725990B1 (en) 2004-11-15 2014-05-13 Nvidia Corporation Configurable SIMD engine with high, low and mixed precision modes
US20060155961A1 (en) * 2005-01-06 2006-07-13 International Business Machines Corporation Apparatus and method for reformatting instructions before reaching a dispatch point in a superscalar processor
TW200643781A (en) * 2005-06-02 2006-12-16 Rdc Semiconductor Co Ltd Conversion interface of memory device
US9092170B1 (en) 2005-10-18 2015-07-28 Nvidia Corporation Method and system for implementing fragment operation processing across a graphics bus interconnect
US9436468B2 (en) * 2005-11-22 2016-09-06 Intel Corporation Technique for setting a vector mask
US8683126B2 (en) * 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8698819B1 (en) 2007-08-15 2014-04-15 Nvidia Corporation Software assisted shader merging
US8659601B1 (en) 2007-08-15 2014-02-25 Nvidia Corporation Program sequencer for generating indeterminant length shader programs for a graphics processor
US9024957B1 (en) 2007-08-15 2015-05-05 Nvidia Corporation Address independent shader program loading
US8411096B1 (en) 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
US8780123B2 (en) * 2007-12-17 2014-07-15 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US9064333B2 (en) 2007-12-17 2015-06-23 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US7502918B1 (en) * 2008-03-28 2009-03-10 International Business Machines Corporation Method and system for data dependent performance increment and power reduction
US8681861B2 (en) * 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
US8923385B2 (en) * 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
US8489851B2 (en) * 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
GB2484489A (en) * 2010-10-12 2012-04-18 Advanced Risc Mach Ltd Instruction decoder using an instruction set identifier to determine the decode rules to use.

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4236204A (en) * 1978-03-13 1980-11-25 Motorola, Inc. Instruction set modifier register
US4415969A (en) * 1980-02-07 1983-11-15 Intel Corporation Macroinstruction translator unit for use in a microprocessor
JPS6133546A (ja) * 1984-07-25 1986-02-17 Nec Corp 情報処理装置
EP0476722B1 (en) * 1985-04-08 1997-02-26 Hitachi, Ltd. Data processing system
US4791559A (en) * 1985-12-16 1988-12-13 Sperry Corporation High-speed instruction control for vector processors with remapping
US5115500A (en) * 1988-01-11 1992-05-19 International Business Machines Corporation Plural incompatible instruction format decode method and apparatus
GB2289354B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Multiple instruction set mapping
US5638525A (en) * 1995-02-10 1997-06-10 Intel Corporation Processor capable of executing programs that contain RISC and CISC instructions

Also Published As

Publication number Publication date
KR19980070019A (ko) 1998-10-26
DE69841769D1 (de) 2010-09-02
US5925124A (en) 1999-07-20
JP3180075B2 (ja) 2001-06-25
JPH10240524A (ja) 1998-09-11
TW368636B (en) 1999-09-01

Similar Documents

Publication Publication Date Title
KR100300001B1 (ko) 명령어요소들의재조합에의한서로다른명령어코드들사이의동적변환
EP3179362B1 (en) Processor with an expandable instruction set architecture for dynamically configuring execution resources
US9672033B2 (en) Methods and apparatus for transforming, loading, and executing super-set instructions
US8423976B2 (en) Extreme pipeline and optimized reordering technology
US5951674A (en) Object-code compatible representation of very long instruction word programs
US5121498A (en) Translator for translating source code for selective unrolling of loops in the source code
US6061783A (en) Method and apparatus for manipulation of bit fields directly in a memory source
US20060095720A1 (en) Reuseable configuration data
JPH01201729A (ja) デコード方法
US20040162964A1 (en) Processor capable of switching/reconstituting architecture
US7552313B2 (en) VLIW digital signal processor for achieving improved binary translation
US7058932B1 (en) System, computer program product, and methods for emulation of computer programs
US6578193B1 (en) Endian-neutral loader for interpretive environment
US6012138A (en) Dynamically variable length CPU pipeline for efficiently executing two instruction sets
US5504914A (en) Multi-level instruction boosting method using plurality of ordinary registers forming plurality of conjugate register pairs that are shadow registers to each other with different only in MSB
KR100573334B1 (ko) 실시간 동적 수정이 가능한 명령어 집합을 가지는 컴퓨터
JPH09212370A (ja) ゲスト命令をエミュレートするプロセッサの性能改善方法及びシステム
WO2000077623A1 (en) Data processor with an arithmetic logic unit and a stack
KR100374401B1 (ko) 마이크로 명령을 기초로 프로그램 가능한 명령을 실행하는하드웨어 장치
EP0862111B1 (en) Dynamic conversion between different instruction codes by recombination of instruction elements
JPH02293931A (ja) 制御装置
US6049864A (en) Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor
JPH03204030A (ja) コンピュータ用プロセツサ
US7444495B1 (en) Processor and programmable logic computing arrangement
KR20040111650A (ko) 인스트럭션 시퀀스 디코딩 방법 및 장치

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
LAPS Lapse due to unpaid annual fee