KR100983786B1 - 데이터 처리장치에서의 파이프라인들간의 동기화 - Google Patents

데이터 처리장치에서의 파이프라인들간의 동기화 Download PDF

Info

Publication number
KR100983786B1
KR100983786B1 KR1020057003803A KR20057003803A KR100983786B1 KR 100983786 B1 KR100983786 B1 KR 100983786B1 KR 1020057003803 A KR1020057003803 A KR 1020057003803A KR 20057003803 A KR20057003803 A KR 20057003803A KR 100983786 B1 KR100983786 B1 KR 100983786B1
Authority
KR
South Korea
Prior art keywords
pipeline
queue
coprocessor
instruction
stage
Prior art date
Application number
KR1020057003803A
Other languages
English (en)
Other versions
KR20050057199A (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 KR20050057199A publication Critical patent/KR20050057199A/ko
Application granted granted Critical
Publication of KR100983786B1 publication Critical patent/KR100983786B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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, look ahead
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • G06F9/3881Arrangements for communication of instructions and data

Abstract

본 발명은 데이터 처리장치에서 파이프라인들간의 동기화를 위한 기술을 제공한다. 그 데이터 처리장치는, 명령어들로 이루어진 시퀀스를 실행가능하도록 동작하고, 제 1 복수의 파이프라인단을 갖는 제 1 파이프라인을 구비한 메인 프로세서와, 상기 명령어들로 이루어진 시퀀스에서 코프로세서 명령어들을 실행가능하도록 동작하는 코프로세서를 구비한다. 상기 코프로세서는 제 2 복수의 파이프라인단을 갖는 제 2 파이프라인을 구비하고, 각 코프로세서 명령어는 제 1 파이프라인과 제 2 파이프라인 양쪽을 통해 라우팅되도록 구성되어 있다. 더욱이, 적어도 한 개의 동기화 큐는, 파이프라인들 중 하나의 파이프라인에서의 소정의 파이프라인단과 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 결합하게 구성되고, 상기 소정의 파이프라인단은 코프로세서 명령어를 처리할 때 상기 동기화 큐 내에 토큰이 놓일 수 있도록 동작하고, 상대방 파이프라인단은 그 동기화 큐로부터 토큰의 수신시 그 코프로세서 명령어를 처리 가능하도록 동작한다. 이러한 방법에 의해, 제 1 및 제 2 파이프라인은, 소정의 파이프라인단과 상대방 파이프라인단 사이에서 동기화됨에 따라, 그 파이프라인들은 확실히 모든 단에서의 정밀한 동기화가 필요한 것을 필요로 하지 않고 중요한 정보의 전송을 위해 정확히 동기화된다.
동기화, 파이프라인, 코프로세서, 명령어, 동기화 큐

Description

데이터 처리장치에서의 파이프라인들간의 동기화{SYNCHRONISATION BETWEEN PIPELINES IN A DATA PROCESSING APPARATUS}
본 발명은 데이터 처리장치에서의 파이프라인들간의 동기화를 이루기 위한 기술에 관한 것이다.
복수의 파이프라인단들을 갖는 파이프라인 프로세서의 형태를 취하는 메인 프로세서가 데이터 처리장치에 구비된 것이 공지되어 있다. 이것은, 임의의 시점에서 상기 메인 프로세서에 의해 다수의 명령어를 실행처리 중에 있을 수 있도록 한다. 임의의 특정 명령어를 실행하는 동안, 그 명령어는 메인 프로세서의 여러 가지 파이프라인단들을 통과하고, 전형적으로 그 명령어의 실행은 그 명령어가 메인 프로세서의 최종 파이프라인단을 통해 처리될 때 종료하고, 그 시점에서 데이터 처리장치의 데이터의 상태는 그 명령어의 실행 결과를 반영하도록 갱신된다. 일례로서, 메인 프로세서에 의해 액세스 가능한 레지스터 뱅크의 1개 이상의 레지스터의 내용은, 상기 명령어의 실행결과에 의해 갱신된다.
또한, 데이터 처리장치에 의해 실행되는 명령어들로 이루어진 시퀀스에 나타 나는 특정 코프로세서 명령어를 실행하기 위한 1개 이상의 코프로세서가 데이터 처리장치에 제공되는 것이 공지되어 있다. 그 메인 프로세서의 구조가 파이프라인인 경우에, 그 코프로세서의 구조는 파이프라인을 가지므로, 그 코프로세서도 그 코프로세서 명령어를 실행하기 위해서 코프로세서 명령어를 통해 처리하는 복수의 파이프라인단을 갖는 것이 일반적이다. 전형적으로, 각 프로세서 명령어는, 메인 프로세서의 파이프라인과 코프로세서의 파이프라인 모두를 통해 라우팅되도록 구성되어 있다. 그 코프로세서는, 메인 프로세서에 의해 다소간 스텝을 실행함에 따라서, 스텝들은 코프로세서 파이프라인을 메인 프로세서 파이프라인과 동기화시키는 것을 유지하도록 처리되었다.
동기화의 필요성은, 코프로세서 명령어의 실행시에 그 메인 프로세서의 여러 가지 파이프라인단들과 코프로세서의 여러 가지 파이프라인단들간의 상호작용에 대한 필요성이 있다는 사실에 연유한다. 예를 들면, 코프로세서 명령어는 코프로세서 명령어에 의해 특정된 조건코드를 충족하지 않는 경우 메인 프로세서에 의해 취소(cancell)되거나, 전체 코프로세서 파이프라인은 실행되는 코프로세서 명령어에서 생기는 오예측 분기일 경우에 플러시(flush)될 필요가 있다. 또한, 데이터는, 코프로세서 명령어가 로드(load) 또는 저장 동작을 정의하는 경우에 상기 메인 프로세서와 코프로세서 사이에서 지나갈 필요가 있다.
지금까지, 코프로세서 파이프라인들은, 일 파이프라인으로부터 다른 파이프라인으로 고정된 타이밍을 갖는 신호들을 통과함으로써 메인 프로세서 파이프라인과 동기화를 유지하였다. 이들 신호들은, 동기화를 유지하기 위해서, 다른 파이프 라인이 일시 중지할 때 일 파이프라인이에서의 일시 중지의 주요 원인이 된다. 그러나, 다른 복잡한 요소들, 예를 들면, 메인 파이프라인이 코프로세서 명령어를 취소하거나, 파이프라인들이 플러시될 필요가 있는 경우가 있어서, 메인 프로세서와 코프로세서가 일시 중지에 의해 상호작용할 때 그 메인 프로세서와 코프로세서 사이의 상호작용을 상당히 복잡하게 한다. 파이프라인 프로세서들의 길이가 증가할 때, 파이프라인들간의 고정 타이밍에 의한 신호들의 통과를 수반하는 이러한 밀착 결합 방식을 사용하여 파이프라인들간의 동기화를 이루는 것이 더욱 더 어려워진다.
코프로세서 인터페이스에 부과된 주요 제약은, 메인 프로세서로부터 코프로세서로 또는 이와는 반대로 지나가는 임의의 신호인 2개의 사이클 지연에 걸쳐서 동작해야 하고, 일측에서 타측으로 전달하는 전체 클록 사이클을 공급해야 하므로, 다음 클록 사이클이 되고나서 동작할 수 있는 것이다. 이것의 의미는, 인터페이스를 방해하는 신호는, 그 인터페이스의 일측의 레지스터로부터 클록킹되어야 하고, 타측의 다른 레지스터 내로 직접 클록킹되어야 하고, 조합 처리는 개재하지 않아야 한다는 것이다. 이러한 제약은, 메인 프로세서(여기서 프로세서 코어라고도 불림)와 코프로세서가 상당한 거리가 이격되게 설치되어야 하고 많은 시간 마진이 신호전달 시간을 커버하도록 고려되어야 한다는 사실로부터 일어난다. 이것은, 코프로세가 메인 프로세서의 설계, 예를 들면 서로 다른 파티에 의해 별도로 설계되어야 하는 경우에 특히 참된 것이다. 이러한 신호전달의 지연은, 상기 설명된 밀착 결합형 동기화 기술을 사용하여 파이프라인 동기화를 유지하는 것을 어렵게 한다.
따라서, 데이터 처리장치에서의 파이프라인들간의 동기화를 얻기 위한 개선된 기술을 제공하는 것이 바람직할 것이다.
발명의 요약
제 1 국면에 따르면, 본 발명은, 명령어들로 이루어진 시퀀스를 실행가능하도록 동작하고, 제 1 복수의 파이프라인단을 갖는 제 1 파이프라인을 구비한 메인 프로세서; 상기 명령어들로 이루어진 시퀀스에서 제 1 파이프라인과 제 2 파이프라인 양쪽을 통해 라우팅되도록 각기 구성된 코프로세서 명령어들을 실행가능하도록 동작하고, 제 2 복수의 파이프라인단을 갖는 제 2 파이프라인을 구비한 코프로세서; 및 소정 복수개의 엔트리를 갖는 퍼스트-인-퍼스트-아웃(FIFO) 버퍼를 포함하고, 토큰(token)과 관련된 코프로세서 명령어(coprocessor instruction)를 유일하게 식별하는 한개의 태그(tag)를 포함하는 토큰, 및 코프로세서 명령어를 처리할 때 동기화 큐의 하나의 엔트리(entry) 내에 토큰이 설치될 수 있게 동작하는 파이프라인들 중 일 파이프라인에서의 소정 파이프라인단과, 동기화 큐로부터 상기 토큰의 수신시에 그 코프로세서 명령어를 처리가능하도록 동작하는 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 결합하여(coupling), 상기 소정 파이프라인단과 상기 상대방 파이프라인단 사이에서 파이프라인들간 고정된 타이밍을 가진 신호들의 전송(passing) 없이 상기 제 1 및 제 2 파이프라인을 동기화하는 적어도 한 개의 동기화 큐(300,310,320,330,340,400,410)를 포함하는 데이터 처리장치를 제공한다.
본 발명에 따르면, 데이터 처리장치는, 파이프라인들 중 일 파이프라인에서의 소정 파이프라인단과 그 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 결합하는 적어도 한 개의 동기화 큐가 구비되어 있다. 상기 소정 파이프라인단은 코프로세서 명령어를 처리할 때 그 동기화 큐 내에 토큰이 설치되도록 구 성되고, 상기 상대방 파이프라인단은 상기 동기화 큐로부터 상기 토큰의 수신시에 그 코프로세서 명령어를 처리하여서 그 점에서 상기 제 1 파이프라인과 제 2 파이프라인을 동기화 가능하도록 동작한다.
따라서, 본 발명은 전체 단에서의 완전한 동기화는 불필요하지만, 그 파이프라인들을 중요한 정보 전송에 대해 정확히 동기화하는 것을 확보한다는 점에서, 2개의 파이프라인들간에 약간 느슨하게 하는 토큰 기반 파이프라인 동기화 기술을 제공한다. 본 발명의 기술은, 파이프라인들간의 고정 타이밍으로 신호들을 지나가게 하는 것을 수반한 종래기술의 제어 구동형 밀착 결합 방식(scheme)과 대조하여, 데이터 구동형 느슨하게 결합된 동기화 방식으로서 생각될 수 있다. 특정 실시예에서 단일 동기화 큐만 있다는 것이 가능하지만, 바람직한 실시예에서 데이터 처리장치는 복수의 상기 동기화 큐를 더 구비하고, 상기 동기화 큐는 각각 파이프라인들 중 일 파이프라인에서의 소정 파이프라인단과 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 결합한다.
바람직한 실시예들에서, 적어도 한 개의 동기화 큐들 중 하나는 명령어 큐이고, 상기 소정 파이프라인단은 제 1 파이프라인 내에 있고 그 명령어 큐 내에 코프로세서 명령어를 식별하는 토큰이 설치되게 구성되고, 상기 상대방 파이프라인단은 제 2 파이프라인 내에 있고 토큰의 수신시에 그 토큰에 의해 식별된 코프로세서를 처리하기 시작가능하도록 동작한다.
상기 명령어 큐에 관해서, 상기 소정 파이프라인단과 상대방 파이프라인단 모두는 그들 각각의 파이프라인들의 제 1 파이프라인단들 중 한 개인 것이 바람직 하다. 보다 구체적으로는, 바람직한 실시예에서, 소정의 파이프라인단은, 제 1 파이프라인에서의 페치(fetch)단이고, 상대방 파이프라인단은 제 2 파이프라인에서의 디코드단이고, 그 디코드단은 토큰의 수신시에 코프로세서 명령어를 디코딩가능하도록 동작한다.
이러한 바람직한 실시예에서, 상기 제 1 파이프라인에서의 페치단은, 명령어들의 시퀀스에서의 명령어마다 명령어 큐에 토큰이 놓일 수 있도록 동작하는 것이 바람직하고, 제 2 파이프라인에서의 디코드단은 관련된 토큰의 수신시 각 명령어를 디코딩하도록 구성되어 그 명령어가 코프로세서에 의해 더 처리될 필요가 있는 코프로세서 명령어인지를 결정한다.
상기 방법과 다른 대안으로서, 각 명령어를 먼저 제 1 파이프라인의 디코드단에서 디코딩한 후, 실제로 코프로세서에 의해 동작되는 코프로세서 명령어들인 명령어 큐 명령어들을 통과할 수만 있도록 하는 것이 가능하다는 방법을 생각할 수 있을 것이다. 이러한 경우에, 소정의 파이프라인단이 제 1 파이프라인의 디코드단 또는 그 디코드단 다음의 단일 필요가 있다는 것은 명백할 것이다.
바람직한 실시예에서, 적어도 한 개의 동기화 큐들 중 한개는 취소(cancel) 큐이고, 상기 소정 파이프라인단은 제 1 파이프라인 내에 있고 그 취소 큐 내에 상기 소정 파이프라인단에서의 코프로세서 명령어가 취소되어야 하는지를 식별하는 토큰을 놓이게 하도록 구성되고, 상기 상대방 파이프라인단은 제 2 파이프라인 내에 있고, 상기 취소 큐로부터 토큰의 수신시에, 토큰이 코프로세서 명령어가 취소된 것을 식별하는 경우, 그 코프로세서 명령어가 취소될 수 있도록 동작한다.
따라서, 메인 프로세서는, 그 코프로세서를 이미 지나간 명령어를 취소하기를 원한다. 예를 들면, 이것은, 임의의 조건코드들을 실패하는 경우 생기기도 하여, 메인 프로세서와 코프로세서 모두에서 취소되는 명령어의 실행을 필요로 할 것이다. 취소 큐는, 메인 프로세서로부터 코프로세서를 거쳐 이러한 정보를 운반한다.
바람직한 실시예에서, 상기 취소 큐에 관하여, 소정의 파이프라인단은 제 1 파이프라인에서의 이슈단(issue)이고, 상대방 파이프라인단은 제 2 파이프라인에서의 이슈단 다음의 단이다. 보다 구체적으로는, 바람직한 실시예에서, 상대방 파이프라인단은, 코프로세서 파이프라인의 제 1 실행단이다.
바람직한 실시예에서, 상대방 파이프라인단은, 취소 큐로부터 토큰의 수신시, 그 토큰이 코프로세서 명령어가 취소되는 것을 식별하는 경우, 제 2 파이프라인으로부터 코프로세서 명령어를 제거 가능하도록 동작한다. 제 2 파이프라인으로부터 명령어를 제거하거나 소거할 수 있는 여러 가지의 방식이 있다는 것을 알 수 있을 것이다. 예를 들면, 중간 효과를 갖는 파이프라인으로부터 실제로 그 명령어를 제거하는 것이 가능하다. 그러나, 바람직한 실시예에서, 대신에 상기 명령어는, 파이프라인의 일부의 나머지 단들을 통과하지만, 플래그 세트에 의해 상기 명령어가 실행되지 않은 것을 나타내도록 허용되므로, 그 명령어는 큐들로부터 토큰들을 픽업할 수도 있다.
바람직한 실시예에서, 적어도 한 개의 동기화 큐들 중 한 개는 종료 큐이고, 소정의 파이프라인단은, 제 1 파이프라인 내에 있고, 그 소정의 파이프라인단에서 의 코프로세서 명령어가 제 2 파이프라인으로부터 리타이어(retire)되게 하기 위한 허락을 식별하는 토큰을 그 종료 큐 내에 놓여지게 구성되며, 상대방 파이프라인단은, 제 2 파이프라인 내에 있고, 상기 종료 큐로부터 토큰의 수신시, 그 코프로세서 명령어가 리타이어되게 허락되는 것을 상기 토큰이 식별하는 경우, 그 코프로세서 명령어가 리타이어될 수 있도록 동작한다.
따라서, 종료 큐는, 코프로세서 파이프라인에서의 명령어마다 리타이어를 허락함으로써 파이프라인의 끝에서 동기를 유지한다. 바람직한 실시예에서, 코프로세서 파이프라인의 길이는, 필요에 따라 상기 종료 큐의 끝으로부터 나타나는 대응한 토큰들의 수신을 가능하게 할만큼 충분히 긴 코프로세서 명령어의 리타이어먼트를 지연하는 것을 지시한다.
종료 큐에 관하여, 소정의 파이프라인단은 제 1 파이프라인에서의 라이트 백(write back)단인 것이 바람직하고, 상대방 파이프라인단은 제 2 파이프라인에서의 라이트 백단인 것이 바람직하다.
바람직한 실시예에서, 적어도 한 개의 동기화 큐들 중 하나는 길이 큐이고, 소정의 파이프라인단은 제 2 파이프라인 내에 있고 벡터 코프로세서 명령어에 대해, 그 벡터 코프로세서 명령어용 길이 정보를 식별하는 토큰을 상기 길이 큐 내에 놓이도록 구성되고, 상대방 파이프라인단은 제 1 파이프라인 내에 있고, 상기 길이 큐로부터 토큰의 수신시, 상기 길이 정보를 그 제 1 파이프라인 내의 벡터 코프로세서 명령어의 추가의 처리로 인수분해(factor) 가능하도록 동작한다.
일부의 코프로세서 명령어들은, 그들이 단일 명령어 내에 일부의 명령어 반 복을 특정될 수 있도록 한다는 점에서 벡터링되기도 한다. 전형적인 예들은, 로드 및 저장 명령어들이 있고, 벡터 로드 또는 벡터 저장 명령어에 의해 일부의 데이터 값들을 단일 명령어 내에 전송될 수 있다. 이것은, 일반적으로 코프로세서 내의 레지스터들로 이루어진 세트와 메모리 내의 위치들의 인접한 세트사이에서 또는 이와는 반대로, 일부의 데이터의 워드들의 전송을 포함할 것이다.
코프로세서가 코프로세서 명령어를 디코딩한 경우, 벡터 로드 또는 저장 동작을 얼마동안인지를 알 것이고, 이 정보는 길이 큐를 통해 동기화하는 토큰으로서 메인 프로세서에 다시 보내진다.
상기 길이 큐에 관하여, 바람직한 실시예에서, 소정의 파이프라인단은, 제 2 파이프라인 내에서 디코드단이고, 상대방 파이프라인단은 제 1 파이프라인 내에서의 제 1 실행단이다.
본 발명의 바람직한 실시예에서, 적어도 한 개의 동기화 큐들 중 한 개는, 억셉트 큐이고, 소정의 파이프라인단은, 제 2 파이프라인 내에 있고, 그 소정의 파이프라인단내의 코프로세서 명령어가 코프로세서에 의해 실행을 위해 억셉트될 것인지를 식별하는 토큰을 상기 억셉트 큐 내에 놓이도록 구성되고, 상대방 파이프라인단은, 제 1 파이프라인 내에 있고, 상기 억셉트 큐로부터 토큰의 수신시, 그 코프로세서 명령어가 억셉트되지 않은 것을 토큰이 식별하는 경우, 메인 프로세서가 그 코프로세서 명령어를 거절 가능하도록 동작한다.
코프로세서는, 기타의 유효 코프로세서 명령어를 수신할 수 없는 소정의 파이프라인단에서 결정하고, 이 정보를 상기 억셉트 큐를 거쳐 메인 프로세서에 동기화 토큰으로서 전달한다. 코프로세서가 명령어를 수신할 수 없는 경우, 그것을 "바운스(bounce)"되었다고 말한다. 바람직한 실시예들에서, 코프로세서가 명령어를 바운스하는 경우, 그것의 파이프라인으로부터 명령어를 제거하지 않지만, 그것을 그명령어의 실행이 확실히 완료하지 않은 "팬텀(phantom)" 명령어로 변환한다.
상기 억셉트 큐에 관하여, 바람직한 실시예에서, 소정의 파이프라인단은 제 2 파이프라인 내의 이슈단이고, 상대방 파이프라인단은 제 1 파이프라인 내의 제 2 실행단이다.
또한, 상대방 파이프라인단은, 상기 억셉트 큐로부터 토큰의 수신시, 코프로세서 명령어가 억셉트되지 않는 것을 토큰이 식별하는 경우, 상기 제 1 파이프라인으로부터 코프로세서 명령어를 제거 가능하도록 동작하는 것이 바람직하다. 상기 취소 큐에 대해 상술한 것처럼, 파이프라인으로부터 명령어를 제거하거나 소거할 수 있는 다수의 방식이 있다. 바람직한 실시예에서, 제 1 파이프라인 내의 상대방 파이프라인단은, 대응한 코프로세서 명령어가 억셉트되지 않은 것을 나타내는 억셉트 큐로부터 토큰의 수신시, 그 명령어를 제 1 파이프라인의 일부의 나머지 단들을 통과하게 허용하지만, 플래그 세트에 의해 그 명령어가 실행되지 않은 것을 나타내게 하도록 구성된다.
본 발명의 바람직한 실시예들에서 사용되는 상술한 여러 가지 제어 큐들 뿐만 아니라, 1개 이상의 동기화 큐들도 상기 메인 프로세서와 코프로세서 사이에 데이터 큐들로서 동작하도록 설치되기도 한다. 보다 구체적으로는, 바람직한 실시예에서, 적어도 한 개의 동기화 큐들 중 한 개는, 데이터 항목을 코프로세서로부터 메인 프로세서에 의해 액세스가능한 메모리로 전송할 수 있도록 동작하는 저장 명령어일 때 사용된 저장 큐이고, 소정의 파이프라인단은 제 2 파이프라인 내에 있고, 상기 저장 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 저장 큐 내에 놓이게 하도록 구성되고, 상대방 파이프라인단은, 제 1 파이프라인 내에 있고, 상기 저장 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 메모리에 전송될 수 있도록 동작한다.
바람직한 실시예들에서, 저장 큐에 관하여, 소정의 파이프라인단은 제 2 파이프라인 내의 이슈단이고, 상대방 파이프라인단은 제 1 파이프라인 내의 어드레스 생성단이다.
저장 전송은 단일값 또는 벡터이다. 후자의 경우에, 코프로세서는 다수의 전송을 효과적으로, 제 2 파이프라인의 이슈단 내의 명령어를 반복하여 일련의 단일 전송으로 변환한다. 이것은, 전송되는 항목마다 저장 명령어의 예를 생성한다. 그명령어는, 그것을 반복하는 동안 코프로세서 이슈단에서 머무르고, 그 파이프라인을 아래로 이동시키는 그 자체의 복사본을 생성한다. 그 반복된 명령어의 첫 번째를 "헤드"라고 부르고 다른 것을 "테일(tail)"이라고 부른다.
바람직한 실시예에서, 적어도 한 개의 동기화 큐들 중 한 개는, 메인 프로세서에 의해 액세스 가능한 메모리로부터 코프로세서로 데이터 항목을 전송 가능하도록 동작하는 로드 명령어가 코프로세서 명령어일 때 사용된 로드 큐이고, 소정의 파이프라인단은 제 1 파이프라인 내에 있고, 상기 로드 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 로드 큐 내에 놓이게 하도록 구성되고, 상대방 파이프라인단은, 제 2 파이프라인 내에 있고, 로드 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 코프로세서에 전송될 수 있도록 동작한다.
바람직한 실시예에서, 로드 큐에 관해서, 소정의 파이프라인단은 제 1 파이프라인 내에서의 라이트 백단이고, 상대방 파이프라인단은 제 2 파이프라인 내에서의 라이트 백단이다.
저장 명령어에 관해, 로드 명령어들은, 단일 데이터 값 또는 다수의 데이터 의 전송을 벡터 로드 명령어를 통해 특정한다. 따라서, 바람직한 실시예에서, 로드 데이터는, 메인 프로세서의 라이트 백단에 의해 인터페이스를 거쳐 보내지고 코프로세서 파이프라인의 라이트 백단에 의해 수신된다. 바람직한 실시예에서, 라이트 백단 내의 명령어를 리타이어하게 하는 종료 토큰을 대기하는 것외는, 코프로세서 파이프라인은 이슈단을 넘어서 일시 중지할 수 없으므로, 로드 명령어는 항상 코프로세서에서의 데이터의 도착과 동기하여 코프로세서 파이프라인의 라이트 백단에 항상 도달할 것이다. 따라서, 바람직한 실시예에서, 로드 큐는, 라이트 백단 내의 로드 명령어의 도착에 의해 데이터를 재정렬하는데 사용된 이중 버퍼로 단순히 구성된다.
바람직한 실시예에서, 상술한 것처럼, 로드 명령어와 저장 명령어는 전송되는 다수의 데이터 항목을 정의하는 벡터 코프로세서 명령어들이어도 되고, 상기 장치는, 로드 큐와 저장 큐 중 적어도 한 개와 관련되고, 제어신호를 소정의 파이프라인단에 보내어 소정 파이프라인단에 의해 토큰들의 발행을 정지하고, 관련된 로드 또는 저장 큐가 충만해지는 것을 판단 가능하도록 동작하는 흐름 제어로직을 더 구비한다.
흐름 제어로직은, 수신하는 파이프라인이 데이터를 처리할 수 없는 경우 데이터의 흐름을 홀트(halt)시킬 수 있다. 바람직한 실시예에서, 흐름 제어로직은, 상대방 파이프라인단이 데이터 항목을 억셉트할 수 없는 것을 메인 프로세서로부터 의 표시를 수신할 때 제어신호를 발행 가능하도록 동작한다. 바람직한 실시예에서, 로드 명령어가 로드 큐를 통해 코프로세서의 데이터 도착과 동기하여 코프로세서 파이프라인의 라이트 백단에 항상 도달한다는 상술한 사실을 가정하면, 로드 큐와 연관된 흐름 제어로직용 바람직한 실시예에서 필요하지 않다. 그러나, 이러한 동기를 보장할 수 없는 경우에, 흐름 제어로직에는 필요한 경우 로드 큐가 구비될 수도 있다는 것을 알 수 있을 것이다.
바람직한 실시예에서, 저장 데이터는, 메인 프로세서의 로드 저장부가 코프로세서로부터의 데이터의 흐름을 홀트할 수 있게 흐름 제어를 필요로 한다. 이것은, 코프로세서에 정지신호를 보내어 행해진다. 바람직한 실시예에서 이러한 신호가 코프로세서에 도달하는데 2개의 클록 사이클이 걸리므로, 그것은 충만해지는 저장 큐의 리스크가 있자마자 바람직하게 생성된다. 상대적으로 짧은 큐에 의해, 이러한 리스크는, 메인 프로세서의 로드저장부가 데이터항목을 억셉트할 수 없을 때 구현되므로, 바람직한 실시예에서, 상기 정지신호는 메인 프로세서의 로드 저장부가 데이터를 억셉트할 수 없을 때마다 코프로세서에 보내진다.
종종 메인 프로세서가 코프로세서 파이프라인 내의 명령어를 식별할 수 있게 하는게 필요하다. 예를 들면, 이것은, 메인 프로세서가 명령어들을 플러시하는 코 프로세서에게 나타낼 수 있도록 플러시하는데 필요하다. 그러므로, 메인 프로세서는, 태그를 코프로세서에게 각 명령어를 보내고, 그 태그는 바람직한 실시예에서 시간의 임의의 순간에 파이프라인 내의 모든 태그들이 유일하도록 충분히 큰 값들의 풀로부터 인출된다.
따라서, 바람직한 실시예에서, 각 토큰은 토큰일 관련하는 코프로세서 명령어를 식별하는 태그를 포함한다.
이에 따라서, 바람직한 실시예에서, 메인 프로세서는, 제 1 및 제 2 파이프라인 모두로부터 코프로세서 명령어들을 플러시하는데 필요한 경우, 플러시 신호를 플러시될 필요가 있는 가장 오래된 명령어에 관련된 태그를 식별하는 코프로세서에게 브로드캐스트 가능하도록 동작하고, 코프로세서는 태그로부터 그 가장 오래된 명령어를 식별하고, 그 가장 오래된 명령어와 코프로세서 내의 임의의 나중의 명령어들을 제 2 파이프라인으로부터 플러시 가능하도록 동작한다.
더욱이, 바람직한 실시예에서, 상기 적어도 한 개의 동기화 큐들 중 1개 이상은, 태그를, 그 큐 내의 토큰들을 플러시하는 것을 식별하는데 사용하면서, 상기 플러시 신호에 따라 플러시된다.
바람직한 실시예에서, 플러시 메카니즘은, 연속적인 코프로세서 명령어가 인접한 태그들을 갖는 경우 단순화된다. 이것은, 바람직한 실시예에서, 코프로세서를 지나간 명령어가 코프로세서 명령어인 경우 태그 번호만을 증가시켜서 달성된다. 이것은, 그 명령어를 보낸 후 행해지고서, 태그는 오히려 이전보다는 코프로세서 명령어를 보낸 후 변화시킨다. 바람직한 실시예에서, 메인 프로세서가 그 명령어를 디코딩하여 그것이 무슨 종류의 명령어인지를 판단할 시간이 아직 없으므로 그 명령어를 보내기 전에 태그를 증가시키는 것이 가능하지 않다. 코프로세서 디코드단이 논코프로세서 명령어들을 제거할 때, 그것은 인접한 태그를 운반하는 명령어 스트림으로 남겨진다.
동기화 큐들은 다양한 형태를 취할 수 있다고 생각될 것이다. 그러나, 바람직한 실시예에서, 각 동기화 큐는, 토큰들을 저장하는 소정 수의 엔트리들을 갖는 퍼스트-인-퍼스트 아웃(FIFO) 버퍼를 구비한다. 바람직한 실시예에서, 로드 큐 이외의 큐들 각각은, 토큰을 저장하는 3개의 엔트리 또는 슬롯을 갖는다. 상술한 것처럼, 바람직한 실시예의 로드 큐는, 이중 버퍼로 구비되는 것이 바람직하다.
특정 실시예에서, 복수의 코프로세서에는, 메인 프로세서에서의 파이프라인단과 코프로세서들 중 하나에서의 파이프라인단을 결합하는 각 동기화 큐가 구비되어 있다. 경제적인 이유 때문에, 바람직한 실시예에서, 코프로세서 인터페이스는 가능한 이중으로 되어 있지 않은 것이 확실하다. 특히, 바람직한 실시예에서의 코프로세서는, 메인 프로세서에 의해 유지된 길이, 억셉트 및 저장 데이터 큐들을 공유할 것이다. 이들 큐들이 공유되는 경우, 하나의 코프로세서만은 임의의 시간에 그 큐들을 사용하고, 그것은 하나의 코프로세서만이 임의의 시간에 액티브되게 하여 가장 쉽게 보장된다. 그러나, 이것은, 일반적으로 상당한 제한은 아닌데, 그것은 일반적으로 말하는 하나의 코프로세서만이 임의의 시간에 사용될 것이다. 보다 구체적으로, 프로세서는, 단지 하나의 코프로세서를 구동하는 드라이버 소프트웨어를 통해 전형적으로 구동된다. 드라이버 소프트웨어에 대해 호출 그것으로부터 리턴은, 일반적으로 하나의 코프로세서의 사용과 서로 다른 코프로세서의 사용간의 일부의 코어 명령어들이 확실히 있을 것이다.
본 발명의 토큰 기반 파이프라인 동기화 기술은 데이터 처리장치의 비동기 설계와 동기 설계 모두에 적용될 수 있다는 것을 알 수 있을 것이다. 그러나, 바람직한 실시예에서, 데이터 처리장치는, 동기 설계를 가지므로, 토큰들은 소정의 파이프라인단에 의해 그 큐 내에 놓이게 하고, 클록 사이클의 에지를 변경할 때 상대방 파이프라인단에 의해 그 큐로부터 수신되게 한다.
제 2 국면에 의하면, 본 발명은, 명령어들로 이루어진 시퀀스를 실행 가능하도록 동작하고, 제1의 복수의 파이프라인단을 갖는 제 1 파이프라인을 포함하는 메인 프로세서와, 상기 명령어들로 이루어진 시퀀스 내의 코프로세서 명령어들을 실행 가능하도록 동작하고, 제2의 복수의 파이프라인단을 갖는 제 2 파이프라인을 포함하는 코프로세서를 구비하되, 각 코프로세서 명령어는 상기 제 1 파이프라인과 제 2 파이프라인 모두를 통해 라우팅되도록 구성되는, 데이터 처리장치에서의 파이프라인들간의 동기화 방법에 있어서, (a) 소정 복수개의 엔트리들을 가진 퍼스트-인-퍼스트-아웃(FIFO) 버퍼를 포함하고, 파이프라인들 중 하나의 파이프라인에서의 소정의 파이프라인단과 그 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 동기화 큐(300,310,320,330,340,400,410)를 통해 결합하는(coupling) 단계; (b) 상기 소정의 파이프라인단이 코프로세서 명령어를 처리하고 있을 때 동기화 큐의 하나의 엔트리(entry) 내에 토큰을 놓는 단계; 및 (c) 상기 상대방 파이프라인단에 의해 동기화 큐로부터 토큰의 수신시, 상기 상대방 파이프라인단 내에 코프로세서 명령어(coprocessor instruction) 및 토큰(token)과 관련된 코프로세서 명령어를 유일하게 식별하는 태그(tag)를 포함하는 토큰을 처리하는 단계를 포함하고, 상기 소정의 파이프라인단과 상기 상대방 파이프라인단 사이에서 파이프라인들간 고정된 타이밍을 가진 신호들의 전송(passing) 없이 상기 제 1 및 제 2 파이프라인의 동기화가 얻어지는 동기화 방법을 제공한다.
본 발명은 예시에 의해서만, 아래의 첨부도면에 나타낸 것처럼 그것의 바람직한 실시예를 참조하여 설명하겠다:
도 1은 본 발명의 바람직한 실시예의 동기화 기술을 실행하는 시스템의 블록도이고,
도 2a는 본 발명의 바람직한 실시예에 따라 파이프라인 프로세서를 개략적으로 나타낸 도면이고,
도 2b는 본 발명의 바람직한 실시예에 따른 파이프라인 코프로세서를 개략적으로 나타낸 도면이고,
도 3은 프로세서 코어의 파이프라인단, 코프로세서의 파이프라인단 및 본 발명의 바람직한 실시예들에 따라 그들간에 통신을 하는 동기화 제어 큐들을 개략적으로 나타내고,
도 4는 다양한 파이프라인과 그들을 연결하는 큐들을 더 상세히 나타낸 블록도이고,
도 5는 메인 프로세서의 로드 저장부와 로드 및 저장동작을 위한 코프로세서 파이프라인간의 통신을 개략적으로 나타낸 도면이고,
도 6은 본 발명의 바람직한 실시예에 따라 상기 큐들의 구성을 나타낸 도면이고,
도 7은 하나의 큐의 판독 및 기록을 나타낸 타이밍도,
도 8은 본 발명의 바람직한 실시예에서 사용된 것처럼 흐름 제어의 개념을 나타낸 도면이고,
도 9는 본 발명의 바람직한 실시예에서 명령어 큐를 어떻게 실행하는지를 나타내는 도면이고,
도 10은 코어와 코프로세서 파이프라인들간의 상호작용의 통상의 동작을 개략적으로 나타내는 도면이고,
도 11은 본 발명의 일 실시예에 따라 코프로세서가 이슈단에서 일시 중지하고 있을 때 코어와 코프로세서 파이프라인들이 어떻게 작용하는지를 나타내는 도면이고,
도 12는 본 발명의 일 실시예에 따라 코프로세서 명령어가 이슈단에서 코어에 의해 취소될 때 코어와 코프로세서 파이프라인들이 어떻게 작용하는지를 나타내는 도면이며,
도 13은 본 발명의 일 실시예에 따라 코프로세서에 의해 코프로세서 명령어를 바운스할 때 코어와 코프로세서 파이프라인들이 어떻게 작용하는지를 나타내는 도면이고,
도 14는 본 발명의 일 실시예에 따라 코어에 의해 취소되고 코프로세서에 의해 바운스되는 명령어를 파이프라인들이 처리하는 방법을 나타낸 도면이고,
도 15는 본 발명의 일 실시예에 따라 코어가 코프로세서에 플러시 신호를 보낼 때 코어와 코프로세서 파이프라인들이 어떻게 작용하는지를 나타내는 도면이고,
도 16은 본 발명의 일 실시예에서 사용된 큐 플러싱 방법을 개략적으로 나타 낸 도면이며,
도 17은 본 발명의 일 실시예에 따라 벡터 로드 명령어 "C"에 대한 명령어 반복을 나타낸 도면이고,
도 18은 본 발명의 일 실시예에 따라 로드 데이터의 버퍼링을 개략적으로 나타낸 도면이고,
도 19는 본 발명의 일 실시예에 따라, 어떻게 코어 내의 로드 명령어가 코어의 로드 저장부에 입력되어 로드 데이터의 하나의 항목의 발생을 초기화화고나서, 코프로세서로 지나가는지를 나타낸 도면이다.
도 1은 본 발명의 바람직한 실시예의 동기화 기술을 이용한 데이터 처리시스템을 나타낸 블록도이다. 도 1에 도시된 것처럼, 프로세서 코어(40)는, 프로세서 코어(40)에서 필요로 하는 명령어들이 액세스되는 명령어 캐시 또는 다른 메모리장치(10)에 연결된다. 프로세서 코어(40) 내에, 프리페치(prefetch)부(20)는, 파이프라인 프로세서(30)가 필요로 하는 프리페치부에 의해 결정된 명령어들에 대한 요구를 경로 50 상에 발행하도록 제공된다. 그후 명령어를 검색한 명령어 메모리(10)는, 경로 60을 거쳐 프리페치부(20)로 다시 가는 명령어들을 출력하고, 그들을 경로 70을 거쳐 파이프라인 프로세서(30) 내로 전달한다. 명령어들을 실행할 때, 파이프라인 프로세서(30)는, 그 명령어들에 의해 조작되는 데이터 값을 포함하는 레지스터 뱅크(35)의 레지스터들과 인터페이싱할 것이다. 로드 명령어들을 사용하여 데이터 값을 데이터 메모리(87)로부터 레지스터 뱅크로 로드하고, 저장 명령어들을 사용하여 데이터 값을 레지스터 뱅크(35)로부터 데이터 메모리(87)로 저장한다. 그 후, 데이터 처리 명령어들은, 레지스터 뱅크(35)의 특정 레지스터에 저장된 데이터 값에 관해 실행될 수 있다.
프리페치부에 의해 프리페치된 명령어 시퀀스 내의 일부 명령어는, 명령어 흐름이 변경하도록 구성된 분기 명령어일 수도 있다. 일부의 분기 명령어들은, 그 명령어 자체의 오피코드(opcode) 내의 분기용 목적 어드레스를 지정하므로, 이들 분기 명령어들의 일부 예측은 어떤 명령어가 다음의 상기와 같은 분기 명령어를 프리페치하는지를 결정할 때에 프리페치부(20)를 돕기 위해서 행해질 수 있다. 이러한 분기 예측은, 분기 예측 로직(25)에 의해 실행된다. 분기 예측 로직(25)이 그러한 분기 명령어를 실행하는 것과, 그에 따라서 분기를 행하는 것을 예측하는 경우, 프리페치부(20)는, 목적 어드레스에 의해 지정된 명령어를 다음 명령어로서 검색하도록 구성될 것이다. 역으로, 분기 예측 로직(25)이 분기 명령어가 실행되지 않은 것과, 이에 따라서 분기가 행해지지 않은 것을 예측하는 경우, 프리페치부(20)는, 명령어 메모리(10) 내의 다음의 순서적인 어드레스에서의 명령어를 다음 명령어로서 검색할 것이다.
파이프라인 프로세서(30) 내에 있을 때, 그것은, 프리페치부(20)가 어떠한 액션을 취할 것을 요구받을 경우 관련 정보를 프리페치부(20)로 다시 전달하는 임의의 상기와 같은 분기 명령어들을 실행할지의 여부를 궁극적으로 결정하는 것을 아주 중요하다. 예를 들면, 예측 가능형 분기 명령어들에 대해, 예측을 잘못한 경 우, 프리페치부(20)에게 알려주는 것이 필요하다. 예를 들면, 분기 예측 로직(25)이 분기가 행해진 것을 예측하여서, 목적 어드레스에서의 명령어를 검색하지만, 그명령어가 연속적으로 파이프라인 프로세서(30)에 의해 연속적으로 실행되는 경우, 그 분기 명령어는 실제로 실행되지 않아야 한다는 것을 결정한 후, 복구 어드레스는 경로 80을 거쳐 포스(force) PC 신호로서 출력될 필요가 있고, 이 경우에 복구 어드레스는 그 분기 명령어 뒤에 오는 다음의 순서적인 어드레스이다. 이와 마찬가지로, 분기 예측 로직(25)이 실행되지 않은 분기 명령어를 예측하였지만, 실제로 파이프라인 프로세서(30)가 연속적으로 그것이 실행되어야 하는지를 결정하는 경우, 다시 복구 어드레스는 경로 80을 거쳐 프리페치부(20)에 발행될 필요가 있고, 이 경우에 복구 어드레스는 분기용 목적 어드레스이다. 만약 그렇지 않은 경우, 분기 예측이 정확하였던 경우, 또 다른 액션을 필요로 하지 않고, 포스 PC 신호는 경로 80을 거쳐 프리페치부(20)에 발행될 필요가 있다.
분기 명령어가 실제로 실행되지 않은 하나의 이유는, 분기 명령어들이 종종 특정 조건이 실행시에 존재하는 경우만 실행되는 조건적 명령어들로서 특정되기 때문이다. 이들의 여러 가지 조건은, 조건 코드들의 세트를 참조하여 특정되므로, 그 조건 코드들의 1개 이상이 명령어가 실행되면 특정 값을 가져야 하는 것을 특정할 것이다. 조건 코드들의 상태에 대해 특정 예측을 하는 것이 가능함에 따라, 그 분기 명령어가 실행될지의 여부에 관해 측정하는 것이 가능하지만, 조건코드의 절대 평가가 일어날 수 있는 파이프라인 프로세서(30) 내의 소정 포인트에 그 분기 명령어가 도달할 때뿐이고, 그 이유는 조건 코드가 명령어 시퀀스 내의 조건 코드 설정 명령어에 의해 갱신가능하여서, 그 조건 코드의 상태는 시간에 따라 변할 것이기 때문이다.
또한, 명령어 시퀀스 내의 특정 명령어는, 코프로세서(110)의 파이프라인 프로세서(130) 내에서 실행될 코프로세서 명령어들이다. 이러한 코프로세서 명령어는 경로 95를 거쳐 코프로세서(110)의 파이프라인 프로세서(130)에게 발행된다. 그리고, 파이프라인 프로세서(130)는, 필요에 따라 코프로세서 레지스터(120)를 참조하는 코프로세서 명령어를 실행할 것이고, 코프로세서 명령어의 결과를 코어(40)로 되돌릴 필요가 있는 경우, 그들을 경로 100을 거쳐 되돌릴 것이다.
코프로세서 명령어를 경로 95를 거쳐 코프로세서 코어에 전달하였지만, 그것은, 예를 들면, 코프로세서 명령어가 실행시에 조건 코드의 상태에 의존한 조건적 코프로세서 명령어인 경우 그 코프로세서 명령어를 실제로 실행해야 할지의 여부에 관해 결정 가능하게 하는, 상기 코어(40)의 파이프라인 프로세서(30)의 여러 가지 파이프라인단들을 통해 전달된다. 제어신호는 파이프라인 프로세서 30와 파이프라인 프로세서 130 사이에서 소정의 큐들을 통해 전달되어, 이 양쪽의 파이프라인들을 통한 코프로세서 명령어의 진행은 필요한 점에서 확실히 동기화가 유지된다. 이러한 처리를 후에 상세히 설명하겠다.
도 2a는 본 발명의 바람직한 실시예에 따른 도 1의 파이프라인 프로세서(30) 내에 설치된 파이프라인의 여러 가지 파이프라인단들을 나타낸 블록도이다. 단(stage) 190에서는 프리페치부(20)로부터 명령어를 프리페치한 후, 그것을 디코드단(200)에서 디코딩하고, 이어서 이슈단(210)으로 전달하는데, 이 이슈단에서는, 명령어가 요구하는 데이터를 레지스터 뱅크(35)의 적절한 레지스터로부터 얻는다.
이 때에, 프로세서는 2개의 종속 파이프라인으로 분기하고, 이때 제 1 종속 파이프라인은 파이프라인단 220,230,240,250을 포함하고, 제 2 종속 파이프라인은 파이프라인단 260,270,280,290을 포함한다. 제 1 종속 파이프라인은, 여기서는 로드/저장부(LSU)라고도 부르는 로드/저장 파이프라인(222)이다. 이 로드/저장 파이프라인을 사용하여 로드 또는 저장 명령어를 처리하고, 그에 따라서 로드 또는 저장 명령어는 파이프라인단 210으로부터 파이프라인단 220으로 라우팅될 것이다. 파이프라인단(220)에서 행해진 처리는, 로드 또는 저장 동작을 시행하는데 사용되는 메모리 액세스를 하는데 필요한 어드레스를 생성하는 것이다. 일반적으로, 이러한 처리는, 2개의 레지스터의 값을 함께 가산하거나, 레지스터의 값을 명령어 등 내에 특정된 "중간" 값에 가산하는 것을 포함한다. 단 230, 240은, 로드 또는 저장 명령어에서 필요로 하는 메모리 액세스가 일어나는 동안 2개의 메모리 파이프라인단이다. 도 2a에 도시한 본 발명의 바람직한 실시예에서, 로드 및 저장 동작은, 이와 같은 실시예에서 전형적으로 적어도 2개의 클록 사이클 동안 행하므로, 2개의 메모리단(230,240)이 있다.
메모리 액세스가 완료된 경우, 명령어는 메모리(2) 파이프라인단(240)으로부터 여기서는 리타이어먼트단이라고도 불리는 라이트 백단(250)으로 이동할 것이다. 이 라이트 백단에서, 레지스터 뱅크(35)는, 라이트 백단의 끝에서 갱신이 일어나는, 로드 또는 저장 동작의 결과를 반영하기 위한 갱신을 위해 구비되어 있다.
감산 또는 감산 명령어 등의 임의의 산술 논리 명령어는, 파이프라인단(210)으로부터 (여기서, ALU 파이프라인이라도 불린다) 제 2 종속 파이프라인(262)의 파이프라인단(260) 내에 라우팅될 것이고, 이러한 단은 시프트 로직을 제공하여 오퍼랜드의 어떠한 필요한 시프팅이 수행될 수 있게 한다. 그리고, 그 명령어는, 그 산술 논리 명령어를 실행하는 산술 논리부를 포함하는 파이프라인단(270)으로 라우팅된다. 이러한 실행단 후, 명령어는 파이프라인의 포화(saturation)단(280)으로 전달되고, 여기서 그 결과의 임의의 필요한 포화가 수행된다. 예를 들면, 일부의 산술 논리 명령어들은, 그 결과를 소정수의 비트들로 포화되는 것이 필요하여서, 일례로서, 9비트 결과에 대해 포화되는 16비트 결과를 필요로 한다. 이러한 처리는, 파이프라인단(280) 내에서 수행된다. 임의의 필요한 포화 후, 명령어는, 리타이어먼트단이라고도 불리는 라이트 백단(290)에 전달된다. 라이트 백단(250)을 참조하여 상술한 것처럼, 라이트 백단의 목적은, 데이터 처리장치의 상태를 갱신하는데 잇고, 특히 라이트 백단에서의 명령어의 실행 결과에 관한 레지스터 뱅크(35)를 갱신하는데 있다.
도 2b는 본 발명의 바람직한 실시예에 따른 도 1의 코프로세서(110)의 파이프라인 프로세서(130) 내에 설치된 파이프라인의 여러 가지 파이프라인단을 나타낸다. 첫 번째 2개의 단은, 디코드단(205)과 이슈단(215)이다. 그리고, 그 명령어는, 5개의 실행단(225,235,245,255,265)을 통해 전달하고, 그후 명령어는 코프로세서 레지스터(120)가 라이트 백단에서의 코프로세서 명령어의 실행결과에 관해 갱신된 라이트 백단(275)에 입력된다.
나머지 도면들을 참조하여 더욱 상세히 설명하는 것처럼, 여러 가지 큐들은, 프로세서 코어의 특정 파이프라인단들과 코프로세서 사이에 설치되어 토큰 기반 방식을 사용하는 각 큐에 의해 결합된 파이프라인단들 사이에서 동기화가 일어날 수 있게 한다. 보다 구체적으로, 1개 이상의 제어 큐(285)는, ALU 파이프라인(262)과 코프로세서 파이프라인 사이에 설치되고, 추가로 1개 이상의 데이터 큐(295)는 코어의 LSU 파이프라인(222)과 코프로세서 파이프라인 사이에 설치된다.
도 3 내지 도 19를 참조하여, 파이프라인이 중요한 정보의 전송에 대해 정확히 동기화된 것을 확보하도록 본 발명의 바람직한 실시예에서 사용된 토큰 기반 파이프라인 동기화 기술을 설명하겠다. 이하의 설명에서는, 메인 프로세서를 코어라고 부르고, 또한 코프로세서를 "GCP", 또는 일반적인 코프로세서라고 부를 것이다. 도 3 내지 도 19는 다음의 번호가 매겨진 문단을 참조하여 설명할 것이다.
1 도입
코어는 명령어들을 다수의 코프로세서로 전달하여 데이터를 명령어들과 교환할 필요가 있다. 이들 코프로세서는, 코어에 의해 단계별로 약간 동작하도록 되어 있고 그 코어에 동일한 방식으로 파이프라인으로 보내진다. 명령어들은 코프로세서에 의해 디코딩되는 코어 파이프라인의 페치단으로부터 전달되고 그 디코딩된 명령어를 그 자신의 파이프라인을 따라 전달한다. 코프로세서 명령어는, 조건 코드가 실패하거나, 전체 코프로세서 파이프라인이 잘못 예측된 분기일 경우에 플러시되는 경우에, 상기 코어에 의해 취소되기도 한다. 또한, 로드 및 저장 데이터는, 코어 LSU와 코프로세서 파이프라인 사이에서 전달할 필요가 있다.
코프로세서 인터페이스에 지워진 주요 제약은, 2개의 사이클 지연 동안 동작해야하고, 즉, 코어어로부터 코프로세서로, 또는 이와는 반대로 전달하는 임의의 신호는, 일측에서 타측으로 전달하기 위한 전체 클록 사이클이 공급되어야 한다. 이것의 의미는, 인터페이스를 거치는 신호는, 그 인터페이스의 일측 상의 레지스터로부터 클록킹되어야 하고 직접 타측의 다른 레지스터 내로 클록킹되어야 하고, 조합 처리는 개입하지 않아야 한다. 이러한 제약은, 코어와 코프로세서가 상당한 거리가 이격되어서 설치되고 신호 전달시간을 커버하기 위해 많은 시간 여유가 고려되어야 하기 때문에 생긴다. 이러한 신호 전달에서의 지연은, 밀착 결합 동기화 방법을 제외한, 파이프라인 동기화를 유지시키는 것을 어렵게 한다.
이하의 설명은, 2개의 파이프라인 사이에서 약간 느슨하게 하고, 파이프라인들이 중요한 정보의 전송을 위해 정확히 정렬되는 것을 확보하는 토큰 기반 파이프라인 동기화 방법을 설명한다.
2 설명
GCP 인터페이스는, 2개의 파이프라인 사이에서 일측 파이프라인으로부터 타측 파이프라인으로 토큰을 교환하여 느슨한 동기화를 이룬다. 이들 토큰은 파이프라인들 사이에서 큐들을 따라 전달되고, 추가의 정보를 전송한다. 많은 경우에 있어서, 상기 큐의 중요한 목적은, 처리되는 명령어에 대한 정보를 전송하거나 하나의 파이프라인에게 다른 파이프라인에서 일어나는 이벤트들을 알리는데 있다. 토큰은, 코프로세서 명령어가 관련 파이프라인단으로부터 다음 단으로 전달할 때마다 발생된다. 이들 토큰은 다른 파이프라인 내의 상대방단에 의해 픽업되고 그 단에서의 대응한 명령어를 이동하는 것을 허락하는데 사용된다. 각 파이프라인을 따라 코프로세서 명령어들의 이동은, 파이프라인들을 연결하는 여러 가지 큐들을 따라 토큰의 이동만큼 정확히 일치된다. 그래서, 범용 코프로세서 인터페이스는, 제어 구동형이라기보다는 오히려 데이터 구동형이다.
2.1 코프로세서 명령어
GCP는 코프로세서에 특유한 명령어들로 이루어진 세트로부터 얻어진 다수의 명령어들을 실행하는데 필요하다. 소정의 코프로세서는, 모든 가능한 코프로세서 명령어들을 반드시 실행할 필요는 없고, 처리할 수 없는 명령어들을 거절하여도 된다. 아래의 표 1은, 한 개의 특정한 프로세서 코어, 즉 영국 캠브리지의 ARM사에서 개발한 ARM 프로세서 코어들 중 하나에 의해 지원된 모든 코프로세서 명령어들이 열거되어 있고, 각각에 대해 간단히 설명한다.
Figure 112005011654231-pct00001
표 1-코프로세서 명령어
코프로세서 명령어는, 3개의 주요 그룹, 즉 로드, 저장 및 처리 명령어로 동작한다. 사기 로드 및 저장 명령어에 의해, 코어와 코프로세서 사이에서 정보를 전달할 수 있다. 그들 중 일부는, 벡터링되는, 즉 그들에 의해 일부의 값들이 단일 명령어로 될 수 있게 한다. 일반적으로, 이것은, 코프로세서 내의 레지스터들로 이루어진 세트와 메모리에서의 위치들로 이루어진 인접 세트 사이에서 데이터의 일부 워드들의 전송을 포함할 것이다. 예를 들면 MCR 및 MRC와 같은 다른 명령어들은, 코어와 코프로세서 레지스터 사이에서 데이터의 전송을 허용한다. CDP 명령어는, 코프로세서 내에 이미 보유된 데이터의 특정 동작의 실행을 제어하여, 그 결과를 다시 코프로세서에 기록하거나, 또는 약간 다른 방식으로 코프로세서의 상태를 변경한다. 어떤 동작을 실행하는지는, 상기 명령어 내의 오피코드 필드에 의해 특정되기도 한다.
코어 파이프라인은, 모든 명령어들, 코어와 코프로세서 명령어들을 처리한다. 한편, 코프로세서는, 코프로세서 명령어를 처리하기만 하므로, 코프로세서 파이프라인은 시간의 상당한 비율 동안 비어있을 가능성이 있다.
2.2 코프로세서 파이프라인
GCP 파이프라인은, 코어 파이프라인과 매우 유사하지만, 상기 페치단이 없다. 대신에, 명령어들은, 코어로부터 GCP 파이프라인의 디코드단으로 전달된다. 그래서, 디코드단은, 논 코프로세서 명령어와 매칭하지 않는 코프로세서 번호를 포함하는 임의의 코프로세서 명령어를 거절하는 명령어를 디코딩한다. 또한, 임의의 벡터링된 데이터 전송의 길이는, 이 점에서 결정되어 코어에 다시 보내진다. 그래서, 디코딩된 명령어는, 이슈단으로 전달한다. 이러한 단에서는, 명령어의 이러한 특별한 예가 억셉트되는지의 여부를 결정한다. 그것을 할 수 없는 경우, 아마도 그것은 기존에 존재하지 않은 레지스터의 어드레스를 지정하기 때문에, 그 명령어는 바운스되어, 그것이 억셉트될 수 없는 것을 코어에게 알린다. 그 명령어가 유효하고 실행가능한 경우, 그 명령어는 실행 파이프라인 EX1-EX6를 따라 전달한다. 파이프라인의 하부에서, (여기서는 라이트 백(WB) 단이라고 부르는) EX6에서, 그 명령어는, 코어에 의해 공급된 또 다른 큐로부터 매칭 토큰을 수신하는 경우 명령어를 행할 수 있는 리타이어먼트를 대기한다.
2.3 토큰 기반 파이프라인 동기화
도 3은 코어와 GCP 파이프라인들과, 그들 사이에서 통신하는 동기화 큐들을 나타낸다. 각 큐는, 매우 짧은 퍼스트-인-퍼스트-아웃(FIFO) 버퍼로서 실행된다. 큐들간의 파이프라인 길이는 항목의 수를 제한하므로, 명백한 흐름 제어는 그 큐들에 대해 필요하지 않고, 임의의 큐는 어느 때든지 보유할 수 있다. 도시된 구성은, 각 큐에서 사용가능한 3개보다 많지 않은 슬롯을 필요로 한다. 단지 필요로 하는 상태 정보만은, 큐가 공백일 때를 나타내기 위한 플래그이다. 이것은, 수신하는 큐의 끝에 의해 감시되어야만 할 필요가 있고, 관련된 파이프라인단을 이동할지를 결 정한다. 또한, 큐에 의해 전송된 임의의 정보는, 동시에 판독 및 실행될 수 있다.
파이프라인 동기화의 동작을 상기 각 큐들의 목적을 설명하여 설명하겠다.
2.3.1 명령어 큐
코어는 명령어 큐(300)을 따라 그 페치단(190)에 남는 매 명령어를 통과시킨다. 이상적으로, 그것은, 코프로세서 명령어들에 관해 통과시키기만 하지만, 이 단에서는 그 명령어를 디코딩할 시간이 없었다. GCP에 대해 그 자신의 디코드단(205)에서의 도착에 관한 명령어를 디코딩하고 논 코프로세서 명령어들을 거절하는 것이 남겨져 있다. 그것은, 코어가 이들 명령어의 제거에 관한 긍정 응답이 없는 것을 필요로 할 때 이것을 조용히 처리할 수 있는데, 그 이유는, 코어가 각 명령어의 타입을 디코드단(200)에서 결정될 것이기 때문이다. 명령어 큐(300)의 길이는 3개의 슬롯이다.
2.3.2 취소 큐
코어는, 코프로세서에 이미 전달된 명령어를 취소하기를 원하기도 한다. 이것은, 명령어가 코어와 코프로세서 양쪽에서 명령어 스트림으로부터 명령어를 제거될 필요가 있는 그것의 조건 코드를 실패하는 경우 일어나기도 한다. 취소 큐(310)는, 이러한 정보를 코프로세서를 거쳐서 전송하고, 그 취소 큐의 길이 3개의 슬롯이다.
2.3.3 종료 큐
길이가 3개의 슬롯인 종료 큐(320)는, 리타이어 하기 위해서 코프로세서 파이프라인에서의 명령어마다 허락을 제공함으로써 파이프라인의 끝에서 동기를 유지한다. 코프로세서 파이프라인의 길이는, 종료 큐(320)의 끝으로부터 출현하는 토큰들을 만족할 만큼 충분히 긴 코프로세서 명령어의 리타이어먼트를 지연할 필요성으로 규정되어 있다. 로드 및 저장 명령어는, 종료 큐를 사용하지 않아서, CDP 명령어만 이러한 큐를 필요로 한다. 로드 및 저장 명령어들을 어떻게 리타이어하는지를 나중의 섹션에서 설명하겠다.
2.3.4 길이 큐
코프로세서가 명령어를 디코딩한 경우, 벡터 로드 또는 저장 동작을 얼마나 할지를 알아야 할 것이다. 이러한 정보는, 길이 큐(330)를 따라 동기화 토큰에 의해 보내진다. 일반적인 경우에, 명령어를 수신하고, 디코딩하여 그 길이를 회답한 후, 페치단(190)으로부터 EX1 단(260)(여기서는 시프트단이라고도 부름)으로 코어 파이프라인을 따라 명령어를 전달하는데 보다 오래 걸리고, 여기서 정보는 필요해진다. 코어 EX1단의 토큰의 도착 지연에 의해, 그 단은 1사이클 동안 일시 중지한다. 이것은 별도의 사이클을 가산하여 코프로세서 명령어를 실행한다. 다행히, 이러한 페널티는, 코프로세서 명령어마다 초래되지 않고, 이에 대한 이유는 나중의 섹션에서 조사한다. 길이 큐의 길이는 3개의 슬롯이다.
2.3.5 억셉트 큐
코프로세서는, 명령어를 억셉트할 수 없는 이슈단에서 결정하고, 억셉트 큐(340)를 따라 동기화 토큰을 갖는 이러한 정보를 전달한다. (여기서는 ALU단이라고도 불리는) 코어 EX2단(270)이 토큰을 수신하여 대응한 명령어를 거절할 것을 알려주는 경우, 그것은 EX2단을 클리어하여 파이프라인으로부터 명령어를 제거한다. 억셉트 큐의 길이는 3개의 슬롯이다.
2.3.6 플러시 브로드캐스트
분기가 잘못 예측된 경우, 코어가 양쪽의 파이프라인들을 플러시하는 것이 필요하기도 하다. 이 섹션은 잠재적으로 전체 파이프라인에 영향을 미치므로, 그것은 큐 내에서 전달되는 것이 아니라, 코어로부터 코프로세서로 브로드캐스팅되어, 상기 큐들과 같은 타이밍 제약에 대해 실행된다. 코프로세서에 의해 수신될 때 플러시 신호에 의해 파이프라인과 명령어 큐(300)가 플러시를 일으키는 명령어까지 클리어한다.
도 4는 코어와 파이프라인단과, 그 둘을 연결시키는 큐들을 아주 상세히 나타낸 도면이다. 코어의 로드/저장부(LSU)(222)도 도시되어 있다. LSU는 저장 데이터를 코프로세서로부터 저장 큐(400)를 통해 억셉트하여 로드 데이터를 발생하게 로드 큐(410)를 통해 코프로세서에 보낸다.
명령어 큐(300)와 코프로세서 디코드단(205)은, 따로 따로 도시되어 있지만, 실제로 그들은 바람직한 실시예에서는 단일 블록으로 형성된다. 그 이유는 섹션 2.5.4에서 설명되기 때문이다.
2.4 데이터 전송
대부분의 코프로세서 명령어는, 단일값 또는 벡터로서 인터페이스를 거쳐 데이터를 전송하게 된다. 그러므로, 경로들은, 데이터를 전달하는데 필요하다. 이들 경로에 의해, 코어 LSU(222)가 코프로세서 파이프라인과 통신할 수 있다. 코프로세서는, 일반적으로 별도의 LSU를 갖지 않아서 저장용 데이터의 발생과 로드 데이터의 수신은 파이프라인에 의해 직접 실행될 것이다.
도 5는 코어 LSU(222)와 코프로세서 파이프라인 사이에서 통신의 개략도를 나타낸다.
로드 및 저장은, 이하의 섹션에서 따로 따로 설명하겠다.
2.4.1 로드
로드 데이터는, 도 5에 도시된 것처럼, 코어 LSU(222)의 WB단(250)에 의해 인터페이스를 거쳐 보내져 코프로세서 파이프라인의 EX6단(275)(즉, WB단)에 의해 수신된다. 코프로세서 파이프라인이, EX6에서의 명령어를 리타이어하도록 허용하는 종료 토큰을 대기하는 것외에는 이슈단을 하지 않고서 일시 중지할 수 없으므로, 로드 명령어는 항상 코프로세서에서의 데이터의 도착과 동기하여 EX6에 도달할 것이다. 따라서, 로드 큐는, EX6에서의 로드 명령어의 도착에 따라 데이터를 재정렬하는 역할을 하는 이중 버퍼(410)에 의해 실행될 수 있다. 이러한 이중 버퍼(410) 는, 도 4에 도시되어 있다.
2.4.2 저장
코어 LSU는 그들이 도착할 때 데이터를 억셉트하는 것을 보장할 수 없으므로, 저장 큐(400)가 필요하다. 이러한 큐는 LSU(222)의 (여기서는, 메모리 1단이라고도 불리는) DC1단(230)을 코프로세서의 이슈단(215)에 연결한다. 변화하는 데이터의 양을 전송하므로, 흐름 제어는 저장 큐(400) 상에서 LSU(222)가 일시적으로 데이터의 전송을 정지하게 허용하도록 하는 것이 필요하다. 이는 나중에 상세히 설명하겠다.
2.5 토큰 큐 관리
모두의 길이가 3개의 슬롯이고 동일하게 기능하는 토큰 큐들(즉, 로드 큐(410) 이외의 모든 큐들)은 짧은 FIFO로서 실행된다. 대부분의 큐들은, 동기화된 파이프라인의 자기 제한 특징으로 인하여 흐름 제어가 필요하지 않지만, 상기 저장 데이터 큐(400)는 코프로세서로부터 그것으로의 정보의 흐름을 제어할 수 있도록 하는 것이 필요하다. 상기 큐들의 형태와 흐름제어에 관한 추가내용은, 이하의 섹션들에서 설명한다.
2.5.1 큐 실행
큐 FIFO는 멀티플렉서(660, 670)을 사용하여 선택된 현재의 출력에 의해 3개 의 레지스터(600,610,620)로서 실행되기도 한다. 도 6은 이러한 구성을 나타낸다. 큐는, 3개의 레지스터(600,610,620)로 이루어지고, 각기 레지스터가 유효 데이터를 포함하는지의 여부를 나타내는 플래그(630,640,650)와 각각 관련되어 있다. 새로운 데이터는, 버퍼 A, 즉 레지스터(600)에 기록됨으로써 큐 내로 이동되고, 다음 레지스터가 공백이거나 거의 비어있는 동안은, 그 큐를 따라 계속 이동한다. 그 큐가 아주 오랜 데이터로 충만하여, 먼저 큐로부터 판독되는 경우, 버퍼 C를 점유하고 가장 새로운 것이 버퍼 A를 점유할 것이다.
또한, 멀티플렉서(660,670)는, 선택된 출력이 유효한지의 여부를 나타내는 현재의 플래그를 선택한다.
2.5.2 큐 변경
큐는, 사이클마다 인터페이스를 거쳐 도착하는 데이터를 억셉트하는 버퍼 A(600)와 그 데이터와 관련된 유효 비트를 억셉트하는 버퍼 A 플래그(630)에 기록된다. 그 큐가 충만되어 있지 않는 한, 이것은 버퍼 A의 내용이 동일한 사이클 동안 버퍼 B(610)에 이동되므로 데이터의 손실이 없게 될 것이다. 큐가 충만한 경우, 버퍼 A(600)의 로딩을 금지하여 데이터의 손실을 방지한다. 어떠한 경우에서든, 상술한 것처럼, 도 3 및 도 4에 도시된 파이프라인들의 형태는, 3개보다 많지 않은 슬롯이 각 큐에서 사용가능해질 필요가 없어서, 유효 데이터는 그 큐가 충만일 때 인터페이스에 의해 나타내지 못하여, 데이터 손실은 뒤이어 일어나지 않는다. 3개의 버퍼 플래그(630,640,650)의 상태를 사용하여 매 사이클 동안 어느 큐가 큐 출력을 제공하는지를 결정한다. 그 출력은, 가장 오래된 데이터를 포함하는 버퍼에 의해 항상 제공될 것이다. 이것은 그것이 충만한 경우 버퍼 C이거나 버퍼 B이거나, 그것이 공백인 경우 버퍼 A이다. 3개의 플래그를 보면 단순한 우선순위 인코더는, 정확한 멀티플렉서 선택신호들을 공급할 수 있다. 또한, 3개의 플래그의 상태는, 큐에서 일 버퍼로부터 다른 버퍼로 데이터가 어떻게 이동하지는지를 결정할 수 있다. 표 2는 3개의 플래그가 어떻게 디코딩되는지를 나타낸다("X"는 "돈 케어(don't care) 상태를 나타낸다).
Figure 112005011654231-pct00002
표 2-큐 버퍼들의 어드레싱
이때, 새로운 데이터는, 심지어 그것의 플래그 세트되어 있더라도, 현재의 버퍼 A의 내용이 버퍼 B로 이동되면, 큐가 충만하지 않은 경우 버퍼 A로 이동될 수 있다.
큐가 판독되는 경우, 정보를 제공하는 버퍼와 관련된 플래그는, 클리어되어야 한다. 이러한 동작은, 버퍼가 큐 출력을 제공하는 동안의 사이클의 끝에서 겹쳐써지도록 입력동작을 겸비한다. 이는, 입력을 가능하게 하는 상기 선택된 단의 플 래그를 마스킹하기 위해 판독 인에이블신호를 사용하여 실행된다. 도 7은 큐를 판독 및 기록하는 도면을 나타낸다.
4개의 유효 입력("1", "2", "3" 및 "4")은, 상기 큐에 기록되고, 그들이 도착할 때 버퍼 A(600) 내에 클록킹된다. 도면은, 첫 번째 입력이 버퍼 C(620)에 도달할 때까지 버퍼에서 버퍼로 클록킹된다. 이때에, 큐로부터의 판독을 필요로 한다. 버퍼 C가 충만할 때, 데이터를 공급하는 것을 선택한다. 그것이 판독되고 있을 때, 더 많은 입력을 억셉트하지 않아서, 그것은 버퍼 B로부터 값 "2"를 수신하고, 버퍼 A로부터 값 "3"을 수신한다. 버퍼 A가 버퍼 B에의 기록에 의해 자유롭기 때문에, 그 값 "4"을 입력으로부터 억셉트할 수 있다.
2.5.3 흐름 제어
이전에 나타낸 것처럼, 저장 데이터는, 코어 LSU(222)가 코프로세서로부터 데이터의 흐름을 홀트되게 하도록 흐름 제어를 필요로 한다. 이것은, 코프로세서에 정지 신호를 보내어서 행해진다. 이러한 신호는 코프로세서에 도달하는데 2개의 클록 사이클이 걸리므로, 충만한 저장 큐(400)의 리스크가 있을 때 생성되어야 한다. 3의 큐 길이에 의해, 이러한 리스크은, 코어 LSU가 데이터 항목을 억셉트할 수 없을 때 실현된다. 이와 같이, 상기 정지신호는, LSU가 데이터를 억셉트할 수 없을 때마다 코프로세서에 보내진다. 지연 때문에, 코프로세서는 정지신호가 생긴 후에 2개의 더 많은 사이클 동안 데이터를 계속 보낸다. 또한, 정지신호가 보내질 경우 "인 플라이트(in flight)"항목이 있는 경우, 큐는, 그것을 보낸 후 3개의 항목을 억셉트해야 할 것이다. 도 8은 이러한 경우를 나타낸다.
LSU는 첫 번째 2개의 전송 A 및 B를 억셉트한다. 그러나, 3개의 항목, C를 억셉트하는 것이 가능하지 않아, 포인트 800에서 정지신호를 일으킨다. 이때까지, 이러한 신호는 포인트 810에서 코프로세서에 도달하고, 그것은 3개보다 많은 항목, C, D 및 E를 보냈고, 이미 6번째 항목 F를 인터페이스 상에 놓았다. 정지신호를 수신한 코프로세서는 항목 F를 인터페이스 상에 남긴다. 이러한 새로운 항목을 보고 그것을 억셉트할 수 없으면, LSU(222)는 포인트 820에서 펜딩(pending) 플래그를 설정하여 그것의 존재를 기록한다. LSU가 보다 많은 데이터를 억셉트할 수 있는 경우, 그것은 큐를 언로드하기 시작하고 포인트 830에서의 정지신호를 디어서트(deassert)한다. 이때까지, 이러한 디어서트는 포인트 840에서의 코프로세서에 도달하고, 큐는 비어있고 통상의 서비스는 재개될 수 있다.
2.5.4 명령어 디코드
코어는 GCP 인터페이스를 거쳐 메모리로부터 페치된 모든 명령어를 통과하고, 여기서, 그것은 명령어 큐(300)에 입력한다. 이상적으로, 그것은, 코프로세서 명령에 관해서만 통과시키지만 이 단에서는 그 명령어를 디코딩할 시간이 없다. GCP에는 그 자신의 디코드단(205)에서의 도착에 관해 명령어를 디코딩하고 논 코프로세서 명령어를 거절하는 것이 남겨진다. 코어가 이들 명령어의 제거의 긍정 응답이 없는 것을 필요로 할 때 이것을 조용히 행할 수 있는데, 그 이유는 그 자신의 디코드단(200)에서 각 명령어의 형태를 결정하기 때문이다. 이것의 의미는, 코어로 부터 수신된 명령어는, 그것이 명령어 큐에 입력할 때 디코딩되야 하는 것을 말한다. 그러므로, 명령어 큐(300)는, 명령어 디코더(205)를 포함하는 표준 큐의 변경된 버전이다. 도 9는 명령어 큐가 어떻게 실행되는지를 나타낸다.
디코더(205)는, 그것이 도착하고 연속적인 버퍼 B 910 및 C 920가 버퍼 A 내의 명령어의 디코딩된 버전을 수신할 때 버퍼 A 900에 기록된 명령어를 디코딩한다. A 플래그(930)는, A 내의 데이터는 유효하고 또한 코프로세서 명령어를 나타내는 것을 나타낸다. 그래서 논 코프로세서 또는 비인식 명령어는, 명령어 큐로부터 즉시 드롭되어 결코 통과되지 않는다. 또한, 코프로세서는, 코프로세서 내의 코프로세서 번호 필드를 비교하고 그것을 그 자신과 비교한다. 그 번호가 일치하지 않은 경우, 명령어는 무효이다.
2.6 명령어 태깅(tagging)
종종, 코어는, 코프로세서 파이프라인 내에 명령어를 식별할 수 있는 것이 필요하다. 이것은, 코어가 명령어를 플러시하는 코프로세서에게 나타내도록 (나중에 상세히 커버될) 플러시를 위해 필요하다. 그러므로, 코어는, 코프로세서에 태그를 보낸 각 명령어를 공급하고, 이 태그는, 어떠한 순간에 파이프라인에서의 모든 태그들은 독특하도록 충분히 큰 값들로 이루어진 풀(pool)로부터 인출된다. 16개의 태그는, 바람직한 실시예에서 이것을 달성하는데 충분하고 4비트의 태그 필드를 필요로 한다. 시간마다 명령어에 태그를 할당하고, 태그 번호는 모듈로 16 증분되어 다음 태그를 생성한다.
플러시 메카니즘은, 연속적인 코프로세서 명령어의 태그가 인접한 경우 단순화된다. 이것은, 코프로세서에 전달되는 명령어가 코프로세서 명령어일 때 태그 번호를 증가시켜서 이루어진다. 이는 명령어를 보낸 후 행해져서, 태그는 코프로세서 명령어를 이전보다는 오히려 이후에 보낸 후 변한다. 코어가 명령어를 디코딩하여 그것이 무슨 종류의 명령어인지를 판단할 시간이 아직 없으므로 명령어를 보내기 전에 태그를 증가시키는 것을 가능하지 않다. 코프로세서 디코드단(205)이 논 코프로세서 명령어를 제거하는 경우, 인접한 태그들을 전송하는 명령어 스트림에 남긴다.
또한, 태그를 사용하여 큐들을 따라 이동하는 토큰들로 이루어진 시퀀스가 코어와 코프로세서 파이프라인들을 따라 이동하는 명령어들로 이루어진 시퀀스와 일치하는 것을 검증한다.
3. 동작
이하, 수행될 수 있는 각종 동작과 발생할 수 있는 이벤트를 예시함으로써, GCP 인터페이스가 기능하는 방식에 대해 설명한다. 상기 설명에 수반된 도면들은 두 개의 파이프라인간의 인터페이스에서, 각종 큐를 따라 토큰이 통과하는 것을 도시한 것이다. 각 큐의 동일성은 시작점 및 종점을 관찰하고 도 3을 참조함으로써 추론될 수 있다.
3.1 일반 동작
도 10은 코어 및 코프로세서의 일반 동작을 도시한 것이다.
일반 동작시에는 상기 코어가 명령어 큐(300)를 통해 상기 코프로세서를 가로질러 모든 명령어들을 통과시킨 다음, 그 명령어가 코프로세서 명령어일 경우에 태그를 증가시킨다. 코프로세서는 명령어를 복호화하고, 그 명령어가 코프로세서 명령어가 아니거나, 그 명령어가 잘못된 코프로세서 번호를 포함할 경우에 상기 명령어를 버린다. 그 다음, 각 코프로세서 명령어는 파이프라인을 따라 통과하고, 이슈단으로 진입할 때, 토큰을 길이 감소 큐(330)에 송신한다. 그 다음, 취소 큐(310)로부터 토큰을 수신할 때까지, 명령어는 이슈단에서 유지된다. 취소 토큰이 명령어의 취소를 요구하지 않으면, EX1 단으로 진행하여, 토큰을 억셉트 큐(340)에 위치시킨다. 그 다음, EX6단에 도달할 때까지, 상기 명령어는 파이프라인을 따라 이동한다. 여기서, 종료하도록 하는 종류 큐(320)로부터의 토큰 수신을 기다린다.
도 10은 코프로세서가 토큰에 응답하여, 길이감소 큐(330)가 토큰을 기다리면서 코어 파이프라인이 명령어 A에 대해 EX1 단에 일시 중지하도록 하는데 어느 정도의 시간이 걸리는지를 도시한 것이다. 한편, 이 지연은, 명령어 B가 이슈단을 떠날 때, 상기 명령어 B가 코어에 의해 송신된 토큰을 코프로세서 파이프라인단 EX1에서 기다리도록 한다. 결과적으로, 명령어 B는 EX6에 늦게 도달하고, 종료 큐의 토큰이 1 주기 동안 거기서 기다렸음을 알게 된다. 그러나, 명령어 C가 파이프라인의 하부에 도달할 때까지, 2개의 파이프라인은 다시 한번 동기화 상태가 된다.
도 10으로부터, 코프로세서 파이프라인을 실행하게 되면, 명령어가 코어의 이슈단에서 일시 중지하게 되므로, 1 주기의 타이밍 페널티가 부여됨을 알 수 있 다. 그렇지만, 그 다음의 두 개의 명령어들이 상기 일시 중지를 이용하므로 상기 페널티가 분담된다. 파이프라인을 따라 통과하는 모든 명령어들이 코프로세서 명령어이면, 세 번째 명령어마다 일시 중지가 발생하므로, 상기 페널티는 코프로세서 명령어마다 여분의 세 번째 주기를 발생하게 된다. 다른 한편으로, 코프로세서 명령어가 파이프라인에서 드물면, 각 코프로세서 명령어에 대해 1주기 페널티가 초래된다. 이에 따라, 평균적인 타이밍 페널티는 코프로세서 명령어 비율이 상승함에 따라 감소된다.
3.2 일시 중지
도 11은 코프로세서가 이슈단에서 일시 중지할 때, 코어와 코프로세서 파이프라인이 어떻게 행동하는지를 도시한 것이다.
코어의 이슈단과 코프로세서의 복호단으로부터 명령어가 통과할 때, 토큰의 교환에 의해, 파이프라인을 따라서 코프로세서 명령어 A의 통과가 일반적인 방식으로 시작된다. 그 다음, 명령어가 코프로세서의 이슈단에서 일시 중지하여, 억셉트 큐(340)를 통한 코어의 EX2단으로의 토큰의 통과를 지연시키므로, 토큰을 기다리면서 일시 중지한다. 최종적으로, 명령어가 코프로세서의 EX1 단으로 진입하면, 상기 명령어가 코어의 이슈단을 떠나므로, 상기 명령어는 취소 큐(310)를 통해 상기 명령어에 의해 이전에 기록된 토큰을 데려간다.
도 11은 또한, 큐에서 언제나 기다릴 수 있는 항목의 수를 파이프라인 자체가 어떻게 제한하는지를 예시한 것이다. 명령어 A가 억셉트 큐(340) 상에서 나타나는 토큰을 기다리는 EX2에서 일시 중지하는 동안, 상기 명령어 A는, 비록 명령어 B가 이미 그렇게 하였더라도, 명령어 C가 진입하여 취소 큐(310)에 토큰을 위치시키는 것을 방지한다. 이에 따라, 취소 큐에서 기다리는 항목의 수는 2로 제한된다. 유사한 메커니즘이 파이프라인 사이에서 토큰을 통과시키는 다른 큐에서 작동 중이다.
3.3 취소
도 12는 코프로세서 명령어가 이슈단에서 코어에 의해 취소될 경우에 코어와 코프로세서 파이프라인이 어떻게 행동하는지를 도시한 것이다.
명령어 C는 일반적으로 코어 파이프라인 아래로 진행하여, 이슈단에 도달할 때까지, 명령어 큐(300)를 따라 토큰을 송신한다. 여기서, 상기 명령어는 이 명령어가 취소되어야 함을 나타내는 토큰을 상기 취소 큐(310)를 따라서 송신한다. 이것을 행하고 나면, 코어 파이프라인 내에서 팬텀(빗금으로 표시됨)으로 변환되고, EX2단까지 정상적인 경우와 같이 파이프라인을 따라 진행한다. 이렇게 함으로써, 길이 큐(330)와 억셉트 큐(340)를 통해 코프로세서 파이프라인에서의 그 대응부에 의해 송신된 토큰을 데려갈 수 있다. 이들 토큰들은, 코프로세서 큐 내의 명령어가 취소 큐(310)로부터 토큰을 판독하기 전에 송신된다. 이것은, 각 송신되는 명령어가 다른 파이프라인에서 대응하는 수신 명령어를 갖는 것을 보증함으로써, 큐를 따라서 토큰이 통과하는 것을 올바르게 유지한다. 명령어 C는, 코어의 EX2 단을 떠날 때, 더 이상 토큰을 데려갈 필요가 없으므로, 최종적으로 소멸된다. 코프로세서 파이프라인 내의 명령어는, EX1 단에서 취소 큐(310)로부터 취소 토큰을 데려간 직후에 소멸된다.
3.4 바운스(Bounce)
도 13은 코프로세서에 의해 코프로세서 명령어가 바운스(억셉트되지 않음)될 경우에 코어와 코프로세서 파이프라인이 어떻게 행동하는지를 도시한 것이다.
명령어 C는 일반적인 방식으로 코프로세서 파이프라인 아래로 통과하여, 이슈단에 도달할 때까지, 토큰을 길이 큐(330)에 통과시킨다. 여기서, 상기 명령어는, 코프로세서에 의해 이 명령어가 억셉트되지 않았음을 나타내는 토큰을 억셉트 큐(340)를 따라 송신한다. 이것을 행하고 나면, 명령어는 팬텀으로 변환되어, 명령어가 소멸되어 EX1 단을 떠날 때까지, 정상적인 경우와 같이 파이프라인을 따라 진행한다. 이렇게 함으로써, 코어 파이프라인 내의 그 대응부에 의해 취소 큐(310)를 따라 송신된 토큰을 데려갈 수 있다. 코어 파이프라인 내의 명령어는, EX2 단에서 억셉트 큐(340)로부터 억셉트 토큰을 데려간 직후에 소멸한다.
코프로세서 파이프라인에서 바운스된 명령어들의 행동은 코어 파이프라인에서 취소된 명령어들과 거의 동일하고, 파이프라인이 코어에 의해 취소되고 또한 코프로세서에 의해 거부된 명령어를 처리하는 방식에 의해, 이 메커니즘의 양호한 예시가 제공되어 있다. 도 14는 이러한 상황을 도시한 것이다.
이 상황에서, 양 파이프라인은, 유일한 목적이 다른 파이프라인으로부터 토큰을 데려가는 것이거나, 코프로세서의 경우, 플러시 중에 대조용 태그를 제공하는 것인 팬텀을 생성하였다. 각각은 소멸함을 나타내는 토큰을 수신하지만, 이 정보는 팬텀으로서 이미 예정되어 있기 때문에, 상기 정보는 여분의 것이다.
3.5 플러시
도 15는 코어가 플러시 신호를 코프로세서에 송신할 때, 코어와 코프로세서 파이프라인이 어떻게 행동하는지를 도시한 것이다.
이슈로부터 포괄적인 EX4까지의 임의의 단에서의 코어에 의해 플러시가 시작될 수 있다. 이 정보는 일련의 큐를 통해 코프로세서 파이프라인에 통과될 수 있지만, 이 기법은 큐를 불필요하게 증식시키게 된다. 그 대신, 태그 동작(tagging)이 사용됨으로써, 단일 브로드캐스트 신호가 코프로세서에 송신되어, 대응하는 태그를 송신함에 의해 플러시 대상 명령어를 식별한다. 따라서, 상기 코프로세서는 플러시 태그와 동일하거나 더 최근의 태그를 갖는 모든 명령어들을 발견하여 그들을 제거해야 한다. 큐를 따라 통과하는 토큰과 달리, 플러시 신호는 고정된 지연을 가지므로, 코어 내의 플러시와 코프로세서 내의 플러시간의 타이밍 관계는 정확하게 알려져 있다.
도 15에서, 명령어 C는 코어 내에서 EX1 단에 도달하면, 플러시를 시작한다. 그러므로, 다음 주기에서 상기 명령어가 소멸하고, 파이프라인 내에서 상기 명령어를 뒤따르는 모든 명령어를 취한다. 상기 명령어가 소멸될 때, 브로드캐스트신호(450)(도면에서 점선 화살표로 도시됨)를 코프로세서 파이프라인에 송신한다. 코프로세서가 이 신호를 수신하면, 태그와 대조하기 위해 파이프라인을 검색하여, 도 15에서 명령어 C, D 및 F(어느 경우에나 소멸할 예정이었던 복호단에서의 코어 명령어)가 있는 위쪽의 점으로부터 모든 명령어들을 제거한다. 명령어 A 및 B는 플러시 점을 앞서므로 상기 파이프라인을 따라 전송된다.
또한, 대부분의 토큰 큐는 플러시를 필요로 하며, 이 플러시는 각 명령어에 첨부된 태그를 사용하여 행해질 수도 있다. 토큰 큐의 수신 종단에 있는 단을 통과하기 전에 대조가 이루어지면, 토큰 큐는 간단하게 소거된다. 그렇지 않으면, 큐 내의 태그와 대조함으로써 적절하게 플러시되어야 한다. 이 동작은, 종료 큐(320)를 제외하는 한편, 저장 큐(400)를 포함하는 모든 큐 상에서 수행되어야 한다. 그러므로, 코프로세서는 명령어(300) 및 취소 큐(310)를 플러시해야 하며, 코어는 길이 큐(330), 억셉트 큐(340) 및 저장 큐(400)를 플러시해야 한다.
플러시 신호가 수신되는 대로, 코프로세서에 의해 플러시 동작이 수행될 수 있고, 큐들이 그 이외의 다른 동작을 수행하지 않기 때문에 상기 동작이 단순화된다. 이것은, 플러시 동작이 큐 업데이트와 결합되어야 할 필요가 없음을 의미한다. 도 15를 검토하면, 플러시된 큐에 영향을 미치는 일이 전혀 발생하지 않으며, 큐 플러시 동작을 수행할 좋은 기회인 단일 주기 플러시가 존재함을 알 수 있다. 그러나, 이것은, 이후에 설명될 로드 또는 저장 큐에 적용되지 않는다.
플러시 커맨드는 플러시가 어디에서 시작해야 하는지를 나타내는 태그값과 연관되어 있다. 이것은 모든 명령어에 의해 운반되는 태그와 대조된다. 큐가 플러시되어야 할 경우, 동일 또는 더욱 신규한 태그를 갖는 각 버퍼는 소거된다. 도 16은 큐 플러시 동작의 예시를 제공한다.
큐에서의 각 버퍼 600, 610, 620은 그와 연관된 태그 비교기 604, 614, 624를 갖는다. 플러시 태그(632)는 각 비교기에 제공되어, 큐에 유지 중인 각 유효 명령어에 속하는 태그 602, 612, 622와 비교된다. 버퍼의 태그가 플러시 태그보다 크거나 같을 경우, 큐 내의 버퍼는 전체 태그가 소거되도록 하여, 이제 비어있는 상태임을 나타낸다.
3.6 종료
명령어가 코프로세서 파이프라인의 하부에 도달하면, 종료하기를 원하게 된다. 어떻게 종료하는지는 명령어의 종류와, 그것이 반복되는지 아닌지에 따라 결정된다. CDP 명령어는, 종료 큐(320)에서 충족시키는 토큰을 발견하게 될 경우에 종료된다.
로드 및 저장 명령어가 종료되는 조건은 추후에 설명한다.
4. 데이터 전송
4.1 총론
데이터 전송은 코어 측에서 LSU(222)에 의해 관리되고, 파이프라인 자체는 코프로세서 측에서 관리된다. 전송은 단일값 또는 벡터일 수 있다. 후자의 경우, 코프로세서는 이슈 단에서의 명령어를 반복함으로써, 복수 전송을 일련의 단일 전송으로 효과적으로 변환한다. 이것은 전송 대상인 각 항목에 대한 로드 또는 저장 명령어의 하나의 예를 생성한다. 상기 명령어는 반복하는 동안에 코프로세서의 이 슈 단에서 머무르며, 그 자신의 복사본을 생성한다. 로드에 대하여, 이들은 파이프라인을 따라 이동하므로, EX6 단에 도달할 때, 로드 큐(410)로부터 각 데이터 항목을 데려갈 수 있다. 저장에 대하여, 반복된 명령어들이 이슈단으로부터 통과하지 않고, 생성될 때에 사라져서, 저장 큐(400)에 위치시키기 위한 각 반복시에 저장 데이터를 발생시킨다. 도 17은 로드 명령어 C에 대한 일례를 도시한 것이다. 반복된 명령어(대문자로 도시)의 첫 번째는 헤드이고 나머지(소문자로 도시)는 테일(tail)이다. 도시된 예에서, 벡터 길이는 4이므로, 1개의 헤드와 3개의 테일이 있다.
코어 파이프라인에 의한 토큰 교환에는 헤드 명령어만이 포함되므로, 이와 같은 방식으로 명령어들을 반복하지는 않으며, 테일 명령어들은 코프로세서 파이프라인을 따라 조용하게 통과한다. 반복된 로드 명령어가 취소 또는 플러시되면, 모든 테일 명령어(동일한 태그를 지님)는 파이프라인으로부터 제거되어야 한다. 취소되면, 헤드 명령어만이 팬텀이 되며, 테일은 완전히 제거된다.
4.2 로드
로드 데이터는 코어 LSU(222)의 WB 단(250)으로부터 나타나며, 로드 큐(410)로부터의 코프로세서의 EX6단(275)에 의해 수신된다. 벡터링된 로드에서의 각 항목을 반복된 로드 명령어의 하나의 예가 픽업된다. 파이프라인 타이밍은 로드 명령어가 항상 준비되어 있거나, EX6에 바로 도달하여 각 데이터 항목을 픽업하도록 되어 있다. 로드 명령어가 EX6에 도달하였지만 로드 정보가 아직 나타나지 않을 경우, 로드 명령어는 EX6에 일시 중지해야 하며, 코프로세서 파이프라인의 나머지를 일시 중지한다. 따라서, 로드 명령어가 로드 데이터를 만나면 종료된다.
4.2.1 로드 버퍼
코프로세서 EX6 단에서 로드 데이터와 로드 명령어간의 올바른 정렬을 달성하기 위하여, 데이터가 코프로세서에 도달하면, 이중으로 버퍼링될 필요가 있다. 도 18은 예시를 위해 제공된다.
로드 데이터 버퍼들은 파이프라인 레지스터로서 기능하므로, 흐름 제어를 필요로 하지 않고, 어떠한 태그도 운반할 필요가 없다. 유일한 요건은 상기 데이터와 유효 비트이다. 코어 LSU(222)의 WB 단(250)로부터 나타나는 로드 데이터의 각 항목은 코어 버퍼(1000)에 위치되어 있고, 그것은 버퍼(1030)에 저장된 유효 비트에 대응한다. 그 다음, 상기 데이터 항목과, 이와 연관된 유효 비트는 인터페이스를 통해 GCP에 넘겨지고, 여기서, 버퍼 1010, 1040 및 1020, 1050을 차례로 통과하게 된다. 도 19는 코어 내의 로드 명령어가 코어 LSU에 들어오고, 로드 데이터의 하나의 항목의 발생을 시작한 다음, 코어 인터페이스 버퍼(1010) 및 GCP의 이중 버퍼 1020, 1030을 통해 코프로세서에 넘겨져서, EX6에서 코프로세서 로드 명령어와 만나는 방법을 도시한 것이다.
로드 전송을 위해 작동하는 데이터 버퍼링의 이러한 형태를 위하여, 코어 EX4 단에서 대응하는 명령어의 도달과 동시에, 또는 그 전에, 명령어들이 코프로세서 EX6에 항상 도달하도록, 두 개의 파이프라인이 동기화된다. 또한, 코어로부터 종료 큐(320) 아래로 이동하는 토큰은, 대응하는 로드 데이터 항목들이 로드 데이터 파이프라인 버퍼의 종단에 도달함과 동시에 도달할 것이 요구된다. 종료 큐(320)에서의 토큰의 부족에 응답하는 이슈 단 이후에 코프로세서 파이프라인만이 일시 중지하면, 그리고, 로드 명령어가 그 ADD 단(220)로부터 이동하도록 하기 전에 LSU(222)가 억셉트 큐(340)로부터 토큰을 발견하면, 상기 조건들은 충족된다. 또한, WB 일시 중지 상태는 LSU로부터의 로드 데이터의 송신을 지연시켜야 한다.
4.2.2 플러시
코어 EX4 단(290)를 포함하지 않는 플러시는 로드 데이터 버퍼에 영향을 미칠 수 없고, 로드 전송이 일반적으로 완료된다. 코어 EX4 단에서의 명령어에 의해 플러시가 시작될 경우, 로드 명령어들이 플러시를 시작할 수 없기 때문에, 이것은 로드 명령어가 아닐 것이다. 플러시 점 뒤의 임의의 코프로세서 로드 명령어들이 종료 토큰의 부족으로 인해 코프로세서 파이프라인의 EX6 단(275)만큼 멀어질 경우에는 자신이 일시 중지 중임을 알게 되므로, 데이터 전송은 발생하지 않게 된다. 로드 데이터 버퍼(410) 내의 임의의 데이터는 플러시 데드 기간 중에 자연스럽게 소멸하는 반면, 파이프라인은 다시 로드된다.
4.2.3 취소
로드 명령어가 취소될 경우, 헤드와 임의의 테일 양자는 제거되어야 하며, 헤드만 팬텀으로 교체된다. 상기 취소 동작은 코프로세서 EX1 단(225)에서 발생하 기 때문에, 데이터 전송이 발생하지 않으며, 이에 따라, 로드 데이터를 처리하기 위하여 어떠한 특수한 측정도 행할 필요가 없다.
4.2.4 종료
로드 명렁어가 코프로세서 파이프라인의 하부에 도달하면, 로드 데이터 버퍼(410)의 종단에서 데이터 항목을 발견하여야 한다. 명령어가 헤드 명령어일 경우, 종료 큐(320)에서 토큰도 발견해야 한다. 테일 명령어들은 로드 데이터가 제공될 것을 요구할 뿐만 아니라, 상기 종료 큐로부터는 어떠한 토큰도 요구하지 않는다.
4.3 저장
저장 데이터는 코프로세서 이슈단(215)에서 나타나고, 코어 LSU DC1 단(230)에 의해 수신된다. 저장 명령어가 코프로세서 이슈단에서 반복할 때, 백터 저장의 각 항목이 발생된다. 반복되는 저장 명령어들은 더 이상 사용되지 않으며, 코프로세서 파이프라인을 따라 통과한다. 헤드 명령어만 파이프라인을 따라 통과한다. 이것은, 저장 반복이 한번 시작되면, 코어에 의해 명백하게 정지되지 않는 한, 정지되지 않음을 의미한다. 특히, 저장 헤드 명령어가 코프로세서 파이프라인의 EX1 단에서 일시 중지할 경우, 상기 반복이 계속되어 상기 일시 중지 상태에 의해 영향을 받지 않는다.
4.3.1 저장 데이터 큐
LSU(222)에 의해 어느 순간에 저장 데이터 전송이 정지될 수 있으므로, 저장 데이터 큐(400)가 필요하다. 또한, 저장 데이터 벡터는 임의의 길이이기 때문에, 흐름 제어가 요구되고, 이것은 섹션 2.5.3에서 이미 설명되었다. 3개의 슬롯의 큐 길이는 흐름 제어가 데이터 손실 없이 사용되도록 하기에 충분하다.
4.3.2 플러시
저장 명령이 플러시에 포함되면, 저장 데이터 큐(400)는 코어에 의해 플러시되어야 한다. 코어가 코프로세서에 플러시를 통지한 후에 (신호 전달지연으로 인해) 2주기 동안 큐가 채워질 것이므로, 코어는 저장 데이터 큐(400)의 플러시를 수행하기 전에 2주기 동안 지연되어야 한다. 플러시 후의 데드 기간은 이것이 행해질 수 있도록 충분히 멀리 확장된다.
4.3.3 취소
코어가 저장 명령어를 취소할 경우, 상기 명령어는 저장 데이터의 수신을 시작하기 전에 취소되었음을 알게 된다. 코프로세서가 취소신호를 수신하여 그 신호에 따라 작동할 때까지, 저장 데이터 큐(400)를 따라 하나의 데이터 항목을 이미 송신하게 된다. 그러므로, 코어는 취소 후에 상기 단일 항목을 제거하고 처분해야 한다. 이것은, LSU(222)를 통해 단일 저장 명령어 팬텀을 송신하여 데드 데이터를 데려옴으로써 달성될 수 있다. 혹은, 이슈 단이 취소 큐를 룩어헤드(look ahead)하여, 데이터 송신을 시작하기 전에 저장 명령이 취소되지 않을 것임을 결정할 수도 있다.
4.3.4 종료
저장 명령어들은 종료 토큰 큐(320)를 사용하지 않으므로, 코프로세서 파이프라인의 하부에 도달하자마자 종료된다.
5. 복수의 코프로세서
하나 이상의 코프로세서가 코어에 부착될 수 있으므로, 복수의 코프로세서를 처리하기 위한 몇몇 수단이 필요할 수도 있다. 경제적인 이유로, 가능한 한 작은 코프로세서 인터페이스가 중복되는 것을 보증하는 것이 중요하다. 특히, 코프로세서는 코어에 의해 유지되는 길이 큐(330), 억셉트 큐(340) 및 저장 큐(400)를 공유해야 한다. 이들 큐들이 공유될 경우, 하나의 코프로세서만이 큐를 언제든지 사용할 수 있다. 이것은, 하나의 코프로세서만이 언제든지 활성화되도록 함으로써 가장 용이하게 보증된다. 이것은, 일반적으로 말해서 하나의 코프로세서만이 언제든지 사용되어야 하기 때문에, 심각한 제한이 아니다. 대표적으로, 프로세서는 하나의 코프로세서만을 구동하는 구동용 소프트웨어에 의해 구동된다. 구동용 소프트웨어에 대한 호출 및 그로부터 복귀에 의해, 하나의 코프로세서의 사용과 상이한 코프로세서의 사용간에 몇 개의 코어 명령어들이 있음을 보증하게 된다.
5.1 상호접속 고찰
하나의 코프로세서만이 언제든지 코어와 통신하도록 허용될 경우, 모든 코프로세서들은 코어로부터의 GCP 인터페이스 신호들을 공유할 수 있다. 코프로세서들로부터 코어로의 신호들은, 모든 코프로세서가 비활성화 상태일 경우에 그 출력을 제로(zero)로 유지하기만 하면, 간단히 모두 ORed일 수도 있다.
5.2 코프로세서 선택
코프로세서들은 코어로부터의 신호에 의해 인에이블 된다. 바람직한 실시예에서는, 각 코프로세서에 대해 하나 즉, 이들 신호들이 16개 있으며, 언제든지 하나만 활성 상태로 될 수 있다. 또한, 코프로세서들에 대한 명령어들은 코프로세서 번호를 포함하여, 코프로세서가 코어 명령어들을 거부할 뿐만 아니라, 그 자신의 번호와 일치하지 않는 명령어들도 거부하도록 한다.
5.3 코프로세서 전환
코어가 최종적으로 어드레싱이 이루어진 것과 상이한 코프로세서용으로 예정된 코프로세서 명령어를 복호할 경우에는, 이전의 코프로세서 명령어가 종료될 때까지 이 명령어를 일시 중지한다. 이것은 현재 선택된 코프로세서에서의 모든 활성 상태가 중단되었음을 보증한다. 그 다음, 코프로세서의 선택이 전환되고, 최종적으로 활성 상태인 코프로세서를 활성 해제시키며, 새로운 코프로세서를 활성화시킨다. 새로운 코프로세서 명령어를 수신한 코프로세서는 그것을 무시하고 활성 해제된다. 그러므로, 상기 명령어는 코어에 의해 재송신될 필요가 있으며, 그 때에는 새롭게 활성화된 코프로세서에 의해 억셉트될 것이다.
이상으로 본 발명의 구체적인 실시예에 대해 설명되었지만, 본 발명은 여기에 한정되지 않으며, 본 발명의 범위 내에서 많은 변형 및 추가가 이루어질 수 있음이 명백하다. 예를 들어, 본 발명의 범위에서 벗어나지 않고도, 독립 청구항의 특징에 의해, 뒤따르는 종속 청구항의 특징들의 각종 조합이 이루어질 수 있다.

Claims (45)

  1. 명령어들로 이루어진 시퀀스를 실행가능하도록 동작하고, 제 1 복수의 파이프라인단을 갖는 제 1 파이프라인을 구비한 메인 프로세서;
    상기 명령어들로 이루어진 시퀀스에서 제 1 파이프라인과 제 2 파이프라인 양쪽을 통해 라우팅되도록 각기 구성된 코프로세서 명령어들을 실행가능하도록 동작하고, 제 2 복수의 파이프라인단을 갖는 제 2 파이프라인을 구비한 코프로세서; 및
    소정 복수개의 엔트리를 갖는 퍼스트-인-퍼스트-아웃(FIFO) 버퍼를 포함하고, 토큰(token)과 관련된 코프로세서 명령어(coprocessor instruction)를 유일하게 식별하는 한개의 태그(tag)를 포함하는 토큰, 및 코프로세서 명령어를 처리할 때 동기화 큐의 하나의 엔트리(entry) 내에 토큰이 설치될 수 있게 동작하는 파이프라인들 중 일 파이프라인에서의 소정 파이프라인단과, 동기화 큐로부터 상기 토큰의 수신시에 그 코프로세서 명령어를 처리가능하도록 동작하는 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 결합하여(coupling), 상기 소정 파이프라인단과 상기 상대방 파이프라인단 사이에서 파이프라인들간 고정된 타이밍을 가진 신호들의 전송(passing) 없이 상기 제 1 및 제 2 파이프라인을 동기화하는 적어도 한 개의 동기화 큐(300,310,320,330,340,400,410)를 포함하는 것을 특징으로 하는 데이터 처리장치.
  2. 제 1 항에 있어서,
    복수의 상기 동기화 큐를 더 구비하되, 각 상기 동기화 큐는, 상기 파이프라인들 중 일 파이프라인에서의 소정 파이프라인단과 그 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 결합하는 것을 특징으로 하는 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    적어도 한 개의 동기화 큐들 중 하나는 명령어 큐이고, 상기 소정 파이프라인단은 상기 제 1 파이프라인 내에 있고 그 명령어 큐 내에 코프로세서 명령어를 식별하는 토큰이 설치되게 구성되고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에 있고 토큰의 수신시에 그 토큰에 의해 식별된 코프로세서 명령어를 처리하기 시작가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  4. 제 3 항에 있어서,
    상기 소정의 파이프라인단은 제 1 파이프라인에서의 페치단이고, 상기 상대방 파이프라인단은 제 2 파이프라인에서의 디코드단이고, 그 디코드단은 토큰의 수신시에 코프로세서 명령어를 디코딩 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  5. 제 4 항에 있어서,
    상기 제 1 파이프라인에서의 페치단은, 명령어들의 시퀀스에서의 명령어마다 명령어 큐에 토큰이 놓일 수 있도록 동작하고, 상기 제 2 파이프라인에서의 디코드단은 관련된 토큰의 수신시 각 명령어를 디코딩하도록 구성되어 그 명령어가 코프로세서에 의해 더 처리될 필요가 있는 코프로세서 명령어인지를 결정하는 것을 특징으로 하는 데이터 처리장치.
  6. 제 1 항 또는 제 2 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는 취소 큐이고, 상기 소정 파이프라인단은 상기 제 1 파이프라인 내에 있고 상기 소정 파이프라인단에서의 코프로세서 명령어가 취소되어야 하는지를 식별하는 토큰을 그 취소 큐 내에 놓이게 하도록 구성되고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 취소 큐로부터 토큰의 수신시에, 토큰이 코프로세서 명령어가 취소된 것을 식별하는 경우, 그 코프로세서 명령어가 취소될 수 있도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  7. 제 6 항에 있어서,
    상기 소정의 파이프라인단은 상기 제 1 파이프라인에서의 이슈단이고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인에서의 이슈단 다음의 단인 것을 특징으로 하는 데이터 처리장치.
  8. 제 6 항에 있어서,
    상기 상대방 파이프라인단은, 취소 큐로부터 토큰의 수신시, 그 토큰이 코프로세서 명령어가 취소되는 것을 식별하는 경우, 상기 제 2 파이프라인으로부터 코프로세서 명령어를 제거 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  9. 제 1 항 또는 제 2 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는 종료 큐이고, 상기 소정의 파이프라인단은, 상기 제 1 파이프라인 내에 있고, 그 소정의 파이프라인단에서의 코프로세서 명령어가 상기 제 2 파이프라인으로부터 리타이어되게 하기 위한 허락을 식별하는 토큰을 그 종료 큐 내에 놓여지게 구성되며, 상기 상대방 파이프라인단은, 상기 제 2 파이프라인 내에 있고, 상기 종료 큐로부터 토큰의 수신시, 그 코프로세서 명령어가 리타이어되게 허락되는 것을 상기 토큰이 식별하는 경우, 그 코프로세서 명령어가 리타이어될 수 있도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  10. 제 9 항에 있어서,
    상기 소정의 파이프라인단은 상기 제 1 파이프라인에서의 라이트 백단이고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인에서의 라이트 백단인 것을 특징으로 하는 데이터 처리장치.
  11. 제 1 항 또는 제 2 항에 있어서,
    적어도 한 개의 동기화 큐들 중 하나는 길이 큐이고, 상기 소정의 파이프라인단은 상기 제 2 파이프라인 내에 있고 벡터 코프로세서 명령어에 대해, 그 벡터 코프로세서 명령어용 길이 정보를 식별하는 토큰을 상기 길이 큐 내에 놓이도록 구성되고, 상기 상대방 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 길이 큐로부터 토큰의 수신시, 상기 길이 정보를 그 제 1 파이프라인 내의 벡터 코프로세서 명령어의 추가의 처리로 인수분해 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  12. 제 11 항에 있어서,
    상기 소정의 파이프라인단은 상기 제 2 파이프라인 내에서 디코드단이고, 상기 상대방 파이프라인단은 상기 제 1 파이프라인 내에서의 제 1 실행단인 것을 특징으로 하는 데이터 처리장치.
  13. 제 1 항 또는 제 2 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 억셉트 큐이고, 상기 소정의 파이프라인단은, 상기 제 2 파이프라인 내에 있고, 그 소정의 파이프라인단에서의 코프로세서 명령어가 코프로세서에 의한 실행을 위해 억셉트될 것인지를 식별하는 토큰을 상기 억셉트 큐 내에 놓이도록 구성되고, 상기 상대방 파이프라인단은, 상기 제 1 파이프라인 내에 있고, 상기 억셉트 큐로부터 토큰의 수신시, 그 코프로세서 명령어가 억셉트되지 않은 것을 토큰이 식별하는 경우, 메인 프로세서가 그 코프로세서 명령어를 거절 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  14. 제 13 항에 있어서,
    상기 소정의 파이프라인단은 상기 제 2 파이프라인 내의 이슈단이고, 상기 상대방 파이프라인단은 상기 제 1 파이프라인 내의 제 2 실행단인 것을 특징으로 하는 데이터 처리장치.
  15. 제 13 항에 있어서,
    상기 상대방 파이프라인단은, 상기 억셉트 큐로부터 토큰의 수신시, 코프로세서 명령어가 억셉트되지 않는 것을 토큰이 식별하는 경우, 상기 제 1 파이프라인으로부터 코프로세서 명령어를 제거 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  16. 제 1 항 또는 제 2 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 데이터 항목을 코프로세서로부터 메인 프로세서에 의해 액세스가능한 메모리로 전송할 수 있도록 동작하는 저장 명령어일 때 사용된 저장 큐이고, 상기 소정의 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 저장 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 저장 큐 내에 놓이게 하도록 구성되고, 상기 상대방 파이프라인단은, 제 1 파이프라인 내에 있고, 상기 저장 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 메모리에 전송될 수 있도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  17. 제 16 항에 있어서,
    상기 소정의 파이프라인단은 상기 제 2 파이프라인 내의 이슈단이고, 상기 상대방 파이프라인단은 상기 제 1 파이프라인 내의 어드레스 생성단인 것을 특징으로 하는 데이터 처리장치.
  18. 제 1 항 또는 제 2 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 메인 프로세서에 의해 액세스 가능한 메모리로부터 코프로세서로 데이터 항목을 전송 가능하도록 동작하는 로드 명령어가 코프로세서 명령어일 때 사용된 로드 큐이고, 상기 소정의 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 로드 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 로드 큐 내에 놓이게 하도록 구성되고, 상기 상대방 파이프라인단은, 상기 제 2 파이프라인 내에 있고, 로드 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 코프로세서에 전송될 수 있도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  19. 제 17 항에 있어서,
    상기 소정의 파이프라인단은 상기 제 1 파이프라인 내에서의 라이트 백단이고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에서의 라이트 백단인 것을 특징으로 하는 데이터 처리장치.
  20. 제 16 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 메인 프로세서에 의해 액세스 가능한 메모리로부터 코프로세서로 데이터 항목을 전송 가능하도록 동작하는 로드 명령어가 코프로세서 명령어일 때 사용된 로드 큐이고, 상기 소정의 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 로드 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 로드 큐 내에 놓이게 하도록 구성되고, 상기 상대방 파이프라인단은, 상기 제 2 파이프라인 내에 있고, 로드 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 코프로세서에 전송될 수 있도록 동작하고,
    상기 로드 명령어와 저장 명령어는 전송되는 다수의 데이터 항목을 정의하는 벡터 코프로세서 명령어들이어도 되고, 상기 장치는, 상기 로드 큐와 저장 큐 중 적어도 한 개와 관련되고, 제어신호를 상기 소정의 파이프라인단에 보내어 상기 소정 파이프라인단에 의해 토큰들의 발행을 정지하고, 관련된 로드 또는 저장 큐가 충만해지는 것을 판단 가능하도록 동작하는 흐름 제어로직을 더 구비한 것을 특징으로 하는 데이터 처리장치.
  21. 제 20 항에 있어서,
    상기 흐름 제어로직은, 상기 상대방 파이프라인단이 데이터 항목을 억셉트할 수 없는 것을 메인 프로세서로부터의 표시를 수신할 때 제어신호를 발행 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  22. 제 21 항에 있어서,
    상기 로드 큐는 이중 버퍼인 것을 특징으로 하는 데이터 처리장치.
  23. 삭제
  24. 제 1 항에 있어서,
    상기 메인 프로세서는, 상기 제 1 및 제 2 파이프라인 모두로부터 코프로세서 명령어들을 플러시하는데 필요한 경우, 플러시 신호를 플러시될 필요가 있는 가장 오래된 명령어에 관련된 태그를 식별하는 코프로세서에게 브로드캐스트 가능하도록 동작하고, 코프로세서는 태그로부터 그 가장 오래된 명령어를 식별하고, 그 가장 오래된 명령어와 코프로세서 내의 임의의 나중의 명령어들을 상기 제 2 파이프라인으로부터 플러시 가능하도록 동작하는 것을 특징으로 하는 데이터 처리장치.
  25. 제 24 항에 있어서,
    상기 적어도 한 개의 동기화 큐들 중 1개 이상은, 태그를, 그 큐 내의 토큰들을 플러시하는 것을 식별하는데 사용하면서, 상기 플러시 신호에 따라 플러시되는 것을 특징으로 하는 데이터 처리장치.
  26. 삭제
  27. 제 1 항 또는 제 2 항에 있어서,
    상기 복수의 코프로세서에는, 메인 프로세서에서의 파이프라인단과 코프로세서들 중 하나에서의 파이프라인단을 결합하는 각 동기화 큐가 구비되어 있는 것을 특징으로 하는 데이터 처리장치.
  28. 제 1 항 또는 제 2 항에 있어서,
    상기 데이터 처리장치는 동기 설계를 가지므로, 토큰들은 상기 소정의 파이프라인단에 의해 그 큐 내에 놓이게 하고, 클록 사이클의 에지를 변경할 때 상기 상대방 파이프라인단에 의해 그 큐로부터 수신되게 하는 것을 특징으로 하는 데이터 처리장치.
  29. 명령어들로 이루어진 시퀀스를 실행 가능하도록 동작하고, 제1의 복수의 파이프라인단을 갖는 제 1 파이프라인을 포함하는 메인 프로세서와, 상기 명령어들로 이루어진 시퀀스 내의 코프로세서 명령어들을 실행 가능하도록 동작하고, 제2의 복수의 파이프라인단을 갖는 제 2 파이프라인을 포함하는 코프로세서를 구비하되, 각 코프로세서 명령어는 상기 제 1 파이프라인과 제 2 파이프라인 모두를 통해 라우팅되도록 구성되는, 데이터 처리장치에서의 파이프라인들간의 동기화 방법에 있어서,
    (a) 소정 복수개의 엔트리들을 가진 퍼스트-인-퍼스트-아웃(FIFO) 버퍼를 포함하고, 파이프라인들 중 하나의 파이프라인에서의 소정의 파이프라인단과 그 파이프라인들 중 다른 파이프라인에서의 상대방 파이프라인단을 동기화 큐(300,310,320,330,340,400,410)를 통해 결합하는(coupling) 단계;
    (b) 상기 소정의 파이프라인단이 코프로세서 명령어를 처리하고 있을 때 동기화 큐의 하나의 엔트리(entry) 내에 토큰을 놓는 단계; 및
    (c) 상기 상대방 파이프라인단에 의해 동기화 큐로부터 토큰의 수신시, 상기 상대방 파이프라인단 내에 코프로세서 명령어(coprocessor instruction) 및 토큰(token)과 관련된 코프로세서 명령어를 유일하게 식별하는 태그(tag)를 포함하는 토큰을 처리하는 단계를 포함하고,
    상기 소정의 파이프라인단과 상기 상대방 파이프라인단 사이에서 파이프라인들간 고정된 타이밍을 가진 신호들의 전송(passing) 없이 상기 제 1 및 제 2 파이프라인의 동기화가 얻어지는 것을 특징으로 하는 동기화 방법.
  30. 제 29 항에 있어서,
    복수의 상기 동기화 큐가 설치되고, 상기 단계 (a) 내지 (c)는 동기화 큐마다 수행되는 것을 특징으로 하는 동기화 방법.
  31. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 하나는 명령어 큐이고, 상기 소정의 파이프라인단은 상기 제 1 파이프라인 내에 있고 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 상기 명령어 큐 내에 코프로세서 명령어를 식별하는 토큰을 놓는 단계와,
    상기 단계(c)에서, 토큰의 수신시, 상기 상대방 파이프라인단 내의 상기 토큰에 의해 식별된 코프로세서 명령어의 처리를 시작하는 단계를 포함하는 것을 특징으로 하는 동기화 방법.
  32. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한개는 취소 큐이고, 상기 소정 파이프라인단은 상기 제 1 파이프라인 내에 있고 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 상기 소정 파이프라인단에서의 코프로세서 명령어가 취소되어야 하는지를 식별하는 토큰을 상기 취소 큐 내에 놓는 단계와,
    상기 단계(c)에서, 상기 상대방 파이프라인단에 의해 상기 취소 큐로부터 토큰의 수신시에, 그 토큰이 코프로세서 명령어가 취소된 것을 식별하는 경우, 그 코프로세서 명령어를 취소되게 하는 단계를 포함한 것을 특징으로 하는 동기화 방법.
  33. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는 종료 큐이고, 상기 소정의 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 상기 소정의 파이프라인단에서의 코프로세서 명령어가 상기 제 2 파이프라인으로부터 리타이어되게 하기 위한 허락을 식별하는 토큰을 상기 종료 큐 내에 놓는 단계와,
    상기 단계(c)에서, 상기 상대방 파이프라인단에 의해 상기 종료 큐로부터 토큰의 수신시, 그 코프로세서 명령어가 리타이어되게 허락되는 것을 상기 토큰이 식별하는 경우, 그 코프로세서 명령어를 리타이어시키는 단계를 포함한 것을 특징으로 하는 동기화 방법.
  34. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 하나는 길이 큐이고, 상기 소정의 파이프라인단은 상기 제 2 파이프라인 내에 있고 상기 상대방 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 벡터 코프로세서 명령어에 대해, 그 벡터 코프로세서 명령어용 길이 정보를 식별하는 토큰을 상기 길이 큐 내에 놓는 단계와,
    상기 단계(c)에서, 상기 상대방 파이프라인단에 의해 상기 길이 큐로부터 토큰의 수신시, 상기 길이 정보를 그 제 1 파이프라인 내의 상기 벡터 코프로세서 명령어의 추가의 처리로 인수분해하는 단계를 포함한 것을 특징으로 하는 동기화 방법.
  35. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 억셉트 큐이고, 상기 소정의 파이프라인단은 상기 제 2 파이프라인 내에 있고 상기 상대방 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 상기 소정의 파이프라인단에서의 코프로세서 명령어가 코프로세서에 의한 실행을 위해 억셉트될 것인지를 식별하는 토큰을 상기 억셉트 큐 내에 놓는 단계와,
    상기 단계(c)에서, 상기 상대방 파이프라인단에 의해 상기 억셉트 큐로부터 토큰의 수신시, 그 코프로세서 명령어가 억셉트되지 않은 것을 토큰이 식별하는 경우, 메인 프로세서가 그 코프로세서 명령어를 거절하는 단계를 포함한 것을 특징으로 하는 동기화 방법.
  36. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 데이터 항목을 코프로세서로부터 메인 프로세서에 의해 액세스가능한 메모리로 전송할 수 있도록 동작하는 저장 명령어일 때 사용된 저장 큐이고, 상기 소정의 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 상대방 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 상기 저장 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 저장 큐 내에 놓는 단계와,
    상기 단계(c)에서, 상기 상대방 파이프라인단에 의해 상기 저장 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 메모리에 전송되도록 하는 단계를 포함한 것을 특징으로 하는 동기화 방법.
  37. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 메인 프로세서에 의해 액세스 가능한 메모리로부터 코프로세서로 데이터 항목을 전송 가능하도록 동작하는 로드 명령어가 코프로세서 명령어일 때 사용된 로드 큐이고, 상기 소정의 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 상기 로드 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 로드 큐 내에 놓는 단계와,
    상기 단계(c)에서, 상대방 파이프라인단에 의해 로드 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 코프로세서에 전송되도록 하는 단계를 포함한 것을 특징으로 하는 동기화 방법.
  38. 제 29 항 또는 제 30 항에 있어서,
    적어도 한 개의 동기화 큐들 중 한 개는, 메인 프로세서에 의해 액세스 가능한 메모리로부터 코프로세서로 데이터 항목을 전송 가능하도록 동작하는 로드 명령어가 코프로세서 명령어일 때 사용된 로드 큐이고, 상기 소정의 파이프라인단은 상기 제 1 파이프라인 내에 있고, 상기 상대방 파이프라인단은 상기 제 2 파이프라인 내에 있고, 상기 방법은,
    상기 단계(b)에서, 상기 로드 명령어들 중 하나를 처리할 때, 전송되는 각 데이터 항목을 식별하는 토큰을 상기 로드 큐 내에 놓는 단계와,
    상기 단계(c)에서, 상기 상대방 파이프라인단에 의해 상기 로드 큐로부터 각 토큰의 수신시, 대응한 데이터 항목을 코프로세서에 전송되도록 하는 단계를 포함하고,
    상기 로드 명령어와 저장 명령어는 전송되는 다수의 데이터 항목을 정의하는 벡터 코프로세서 명령어들이어도 되고, 상기 방법은,
    (d) 상기 로드 큐와 저장 큐 중 적어도 한 개에 대해, 제어신호를 상기 소정의 파이프라인단에 보내어 상기 소정 파이프라인단에 의해 토큰들의 발행을 정지시키고, 관련된 로드 또는 저장 큐가 충만해지는 것을 판단하는 단계를 더 포함한 것을 특징으로 하는 동기화 방법.
  39. 제 38 항에 있어서,
    상기 단계(d)는 저장 큐에 대해 수행되고, 상기 단계(d)에서, 상기 방법은, 상기 상대방 파이프라인단이 데이터 항목을 억셉트할 수 없는 것을 메인 프로세서로부터의 표시를 수신할 때 제어신호를 발행하는 단계를 포함한 것을 특징으로 하는 동기화 방법.
  40. 삭제
  41. 제 29 항에 있어서,
    상기 제 1 및 제 2 파이프라인 모두로부터 코프로세서 명령어들을 플러시하는데 필요한 경우, 상기 방법은,
    메인 프로세서로부터 코프로세서에게 플러시될 필요가 있는 가장 오래된 명령어에 관련된 태그를 식별하는 플러시 신호를 브로드캐스트 하는 단계와,
    상기 코프로세서 내에서, 태그로부터 그 가장 오래된 명령어를 식별하고, 그 가장 오래된 명령어와 상기 코프로세서 내의 임의의 나중의 명령어들을 제 2 파이프라인으로부터 플러시하는 단계를 더 포함한 것을 특징으로 하는 동기화 방법.
  42. 제 41 항에 있어서,
    상기 적어도 한 개의 동기화 큐들 중 1개 이상을, 그 큐 내의 토큰들을 플러시하는 것을 식별하는데 태그를 사용하면서, 상기 플러시 신호에 따라 플러시하는 단계를 더 포함한 것을 특징으로 하는 동기화 방법.
  43. 삭제
  44. 제 29 항 또는 제 30 항에 있어서,
    상기 복수의 코프로세서에는, 메인 프로세서에서의 파이프라인단과 코프로세서들 중 하나에서의 파이프라인단을 결합하는 각 동기화 큐가 구비되어 있는 것을 특징으로 하는 동기화 방법.
  45. 제 29 항 또는 제 30 항에 있어서,
    상기 데이터 처리장치는 동기 설계를 가지므로, 토큰들은, 상기 소정의 파이프라인단에 의해 그 큐 내에 놓이고, 클록 사이클의 에지를 변경할 때 상기 상대방 파이프라인단에 의해 그 큐로부터 수신되는 것을 특징으로 하는 동기화 방법.
KR1020057003803A 2002-09-04 2003-06-04 데이터 처리장치에서의 파이프라인들간의 동기화 KR100983786B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0220559A GB2392742B (en) 2002-09-04 2002-09-04 Synchronisation between pipelines in a data processing apparatus
GB0220559.9 2002-09-04

Publications (2)

Publication Number Publication Date
KR20050057199A KR20050057199A (ko) 2005-06-16
KR100983786B1 true KR100983786B1 (ko) 2010-09-28

Family

ID=9943500

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057003803A KR100983786B1 (ko) 2002-09-04 2003-06-04 데이터 처리장치에서의 파이프라인들간의 동기화

Country Status (13)

Country Link
US (1) US7490221B2 (ko)
EP (1) EP1535144B3 (ko)
JP (1) JP3981378B2 (ko)
KR (1) KR100983786B1 (ko)
CN (1) CN100367193C (ko)
AU (1) AU2003241029A1 (ko)
DE (2) DE60306937D1 (ko)
GB (1) GB2392742B (ko)
IL (2) IL165381A0 (ko)
MY (1) MY131233A (ko)
RU (1) RU2005109409A (ko)
TW (1) TWI309019B (ko)
WO (1) WO2004023290A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022125467A1 (en) * 2020-12-13 2022-06-16 Advanced Micro Devices, Inc. Tags for request packets on a network communication link

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7590822B1 (en) * 2004-08-06 2009-09-15 Xilinx, Inc. Tracking an instruction through a processor pipeline
US7346759B1 (en) 2004-08-06 2008-03-18 Xilinx, Inc. Decoder interface
US7546441B1 (en) 2004-08-06 2009-06-09 Xilinx, Inc. Coprocessor interface controller
US7590823B1 (en) * 2004-08-06 2009-09-15 Xilinx, Inc. Method and system for handling an instruction not supported in a coprocessor formed using configurable logic
US7603544B2 (en) * 2004-12-23 2009-10-13 Intel Corporation Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation
US7328331B2 (en) * 2005-01-25 2008-02-05 Hewlett-Packard Development Company, L.P. Method and system of aligning execution point of duplicate copies of a user program by copying memory stores
JP4527571B2 (ja) 2005-03-14 2010-08-18 富士通株式会社 再構成可能演算処理装置
JP3867804B2 (ja) * 2005-03-22 2007-01-17 セイコーエプソン株式会社 集積回路装置
US7493471B2 (en) * 2005-10-31 2009-02-17 Sun Microsystems, Inc. Coprocessor receiving renamed register identifier from master to complete an operation upon register data ready
US7490223B2 (en) * 2005-10-31 2009-02-10 Sun Microsystems, Inc. Dynamic resource allocation among master processors that require service from a coprocessor
US7668186B1 (en) * 2006-03-07 2010-02-23 Xilinx, Inc. Token ecosystem for buffer management
US8145882B1 (en) * 2006-05-25 2012-03-27 Mips Technologies, Inc. Apparatus and method for processing template based user defined instructions
US7647475B2 (en) * 2006-09-06 2010-01-12 Mips Technologies, Inc. System for synchronizing an in-order co-processor with an out-of-order processor using a co-processor interface store data queue
US8032734B2 (en) * 2006-09-06 2011-10-04 Mips Technologies, Inc. Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
US9946547B2 (en) 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US20080082793A1 (en) * 2006-09-29 2008-04-03 Mips Technologies, Inc. Detection and prevention of write-after-write hazards, and applications thereof
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US8407451B2 (en) * 2007-02-06 2013-03-26 International Business Machines Corporation Method and apparatus for enabling resource allocation identification at the instruction level in a processor system
US8006068B1 (en) * 2007-04-18 2011-08-23 Xilinx, Inc. Processor access to data cache with fixed or low variable latency via instructions to an auxiliary processing unit
US7984272B2 (en) * 2007-06-27 2011-07-19 International Business Machines Corporation Design structure for single hot forward interconnect scheme for delayed execution pipelines
US7769987B2 (en) * 2007-06-27 2010-08-03 International Business Machines Corporation Single hot forward interconnect scheme for delayed execution pipelines
JP2009054032A (ja) * 2007-08-28 2009-03-12 Toshiba Corp 並列プロセッサ
US7788470B1 (en) * 2008-03-27 2010-08-31 Xilinx, Inc. Shadow pipeline in an auxiliary processor unit controller
JP5493837B2 (ja) * 2009-12-25 2014-05-14 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置のパイプライン制御方法
US9304774B2 (en) * 2011-02-04 2016-04-05 Qualcomm Incorporated Processor with a coprocessor having early access to not-yet issued instructions
WO2012120573A1 (ja) * 2011-03-04 2012-09-13 日本電気株式会社 デッドロック回避方法、デッドロック回避機構
JP2012252374A (ja) * 2011-05-31 2012-12-20 Renesas Electronics Corp 情報処理装置
KR101849702B1 (ko) * 2011-07-25 2018-04-17 삼성전자주식회사 외부 인트린직 인터페이스
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US9773531B2 (en) * 2012-06-08 2017-09-26 Hewlett Packard Enterprise Development Lp Accessing memory
US9378023B2 (en) 2012-06-13 2016-06-28 International Business Machines Corporation Cross-pipe serialization for multi-pipeline processor
US9582287B2 (en) * 2012-09-27 2017-02-28 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US20140281429A1 (en) * 2013-03-14 2014-09-18 Qualcomm Incorporated Eliminating redundant synchronization barriers in instruction processing circuits, and related processor systems, methods, and computer-readable media
CN103383641A (zh) * 2013-04-19 2013-11-06 中国科学院自动化研究所 一种多流水线同步装置
CN104424129B (zh) * 2013-08-19 2019-07-26 上海芯豪微电子有限公司 基于指令读缓冲的缓存系统和方法
US10318305B2 (en) * 2013-09-06 2019-06-11 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with pepelined arithmetic and logic unit
US9325520B2 (en) * 2013-09-06 2016-04-26 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with scheduled token passing
US11113054B2 (en) 2013-09-10 2021-09-07 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression
EP2940575B1 (en) * 2014-05-02 2018-05-09 Nxp B.V. Controller circuits, data interface blocks, and methods for transferring data
US20150378900A1 (en) * 2014-06-27 2015-12-31 International Business Machines Corporation Co-processor memory accesses in a transactional memory
US11132203B2 (en) * 2014-08-14 2021-09-28 Texas Instruments Incorporated System and method for synchronizing instruction execution between a central processor and a coprocessor
US9870339B2 (en) 2015-06-26 2018-01-16 Intel Corporation Hardware processors and methods for tightly-coupled heterogeneous computing
US10120683B2 (en) * 2016-04-27 2018-11-06 International Business Machines Corporation Supporting even instruction tag (‘ITAG’) requirements in a multi-slice processor using null internal operations (IOPs)
US10599488B2 (en) 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10380058B2 (en) * 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
GB2563384B (en) 2017-06-07 2019-12-25 Advanced Risc Mach Ltd Programmable instruction buffering
US10552162B2 (en) 2018-01-22 2020-02-04 International Business Machines Corporation Variable latency flush filtering
GB2570729B (en) * 2018-02-06 2022-04-06 Xmos Ltd Processing system
CN110896406A (zh) * 2018-09-13 2020-03-20 华为技术有限公司 数据存储方法、装置及服务器
CN111258657B (zh) * 2020-01-23 2020-11-20 上海燧原智能科技有限公司 流水线控制方法及相关设备
US11734017B1 (en) 2020-12-07 2023-08-22 Waymo Llc Methods and systems for processing vehicle sensor data across multiple digital signal processing cores virtually arranged in segments based on a type of sensor
CN112738469A (zh) * 2020-12-25 2021-04-30 浙江合众新能源汽车有限公司 图像处理方法、设备、系统和计算机可读介质
US11962699B2 (en) 2021-02-01 2024-04-16 Protegrity Corporation Parallel tokenization of decimal information in a distributed network environment

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860000A (en) 1996-01-31 1999-01-12 Hitachi Micro Systems, Inc. Floating point unit pipeline synchronized with processor pipeline
US6381692B1 (en) 1997-07-16 2002-04-30 California Institute Of Technology Pipelined asynchronous processing
US6477638B1 (en) 1999-10-01 2002-11-05 Hitachi, Ltd. Synchronized instruction advancement through CPU and FPU pipelines

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2564805B2 (ja) * 1985-08-08 1996-12-18 日本電気株式会社 情報処理装置
US5241635A (en) * 1988-11-18 1993-08-31 Massachusetts Institute Of Technology Tagged token data processing system with operand matching in activation frames
US5197140A (en) * 1989-11-17 1993-03-23 Texas Instruments Incorporated Sliced addressing multi-processor and method of operation
US5430850A (en) * 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US6112017A (en) * 1992-06-30 2000-08-29 Discovision Associates Pipeline processing machine having a plurality of reconfigurable processing stages interconnected by a two-wire interface bus
US6240508B1 (en) * 1992-07-06 2001-05-29 Compaq Computer Corporation Decode and execution synchronized pipeline processing using decode generated memory read queue with stop entry to allow execution generated memory read
US5572704A (en) * 1993-12-15 1996-11-05 Silicon Graphics, Inc. System and method for controlling split-level caches in a multi-processor system including data loss and deadlock prevention schemes
US6061749A (en) * 1997-04-30 2000-05-09 Canon Kabushiki Kaisha Transformation of a first dataword received from a FIFO into an input register and subsequent dataword from the FIFO into a normalized output dataword

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860000A (en) 1996-01-31 1999-01-12 Hitachi Micro Systems, Inc. Floating point unit pipeline synchronized with processor pipeline
US6381692B1 (en) 1997-07-16 2002-04-30 California Institute Of Technology Pipelined asynchronous processing
US6477638B1 (en) 1999-10-01 2002-11-05 Hitachi, Ltd. Synchronized instruction advancement through CPU and FPU pipelines

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022125467A1 (en) * 2020-12-13 2022-06-16 Advanced Micro Devices, Inc. Tags for request packets on a network communication link

Also Published As

Publication number Publication date
IL165381A0 (en) 2006-01-15
TW200409023A (en) 2004-06-01
TWI309019B (en) 2009-04-21
GB2392742B (en) 2005-10-19
GB2392742A (en) 2004-03-10
EP1535144B3 (en) 2009-02-18
AU2003241029A1 (en) 2004-03-29
CN1678988A (zh) 2005-10-05
WO2004023290A1 (en) 2004-03-18
KR20050057199A (ko) 2005-06-16
MY131233A (en) 2007-07-31
IL165381A (en) 2010-04-15
US7490221B2 (en) 2009-02-10
RU2005109409A (ru) 2005-09-10
JP3981378B2 (ja) 2007-09-26
EP1535144A1 (en) 2005-06-01
GB0220559D0 (en) 2002-10-09
JP2005538439A (ja) 2005-12-15
DE60306937D1 (de) 2006-08-31
DE60306937T2 (de) 2007-02-15
US20040044878A1 (en) 2004-03-04
CN100367193C (zh) 2008-02-06
EP1535144B1 (en) 2006-07-19
DE60306937T4 (de) 2009-03-05

Similar Documents

Publication Publication Date Title
KR100983786B1 (ko) 데이터 처리장치에서의 파이프라인들간의 동기화
US5790822A (en) Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
US6035389A (en) Scheduling instructions with different latencies
US5958041A (en) Latency prediction in a pipelined microarchitecture
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
US20080177981A1 (en) Apparatus and method for decreasing the latency between instruction cache and a pipeline processor
JP2000029699A (ja) プロセサア―キテクチャ
JP5209933B2 (ja) データ処理装置
JPH0115093B2 (ko)
KR19990066800A (ko) 프로세싱 시스템에서 복수의 저장 인스트럭션 완료를 처리하는방법 및 시스템
EP0753810B1 (en) Computer instruction execution method and apparatus
JP3779012B2 (ja) 分岐による中断のないパイプライン化されたマイクロプロセッサ及びその動作方法
US6385719B1 (en) Method and apparatus for synchronizing parallel pipelines in a superscalar microprocessor
US20100031011A1 (en) Method and apparatus for optimized method of bht banking and multiple updates
JP2004038255A (ja) 命令制御方法及びプロセッサ
US5889975A (en) Method and apparatus permitting the use of a pipe stage having an unknown depth with a single microprocessor core
JPH1196005A (ja) 並列処理装置
US7143247B1 (en) Method and apparatus for parallel execution pipeline data storage in a computer memory
JP5093237B2 (ja) 命令処理装置
JP2001166934A (ja) 命令フェッチ制御装置
JP2814683B2 (ja) 命令処理装置
US6754814B1 (en) Instruction processing apparatus using a microprogram that implements a re-reading operation by controlling early loading of instructions
JP2812615B2 (ja) 命令バッファ回路制御方式
JP2000099328A (ja) プロセッサ及びその実行制御方法
US20030046523A1 (en) Program loading mechanism through a single input data path

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: 20130820

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140825

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150819

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160818

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170818

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180816

Year of fee payment: 9