KR100510030B1 - 간단한회로로분기해저드의저감을실현한파이프라인프로세서 - Google Patents

간단한회로로분기해저드의저감을실현한파이프라인프로세서 Download PDF

Info

Publication number
KR100510030B1
KR100510030B1 KR10-1998-0025495A KR19980025495A KR100510030B1 KR 100510030 B1 KR100510030 B1 KR 100510030B1 KR 19980025495 A KR19980025495 A KR 19980025495A KR 100510030 B1 KR100510030 B1 KR 100510030B1
Authority
KR
South Korea
Prior art keywords
instruction
address
fetch
decryption
code
Prior art date
Application number
KR10-1998-0025495A
Other languages
English (en)
Other versions
KR19990007479A (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 KR19990007479A publication Critical patent/KR19990007479A/ko
Application granted granted Critical
Publication of KR100510030B1 publication Critical patent/KR100510030B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • 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/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter

Landscapes

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

Abstract

본 발명의 프로세서는 프로그램 루프 직전에 설정된 레지스터 명령과 프로그램 루프의 끝에 설정된 루프명령을 사용하여 고속으로 프로그램 루프를 실행한다. 분기 타깃 정보 레지스터 명령이 명령 디코더에 의해 해독되는 경우 페치 명령 버퍼 내의 코드는 분기 타깃 명령 레지스터에 전송되고, 해독 명령 카운터 내의 시프트된 포인터는 분기 타깃 페치 어드레스 레지스터로 전송된다. 고속 루프 명령이 명령 디코더에 의해 해독되고 분기 조건이 만족된 후 분기 타깃 페치 어드레스 내의 포인터는 페치 명령 카운터와 해독 명령부에 전송되고 분기 타깃 명령 레지스터내의 코드는 해독 명령 버퍼로 전송된다. 해독 명령 카운터 내의 시프트된 포인터를 사용함으로써 고속 루프 명령은 소규모 하드웨어로 효과적으로 실행될 수 있다.

Description

간단한 회로로 분기 해저드의 저감을 실현한 파이프라인 프로세서{PIPELINE PROCESSOR CAPABLE OF REDUCING BRANCH HAZARDS WITH SMALL-SCALE CIRCUIT}
본 발명은 파이프라인 처리를 이용하여 기계어 명령 시퀀스를 실행하는 프로세서에 관한 것으로, 특히 고속으로 분기를 실행하는 프로세서에 관한 것이다.
파이프라인 처리는 중앙처리장치(CPU ; 이하, 프로세서라 함)에 의해 고속의 처리를 달성하기 위한 기본 기술의 하나로 알려져 있다. 파이프라인 처리에서 하나의 명령을 처리하는 프로세스는 복수의 작은 처리단위(파이프라인 스테이지)로 분할되고, 각 파이프라인 스테이지의 처리는 병렬로 처리되어 처리속도를 향상시키는 것이다. 그러나, 이 기술은 기능정지(stall)가 발생하기 때문에 분기 명령을 실행하는데 효과적이지 않다. 이 현상을 분기 해저드(branch hazard)라 한다. 분기 해저드 때문에 파이프라인 처리의 동작성능이 최적의 레벨에 도달할 수 없다.
이하는 분기 해저드가 발생하는 프로그램의 구체예이다. 세미콜론 다음에 추가된 주석은 각 명령의 내용을 나타낸다.
(명령 1) mov 0, i ; 0을 i에 전송
L: ; 분기 타깃을 나타내는 레이블
(명령 2) add a, b, c ; a와 b의 합을 c에 전송
(명령 3) mul a, b, d ; a와 b의 곱을 d에 전송
(명령 4) add i, 1, i ; i에 1을 가산
(명령 5) cmp i, 3 ; i와 3을 비교
(명령 6) bcc L ; i< 3인 경우는 L로 분기
상기의 프로그램을 실행할 때 명령 2부터 명령 5까지의 처리가 3회 반복된다. 이 프로그램에서 명령 6의 실행은 다음의 3사이클에서 명령 2를 페치, 해독, 실행하는 3개의 스테이지가 뒤따른다. 이 결과, 명령 6과 명령 2의 실행 사이에 2 사이클 이상의 분기 해저드가 발생한다.
분기 해저드를 피하기 위한 기술로서, 일본국 특허 공개공보 평8-314719호에 개시된 프로세서가 있다.
이 기술에서 루프의 제 1 명령을 포함하는 코드는 루프가 시작되기 전에 버퍼에 저장된다. 프로그램이 루프의 최종명령으로부터 제 1 명령으로 분기하면 버퍼로부터 코드가 검색되어 제 1 명령이 해독 및 실행된다. 이러한 장치에 의해 제 1 명령은 루프가 실행될 때마다 매번 외부 메모리로부터 페치될 필요가 없으므로 분기 해저드를 피할 수 있다.
그러나 상술한 종래의 프로세서는 분기 해저드를 피하기 위한 특별한 회로를 필요로 하기 때문에 회로규모가 커지는 문제점이 있다.
먼저, 프로세서는 루프가 시작되기 직전에 제 1 명령을 포함하는 코드가 버퍼에 저장되는 동안 루프의 제 1 명령을 포함하는 코드에 후속하는 코드의 페치 어드레스를 계산하기 위해 특별히 사용되는 가산기를 구비하여야 한다. 계산된 페치 어드레스는 어드레스 버퍼에 저장된다.
또한 프로세서는 최종 명령으로부터 제 1 명령까지 처리가 분기되면 어드레스 버퍼로부터 검색된 페치 어드레스를 사용하여 해독될 제 1 명령의 어드레스를 계산하기 위해 특별히 사용되는 감산기를 구비하여야 한다.
가산기와 감산기를 포함하면 상술한 종래의 프로세서의 하드웨어 규모가 증대되는 결과를 초래한다.
본 발명의 목적은 상술한 문제점을 해소시키기 위한 것으로, 소규모 회로로 분기 해저드를 감축시킬 수 있는 파이프라인 프로세서를 제공하기 위한 것이다.
상술한 목적을 달성하기 위한 본 발명의 프로세서는 메모리로부터 코드를 페치하는 페치부와, 페치 코드에 포함된 명령을 해독하는 해독부와, 해독 명령을 실행하는 실행부를 포함하며, 프로그램 루프 직전에 설정된 레지스터 명령과 프로그램 루프의 끝에 설정된 루프명령을 사용하여 고속으로 프로그램 루프를 실행하는 프로세서로서, 상기 해독부는 해독되는 명령을 특정하는 포인터를 저장 및 갱신하는 해독 명령 카운터를 포함하고, 상기 포인터는 해독되는 명령의 어드레스와 고정 시프트값의 합이며, 상기 실행부는, 코드를 저장하는 영역을 갖는 제 1 버퍼와, 어드레스를 저장하는 영역을 갖는 제 2 버퍼와, 상기 해독부가 레지스터 명령을 해독하는 경우, 상기 페치부에 의해 페치된 프로그램 루프의 시작시의 코드를 상기 제 1 버퍼에 저장하고, 상기 해독 명령 카운터에 저장된 포인터를 상기 제 2 버퍼에 저장하는 저장수단과, 상기 루프명령이 상기 해독부에 의해 해독되고 분기조건이 만족되는 경우, (a) 상기 페치부로 하여금 상기 제 2 버퍼에 저장된 포인터에 대응하는 어드레스로부터 시작하는 코드를 페치하게 하고, (b) 상기 해독부로 하여금 상기 제 1 버퍼에 저장된 코드를 해독하게 하는 고속 분기 수단을 포함하며, 상기 제 2 버퍼 내의 포인터가 상기 제 1 버퍼 내에 저장된 코드에 후속하는 코드의 어드레스에 대응하도록 고정 시프트값이 결정되는 것을 특징으로 한다.
상기한 구성에서 상기 고정 시프트값은 상기 제 1 버퍼의 저장 사이즈와 동일한 것으로 하여도 된다.
또한 상기 해독 명령 카운터는 초기화되면 시작 어드레스와 고정 시프트값의 합을 저장하는 것으로 하여도 된다.
상술한 구성에 따르면 현재 해독된 명령 어드레스와 고정값의 합인 포인터가 해독 명령 카운터에 저장되기 때문에 레지스터 명령을 실행하는 경우 더 이상 가산연산을 행할 필요가 없을 뿐 아니라 루프 명령을 실행하는 경우에도 감산연산을 행할 필요가 없다. 따라서 특정 가산기나 특정 감산기를 부가할 필요가 없어 프로세서의 하드웨어 규모를 소형화할 수 있다. 또한 상술한 어드레스 계산이 더 이상 필요하지 않기 때문에 레지스터 명령과 루프 명령을 실행하는 경우 처리속도가 향상된다.
또한 상기 실행부는 절대 어드레스를 갖는 분기명령이 상기 해독부에 의해 해독되는 경우 절대 어드레스를 상기 페치부내의 페치 명령 카운터에 전송하고, 고정 시프트값을 절대 어드레스에 가산함으로써 얻어지는 값을 해독 명령 카운터에 전송하는 분기수단을 포함하도록 구성하여도 된다.
또한 상대 어드레스를 갖는 분기명령이 해독부에 의해 해독되는 경우 분기수단은 상대 어드레스를 해독 명령 카운터에 가산함으로써 얻어지는 값을 해독 명령 카운터에 전송하고, 상기 해독 명령 카운터에 전송된 값으로부터 고정 시프트값을 감산함으로써 얻어지는 값을 페치 명령 카운터에 전송하도록 구성하여도 된다.
상기한 구성에 의하면 절대 어드레스와 상대 어드레스를 갖는 분기 명령은 해독 명령 카운터에 저장된 포인터를 사용하여 실행된다.
또한, 상기 페치 명령 카운터는 페치 어드레스를 저장하는 레지스터와, 레지스터에 저장된 페치 어드레스를 증가시키는 가산기를 포함하며, 절대 어드레스를 갖는 분기명령이 해독부에 의해 해독되는 경우 상기 분기수단은 페치 명령 카운터에 가산기를 구비하여 고정 시프트값을 절대 어드레스에 가산하고 그 가산결과를 해독 명령 카운터에 전송하도록 구성하여도 된다.
상기한 구성에 의해 절대 어드레스를 갖는 분기 명령을 실행하는 경우 해독 명령 카운터에 저장되는 포인터의 계산은 실행부에 의해서가 아니라 페치 명령 카운터의 가산기에 의해 수행될 수 있다.
상술한 목적 및 기타의 목적과 본 발명의 특징 및 이점은 첨부도면과 관련한 다음의 상세한 설명을 통해 보다 분명해 질 것이다.
이하, 본 발명의 프로세서의 실시예를 첨부도면을 참조하여 상세히 설명하기로 한다.
(제 1 실시예)
도 1은 본 발명의 제 1 실시예에 따르는 프로세서의 구성을 도시한 블록도이다. 도 1에는 프로세서(13)에 의해 처리될 명령 시퀀스(프로그램)를 저장한 외부 메모리(11)가 도시되어 있다.
프로세서(13)는 외부 메모리(11)로부터 적어도 하나의 명령을 페치하여 그 명령을 하나씩 해독 및 실행한다. 프로세서(13)는 소규모 하드웨어로 고속으로 루프를 실행하는 방식으로 구성된다. 루프는 분기 타깃 정보 레지스터 명령(이하, 레지스터 명령이라 함)과 고속 루프 명령의 조합에 의해 특정된다.
여기에서 레지스터 명령은 루프의 제 1 명령 직전에 설정되며, 루프의 시작시에 위치된 적어도 하나의 명령을 포함하는 코드를 프로세서에 등록하도록 프로세서에게 명령한다. 여기에서 사용되는 용어 "코드"는 명령을 표현하기 위한 코드를 말한다. 고속의 루프명령은 루프의 종료시에 설정되며, 고속의 루프명령에 포함된 조건이 만족되면 루프의 제 1 명령으로 분기하도록 프로세서에 명령한다. 여기에서 제 1 명령은 레지스터 명령에 따라 프로세서에 저장된다. 레지스터 명령과 고속 루프 명령은 각각 니모닉(mnemonic) 형태로 "set1b"와 "1cc"로 나타낸다.
프로세서(13)는 명령 페치부(14), 명령 해독부(15), 명령 실행부(16) 및 분기 타깃 정보 저장부(17)를 포함한다. 프로세서(13)의 각 구성요소는 클록 발생기(도시생략)로부터의 클록신호에 동기하여 동작한다. 명령 페치부(14), 명령 해독부(15) 및 명령 실행부(16)는 명령 파이프라인을 구성하며, 각 부는 클록신호와 동기하여 병렬로 동작한다. 명령 페치부(14)는 외부 메모리로부터 코드를 페치하여 페치된 코드를 페치 명령 버퍼(142)에 저장하고, 저장된 코드를 명령 해독부(15)로 전송한다. 명령 페치부(14)는 페치 명령 카운터(FIC)(141), 페치 명령 버퍼(FIB)(142) 및 선택부(143)를 구비한다.
FIC(141)는 코드가 페치될 페치 어드레스를 저장하고, 그 페치 어드레스를 외부 메모리(11)로 전송한다. 코드가 페치된 후 FIC(141)는 페치 어드레스를 갱신하기 위해 증가된다. 고속 루프 명령이 실행되면 FIC(141)의 페치 어드레스가 명령 해독부(15)로부터의 제어신호에 따라 분기 타깃 정보 저장부(17)로부터 전송되는 어드레스로 갱신된다.
FIB(142)는 외부 메모리(11)로부터 페치된 코드를 저장하기 위한 FIFO(First In First Out) 메모리이다.
선택부(143)는 고속 루프 명령이 실행될 경우에만 분기 타깃 정보 저장부(17)에 저장된 코드를 선택한다. 다른 명령이 실행되면 선택부(143)는 FIB(142)내의 코드를 선택한다. 선택부(143)는 명령 해독부(15)에 선택된 코드를 출력한다.
명령 해독부(15)는 명령 페치부(14)에서 전송된 코드에 포함된 명령을 해독하며, 명령 페치부(14), 명령 해독부(15), 명령 실행부(16) 및 분기 타깃 정보 저장부(17)의 동작을 제어하기 위한 제어신호로 구성되는 해독결과를 출력한다. 명령 해독부(15)는 해독 명령 카운터(DIC)(151), 해독 명령 버퍼(DIB)(152) 및 명령 디코더(153)를 포함한다.
DIC(151)는 해독된 명령의 어드레스와 소정의 시프트값의 합인 포인터를 저장하고 갱신한다. 파워 온과 같은 리셋시에 DIC(151)는 시작 어드레스와 시프트값 4의 합의 값으로 초기화된다. 미분기 명령이 해독되면 DIC(151)는 해독명령의 길이만큼 증가되며 결국 다음에 해독될 명령의 어드레스와 시프트값 4의 합인 포인터로 갱신된다. 고속 루프명령이 해독되면 DIC(151)내의 포인터는 명령 해독부(15)로부터의 제어신호에 따라 분기 타깃 정보 저장부(17)로부터 송신된 어드레스로 갱신된다. 시프트값은 분기타깃 정보 저장부(17)내의 분기타깃 명령 레지스터(171)의 저장 사이즈(바이트 수)와 동일할 필요가 있다. 예를 들어 분기타깃 명령 레지스터(171)의 저장 사이즈가 8 바이트이면, DIC(151)내의 포인터는 현재 해독된 명령 어드레스와 시프트값 8의 합일 것이다.
DIB(152)는 FIB(142)로부터 송신되어 해독되는 명령을 저장하기 위한 레지스터이다.
명령 디코더(153)는 DIB(152)에 저장된 명령을 해독하며, 그 해독결과에 따라 명령 페치부(14), 명령 해독부(15), 명령 실행부(16) 및 분기 타깃 정보 저장부(17)를 제어하기 위한 제어신호를 출력한다. 해독된 명령이 DIC(151)내의 포인터와 관련하면 명령 디코더(153)는 명령 실행부(16)를 제어하여 명령의 내용에 따라 시프트값 4를 적당히 가산/감산함으로서 DIC(151)내의 포인터를 조정한다. 그러나 상술한 조정은 고속 루프명령이 해독될 때 필수적인 것은 아니다.
명령 실행부(16)는 대수 논리장치(Arithmetic Logic Unit ; 이하, ALU라 함), 시프터, 기타 구성요소로 구성되며, 명령 해독부(15)로부터 전송된 제어신호에 따라 프로세서의 구성요소를 제어한다. 명령 실행부(16)는 또한 프로세서(13)(도시생략)에 접속된 신호라인 제어신호를 입력/출력한다.
분기 타깃 정보 저장부(17)는 명령 해독부(15)가 레지스터 명령을 해독할 때 분기 타깃 정보를 저장한다. 여기에서 분기 타깃 정보란 루프의 최종명령이 분기되는 FIB(142)에 저장된 루프의 제 1 명령으로부터 시작되는 코드(본 실시예에서는 4 바이트임)를 의미한다. 분기 타깃 정보 저장부(17)는 분기 타깃 명령 레지스터(BIR)(171)와 분기 타깃 페치 어드레스 레지스터(BAR)(172)를 포함한다.
BIR(171)은 명령 해독부(15)가 레지스터 명령을 해독할 때 FIB(142)로부터 코드의 최초 4 바이트를 저장하기 위한 레지스터이다. 그렇게 함으로써 루프의 최초 4 바이트가 BIR(171)에 저장된다. BIR(171)은 또한 루프 명령버퍼로도 칭해진다.
BAR(172)은 명령 해독부(15)가 레지스터 명령을 해독할 때 다음 사이클에서DIC(151)로부터의 포인터를 저장하기 위한 레지스터이다. 이 포인터는 현재 해독된 명령 어드레스와 BIR(171)(4 바이트)의 저장 사이즈의 합이며 따라서 BIR(171)에 저장된 코드에 후속하는 코드의 어드레스에 대응한다. 즉, BAR(172)에 저장된 포인터는 고속 루프명령으로부터의 분기가 실행된 후 명령 페치부(14)에 의해 코드가 페치되는 페치 어드레스이다. BAR(172)은 또한 루프 어드레스 버퍼로 칭해진다.
(해독 명령 카운터(151)의 상세 구성)
도 2는 DIC(151)의 구성예를 도시한 도면이다. 도 2에 도시된 바와 같이, DIC(151)는 가산기(31), 레지스터(32) 및 선택기(33,34)를 포함한다.
리셋할 때와 같이 DIC(151)가 초기화되면 가산기(31)는 레지스터(32)의 시작 어드레스에 고정값 4를 가산한다.
가산기(31)는 통상 해독명령의 워드 길이(바이트 수)를 레지스터(32)의 포인터에 가산한다. 그렇게 함으로써 레지스터(32)는 "(해독될 명령의 어드레스)+4"인 포인터로 갱신된다. 분기 명령이 실행되면 레지스터(32)내의 포인터는 선택기(33)를 통해 입력되는 분기 타깃 어드레스로 갱신된다.
(레지스터 명령과 고속 루프명령의 처리)
도 3은 루프 직전에 설정된 레지스터 명령, 즉 루프의 종료시에 설정된 고속 루프명령 및 기타 명령의 처리를 나타내는 흐름도이다.
명령 디코더(153)에 의한 해독결과가 레지스터 명령(set1b)(스텝 31)이면, 코드의 최초 4 바이트는 FIB(142)로부터 BIR(171)로 전송되며(스텝 32), DIC(151)내의 포인터는 BAR(172)로 전송된다(스텝 33). 따라서 BIR(171)은 루프의 코드중 최초 4 바이트를 저장하나 BAR(172)은 코드의 최초 4 바이트를 후속하는 코드의 어드레스를 저장한다. 레지스터 명령의 실행을 완료시에 프로세서(13)는 다음 명령 실행 스테이지로 진행한다(스텝 34).
명령 디코더(153)에 의한 해독결과가 고속 루프명령이면(1cc)(스텝 31), 분기조건이 만족되는지를 판단한다(스텝 35). 분기처리에서 루프 코드의 최초 4바이트는 BIR(171)로부터 DIB(152)로 전송되며(스텝 36), 그 어드레스는 BAR(172)로부터 DIC(151)로 전송된(스텝 37)후 FIC(141)로 전송된다(스텝 38). 결국, FIC(141)는 코드의 최초 4바이트 다음에 오는 코드의 페치 어드레스를 저장하고, DIC(151)는 현재 해독된 명령(제 1 명령)의 어드레스와 4의 합인 포인터를 저장한다. 명령 페치부(14)는 분기 타깃인 제 1 명령을 페치할 필요가 없기 때문에 어떠한 분기 해저드도 발생하지 않는다. 또한 FIC(141)는 특정 어드레스 계산을 수행하지 않고도 BAR(172)로부터 코드의 최초 4바이트 다음에 오는 코드의 어드레스를 용이하게 얻을 수 있다.
(선택부(143)와 분기 타깃 명령 레지스터(171)의 상세 구성)
도 4는 선택부(143)와 BIR(171)의 상세 구성을 도시한 블록도이다. 도 4에는 또한 FIB(142)가 도시되어 있다. 프로그램의 각 명령은 가변 워드 길이(8비트의 정수배)를 갖는다는 점을 주목해야 한다.
FIB(142)는 8비트의 단위로 페치 코드를 시프트시키는 큐(queue)로 구성되며, 이 큐는 약 16 레벨을 갖는 것이 바람직하다. FIB(142)는 명령 해독 스테이지의 각 사이클마다 선택부(143)를 통해 큐의 최초 4 바이트를 DIB(152)로 출력한다. 명령 해독부(15)는 코드의 4 바이트를 해독하여 명령어 길이(코드의 4 바이트의 시작으로부터 시작하는 하나의 명령에 대한 바이트 수로서 표현됨)의 FIB(142)에 통지한다. FIB(142)는 큐의 앞을 향하여 통지된 워드길이 만큼 코드를 시프트시켜 해독 명령을 삭제한다. 그렇게 함으로써 명령의 최초 바이트는 통상적으로 큐의 앞에 있게 된다(고속 루프 명령으로부터 분기가 실행된 직후의 경우일 필요는 없음).
BIR(171)은 큐(171a)와 선택 제어부(171b)를 포함한다.
큐(171a)는 8 비트 단위로 코드를 순환적으로 시프트시키는 4 레벨 큐로 구성된다. 레지스터 명령이 해독되어 실행되면, 큐(171a)는 FIB(142)의 코드의 최초 4 바이트를 저장하는데 이것은 고속 루프명령이 해독된 후 선택부(143)를 통해 DIB(152)로 출력된다. 명령 해독부(15)는 코드의 4 바이트를 해독하여 선택 제어부(171b)를 통해 명령어 길이의 큐(171a)를 통지한다. 큐(171a)는 큐의 앞을 향해 순환적으로 통지된 워드길이 만큼 코드를 시프트시킨다. 큐(171a)는 4바이트가 1 라운드를 만들 때까지 시프팅을 반복하여 4 바이트가 레지스터 명령에 따라 큐(171a)에 저장된 원래의 저장상태를 복구시킨다. 이 동작은 다음 번에 다시 수행되어 고속 루프명령으로부터 분기가 실행된다.
고속 루프명령으로부터 분기가 실행되면 선택 제어부(171b)는 선택부(143)를 제어하여 FIB(142)에 저장된 코드의 4 바이트 대신에 큐(171a)에 저장된 코드의 45 바이트를 선택한다. 이 제어처리에서 선택 제어부(171b)는 분기 직후에 모두 4 바이트의 코드를 선택부(143)를 통해 명령 해독부(15)에 출력하는 큐(171a)를 갖는다. 명령 해독부(15)는 코드를 해독하고 명령 워드길이의 큐(171a)를 통지한다. 선택부(171a)는 순환적으로 통지된 워드길이 만큼 코드를 시프트시키는 큐(171a)를 가지며 큐(171a)내의 코드의 유효 바이트의 수를 카운트한다. 선택 제어부(171b)는 다음 명령 해독 스테이지에서 유효 바이트 수에 따라 선택부(143)를 제어한다.
선택부(143)는 선택기(143a∼143d)를 포함한다. 고속 루프 명령이 실행되고 BIR(171)로부터 전송된 4 바이트 코드가 명령 해독부(15)에 의해 해독되면, 선택부(143)는 큐(171a)내의 유효코드와 FIB(142)내의 후속 코드를 조합하여 다음의 4 바이트 코드를 선택한다.
도 5는 선택기(143a∼143d)의 선택논리를 나타낸 도면이다. 선택 제어부(171b)에 의해 통지된 유효 바이트의 수에 따라 선택기(143a∼143b)는 큐(171a)내의 유효코드와 FIB(142)내의 후속 코드를 조합하여 4 바이트 코드를 출력한다. 도 5는 4개의 5입력 1출력("5 to 1") 8비트 선택기가 사용된 경우를 도시한 것이며, "2 to 1", "3 to 1", "4 to 1", 및 "5 to 1" 선택기가 선택적으로 사용될 수 있다.
(분기명령 처리)
상술한 바와 같이 DIC(151)는 현재 해독된 명령 어드레스와 고정값 4의 합인 포인터를 저장한다. 따라서 DIC(151)로부터 판독하거나 DIC(151)에 기록하는 명령을 실행할 때 값 4를 가산하거나 감산함으로써 포인터를 조정하는 것이 필수적이다. 이 조정은 고속 루프명령을 제외한 어드레싱 명령을 실행할 때 필수적이다.
도 6은 분기 명령의 연산내용을 나타낸다. 도 6에서 단순 분기명령 "branch abs_adrs", 서브루틴 호출명령 "call abs_adrs" 및 서브루틴 복귀명령 "ret"는 절대 어드레싱에 대한 대표적인 명령이며, 단순 분기명령 "branch rel_adrs"는 상대 어드레싱에 대한 대표적인 명령이다. 코드 "abs_adrs"는 32비트 절대 어드레스를 나타내고, 코드 "rel_adrs"는 8 비트 또는 16 비트의 상대 어드레스를 나타낸다.
단순 분기명령 "branch abs_adrs"를 처리할 때, 명령 실행부(16)는 절대 어드레스 "abs_adrs"를 FIC(141)에 저장하고(연산 601), 고정값 4를 절대값 "abs_adrs"에 가산하며, 그 합을 DIC(151)에 저장한다(연산 602). 그렇게 함으로써 절대 어드레스 "abs_adrs"에 의해 특정된 명령으로부터 실행 처리가 시작될 것이다. 이와 같이 절대 어드레싱에 의해 분기 타깃을 특정하는 분기 명령을 실행하기 위해서는 절대 어드레스에 4를 가산함으로써 얻어지는 값이 DIC(151)에 설정된다.
서브루틴 호출 명령 "call abs_adrs"를 처리할 때 명령 실행부(16)는 절대 어드레스 "abs_adrs"를 FIC(141)에 저장하고(연산 603), 해독된 명령어 길이를 DIC(151)내의 포인터에 가산되며(연산 604), 그 합으로부터 4를 감산하고 감산결과를 스택(도시생략)에 넣고(연산 605), 절대 어드레스 "abs_adrs"와 4의 합을 DIC(151)에 저장한다(연산 606). 여기에서 감산결과는 서브루틴 호출명령 "call abs_adrs"의 실행 동안 해독되는 명령이 어드레스에 대응한다. 즉, 감산결과는 서브루틴 호출명령 "call abs_adrs"에 후속하는 명령의 어드레스에 대응한다. 이와 같이 서브루틴 호출명령을 실행하기 위해서는 DIC(151)내의 포인터로부터 4를 감산하여 얻어지는 값이 스택으로 넣어진다.
서브루틴 복귀 명령 "ret"를 처리할 때 명령 실행부(16)는 스택으로부터 절대 호출 명령 "call abs_adrs"를 후속하는 명령 어드레스를 팝(pop)하고 그 어드레스를 FIC(141)에 저장하고(연산 607), 그 어드레스에 4를 가산하여 그 합을 DIC(151)에 저장한다(연산 608). 이와 같이 서브루틴으로부터 복귀명령을 실행하기 위해서는 스택에 넣어진 값과 4의 합이 다시 DIC(151)에 저장된다.
단순 분기명령 "branch rel_adrs"를 처리할 때, 명령 실행부(16)는 상대 어드레스 "rel_adrs"를 DIC(151)의 포인터에 가산하고 그 합을 DIC(151)에 저장하고(연산 609), 그 합으로부터 4를 감산하여 그 감산결과를 FIC(141)에 저장한다(연산 610). 이와 같이 상대 어드레싱에 의해 분기 타깃을 특정하는 분기 명령을 실행하기 위해서는 DIC(151)내의 새로운 포인터로부터 4를 감산하여 얻어지는 값이 FIC(151)에 설정된다. FIC(141)에 어드레스를 설정하기 위해 DIC(151)내의 포인터로부터 4를 감산하는 것은 고속 루프명령을 실행할 때 불필요하다.
상술한 바와 같이 절대 어드레스로 분기명령을 실행할 때 DIC(151)는 절대 어드레스와 4의 합으로 간단하게 갱신될 수 있고, FIC(141)는 절대 어드레스로 갱신될 수 있다.
또한, 상대 어드레스로 분기 명령을 실행할 때 DIC(151)는 DIC(151)내의 포인터와 상대 어드레스의 합으로 간단하게 갱신될 수 있고, FIC(141)는 이 합으로부터 4를 감산하여 얻어지는 값으로 갱신될 수 있다.
고정값 4를 이용하는 상기 가산 및 감산은 명령 실행부(16)의 ALU에 의해 수행된다. 이와 같이 명령 실행부(16)는 고속 루프명령을 제외한 다른 모든 분기명령에 대한 어드레스 계산을 수행한다.
(연산)
다음에는 예제 프로그램을 사용하여 본 실시예의 프로세서의 연산을 설명하기로 한다.
도 7은 하기의 예제 프로그램을 실행할 때 형성되는 파이프라인의 흐름도이다.
(예제 프로그램)
명령 어드레스 명 령 주 석
1000 mov 0, i 0을 i에 전송 1002 set1b 분기타깃 저장 L: 레이블 1003 add a, b, c a와 b의 합을 c에 전송 1005 mul a, b, d a와 b의 곱을 d에 전송 1007 add i, 1, i i에 1을 가산 1009 comp i, 3 i와 3을 비교 100B 1cc L i< 3인 경우는 L로 분기
이 예제 프로그램에서 "명령 어드레스"는 16진수의 32비트 어드레스의 최하위 16비트를 나타내고, "명령"은 니모닉 형태로 기재된 것이며, "주석"은 명령내용을 나타낸다.
이 프로그램에서 레지스터 명령(set1b)을 후속하는 명령(add a,b,c)으로부터 고속 루프 명령(1cc)으로의 처리는 3회 반복되는 루프이다.
도 7에서 수평축은 사이클 단위의 시간을 나타내고 수직축은 IF, DEC, EX 의 3개의 파이프라인 스테이지를 나타낸다. "IF 스테이지"는 비록 그것이 사이클 8, 9, 13 및 14에서 BIR(171)의 앞쪽에서 명령을 나타내더라도 FIB(142)의 앞쪽에서의 명령을 나타낸다. "DEC 스테이지"는 DIB(152)에 저장된 현재의 해독 명령을 나타낸다. "EX 스테이지"는 명령 실행부(16)에 의해 현재 실행되는 명령을 나타낸다.
레지스터 명령 "set1b"가 사이클 3에서 해독되면 4바이트 코드("add a,b,c 및 "mul a,b,d")는 FIB(142)로부터 BIR(171)로 전송된다. 사이클 4에서 레지스터 명령 "set1b"가 실행되고 현재 해독된 명령 "add a,b,c"와 4의 합인 포인터는 DIC(151)로부터 BAR(172)로 전송된다. 결국 명령 "add i,1,i"의 어드레스인 값 1007(1003+4)은 BAR(172)에 저장된다.
다음으로, 사이클 8의 해독 스테이지 다음에 후속하는 고속 루프명령을 실행할 때 4바이트 코드가 BIR(171)로부터 DIB(152)로 전송되고, 명령 "add i,1,i"의 어드레스가 BAR(172)로부터 FIC(141)로 전송된다. 결국 BIR(171)에 저장된 4바이트 코드에 후속하는 명령 "add i,l,i"의 어드레스는 페치 어드레스로서 FIC(141)에 설정된다.
고속 루프명령 "lcc L"가 사이클 13에서 해독되어 사이클 14에서 실행될 때 동일한 연산이 수행된다.
본 실시예의 프로세서에서 DIC(151)는 현재의 해독된 명령 어드레스와 시프트값 4의 합인 포인터를 저장한다. 따라서 레지스터 명령 "setlb"가 실행될 때 분기 타깃 명령 어드레스에 4를 가산함으로써 분기 타깃 명령에 후속하는 코드의 페치 어드레스를 계산하기 위해 특별히 사용되는 가산기를 구비한 프로세서를 구비할 필요가 없다.
또한 고속 루프명령 "lcc L"으로부터 분기가 실행되면 FIC(141)와 DIC(151)는 BAR(141)로부터 동일한 어드레스를 수신한다. FIC(141)와 DIC(151)에 대해서 별개로 어드레스 계산을 수행할 필요가 없으므로 프로세서는 특정 감산기를 구비할 필요가 없다.
(제 2 실시예)
도 8은 본 발명의 제 2 실시예의 프로세서의 구성을 도시한 블록도이다.
도 1에 도시된 제 1 실시예의 프로세서와 다른 점은 FIC(141)가 FIC(241)로 교체되고 DIC(151)가 DIC(251)로 교체된다는 점이다. 제 2 실시예의 프로세서(13)는 분기명령이 실행될 때 DIC(251)에 저장될 포인터가 명령 페치부(24)에 의해 계산되도록 구성되나 제 1 실시예에서는 포인터가 명령 실행부(16)에 의해 계산된다. 다음의 설명은 이 차이점에 초점을 두고 있다.
(페치 명령부(241)의 상세한 구성)
도 9는 FIC(241)와 DIC(251)의 상세한 구성을 도시한 블록도이다.
FIC(241)는 가산기(91)와, 래치(92) 및 선택기(93)를 포함한다.
가산기(91), 래치(92) 및 선택기(93)로 구성되는 루프회로는 4씩 증가되는 카운터를 구성한다. FIB(142)가 4바이트 이상의 미점유 면적을 가지면 명령 페치부(24)는 4바이트 코드를 페치하여 FIC(241)를 증가시킨다.
미분기 명령이 실행되면 선택기(93)는 가산기(91)의 출력을 선택한다. 고속 루프명령을 제외한 다른 분기명령이 실행되면 선택기(93)는 명령 실행부(16)로부터 전송된 분기 타깃 어드레스를 선택한다. 반면 고속 루프명령이 실행되면 선택기(93)는 BAR(172)로부터 전송된 어드레스를 선택한다. 선택기(93)는 선택된 어드레스를 가산기(91)에 출력한다. 래치(92)의 출력은 페치 어드레스로서 외부 메모리(91)로 전송된다.
(해독 명령부(251)의 상세한 구성)
도 9에서 DIC(251)는 가산기(101), 래치(102) 및 선택기(103, 104)를 포함한다.
가산기(101), 래치(102) 및 선택기(103)로 구성되는 루프회로는 각 명령 해독 스테이지에서 해독명령의 워드 길이만큼 증가되는 카운터를 구성한다.
미분기 명령이 해독되면 가산기(101)는 명령 해독 스테이지의 후반기에 래치(102)내의 포인터에 해독명령의 워드길이를 가산한다. DIC(251)내의 포인터와 관련한 분기명령(고속 루프명령 제외)이 실행되면 가산기(101)는 래치(102)내의 포인터에 "-4"를 가산한다.
래치(102)는 현재 해독된 명령 어드레스와 시프트값 4의 합인 포인터를 저장한다. 초기화되면 래치(102)는 FIC(241)로부터 전송된 "(시작 어드레스)+4"를 저장한다.
선택기(103)는 통상적으로 명령 해독부(25)에 의해 제공되는 해독 명령의 워드길이를 선택한다. 상대 어드레스 또는 서브루틴 호출 명령을 갖는 분기명령과 같은 명령이 실행되면 선택기(103)는 "-4"를 선택하여 포인터를 조정한다.
미분기 명령이 실행되면 선택기(104)는 가산기(101)의 출력을 선택한다. 고속 루프명령이 실행되면 선택기(104)는 BAR(172)의 출력을 선택한다. 고속 루프명령을 제외한 다른 분기명령이 실행되면 선택기(104)는 FIC(241)내의 가산기의 출력 "(분기 타깃 어드레스)+4"를 선택한다.
(분기 타깃 어드레스의 계산)
도 10은 도 6과 동일한 어드레싱 명령, 즉, 단순 분기명령 "branch abs_adrs", 서브루틴 호출명령 "call abs_adrs", 서브루틴 복귀명령 "ret" 및 단순 분기 명령 "branch rel_adrs" 의 연산내용을 나타낸다. 밑줄 위에 기재된 연산은 명령 해독 스테이지에서 실행되나 밑줄 아래 기재된 연산은 명령 실행 스테이지에서 실행된다.
단순 분기명령 "branch abs_adrs"를 처리할 때, 명령 실행부(16)는 절대 어드레스 "abs_adrs"를 FIC(241)에 저장하고(연산 1001), 명령 페치부(24)내의 가산기(91)는 FIC(241)에 저장된 어드레스에 4를 가산한 다음 그 합을 DIC(251)에 저장한다(연산 1002). 이와 같이 절대 어드레싱에 의해 분기 타깃을 특정하는 분기 명령을 실행하면 FIC(241)내의 가산기(91)는 시프트값 4를 가산하기 위해 사용되어 DIC(251)내의 포인터를 계산한다.
서브루틴 호출 명령 "call abs_adrs"를 처리할 때 명령 실행부(16)는 절대 어드레스 "abs_adrs"를 FIC(241)에 저장한다(연산 1003). DIC(251)내의 가산기(101)는 명령어 길이를 포인터에 가산하고(연산 1004), DIC(251)내의 합성결과로부터 4를 감산한다. 명령 실행부(16)는 그 감산결과를 스택에 넣는다(연산 1005). FIC(241)내의 가산기(91)는 FIC(241)내에 저장된 절대 어드레스 "abs_adrs"에 4를 가산한 다음 그 합을 DIC(251)에 저장한다(연산 1006). 이와 같이 DIC(251)내의 가산기(101)는 스택에 넣어지는 복귀 어드레스를 계산할 수 있도록 시프트값 4를 감산하기 위해 사용되나, FIC(241)내의 가산기(91)는 DIC(251)내의 포인터를 계산할 수 있도록 시프트값 4를 가산하기 위해 사용된다.
서브루틴 복귀 명령 "ret"를 처리할 때 명령 실행부(16)는 복귀 어드레스를 팝(pop)한다. 즉, 스택으로부터 서브루틴 호출 명령 "call abs_adrs"를 후속하는 명령의 어드레스를 팝(pop)하고 그 복귀 어드레스를 FIC(241)에 저장한다(연산 1007). FIC(241)내의 가산기(91)는 그 복귀 어드레스에 4를 가산하여 그 합을 DIC(251)에 저장한다(연산 1008). 이와 같이 복귀명령을 처리할 때 FIC(241)내의 가산기(91)는 DIC(251)내의 포인터를 계산하도록 시프트값 4를 가산하기 위해 사용된다.
단순 분기명령 "branch rel_adrs"를 처리할 때, 명령 실행부(16)는 상대 어드레스 "rel_adrs"를 DIC(251)의 포인터로부터 4를 감산하여 가산기(101)에 의해 얻어진 값에 가산하고 그 합을 FIC(241)에 저장한다(연산 1009). 가산기(91)는 FIC(241)에 저장된 어드레스에 4를 가산하고 그 합을 DIC(141)에 저장한다(연산 1010). 이와 같이 상대 어드레싱에 의해 분기 타깃을 특정하는 분기 명령을 처리할 때 DIC(251)내의 가산기(101)는 시프트값 4를 감산하기 위해 사용되나, FIC(241)내의 가산기(91)가 시프트값 4를 가산하기 위해 사용된다.
상술한 바와 같이 제 2 실시예의 프로세서(13)에서 연산(1002, 1006, 1008 및 1010)에서의 시프트값 4의 가산은 FIC(241)내의 가산기(91)에 의해 실행되나 연산(1005 및 1009)에서의 시프트값 4의 감산은 DIC(251)내의 가산기(101)에 의해 실행된다.
(분기명령 처리의 타이밍)
도 11은 단순 분기명령 "branch rel_adrs"의 처리를 나타낸 시간도이다.
도 11에서 단순 분기명령 "branch rel_adrs"는 사이클 T1 및 T2에서 각각 해독 및 실행되나 분기 타깃명령은 각각 사이클 T3과 T4에서 페치되어 해독된다.
사이클 T1에서 가산기(101)는 DIC(251)내의 포인터로부터 4를 감산한다. 사이클 T2에서 명령 실행부(16)는 상대 어드레스 "rel_adrs"를 감산결과에 가산하므로 분기 타깃 어드레스 BA가 계산되어 FIC(241)에 저장된다.
사이클 T3에서 분기 타깃 어드레스 BA는 FIC(241)로부터 외부 메모리(11)로 출력되어 분기 타깃 명령의 코드(4 바이트)를 페치한다. 가산기(91)는 사이클 T3의 후반에서 FIC(241)내의 분기 타깃 어드레스 BA에 4를 가산한다.
사이클 T4에서 가산기(91)에 의해 얻어지는 합은 FIC(241)와 DIC(251)에 저장된다.
상술한 실시예에서 프로세서의 처리단위는 32 비트로 설정되어 있으나, 본 발명은 이것에 한정되는 것은 아니다. 따라서 프로세서는 16 비트 또는 64 비트의 단위로 처리될 수도 있다. 또한 BIR(171)의 저장 사이즈가 상술한 실시예에서는 4 바이트(32 비트)이었으나, 명령 디코더가 고속 루프명령의 해독에 따르는 사이클 내에서 그 사이즈의 분기 타깃 명령의 해독을 완료하는 시간에 의해 적어도 하나의 명령이 페치될 수 있는 한 다른 저장 사이즈도 적용 가능하다.
상술한 실시예에서 사용된 프로그램이 가변 워드길이의 명령으로 구성되나 본 발명은 고정 워드길이의 명령에도 적용될 수 있다. 이러한 경우에는 DIC(151)와 선택부(143)의 구성을 더욱 단순화할 수 있다.
또한 큐(171a)(링 버퍼)가 도 4에 도시된 BIR(171)에 사용되었으나 BIR(171)은 BIR(171)에 저장된 4바이트 중 임의의 바이트가 시작코드로 설정될 수도 있다. 도 12는 큐(171a)의 이러한 수정예를 도시한다. 이 구성에서 도 4에 도시된 큐(171a)는 BIR(171)내의 선택기(121a∼121d)와 4바이트 레지스터(120)가 교체되어 있다. 선택기(121a∼121d)의 선택논리는 도 13에 나타나 있다. 예컨대 레지스터(120)는 코드 A, B, C 및 D의 4바이트를 저장한다. 유효 바이트의 수가 4이면, 선택기(121a∼121d)는 도 4에 도시된 선택기(143a∼143d)를 통해 "ABCD"의 순서로 4바이트를 DIB(152)에 출력한다.
반면 유효 바이트의 수가 3이면 선택기(121a∼121d)는 "BCDA"의 순서로 4바이트를 출력한다. 4 바이트를 수신하면 명령 페치부내의 선택기(143a∼143d)는 유효 3바이트의 "BCD"를 선택하여 고순위 바이트로서의 유효 3 바이트 "BCD"와 저순위 바이트로서 FIB(142)로부터 수신된 1 바이트를 합성하여 4바이트 코드를 DIB(152)로 출력한다. 이 선택은 유효 바이트의 수가 2 또는 1일 때와 동일한 방식으로 수행된다.
도 12에 도시된 구성은 분기 타깃 명령 레지스터에 의해 도 4에 도시된 바와 같이 시프트가 수행될 때와 비교하여 처리속도가 증가하도록 되어 있다.
본 발명이 비록 첨부도면을 참조로 한 실시예를 들어 설명하고 있으나 당업자라면 첨부된 특허청구범위에 개시된 본 발명의 사상과 범위를 통해 각종 수정, 변경, 대체 및 부가가 가능할 것이다. 따라서 그러한 수정, 변경, 대체 및 부가의 사항들은 본 발명에 포함되는 것이다.
상술한 본 발명의 구성에 따르면 현재 해독된 명령 어드레스와 고정값의 합인 포인터가 해독 명령 카운터에 저장되기 때문에 레지스터 명령을 실행하는 경우 더 이상 가산연산을 행할 필요가 없을 뿐 아니라 루프 명령을 실행하는 경우에도 감산연산을 행할 필요가 없다. 따라서 특정 가산기나 특정 감산기를 부가할 필요가 없어 프로세서의 하드웨어 규모를 소형화할 수 있다. 또한 상술한 어드레스 계산이 더 이상 필요하지 않기 때문에 레지스터 명령과 루프 명령을 실행하는 경우 처리속도가 향상되는 효과를 얻을 수 있다.
도 1은 본 발명의 제 1 실시예의 프로세서의 구성을 도시한 블록도.
도 2는 해독 명령 카운터(151)의 상세 구성도.
도 3은 명령 실행 스테이지에서의 처리를 나타낸 흐름도.
도 4는 선택부(143)와 분기 타깃 명령 레지스터(171)의 상세 구성을 도시한 블록도.
도 5는 선택부(143)의 선택 논리도.
도 6은 분기명령의 연산내용을 나타낸 도면.
도 7은 프로세서가 루프를 실행할 때 형성되는 파이프라인의 흐름도.
도 8은 본 발명의 제 2 실시예의 프로세서의 구성을 도시한 블록도.
도 9는 페치 명령 카운터(241)와 해독 명령 카운터(251)의 상세 구성을 도시한 블록도.
도 10은 분기명령의 연산내용을 나타낸 도면.
도 11은 단순 분기명령 "branch rel_sdrs"의 처리를 나타낸 시간도.
도 12는 도 4에 도시된 큐(171a)의 수정 예를 나타낸 도면.
도 13은 도 12에 도시된 선택기(121a∼121d)의 선택논리를 나타낸 도면.
* 도면의 주요부분에 대한 부호의 설명 *
11 : 외부 메모리 13 : 프로세서
14 : 명령 페치부 15 :명령 해독부
16 : 명령 실행부 17 : 분기 타깃 정보 기억부
141 : 페치 명령 카운터 142: 페치 명령 버퍼
143 : 선택부 151 : 해독명령 카운터
152 : 해독명령 버퍼 153 : 명령 디코더
171 : 분기 타깃 명령 레지스터 172 : 분기장소 페치 어드레스 레지스터

Claims (15)

  1. (2회 정정) 메모리로부터 코드를 페치하는 페치부와, 상기 페치된 코드(페치 코드)에 포함된 명령을 해독하는 해독부와, 상기 해독된 명령(해독 명령)을 실행하는 실행부를 포함하며, 프로그램 루프의 직전에 설정된 레지스터 명령과, 상기 프로그램 루프의 끝에 설정된 루프명령을 사용하여, 상기 프로그램 루프를 고속으로 실행하는 프로세서로서,
    상기 해독부는, 해독되는 명령을 특정하는 포인터를 저장 및 갱신하는 해독 명령 카운터를 포함하고, 상기 포인터는 해독되는 명령의 어드레스와 고정 시프트값의 합이며,
    상기 실행부는,
    코드를 저장하는 영역을 갖는 제 1 버퍼와,
    어드레스를 저장하는 영역을 갖는 제 2 버퍼와,
    상기 해독부가 레지스터 명령을 해독하는 경우, 상기 페치부에 의해 페치된 상기 프로그램 루프의 선두의 코드를 상기 제 1 버퍼에 등록하고, 상기 해독 명령 카운터에 저장된 포인터를 상기 제 2 버퍼에 등록하는 등록수단과,
    상기 루프명령이 상기 해독부에 의해 해독되고, 상기 루프명령에 대한 분기조건이 충족되는 경우에, (a) 상기 페치부로 하여금 상기 제 2 버퍼에 등록된 포인터에 대응하는 어드레스로부터 시작하는 코드를 페치하게 하고, (b) 상기 해독부로 하여금 상기 제 1 버퍼에 등록된 코드를 해독하게 하는 고속 분기 수단을 포함하며,
    상기 고정 시프트값은, 상기 제 2 버퍼에 등록된 포인터가 상기 제 1 버퍼 에 등록된 코드에 후속하는 코드의 어드레스에 대응하도록 결정되는 것을 특징으로 하는 프로세서.
  2. (2회 정정) 제 1 항에 있어서,
    상기 고정 시프트값은, 상기 제 1 버퍼의 저장 영역의 사이즈와 동일한 것을 특징으로 하는 프로세서.
  3. (정정) 제 2 항에 있어서,
    상기 해독 명령 카운터는, 초기화시, 시작 어드레스와 상기 고정 시프트값의 합을 저장하는 것을 특징으로 하는 프로세서.
  4. (정정) 제 3 항에 있어서,
    상기 페치부는, 상기 고정 시프트값에 의해 코드가 페치되는 페치 어드레스를 증가시키는 가산기를 포함하며,
    상기 해독 명령 카운터는, 상기 페치 어드레스가 상기 시작 어드레스로 초기화되면 상기 포인터로서 상기 가산기의 출력을 저장하는 것을 특징으로 하는 프로세서.
  5. (2회 정정) 제 1 항에 있어서,
    상기 실행부는, 절대 어드레스를 갖는 분기명령이 상기 해독부에 의해 해독되는 경우 상기 절대 어드레스를 상기 페치부내의 페치 명령 카운터에 전송하고, 고정 시프트값을 상기 절대 어드레스에 가산함으로써 얻어지는 값을 상기 해독 명령 카운터에 전송하는 분기수단을 추가로 포함하는 것을 특징으로 하는 프로세서.
  6. (2회 정정)
    제 5 항에 있어서,
    상대 어드레스를 갖는 분기명령이 상기 해독부에 의해 해독되는 경우에, 상기 분기수단은, 상기 상대 어드레스를 상기 해독 명령 카운터에 저장된 포인터에 가산함으로써 얻어지는 값을 상기 해독 명령 카운터에 전송하고, 상기 해독 명령 카운터에 전송된 값으로부터 상기 고정 시프트값을 감산함으로써 얻어지는 값을 상기 페치 명령 카운터에 전송하는 것을 특징으로 하는 프로세서.
  7. (2회 정정) 제 5 항에 있어서,
    상기 페치 명령 카운터는, 페치 어드레스를 저장하는 레지스터와, 상기 레지스터에 저장된 페치 어드레스를 증가시키는 가산기를 포함하며,
    상기 절대 어드레스를 갖는 분기명령이 상기 해독부에 의해 해독되는 경우에, 상기 분기수단은, 상기 페치 명령 카운터 내의 상기 가산기로 하여금 상기 고정 시프트값을 상기 절대 어드레스에 가산하도록 하고, 그 가산결과를 상기 해독 명령 카운터에 전송하는 것을 특징으로 하는 프로세서.
  8. (2회 정정) 제 1항에 있어서,
    페치 스테이지, 해독 스테이지 및 실행 스테이지를 포함하는 적어도 3개의 스테이지를 갖는 파이프라인 처리를 수행하고,
    상기 페치부는 상기 페치 스테이지에서 코드를 패치하며, 상기 해독부는 상기 해독 스테이지에서 페치 코드에 포함된 명령을 해독하고, 상기 실행부는 상기 실행 스테이지에서 해독 명령을 실행하며,
    상기 페치부는,
    페치 어드레스를 저장 및 갱신하는 페치 명령 카운터와,
    상기 페치 코드를 저장하는 페치 명령 버퍼를 포함하고,
    상기 해독부는 해독되는 명령이며 상기 페치 코드에 포함된 명령을 저장하는 해독 명령 버퍼를 포함하며,
    상기 해독 명령 카운터는, 상기 포인터를 갱신하여 상기 해독 명령 버퍼에 저장된 명령의 어드레스에 고정 시프트 값을 합하고,
    상기 등록수단은, 상기 레지스터 명령이 상기 해독부에 의해 해독되는 경우에, 상기 페치 명령 버퍼에 저장된 코드를 상기 제 1 버퍼에 등록하고, 상기 해독 명령 카운터에 저장된 포인터를 상기 제 2 버퍼에 등록하며,
    상기 제 1 버퍼에 등록된 코드는 프로그램 루프의 시작시의 코드이고,
    상기 고정 시프트값은 상기 제 1 버퍼의 저장 사이즈와 동일하며,
    상기 제 2 버퍼에 등록된 포인터는 상기 제 1 버퍼에 등록된 코드에 후속하는 코드의 어드레스에 대응하고,
    상기 고속 분기 수단은, 상기 루프명령이 상기 해독부에 의해 해독되고, 상기 루프명령에 대한 상기 분기조건이 만족되는 경우, (a) 상기 페치부가 상기 포인터에 대응하는 어드레스로부터 시작하는 코드를 페치하도록 상기 제 2 버퍼에 등록된 포인터를 상기 페치 명령 카운터에 전송하고, (b) 상기 해독부가 코드를 해독하도록 상기 제 1 버퍼에 등록된 코드를 상기 해독 명령 버퍼에 전송하는 것을 특징으로 하는 프로세서.
  9. (정정) 제 8 항에 있어서,
    상기 해독 명령 카운터는, 초기화시, 시작 어드레스와 고정 시프트값의 합을 저장하는 것을 특징으로 하는 프로세서.
  10. (정정) 제 9 항에 있어서,
    상기 페치 명령 카운터는 상기 고정 시프트값에 의해 상기 페치 어드레스를 증가시키는 가산기를 추가로 포함하며,
    상기 해독 명령 카운터는, 상기 페치 어드레스가 시작 어드레스로 초기화되면 상기 포인터로서 가산기의 출력을 저장하는 것을 특징으로 하는 프로세서.
  11. (2회 정정)
    제 9 항에 있어서,
    상기 프로그램 루프는 가변 워드 길이를 갖는 복수의 명령으로 구성되며,
    상기 프로세서는,
    총합이 상기 제 1 버퍼 및 상기 페치 명령 버퍼로부터의 상기 해독 명령 버퍼의 저장 사이즈와 등가인 코드를 선택하고, 그 선택된 코드를 상기 해독 명령 버퍼에 출력하는 선택수단과,
    상기 제 1 버퍼의 코드와 상기 페치 명령 버퍼의 코드를 차례로 선택하도록 상기 선택수단을 제어하는 선택 제어부를 추가로 포함하며,
    상기 고속 분기수단은, 상기 루프명령이 해독되고 분기조건이 충족되면 상기 선택 제어부를 활성화시키고,
    상기 선택수단은, 상기 선택 제어부가 활성화되지 않으면 상기 페치 명령 버퍼로부터 코드를 선택하는 것을 특징으로 하는 프로세서.
  12. (2회 정정)
    제 8 항에 있어서,
    상기 실행부는, 절대 어드레스를 갖는 분기명령이 상기 해독부에 의해 해독되는 경우에, 상기 절대 어드레스를 상기 페치 명령 카운터에 전송하고, 상기 고정 시프트값을 상기 절대 어드레스에 가산함으로써 얻어지는 값을 상기 해독 명령 카운터에 전송하는 분기수단을 추가로 포함하는 것을 특징으로 하는 프로세서.
  13. (정정) 제 12 항에 있어서,
    상대 어드레스를 갖는 분기명령이 상기 해독부에 의해 해독되는 경우에, 상기 분기수단은, 상기 해독 명령 카운터에 저장된 포인터에 상기 상대 어드레스를 가산함으로써 얻어지는 값을 상기 해독 명령 카운터에 전송하고, 상기 해독 명령 카운터에 전송된 값으로부터 상기 고정 시프트값을 감산하여 얻어지는 값을 상기 페치 명령 카운터에 전송하는 것을 특징으로 하는 프로세서.
  14. (2회 정정) 제 12 항에 있어서,
    상기 페치 명령 카운터는 상기 페치 어드레스를 저장하는 레지스터와, 상기 레지스터에 저장된 페치 어드레스를 증가시키는 가산기를 포함하며,
    상기 절대 어드레스를 갖는 상기 분기명령이 상기 해독부에 의해 해독되는 경우에, 상기 분기수단은, 상기 페치 명령 카운터의 가산기로 하여금 상기 고정 시프트값을 상기 절대 어드레스에 가산하게 하고, 그 가산결과를 상기 해독 명령 카운터에 전송하는 것을 특징으로 하는 프로세서.
  15. (2회 정정)
    제 13 항에 있어서,
    상기 페치 명령 카운터는,
    상기 페치 어드레스를 저장하는 어드레스 레지스터와,
    상기 어드레스 레지스터 내의 상기 페치 어드레스를 소정값만큼 증가시키는 제 1 가산기를 포함하며,
    상기 해독 명령 카운터는,
    상기 포인터를 저장하는 포인터 레지스터와,
    상기 포인터 레지스터 내의 상기 포인터를 해독 명령의 워드 길이만큼 증가시키는 제 2 가산기를 포함하며,
    상기 상대 어드레스를 갖는 상기 분기 명령이 상기 해독부에 의해 해독되는 경우에, 상기 분기수단은,
    상기 포인터 레지스터 내의 사이 포인터로부터 상기 고정 시프트값을 감산하는 제 2 가산기를 구비하고, 감산결과와 상기 상대 어드레스의 합을 분기 타깃 어드레스로서 상기 어드레스 레지스터에 저장하며, 상기 제 1 가산기로 하여금 상기 어드레스 레지스터에 저장된 상기 분기 타깃 어드레스에 상기 고정 시프트값인 상기 소정값을 가산하는 제 1 가산기를 구비하고,
    가산결과를 상기 포인터 레지스터에 저장하는 것을 특징으로 하는 프로세서.
KR10-1998-0025495A 1997-06-30 1998-06-30 간단한회로로분기해저드의저감을실현한파이프라인프로세서 KR100510030B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP9-174551 1997-06-30
JP???9-174551 1997-06-30
JP17455197 1997-06-30

Publications (2)

Publication Number Publication Date
KR19990007479A KR19990007479A (ko) 1999-01-25
KR100510030B1 true KR100510030B1 (ko) 2005-12-21

Family

ID=15980543

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1998-0025495A KR100510030B1 (ko) 1997-06-30 1998-06-30 간단한회로로분기해저드의저감을실현한파이프라인프로세서

Country Status (6)

Country Link
US (1) US6189092B1 (ko)
EP (1) EP0889395B1 (ko)
KR (1) KR100510030B1 (ko)
CN (1) CN1105350C (ko)
DE (1) DE69801617T2 (ko)
TW (1) TW377422B (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7032100B1 (en) * 1999-12-17 2006-04-18 Koninklijke Philips Electronics N.V. Simple algorithmic cryptography engine
US6728872B1 (en) * 2000-02-04 2004-04-27 International Business Machines Corporation Method and apparatus for verifying that instructions are pipelined in correct architectural sequence
KR100360888B1 (ko) * 2000-08-01 2002-11-13 엘지전자 주식회사 피디피 티브이 모듈의 단자전압 자동 조정장치
FR2825810A1 (fr) * 2001-06-06 2002-12-13 Koninkl Philips Electronics Nv Dispositif electronique a processeur pipeline utilisant un compactage de code et procede de gestion d'un tel processeur
US7185177B2 (en) * 2002-08-26 2007-02-27 Gerald George Pechanek Methods and apparatus for meta-architecture defined programmable instruction fetch functions supporting assembled variable length instruction processors
US7020769B2 (en) * 2003-09-30 2006-03-28 Starcore, Llc Method and system for processing a loop of instructions
US7412587B2 (en) * 2004-02-16 2008-08-12 Matsushita Electric Industrial Co., Ltd. Parallel operation processor utilizing SIMD data transfers
EP1868081A4 (en) * 2005-04-08 2008-08-13 Matsushita Electric Ind Co Ltd PROCESSOR
JP2006309337A (ja) * 2005-04-26 2006-11-09 Toshiba Corp プロセッサ及びプロセッサの命令バッファ動作方法
US9507600B2 (en) * 2014-01-27 2016-11-29 Texas Instruments Deutschland Gmbh Processor loop buffer
CN104699463B (zh) * 2015-03-20 2017-05-17 浪潮集团有限公司 一种低功耗流水线的实现方法
GB2548604B (en) * 2016-03-23 2018-03-21 Advanced Risc Mach Ltd Branch instruction
CN115314161A (zh) * 2022-08-05 2022-11-08 北京天融信网络安全技术有限公司 报文处理方法、装置、电子设备及存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4463422A (en) 1982-07-12 1984-07-31 Csp, Inc. Method of processing an iterative program loop
JPS6051948A (ja) 1983-08-31 1985-03-23 Hitachi Ltd 情報処理装置
US4714994A (en) 1985-04-30 1987-12-22 International Business Machines Corp. Instruction prefetch buffer control
JP2708405B2 (ja) 1986-03-03 1998-02-04 株式会社日立製作所 コンパイラにおけるループ展開方法
US4933837A (en) 1986-12-01 1990-06-12 Advanced Micro Devices, Inc. Methods and apparatus for optimizing instruction processing in computer systems employing a combination of instruction cache and high speed consecutive transfer memories
US5522053A (en) * 1988-02-23 1996-05-28 Mitsubishi Denki Kabushiki Kaisha Branch target and next instruction address calculation in a pipeline processor
JP3102027B2 (ja) 1990-11-20 2000-10-23 日本電気株式会社 ループ制御のネスティング管理機構
US5450585A (en) 1991-05-15 1995-09-12 International Business Machines Corporation Compiler with delayed conditional branching
JP2761688B2 (ja) * 1992-02-07 1998-06-04 三菱電機株式会社 データ処理装置
GB2285154B (en) 1993-12-24 1998-04-01 Advanced Risc Mach Ltd Branch cache
JP2987311B2 (ja) * 1995-05-12 1999-12-06 松下電器産業株式会社 プロセッサ及び翻訳装置

Also Published As

Publication number Publication date
KR19990007479A (ko) 1999-01-25
CN1105350C (zh) 2003-04-09
DE69801617T2 (de) 2002-02-07
DE69801617D1 (de) 2001-10-18
CN1206144A (zh) 1999-01-27
US6189092B1 (en) 2001-02-13
EP0889395B1 (en) 2001-09-12
TW377422B (en) 1999-12-21
EP0889395A2 (en) 1999-01-07
EP0889395A3 (en) 1999-03-24

Similar Documents

Publication Publication Date Title
US5390307A (en) Apparatus for a multi-data store or load instruction for transferring multiple contiguous storage locations in one transfer operation
KR100510030B1 (ko) 간단한회로로분기해저드의저감을실현한파이프라인프로세서
JP2816248B2 (ja) データプロセッサ
KR100423910B1 (ko) 코프로세서 명령 실행 장치 및 방법
US6189090B1 (en) Digital signal processor with variable width instructions
US5131086A (en) Method and system for executing pipelined three operand construct
JPH0816391A (ja) コンピュータシステム、命令ビット長圧縮方法、命令発生方法、及びコンピュータシステム動作方法
EP1157329A1 (en) Methods and apparatus for branch prediction using hybrid history with index sharing
JPH1091443A (ja) 情報処理回路、マイクロコンピュータ及び電子機器
US5459847A (en) Program counter mechanism having selector for selecting up-to-date instruction prefetch address based upon carry signal of adder which adds instruction size and LSB portion of address register
US20230325189A1 (en) Forming Constant Extensions in the Same Execute Packet in a VLIW Processor
EP3365770A1 (en) Conditional execution specification of instructions using conditional extension slots in the same execute packet in a vliw processor
KR20060021370A (ko) 다수의 명령어 세트를 갖는 데이터 처리 장치 내에서의명령어 부호화
CA2016145C (en) Control device having a function of modifying a micro instruction
US5361338A (en) Pipelined system for decomposing instruction into two decoding parts and either concurrently generating two operands addresses of merging decomposing decoding codes based upon the second operand
US20110022823A1 (en) Information processing system and information processing method thereof
US20040024992A1 (en) Decoding method for a multi-length-mode instruction set
KR920002573B1 (ko) 데이타 처리기
JPH1091430A (ja) 命令解読装置
JP3971509B2 (ja) プロセッサ
US6530013B1 (en) Instruction control apparatus for loading plurality of instructions into execution stage
JP3644892B2 (ja) 複数組の命令組を実行するためのデータ処理装置
EP0862112A2 (en) Data processing system having an instruction pipeline
JPH0816392A (ja) コンピュータシステム、コンピュータシステム動作方法、及びコンピュータ命令シーケンス実行方法
JP2004355477A (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: 20120724

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20130722

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20140722

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20150716

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20160721

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20170720

Year of fee payment: 13

EXPY Expiration of term