KR20050019846A - 프로세서 동작을 방해하지 않으면서 프로세서 상태를결정하는 방법 및 장치 - Google Patents

프로세서 동작을 방해하지 않으면서 프로세서 상태를결정하는 방법 및 장치 Download PDF

Info

Publication number
KR20050019846A
KR20050019846A KR10-2005-7000565A KR20057000565A KR20050019846A KR 20050019846 A KR20050019846 A KR 20050019846A KR 20057000565 A KR20057000565 A KR 20057000565A KR 20050019846 A KR20050019846 A KR 20050019846A
Authority
KR
South Korea
Prior art keywords
processor
host processor
register
data
valid bit
Prior art date
Application number
KR10-2005-7000565A
Other languages
English (en)
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 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority to KR10-2005-7000565A priority Critical patent/KR20050019846A/ko
Publication of KR20050019846A publication Critical patent/KR20050019846A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

호스트 프로세서의 내부 상태를 결정하는 벙법 및 장치가 제공된다. 테스트 데이터는 서비스 프로세서(140)의 출력 포트(152)안으로 로드될 수 있다. 상기 서비스 프로세서(140)는 상기 호스트 프로세서(10)에 저장된 유효 비트를 폴링할 수 있다. 상기 유효 비트가 클리어 된 것을 결정시에, 상기 서비스 프로세서(140)는 상기 테스트 데이터를 상기 호스트 프로세서에 전송하고, 상기 유효 비트를 설정할 수 있다. 상태 데이터는 상기 테스트 데이터에 응답하여 발생될 수 있다. 상기 상태 데이터는 상기 호스트 프로세서(10)의 출력 포트(104) 안에 기입될 수 있다. 상기 서비스 프로세서(140)는 상기 호스트 프로세서(10)의 출력 포트(104)로부터 상기 데이터를 수신할 수 있다. 상기 호스트 프로세서(10)의 상태 결정 동작은 상기 호스트 프로세서(10)에서 명령들의 실행을 방해하지 않으면서 수행된다.

Description

프로세서 동작을 방해하지 않으면서 프로세서 상태를 결정하는 방법 및 장치{METHOD AND APPARATUS FOR DETERMINING A PROCESSOR STATE WITHOUT INTERRUPTING PROCESSOR OPERATION}
본 발명은 프로세서에 관한 것으로, 보다 구체적으로는 프로세서의 상태를 결정하는 방법 및 장치에 관한 것이다.
신규 컴퓨터 시스템 및 시스템 소프트웨어의 설계 동안, 다양한 하드웨어 메카니즘들이 시스템 프로세서에 의한 명령들의 실행동안 어떻게 작용할지를 결정하는데 다양한 기술들이 사용될 수 있다. 시스템 하드웨어의 동작을 결정하는 한 양상은 프로그램 실행의 다양한 단계들에서 프로세서 상태를 결정하는 것을 포함한다. 상기 프로세서 상태의 결정은 프로세서에 데이터를 전송함으로써 상기 프로세서에 질의(query)하는 것을 포함할 수 있다. 상기 프로세서에 의하여 수신된 데이터가 작용되어 프로세서 상태를 표시하는 추가적인 데이터를 생성한다. 그러한 데이터는 레지스터들의 컨텐츠, 예약 스테이션(reservation station) 등을 포함할 수 있다. 상기 추가적인 데이터는 그 후 검토를 위하여 상기 프로세서로부터 전송될 수 있다. 대안적으로, 프로세서는 외부 소스에 데이터를 주기적으로 전송하도록 구성될 수 있고, 여기서 상기 데이터는 프로세서 상태 또는 다른 정보를 결정하는데 사용될 수 있다.
프로세서 상태를 결정하기 위하여 프로세서에 질의하는 다양한 툴들이 개발되고 있다. 이러한 툴들은 테스트 데이터가 상기 프로세서에 입력될 수 있도록, 상기 테스트 데이터를 수신하는 프로세서에 응답하여 상태 데이터가 발생되도록, 그리고 검토를 위하여 상기 상태 데이터가 프로세서로부터 전송되도록할 수 있다. 그러한 툴들에 대한 한 단점은 상기 프로세서 질의 동안 명령들의 실행을 포함한다. 전형적으로, 그러한 툴들은 상기 프로세서 질의 동안 상기 프로세서의 동작이 해석될 것을 요구한다. 프로세서에 의하여 실행되는 명령 스트림은 상기 테스트 데이터를 입력하고, 상기 상태 데이터를 발생하고, 그리고 상기 상태 데이터를 출력하기 위하여 해석될 필요는 없다. 테스트 데이터를 입력하고 상태 데이터를 출력하는 것은 기존 프로세서 입력 및 출력 포트들의 사용을 요구할 수 있고, 이에 의하여 상기 프로세서로/로부터의 다른 데이터의 입력 및 출력을 해석한다. 또한, 테스트 데이터의 입력은 상기 프로세서의 대체 서비스 루틴(alternate service routine)으로의 전환을 야기하는 바, 이는 현재 실행하는 명령 스트림의 중지를 초래한다. 또한, 대체 서비스 루틴으로의 전환은 상기 프로세서 질의로부터의 실제 프로세서 상태를 결정할 수 없게 한다.
본 발명의 다른 양상들은 첨부된 도면들을 참조하여 하기의 상세한 설명을 정독함으로써 명백해질 것이다.
도 1은 프로세서의 일 실시예의 블럭도이다.
도 2는 프로세서의 상태를 결정하기 위한 시스템의 일 실시예의 블럭도이다.
도 3은 서비스 프로세서 출력 포트에 연결된 호스트 프로세서 입력 포트의 일 실시예를 예시하는 블럭도이다.
도 4는 서비스 프로세서 입력 포트에 연결된 호스트 프로세서 출력 포트의 일 실시예의 블럭도이다.
도 5A는 호스트 프로세서 질의 방법의 일 실시예의 흐름도이다.
도 5B는 호스트 프로세서로부터 상태 데이터를 출력하는 방법의 일 실시예의 흐름도이다.
호스트 프로세서의 상태를 결정하는 방법 및 장치가 개시된다. 일 실시예에서, 서비스 프로세서는 상기 호스트 프로세서내의 수신기의 레지스터에 저장된 유효한 비트를 폴링(polling)할 수 있다. 상기 유효한 비트가 클리어(clear)됐는지를 결정할 시, 서비스 프로세서는 테스트 데이터를 출력 레지스터에 로드하고, 테스트 데이터를 호스트 프로세서에 전송할 수 있으며, 상기 전송 완료시 상기 유효한 비트를 설정(set)한다. 상기 테스트 데이터는 상기 유효한 비트가 설정된 것을 결정하는 호스트 프로세서에 응답하여 상기 수신기의 레지스터로부터 검색될 수 있다. 상기 호스트 프로세서의 상태를 표시하는 상태 데이터는 상기 테스트 데이터에 응답하여 발생될 수 있다. 상기 호스트 프로세서는 그 출력 포트 내의 전송기의 레지스터의 유효한 비트를 폴링할 수 있고, 상기 유효한 비트가 클리어되는지를 검출하는 것에 응답하여 상기 전송기의 레지스터 안으로 데이터를 디포지트(deposit)할 수 있다. 그 후 상기 데이터는 상기 서비스 프로세서의 수신기에 전송될 수 있고, 상기 유효한 비트는 상기 전송에 응답하여 설정될 수 있다. 데이터를 상기 호스트 프로세서에 전송하고, 상기 호스트 프로세서로부터 데이터를 검색하는 동작들은 명령들의 실행을 방해하지 않으면서 수행될 수 있다. 또한, 상기 호스트 프로세서에 의한 데이터의 전송 및 수신은 서로 간에 독립적으로 발생될 수 있다.
일 실시예에서, 상기 호스트 프로세서는 입력 포트 및 출력 포트를 포함한다. 상기 호스트 프로세서의 입력 포트는 상기 서비스 프로세서의 출력 포트에 연결되도록 구성될 수 있고, 상기 출력 포트는 상기 서비스 프로세서의 입력 포트에 연결되도록 구성될 수 있다. 상기 호스트 프로세서와 서비스 프로세서 모두의 상기 입력 포트 및 출력 포트들은 각기 다수의 비트들을 저장하도록 구성된 레지스터를 포함할 수 있다. 각 레지스터는 설정시 저장된 데이터가 유효한지를 표시할 수 있는 유효 비트를 저장하도록 구성될 수 있다. 상기 입력 포트들 내의 레지스터들은 유효 비트가 클리어되는 경우 데이터를 단지 수신할 수 있도록 구성될 수 있다. 데이터가 출력 포트로부터 입력 포트로 전송되는 경우, 상기 유효 비트는 상기 입력 포트의 레지스터 안에 설정될 수 있다. 상기 호스트 프로세서와 상기 서비스 프로세서 모두는 상기 유효 비트가 설정되었음을 검출 함에 응답하여 그들의 개별적인 입력 포트들의 레지스터로부터 검색될 수 있도록 구성될 수 있다.
상기 서비스 프로세서의 일 실시예에서, 데이터는 상기 출력 포트의 레지스터 안으로 로드될 수 있거나 IEEE 1149.1 표준서를 따르는 바운더리 스캔 테스트 액세스 포트(TAP: test access port)를 통하여 상기 입력 포트로부터 검색될 수 있다. 데이터는 테스트 데이터 입력(TDI: test data in) 핀을 통하여 상기 서비스 프로세서 출력 포트의 레지스터안으로 연속적으로 로드될 수 있다. 유사하게, 데이터는 테스트 데이터 출력(TDO: test data out) 핀을 통하여 상기 서비스 프로세서 입력 포트내의 레지스터로부터 연속적으로 쉬프트 아웃될 수 있다.
다양한 실시예들에서, 입력 포트들 및 출력 포트들의 조합 동작들은 서로 간에 독립적으로 동작할 수 있다. 달리 말해서, 상기 서비스 프로세서의 출력 포트는, 상기 호스트 프로세서의 출력 포트로부터 상기 서비스 프로세서의 출력 포트로의 데이터 전송에 독립적으로, 데이터를 호스트 프로세서의 입력 포트로 전송할 수 있다. 또한, 다양한 실시예들에서, 데이터는 상기 프로세서로/로부터 규칙적인 간격들로 전송될 수 있거나, 또는 데이터는 개별적인 질의에 응답하여 상기 프로세서로부터 전송될 수 있다.
본 발명은 비록 다양한 수정과 대안적인 형태들이 가능하지만, 본 명세서에서는 발명의 특정한 실시예를 예로써 도면에 도시하였으며, 이에 대해 자세히 설명될 것이다. 그러나 도면 및 이에 대한 상세한 설명은 본 발명을 개시된 특정 예로만 제한하도록 의도된 것은 아니며, 오히려 첨부된 청구항에 의해 정의되는 것처럼 본 발명의 정신 및 범위 내에 드는 모든 변형, 균등물 및 대안들을 포괄하도록 의도된 것이다.
도 1에서, 프로세서(10)의 일 실시예의 블럭도가 도시된다. 다른 실시예들이 가능하고 또한 고려된다. 도 1에 도시된 바와 같이, 프로세서(10)는 프리페치/프리디코드 유닛(12), 분기 예측 유닛(14), 명령 캐시(16), 명령 정렬 유닛(18), 다수의 디코드 유닛들(20A-20C), 다수의 예약 스테이션들(22A-22C), 다수의 기능 유닛들(24A-24C), 로드/저장 유닛(26), 데이터 캐시(28), 레지스터 파일(30), 재배열 버퍼(32), MROM 유닛(34), 및 버스 인터페이스 유닛(37)을 포함한다. 본 장에서 문자 뒤에 붙은 특정한 참조 번호로 언급된 요소들은 그 참조 번호만으로 집합적으로 언급될 수 있다. 예를 들어, 디코드 유닛들(20A-20C)은 디코드 유닛들(20)로서 집합적으로 언급된다.
프리페치/프리디코드 유닛(12)은 버스 인터페이스 유닛(37)으로부터 명령들을 수신하고, 명령 캐시(16) 및 분기 예측 유닛(14)에 또한 연결된다. 유사하게, 분기 예측 유닛(14)은 명령 캐시(16)에 연결된다. 또한, 분기 예측 유닛(14)은 디코드 유닛들(20) 및 기능 유닛들(24)에 연결된다. 명령 캐시(16)는 또한 MROM 유닛(34) 및 명령 정렬 유닛(18)에 연결된다. 다음으로 명령 정렬 유닛(18)은 디코드 유닛들(20)에 연결된다. 각 디코드 유닛(20A-20C)은 로드/저장 유닛(26)에 연결되고, 개별적인 예약 스테이션들(22A-22C)에 연결된다. 예약 스테이션들(22A-22C)은 또한 개별적인 기능 유닛들(24A-24C)에 연결된다. 또한, 디코드 유닛들(20) 및 예약 스테이션들(22)은 레지스터 파일(30) 및 재배열 버퍼(32)에 연결된다. 기능 유닛들(24)은 로드/저장 유닛(26), 레지스터 파일(30) 및 재배열 버퍼(32)에 역시 연결된다. 데이터 캐시(28)는 로드/저장 유닛(26)에 연결되고, 버스 인터페이스 유닛(37)에 연결된다. 버스 인터페이스 유닛(37)은 또한 L2 캐시에 대한 L2 인터페이스 및 버스에 연결된다. 마지막으로, MROM 유닛(34)은 디코드 유닛들(20)에 연결된다.
명령 캐시(16)는 명령들을 저장하도록 제공된 고속 캐시 메모리이다. 명령들은 명령 캐시(16)로부터 페치되어 디코드 유닛들(20)로 디스패치된다. 일 실시예에서, 명령 캐시(16)는 64 바이트 라인들(바이트는 8 바이너리 비트들을 포함한다)을 구비한 2 웨이 세트 연관(2 way set associative) 구조에서 최대 64 킬로바이트의 명령을 저장하도록 구성된다. 대안적으로, 임의의 다른 원하는 구성 및 사이즈가 사용될 수 있다. 예를 들어, 명령 캐시(16)는 전체 연관(fully associative), 세트 연관(set associative), 또는 직접 맵핑 구성(direct mapped configuration)으로서 구현될 수 있다는 점이 주목된다.
프리페치/프리디코드 유닛(12)에 의하여 명령들은 명령 캐시(16)안으로 저장된다. 명령들은 프리페치 방식에 따라서 명령 캐시(16)로부터의 명령들의 요청에 앞서서 프리페치될 수 있다. 다양한 프리페치 방식들이 프리페치/프리디코드 유닛(12)에 의하여 사용될 수 있다. 프리페치/프리디코드 유닛(12)은 명령들을 명령 캐시(16)에 전송하고, 프리페치/프리디코드 유닛(12)은 상기 명령에 대응하는 프리디코드 데이터를 발생할 수 있다. 예를 들어, 일 실시예에서, 프리페치/프리디코드 유닛(12)은 명령들의 각 바이트에 대하여 3 개의 프리디코드 비트들, 즉 시작 비트, 종료 비트, 및 기능 비트를 발생한다. 상기 프리디코드 비트들은 각 명령의 바운더리들을 표시하는 태그들을 형성한다. 상기 프리디코드 태그들은 또한 소정 명령이 디코드 유닛들(20)에 의하여 직접 디코드 될 수 있는지 또는 상기 명령이 MROM 유닛(34)에 의하여 제어되는 마이크로코드 절차를 호출함으로써 실행되는지와 같은 추가적인 정보를 전달할 수 있다. 또한, 프리페치/프리디코드 유닛(12)은 분기 명령들을 검출하고, 상기 분기 명령들에 대응하는 분기 예측 정보를 분기 예측 유닛(14) 안에 저장하도록 구성될 수 있다. 다른 실시예들은 원하는 바와 같이, 임의의 적합한 프리디코드 방식을 사용할 수 있거나 또는 어떤 프리디코드도 사용하지 않을 수 있다.
가변 바이트 길이 명령 세트를 사용하는 프로세서(10)의 실시예에 대한 프리디코드 태그들의 엔코딩이 다음에 설명될 것이다. 가변 바이트 길이 명령 세트는 상이한 명령들이 다른 수의 바이트들을 차지하는 명령 세트이다. 프로세서(10)의 일 실시예에 의하여 사용되는 예시적인 가변 바이트 길이 명령 세트는 x86 명령 세트이다.
예시적인 엔코딩에서, 소정 바이트가 명령의 처음의 바이트인 경우, 그러한 바이트에 대한 시작 비트가 설정된다. 상기 바이트가 명령의 마지막 바이트인 경우, 그러한 바이트의 종료 비트가 설정된다. 디코드 유닛들(20)에 의하여 직접 디코드될 수 있는 명령들은 "빠른 경로(fast path)" 명령들로서 언급된다. 일 실시예에 따르면, 나머지 x86 명령들은 MROM 명령들로 언급된다. 빠른 경로 명령들에 대하여, 기능 비트는 상기 명령에 포함되는 각 프리픽스 바이트에 대하여 설정되고, 다른 바이트들에 대해서는 클리어된다. 대안적으로, MROM 명령들에 대하여, 상기 기능 비트는 각 프리픽스 바이트에 대하여 클리어되고, 다른 바이트들에 대하여 설정된다. 명령의 타입은 상기 종료 바이트에 대응하는 기능 비트를 검토함으로써 결정될 수 있다. 상기 기능 비트가 클리어되면, 상기 명령은 빠른 경로 명령이다. 반면에, 상기 기능 비트가 설정되면, 상기 명령은 MROM 명령이다. 따라서, 명령의 op코드는 명령 내의 먼저 클리어된 기능 비트에 관련된 바이트로서 디코드 유닛(20)에 의하여 직접 디코드될 수 있는 명령 내에 위치될 수 있다. 예를 들어, 2 프리픽스 바이트들, Mod R/M 바이트, 및 즉시 바이트를 포함하는 빠른 경로 명령은 하기와 같은 시작, 종료 및 기능 비트들을 갖게 된다.
시작 비트들 10000
종료 비트들 00001
기능 비트들 11000
MROM 명령들은 디코드 유닛들(20)에 의하여 디코드 되기에 매우 복잡한 것으로 결정된 명령들이다. MROM 명령들은 MROM 유닛(34)을 호출함으로써 실행된다. 보다 구체적으로, MROM 명령이 조우(encounter)되는 경우, 원하는 동작을 유효하게 하기 위하여 MROM 유닛(34)은 상기 명령을 정의된 빠른 경로 명령들의 세트로 구문분석(parse) 및 발행(issue)한다. MROM 유닛(34)은 빠른 경로 명령들의 서브세트를 디코드 유닛들(20)에 디스패치한다.
프로세서(10)는 조건적인 분기 명령들에 후속하는 명령들을 추론적으로 페치하기 위하여, 분기 예측을 사용한다. 분기 예측 유닛(14)은 분기 예측 동작들을 수행하기 위하여 포함된다. 일 실시예에서, 분기 예측 유닛(14)은 최고 2개의 분기 타겟 어드레스들을 캐시하는 분기 타겟 버퍼 및, 명령 캐시(16) 내의 캐시 라인의 16 바이트 부분당 대응 테이큰(taken)/낫테이큰(not taken) 예측들을 사용한다. 상기 분기 타겟 버퍼는, 예를 들어 2048 엔트리들 또는 다른 적합한 수의 엔트리들을 포함할 수 있다. 프리페치/프리디코드 유닛(12)은 특정한 라인이 프리디코드 되는 경우 초기 분기 타겟들을 결정한다. 캐시 라인에 대응하는 분기 타겟들로의 후속적인 갱신들은 상기 캐시 라인들 내의 명령들의 실행 때문에 발생할 수 있다. 명령 캐시(16)는 페치되는 명령 어드레스의 표시를 제공하고, 이에 의하여 분기 예측 유닛(14)은 분기 예측을 형성하기 위하여 어떤 분기 타겟 어드레스들을 선택할지를 결정할 수 있다. 디코드 유닛들(20) 및 기능 유닛들(24)은 분기 예측 유닛(14)에 갱신 정보를 제공한다. 디코드 유닛들(20)은 분기 예측 유닛(14)에 의하여 예측되지 않은 분기 명령들을 검출한다. 기능 유닛들(24)은 분기 명령들을 실행하고 상기 예측된 분기 방향이 정확하지 않은지 여부를 결정한다. 상기 분기 방향은 "테이큰"될 수 있고, 여기서 후속적인 명령들이 상기 분기 명령의 타겟 어드레스로부터 페치된다. 반면에, 상기 분기 방향은 "낫테이큰(not taken)"될 수 있고, 이경우 후속적인 명령들은 상기 분기 명령에 연속하여 메모리 위치들로부터 페치된다. 오예측된 분기 명령이 검출된 경우, 상기 오예측된 분기에 후속적인 명령들이 프로세서(10)의 다양한 유닛들로부터 폐기(discard)된다. 대안적인 구성에서, 분기 예측 유닛(14)은 디코드 유닛들(20) 및 기능 유닛들(24) 대신에 재배열 버퍼(32)에 연결될 수 있고, 재배열 버퍼(32)로부터 분기 오예측 정보를 수신할 수 있다. 다양한 적합한 분기 예측 알고리즘들이 분기 예측 유닛(14)에 의하여 사용될 수 있다.
명령 캐시(16)로부터 페치된 명령들은 명령 정렬 유닛(18)에 전달된다. 명령들이 명령 캐시(16)로부터 페치되는 경우, 대응하는 프리디코드 데이터는 스캔되어 페치되는 명령들에 관한 정보를 명령 정렬 유닛(18)(및 MROM 유닛(34))에 제공한다. 명령 정렬 유닛(18)은 디코드 유닛들(20) 각각에 명령을 정렬하기 위하여 스캐닝 데이터를 사용한다. 일 실시예에서, 명령 정렬 유닛(18)은 3 세트의 8 명령 바이트들로부터의 명령들을 디코드 유닛(20)에 정렬한다. 디코드 유닛(20A)은 (프로그램 순서에서) 디코드 유닛들(20B 및 20C)에 의하여 동시에 수신되는 명령들에 앞서는 명령을 수신한다. 유사하게, 디코드 유닛(20B)은 프로그램 순서에서 디코드 유닛(20C)에 의하여 동시에 수신되는 명령에 앞서는 명령을 수신한다. 임의의 실시예들(예를 들어, 고정된 길이 명령 세트들을 사용하는 실시예들)에서, 상기 명령 정렬 유닛(18)은 제거될 수 있다.
디코드 유닛들(20)은 명령 정렬 유닛(18)으로부터 수신된 명령들을 디코드하도록 구성된다. 레지스터 오퍼랜드 정보가 검출되어 레지스터 파일(30) 및 재배열 버퍼(32)에 라우팅된다. 또한, 상기 명령들이 수행할 하나 이상의 메모리 동작들을 요구하는 경우, 디코드 유닛들(20)은 메모리 동작들을 로드/저장 유닛(26)에 디스패치한다. 각 명령은 기능 유닛들(24)에 대한 일련의 제어 값들로 디코드되고, 이러한 제어 값들은 오퍼랜드 어드레스 정보 및 상기 명령에 포함될 수 있는 변위 또는 즉시 데이터와 함께 예약 스테이션들(22)에 디스패치된다. 특정한 일 실시예에서, 각 명령은 기능 유닛들(24A-24C)에 의하여 개별적으로 실행될 수 있는 최고 2개의 동작들로 디코드된다.
프로세서(10)는 순서에서 벗어난 실행을 지원하고, 따라서 재배열 버퍼(32)를 사용하여, 레지스터 판독 및 기입 동작들에 대한 본래 프로그램 순서의 트랙을 유지하고, 레지스터 재명명(renaming)을 구현하고, 추론적 명령 실행 및 분기 오예측 복구를 허용하고, 그리고 정확한 예외들을 용이하게 한다. 재배열 버퍼(32) 내의 일시 저장 위치는 레지스터의 갱신을 포함하는 명령의 디코드 하에서 예약되어, 이에 의하여 추론적 레지스터 상태들을 저장한다. 분기 예측이 부정확한 경우, 상기 오예측된 경로를 따라서 추론적으로 실행된 명령들은 레지스터 파일(30)에 기입되기 전에 상기 버퍼에서 무효화될 수 있다. 유사하게, 특정한 명령이 예외를 야기하는 경우, 상기 특정한 명령에 후속하는 명령들은 폐기될 수 있다. 이러한 방식에서, 예외들은 "정확(precise)"하다(즉, 상기 예외들을 야기하는 특정한 명령에 후속하는 명령들은 상기 예외에 앞서 완료되지 않는다). 특정한 명령이 프로그램 순서에서 그에 선행하는 명령들보다 먼저 실행되는 경우, 상기 특정한 명령은 추론적으로 실행된다는 점이 주목된다. 선행하는 명령들은 분기 명령 또는 예외-야기 명령일 수 있고, 이러한 경우에서, 상기 추론적 결과들은 재배열 버퍼(32)에 의하여 폐기될 수 있다.
디코드 유닛들(20)의 출력부들에 제공되는 디코드된 명령들은 개별적인 예약 스테이션들(22)에 직접 라우팅된다. 일 실시예에서, 각 예약 스테이션(22)은 대응하는 기능 유닛에 발행되기를 기다리는 최고 6개의 계류중인 명령들에 대한 명령 정보(예를 들어, 디코드된 명령들은 물론 오퍼랜드 태그들 및/또는 즉시 데이터)를 유지할 수 있다. 도 1의 실시예에 대하여, 각 예약 스테이션들(22)은 전용 기능 유닛(24)과 관련된다는 점이 주목된다. 따라서, 3개의 전용 "발행 위치들"이 예약 스테이션들(22) 및 기능 유닛들(24)에 의하여 형성된다. 달리 말해서, 발행 위치(0)는 예약 스테이션(22A) 및 기능 유닛(24A)에 의하여 형성된다. 예약 스테이션(22A)에 정렬 및 디스패치된 명령들은 기능 유닛(24A)에 의하여 실행된다. 유사하게, 발행 위치(1)는 예약 스테이션(22B) 및 기능 유닛(24B)에 의하여 형성되고 그리고 발행 위치(2)는 예약 스테이션(22C) 및 기능 유닛(24C)에 의하여 형성된다.
특정한 명령의 디코드 시, 만일 요구된 오퍼랜드가 레지스터 위치인 경우, 레지스터 어드레스 정보가 재배열 버퍼(32) 및 레지스터 파일(30)에 동시에 라우팅된다. 상기 레지스터 파일(30)은 프로세서(10)에 의하여 구현되는 명령 세트에 포함된 아키텍쳐된 레지스터들 각각에 대한 저장 위치들을 포함한다. 추가적인 저장 위치들은 MROM 유닛(34)에 의하여 사용하기 위하여 레지스터 파일(30)내에 포함될 수 있다. 재배열 버퍼(32)는 레지스터들의 컨텐츠를 변화시키는 결과들에 대한 일시 저장 위치들을 포함하고, 이에 의하여 순서에 벗어난 실행을 허용한다. 디코드 시 실제 레지스터들 중 하나의 레지스터의 컨텐츠들을 변경하기 위해 결정되는 각 명령에 대하여 재배열 버퍼(32)의 일시 저장 위치가 예약된다. 그러므로, 특정 프로그램의 실행 동안, 다양한 포인트들에서, 재배열 버퍼(32)는 소정 레지스터의 추론적으로 실행된 컨텐츠를 포함하는 하나 이상의 위치들을 가질 수 있다. 소정 명령의 디코드 후 재배열 버퍼(32)가 상기 소정 명령에서 오퍼랜드로서 사용되는 레지스터에 할당된 이전 위치 또는 위치들을 가지는 것으로 결정되는 경우, 상기 재배열 버퍼(32)는 1) 가장 최근에 할당된 위치내의 값, 또는 2) 상기 값이 결과적으로 이전 명령을 실행할 기능 유닛에 의하여 아직 생성되지 않는 경우 가장 최근에 할당된 위치에 대한 태그를 대응 예약 스테이션에 전송한다. 재배열 버퍼(32)가 소정 레지스터에 대하여 예약된 위치를 가지는 경우, 상기 오퍼랜드 값(또는 재배열 버퍼 태그)은 레지스터 파일(30) 보다는 재배열 버퍼(32)로부터 제공된다. 재배열 버퍼(32)에서의 요구된 레지스터에 대하여 예약된 위치가 존재하지 않는 경우, 상기 값은 레지스터 파일(30)로부터 직접 테이큰된다. 상기 오퍼랜드가 메모리 위치에 대응하는 경우, 상기 오퍼랜드 값은 로드/저장 유닛(26)을 통하여 상기 예약 스테이션에 제공된다.
특정한 일 실시예에서, 재배열 버퍼(32)는 동시에 디코드되는 명령들을 단위로서 저장 및 처리하도록 구성된다. 이러한 구성은 본 장에서 "라인-지향적(line-oriented)" 구성으로 언급될 것이다. 복수의 명령들을 함께 처리함으로써, 재배열 버퍼(32) 내에서 사용되는 하드웨어는 단순화될 수 있다. 예를 들어, 본 실시예에 포함된 라인-지향적 재배열 버퍼는 하나 이상의 명령들이 디코드 유닛들(20)에 의하여 디스패치될 때마다, 3개의 명령들(각 디코드 유닛(20)으로부터 하나씩)에 관련된 명령 정보에 대하여 충분한 저장소를 할당한다. 반면에, 실제로 디스패치되는 명령들의 수에 의존하여, 다양한 양의 저장소들이 기존 재배열 버퍼들에 할당된다. 비교적으로 큰 수의 논리 게이트들이 다양한 양의 저장소를 할당하는데 요구될 수 있다. 동시에 디코드되는 명령들 각각이 실행되는 때, 상기 명령 결과들은 동시에 레지스터 파일(30)안으로 저장된다. 그 후, 상기 저장소는 동시에 디코드되는 명령들의 또다른 세트에 할당을 위하여 비어진다. 또한, 명령 마다 사용되는 제어 논리 회로의 양은 상기 제어 논리가 복수의 동시에 디코드되는 명령들에 대해서 상각(amortize)되기 때문에 감소된다. 특정 명령을 식별하는 재배열 버퍼 태그는 2개의 필드, 즉 라인 태그 및 오프셋 태그로 분할된다. 상기 라인 태그는 특정한 명령을 포함하는 동시에 디코드된 명령들의 세트를 식별하고, 그리고 상기 오프셋 태그는 상기 세트 내의 어떤 명령이 특정한 명령에 대응하는 지를 식별한다. 레지스터 파일(30)안으로 명령 결과들을 저장하고 대응하는 저장소를 비우는 것은 명령들을 "퇴거"하는 것으로 언급된다는 점이 주목된다. 또한 임의의 재배열 버퍼 구성이 프로세서(10)의 다양한 실시예들에서 사용될 수 있다는 점이 주목된다.
전술한 바와 같이, 예약 스테이션들(22)은 명령들이 대응하는 기능 유닛(24)에 의하여 실행될 때까지 상기 명령들을 저장한다. (i) 상기 명령의 오퍼랜드들이 제공되는 경우 및, (ii) 상기 오퍼랜드들이 같은 예약 스테이션들(22A-22C)이내에 있고, 그리고 프로그램 순서에서 상기 명령에 앞서는 명령들에 대하여 상기 오퍼랜드들이 아직 제공되지 않은 경우에, 실행을 위하여 명령이 선택된다. 주목되는 사항으로서, 명령이 상기 기능 유닛들(24) 중 하나에 의하여 실행되는 경우, 그러한 명령의 결과는 예약 스테이션(22)에 직접 전송되면, 이 예약 스테이션(2)은 재배열 버퍼(32)를 갱신하기 위하여 상기 결과를 전송함과 동시에 상기 결과를 기다린다. 이러한 기술은 일반적으로 "결과 전송(result forwarding)"이라고 언급된다. 명령은 실행을 위하여 선택되어 관련된 결과가 전송되는 클록 주기 동안 기능 유닛(24A-24C)에 전달될 수 있다. 이러한 경우에, 예약 스테이션들(22)은 상기 전송된 결과를 상기 기능 유닛(24)에 라우팅한다. 명령들이 기능 유닛들(24)에 의하여 실행될 다중 동작들로 디코드될 수 있는 실시예에서, 상기 동작들은 서로간에 개별적으로 스케줄링될 수 있다.
일 실시예에서, 기능 유닛들(24) 각각은 쉬프트, 회전, 논리 동작들 및 브랜체 동작들 뿐만 아니라 가산 및 감산의 정수 알고리즘 동작들을 수행하도록 구성된다. 상기 동작들은 디코드 유닛들(20)에 의하여 특정 명령에 대하여 디코드된 제어 값들에 응답하여 수행된다. 플로팅 포인트 동작들을 수용하기 위하여 플로팅 포인트 유닛(미도시)이 또한 사용될 수 있다는 점이 주목된다. 상기 플로팅 포인트 유닛은 코프로세서(coprocessor)로서 동작될 수 있고, MROM 유닛(34) 또는 재배열 버퍼(32)로부터 명령들을 수신하고, 이어서 명령들을 완료하기 위하여 재배열 버퍼(32)와 통신한다. 또한, 기능 유닛들(24)은 로드/저장 유닛(26)에 의하여 수행되는 로드 및 저장 메모리 동작들을 위한 어드레스 발생을 수행하도록 구성될 수 있다. 특정한 일 실시예에서, 각 기능 유닛(24)은 어드레스들을 발행하는 어드레스 발생 유닛과 남아있는 기능들을 수행하는 실행 유닛을 포함할 수 있다. 상기 두 유닛들은 한 클록 사이클 동안 상이한 명령들 또는 동작들에 독립적으로 동작할 수 있다.
상기 기능 유닛들(24) 각각은 조건적인 분기 명령들의 실행에 관한 정보를 상기 분기 예측 유닛(14)에 또한 제공한다. 분기 예측이 부정확한 경우, 분기 예측 유닛(14)은 명령 처리 파이프라인에 입력된 오예측된 분기에 후속적인 명령들을 플러시(flush)하고, 명령 캐시(16) 또는 메인 메모리로부터 요구된 명령들의 페치를 야기한다. 그러한 상황에서, 본래 프로그램 순서에서 오예측된 분기 명령 후에 일어나는 명령의 결과들은 폐기되는 바, 여기에는 추론적으로 실행되고 로드/저장 유닛(26) 및 재배열 버퍼(32)에 일시적으로 저장되는 명령들을 포함한다는 점이 주목된다. 또한 분기 실행 결과들은 기능 유닛들(24)에 의하여 재배열 버퍼(32)에 제공될 수 있다는 점이 주목되고, 이는 기능 유닛들(24)에 분기 오예측들을 표시할 수 있다.
기능 유닛들(24)에 의하여 생성된 결과들은 레지스터 값이 갱신되는 경우 재배열 버퍼(32)에 전달되고, 메모리 위치의 컨텐츠가 변화되는 경우 로드/저장 유닛(26)에 전달된다. 상기 결과가 레지스터에 저장되는 경우, 재배열 버퍼(32)는 상기 명령이 디코드된 경우에 레지스터의 값에 대하여 예약된 위치들에 상기 결과를 저장한다. 다수의 결과 버스들(38)은 기능 유닛들(24) 및 로드/저장 유닛(26)으로부터 결과들을 전송하기 위하여 포함된다. 결과 버스들(38)은 명령이 실행된다는 것을 식별하는 재배열 버퍼 뿐만 아니라, 발생된 결과를 전달한다.
로드/저장 유닛(26)은 기능 유닛들(24)과 데이터 캐시(28) 사이에 인터페이스를 제공한다. 일 실시예에서, 로드/저장 유닛(26)은 데이터 캐시(28)에 액세스되지 않은 미결의 로드 또는 저장을 위한 데이터 및 어드레스 정보에 관한 저장 위치들을 가지는 제 1 로드/저장 버퍼 및, 데이터 캐시(28)에 액세스된 로드 및 저장에 대한 데이터 및 어드레스 정보에 관한 저장 위치들을 가지는 제 2 로드/저장 버퍼로 구성된다. 예를 들어, 상기 제 1 버퍼는 12 위치들로 구성될 수 있고, 상기 제 2 버퍼는 32위치들로 구성될 수 있다. 디코드 유닛들(20)은 상기 로드/저장 유닛(26)에 액세스를 위하여 중재한다. 상기 제 1 버퍼가 가득차면, 디코드 유닛은 로드/저장 유닛(26)이 미결인 로드 또는 저장 요청 정보를 위한 공간을 가질때까지 기다려야한다. 로드/저장 유닛(26)은 데이터 코히런시가 유지되는 것을 확실히 하기 위하여 미결의 저장 메모리 동작들에 대항하여 로드 메모리 동작들에 대한 의존성 체크를 또한 수행할 수 있다. 메모리 동작은 프로세서(10)와 메인 메모리 서브시스템 사이에 데이터의 전송(비록 상기 전송이 데이터 캐시(28)에서 달성되더라도)이다. 메모리 동작들은 메모리에 저장된 오퍼랜드를 사용하는 명령의 결과일 수 있거나, 또는 상기 데이터 전송은 야기하지만 다른 어떤 동작도 야기하지 않는 로드/저장 명령의 결과일 수 있다.
데이터 캐시(28)는 로드/저장 유닛(26)과 메인 메모리 서브시스템 사이에 전송되는 데이터를 일시적으로 저장하도록 제공되는 고속 캐시 메모리이다. 일 실시예에서, 데이터 캐시(28)는 2 웨이 세트 연관(2 way set associative) 구조에서 최대 64 킬로바이트의 명령들을 저장하는 성능을 가진다. 상기 데이터 캐시(28)는 세트 연관(set associative) 구성, 전체 연관(fully associative) 구성, 또는 직접 맵핑 구성(direct mapped configuration), 및 다른 적합한 사이즈의 임의의 다른 구성을 포함하는 다양한 특정 메모리 구성들로서 구현될 수 있다는 점이 이해된다.
버스 인터페이스 유닛(37)은 컴퓨터 시스템에서 버스들을 거쳐서 프로세서(10)와 다른 구성성분들 사이에 통신하도록 구성된다. 예를 들어, 상기 버스는 Digital Equipment Corporation에서 개발된 EV-6 버스에 호환될 수 있다. 대안적으로, 패킷-기반, 단일 지향성 또는 양 지향성 링크 등을 포함하는 임의의 적합한 상호접속 구조가 사용될 수 있다.
도 1의 실시예가 수퍼스칼라 구현인 경우, 다른 실시예들은 스칼라 구현들을 사용할 수 있다는 점이 주목된다. 또한, 기능 유닛들의 수는 실시예에 따라서 변화할 수 있다. 다른 실시예들은 도 1에 도시된 개별적인 예약 스테이션들이 아닌 중앙화된 예약 스테이션을 사용할 수 있다. 또한, 다른 실시예들은 도 1에 도시된 예약 스테이션들 및 재배열 버퍼가 아닌 중앙 스케줄러를 사용할 수 있다.
프로세서(10)는 본 장에서는 메일박스 포트(100)로 도시된 포트를 포함하는데, 이는 명령 스트림의 실행동안 질의되는 것을 허용한다. 메일박스 포트(100)는 서비스 프로세서 또는 프로세서(10) 외부에 있는 디버그 프로세서에 연결되도록 구성될 수 있다. 프로세서(10)의 상태에 질의하는데 사용되는 테스트 데이터는 메일박스 포트(100)를 통하여 수신될 수 있다. 유사하게, 상기 질의의 결과로 생긴 프로세서(10)의 상태를 표시하는 상태 데이터는 메일박스 포트(100)로부터 서비스 프로세서 또는 디버그 프로세서에 전송될 수 있다. 메일박스 포트(100)는 디코드 유닛들(20A-20C), 레지스터 파일(30), 명령 캐시(16), 기능 유닛들(24A-24C) 등과 같은 프로세서(10)의 하나 이상의 유닛들에 연결될 수 있다. 정보는 메일박스 포트(100)로부터 전송 및 수신될 수 있다.
도 2에서, 프로세서의 상태를 결정하는 시스템의 일 실시예의 블럭도가 도시된다. 도시된 실시예에서, 프로세서(10), 이하 호스트 프로세서(10)는 서비스 프로세서(140)에 연결될 수 있다. 임의의 실시예들에서, 서비스 프로세서(140)는 호스트 프로세서(10)가 구현되는 컴퓨터 시스템에 연결될 수 있는 또다른 컴퓨터 시스템에 위치될 수 있다. 다른 실시예에서, 서비스 프로세서(140)는 호스트 프로세서(10)가 위치된 컴퓨터 시스템의 주변 슬롯 안에 삽입된 보드 상에 위치될 수 있거나, 또는 호스트 프로세서(10)와 같은 보드에 장착될 수도 있다.
전술한 바와 같이, 호스트 프로세서(10)는 메일박스 포트(100)를 포함한다. 메일박스 포트(100)는 메일박스 입력 포트(102) 및 메일박스 출력 포트(104)를 포함할 수 있다. 메일박스 입력 포트(102)는 서비스 프로세서(140)의 보완성 출력 포트(152)에 연결되도록 구성될 수 있다. 유사하게, 메일박스 출력 포트(104)는 서비스 프로세서(140)의 보완성 출력 포트(152)에 연결되도록 구성될 수 있다.
호스트 프로세서(10)의 메일박스 입력 포트(102)는 서비스 프로세서(140)로부터 전송된 테스트 데이터를 수신할 수 있다. 테스트 데이터는 서비스 프로세서(140)의 출력 포트(152)로부터 호스트 프로세서(10)의 메일박스 입력 포트(102)에 전송될 수 있다. 유사하게, 서비스 프로세서(140)는 호스트 프로세서(10)로부터 상태 데이터를 수신하도록 구성될 수 있다. 상태 테이터는 호스트 프로세서(10)의 메일박스 출력 포트(104)로부터 서비스 프로세서(140)의 입력 포트(154)에 전송될 수 있다. 입력/출력 포트들의 보완성 쌍들 각각은 서로 독립적으로 기능할 수 있다. 달리 말해서, 출력 포트(152)는 메일박스 포트(104)로부터 입력 포트(154)로의 상태 데이터의 전송에 독립적으로 테스트 데이터를 메일박스 입력 포트(102)로 전송할 수 있다.
테스트 액세스 포트(TAP:test access port)의 일부일 수 있는 테스트 데이터 입력(TDI:test data input) 핀 내의 테스트 데이터를 통하여, 테스트 데이터는 서비스 프로세서(140)의 출력 포트(152) 안으로 연속적으로 로드될 수 있다. 상기 테스트 액세스 포트는 IEEE 표준 1149.1에 따르는 바운더리 스캔 포트일 수 있다. 유사하게, 상태 데이터는 테스트 데이터 출력(TDO:test data out) 핀을 통하여 입력 포트(154)로부터 연속적으로 쉬프트될 수 있다. 서비스 프로세서(140)로부터 데티스 데이터를 로드하거나 상태 데이터를 언로드하는 상세한 사항은 하기에 설명된다.
도 3에서, 서비스 프로세서 출력 포트에 연결된 호스트 프로세서 입력 포트의 일 실시예를 예시하는 블럭도가 도시된다. 도시된 실시예에서, 호스트 프로세서(10)의 메일박스 포트(102)는 서비스 프로세서(140)의 메일박스 출력 포트(152)에 연결된다. 메일박스 입력 포트(102)는 입력 레지스터(112)를 포함한다. 입력 레지스터(112)는 테스트 데이터를 수신 및 저장하도록 구성된다. 상기 테스트 데이터는 출력 포트(152)에 위치된 출력 레지스터(162)로부터 수신될 수 있다. 출력 레지스터(162) 및 입력 레지스터(112)는 다양한 크기일 수 있다. 일 실시예에서, 출력 레지스터(162) 및 입력 레지스터(112) 모두는 32비트들의 데이터 및 하나의 유효한 비트를 저장하도록 구성된다. (메일박스 입력 포트들 모두와 메일박스 출력 포트 모두에 대하여) 다중 레지스터들 뿐만 아니라 상이한 레지스터 크기들을 가지는 다른 실시예들이 가능하고 고려된다.
호스트 프로세서(10)의 상태를 결정하기 위하여, 입력 레지스터(112)의 유효 비트가 질의될 것이고, 이어서 출력 레지스터(162) 안으로 테스트 데이터의 로딩이 이어진다. 전술한 바와 같이, 데이터는 IEEE 표준 1149.1에 따르는 바운더리 스캔 TAP를 통하여 메일박스 출력 포트(152)안으로 로드될 수 있다. 도시된 실시예에서, 출력 레지스터(162)는 TDI 핀에 연결된다. 테스트 데이터는 상기 TDI 핀을 통하여 출력 레지스터(162)안으로 연속적으로 쉬프트된다. 상기 테스트 데이터에 추가하여, 유효 비트가 또한 상기 TDI 핀을 통하여 출력 레지스터에 설정될 수 있다.
입력 레지스터(112)에 테스트 데이터를 전송하기 위하여, 먼저 유효 비트를 폴(poll) 하여 클리어 되는 것을 확실히 할 필요가 있다. 이러한 비트가 호스트 프로세서의 클록 도메인에 존재하기 때문에, 먼저 서비스 프로세서 클록 도메인에 동기되어야한다. 상기 유효 비트의 동기된 버전은 출력 레지스터(162)안으로 캡쳐되고 검토를 위하여 연속적으로 쉬프트된다. 상기 유효 비트가 검토를 위하여 연속적으로 쉬프트되는 동안, 테스트 데이터는 출력 레지스터(162) 안으로 연속적으로 로드될 수 있다.
유효 비트가 설정된 것으로 결정된 입력 레지스터(112)의 유효 비트의 폴링 동안, 테스트 데이터가 메일박스 입력 포트(102) 안으로 로드되었으나 호스트 프로세서(10)에 의하여 검색되지 않았다는 것을 표시될 수 있다. 따라서, 테스트 데이터가 출력 레지스터(162) 안으로 로드되고, 후속적으로 입력 레지스터(112)에 전달되는 것은 이러한 유효 비트가 설정되는 동안 방해될 수 있다. 상기 테스트 데이터의 검색 시, 상기 유효 비트는 호스트 프로세서에 의하여 입력 레지스터(112)로부터 클리어될 수 있다. 입력 레지스터(112)에 저장된 유효 비트가 클리어되었다는 것의 검출에 응답하여, 출력 포트(152)는 입력 레지스터(112)에 상기 테스트 데이터의 전송을 초기화할 수 있다. 이러한 실시예에서, 개별적인 TAP 명령은 상기 유효 비트를 설정하는데 사용된다. 이러한 명령을 사용하는 것은 출력 레지스터(162)로부터 입력 레지스터(112)에 데이터의 동기된 로드를 야기한다(도 3에서 'A'를 참조하라.).
호스트 프로세서(10)의 프로세서 코어는 입력 레지스터(112)에 유효 비트를 또한 폴링할 수 있다. 입력 레지스터(112) 안으로 테스트 데이터의 연속적인 로딩을 표시하는 유효 비트의 설정을 검출하는 경우, 상기 프로세서 코어는 상기 테스트 데이터를 검색할 수 있다. 상기 테스트 데이터는 그 후 상기 서비스 프로세서로 다시 전송될 상태 데이터를 발생하는데 사용될 수 있고, 이는 하기에 보다 상세히 설명될 것이다.
입력 포트들과 출력 포트들 사이의 전송 및 수신을 위한 프로토콜은 호스트 프로세서(10)와 서비스 프로세서(140) 모두에 대하여 같을 수 있다. 표 1은 입력 포트/출력 포트 조합의 일 실시예에 대한 프로토콜을 예시한다.
전송기 수신기
1. 클리어될 때까지 호스트 프로세서 유효 비트를 폴링 1. 설정시까지 호스트 프로세서 유효 비트를 폴링
2. 레지스터 안에 데이터를 디포지트 2. 데이터 검색
2. 호스트 프로세서 유효 비트를 설정 3. 호스트 프로세서 유효 비트를 클리어
일반적으로, 시스템(즉, 출력 포트)의 전송기는 수신기로 데이터를 전송하기에 앞서서 상기 호스트 프로세서 유효 비트를 폴링해야 한다. 상기 호스트 프로세서 유효 비트가 클리어된 것을 검출 시, 데이터는 출력 레지스터 안으로 디포지트되고 상기 수신기의 입력 레지스터에 전송될 수 있다. 상기 전송기로부터 상기 수신기로의 데이터의 연속적인 전송은 입력 레지스터에 유효 데이터을 설정함으로써 표시될 수 있다. 상기 시스템의 수신기(즉, 입력 포트)는 호스트 프로세서 유효 비트가 설정될 때까지 호스트 프로세서 유효 비트를 폴링할 수 있다. 상기 호스트 프로세서 유효 비트의 설정은 유효 데이터가 입력 레지스터에 존재하고, 따라서 상기 수신기가 상기 데이터를 검색하는 것을 허용한다는 것을 표시한다. 데이터의 검색에 이어서, 상기 호스트 프로세서의 유효 비트는 클리어될 수 있다.
다양한 실시예에서, 상기 서비스 프로세서의 수신기는 그의 입력 레지스터로부터 데이터를 주기적으로 쉬프트하고, 상기 데이터가 유효한지를 결정하기 위하여 상기 쉬프팅에 후속적인 유효 비트를 검토(상기 유효 비트가 쉬프트 아웃되는 데이터의 일부이기 때문에)한다.
도 4는 서비스 프로세서 입력 포트에 연결된 호스트 프로세서 출력 포트의 일 실시예의 블럭도이다. 도시된 실시예에서, 호스트 프로세서(10)의 메일박스 출력 포트(104)는 서비스 프로세서(104)의 입력 포트(154)에 연결된다. 메일박스 출력 포트(104)는 출력 레지스터(114)를 포함하고, 이는 호스트 프로세서(10)의 프로세서 코어로부터 수신된 상태 데이터를 저장하도록 구성된다. 출력 레지스터(114) 안으로 수신된 상태 데이터는 이전에 입력된 테스트 데이터에 응답하여 발생될 수 있다. 메일박스 출력 포트는 출력 레지스터(114)를 포함하고, 입력 프트(154)는 입력 레지스터(164)를 포함한다.
출력 레지스터(114)로의 데이터의 임의의 전송에 앞서서, 출력 레지스터가 클리어 되는지를 결정하기 위하여 출력 레지스터(114)에 저장된 유효 비트를 폴링할 필요가 있다. 상기 유효 비트가 클리어 된 것을 결정한 때에, 메일박스 출력 포트(104)는 출력 레지스터(114)안으로 데이터를 디포지트하고 후속적으로 출력 레지스터(114)에 상기 유효 비트를 설정할 수 있다. 입력 레지스터(164)에 데이터를 전송하는 것은 서비스 프로세서(140)에 의하여 개시된다. 이는 TAP 제어기의 캡쳐-DR 상태에서 완료된다. 일단 상기 상태 데이터와 유효 비트가 입력 레지스터(164)에 전송되면, 상기 유효 비트는 검토되고, 상기 데이터는 상기 데스트 데이터 출력(TDO) 핀을 통하여 쉬프팅함으로써 검색될 수 있다. 유효 비트가 설정되면, 서비스 프로세서(140)는 상기 유효 비트와 함께 쉬프트 아웃된 데이터가 실행가능하다는 것(즉, 유효한 데이터라는 것)을 결정한다.
개별적인 메일박스 입력 및 메일박스 출력 포트들로/로부터 데이터의 전송들은 상기 서비스 프로세서와 상기 호스트 프로세서 모두에 대한 명령들의 세트들에 의하여 제어될 수 있다. 일 실시예에 대하여, 서비스 프로세서에 대한 상기 TAP 명령들은: MBOXIN, MBOXINSETV, MBOXOUT, 및 MBOXOUTCLRV이다. 상기 MBOXIN 명령은 출력 포트(152)로부터 메일박스 입력 포트(102)에 테스트 데이터의 전송을 이루기 위하여 서비스 프로세서(140)에 의하여 사용될 수 있다. 서비스 프로세서(140)는 테스트 데이터의 전송에 응답하여 MBOXINSETV 명령을 실행할 수 있고, 이에 의하여 유효 데이터가 나타난다는 것을 호스트 프로세서(10)에 표시하기 위하여 입력 레지스터(112)에 유효 데이터를 설정한다. MBOXOUT 명령은 호스트 프로세서(10)로부터 서비스 프로세서(140)에 상태 데이터의 전송을 개시하기 위하여 실행될 수 있다. 상기 MBOXOUTCLRV 명령은 출력 레지스터(114)에 저장된 유효 비트를 클리어하기 위하여 실행될 수 있다.
호스트 프로세서(10)에 의하여 실행되는 명령들은 니모닉(mnemonic) UC_SPREG_MBOX_IN 및 UC_SPREG_MBOX_OUT에 모델 특정 레지스터(MSR:model specific register) 판독 및 기입을 포함할 수 있다. UC_SPREG_MBOX_IN의 MSR 판독은 메일박스 입력 레지스터로부터 테스트 데이터를 검색하기 위하여 메일박스 입력 레지스터(112)에 액세스를 개시한다. UC_SPREG_MBOX_IN에 MSR 기입은 상기 유효 비트를 클리어하는데 사용될 수 있다. UC_SPREG_MBOX_OUT에 MSR 기입은 상태 데이터를 디포지트하거나 유효 비트를 설정하기 위하여 메일박스 출력 레지스터(114)에 액세스를 개시할 수 있다. UC_SPREG_MBOX_OUT의 MSR 판독은 유효 비트가 클리어 된다는 것을 검출하는데 사용될 수 있다.
다양한 명령들에 관련된 니모닉들은 특정한 일 실시예에 대하여 예시적인 것이란 점이 주목된다. 입력 및 출력 프트들로 사용되는 특정한 명령들을 설명하기 위하여 다른 니모닉들을 가지는 실시예들이 가능하고 고려된다.
서비스 프로세서(140)의 출력 레지스터(162) 및 입력 레지스터(164)는 테스트/상태 데이터 및 적어도 하나의 유효 비트를 저장할 충분한 수의 비트 위치들을 포함하는 상기 TDI 핀 및 상기 TDO 핀 사이의 TAP 내의 임의의 쉬프트 레지스터일 수 있다는 점이 주목된다. 상술한 TAP와 다른 메카니즘들을 통하여 테스트 데이터가 로드되고 상태 데이터가 검색되는 서비스 프로세서(140)의 다른 실시예들이 가능하고 고려된다는 점이 또한 주목된다. 또한, 이러한 설명을 위하여, 서비스 프로세서 및 디버그 프로세서라는 용어는, 디버그 프로세서가 서비스 프로세서에 대체되고 본 장의 설명에 따라서 구성될 수 있기 때문에, 호환될 수 있다.
도 5A에서, 호스트 프로세서에 질의하는 방법의 일 실시예의 흐름도가 도시된다. 방법(500)은 호스트 프로세서의 입력 레지스터에 유효 비트를 폴링하는 것으로 시작한다(단계 502). 폴링 동안, 유효 비트가 클리어되는지 또는 설정되는지에 관한 결정이 이루어진다(단계 504). 유효 비트가 설정되면, 폴링은 계속된다. 설정된 유효 비트는 상기 호스트 프로세서의 입력 레지스터가 아직 검색되지 않은 유효 데이터를 포함한다는 것을 표시할 수 있다. 테스트 데이터의 연속적인 로딩은 상술한 TDI 핀을 통하여 이루어진다. 테스트 데이터가 병렬적으로 로드되는 다른 실시예들이 가능하고 고려된다. 테스트 데이터를 상기 출력 레지스터안으로 로드하는 것이 이어서, 상기 서비스 프로세서의 출력 포트는 상기 호스트 프로세서의 입력 레지스터에 데이터를 전송(단계 508)하고 유효 비트를 설정한다(단계 510). 호스트 프로세서의 입력 레지스터에 유효 비트의 설정은 유효 데이터가 존재하고 검색할 준비가 되었다는 것을 상기 프로세서에 표시할 수 있다. 유효 비트가 설정되었음을 검출한 것에 응답하여, 상기 호스트 프로세서는 상기 테스트 데이터를 검색하고 상기 테스트 데이터에 근거하여 상태 데이터를 발생할 수 있다(단계 512). 상기 메일박스 입력 포트의 입력 레지스터에 저장된 유효 비트는 호스트 프로세서에 의한 테스트 데이터의 검색에 이어서 상기 호스트 프로세서에 의하여 클리어될 수 있다.
도 5B는 호스트 프로세서로부터 상태 데이터를 출력하는 방법의 일 실시예의 흐름도이다. 상기 상태 데이터는 도 5A에 도시된 방법 및 도 1-4에 설명된 메카니즘에 따라서 발생될 수 있다. 방법(550)은 호스트 프로세서의 출력 레지스터의 유효 비트의 폴링으로 시작된다(단계 552). 도 5A를 참조로 설명된 방법과 유사하게, 상기 유효 비트가 클리어된다고 결정되기까지 상기 유효 비트의 폴링이 계속된다(단계 554). 일단 상기 유효 비트가 클리어 되었다고 결정되면, 상기 호스트 프로세서는 상태 데이터를 메일박스 출력 포트의 출력 레지스터안으로 디포지트할 수 있다(단계 556). 상태 데이터를 상기 출력 레지스터안으로 로딩하는 것에 이어서, 상기 호스트 프로세서는 출력 레지스터에 유효 비트를 설정한다(단계 560). 상기 서비스 프로세서는 상기 데이터 및 상기 유효 비트를 캡쳐-DR 상태에 전송하고, 그 후 상기 입력 레지스터로부터 쉬프트할 수 있다(단계 562). 전송된 유효 비트가 설정된 경우, 상기 데이터는 또한 유효한 것으로 알려진다. 상기 입력 레지스터로부터 상태 데이터의 검색에 응답하여, 상기 호스트 프로세서 유효 비트는 클리어될 수 있고, 이에 의하여 추가적인 상태 데이터가 상기 호스트 프로세서로부터 전달되도록 인에이블한다. 도 5B를 참조로 설명된 동작들은 도 5A를 참조로 설명된 동작들과 독립적으로 일어날 수 있다는 점이 주목된다.
본 장에서 사용된 용어 '테스트 데이터'는 원하는 응답을 수신하기 위하여 호스트 프로세서(10)안으로 입력될 수 있는 임의의 유형의 데이터를 언급할 수 있다. 유사하게, 용어 '상태 데이터'는 호스트 프로세서(10)의 동작에 관한 정보를 제공하는데 사용될 수 있는 임의의 유형의 데이터를 언급할 수 있다. 또한, 테스트 데이터의 로드 및/또는 상태 데이터의 검색은 프로세서의 개별적인 질의에 응답할 수 있거나, 또는 규칙적인 간격으로 수행되는 동작일 수 있다는 점이 주목된다. 유효 비트들을 폴링하고 데이터를 전송하는 순서가 상술한 것과 상이한 대안적인 실시예들이 또한 가능하고 고려된다.
본 발명이 특정한 실시예들을 참조하여 설명되었지만, 상기 실시예들은 예시적인 것이고 본 발명은 이에 한정되지 않는 점이 이해될 것이다. 설명된 실시예들에 대한 어떤 임의의 수정들, 변경들, 추가들 및 향상들도 가능하다. 이러한 수정들, 변경들, 추가들 및 향상들은 하기의 청구할들 내에서 설명되는 본 발명들의 범위 내에 있는 것이다.
본 발명은 일반적으로 프로세서들에 적용가능하다.

Claims (10)

  1. 제 1 유효 비트가 클리어될 때까지 제 1 입력 레지스터에 제 1 유효 비트를 폴링하는 단계(502)와, 상기 제 1 입력 레지스터는 호스트 프로세서에 위치되고;
    테스트 데이터를 제 1 출력 레지스터에 로딩하는 단계(506)와, 상기 제 1 출력 레지스터는 서비스 프로세서에 위치되고;
    상기 테스트 데이터를 상기 제 1 출력 레지스터로부터 상기 제 1 입력 레지스터에 전송하는 단계(508)와;
    상기 전송 완료시에 제 1 유효 비트를 설정하는 단계(510)와; 그리고
    상기 제 1 유효 비트의 설정의 검출에 응답하여 상기 제 1 입력 레지스터로부터 테스트 데이터를 검색하는 단계(512)를 포함하고,
    여기서, 상기 로딩, 상기 폴링, 상기 전송, 상기 설정 및 상기 검색 단계는 상기 호스트 프로세서에서 명령 스트림을 실행하는 것을 방해하지 않는 것을 특징으로 하는 호스트 프로세서의 상태 결정 방법.
  2. 제 1항에 있어서,
    상기 테스트 데이터에 근거하여 호스트 프로세서 상태를 결정하는 단계와; 그리고
    상태 데이터를 상기 서비스 프로세서에 출력하는 단계를 더 포함하고,
    상기 상태 데이터는 호스트 프로세서 상태를 표시하고,
    상기 결정 및 상기 출력 단계는 상기 호스트 프로세서 클록에 대하여 동기로 수행되는 것을 특징으로 하는 호스트 프로세서의 상태 결정 방법.
  3. 제 2항에 있어서, 상기 출력 단계는:
    제 2 유효 비트가 클리어 될 때까지 제 2 출력 레지스터에 제 2 유효 비트를 폴링하는 단계(552)와, 상기 제 2 출력 레지스터는 상기 호스트 프로세서에 위치되고;
    상기 제 2 출력 레지스터안으로 상태 데이터를 로딩하는 단계(556)와;
    상기 제 2 출력 제지스터로부터 제 2 입력 레지스터에 상기 상태 데이터를 전송하는 단계(558)와, 상기 제 2 입력 레지스터는 상기 서비스 프로세서에 위치되고; 그리고
    상기 제 2 입력 레지스터로부터 상기 상태 데이터를 출력하는 단계(562)를 포함하는 것을 특징으로 하는 호스트 프로세서의 상태 결정 방법.
  4. 제 3항에 있어서,
    상기 제 1 유효 비트는 상기 테스트 데이터의 검색에 응답하여 클리어되는 것을 특징으로 하는 호스트 프로세서의 상태 결정 방법.
  5. 제 3항에 있어서,
    상기 제 2 유효 비트는 상기 제 2 입력 레지스터의 로딩에 이어서 설정되는 것을 특징으로 하는 호스트 프로세서의 상태 결정 방법.
  6. 호스트 프로세서(10) 및 서비스 프로세서(140)를 포함하는 시스템에서,
    상기 호스트 프로세서 및 서비스 프로세서는 각기 제 1 입력 레지스터(102) 및 제 2 출력 레지스터(152)를 포함하고, 그리고 상기 호스트 프로세서 및 서비스 프로세서는 각기 제 2 출력 레지스터(104) 및 제 2 입력 레지스터(154)를 더 포함하며;
    상기 서비스 프로세서는 상기 호스트 프로세서의 상태를 결정하도록 구성되며, 상기 결정은: 제 1 유효 비트가 클리어될 때까지 상기 제 1 입력 레지스터에 제 1 유효 비트를 폴링하는 단계와; 상기 제 1 출력 레지스터 안으로 테스트 데이터를 로딩하는 단계와; 상기 제 1 출력 레지스터로부터 상기 제 1 입력 레지스터에 상기 테스트 데이터를 전송하는 단계와; 상기 전송 완료시 상기 제 1 유효 비트를 설정하는 단계를 포함하며;
    상기 호스트 프로세서는 상기 제 1 유효 비트의 설정에 응답하여, 상기 제 1 입력 레지스터로부터 상기 테스트 데이터를 검색하도록 구성되며; 그리고
    상기 로딩, 상기 폴링, 상기 전송, 상기 설정, 그리고 상기 검색 단계는 상기 호스트 프로세서에서 명령 스트림을 실행하는 것을 방해하지 않는 것을 특징으로 하는 시스템.
  7. 제 6항에 있어서,
    상기 호스트 프로세서는 상기 테스트 데이터에 근거하여 호스트 프로세서 상태를 결정하고; 그리고 상태 데이터를 상기 서비스 프로세서에 출력하도록 더 구성되고,
    상기 상태 데이터는 호스트 프로세서 상태를 표시하고, 여기서 상기 결정 및 상기 출력 단계는 상기 호스트 프로세서 클록에 대하여 동기로 수행되는 것을 특징으로 하는 시스템.
  8. 제 7항에 있어서,
    상기 호스트 프로세서는 제 2 유효 비트가 클리어될 때까지 상기 제 2 출력 레지스터에 제 2 유효 비트를 폴링하고; 상기 제 1 출력 레지스터에 상태 데이터를 디포지트하고; 상기 제 2 출력 레지스터로부터 상기 제 2 입력 레지스터에 상기 상태 데이터를 전송하도록 구성되며,
    상기 서비스 프로세서는 상기 제 2 입력 레지스터에 의하여 수신된 상기 상태 데이터를 출력하도록 구성되는 것을 특징으로 하는 시스템.
  9. 제 8항에 있어서,
    상기 호스트 프로세서는 상기 테스트 데이터 검색에 응답하여 상기 제 1 유효 비트를 클리어하도록 구성되는 것을 특징으로 하는 시스템.
  10. 제 8항에 있어서,
    상기 호스트 프로세서는 상기 제 2 출력 레지스터에 상태 데이터를 디포지트하는 것에 응답하여 상기 제 2 유효 비트를 설정하도록 구성되는 것을 특징으로 하는 시스템.
KR10-2005-7000565A 2002-07-11 2003-07-09 프로세서 동작을 방해하지 않으면서 프로세서 상태를결정하는 방법 및 장치 KR20050019846A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR10-2005-7000565A KR20050019846A (ko) 2002-07-11 2003-07-09 프로세서 동작을 방해하지 않으면서 프로세서 상태를결정하는 방법 및 장치

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/193,836 2002-07-11
KR10-2005-7000565A KR20050019846A (ko) 2002-07-11 2003-07-09 프로세서 동작을 방해하지 않으면서 프로세서 상태를결정하는 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20050019846A true KR20050019846A (ko) 2005-03-03

Family

ID=41784036

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2005-7000565A KR20050019846A (ko) 2002-07-11 2003-07-09 프로세서 동작을 방해하지 않으면서 프로세서 상태를결정하는 방법 및 장치

Country Status (1)

Country Link
KR (1) KR20050019846A (ko)

Similar Documents

Publication Publication Date Title
US6381689B2 (en) Line-oriented reorder buffer configured to selectively store a memory operation result in one of the plurality of reorder buffer storage locations corresponding to the executed instruction
US5933626A (en) Apparatus and method for tracing microprocessor instructions
US5822575A (en) Branch prediction storage for storing branch prediction information such that a corresponding tag may be routed with the branch instruction
US5838943A (en) Apparatus for speculatively storing and restoring data to a cache memory
KR100880686B1 (ko) 2개 레벨의 분기 예측 캐시를 갖는 분기 예측
US5748978A (en) Byte queue divided into multiple subqueues for optimizing instruction selection logic
US5903740A (en) Apparatus and method for retiring instructions in excess of the number of accessible write ports
US6085311A (en) Instruction alignment unit employing dual instruction queues for high frequency instruction dispatch
US5872951A (en) Reorder buffer having a future file for storing speculative instruction execution results
US5960467A (en) Apparatus for efficiently providing memory operands for instructions
US5983342A (en) Superscalar microprocessor employing a future file for storing results into multiportion registers
EP1204022A1 (en) A line-oriented reorder buffer for a superscalar microprocessor
US5765016A (en) Reorder buffer configured to store both speculative and committed register states
US20070033385A1 (en) Call return stack way prediction repair
US5878244A (en) Reorder buffer configured to allocate storage capable of storing results corresponding to a maximum number of concurrently receivable instructions regardless of a number of instructions received
US5870579A (en) Reorder buffer including a circuit for selecting a designated mask corresponding to an instruction that results in an exception
US5920710A (en) Apparatus and method for modifying status bits in a reorder buffer with a large speculative state
EP1230592A1 (en) Method and apparatus for performing calculations on narrow operands
US5813045A (en) Conditional early data address generation mechanism for a microprocessor
US6237082B1 (en) Reorder buffer configured to allocate storage for instruction results corresponding to predefined maximum number of concurrently receivable instructions independent of a number of instructions received
US5903741A (en) Method of allocating a fixed reorder buffer storage line for execution results regardless of a number of concurrently dispatched instructions
EP1012708B1 (en) A line-oriented reorder buffer for a superscalar microprocessor
US5854912A (en) Flexible resource access in a microprocessor
US6085302A (en) Microprocessor having address generation units for efficient generation of memory operation addresses
WO2004008319A2 (en) Method and apparatus for determining a processor state without interrupting processor operation

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination