KR100267101B1 - 명령어 페치장치 및 프로세서 처리방법 - Google Patents
명령어 페치장치 및 프로세서 처리방법 Download PDFInfo
- Publication number
- KR100267101B1 KR100267101B1 KR1019970035007A KR19970035007A KR100267101B1 KR 100267101 B1 KR100267101 B1 KR 100267101B1 KR 1019970035007 A KR1019970035007 A KR 1019970035007A KR 19970035007 A KR19970035007 A KR 19970035007A KR 100267101 B1 KR100267101 B1 KR 100267101B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- buffer
- flow control
- sequence
- instructions
- Prior art date
Links
- 238000003672 processing method Methods 0.000 title 1
- 239000000872 buffer Substances 0.000 claims abstract description 149
- 238000000034 method Methods 0.000 claims abstract description 15
- 235000014121 butter Nutrition 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
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)
Abstract
본 발명은 프로세서에 관한 것으로서, 실행시 명령어를 페치하는 회로 및 방법에 관한 것으로, 제1버퍼와, 제2버퍼와, 상기 제1버퍼로부터 디코더에 명령어를 선택하고 전송하도록 연결되어 있는 선택회로와, 플로우 제어 명령어를 위해 상기 제1버퍼를 검색하는 스캔 로직과, 상기 스캔 로직과 제2버퍼에 결합되어 있는 프리페치 회로로 구성되어 있으며, 상기 프리페치 회로는 상기 스캔로직에 의해 나타난 프롤우 제어 명령어용 타겟 어드레스에 있는 명령어를 포함하는 명령어 시퀀스를 페치하고, 상기 제2버퍼에 있는 명령어 스퀀스를 저장하도록 구성되어 있어서, 만약 명령어 캐쉬가 외부 메모리를 억세스하는 동안 지연이 생기게 되더라도 이러한 지연시간을 최소로 유지하도록 할 수 있는 것이다.
Description
본 발명은 프로세서에 관한 것으로서, 실행시 명령어를 페치하는 회로 및 방법에 관한 것이다.
프로세서에서 명령어 페치 장치는 상기 프로세서의 실행 장치에 의해 실행되는 메모리로부터 명령어를 페치한다. 이상적으로, 명령어 페치 장치는 실행 장치가 어떤 아이들(idle) 시간을 피한 경우에, 프로그램 순서대로 명령어를 얻으므로, 프로그램의 실행을 최대로 할 수 있다. 그러나, 명령어를 저장하는 메모리가 종종 실행 장치보다 훨씬 느리기 때문에, 높은 페치 비율을 얻기가 어렵다.
명령어 캐쉬는 속도가 빠르고, 명령어를 위해 적은 메모리인데도, 명령어 페치의 속도는 증가시킨다. 그러나 명령어 캐쉬를 가지고서도 캐쉬가 바람직한 명령어를 페치할 때 실수한 경우에는 지연이 발생되는데, 예를 들면, 연속적으로 명령어를 실행하거나 또는 프로그램에서 분기를 수행할 경우에 명령어 캐쉬에서는 이들이 동시에 발생하지 않도록 하는 명령어가 요구된다. 캐쉬에서 실수가 일어나면 명령어 캐쉬는 외부 메모리를 엑세스한다. 만약 명령어 캐쉬가 외부 메모리를 엑세스하는 동안 지연이 생기게 되면, 실행 장치는 프로세서 실행이 저하되는 아이들의 상태가 된다. 따라서, 명령어 페치 장치는 캐쉬에서 실수로 인한 경우 지연이 발생하는 문제점이 있었다.
본 발명에 따른, 명령어 페치 장치는 디코딩되는 명령어 시퀀스용 프로그램 버퍼와 그리고 상기 프로그램 버퍼에서 다음 흐름 제어 명령어의 타겟을 포함하는 명령어 시퀀스용 분기 타겟 버퍼를 포함한다. 한 클럭 사이클에서, 상기 프로그램 버퍼에 결합되어 있는 스캔 로직은 흐름 제어 명령어용 프로그램 버퍼를 스캔한다. 흐름 제어 명령어가 나타나면, 흐름 제어 명령어용 타겟 어드레스는 즉시, 결정되며 명령어 캐쉬 시스템과 같은 명령어 메모리에 대한 순간 요청으로 타겟 명령어를 포함하는 명령어 시퀀스를 분기 타겟 버퍼에 채운다. 상기 타겟 명령어 시퀀스용 요청은 대표적으로 흐름 제어 명령어의 실행 이전에 이루어지기 때문에 상기 타겟 명령어는 분기가 수행되면 종종 즉시, 유효하다.
본 발명의 다른 면에 따르면, 상기 프로그램 버퍼는 메인버퍼와 제2버퍼를 포함하며, 상기 제2버퍼는 상기 메인 버퍼에서 명령어 시퀀스를 즉시 수행하는 명령어 시퀀스용이다. 명령어 페치 장치로부터 디코더까지 명령어를 전송하는 선택 로직은 메인 버퍼에 연결되어 있으며, 상기 메인 버퍼로부터 마지막 명령어는 디코더에 전송된다. 상기 제2버퍼로부터 명령어 시퀀스는 메인 버퍼에 전송되어 명령어 메모리 엑세스를 위해 지연없이 명령어의 스트림을 유지하게 한다. 명령어가 상기 메인 버퍼로부터 전송되는 동안에 명령어는 제1버퍼에 미리 페치된다.
본 발명의 또 다른 면에 있어서, 상기 메인버퍼, 제2버퍼 및 분기 타겟버퍼 모두는 같은 저장 용량을 가지고 있으며 상기 버퍼들과 명령어 메모리 사이의 버스는 각 버퍼의 저장용량과 같은 데이타 폭을 가진다. 따라서, 상기 메인 버퍼, 제2버퍼 및 분기 타겟 버퍼중에서 어느 하나의 버퍼에는 한 클럭 사이클동안에 명령어가 채워진다.
제1도는 본 발명의 실시예에 따른 처리기의 블록 다이어그램.
제2도는 본 발명의 실시예에 따른 명령어 페치 장치의 블록 다이어그램.
제3도는 제2도의 명령어 페치 장치용 제어 및 스캔 로직의 블록 다이어그램.
* 도면의 주요부분에 대한 부호의 설명
110 : 명령어 메모리 120 : 명령어 페치 장치
130 : 명령어 디코더 140 : 디코드 버퍼
150 : 스케줄러 212 : 메인 버퍼
214 : 이차 버퍼 216 : 분기 타겟 버퍼
230 : 명령어 레지스터 240 : 플로우 제어 로직
250 : 스캔로직 276 : 분기 어드레스 레지스터
274 : 이차 어드레스 레지스터 272 : 메인 어드레스 레지스터
320 : 분기 디코드 332 : 명령어 실행
334 : 분기 조건 평가 340 : 디코드 프로그램 카운트
350 : 복귀 어드레스 스택
이하 첨부한 내용을 참조로 하여 본 발명의 바람직한 실시예를 상술하며, 도면 전체를 통하여 동일한 부분에는 동일한 도면부호를 사용하기로 한다.
본 발명에 따라, 제1도에 도시된 프로세서(100)용 명령어 페치 장치(120)는 프로그램 버퍼 및 분기 타겟 버퍼를 포함한다. 상기 프로그램 버퍼는 명령어 디코더(130)용 프로그램 카운터에 의해 나타난 명령어를 포함하는 시퀀스용이다. 상기 분기 타겟 버퍼는, 만약 명령어 디코더(130)용 프로그램 카운트에서 시작하는 명령어의 시퀀스에서 어떤 시퀀스가 나타나면, 다음 흐름 제어 명령어의 타겟 어드레스에 있는 명령어를 포함하는 명령어 시퀀스를 포함한다. 스캔 로직은 프로그램 시퀀스에서 흐름 제어 명령어를 검출하고 상기 제1플로우 제어 명령어용 타겟 어드레스를 계산한다. 타겟 어드레스의 명령어를 포함하는 명령어는 명령어 캐쉬 또는 다른 메모리로부터 프리페치되고, 상기 분기 타겟 버퍼에 로드된다.
만약 프로그램 시퀀스에 있는 다음 분기가 선택되면, 상기 분기 타겟 버퍼에 있는 명령어가 사용된다. 예를 들면, 상기 분기 타겟 버퍼로부터 명령어가 상기 프로그램 버퍼에 전송된다. 만약 상기 분기가 선택되지 않으면, 상기 프로그램 버퍼로부터 명령어가 연속적으로 명령어 디코더로 전송되며, 그리고 상기 스캔 로직은 다른 플로우 제어 명령어를 검색한다. 상기 플로우 제어 명령어를 실행하기 전에, 선택된 분기용 타겟 명령어가 특히 요청되고 수행되기 때문에 상기 분기타겟버퍼가 플로우 제어 명령어용 프로세서 지연을 감소시킨다.
본 발명의 또 다른 면에 따라서, 상기 프로그램 버퍼는 메인 버퍼 및 제2버퍼를 포함한다. 만약 상기 메인 버퍼가 비어 있지 않으면, 상기 메인 버퍼는 상기 프로그램 카운트에 대응되는 명령어를 포함하는 명령어 시퀀스를 포함한다. 그리고 상기 제2버퍼는 연속적으로 상기 메인 버퍼에 있는 명령어를 수행하는 프리페치된 명령어를 포함한다. 상기 메인 버퍼에 있는 마지막 명령어가 디코더(130)에 전송되어, 상기 메인 버퍼가 비어 있다면, 상기 제2버퍼의 경쟁이 생기게 된다. 예를 들면, 상기 제2버퍼의 경쟁으로 상기 메인 버퍼에 전송되거나, 상기 메인 및 제2버퍼가 대체된다. 상기 분기 명령어 검출용 스캔 로직은 상기 메인 버퍼 및 상기 제2버퍼 결합되어 상기 메인 버퍼 및 제2버퍼에 있는 상기 명령어 시퀀스의 다음번째 플로우 제어 명령어를 찾는다. 상기 분기명령의 실행이 있기 전에, 더 많은 명령어를 검색하기 위해서는 플로우 제어 명령어의 검출 이전에 수행해야 하며, 그러면 상기 분기명령을 페치하는데 더 많은 시간이 걸리게 된다.
제1도는 명령어 페치 장치(120)를 포함하는 프로세서(100)의 기능적 블록을 도시하고 있다.
상기 명령어 페치 장치(120)는 예를 들면, 명령어 캐쉬 시스템의 명령어 메모리(110)로부터 명령어를 페치한다. 또한, 상기 명령어 페치 장치(120)는 조건적 분기, 서브루틴 콜 및 리턴과 같은 플로우 제어 명령어를 처리하고 명령어 및 다른 플로우 제어 명령어를 명령어 디코더(130)에 제공한다. 상기 명령어 디코더(130)는 명령어 페치 장치(120)(예를 들면, 프로그램 순서)로부터 도착 순서에 명령어를 디코드하고 디코드 버퍼(140)의 엔트리를 채운다. 게다가 프로세서(100)는, 상기 명령어를 실행하는 디코드 버퍼(140)로부터 데이타 패스(170)에 연산이 이루어지는 스케줄러(150)을 포함한다.
본 발명의 바람직한 실시예에서, 명령어 디코더(130)는 사이클당 하나의 명령어를 디코드하고, 상기 명령어를 위해 엔트리에서는 한 세트의 한 사이클 마이크로 명령어를 라이트한다. 스케줄러(150)는 데이타 패스(170)에 있는 레지스터 파일(172), 곱셈기(174), 연산로직 장치(176) 및 로드/저장 장치(178)의 리드 및 라이트 포트를 포함하는 실행장치에 마이크에 명령어를 선택하고 출력한다. 본출원과 동일자로 출원되어 출원번호가 알려지지 않은 “한 사이클 마이크로 명령어를 사용한 명령어 스케줄링”이라는 발명을 명칭을 갖는 미합중국 특허출원 명세서(변리사 참조번호:M-4678)에는 본 발명의 바람직한 실시예인 명령어 디코더, 디코드 버퍼 및 스케줄러가 기술되어 있으며, 상기 미합중국 특허출원 명세서의 전체 내용은 본 발명에서 참조로 인용된다. 본 출원과 동일자로 출원되어 출원번호가 알려지지 않은 “벡터 처리기용 실행 장치 데이타 패스”라는 발명의 명칭을 갖는 미합중국 특허출원 명세서(변리사 참조번호: M-4679)에는 본 발명의 바람직한 실시예가 기술되어 있으며, 상기 미합중국 특허출원 명세서의 전체 내용은 본 발명에서 참조로 인용된다. 본 출원과 동일자로 출원되어 출원번호가 알려지지 않은 “벡터 처리기용 로드 및 저장장치”라는 발명의 명칭을 갖는 미합중국 특허출원 명세서(변리사 참조번호: M-4680)에는 본 발명의 바람직한 로드/저장 장치가 기술되어 있으며, 상기 미합중국 특허출원 명세서의 전체 내용은 본 발명에서 참조로 인용된다.
제2도는 명령어 페치 장치(120)의 실시예에 대한 블럭 다이어그램을 도시하고 있으며, 상기 명령어 페치 장치(120)에는 프로그램 버퍼(210)를 포함하고 있다. 상기 프로그램 버퍼(210)는 디코드된 명령어 시퀀스를 저장하고 메인 버퍼(212) 및 이차 버퍼(214)로 분리되어 있다. 바람직한 실시예로서, 프로세서(100)는 한 명령어 곱셈 데이타(SIMD)프로세서이며, RICS-형태의 명령어 세트를 사용한다. 각 명령어는 32비트이고, 메인 버퍼(212), 이차 버퍼(214),분기 타겟 버퍼(216)는 256비트 명령어 버스(205)를 통해서 명령어 메모리(110)에 연결되어 있는 8*32비트 버퍼이다. 명령어 페치 장치(120)는 명령어 메모리(110)로부터 8개의 명령어를 로드시키고 한 클럭 사이클에서 메인 버퍼(212), 이차 버퍼(214), 분기 타겟 버퍼(216)를 채울 수 있다.
상기 메인 버퍼(212)는 명령어 디코더(130)용 프로그램 카운트에 대응되는 명령어를 포함하는 명령어 시퀀스이다. 이차 버퍼(214)는 메인 버퍼(212)에 있는 시퀀스를 즉시 동작시키는 명령어 시퀀스이다. 분기 타겟 버퍼(216)는 메인 버퍼(212), 이차 버퍼(214)에 있는 다음 플로우 제어 명령어의 목적지를 포함하는 명령어 시퀀스이다. 메인 어드레스 레지스터(272), 이차 어드레스 레지스터(274), 분기 어드레스 레지스터(276) 각각은 버퍼(212,214,216)에 있는 명령어 시퀀스용 베이스 어드레스를 나타내고 있다.
만약 이러한 명령어가 메인 버퍼(212)에 있다면, 멀티플렉서(215)는 프로그램 순서에서 다음 명령어를 선택한다. 만약 다음 명령어가 플로우 제어 명령어가 아니고 명령어 디코더(130)가 다음 명령어를 준비하고 있다면, 상기 명령어가 다음 클럭 사이클의 시작에서 명령어 레지스터(230) 내부에 저장된다. 그러면 플로우 제어 로직(240)은 프로그램 카운트를 증가시킨다. 이상적으로, 명령어 페치 장치(120)는 각 클럭 사이클의 시작에서 명령어 레지스터(230)에 명령어를 쓰고 명령어 디코더(130)는 각 클럭 사이클당 하나의 명령어를 디코딩한다.
명령어 페치 장치(120)가 메인 버퍼(212)에 있는 명령어의 마지막을 선택하고 처리한 후에는 다음 명령어 시퀀스가 이차 버퍼(214), 분기 타겟 버퍼(216) 또는 명령어 버스(205)에서 메인 버퍼(212) 내부에 로드된다. 마지막 명령어가 메인 버퍼(212)에서 명령어 디코더(130)를 지난후, 이차 버퍼(214)와 이차 어드레스 레지스터(274)는 메인 버퍼(212) 및 메인 어드레스 레지스터(272)로 이동된다. 그리고 명령어 페치 장치(120)는 이차 버퍼(214)의 명령어 메모리(110)로부터 다음 명령어 시퀀스를 요청한다. 가산기(260)는 메인 버퍼(212)(또는 제2버퍼 이차 버퍼(214)) 및 메인 버퍼(212)의 용량을 나타내는 고정 옵션(+8)을 위해 베이스 어드레스를 사용하여 다음 명령어 시퀀스의 베이스 어드레스를 결정한다. 가산기(260)에서 계산된 어드레스는 이차 버퍼(214)용 새로운 베이스 어드레스인 이차 어드레스 레지스터(274)에 저장되며, 다음 명령어 시퀀스의 요청을 위해 명령어 메모리(110)를 통과한다. 명령어 메모리(110)가 이차 버퍼(214)를 위해 요청된 명령어 시퀀스로 복귀하기 전에 만약 메인 버퍼(212)에 있는 마지막 명령어가 처리된다면, 명령어 버스(205)의 명령어 시퀀스는 이차 버퍼(214) 대신에 메인 버퍼(212)에 직접 저장되고 그리고 이차 어드레스 레지스터(274)의 베이스 어드레스는 메인 어드레스 레지스터(272)로 이동된다.
만약 현재의 명령어가 플로우 제어 명령어이면, 명령어 레지스터(230)는 모두 또는 일부의 명령어를 처리한다. 만약 명령어가 레지스터의 값을 변경시키거나 또는 레지스터로부터 어드레스 리드를 요청한다면, 상기 플로우 제어 명령어가 명령어 레지스터(230)에 저장되고 명령어 디코더(130) 및 데이타 패스(170)에서 추가적으로 처리되어 디코딩된다. 이와는 반대로, 플로우 제어 로직(240)은 분기조건과, 필요하다면, 디코드 프로그램 카운트를 개량하고 향상시킴으로써 플로우 제어 명령어를 처리한다.
본 발명의 실시에서, 분기 조건을 개선하기 전에, 디코드 버퍼(140)용 프로그램 카운트가 데이타 패스(170)에 의해 완료된 마지막 명령어를 나타내는 프로그램 카운트와 같게 될 때까지 플로우 제어 로직(240)은 대기한다. 만약, 분기가 수행되지 않으면, 디코드 버퍼(140)용 프로그램 카운트가 증가하게 되고, 프로그램 버퍼(210)로부터 다음 명령어가 상기에 기술된 바와 같이 선택된다. 만약 분기가 수행된다면, 분기 타겟 버퍼(216)는 분기 타겟을 포함한다. 분기 타겟 버퍼(216) 및 분기 어드레스 레지스터(276)의 내용은 메인 버퍼(212) 및 메인 어드레스 레지스터(272)에 이동되고 명령어 페치 장치(120)는 명령어 메모리(110)로부터 명령어를 대기하지 않고 명령어 디코더(130)에 명령어를 연속적으로 제공한다. 그러면 명령어 페치 장치(120)는 메인 버퍼(212)용 메인 어드레스 레지스터(272)에서 새로운 베이스 어드레스에 따라 이차 버퍼(214)용 명령어를 요청하고 다음 플로우 제어 명령어를 탐색한다.
분기 타겟 버퍼(216)용 명령어를 프리페치하기 위해서, 스캔로직(250)은 현재 프로그램 카운트 뒤에 다음 플로우 제어 명령어를 위치시켜 메인 버퍼(212), 이차 버퍼(214)를 스캔한다. 만약 플로우 제어 명령어가 메인 버퍼(212), 이차 버퍼(214)에서 나타나면, 스캔로직(250)은 분기의 타겟에 대한 플로우 제어 명령어를 포함하는 메인 버퍼(212), 이차 버퍼(214)를 위해 상기 베이스 어드레스에서 옵셋을 결정한다. 멀티플렉서(255,275)는 메인 어드레스 레지스터(272) 및 이차 어드레스 레지스터(274)로부터 가산기(260)로 분기 타겟 버퍼(216)을 위해 새로운 베이스 어드레스를 발생하는 베이스 어드레스 및 멀티플렉서(255)에서 결정된 옵셋을 제공한다. 상기 새로운 베이스 어드레스는 타겟 명령어의 어드레스 이거나 또는 분기 타겟 버퍼(216)의 용량 중에서 짝수배의 곱셈으로 정렬된다. 상기 새로운 베이스 어드레스는 캐쉬 인터페이스(220)로 전달되고 상기 캐쉬 인터페이스(220)는 분기 타겟 버퍼(216)를 위한 명령어 시퀀스를 요청한다.
제3도에서는 명령어 페치 장치(120)의 플로우 제어 로직(240) 및 스캔로직(250)의 실시예를 도시하고 있다. 상기 스캔로직(250)은 병렬로 동작하는 디코더(310)를 포함하고 있다. 상기 각각의 디코더(310)는 메인 버퍼(212), 이차 버퍼(214)에 있는 명령어를 디코드하고 디코딩된 명령어를 위해 메인 버퍼(312), 플래그 레지스터(314)에 있는 비트를 세트한다. 본 발명의 실시예에서, 플로우 제어 명령어가 특별한 필드 값을 갖는 동작 코드에서는 일반적으로 드문 일이다. 디코더(310)는 각 명령어에 있는 하나의 필드 값을 검사한다.
비트 스캔 로직(315)은 스캔 방향에서 만나는 제1세트 비트(상기 제1플로우 제어 명령어)의 위치를 나타내는 신호 INDEX를 생성한다. 비트 스캔 로직(315)은 널리 공지된 캐리 발생회로를 사용하여 실현할 수 있다. 특히, 비트 스캔 로직(315)에서는 상기 스캔비트를 없애고(예를 들면, 더 이상의 진행을 막음) 세트시키는 레지스터(312,314)의 비트가 나타날 때까지, 스캔 비트가 프로그램 카운트를 증가시키는 방향으로 나아간다. 신호 INDEX는 스캔 비트를 없애는 비트와 같게 된다. 만약 비트 스캔 로직(315)에서 게이트 지연을 감소시킬 필요가 있다면, 룩-어헤드 기술이 사용된다.
타겟 명령어를 프리 페치하기 위해서, 분기 디코드(320)는 신호 인텍스에 의해 나타난 위치에서 플로우 제어 명령어를 디코드하고 옵셋을 추출한다. 가산기(360)는 비트 스캔 로직(315)으로부터 인덱스에 명령어의 옵셋을 더하여 메인 버퍼(312)의 베이스 어드레스로부터 옵셋을 결정한다. 그러면 가산기(260)는 상기 옵셋에 베이스 어드레스를 더하고 상기 플로우 제어 명령어를 타겟 어드레스를 결정한다. 상기 타겟 어드레스는 멀티플렉서(355)를 지나 캐쉬 인터페이스(220)로 전달되어 명령어가 분기 타겟 버퍼(216)에 채워지도록 요청한다.
플로우 제어 명령어는 프로세서(100)에 의해서 서브루틴 콜, 정지 또는 지연 실행으로부터 복귀를 나타내거나 또는 옵셋을 제공하지 않는 간접 어드레싱 모드를 사용한다. 복귀명령 동안에, 멀티플렉서(355)는 캐쉬 인터페이스(220)에 송부된 타겟 어드레스의 복귀 어드레스 스택(350)의 상부로부터 어드레스를 선택한다. 실행을 중지 또는 지연시키는 명령어는 타겟 명령어를 가지고 있지 않아서 분기 타겟 버퍼(216)를 채우는 어떤 프리페치도 요구하지 않는다. 간접 어드레스 방식을 사용한 플로우 제어 명령어 동안에, 타겟 어드레스를 결정하기 위해서 레지스터로부터 값을 읽어와야 하고 실행이 플로우 제어 명령어에 이르고서야 완료되야 한다. 따라서, 분기 타겟 버퍼를 채우기 위한 어떤 프리페치도 간접 어드레스 방식을 사용하여 플로우 제어 명령어를 이룰수 없다.
또한, 분기 디코드(320)가 실행하여 플로우 제어 명령어를 디코드한다. 플로우 제어 명령어의 실행은 플로우 제어 명령어가 명령어 디코더(130)로 전달되지 않는 경우에만 명령어 페치 장치(120)를 수반하거나, 또는 플로우 제어 로직(240)이 명령어의 일부를 실행하기 전 또는 후에, 명령어가 데이타 패스(170)로 전달되는 명령어 페치 장치(120) 및 데이타 패스(170) 양자에 의해서 연산을 할 필요가 있다. 플로우 제어 로직(240)과 데이타 패스(170)에 의해 수행되는 연산은 플로우 제어 명령어에 의존한다.
일반적으로, 디코드 프로그램 카운트(340)가 플로우 제어 명령어에 이르면, 실행 프로그램 카운트 PC가 절차 명령어를 완료하는 데이타 패스(170)를 나타낼 때까지, 제어 로직(330)은 명령어 디코더(130)로 명령어를 추가하여 전송한다. 이때, 제어 로직(330)의 분기 조건 평가 회로(334)에서 만약 분기가 수행되면, 상태 레지스터로부터 신호 STATUS를 결정할 플로우 제어 명령어로부터 조건 코드까지 비교한다.
만약, 분기가 수행되지 않으면, 제어 로직(330)은 다음 명령어의 어드레스에 디코드 프로그램 카운트(340)를 증가시키고 상기 플로우제어 명령어에 결합된 메인 버퍼(312)에 있는 비트를 클리어 시키고, 그리고 공백인 분기 타겟 버퍼(216)을 세트시킨다. 비트 스캔 로직(315)은 메인 버퍼(212), 이차 버퍼(214)(예를 들면, 메인 버퍼(312), 플래그 레지스터(314)에 있는 다음 세트 비트)에 있는 플로우 제어 명령어를 검색한다.
만약, 분기가 수행되면, 제어 로직(330)의 명령어 실행(332)은 플로우 제어 명령어를 수행하기 위해 요구되는 동작을 초기화한다. 이러한 동작은: 만약 레지스터 값을 변경시키거나 또는 간접 어드레스 방식을 위해 레지스터로부터 어드레스를 리딩하는 동작이 요구된다면, 명령어 디코더(130)에 플로우 제어 명령어를 전송하고, 콜 또는 복귀 명령을 위해 복귀 어드레스 스택(350)으로 부터 복귀 어드레스를 팝핑(poping)하거나 또는 복귀 어드레스를 푸싱(pushing)하고, 만약 명령어가 인터럽트를 실행하면 프로세서(100)를 중단하고, 옵셋 또는 명령어용 간접 어드레스에 따라서 디코드 프로그램 카운트(340)을 갱신하고, 메인 버퍼(212) 및 메인 어드레스 레지스터(272)에 분기 타겟 버퍼(216), 분기 어드레스 레지스터(276)의 내용을 이동시킨다.
본 발명의 실시예에서, 상기 플로우 제어 명령어는 조건 분기(VCBR, VCBRI, VDICBR, VD2CBR 및 VD2CBR) 서브루틴 콜(VCJSR, VCJSRI, 및 VCCS), 복귀 명령어(VCRSR), 및 실행 제어 명령어(VCINT, VCJOIN, 및 VCBARR) 포함한다. 이러한 모든 명령어는 조건적으로 명령어에 나타난 분기 조건이 만족할 경우에만 제어 로직(330)에 의해서 실행된다. “감소 및 조건 분기”명령어 VD1CBR, VD2CBR, 및 VD3CBR와 같은 플로우 제어 명령어들은 프로그램 카운트를 변경시키기 위해 레지스터파일(160)에 있는 값을 변경시킨다.
VCBRI 및 VCJSRI와 같은 명령어는 간접 어드레스 방식을 사용하고 레지스터로부터 값을 리드 하도록 요구된다. 따라서, 명령어 페치 장치(120)는 명령어 디코더(130)에 이러한 명령어를 보내고 디코드 프로그램 카운트(340)과 다음 명령어를 페치하기 전에, 명령어 VCBRI 및 VCJSRI은 데이타 패스(170)로부터 복귀된 값을 대기한다.
본 발명을 특정의 바람직한 실시예에 관련하여 도시하고 설명하였지만, 본 발명이 그에 한정되는 것은 아니고, 이하의 특허청구범위에 의해 마련되는 본 발명의 정신이나 분야를 이탈하지 않는 한도내에서 본 발명이 다양하게 개조 및 변화될 수 있다는 것을 당 업계에서 통상의 지식을 가진 자는 용이하게 알 수 있다.
상기와 같은 본 발명에서는 상기 프리페치 회로가 상기 스캔로직에 의해 나타난 플로우 제어 명령어용 타겟 어드레스에 있는 명령어를 포함하는 명령어 시퀀스를 페치하고, 상기 제2버퍼에 있는 명령어 시퀀스를 저장하도록 구성되어 있어서, 만약 명령어 캐쉬가 외부 메모리를 억세스하는 동안 지연이 생기게 되더라도 이러한 지연시간을 최소로 유지하도록 할 수 있는 것이다.
Claims (11)
- 제1버퍼; 제2버퍼; 상기 제1버퍼로부터 디코더에 명령어를 선택하고 전송하도록 결합되어 있는 선택회로; 플로우 제어 명령어를 위해 상기 제1버퍼를 검색하는 스캔 로직; 및 상기 스캔 로직과 제2버퍼에 결합되면서 상기 스캔로직에 의해 나타난 플로우 제어 명령어용 타겟 어드레스에 있는 명령어를 포함하는 명령어 시퀀스를 페치하고, 상기 제2버퍼에 있는 명령어 시퀀스를 저장하는 프리페치 회로;를 구비하는 것을 특징으로 하는 명령어 페치 장치.
- 제1항에 있어서, 플로우 제어 명령어에 의해서 나타난 분기를 선택하는 조건이 만족할 만한가를 결정하는 분기 조건 평가회로를 더 구비하고 있으며, 상기 제2버퍼는 상기 분기가 선택시 분기 조건 평가회로에 따라서 상기 제1버퍼에 대해 명령어 시퀀스를 전송하도록 결합되어 있는 것을 특징으로 하는 명령어 페치 장치.
- 제1항에 있어서, 상기 제1버퍼에 연결되어 있는 제3버퍼와, 상기 제1버퍼로부터 상기 디코더로 전송되는 마지막 명령어에 따라 상기 제3버퍼에서 상기 제1버퍼로 명령어 시퀀스를 전달하는 제어회로를 더 포함하고 있는 것을 특징으로 하는 명령어 페치 장치.
- 제3항에 있어서, 상기 제1버퍼는 상기 제3버퍼의 저장용량과 같은 것을 특징으로 하는 명령어 페치 장치.
- 제4항에 있어서, 상기 프리페치 회로는 상기 제1버퍼의 저장용량과 같은 데이타 폭을 갖는 명령어 버스를 가지고 있는 것을 특징으로 하는 명령어 페치 장치.
- 제3항에 있어서, 상기 프리페치 회로는 상기 제1버퍼 및 제3버퍼에 연결되어 있으며, 상기 제3버퍼로부터 상기 제1버퍼로 명령어 시퀀스를 전달하는 제어회로에 따라서 상기 프리페치 회로가 상기 제3버퍼에 있는 저장용 다음 명령어 시퀀스를 요청하는 것을 특징으로 하는 명령어 페치 장치.
- 제1버퍼; 제2버터; 상기 제1버퍼로부터 디코더로 명령어를 선택하고 전송하도록 연결되어 있는 선택회로; 상기 제1및 제2버퍼에 연결되면서 상기 제1버퍼로부터 상기 디코더로 마지막 명령어를 전송하는 선택회로에 따라서 상기 제2버퍼로부터 제1버퍼로 명령어 시퀀스를 전송하는 제어회로; 및 상기 제1버퍼에 있는 마지막 명령어를 뒤따르는 명령어 시퀀스를 페치하며 상기 제2버퍼에 있는 명령어 시퀀스를 저장하는 프리페치회로;를 구비하는 것을 특징으로 하는 명령어 페치 장치.
- 제7항에 있어서, 상기 프리페치 회로는 상기 제1버퍼의 저장용량과 같은 데이타 폭을 갖는 명령어 버스를 가지고 있는 것을 특징으로 하는 명령어 페치 장치.
- 프로세서에 있는 제1버퍼에서 제1명령어 시퀀스를 저장하는 단계; 제1플로우 제어 명령어를 식별하도록 상기 제1명령어 시퀀스를 스캐닝하는 단계; 상기 제1플로우 제어 명령어를 위해 타겟 어드레스를 결정하는 단계; 프로세서 내에 있는 디코더에 명령어를 패싱하는 서브단계와 분기가 상기 제1 플로우 제어 명령어를 선택되었는지를 결정하는 서브단계를 포함하는, 상기 제1버퍼로부터 명령어를 연속적으로 처리하는 단계; 상기 연속적인 처리가 상기 제1플로우 제어 명령어를 처리하기 전에, 상기 제1플로우 제어 명령어를 위해 상기 타겟 어드레스의 명령어를 포함하는 제2명령어 시퀀스를 요청하는 단계; 상기 분기가 선택되어 상기 제1플로우 제어 요구를 처리하는 단계가 결정되면 상기 제2명령어 시퀀스로부터의 명령어를 사용하는 단계; 및 상기 분기가 선택되지 않아서 상기 제1플로우 제어 요구를 처리하는 단계가 결정되면 상기 제2명령어 시퀀스를 폐기하는 단계;를 구비하는 것을 특징으로 하는 프로세서 처리 방법.
- 제9항에 있어서, 상기와 같은 연속적인 과정이 제1플로우 제어 명령어를 처리하기 전에, 제2버퍼내에 있는 상기 제2명령어 시퀀스를 로딩하는 단계;를 추가로 구비하는 것을 특징으로 하는 프로세서 처리 방법.
- 제10항에 있어서, 상기 제2명령어 시퀀스를 요청하는 단계가, 명령어 캐쉬로부터 명령어를 요청하는 단계;를 포함하는 것을 특징으로 하는 프로세서 처리 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/790,028 US5889986A (en) | 1997-01-28 | 1997-01-28 | Instruction fetch unit including instruction buffer and secondary or branch target buffer that transfers prefetched instructions to the instruction buffer |
US8/790,028 | 1997-01-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR19980069857A KR19980069857A (ko) | 1998-10-26 |
KR100267101B1 true KR100267101B1 (ko) | 2000-10-02 |
Family
ID=25149426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019970035007A KR100267101B1 (ko) | 1997-01-28 | 1997-07-25 | 명령어 페치장치 및 프로세서 처리방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5889986A (ko) |
KR (1) | KR100267101B1 (ko) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11296381A (ja) * | 1998-04-08 | 1999-10-29 | Matsushita Electric Ind Co Ltd | 仮想マシン及びコンパイラ |
US6256727B1 (en) | 1998-05-12 | 2001-07-03 | International Business Machines Corporation | Method and system for fetching noncontiguous instructions in a single clock cycle |
US6233676B1 (en) * | 1999-03-18 | 2001-05-15 | Ip-First, L.L.C. | Apparatus and method for fast forward branch |
US6523110B1 (en) * | 1999-07-23 | 2003-02-18 | International Business Machines Corporation | Decoupled fetch-execute engine with static branch prediction support |
US6446197B1 (en) * | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
US6879940B1 (en) * | 2000-09-28 | 2005-04-12 | Credence Systems Corporation | Method and apparatus for remotely testing semiconductors |
JP2002342075A (ja) * | 2001-05-11 | 2002-11-29 | Mitsubishi Electric Corp | マイクロプロセッサ |
US9244979B2 (en) * | 2004-07-02 | 2016-01-26 | Oracle International Corporation | Determining predicate selectivity in query costing |
US20060224871A1 (en) * | 2005-03-31 | 2006-10-05 | Texas Instruments Incorporated | Wide branch target buffer |
US7797520B2 (en) * | 2005-06-30 | 2010-09-14 | Arm Limited | Early branch instruction prediction |
US7849293B2 (en) * | 2008-01-31 | 2010-12-07 | International Business Machines Corporation | Method and structure for low latency load-tagged pointer instruction for computer microarchitechture |
JP4354001B1 (ja) * | 2008-07-03 | 2009-10-28 | Necエレクトロニクス株式会社 | メモリ制御回路および集積回路 |
CN102880770B (zh) * | 2012-10-29 | 2014-12-24 | 无锡江南计算技术研究所 | 基于宏指令队列的cpu访存序列仿真模型 |
US8990784B2 (en) | 2013-06-28 | 2015-03-24 | International Business Machines Corporation | Determining control flow divergence due to variable value difference |
CN111736779B (zh) * | 2018-04-25 | 2022-01-11 | 上海忆芯实业有限公司 | Nvm接口命令的优化执行方法与装置 |
US20240028339A1 (en) * | 2022-07-25 | 2024-01-25 | Apple Inc. | Using a Next Fetch Predictor Circuit with Short Branches and Return Fetch Groups |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0769812B2 (ja) * | 1987-12-29 | 1995-07-31 | 富士通株式会社 | データ処理装置 |
-
1997
- 1997-01-28 US US08/790,028 patent/US5889986A/en not_active Expired - Lifetime
- 1997-07-25 KR KR1019970035007A patent/KR100267101B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
KR19980069857A (ko) | 1998-10-26 |
US5889986A (en) | 1999-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6223277B1 (en) | Data processing circuit with packed data structure capability | |
KR100267101B1 (ko) | 명령어 페치장치 및 프로세서 처리방법 | |
US5283873A (en) | Next line prediction apparatus for a pipelined computed system | |
FI90804B (fi) | Dataprosessorin ohjausyksikkö, jolla on käskyn esihaun uudelleensuuntausta käyttävä keskeytyspalvelu | |
US5276882A (en) | Subroutine return through branch history table | |
US4775927A (en) | Processor including fetch operation for branch instruction with control tag | |
US5127091A (en) | System for reducing delay in instruction execution by executing branch instructions in separate processor while dispatching subsequent instructions to primary processor | |
KR920006275B1 (ko) | 데이타 처리 장치 | |
KR100875377B1 (ko) | 처리 시스템에서 스택 팝 및 푸쉬 동작들을 수행하는 장치 및 방법 | |
CN104978284B (zh) | 处理器子程序高速缓冲存储器 | |
US6684319B1 (en) | System for efficient operation of a very long instruction word digital signal processor | |
EP1034473B1 (en) | Enhanced instruction decoding | |
US5146570A (en) | System executing branch-with-execute instruction resulting in next successive instruction being execute while specified target instruction is prefetched for following execution | |
EP0834119B1 (en) | Apparatus and method for reducing read miss latency | |
US5740418A (en) | Pipelined processor carrying out branch prediction by BTB | |
US5267350A (en) | Method for fetching plural instructions using single fetch request in accordance with empty state of instruction buffers and setting of flag latches | |
US5872962A (en) | Program control system | |
US5615375A (en) | Interrupt control circuit | |
US5732235A (en) | Method and system for minimizing the number of cycles required to execute semantic routines | |
US5453927A (en) | Data processor for processing branch instructions | |
US6237087B1 (en) | Method and apparatus for speeding sequential access of a set-associative cache | |
EP0952527B1 (en) | Interrupt processing | |
EP1125195A1 (en) | Method for executing memory read requests | |
US6654872B1 (en) | Variable length instruction alignment device and method | |
US5440757A (en) | Data processor having multistage store buffer for processing exceptions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20120629 Year of fee payment: 13 |
|
FPAY | Annual fee payment |
Payment date: 20130701 Year of fee payment: 14 |
|
LAPS | Lapse due to unpaid annual fee |