KR20180036490A - 로컬 브랜치 디코더를 구비한 멀티이슈 마이크로코드 유닛을 포함하는 파이프라인형 프로세서 - Google Patents

로컬 브랜치 디코더를 구비한 멀티이슈 마이크로코드 유닛을 포함하는 파이프라인형 프로세서 Download PDF

Info

Publication number
KR20180036490A
KR20180036490A KR1020160154923A KR20160154923A KR20180036490A KR 20180036490 A KR20180036490 A KR 20180036490A KR 1020160154923 A KR1020160154923 A KR 1020160154923A KR 20160154923 A KR20160154923 A KR 20160154923A KR 20180036490 A KR20180036490 A KR 20180036490A
Authority
KR
South Korea
Prior art keywords
instruction
microcode
instructions
call
return
Prior art date
Application number
KR1020160154923A
Other languages
English (en)
Other versions
KR102601858B1 (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 KR20180036490A publication Critical patent/KR20180036490A/ko
Application granted granted Critical
Publication of KR102601858B1 publication Critical patent/KR102601858B1/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/3017Runtime instruction translation, e.g. macros
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/223Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or 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 or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

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

Abstract

프로세서는, 마이크로명령어를 실행하는 실행 파이프라인과, 구조적 명령어를 마이크로명령어로 변환하는 명령어 변환기를 구비한다. 명령어 변환기는, 마이크로코드 명령어를 유지하며, 클록 사이클마다 복수의 마이크로코드 명령어의 페치 퀀텀을 제공하는 메모리와, 메모리에 의해 제공되는 마이크로코드 명령어를 유지하는 큐와, 페치 퀀텀을 디코딩하여 로컬 브랜치 명령어를 검출하고, 프로그램 순서상 첫번째 로컬 브랜치 명령어까지(그러나 이 첫번째 로컬 브랜치 명령어는 포함하지 않음) 페치 퀀텀의 마이크로코드 명령어가 큐에 기록되게 하며, 프로그램 순서상 첫번째 로컬 브랜치 명령어와, 페치 퀀텀의 이어지는 마이크로코드 명령어는 상기 큐에 기록되지 못하게 하는 브랜치 디코더를 구비한다. 로컬 브랜치 명령어는 실행 파이프라인보다는 명령어 변환기에 의해 분석된다. 마이크로코드 변환기는 클록 사이클마다 큐로부터 수신되는 다수의 마이크로코드 명령어를, 실행 파이프라인에 제공하도록 다수의 마이크로명령어로 변환한다.

Description

로컬 브랜치 디코더를 구비한 멀티이슈 마이크로코드 유닛을 포함하는 파이프라인형 프로세서{PIPELINED PROCESSOR WITH MULTI-ISSUE MICROCODE UNIT HAVING LOCAL BRANCH DECODER}
<관련 출원과의 교차 참조>
본 출원은 2016년 9월 30일 중국에 출원한 201610875658.6에 대해 우선권을 주장하며, 이 우선권 출원은 그 전체가 참조로 포함된다.
<배경>
흔히 중앙 처리 장치(CPU) 및 마이크로프로세서라고 칭해지는, 저장된 프로그램 프로세서의 성능 개선이 꾸준히 요구되고 있다. 역사적으로, 일부 프로세서는, 그 프로세서의 명령어 세트 아키텍처(instruction set architecture, ISA)의 적어도 일부 구조적 명령어(architectural instruction)를 수행하고 예외 서비스(exception service)를 위한 내장 마이크로코드를 갖는다. 통상의 프로세서는 클록 사이클마다 프로세서의 마이크로코드 메모리로부터 단일 마이크로코드 명령어를 페치(fetch)하는데, 이 클록 사이클은 특히, 클록마다 다수의 명령어를 처리할 수 있는 능력을 가진 프로세서에서 마이크로코딩된 구조적 명령어 및/또는 예외 서비스 루틴의 성능을 제한할 수 있다.
도 1은 프로세서를 도시하는 블록도이다.
도 2는 도 1의 프로세서의 명령어 변환기를 더 상세하게 도시하는 블록도이다.
도 3은 도 2의 마이크로코드 유닛의 동작을 도시하는 흐름도이다.
도 4는 도 2의 마이크로코드 유닛의 동작을 도시하는 흐름도이다.
용어설명
로컬 브랜치 명령어(local branch instruction)는 프로세서의 실행 파이프라인보다는 명령어 변환기에 의해 분석되는 브랜치 명령어이다. 로컬 브랜치 명령어는 무조건 점프 명령어 등의 무조건 브랜치 명령어, 호출 명령어, 또는 명령어 변환기의 호출/반환 스택으로부터 취득될 수 있는 타겟 어드레스를 가진 반환 명령어일 수 있다. 로컬 브랜치 명령어는 또한, 명령어 변환기에 의해 분석될 수 있으므로 실행 파이프라인에 의해 분석될 필요가 없는, 정적 조건 등의 조건을 가진 통상의 브랜치 명령어일 수도 있다.
비로컬 (non-local) 브랜치 명령어는 프로세서의 실행 파이프라인에 의해 분석되는 브랜치 명령어이다.
마이크로코드( microcode )는 명령어의 루틴 또는 프로그램 스레드(program thread)이며, 이 명령어는 구조적 명령어 실행을 달성하는 데에 그리고/또는 예외 서비스를 행하는 데에 이용되는 프로세서의 비구조적 메모리에 저장된 비구조적 명령어이다. 마이크로코드에 의해 실행이 달성되는 구조적 명령어는 통상 복잡하고/하거나 드물게 실행된다. 마이크로코드에 의해 서비스되는 예외는 구조적 및/또는 마이크로구조적(micro-architectural) 예외일 수 있다. 마이크로코드 루틴은 하나 이상의 브랜치 명령어를 포함할 수 있다.
마이크로명령어( microinstruction )는 프로세서의 하나 이상의 실행 유닛에 의해 실행되는 명령어로서, 프로세서의 ISA에 의해 정의되는 명령어 세트와는 별개의 명령어 세트에 의해 정의된다. 프로세서의 ISA의 일례는 x86 ISA이다. 구조적 명령어는 하나 이상의 마이크로명령어로 변환된다. 실행 유닛에 의한 하나 이상의 마이크로명령어의 집합적 실행(collective execution)이 구조적 명령어를 구현하며, 즉 ISA에 의해 정의되는 구조적 명령어의 결과를 생성하는데 필요한 동작을 수행한다.
이제 도 1을 참조하면, 프로세서(100)를 예시하는 블록도가 도시된다. 프로세서(100)는 명령어 캐쉬(102), 명령어 변환기(104), 및 슈퍼스칼라 비정상 실행 파이프라인(superscalar out-of-order execution pipeline)(192)을 포함한다. 명령어 캐쉬(102)는 시스템 메모리로부터 구조적 명령어를 캐쉬하여 그 구조적 명령어(178)를 구조적 프로그램 카운터(도시 생략)에 기초해서 명령어 변환기(104)에 제공한다. 명령어 변환기(104)는 구조적 명령어(178)를 마이크로명령어(138)로 변환하여 실행 파이프라인(192)에 제공한다. 실행 파이프라인(192)은 마이크로명령어(138)를 실행하여, 변환된 구조적 명령어(178)의 결과를 프로세서(100)의 ISA에 의해 정의되는 바와 같이 생성한다. 일 실시형태에 있어서, 프로세서(100) ISA는 x86 ISA이다. 바람직하게는, 명령어 변환기(104)는 본 명세서에 보다 상세하게 설명하는 바와 같이, 클록 사이클마다 단일 마이크로코드 명령어를 페치하는 통상의 프로세서의 처리율보다, 실행 파이프라인(192)에 대한 클록 사이클마다 제공되는 마이크로명령어(138)의 처리율을 상승시키기 위해, 클록 사이클마다 다수의 마이크로코드 명령어(예컨대, 도 2의 마이크로명령어(272))를 페치하여 마이크로명령어(138)로 변환한다. 이것은 잠재적으로, 마이크로코딩된 구조적 명령어(178)의 성능을 향상시키고/시키거나, 클록 사이클마다 단일 마이크로코드 명령어를 페치하는 통상의 프로세서의 성능보다, 인터렙션 등의 예외를 서비스하는 마이크로코드의 성능을 향상시킨다.
실행 파이프라인(192)은 명칭 변경 유닛(rename unit)(106), 예약 스테이션(108), 실행 유닛(112), 구조적 레지스터(116), 순서 변경 버퍼(reorder buffer)(118), 및 메모리 서브시스템(122)을 포함한다. 실행 유닛(112)은 마이크로명령어(138)를 실행한다. 일 실시형태에 있어서, 실행 유닛(112)은 하나 이상의 정수 유닛, 하나 이상의 미디어/부동 소수점 유닛, 하나 이상의 브랜치 유닛, 및 하나 이상의 로드(load)/스토어(store) 유닛을 포함한다. 바람직하게는, 메모리 서브시스템(122)은 메모리 순서 버퍼, 하나 이상의 캐쉬 메모리(예컨대, 레벨-1 명령어 캐쉬, 레벨-1 데이터 캐쉬), 변환 색인 버퍼(translation lookaside buffer), 테이블워크(tablewalk) 엔진, 하나 이상의 데이터 프리페치기(prefetcher), 라이트 컴바인 버퍼(write-combine buffer), 및 로드 큐, 스토어 큐, 스눕 큐(snoop queue), 및 필 큐(fill queue) 등의 다양한 리퀘스트 큐를 포함한다.
명령어 변환기(104)는 마이크로명령어(138)를 프로그램 순서대로 명칭 변경 유닛(106)에 제공한다. 명칭 변경 유닛(106)은 명령어 변환기(104)로부터 마이크로명령어(138)를 수신하여, 프로그램 순서대로 마이크로명령어(138)의 각각에 대해 명칭 변경 버퍼(118)의 엔트리(entry)를 할당한다. 바람직하게는, 순서 변경 버퍼(118)는 원형 큐이고, 마이크로명령어(138)의 프로그램 순서를 유지하기 위해 순서 변경 버퍼(118)의 엔트리가 할당된다. 실행 유닛(112)은 프로그램 순서에서 벗어난 마이크로명령어(138)를 실행한다. 그러나, 명칭 변경 유닛(106)은 마이크로명령어(138) 간에 종속성을 체크하여 그 종속성 정보를 마이크로명령어(138)와 함께 실행 파이프라인(192) 하류로 전송한다. 예약 스테이션(108)은 마이크로명령어(138)를 실행 준비가 될 때까지 보유한다. 예약 스테이션(18)과 스케줄러(도시 생략)는 마이크로명령어(138)가 실행 준비가 될 때까지 실행을 위해 실행 유닛(112)에 발행되지 않게 하기 위해 종속성 정보를 사용한다. 마이크로명령어(138)는 실행 유닛(112)이 그 명령어의 실행에 이용 가능할 때에, 또 그 명령어의 소스 오퍼랜드의 전부를 이용할 수 있을 때에 실행 준비가 된다. 보다 구체적으로, 마이크로명령어(138)의 소스 오퍼랜드는, 그 명령어가 종속되는 임의의 마이크로명령어(138)가 실행되었고 그 소스 오퍼랜드인 그 명령어의 결과를 생성했을 때에 이용 가능하다.
일 실시형태에 있어서, 순서 변경 버퍼(118)는 실행된 마이크로명령어(138)의 결과를 저장하는 각각의 엔트리 내에 필드를 포함한다. 마이크로명령어(138)가 실행되고 생성된 결과가 결과 버스 상에 제공되어 순서 변경 버퍼(118)에 제공되면, 마이크로명령어(138)의 순서 변경 버퍼(118) 엔트리가 실행된 것으로 표시된다. 그러나, 마이크로명령어(138)는 그 마이크로명령어(138)가 실행 파이프라인(192)에서 가장 오래된 마이크로명령어(138)가 될 때까지, 퇴거될 수 없는데, 즉 그 결과가 구조적 상태에 커밋(commit)으로 될 수 없다. 이에, 실행 유닛(112)이 프로그램 순서에서 벗어난 마이크로명령어(138)를 실행하더라도, 명칭 변경 유닛(106)과 순서 변경 버퍼(118)는 마이크로명령어(138)가 프로그램 순서에서 퇴거되는 것을 확실하게 하기 위해 함께 동작한다. 또한, 바람직하게는, 결과는 필요하다면 다음 클록 사이클에 사용하도록 포워딩 버스를 통해 실행 유닛(12)에 다시 포워딩된다. 바람직하게는, 실행 파이프라인(192)은 클록 사이클마다 최대 4개의 가장 오래된 마이크로명령어(138)를 퇴거시키도록 구성된다. 구조적 명령어(179)가 변환된 마이크로명령어(138)가 전부 퇴거되었다면, 구조적 명령어(178)가 퇴거된다. 예를 들어, 구조적 명령어(178)를 구현하는 마이크로코드 루틴의 최종 마이크로명령어(138)인 마이크로명령어(138)가 퇴거할 때에, 구조적 명령어(178)가 퇴거하게 된다.
순서 변경 버퍼(118) 엔트리가 각각의 마이크로명령어(138)의 결과에 대한 저장을 포함하는 실시형태에서는, 마이크로명령어(138)의 퇴거가, 적절한 구조적 레지스터(116)에 결과를 기록하는 것을 포함한다. 대안적 실시형태에 있어서, 실행 파이프라인(192)은 구조적 레지스터(116)에 대한 저장인 물리적 레지스터 파일(도시 생략)을 포함하고, 순서 변경 버퍼(118) 엔트리는 결과에 대한 저장을 포함하지 않는다. 대신에, 명칭 변경 유닛(106)은 각각의 마이크로명령어(138)의 결과에 대해 물리적 레지스터 파일 내의 레지스터를 지정하고, 명칭 변경 유닛(106)은 물리적 레지스터 파일 내의 지정된 레지스터에 기초하여 종속성을 체크한다. 명칭 변경 유닛(106)은 또한 물리적 레지스터 파일 내의 각각의 레지스터의 상태를 나타내는 테이블을 유지한다. 보다 구체적으로, 마이크로명령어(138)가 퇴거할 때에, 명칭 변경 유닛(106)은 마이크로명령어(138)의 결과를 유지하는 물리적 레지스터 파일의 레지스터의 상태를 업데이트하여, 그 파일이 연관된 구조적 레지스터(116)의 구조적 상태를 현재 포함하는 것을 나타낸다.
명령어 변환기(104)는 고속 변환기(154), 마이크로코드 유닛(156) 및 먹스(mux)(152)를 포함한다. 고속 변환기(154)는 구조적 명령어(178)를 마이크로명령어(136)로 변환한다. 마이크로코드 유닛(156)은 구조적 명령어(178)를 마이크로명령어(134)로 변환한다. 먹스(152)는 명령어 변환기(104)의 모드에 따라, 고속 변환기(154)로부터의 마이크로명령어(136) 또는 고속 변환기(156)로부터의 마이크로명령어(134) 중 하나를 선택하여, 실행 파이프라인(192)에 마이크로명령어(138)로서 제공한다. 일 실시형태에 있어서, 큐(도시 생략)가 실행 파이프라인(192)에 제공하도록 마이크로명령어(138)를 버퍼링한다.
고속 변환기(154)는 비교적 간단하게 그리고/또는 빈번하게 실행되는 구조적 명령어(178)를 변환한다. 바람직하게는, 고속 변환기(154)는 구조적 명령어(178)의 서브세트에 대해, 바람직하게는 단일 클록 사이클에서 각각의 구조적 명령어(178)를 하나 이상의 마이크로명령어(136)로 변환하는 프로그래머블 로직 어레이의 집합을 포함한다. 일 실시형태에 있어서, 고속 변환기(154)는 클록 사이클마다 최대 4개의 구조적 명령어(178)를 변환하여 클록 사이클마다 최대 6개의 마이크로명령어(136)를 제공하는 것이 가능하다. 고속 변환기(154)가 구조적 명령어(178)를 변환할 수 있다면, 명령어 변환기(104)는 먹스(152)가 고속 변환기(154)에 의해 생성된 마이크로명령어(136)을 선택하는 경우에, 고속 변환 모드로 유지된다.
그러나, 고속 변환기(154)가 마이크로코딩된 구조적 명령어(178)에 직면하거나 예외 조건이 통지될 때에, 고속 변환기(154)는 먹스(152)가 마이크로코드 유닛(156)에 의해 생성된 마이크로명령어(136)을 선택하는 경우에, 구조적 명령어(178)를 변환하는 것을 정지하고 제어를 마이크로코드 유닛(156)으로 이동시켜 마이크로코드 모드로 변경한다. 이 경우에, 고속 변환기(154)는 마이크로코딩된 구조적 명령어(178)를 수행하거나 예외 서비스를 행하는 마이크로코드 ROM(202)(도 2 참조)에 저장된 마이크로코드 루틴의 어드레스를 제공한다. 마이크로코드 유닛(156)과 그것의 동작은 이하의 나머지 도면들과 관련해서 보다 상세하게 설명한다.
일 실시형태에 있어서, 구조적 명령어(178)의 일부는 하이브리드이다. 즉, 고속 변환기(154)는 마이크로명령어(136)의 일부를 제공하고, 구조적 명령어(178)의 나머지는 마이크로코딩되는데, 즉 고속 변환기(154)가 고속 변환 모드에서 마이크로명령어(136)의 헤드부를 제공한 후에, 모드는 마이크로코드 모드로 변경되고, 제어는 마이크로코드 유닛(156)으로 이동하여 마이크로코드 루틴은 마이크로코드 유닛(156)에 의해 제공되는 마이크로명령어(134)를 통해 구조적 명령어(178)의 기능의 나머지를 수행할 수 있다.
바람직하게는, 명령어 변환기(104)는 이하에서 더욱 상세하게 설명하겠지만, 실행 파이프라인(192)에 제공된 마이크로명령어(138)의 처리율을 상승시켜서 마이크로코딩된 구조적 명령어(178) 및/또는 마이크로코딩된 예외 서비스 루틴에 대해 실행 파이프라인(192)의 슈퍼스칼라 능력을 이용하고 그 활용을 증가시키기 위해, 클록 사이클마다 다수의 마이크로코드 명령어를 페치한다.
이제 도 2를 참조하면, 도 1의 프로세서(100)의 명령어 변환기(104)를 더 상세하게 예시하는 블록도가 도시된다. 명령어 변환기(104)는 어드레스 생성기(206), 마이크로코드 ROM(202), 브랜치 디코더(208), 마이크로코드 명령어 큐(212), 큐 컨트롤러(214), 복수의 마이크로코드 변환기(216), 및 호출/반환 유닛(222)(CRU)을 포함한다. 마이크로코드 ROM(202)은 4개의 개별 어드레서블 뱅크 ― 뱅크 A(204A), 뱅크 B(204B), 뱅크 C(204C), 및 뱅크 D(204D)를 포함하는 뱅크 메모리(banked memory)이며, 이들 뱅크는 총괄해서 뱅크들(204)로서, 또 개별적으로 뱅크(204)로서 칭해진다. 이런 식으로, 마이크로코드 ROM(202)은 본 명세서에서는 페치 퀀텀(fetch quantum)(296)으로서 불리는 4개의 마이크로코드 명령어(272)를 클록 사이클마다 브랜치 디코더(208)에 제공하는 것이 바람직하다. 도시한 바와 같이, 마이크로코드 ROM(202)은 4개의 마이크로코드 명령어(272)를 0 내지 3으로 표시된 4개의 각각의 레인을 통해 브랜치 디코더(208)에 제공한다. 레인 0은 제1 마이크로코드 명령어(272)를 프로그램 순서대로 제공하고, 레인 1은 제2 마이크로코드 명령어(272)를 프로그램 순서대로 제공하며, 레인 2는 제3 마이크로코드 명령어(272)를 프로그램 순서대로 제공하고, 레인 3은 제4 마이크로코드 명령어(272)를 프로그램 순서대로 제공한다. 일 실시형태에 따르면, 각각의 뱅크(204)는 사이즈 및 전력 소비를 최소화하기 위해 단일 판독 포트를 구비하는 것이 바람직하다.
어드레스 생성기(206)는 마이크로코드 ROM(202)에 제공되는 마이크로코드 페치 어드레스(268)를 생성한다. 제1 가산기(224-1)가 페치 어드레스(268)를 1씩 증분하고, 제2 가산기(224-2)가 페치 어드레스(268)를 2씩 증분하고, 제3 가산기(224-3)가 페치 어드레스(268)를 3씩 증분하며, 각기 증분된 어드레스 각각은 페치 어드레스(268)와 함께 마이크로코드 ROM(202)에 제공된다. 4개의 어드레스는 마이크로코드 ROM(202)의 각각의 뱅크(204)에 각각 제공되어 페치 퀀텀(296)의 4개의 순차적 마이크로코드 명령어(272)의 페치를 달성한다. 바람직하게는, 마이크로코드 ROM(202)은 페치 어드레스(268)의 2개의 최하위 비트에 따라, 4개의 뱅크(204) 중 적절한 한 뱅크에 4개의 어드레스 각각을 보내는 제1 먹스 세트(도시 생략)와, 4개의 뱅크(204)에 의해 제공되는 4개의 마이크로코드 명령어(272) 각각을 브랜치 디코더(208)의 적절한 레인에 보내는 제2 먹스 세트(도시 생략)를 포함한다. 바람직하게는, 페치 어드레스(268)의 하위 2개 비트의 값이 제로이면, 페치 어드레스(268)는 뱅크 A(204A)에 제공되고, 1씩 증분된 어드레스는 뱅크 B(204B)에 제공되며, 2씩 증분된 어드레스는 뱅크 C(204C)에 제공되며, 3씩 증분된 어드레스는 뱅크 C(204C)에 제공되며, 페치 어드레스(268)의 하위 2개 비트의 값이 1이면, 페치 어드레스(268)는 뱅크 B(204B)에 제공되고, 1씩 증분된 어드레스는 뱅크 C(204C)에 제공되며, 2씩 증분된 어드레스는 뱅크 D(204D)에 제공되며, 3씩 증분된 어드레스는 뱅크 D(204D)에 제공되며, 페치 어드레스(268)의 하위 2개 비트의 값이 2이면, 페치 어드레스(268)는 뱅크 C(204C)에 제공되고, 1씩 증분된 어드레스는 뱅크 D(204D)에 제공되며, 2씩 증분된 어드레스는 뱅크 A(204A)에 제공되며, 3씩 증분된 어드레스는 뱅크 B(204B)에 제공되며, 페치 어드레스(268)의 하위 2개 비트의 값이 3이면, 페치 어드레스(268)는 뱅크 D(204D)에 제공되고, 1씩 증분된 어드레스는 뱅크 A(204A)에 제공되며, 2씩 증분된 어드레스는 뱅크 B(204B)에 제공되며, 3씩 증분된 어드레스는 뱅크 C(204C)에 제공된다. 마찬가지로, 뱅크 A(204A)의 출력은 페치 어드레스(268)의 하위 2개의 비트의 값 모듈로 4에 대응하는 브랜치 디코더(208)의 레인에 제공되고, 뱅크 B(204B)의 출력은 1이 더해진 페치 어드레스(268)의 하위 2개의 비트의 값 모듈로 4에 대응하는 브랜치 디코더(208)의 레인에 제공되며, 뱅크 C(204C)의 출력은 2가 더해진 페치 어드레스(268)의 하위 2개의 비트의 값 모듈로 4에 대응하는 브랜치 디코더(208)의 레인에 제공되고, 뱅크 D(204D)의 출력은 3이 더해진 페치 어드레스(268)의 하위 2개의 비트의 값 모듈로 4에 대응하는 브랜치 디코더(208)의 레인에 제공된다.
페치 어드레스(268)는 마이크로코드 프로그램 카운터(도시 생략)에 유지된다. 처음에, 즉 고속 변환기(154)가 마이크로코드 모드로 전환될 때에, 마이크로코드 프로그램 카운터는 고속 변환기(154)에 의해 제공되는 마이크로코드 루틴의 어드레스가 로딩된다. 전술한 바와 같이, 로컬 브랜치 명령어는 실행 파이프라인(192)보다는 명령어 변환기(104), 더 구체적으로는 마이크로코드 유닛(156)에 의해 분석되는 것이다. 반면, 비로컬 브랜치 명령어는 분석을 위해 실행 파이프라인(192)에 발행되어야 하며 마이크로코드 유닛(156)에 의해 분석될 수 없는 것이다. 브랜치 명령어를 분석한다는 것은 그 브랜치 명령어가 취해지거나 취해지지 않거나의 여부를 결정하는 것을 의미하며, 취해지는 것은 브랜치 명령어의 타겟 어드레스이다. 마이크로코드 ROM(202)으로부터 페치 퀀텀(296)이 페치될 때마다, 페치 어드레스(268)(즉, 마이크로코드 프로그램 카운터)는 업데이트된다. 페치 퀀텀(296)에 어떤 로컬 브랜치 명령어도 없다고 브랜치 디코더(208)가 결정하면, 어드레스 생성기(206)는 다음의 순차적 명령어가 페치되게 한다. 보다 구체적으로, 가산기(226)가 페치 어드레스(268)를 4씩, 즉 페치 퀀텀(296)의 사이즈만큼 증분한다. 그러나, 브랜치 디코더(208)가 페치 퀀텀(296)에서 로컬 브랜치 명령어를 검출하면, 브랜치 디코더(208)는 로컬 브랜치 명령어를 분석하고, 그것의 방향이 취해지면, 브랜치 디코더(208)는 분석된 타겟 어드레스(266)를 어드레스 생성기(206)에 제공하여, 분석된 타겟 어드레스(266)에서 다음 페치 퀀텀(296)을 페치하도록 마이크로코드 프로그램 카운터를 업데이트하게 한다.
호출 마이크로코드 명령어의 경우, 항상 그 방향이 취해지고, 브랜치 디코더(208)에 의해 산출된 타겟 어드레스(266)는 호출 명령어 이후의 다음 순차 어드레스인데, 이것은 더 상세하게는 후술하겠지만, 호출/반환 유닛(222)에 제공되어 현재의 호출/반환 스택(254)에 푸시되는 반환 어드레스이다. 호출 마이크로코드 명령어는 마이크로코드 유닛(156)에 의해 분석되기 때문에, 로컬 브랜치 명령어이다. 반환 마이크로코드 명령어의 경우에, 항상 그 방향이 취해지고, 반환 어드레스(298)는 더 상세하게는 후술하겠지만, 현재 호출/반환 스택(254)으로부터 팝(pop)되어 마이크로코드 프로그램 카운터의 업데이트를 위해 어드레스 생성기(206)에 제공된다. 반환 마이크로코드 명령어는 마이크로코드 유닛(156)에 의해 분석되기 때문에, 로컬 브랜치 명령어이다. 무조건 점프 마이크로코드 명령어는 항상 취해지며 로컬 또는 비로컬 브랜치일 수 있다. 로컬 무조건 점프의 경우에, 타겟 어드레스(266)는 명령어 그 자체에 명시되어 있는 반면, 실행 파이프라인(192)은 비로컬 무조건 점프의 타겟 어드레스를 산출한다. 마찬가지로, 조건 점프 마이크로코드 명령어는 로컬 또는 비로컬 중 하나일 수 있다. 로컬 조건 점프 명령어의 경우에, 마이크로코드 유닛(156)은 그 방향을 분석하고, 타겟 어드레스(266)가 명령어 그 자체에 포함되어 있는 반면, 실행 파이프라인(192)은 그 방향을 분석하고 비로컬 조건 점프의 타겟 어드레스를 산출한다. 바람직하게는, 마이크로코드 유닛(156)은 모든 비로컬 브랜치 명령어가 취해지지 않을 것을 효과적으로 예측하고, 페치 퀀텀(296)에 비로컬 브랜치 명령어가 존재하므로 순차적 페치 프로세스를 인터럽션하지 않는다. 그 결과, 실행 파이프라인(192)가 비로컬 브랜치 명령어를 취해지는 것으로 분석하면, 마이크로코드 명령어 큐(212)를 포함한 마이크로코드 유닛(156) 파이프라인이 플러시(flush)되고, 실행 파이프라인(192)은 마이크로코드 프로그램 카운터의 업데이트를 위해 신규 타겟 어드레스를 제공한다.
브랜치 디코더(208)는 마이크로코드 ROM(202)으로부터 페치 퀀텀(296)을 수신하여 그 마이크로코드 명령어(272)를 통과시켜 마이크로코드 명령어(274)로서 전달한다. 브랜치 디코더(208)는 페치 퀀텀(296)을 디코딩하여 로컬 및 비로컬 양 브랜치 명령어를 찾는다. 특히, 브랜치 디코더(208)는 수신된 페치 퀀텀(296)의 레인 0 내지 3을, 즉 프로그램 순서로 탐색하여, 있다면, 본 명세서에서 "프로그램 순서상 첫번째 로컬 브랜치 명령어(first-in-program-order local branch instruction)"라고 불리는 로컬 브랜치 명령어를 갖는 제1 레인을 검출한다. 또한 브랜치 디코더(208)는 프로그램 순서상 첫번째 로컬 브랜치 명령어를 갖는 레인에 선행한 레인에 있어서 페치 퀀텀(296) 내의 비로컬 브랜치의 수를 결정하고 그 수를 신호 num_non-local_br(282)로 호출/반환 유닛(222)에 출력한다. 또 브랜치 디코더(208)는 프로그램 순서상 첫번째 로컬 브랜치 명령어가 호출 명령어인지의 여부를 결정하고, 그렇다면, 호출/반환 유닛(222)에 제공되는 푸시 신호(284)를 어서트한다. 또한 브랜치 디코더(208)는 프로그램 순서상 첫번째 로컬 브랜치 명령어가 반환 명령어인지의 여부를 결정하고, 그렇다면, 호출/반환 유닛(222)에 제공되는 팝 신호(286)를 어서트한다.
또 브랜치 디코더(208)는 큐(212)에 기록되어야 하는 페치 퀀텀(296) 내의 명령어의 수를 나타내는 신호 num_valid_instrs(288)를 큐 컨트롤러(214)에 제공한다. 보다 구체적으로, num_valid_instrs(288) 값이 N이면, 브랜치 디코더(208)에 의해 제공되는 제1 N 마이크로코드 명령어(274)가 큐(212)에 기록된다. 큐 컨트롤러(214)는 큐(212)에 제공된 라이트 포인터(244)(write pointer)에 의해 명시되는 큐(212) 내의 위치에 마이크로코드 명령어(274)를 기록하는 것을 제어한다. 큐 컨트롤러(214)는 현재의 라이트 포인터(244) 값을, num_valid_instrs(288) 모듈로 큐(212)의 사이즈, 즉 큐(212) 내의 엔트리의 수만큼 증분시켜 라이트 포인터(244)를 업데이트한다. 마지막으로, 브랜치 디코더(208)는 프로그램 순서상 첫번째 로컬 브랜치 명령어의 타겟 어드레스(266)를 어드레스 생성기(206)에 제공한다. num_valid_instrs(288)는, 프로그램 순서상 첫번째 로컬 브랜치 명령어를 포함하지 않는 그 이전의, 페치 퀀텀(296) 내의 명령어의 수이다. 따라서, 로컬 브랜치 명령어가 없다면, num_valid_instrs(288)는 4이고, 프로그램 순서상 첫번째 로컬 브랜치 명령어가 레인 3에 있다면, num_valid_instrs(288)는 3이고, 프로그램 순서상 첫번째 로컬 브랜치 명령어가 레인 2에 있다면, num_valid_instrs(288)는 2이며, 프로그램 순서상 첫번째 로컬 브랜치 명령어가 레인 1에 있다면, num_valid_instrs(288)는 1이고, 프로그램 순서상 첫번째 로컬 브랜치 명령어가 레인 0에 있다면, num_valid_instrs(288)는 제로이다. 이에, 브랜치 디코더(208)가 페치 퀀텀(296)에서 로컬 브랜치 명령어를 검출하면, 그 디코더는 효과적으로, 프로그램 순서상 첫번째 로컬 브랜치 명령어를 포함한 그 이후의 마이크로코드 명령어(274)는 버리는데(throw away), 즉 이 마이크로코드 명령어가 큐(212)에 기록되지 않게 한다.
브랜치 디코더(208)를 마이크로코드 ROM(202)와 큐(212) 사이에 기능적으로 배치시켜 브랜치 디코더로 하여금 페치 퀀텀(296)을 큐(212)에 기록되기 전에 디코딩하게 하는 것은, 브랜치 디코더(208)를 큐(212) 다음에 기능적으로 배치시키는 것보다 유리하다. 첫째, 이러한 배치는 프로그램 순서상 첫번째 로컬 브랜치 명령어를 포함하지 않는 그 이전까지만 페치 퀀텀(296)의 마이크로코드 명령어를 큐(212)에 기록할 수 있게 하고, 프로그램 순서상 첫번째 로컬 브랜치 명령어에 이어지는 마이크로코드 명령어는 큐(212)에 기록되지 않게 할 수 있다. 이 방법은 전력을 절약할 수 있다. 부가적으로, 브랜치 디코더(208)가 로컬 브랜치를 디코딩한 경우에는 큐(212)의 성능 낭비 플러시(performance-diminishing flush)를 해야 하는 필요를 피할 수 있다.
큐(212)는 마이크로코드 명령어(274)의 풀 상태일 때에 풀(FULL)(264)을 어드레스 생성기(206)에 어서트하여, 어드레스 생성기(206)가 마이크로코드 ROM(212)으로부터 명령어를 페치하는 것을 정지하게 한다. 그러나, 바람직하게는, 큐(212)가 풀 상태가 아니라면, 어드레스 생성기(206)는, 예컨대 실행 파이프라인(192)이 멎어서, 실행 파이프파인(192)이 명령어 변환기(104)로부터 마이크로명령어(138)를 수신하는 데에 이용 불가능하더라도, 계속해서 페치하고 큐(212)를 마이크로코드 명령어(274)로 채우려고 시도할 수 있다. 부가적으로, 큐(212)는 마이크로코드 유닛(156) 파이프라인의 길이와 연관된 성능 패널티를 감소시킬 수 있는데, 일 실시형태에서는 4개의 파이프라인 스테이지를 포함하며, 이에 변환된 마이크로명령어(134)를 실행 파이프라인(192)에 제공하는 데에 마이크로코드 ROM(212)의 액세스로부터 4 클록 사이클을 발생시킨다.
큐(212)는 마이크로코드 명령어(274)의 엠프티 상태일 때에 엠프티(EMPTY)(262)를 어드레스 생성기(216)에 어서트하여, 마이크로코드 변환기(216)가 마이크로코드 명령어(276)를 도 1의 마이크로명령어(134)로 변환하는 것을 정지하게 한다. 그러나, 바람직하게는, 큐(212)가 엠프티 상태가 아니라면, 마이크로코드 변환기(216)는 매 클록 사이클마다 큐(212)로부터 마이크로코드 명령어(276)를 판독하여 이들 명령어는 마이크로명령어(134)로 변환한다. 바람직하게는, 큐(212)는 마이크로코드 명령어(276)의 각각과 함께, 그 각각의 마이크로코드 명령어(276)가 유효한지의 여부를 나타내어 마이크로코드 변환기(216)가 무효 마이크로코드 명령어(276)를 변환하지 않게 하는 유효 신호를 제공한다. 예를 들어, 큐(212)가 2개의 마이크로코드 명령어(276)만 포함하면, 큐(212)는 이들 명령어는 레인 0, 1에 제공하고 레인 0, 1과 연관된 유효 신호를 어서트하지만, 레인 2, 3과 연관된 유효 신호는 어서트해제(de-assert)한다. 바람직하게는, 큐 컨트롤러(214)는 후술하는 바와 같이, 큐(212) 내의 마이크로코드 명령어(276)의 수를, 라이트 포인터(244) 값에서 리드 포인터(read pointer)(242) 값을 뺀 차이로서 결정한다.
마이크로코드 변환기(216)는 소정의 클록 사이클에서 마이크로명령어(134)로 변환된 마이크로코드 명령어(276)의 수를 나타내는 num_translated 신호(246)를 큐 컨트롤러(214)에 제공한다. 큐 컨트롤러(214)는 큐(212)에 제공된 리드 포인터(242)에 의해 명시되는 큐(212) 내의 위치로부터의 마이크로코드 명령어(276)의 판독을 제어한다. 큐 컨트롤러(214)는 현재의 리드 포인터(242) 값을, num_translated 신호(246) 값 모듈로 큐(212)의 사이즈, 즉 큐(212) 내의 엔트리의 수만큼 증분시켜 리드 포인터(242)를 업데이트한다.
일 실시형태에 있어서, 마이크로코드 명령어(276)는 그 마이크로코드 명령어(276)의 복잡도에 따라 1개 내지 4개의 마이크로명령어로 변환될 수 있다. 바람직하게는, 4개의 마이크로코드 변환기(216)가 존재하며, 그 각각은 마이크로코드 명령어(276)를 상이한 개수의 마이크로명령어로 변환시킬 수 있다. 바람직하게는, 레인 0의 변환기(216)는 임의의 타입의 마이크로코드 명령어(276)를 필요한 개수의 마이크로명령어, 즉 최대 4개로 변환할 수 있고, 레인 1의 변환기(216)는 1개 내지 3개의 마이크로코드 명령어(276)를 필요로 하는 마이크로코드 명령어(276)의 타입을 변환할 수 있으며, 레인 2의 변환기(216)는 1개 내지 2개의 마이크로코드 명령어(276)를 필요로 하는 마이크로코드 명령어(276)의 타입을 변환할 수 있고, 레인 3의 변환기(216)는 단 하나의 마이크로코드 명령어(276)를 필요로 하는 마이크로코드 명령어(276)의 타입을 변환할 수 있다. 마이크로코드 변환기(216)는, 4개의 마이크로코드 변환기(216)의 출력을 수신하여 도 1의 먹스(152)에 마이크로명령어(134)로서 제공할 유효 마이크로명령어를 선택하는 먹스 매트릭스(도시 생략)를 포함한다. 이에, 예컨대, 소정의 클록 사이클에서, 레인 0의 마이크로코드 변환기(216)는 단일 마이크로명령어(134)로 변환해야 하는 마이크로코드 명령어(276)를 직면할 수 있고, 레인 1의 마이크로코드 변환기(216)는 4개의 마이크로명령어(134)로 변환해야 하는 마이크로코드 명령어(276)를 직면할 수 있는데, 마이크로코드 변환기(216)가 레인 0에서의 마이크로코드 명령어(276)로부터 변환된 단일 마이크로명령어(134)만 제공할 경우에는 마이크로명령어(134)에 대한 3개의 잔여 슬롯이, 4개가 아니라 3개뿐이기 때문이다. 그러나, 바람직하게는, 마이크로코드 명령어 큐(212)는 마이크로코드 명령어의 스트림 내에서의 복잡도의 가변성 및 그 스트림 내에서의 서로에 대한 가변의 복잡한 마이크로코드 명령어의 위치 때문에 매 클록 사이클마다 변환되는 마이크로코드 명령어의 수의 가변성 영향을 잠재적으로 개선하는 버퍼를 제공한다.
호출/반환 유닛(222)은 추측 포인터(speculative pointer)(258), 비추측 포인터(non-speculative pointer)(256), 복수의 호출/반환 스택(254), 및 호출/반환 스택(254)과 연관된 대응하는 복수의 카운터(252)를 포함한다. 추측 포인터(258)는 현재의 호출/반환 스택(354), 즉 호출/반환 마이크로코드 명령어에 응답하여 반환 어드레스(266)가 푸시/팝되는 호출/반환 스택(365)을 가리킨다. 추측 포인터(258)는 또한 현재의 호출/반환 스택(254)과 연관된 카운터(252)를 가리킨다. 비추측 포인트(256)는 비추측 호출/반환 스택(254)과, 마이크로코드 유닛(156)이 비로컬 브랜치 명령어가 실행 파이프라인(192)에 의해 취해질 것으로 분석되는 경우, 즉 마이크로코드 유닛(156)에 의해 취해지지 않을 것으로 암시적으로 정확하지 않게 예측되면, 마이크로코드 유닛(156)이 복귀하는 비추측 호출/반환 스택(254)을 가리킨다. 즉, 비추측 호출/반환 스택(254)은 프로세서(100)에서 미분석된 비로컬 브랜치 명령어가 없는 경우에 브랜치 디코더(208)가 직면하는 호출 명령어와 연관된 반환 어드레스를 보유한다. 이 경우에, 추측 포인터(258)는 비추측 포인터(256)의 값으로 로딩되고, 즉 비추측 호출/반환 스택(254)을 가리키도록 업데이트된다.
각각의 카운터(252)는 대응하는 호출/반환 스택(254)이 할당된 이후로 브랜치 디코더(208)가 직면한 비로컬 브랜치 명령어의 수를 계수한다. 호출/반환 유닛(222)은 브랜치 디코더(208)가 하나 이상의 비로컬 브랜치 명령어를 직면한 이후에 제1 호출/반환 명령어를 직면할 때에(즉, 브랜치 디코더(208)가 푸시(284)/팝(286)을 어서트할 때에), 현재의 카운터(252) 값에 의해 비제로가 표시되는 새로운 호출/반환 스택(254)을 할당한다. 이 경우에, 호출/반환 유닛(222)은 현재의 호출/반환 스택(254)의 내용을 새롭게 할당된 호출/반환 스택(254)에 카피하고, 새롭게 할당된 호출/반환 스택(254)을 가리키도록 추측 포인터(258)를 업데이트하여, 반환 어드레스를 호출/반환 스택에 대해 푸시/팝하기 전에 호출/반환 스택(254)을 형성한다. 새롭게 할당된 호출/반환 스택(254)과 연관된 카운터(252)는 제로로 클리어된다. 호출/반환 명령어에 선행하는 하나 이상의 비로컬 브랜치 명령어가 동일한 페치 퀀텀(296)에 존재할 수 있는데, 이 경우에 호출/반환 유닛(222)은 현재의 카운터(252)를 증분시키고 또한 반환 어드레스를 푸시/팝하는 새로운 호출/반환 스택(254)을 할당한다. 실행 파이프라인(192)이 비로컬 브랜치 명령어를 분석할 때마다, 호출/반환 유닛(222)은 비추측 카운터(252)를 감소시킨다. 비추측 카운터(252)가 제로로 감소하면, 이것은 비추측 호출/반환 스택(254)과 연관된 미분석 비로컬 브랜치 명령어가 더이상 없어서, 호출/반환 유닛(222)이 비추측 포인터(256)를, 다음 호출/반환 스택(254)를 가리키도록 증분시키는 것을 나타낸다.
일 실시형태에 있어서, 호출/반환 유닛(222)은 모든 목적을 위해 참조로 본 명세서에 포함되는 미국 특허 제7,975,132호에서 설명하는 마이크로코드 유닛의 고속 호출/반환 스택 유닛과 같은 방식으로 동작하지만, 클록 사이클마다 단일 마이크로코드 명령어보다는, 마이크로코드 ROM으로부터 클록 사이클마다 다수의 마이크로코드 명령어를 페치하는 것을 도모하도록 변형된다. 보다 구체적으로, 브랜치 디코더(208)는 전술한 바와 같이 페치 퀀텀(296)에서의 프로그램 순서상 첫번째 로컬 브랜치 명령어 이전의 비로컬 브랜치 명령어의 수를 검출하고, 호출/반환 유닛(222)은 현재 카운터(252)를 1이 아니라 그 수만큼 증분시킨다.
바람직하게는, 마이크로코드 유닛(156)은 마이크로코드를 패치(patch)하기 위해, 패치 RAM(random access memory)(도시 생략)과, 시스템 소프트웨어에 의해(예컨대, BIOS 또는 운영체체, 예컨대, x86 라이트 모델 특유의 레지스터(WRMSR, write model specific register) 구조적 명령어를 통해) 기록될 수 있는 패치 CAM(content-addressable memory)를 포함한다. 패치 CAM은 페치 어드레스(268)와 그것의 3개의 증분된 값을 수신한다. 페치 어드레스(268) 또는 그것의 증분된 값들 중 임의의 값이 패치 CAM 내의 어드레스와 맞으면, 패치 CAM은 어드레스를 패치 RAM에 제공한다. 이에 대해, 패치 RAM은 마이크로코드 명령어를 선택하고, 먹스(도시 생략)는 마이크로코드 ROM(202)으로부터의 마이크로코드 명령어(272)보다는 패치 RAM으로부터의 마이크로코드 명령어를 선택한다.
실시형태에서는 클록 사이클마다 마이크로코드 ROM(202)으로부터 페치된 마이크로코드 명령어(272)의 수가 4인 것으로 설명하고 있지만, 다른 실시형태에서는 그 수가 적어도 2라 하더라도, 4보다 많거나 적은 것이 고려된다. 부가적으로, 실시형태에서는 클록 사이클마다 마이크로코드 변환기(216)에 의해 변환된 마이크로코드 명령어(276)의 수가 최대 4인 것으로 설명하고 있지만, 다른 실시형태에서는 그 수가 적어도 2라 하더라도, 4보다 많거나 적은 것이 고려된다. 마지막으로, 실시형태에서는 클록 사이클마다 명령어 변환기(104)에 의해 실행 파이프라인(192)에 제공되는 마이크로명령어(134)의 수가 최대 4인 것으로 설명하고 있지만, 다른 실시형태에서는 그 수가 적어도 2라 하더라도, 4보다 많거나 적은 것이 고려된다.
이제 도 3을 참조하면, 도 2의 마이크로코드 유닛(156)의 동작을 예시하는 흐름도가 도시된다. 흐름은 블록 302에서 시작된다.
블록 302에서, 어드레스 생성기(206)는 페치 어드레스(268)를 마이크로코드 ROM(202)에 제공하고, 이에 응답하여 마이크로코드 ROM(202)이 4개의 마이크로코드 명령어(272)의 페치 퀀텀(296)을 브랜치 디코더(208)에 제공한다. 흐름은 블록 304로 진행한다.
블록 304에서, 브랜치 디코더(208)는 페치 퀀텀(296)을 디코딩하여, 있다면, 로컬 및 비로컬 브랜치 명령어를 검출한다. 흐름은 블록 306으로 진행한다.
블록 306에서, 브랜치 디코더(208)는 프로그램 순서상 첫번째 로컬 브랜치 명령어 이전에 프로그램 순서에 존재하는 페치 퀀텀(296) 내의 비로컬 브랜치 명령어의 수 - 제로일 수도 있음 - 를 호출/반환 유닛(222)에 제공한다. 이에 따라, 호출/반환 유닛(222)은 현재 카운터(252)를 그 수만큼 증분시킨다. 흐름은 결정 블록 308로 진행한다.
결정 블록 308에서, 브랜치 디코더(208)는 프로그램 순서상 첫번째 로컬 브랜치 명령어가 호출/반환 명령어인지의 여부를 결정한다. 호출/반환 명령어가 아니라면, 흐름은 블록 314로 진행하고, 호출/반환 명령어라면 흐름은 블록 312로 진행한다.
블록 312에서, 프로그램 순서상 첫번째 로컬 브랜치 명령어가 호출 명령어라면, 브랜치 디코더(208)는 푸시 신호(284)를 호출/반환 유닛(222)에 어서트하고, 이에 응답하여 호출/반환 유닛은 어드레스 생성기(206)에 제공하도록 타겟 어드레스(266)를 현재의 호출/반환 스택(254)에 푸시한다. 그러나, 프로그램 순서상 첫번째 로컬 브랜치 명령어가 반환 명령어라면, 브랜치 디코더(208)는 팝 신호(286)를 호출/반환 유닛(222)에 어서트하고, 이에 응답하여 호출/반환 유닛은 어드레스 생성기(206)에 제공하도록 반환 어드레스(298)를 현재의 호출/반환 스택(254)으로부터 팝한다. 흐름은 블록 314로 진행한다.
블록 314에서, 브랜치 디코더(208)는 마이크로코드 명령어 큐(212)에 대해, 페치 퀀텀(296) 내의 어느 마이크로코드 명령어가 그 큐(212)에 기록되어야 하는지를 알려준다. 보다 구체적으로, 전술한 바와 같이, 프로그램 순서상 첫번째 로컬 브랜치 명령어까지(그러나 이 첫번째 로컬 브랜치 명령어는 포함하지 않음) 페치 퀀텀(296) 내의 마이크로코드 명령어가 큐(212)에 기록된다. 흐름은 블록 316으로 진행한다.
블록 316에서, 브랜치 디코더(208)는, 있다면, 프로그램 순서상 첫번째 로컬 브랜치 명령어를 분석하고 페치 어드레스(268)를 분석된 프로그램 순서상 첫번째 로컬 브랜치 명령어의 타겟 어드레스(266)로 업데이트한다. 그렇지 않다면, 어드레스 생성기(206)는 페치 어드레스(268)를 4씩 증분시킨다. 큐(212)가 풀 상태가 아니라면, 흐름은 블록 302로 진행하여 다음 페치 퀀텀(296)을 큐(212)에 페치한다.
이제 도 4를 참조하면, 도 2의 마이크로코드 유닛(156)의 동작을 예시하는 흐름도가 도시된다. 흐름은 블록 402에서 시작된다.
블록 402에서, 마이크로코드 명령어의 페치 퀀텀(296)이 마이크로코드 ROM(202)으로부터 페치되고, 브랜치 디코더(208)에 의해 디코딩되어 로컬 브랜치 명령어의 경우로 분석되며, 큐(212)에 기록되는, 도 3의 동작과 병행하여, 큐(212)가 엠프티 상태가 아니라면, 마이크로코드 변환기(216)는 큐(212)로부터 마이크로코드 명령어를 판독하고 이들을 마이크로명령어로 변환하여 실행 파이프라인(192)에 제공한다. 흐름은 블록 402에서 종료한다.
본 발명의 다양한 실시형태가 여기에 설명되었지만, 이들 실시형태는 제한이 아니라 예시로서 제시된 것임이 이해될 것이다. 관련 컴퓨터 분야의 종사자에게는 형태 및 세부사항의 다양한 변화가 본 발명의 범주에서 일탈하지 않고서 이루어질 수 있음이 자명할 것이다. 예를 들어, 소프트웨어는 예컨대 여기에 설명하는 장치 및 방법의 기능, 제조, 모델링, 시뮬레이션, 기술(description) 및/또는 테스팅을 가능하게 할 수 있다. 이것은 일반 프로그래밍 언어(예컨대, C, C++), 베릴로그(Verilog) HDL(hardware description language), VHDL 등등을 비롯한 하드웨어 기술 언어(HDL), 또는 기타 이용 가능한 프로그램을 사용해서 달성될 수 있다. 이러한 소프트웨어는 자기 테이프, 반도체, 자기 디스크, 또는 광디스크(예컨대, CD-ROM, DVD-ROM 등), 네트워크, 배선, 또는 기타 통신 매체 등의 임의의 알려진 컴퓨터 가용 매체 내에 배치될 수 있다. 여기에 설명한 장치 및 방법의 실시형태는 프로세서 코어(예컨대, HDL로 구체화되거나 명시됨) 등의 반도체 지적재산 핵심(intellectual property core)에 포함되며, 집적 회로의 제조로 하드웨어로 변형될 수도 있다. 따라서, 본 명세서에서 설명한 장치 및 방법은 하드웨어와 소프트웨어의 조합으로서 구체화될 수 있다. 이에, 본 발명은 본 명세서에서 설명한 예시적인 실시형태의 어느 것에도 한정되는 것이 아니라, 다음의 청구범위 및 그 균등물에 따라서만 정의되어야 한다. 구체적으로, 본 발명은 범용 컴퓨터에서 이용될 수 있는 프로세서 디바이스 내에서 구현될 수 있다. 마지막으로, 당업자라면, 첨부하는 청구범위에서 정해지는 본 발명의 범주에서 벗어나는 일 ?是? 본 발명의 동일한 목적을 달성하기 위한 다른 구조를 설계 또는 변형하기 위한 기초로서, 개시하는 개념 및 특정 실시형태를 용이하게 이용할 수 있음이 이해될 것이다.

Claims (15)

  1. 명령어 세트 아키텍처(instruction set architecture, ISA)를 구비한 프로세서에 있어서,
    마이크로명령어(microinstruction)를 실행하는 복수의 실행 유닛을 구비한 실행 파이프라인과,
    상기 ISA에 의해 정의되는 구조적 명령어(architectural instruction)를 상기 마이크로명령어로 변환하는 명령어 변환기(instruction translator)
    를 포함하고,
    상기 명령어 변환기는,
    마이크로코드 명령어(microcode instruction)를 유지하며, 어드레스에 응답하여 클록 사이클마다 복수의 마이크로코드 명령어를 제공하는 메모리와,
    상기 메모리에 의해 제공되는 마이크로코드 명령어를 유지하는 큐와,
    상기 메모리와 상기 큐 사이에 연결되는 브랜치 디코더로서, 상기 브랜치 디코더는, 상기 메모리에 의해 제공되는 복수의 마이크로코드 명령어를 디코딩하여, 상기 복수의 마이크로코드 명령어 중에서 하나 이상의 로컬 브랜치 명령어(local branch instruction)를 검출하고, 상기 하나 이상의 로컬 브랜치 명령어의 프로그램 순서상 첫번째(first-in-program-order) 로컬 브랜치 명령어까지(그러나 이 첫번째 로컬 브랜치 명령어는 포함하지 않음) 상기 복수의 마이크로코드 명령어의 마이크로코드 명령어가 상기 큐에 기록되게 하며, 상기 프로그램 순서상 첫번째 로컬 브랜치 명령어와, 상기 복수의 마이크로코드 명령어의 이어지는 마이크로코드 명령어가 상기 큐에 기록되지 못하게 하고, 로컬 브랜치 명령어는 상기 실행 파이프라인보다는 상기 명령어 변환기에 의해 분석되는(resolved) 것인, 상기 브랜치 디코더와,
    클록 사이클마다 상기 큐로부터 수신되는 복수의 마이크로코드 명령어를, 상기 실행 파이프라인에 제공하도록 복수의 마이크로명령어로 변환하는 복수의 마이크로코드 변환기
    를 포함하는 것인 프로세서.
  2. 제1항에 있어서,
    클록 사이클마다 상기 메모리에 의해 제공되는 복수의 마이크로코드 명령어는 적어도 4개인 것인 프로세서.
  3. 제1항에 있어서,
    상기 명령어 변환기는, 상기 브랜치 디코더에 의해 디코딩되었던 호출 명령어 - 대응하는 반환 명령어는 아직 상기 브랜치 디코더에 의해 디코딩되지 않음 - 와 연관된 반환 어드레스를 유지하는 복수의 호출/반환 스택을 구비한 호출/반환 유닛을 더 포함하며,
    상기 프로그램 순서상 첫번째 로컬 브랜치 명령어가 호출/반환 명령어일 경우에, 상기 브랜치 디코더는 상기 호출/반환 유닛에, 상기 복수의 호출/반환 스택 중 현재의 호출/반환 스택에/으로부터 반환 어드레스를 푸시(push)/팝(pop)하도록 지시하는 것인 프로세서.
  4. 제3항에 있어서,
    상기 호출/반환 유닛은 상기 복수의 호출/반환 스택에 대응하는 복수의 카운터를 더 포함하고, 상기 복수의 카운터의 각각의 카운터는, 상기 복수의 호출/반환 스택 중 대응하는 호출/반환 스택이 상기 복수의 호출/반환 스택 중 현재의 호출/반환 스택인 동안, 상기 실행 파이프라인에 의해 아직 분석되지는 않지만 상기 브랜치 디코더에 의해 디코딩된 비로컬(non-local) 브랜치 명령어의 카운트를 유지하고,
    상기 브랜치 디코더는 상기 복수의 마이크로코드 명령어 내에서 상기 프로그램 순서상 첫번째 로컬 브랜치 명령어에 선행하는 비로컬 브랜치 명령어의 수를 계수하며, 상기 호출/반환 유닛은 상기 복수의 호출/반환 스택 중 현재의 호출/반환 스택에 대응하는 상기 복수의 카운터 중 하나의 카운터에 계수된 수를 더하고, 비로컬 브랜치 명령어는 상기 명령어 변환기보다는 상기 실행 파이프라인에 의해 분석되는 것인 프로세서.
  5. 제1항에 있어서,
    어드레스에 응답하여 클록 사이클마다 상기 메모리에 의해 제공되는 복수의 마이크로코드 명령어는 N개의 마이크로코드 명령어이고,
    상기 메모리는 N개의 뱅크를 포함하며, 상기 N개의 뱅크의 각각의 뱅크는 단일 판독 포트를 구비하고,
    상기 N개의 뱅크 중 제1 뱅크는 상기 어드레스에 응답하여 상기 복수의 마이크로코드 명령어 중 첫번째를 제공하며,
    나머지 N개의 뱅크의 각각의 뱅크는 상기 어드레스의 각각의 증분된 버전에 응답하여 상기 복수의 마이크로코드 명령어의 각각의 마이크로코드 명령어를 제공하는 것인 프로세서.
  6. 제1항에 있어서,
    매 클록 사이클마다 마이크로코드 명령어가 기록되는 상기 큐의 위치를 가리키는 라이트 포인터(write pointer)와,
    매 클록 사이클마다 상기 라이트 포인터를 상기 큐에 기록되는 마이크로코드 명령어의 수만큼 증분시키는 큐 컨트롤러
    를 더 포함하는 프로세서.
  7. 제1항에 있어서,
    상기 복수의 마이크로코드 변환기가 마이크로코드 명령어를 판독하는 상기 큐의 위치를 가리키는 리드 포인터(read pointer)와,
    매 클록 사이클마다 상기 리드 포인터를 상기 복수의 마이크로코드 변환기에 의해 변환되는 마이크로코드 명령어의 수만큼 증분시키는 큐 컨트롤러
    를 더 포함하는 프로세서.
  8. 제1항에 있어서,
    상기 프로세서는 x86 ISA 프로세서인 것인 프로세서.
  9. 제1항에 있어서,
    상기 명령어 변환기는, 상기 실행 파이프라인이 상기 명령어 변환기로부터 마이크로명령어를 수신하는 데에 현재 이용 불가능하더라도, 상기 큐가 풀 상태(full)가 될 때까지 상기 큐에 제공하도록 상기 메모리로부터 마이크로코드 명령어를 페치(fetch)하는 것을 계속하도록 구성되는 것인 프로세서.
  10. 제1항에 있어서,
    상기 복수의 마이크로코드 명령어는 로컬 브랜치 명령어를 포함하고, 상기 어드레스는 상기 프로그램 순서상 첫번째 로컬 브랜치 명령어에 의해 명시되는 타겟 어드레스로 업데이트되는 것인 프로세서.
  11. 제1항에 있어서,
    상기 복수의 마이크로코드 명령어에 로컬 브랜치 명령어가 없는 경우에, 상기 어드레스는 N만큼 증분되며, 여기서 N은 클록 사이클마다 상기 메모리에 의해 제공되는 복수의 마이크로코드 명령어의 수인 것인 프로세서.
  12. 제1항에 있어서,
    상기 복수의 마이크로코드 변환기 각각은 마이크로코드 명령어를 상이한 최대 수의 마이크로명령어로 변환하도록 구성되는 것인 프로세서.
  13. 프로세서의 명령어 세트 아키텍처(ISA)에 의해 정의되는 구조적 명령어를, 복수의 실행 유닛을 구비한 실행 파이프라인에 의해 실행하도록 마이크로명령어로 변환하는 방법에 있어서,
    메모리에 의해, 어드레스에 응답하여 클록 사이클마다 복수의 마이크로코드 명령어를 제공하는 단계와,
    상기 메모리와 큐 사이에 연결된 브랜치 디코더에 의해, 상기 메모리에 의해 제공되는 복수의 마이크로코드 명령어를 디코딩하여, 상기 복수의 마이크로코드 명령어 중에서 하나 이상의 로컬 브랜치 명령어를 검출하는 단계와,
    상기 하나 이상의 로컬 브랜치 명령어의 프로그램 순서상 첫번째 로컬 브랜치 명령어까지(그러나 이 첫번째 로컬 브랜치 명령어는 포함하지 않음) 상기 복수의 마이크로코드 명령어의 마이크로코드 명령어가 상기 큐에 기록되게 하고, 상기 프로그램 순서상 첫번째 로컬 브랜치 명령어와, 상기 복수의 마이크로코드 명령어의 이어지는 마이크로코드 명령어가 상기 큐에 기록되지 못하게 하는 단계 - 로컬 브랜치 명령어는 상기 실행 파이프라인보다는 상기 브랜치 디코더에 의해 분석됨 - 와,
    복수의 마이크로코드 변환기에 의해, 클록 사이클마다 상기 큐로부터 수신되는 복수의 마이크로코드 명령어를, 상기 실행 파이프라인에 제공하도록 복수의 마이크로명령어로 변환하는 단계
    를 포함하는 구조적 명령어 변환 방법.
  14. 제13항에 있어서,
    클록 사이클마다 상기 메모리에 의해 제공되는 복수의 마이크로코드 명령어는 적어도 4개인 것인 구조적 명령어 변환 방법.
  15. 제13항에 있어서,
    상기 프로세서는, 상기 브랜치 디코더에 의해 디코딩되었던 호출 명령어 - 대응하는 반환 명령어는 아직 상기 브랜치 디코더에 의해 디코딩되지 않음 - 와 연관된 반환 어드레스를 유지하는 복수의 호출/반환 스택을 구비한 호출/반환 유닛을 더 포함하고,
    상기 프로그램 순서상 첫번째 로컬 브랜치 명령어가 호출/반환 명령어일 경우에,
    상기 브랜치 디코더에 의해, 상기 호출/반환 유닛에, 상기 복수의 호출/반환 스택 중 현재의 호출/반환 스택에/으로부터 반환 어드레스를 푸시/팝하도록 지시하는 단계를 더 포함하는 구조적 명령어 변환 방법.
KR1020160154923A 2016-09-30 2016-11-21 로컬 브랜치 디코더를 구비한 멀티이슈 마이크로코드 유닛을 포함하는 파이프라인형 프로세서 KR102601858B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201610875658.6 2016-09-30
CN201610875658.6A CN106406814B (zh) 2016-09-30 2016-09-30 处理器和将架构指令转译成微指令的方法

Publications (2)

Publication Number Publication Date
KR20180036490A true KR20180036490A (ko) 2018-04-09
KR102601858B1 KR102601858B1 (ko) 2023-11-13

Family

ID=57256176

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160154923A KR102601858B1 (ko) 2016-09-30 2016-11-21 로컬 브랜치 디코더를 구비한 멀티이슈 마이크로코드 유닛을 포함하는 파이프라인형 프로세서

Country Status (6)

Country Link
US (1) US10073698B2 (ko)
EP (1) EP3301566B1 (ko)
JP (1) JP6856358B2 (ko)
KR (1) KR102601858B1 (ko)
CN (1) CN106406814B (ko)
TW (1) TWI621065B (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108228239B (zh) * 2016-12-13 2021-04-20 龙芯中科技术股份有限公司 基于快速模拟器qemu的分支指令抓取方法和装置
US20180203703A1 (en) * 2017-01-13 2018-07-19 Optimum Semiconductor Technologies, Inc. Implementation of register renaming, call-return prediction and prefetch
GB2563384B (en) 2017-06-07 2019-12-25 Advanced Risc Mach Ltd Programmable instruction buffering
US11467838B2 (en) * 2018-05-22 2022-10-11 Advanced Micro Devices, Inc. Fastpath microcode sequencer
US11016763B2 (en) 2019-03-08 2021-05-25 Advanced Micro Devices, Inc. Implementing a micro-operation cache with compaction
US10929129B2 (en) * 2019-06-29 2021-02-23 Intel Corporation Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions
US11016766B2 (en) 2019-06-29 2021-05-25 Intel Corporation Apparatus and method for compiler hints for inter-core offload
US11321144B2 (en) 2019-06-29 2022-05-03 Intel Corporation Method and apparatus for efficiently managing offload work between processing units
US10983796B2 (en) 2019-06-29 2021-04-20 Intel Corporation Core-to-core end “offload” instruction(s)
US11182208B2 (en) 2019-06-29 2021-11-23 Intel Corporation Core-to-core start “offload” instruction(s)
US11030000B2 (en) 2019-06-29 2021-06-08 Intel Corporation Core advertisement of availability
US11372711B2 (en) 2019-06-29 2022-06-28 Intel Corporation Apparatus and method for fault handling of an offload transaction
US11775467B2 (en) * 2021-01-14 2023-10-03 Nxp Usa, Inc. System and method for ordering transactions in system-on-chips
CN113553102B (zh) * 2021-08-11 2022-07-05 成都海光微电子技术有限公司 微码取指方法、微码存储组合产生方法、装置、设备
CN113961247B (zh) * 2021-09-24 2022-10-11 北京睿芯众核科技有限公司 一种基于risc-v处理器的向量存/取指令执行方法、系统及装置
CN114090077B (zh) * 2021-11-24 2023-01-31 海光信息技术股份有限公司 调取指令的方法及装置、处理装置及存储介质
US11995443B2 (en) * 2022-10-04 2024-05-28 Microsoft Technology Licensing, Llc Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor
CN115525344B (zh) * 2022-10-31 2023-06-27 海光信息技术股份有限公司 一种译码方法、处理器、芯片及电子设备
CN115629807B (zh) * 2022-10-31 2023-04-14 海光信息技术股份有限公司 多线程处理器的译码方法、处理器、芯片及电子设备
CN117008977B (zh) * 2023-08-08 2024-03-19 上海合芯数字科技有限公司 一种可变执行周期的指令执行方法、系统和计算机设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4494195A (en) * 1981-12-02 1985-01-15 Hitachi, Ltd. Microinstruction controlled data processor
US5964869A (en) * 1997-06-19 1999-10-12 Sun Microsystems, Inc. Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US6195744B1 (en) * 1995-10-06 2001-02-27 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscaler processor
US20100228952A1 (en) * 2009-03-04 2010-09-09 Via Technologies, Inc. Apparatus and method for fast correct resolution of call and return instructions using multiple call/return stacks in the presence of speculative conditional instruction execution in a pipelined microprocessor

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6094716A (en) * 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6338136B1 (en) * 1999-05-18 2002-01-08 Ip-First, Llc Pairing of load-ALU-store with conditional branch
US6691305B1 (en) * 1999-11-10 2004-02-10 Nec Corporation Object code compression using different schemes for different instruction types
US6766441B2 (en) * 2001-01-19 2004-07-20 International Business Machines Corporation Prefetching instructions in mis-predicted path for low confidence branches
US6968446B1 (en) * 2001-08-09 2005-11-22 Advanced Micro Devices, Inc. Flags handling for system call instructions
US6898697B1 (en) * 2002-03-29 2005-05-24 Advanced Micro Devices, Inc. Efficient method for mode change detection and synchronization
US9977674B2 (en) * 2003-10-14 2018-05-22 Intel Corporation Micro-operation generator for deriving a plurality of single-destination micro-operations from a given predicated instruction
US20090260013A1 (en) * 2008-04-14 2009-10-15 International Business Machines Corporation Computer Processors With Plural, Pipelined Hardware Threads Of Execution
US7802078B2 (en) * 2008-09-09 2010-09-21 Via Technologies, Inc. REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat
US8521996B2 (en) * 2009-02-12 2013-08-27 Via Technologies, Inc. Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution
CN101866279B (zh) * 2009-08-14 2012-05-30 威盛电子股份有限公司 微处理器及其相关方法
EP2508979B1 (en) * 2011-04-07 2018-10-10 VIA Technologies, Inc. Efficient conditional alu instruction in read-port limited register file microprocessor
CN102707988B (zh) * 2011-04-07 2015-09-09 威盛电子股份有限公司 微处理器及其操作方法
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US8959320B2 (en) * 2011-12-07 2015-02-17 Apple Inc. Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis
US9898418B2 (en) * 2015-05-21 2018-02-20 Via Alliance Semiconductor Co., Ltd. Processor including single invalidate page instruction

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4494195A (en) * 1981-12-02 1985-01-15 Hitachi, Ltd. Microinstruction controlled data processor
US6195744B1 (en) * 1995-10-06 2001-02-27 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscaler processor
US5964869A (en) * 1997-06-19 1999-10-12 Sun Microsystems, Inc. Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US20100228952A1 (en) * 2009-03-04 2010-09-09 Via Technologies, Inc. Apparatus and method for fast correct resolution of call and return instructions using multiple call/return stacks in the presence of speculative conditional instruction execution in a pipelined microprocessor

Also Published As

Publication number Publication date
TWI621065B (zh) 2018-04-11
EP3301566A1 (en) 2018-04-04
TW201814501A (zh) 2018-04-16
EP3301566B1 (en) 2023-05-10
CN106406814B (zh) 2019-06-14
JP2018060491A (ja) 2018-04-12
US10073698B2 (en) 2018-09-11
JP6856358B2 (ja) 2021-04-07
KR102601858B1 (ko) 2023-11-13
US20180095753A1 (en) 2018-04-05
CN106406814A (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
KR102601858B1 (ko) 로컬 브랜치 디코더를 구비한 멀티이슈 마이크로코드 유닛을 포함하는 파이프라인형 프로세서
US5761476A (en) Non-clocked early read for back-to-back scheduling of instructions
US9213551B2 (en) Return address prediction in multithreaded processors
JP5850532B2 (ja) アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア比較ハザードの予測及び回避
US5805853A (en) Superscalar microprocessor including flag operand renaming and forwarding apparatus
EP1296229B1 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
US10310859B2 (en) System and method of speculative parallel execution of cache line unaligned load instructions
JP2014002735A (ja) ゼロサイクルロード
EP3321811B1 (en) Processor with instruction cache that performs zero clock retires
JPH0334024A (ja) 分岐予測の方法とそのための装置
US11099850B2 (en) Branch prediction circuitry comprising a return address prediction structure and a branch target buffer structure
US12008375B2 (en) Branch target buffer that stores predicted set index and predicted way number of instruction cache
US12014178B2 (en) Folded instruction fetch pipeline
US20230401066A1 (en) Dynamically foldable and unfoldable instruction fetch pipeline
CN113535236A (zh) 基于指令集体系结构的和自动的加载跟踪的方法和装置
WO2022026578A1 (en) Method and apparatus for back end gather/scatter memory coalescing
US10789169B2 (en) Apparatus and method for controlling use of a register cache
EP1296228B1 (en) Instruction Issue and retirement in processor having mismatched pipeline depths
CN111133421A (zh) 在无地址转换的情况下操作的加载存储单元中处理有效地址同义词
EP3321810B1 (en) Processor with instruction cache that performs zero clock retires
US5895497A (en) Microprocessor with pipelining, memory size evaluation, micro-op code and tags
JP2001356905A (ja) スタックに基づいたパイプライン型プロセッサにおけるレジスタ依存性を取扱うシステム及び方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant