KR100631318B1 - 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령을 처리하기 위한 방법 및 명령어 디코더 - Google Patents
파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령을 처리하기 위한 방법 및 명령어 디코더 Download PDFInfo
- Publication number
- KR100631318B1 KR100631318B1 KR1020027003878A KR20027003878A KR100631318B1 KR 100631318 B1 KR100631318 B1 KR 100631318B1 KR 1020027003878 A KR1020027003878 A KR 1020027003878A KR 20027003878 A KR20027003878 A KR 20027003878A KR 100631318 B1 KR100631318 B1 KR 100631318B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- processor
- jump
- condition
- conditional jump
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 21
- 238000000034 method Methods 0.000 title claims abstract description 14
- 230000008569 process Effects 0.000 claims description 7
- 230000009191 jumping Effects 0.000 claims 1
- 230000006870 function Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000006073 displacement reaction Methods 0.000 description 3
- 238000011022 operating instruction Methods 0.000 description 3
- 230000007423 decrease Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 102100036464 Activated RNA polymerase II transcriptional coactivator p15 Human genes 0.000 description 1
- 101000713904 Homo sapiens Activated RNA polymerase II transcriptional coactivator p15 Proteins 0.000 description 1
- 241000761456 Nops Species 0.000 description 1
- 229910004444 SUB1 Inorganic materials 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000009849 deactivation Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 108010020615 nociceptin receptor Proteins 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
본 발명은 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령어를 처리하기 위한 방법 및 장치에 관한 것이다. 조건 점프 명령어가 실행될지에 대한 조건을 가리키는 하나 이상의 부수적인 비트들이 조건 점프가 실행되는 것을 가리키는 각각의 명령어에 부가된다. 본 발명에 따른 장치는 조건 점프를 실행하기 위한 부수적인 비트에 따른 프로그램 카운터의 계수를 변경하기 위한 소자를 구비할 수 있다.
프로그램 메모리, 멀티플렉서, 프로그램 카운터, LOOP 플래그, 논리 게이트, 멀티플렉서, 프로세서, 제어 신호, 점프 명령어, 명령어 디코더, 레지스터, 산술논리 유닛
Description
본 발명은 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령어(conditional jump instruction)를 처리하기 위한 방법 및 장치에 관한 것이다.
특정 명령어를 실행하는데 필요한 사이클 수는, 프로세서의 가장 중요한 성능 파라메타중의 하나이다. 사이클의 수는 최고 처리 속도와 최소 전력 소비를 달성하기 위해 가능한 한 최소화된다. 파이프라인 아키텍처를 갖는 프로세서는 이러한 목적을 달성하기 위한 기술분야에서 공지되어 있다. 이는, 프로세서가 각각 서로 다른 처리 단계에서 명령어가 존재하면서 동시에 복수의 명령어를 처리한다는 것을 의미한다. 예를 들어, 하나의 명령어는 실행되고 있고, 다음 명령어가 이미 동시에 디코드되고, 다음 그러나 하나의 명령어는 메모리에서 요청된다.
특히, 해저드(hazzard)라고 하는 결과가 되는 조건 점프 명령어 (분기)를 위한 파이프라인 아키텍처에서, 그 결과로서 나쁜 결과가 나올 가능성이 있다. 특히, 조건 점프 명령어의 경우에, 다음 명령어의 어드레스는 이 조건 점프 명령어의 처리 이전에는 고정되지 않는다. 이와 같이, 다음 명령어는, 선행하는 명령어의 실행 결과가 프로세서의 산술논리 유닛으로부터 이용가능할 때에만 메모리로부터 요청되어 디코드될 수 있다.
종래 기술에 따르면, 이와 같은 해저드 문제는 조건 점프 명령어 바로 이후에 많은 더미 명령어(NOP), 즉 비연산 또는 대기 명령어가 어떠한 경우에도 결과가 정확하게 유지할 때 삽입되는 방식으로 해결되고 있다. 그러나, 처리될 필요가 있는 더미 명령어(dummy instruction)로서 그렇게 많은 프로세서 사이클이 이용되지는 않는다.
삭제
M.J. MAHON ET AL.: '휴렛-팩커드 프리시즌 아키텍쳐: 프로세서' 휴렛 팩커드 저널, 휴렛 팩커드 코퍼레이션. 팔로 알토, US, Vol. 37, No. 8, 8월 1일, 1986년(1986-08-01), 페이지 4-33 XP000211314에는 명령어의 파이프 라인 프로세싱을 갖는 프로세서에서 브렌칭 명령 또는 점프 명령의 실행에 관하여 개시되어 있고, 지연 명령어가 다음의 점프 명령어에 삽입되는 바, 이는 점프의 목적 명령이 로드되거나 프로그램 흐름이 목적 명령어로 수행되기 전에 점프 목적 주소의 측정을 가능하게 한다.
상기 지연 명령어는 즉각적인 점프 명령을 처리에 따른 파기에 의하여 취소되는 경우, 실행되지 않는다.
파기의 경우, 명령어는 점프 명령이 NOP로 실행되게 함을 따르게 한다.
모든 점프 명령은 이러한 목적을 위하여 파기를 제어하고, 따라서 점프 명령어의 기능으로서 지연 명령의 활성 또는 비활성을 제어하는 1비트 파기분야를 갖는 바, 이는 점프 명령어에서 지연 명령어의 사용을 최적화시킨다.
따라서, 본 발명의 목적은 더미 명령어에 의한 큰 프로세서 사이클 손실없이 파이프라인 아키텍쳐를 갖는 프로세서에서 조건 점프 명령어의 처리를 가능하게 하는 것이다.
본 발명의 목적은 청구항 제1항에 청구된 방법과 제3항에 청구된 장치에 의하여 달성된다.
본 발명에 따르면, 이 목적은, 조건 점프가 실행되거나 또는 조건 점프가 실행될 조건을 명시하는 하나 이상의 부수적인 비트를 각각의 명령어에 부가하는 경우의 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령어를 처리하기 위한 방법에 의해 달성된다. 이와 같이 이미 분기가 실행되거나 실행되지 않는 가에 대해 명령어를 조기에 수립하는 것이 가능하여 결국, 조건 점프 이후의 다음 명령어가 될 명령어가 이미 조기에 정해진다. 따라서, 명령어 세트에서 이 분기 예측에 의해 훨씨 이전에 조건 점프 명령어의 점프 목적지를 수립하는 것이 가능하다.
상기 지연 명령어는 즉각적인 점프 명령을 처리에 따른 파기에 의하여 취소되는 경우, 실행되지 않는다.
파기의 경우, 명령어는 점프 명령이 NOP로 실행되게 함을 따르게 한다.
모든 점프 명령은 이러한 목적을 위하여 파기를 제어하고, 따라서 점프 명령어의 기능으로서 지연 명령의 활성 또는 비활성을 제어하는 1비트 파기분야를 갖는 바, 이는 점프 명령어에서 지연 명령어의 사용을 최적화시킨다.
따라서, 본 발명의 목적은 더미 명령어에 의한 큰 프로세서 사이클 손실없이 파이프라인 아키텍쳐를 갖는 프로세서에서 조건 점프 명령어의 처리를 가능하게 하는 것이다.
본 발명의 목적은 청구항 제1항에 청구된 방법과 제3항에 청구된 장치에 의하여 달성된다.
본 발명에 따르면, 이 목적은, 조건 점프가 실행되거나 또는 조건 점프가 실행될 조건을 명시하는 하나 이상의 부수적인 비트를 각각의 명령어에 부가하는 경우의 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령어를 처리하기 위한 방법에 의해 달성된다. 이와 같이 이미 분기가 실행되거나 실행되지 않는 가에 대해 명령어를 조기에 수립하는 것이 가능하여 결국, 조건 점프 이후의 다음 명령어가 될 명령어가 이미 조기에 정해진다. 따라서, 명령어 세트에서 이 분기 예측에 의해 훨씨 이전에 조건 점프 명령어의 점프 목적지를 수립하는 것이 가능하다.
특히, 이 경우에, 부수적으로 조건 점프가 실행될 각각의 명령어에 적당한 점프 어드레스가 부가되는 것이 바람직하다. 이 경우에, 조건 점프가 실행되는지 아닌지에 대해 명령어가 조기에 알려질 뿐 아니라 대응하는 새로운 목적지 어드레스도 이미 공지된다. 따라서, 정확한 명령어가 이미 프로세서의 주 메모리로부터 요청될 수 있다.
더욱이, 바람직하게 명령어가 실제로 실행되고 있는 조건을 명시하는 하나 이상의 비트를 각각의 명령어에 부가하는 것이 가능하다.
프로세서의 처리 속도를 보다 최적화하기 위한 목적으로, 보다 바람직하게는, 하나 또는 그 이상의 추가 비트를 갖는 명령의 경우에는, 해당 비트가 정해질 때, 상기 하나의 비트 또는 둘 이상의 비트들(예를 들어, 제로(zero), 캐리(carry), 오버플로우(overflow))에 해당하는 플래그 명령의 실행과 병렬적으로 프로세서에서 생성되도록 점검하고, 프로세스의 프로그램 카운터가 이 결과의 함수로서 정해지도록 하는 것이 바람직하다.
본 발명의 목적은, 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령어를 처리하기 위한 장치에 의해 달성되며, 이 장치는 조건 점프를 실행하기 위해 프로그램 카운터 판독을 변경하기 위한 것이다.
특히, 이 경우에 프로그램 카운터 판독을 변경하기 위한 장치는 프로세서의 머신 명령어에서 대응하는 부수적인 비트를 위한 하나 이상의 입력과, 프로세서의 산술논리 유닛로부터 대응하는 플래그 신호를 위한 하나 이상의 입력를 갖는 것이 바람직하다.
특히, 이 경우에 머신 명령어로부터의 대응하는 부수적인 비트가 프로그램 카운터 판독을 변경하기 위한 장치에서 연관된 플래그 신호와 함께 동시에 존재하는 것이 바람직하다.
프로그램 카운터 판독을 변경하기 위한 장치는 바람직하게는 가산기가 제공된다.
본 발명은 첨부하는 도면을 참조하여 이하에 상세히 설명된다.
도 1은 2단 파이프라인를 갖는 프로세서의 동작 사이클을 도시하는 도면,
도 2는 본 발명에 따른 22비트 길이 머신 명령어를 도시하는 도면,
도 3은 본 발명에 따른 25 비트 길이 머신 명령어를 도시하는 도면,
도 4는 조건 점프를 실행하기 위해 프로그램 카운터 판독을 변경하기 위한 본 발명에 따른 장치의 개략도,
도 5는 조건 점프를 실행하기 위해 프로그램 카운터 판독을 변경하기 위한 본 발명에 따른 다른 장치의 개략도,
도 6은 본 발명에 따른 분기 예측을 갖는 조건 점프 명령어를 실행하기 위해 파이프라인 아키텍처를 갖는 프로세서의 전체적인 도면을 도시하는 도면, 및
도 7은 본 발명에 따른 분기 예측을 위한 장치를 갖는 프로세서의 세부도.
본 발명은 프로세서를 위한 파이프라인 아키텍처로부터 진행한다. 이는, 예를 들어, Pattersen & Hennessy"에 의한 "Computer Organizatoin and Design"라는 제목의 책에 설명되어 있다.
간단히 말해서, 파이프라인 아키텍처는 다음 정보를 제공한다:
일반적으로, 각각의 머신 명령어는 다음과 같은 연산들이 프로세서에서 처리된다.
1. 명령어 패치
2. 명령어 디코딩
3. 실행
4. 라이트 백(write back)
종래 기술에서도 상기와 같은 명령어 수행 동작들이 부분적으로 병렬 처리가 가능한 것이 주지되어 있다. 예를 들어, 다음 수행될 명령어가 디코드(해독)되는 동안 선행 명령어를 실행함으로써 상기 언급한 명령어 수행 동작의 부분 병렬 처리가 가능하다. 이와 같은 2단계 파이프라인의 처리 모드가 도1에 도시되어 있다.
따라서, 프로세서는 프로세서 사이클 당 평균 하나의 명령어를 처리하기 위해 파이프라인을 사용한다.
그러나, 이러한 프로세서의 파이프라인 구조는 조건 점프(분기) 명령어가 실행될 때마다 문제를 야기한다. 이 문제는 기술적 용어로 "분기 해저드(branch hazard)"라고 정의되는데, 이는 분기 명령어, 다시 말해, 조건 점프 명령어가 현재 처리 중인 명령어의 실행 후에만 비로소 다음 명령어가 계속하여 진행될 것인지 혹은 다른 목적 주소로의 분기가 이루어져야 될지를 결정할 수 있다는 것을 의미한다.
이 문제는, 종래 기술에서 비연산 명령어를 갖는 조건 점프 명령어, 즉 명령어가 프로세서 사이클을 대기하는 동안 클럭 펄스를 채움으로서 해결된다. 비록 프로그램이 정확하게 실행되는 경우에도 확실하게 발생하지만, 하나의 프로세서 사이클은 손실되고, 따라서 최대 가능한 컴퓨터 전력이 손실된다. 종래 기술은 다음 예의 도움으로 보다 상세히 설명되며, 이는 각각 절대 숫자값의 계산을 취급한다.:
먼저, 조건 실행의 가능성이 존재한다. 즉 예를 들어:
/*A = |B| */
LOAD R1 B
COMPARE R1 0 /*if B≥0, carry=0 */
NEGATIVE R1 on-carry /*negate if carry = 1 */
STORE R1 A /* negative if carry=1 */
이와 같은 종류의 실행은, 단지 하나의 단일 명령어 만이 조건적으로 실행되어야 하고 이와 같은 명령어가 어떠한 점프도 포함하지 않을 때에만 가능하다. 더 이상 하나의 명령어에 의해서만 표현될 수 없는 보다 복잡한 함수 또는 태스크의 경우에, 다음 프로그램에서 도시된 바와 같이 조건 점프는 각각 실행되어야 한다. 박스로 표시된 프로그램 절로부터 알 수 있는 바와 같이, 비연산 명령어는 두개 점프 명령어 (2단 파이프라인의 경우)의 다운스트림으로 삽입되어야 하고, 보다 긴 파이프라인은 그 이상의 비연산 명령어에 대응한다:
LOAD R1 B
COMPARE R1 0
---------------------------------------------
│ JUMP ON CARRY L1 │
---------------------------------------------
│ JUMP ON CARRY L1 │
삭제
│ JUMP L2 │
│ NO OP │
--------------------------------------------
--------------------------------------------
L1: NEGATIVE R1
L2: STORE R1 A
최종적으로, 이러한 종래 기술에는 추정실행(speculative execution) 이라고 하는 선택적 문제가 존재한다. 이는 정확한 명령어 처리과정이 계속될 수 있는 가능성이 50%를 다소 상회하는 확률을 가진 하나의 선택만이 실행된다는 의미이다. 하지만, 이러한 종래 기술은 만약 추정(가정)이 맞지 않다면 결국, 일부 명령어가 해독될 필요가 있기 때문에 하드웨어 부분에서 상당한 지출이 요구된다.
종래 기술에 따르면, 지금까지 이 문제에 대한 임의의 적합한 해결방법이 존재하지 않아, 이와 같은 분기 해저드, 즉 조건 분기에 따른 문제는 파이프라인 아키텍처에서 프로세서의 작업 사이클에 손실을 초래한다. 본 발명에 따르면, 이 문제는 다음과 같이, "조건 실행" 및 "점프 산술" 명령어를 갖는 명령어의 조합에 의해 해결된다.
여기서의 목적은 간단한 예제, 구체적으로 "R1에 R2를 더하고, 만약 R1이 0이면 L1으로 분기하라"라고 하는 명령을 다뤄보는데 있다. 이러한 프로그램은 C언어로는 다음과 같이 표현된다.
R1 = R1 + R2
if (R1 = = 0)
GO TO L1
GO TO L1
L1: ....
본 발명에 따르면, 기계 명령어 ADD R, R2, #JMP, ON ZERO는 이 목적을 위해서 사용된다. 이 경우에 명령어 #JMP는 입력점 L1으로의 상대적 점프 어드레스를 의미한다.
공지된 전조건에 대한 후조건(post-condition)에 의해 명령어를 확장한다. 예를 들어: P1, ADD R1, R2, #JMP, Q1
여기서, P1은 다음을 의미한다: P1이 충족되면 R1=R1+R2를 실행한다. 본 발명에 따르면 Q1은 다음을 의미한다: R1=R1+R2의 계산후에 Q1이 충족되면 JMP에 의해 점프를 실행한다.
이것은 다음 "C" 프로그램에 대해 가능하다:
if (A=1)
B = A;
else
C = A;
다음과 같이 머신 코드로 변환된다:
LOAD R1 A
Q1 TEST R1 1 # L /*if A=1 jump L */
P1 Q1 STORE R1 B
STORE R1 C
따라서, 본 발명에 따르면, 명령어 코딩에서 도 2 및 3의 예로서 도시된 바와 같이 사전 조건을 위한 비트 및 후-조건을 위한 비트를 제공할 수 있다.
도 2는 길이가 단지 22 비트인 명령어를 갖는 단순 예를 도시하는데, 여기서 1 비트는 전조건(precondition)을 위해 제공되고, 하나의 비트 2는 후조건을 위해 제공되고, 8 비트 3 - 10은 상대적 변위, 다음에 흔히 3개의 비트 각각은 두개의 레지스터 어드레스 그리고 6 비트는 명령어 코드를 위해 제공된다.
실제로 전조건 및 후조건으로서의 복수의 조건을 점검하는 것이 필요하다. 결국, 이에 따라 많은 비트들이 도 3에서와 같이 제공되어야 한다.
도 3에서, 비트 0 내지 1은 후조건을 위한 정보를 포함하고, 비트 2 및 3은 전조건을 위한 정보를, 그리고 비트 4 내지 10은 점프 거리인 상대적 점프 어드레스를 포함한다.
본 발명에 따른 방법은, 예를 들어 다음 "C" 프로그램에 대해 프로그램 루프와 함께 실제로 사용될 수 있다:
for (i=1; i<5;i++) {
x [i] = i;
} /* C 프로그램 */
본 발명에 따르면, 이는 다음과 같이 실질적으로 단순화된 머신 프로그램으로 변환될 수 있다:
Load R1 5
Load R2 X /* Address of X[5]*/
L1=STORE_INDEXED R2 R1 /* X[i] = i */
Q1 DECREMENT R1 #1 L1
ADD R1 1 /* i=i+1 */
후조건 q1은 다음을 의미한다: R1=R1-1의 결과가 0이 아니면 조건 점프.
프로그래밍 시에 본 발명에 의하여 달성될 수 있는 단순화의 추가적 예시로서 하기에 링 버퍼를 처리하기 위한 프로그램이 제시되어 있다.
TST (R3) #buffer_end //도달될 링 버퍼 종점
BNZ NEXT //no이면
NOP
LDI (R3) #buffer_start //그렇다면 포인터를 다시 버퍼로 설정
본 발명에 따르면, 다음 두가지 명령어가 이 대신에 충족된다:
TST (R3) #buffer_end
LDI (R3) #buffer_start
그러나, 본 발명에 따른 이 해결방법은 모든 루프 구조에 적용될 수 없다는 것을 알아야 한다. 그러나 모든 분류의 루프 구조는 본 발명에 따라 다음과 같이 프로그램될 수 있다:
LDI (R4) #loop_cnt_minus_1 //루프 카운터
WHILE_LOOP:
FIRST_PC //코드 시퀀시
SUB1 (R4) #1 #loop_flag //1 감소 및 루프 종료 표시
BNZ WHILE_LOOP // 만일 제로가 아니면 루프로 돌아가 시작
본 발명에 따르면, 통상의 감산 머신 명령어 SUB 대신에, 조건 점프의 경우에 정확한 분기인 조건 점프 명령어 BNZ 이전의 사이클을 가리키기 위해 사용되는 플래그 비트를 갖도록 확장되는 머신 명령어 SUBI가 사용되어, 2단 파이프라인의 경우에 어떠한 경우에도 프로세서 사이클의 손실이 발생하지 않는다. 명령어 LDI는 루프 시작을 가리킨다:
분기 해저드를 피하기 위한 전형적인 방법은, 조건 점프의 예상되는 점프 목적지를 예측하는 것이다.
루프의 구현은 일반적으로 세가지 단계를 필요로 한다:
1. 루프 카운터의 초기화
2. 루프 카운터의 증가 또는 감소
3. 루프의 끝으로 점프
조건 점프의 경우에 사이클 손실은, 점프 이후에 실행되는 다음 명령어가 루프 조건의 충족에 의존한다는 사실에 기초한다. 결국, 더미 명령어 NOP가 조건 점프 다음에 삽입되어야 한다. ADD 또는 SUB와 같은 산술 명령어에 루프 플래그를 사용함으로써, 덧셈 또는 뺄셈 명령어의 실행의 끝에서 루프 조건이 점검될 수 있다. 제로 플래그, 즉 0에 있는 산술 논리 유닛에 의한 표시는 프로세서의 프로그램 카운터가 어떤 어드레스로 설정되어야 하는 지를 결정하기 위해 점검될 수 있 다. 이 LOOP 플래그는 ENABLE-DISABLE 플래그 또는 더 일반적으로 어드레스 변위로서 해석될 수 있다.
도 4는 본 발명에 따른 LOOP 플래그를 구현하기 위한 가장 단순한 기본 원리를 도시한다.
프로그램 메모리(10)는 멀티플렉서(12)를 거쳐 프로그램 카운터(14)에 연결된다. 프로그램 카운터(PC)(14)의 출력은 상수 또는 LOOP 플래그와 프로그램 카운터의 출력값을 조합하는 논리 게이트(16)에 연결된다. 논리 게이트(16)의 출력은, 그 다른 입력이 프로그램 메모리(10)에 연결되고 그 출력이 프로그램 카운터(14)에 연결되어 있는 멀티플렉서(MUX)(12)의 입력에 연결된다. 멀티플렉서(12)는 프로세서로부터의 제어 신호(control)에 의해 제어된다.
본 발명에 대한 다른 개선점은 루프의 시작을 버퍼링함으로써 점프 명령어를 없앤다는 것이다:
LDP (R4) #loop_cnt_minus_1
WHILE_LOOP:
FIRST_PC
SUBI (R4) #1 #LOOP-flag
NEXT_INS:
루프가 시작한다는 것을 가리키는 부수적인 명령어 LDP의 필요성이 존재한다. 다음 프로그램 코드 어드레스는 루프 시작에서 버퍼링된다. 명령어 LDI를 사용하고 다음 프로그램 카운터 값을 명시적으로 버퍼에 로드함으로써 동일한 결과가 달성될 수 있다. 물론, 그러나, 부수적인 명령어가 다시 요구된다. 명령어 SUBI는 어떤 것이 조건 점프에 대한 정확한 분기인지를 가리키는데 사용되는 루프 플래그를 갖는다. 제로 플래그는 이 목표가 루프의 시작으로 점프 백하는지 또는 #-Loop-Flag에 의해 표시된 다음 명령어 (NEXT_INS)를 실행하는지를 결정하기 위해 점검된다.
본발명에 따른 루프 구조의 이와 같인 단순화된 처리는 도 5에 도시된 바와 같이 보다 복잡한 구조의 회로를 필요로 한다.
도 4에 도시된 바와 같이, 프로그램 메모리(10)는 그 출력이 프로그램 카운터(PC)(14)에 접속된 멀티플렉서(12)의 입력에 접속되어 제공된다. 프로그램 카운터(14)의 출력은 루프 플래그와 프로그램 카운터의 출력값을 결합하는 논리 게이트(16)에 연결된다. 이 논리 회로(16)의 출력은 멀티플렉서(MUX)(12)의 다른 입력에 연결된다. 그러나, 본 예에서, 멀티플렉서(12)는 그 입력이 프로그램 카운터(14)의 값과 함께 로드될 수 있는 버퍼(18)에 연결되는 다른 입력을 갖는다. 명시적 명령어 "판독되는 다음 프로그램 카운터를 버퍼로 로드"는 이와 같이 불필요하게 되다.
도 6은 본 발명에 따른 명령어를 처리하는 능력을 구비한 프로세서의 전체적인 설계도를 도시한 것이다. 도 4 및 5에 도시된 것과 동일한 소자에는 동일한 참조부호가 부여된다. 프로그램 카운터(PC)(14)는 프로그램 코드 메모리(10)를 액세스하여, 각각 이 경우에 처리될 프로그램 라인을 액세스한다. 해당하는 명령어 코드가 프로그램 메모리(10)에서 명령어 디코더(IDEC)(20)로 공급된다. 상기 명령어 디코더는 해당 제어명령들을 산술 논리 유닛(ALU)(22)과 레지스터 세트(24)로 중계한다. 만약, 필요하다면 레지스터의 내용들은, 도면의 화살표와 같이, 산술논리 유닛(22)으로 입력되거나, 산술논리 유닛으로부터 다시 기록될 수 있다. 산술 논리 유닛(22)의 플래그 신호들('제로', '캐리' 및 '오버플로우')은 명령어 디코더(IDEC)(20) 및 멀티플렉서(MUX)(12)의 제어 입력 모두에 동시 공급된다. 멀티플렉서(12)의 두 입력은 값 1에 및 명령어 디코더(20)에 의해 공급되는 상대적 점프 값 #JMP에 의해 채워진다. 멀티플렉서(12)의 출력은 그 다른 입력이 프로그램 카운터(14)의 출력에 연결된 가산기(16)에 연결된다.
두개 이상의 파이프라인 단의 경우에 플래그 신호가 제로, 캐리, 오버플로우 및 연관된 상대적 점프 값 #JMP가 멀티플렉서(12)에 동시에 존재하여야 한다는 것을 알아야 한다. 그러나, 이는 본 실시예에서 설명된 바와 같이 두개 단 파이프라인의 경우에 반드시 필요하지는 않다. 본 발명에 따른 후조건을 갖는 대응하는 명령어 코딩이 이하에 설명된다. 22 비트 길이를 갖는 본 발명에 따른 가장 단순한 가능한 명령어 세트를 도시하는 도 2를 다시 참조한다.
이 경우에 상위 6 비트(21 내지 16)는 명령어 코드(OPCODE), 예를 들어, 덧셈을 포함한다. 다음 세개의 비트는 비트 15, 14, 13에 대한 세개 비트의 길이를 갖는 첫번째 레지스터(REG A)의 어드레스를 포함하는데(종래의 프로세서는 대부분 8 레지스터 이상을 사용하지 않는다), 이는 이 경우에 비트 12, 11 및 10에 대해 레지스터(REG B)에 부가될 두번째의 레지스터 어드레스 다음에 온다.
이 명령어의 경우에, 프로세서의 산술 논리 유닛은 레지스터 A, B를 부가할 것이고 이들을 레지스터에 저장한다. 본 발명에 따르면, 다른 비트들이 본 명령어, 특히 다음의 조건 점프의 경우에 상대적 점프 거리를 명시하는 비트 9 내지 2 (변위)에 부가된다. 조건 비트 1 및 0은 이때 후조건을 가리키는 비트 1 (POST) 뒤에 오는 한편, 비트 0(PRE)는 전조건을 가리킨다.
처리 사이클은 이 경우에 다음과 같다: 명령어가 페치되어 디코드된다. 이 목적을 위해, 프로세서는 예를 들어 PC=0을 판독하는 특정 프로그램 카운터에서 시작한다.
이 프로그램 카운터 판독이 주어졌을 때, 22 비트의 명령어는, 이 프로그램 카운터 판독에 대응하여 메모리내의 어드레스에 존재하는 프로그램 메모리로부터 패치된다.
다음에 명령어는 명령어 디코더(IDEC)(20)에 의해 처리된다.
이러한 경우 전조건 비트가 설정되어 있는 지를 점검하기 위한 시도가 처음으로 이루어지며, 만약 전조건 비트가 설정되어 있다면, 해당 전조건이 충족되지 않는 경우 명령어는 실행되지 않는다.
본 발명과 종래 기술 간의 차이점은 후조건 비트에 있다.
신호 "BR_CTR"가 이 후조건 비트로부터 발생된다. 다음과 같이 동시에 덧셈이 실행된다:
산술 논리 유닛을 위한 제어 신호 ALU-CTR, 판독 및 기록 어드레스 및 인에이블 신호가 발생된다. 동시에, 명령어 디코더(20)는 상대적 점프 거리 "BR"을 이용가능하게 한다. "BR-CTR" 신호는 다음 설명에 따라 분기 제어를 구동시킨다:
1. 만일 후조건 비트 = 0, 즉 PCNEW=PCOLD+1이면 점프없음
2. 만일 후조건 비트 = 1이고 조건이 충족되면, 예를 들어, 제로 플래그 =1 이면 상대적 점프가 실행된다. 프로그램 카운터(14)는 새로운 값 PCNEW=PCOLD+BR로 설정된다.
만일 후조건 비트가 =1이지만 조건이 충족되지 않으면, 다시 어떠한 점프도 실행되지 않는다, 즉 PCNEW=PCOLD+1이다.
예를 들어, 도 3에 도시된 바와 같이 하나 이상의 후조건 비트를 사용하는 것이 가능하다. 이때 그 이상의 조건(예를 들어, 제로, 캐리, 오버플로우)를 점검하는 것이 가능하다.
따라서, 본 발명에 따르면, 산술논리 유닛를 위한 제어 정보 및 점프 목적지 어드레스에 관련된 정보는 명령어의 디코딩 동안 명령어 디코더(20)에 의해 동시에 첫번째로 이용가능하다.
명령어가 실행되고 적절할 때 분기된다.
산술논리 유닛(ALU)의 작동은 이 목적을 위해 실행되며, 그 결과는 적당한 레지스터에 기록된다. 동시에, 대응하는 제로, 캐리 등의 플래그가 산술논리 유닛의 출력에 존재한다.
동일한 클럭 펄스에 관련된 개별적인 플래그 "BRCTR" 및 값 "BR"을 위한 비트들은 분기 제어인 경우에도 이용가능하다. 도 7에 도시된 바와 같이, 제어 유닛 "Cond"(26)은, 점프 없음을 수행하거나 또는 상대적 점프를 프롬프트하는 두개의 제어 신호 S1 및 S2를 발생한다. S2는 멀티플렉서(12)를 통해 상대적 점프 어드레스 "PCNEW"를 통해 스위치한다.
부수적인 명령어가 대응하는 산술 명령어 이외에 점프를 위해 저장된다. 결국, 필요한 명령어 수가 감소되고 프로세서의 수율이 향상된다.
본 발명에 따른 후조건 비트를 갖는 명령어를 처리하기 위한 프로세서의 설계가 도 7에 자세히 도시되었다. 도 4, 5 및 6에서와 동일한 부호는 동일한 소자를 지칭한다.
또한 도 7에는 명령어 메모리(CODEROM)(10)를 어드레스하는 프로그램 카운터(14)도 제공한다. 이로부터, 22 비트의 명령어 폭을 갖는 명령어가 명령어 디코더(IDEC)(20)에 공급된다. 후자는 레지스터(24) 및 산술논리 유닛(ALU)(22)를 구동하기 위한 통상의 신호를 발생한다. 그러나, 본 발명에 따르면 이는 또한 신호 "BR" (이 신호는 복수의 비트를 구비한다)를 발생하고, 부수적인 점프가 처리되려하고 산술논리 유닛의 대응하는 플래그 비트들이 점검되는 것을 명시하는 신호 "BR-CTR"은 물론 상대적 점프 거리를 명시한다.
그 출력에서, 산술논리 유닛(22)은 특정 조건(예를 들어, 제로, 오버플로우, 캐리, 등)을 도시하는 결과 및 대응하는 플래그를 공급한다. 이 결과는 물론 또한 레지스터(24)에 다시 공급될 수 있다. "BR_CTR" 신호 및 ALU로부터의 플래그는 다른 논리 유닛(Cond)(26)에 공급된다. 이는 멀티플렉서(12) 및 가산기(16)의 한 입력의 스위치 스트림을 제어하는 대응하는 BR_CTR 신호 및 연관된 플래그 신호 S1 및 S2의 함수로서 발생된다. 이 스위치는 플래그 조건의 충족의 함수로서 1과 "BR" 간을 스위치한다. 이 가산기의 다른 입력은 프로그램 카운터(14)의 출력에 연결된다.
본 예에서 본 발명에 따르면 프로세서에서 비교적 낮은 부수적인 기술 배치로 조건 점프의 실질적으로 신속한 처리를 수행할 수 있다.
Claims (8)
- 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령어(conditional jump instruction)를 처리하는 방법에 있어서,a) 프로세서 명령어, 명령어 옵코드(opcode)를 포함하는 프로세서 명령어, 레지스터 어드레스, 상대적인 점프 거리, 실질적으로 실행될 명령어의 상태 하에서 특정되는 전제조건 및 프로세스 상에서 체크되는 복수의 포스트 조건 비트를 가지며 조건 점프의 진행 여부와 산술 로직 유닛에서 체크되는 대응되는 플래그 비트들에 의해 특정되는 포스트-조건을 디코딩 및 로딩하는 단계b) 상기 전제조건이 만족되는 경우 디코딩된 프로세서 명령어를 실행하는 단계c) 상기 포스트-조건이 만족되고 체크된 플래그 비트들이 설정된 경우 상대 점프 거리의 함수로 프로세서 명령어에 포함된 점프 어드레스를 계산하고 계산된 점프 어드레스로 점핑하는 단계를 포함하는 것을 특징으로 하는 파이프라인 아키텍쳐를 갖는 프로세서에서 조건 점프 명령을 처리하기 위한 방법.
- 삭제
- 삭제
- 삭제
- 파이프라인 컴퓨터 아키텍처를 갖는 프로세서에서 조건 점프 명령어(conditional jump instruction)를 처리하는 명령어 디코더에 있어서,상기 명령어 디코더(20)는 명령어 옵코드(opcode)를 포함하는 프로세서 명령어, 레지스터 어드레스, 상대적인 점프 거리, 실질적으로 실행될 명령어의 상태에 의해 특징되는 전제조건, 프로세서 및 프로세스 상에서 체크되는 복수의 포스트 조건 비트를 가지며 조건 점프의 진행 여부와 산술 로직 유닛에서 체크되는 대응되는 플래그 비트들에 의해 특정되는 포스트-조건을 디코딩하기 위해 적용되되,상기 명령어 디코더는 디코딩된 프로세서 명령어의 전제조건을 체크하기 위하여 적용되며,상기 명령어 디코더는 디코딩된 프로세서 명령어의 포스트-조건이 만족되고 체크된 플래그 비트들이 설정된 경우에 디코딩된 프로세서 명령어의 전제조건의 만족여부를 체크하기 위하여 적용되며,만족된 경우, 상기 명령어 디코더는 디코딩된 프로세서 명령어에 포함된 상대적 점프 거리의 함수로 계산되는 상대적 어드레스를 형성하기 위하여 적용되며, 산술 논리 유닛이 디코딩된 프로세서 명령어를 실행하기 위하여 적용되는 것을 특징으로 하는 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령을 처리하기 위한 명령어 디코더.
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE19945940A DE19945940C2 (de) | 1999-09-24 | 1999-09-24 | Verfahren und Vorrichtung zur Bearbeitung bedingter Sprungbefehle in einem Prozessor mit PIPELINE-Rechnerarchitektur |
DE19945940.1 | 1999-09-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20020085878A KR20020085878A (ko) | 2002-11-16 |
KR100631318B1 true KR100631318B1 (ko) | 2006-10-09 |
Family
ID=7923254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020027003878A KR100631318B1 (ko) | 1999-09-24 | 2000-09-21 | 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령을 처리하기 위한 방법 및 명령어 디코더 |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1218819A1 (ko) |
KR (1) | KR100631318B1 (ko) |
CN (1) | CN1390324A (ko) |
DE (1) | DE19945940C2 (ko) |
WO (1) | WO2001022217A1 (ko) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7281120B2 (en) * | 2004-03-26 | 2007-10-09 | International Business Machines Corporation | Apparatus and method for decreasing the latency between an instruction cache and a pipeline processor |
CN104067194B (zh) * | 2011-12-22 | 2017-10-24 | 英特尔公司 | 用于计算多轮skein散列算法的执行单元的设备和方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2723238B2 (ja) * | 1988-01-18 | 1998-03-09 | 株式会社東芝 | 情報処理装置 |
US5349671A (en) * | 1989-03-23 | 1994-09-20 | Matsushita Electric Industrial Co., Ltd. | Microprocessor system generating instruction fetch addresses at high speed |
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
TW380238B (en) * | 1996-12-09 | 2000-01-21 | Matsushita Electric Ind Co Ltd | Information processing apparatus which accurately predicts whether a branch is taken for a conditional branch instruction, using small-scale hardware |
FR2770662B1 (fr) * | 1997-11-03 | 1999-12-10 | Inside Technologies | Microprocesseur pipeline a saut conditionnel en un cycle d'horloge |
-
1999
- 1999-09-24 DE DE19945940A patent/DE19945940C2/de not_active Withdrawn - After Issue
-
2000
- 2000-09-21 WO PCT/EP2000/009267 patent/WO2001022217A1/de active Application Filing
- 2000-09-21 EP EP00967740A patent/EP1218819A1/de not_active Withdrawn
- 2000-09-21 KR KR1020027003878A patent/KR100631318B1/ko not_active IP Right Cessation
- 2000-09-21 CN CN00815782A patent/CN1390324A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
DE19945940C2 (de) | 2002-01-17 |
CN1390324A (zh) | 2003-01-08 |
EP1218819A1 (de) | 2002-07-03 |
DE19945940A1 (de) | 2001-04-12 |
WO2001022217A1 (de) | 2001-03-29 |
KR20020085878A (ko) | 2002-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2796797B2 (ja) | ディジタル命令プロセッサ制御装置によってインターラプトルーチンを処理する方法 | |
US6591378B1 (en) | Debug controller in a data processor and method therefor | |
KR930009756B1 (ko) | 분기명령 실행장치 및 분기명령 트레이싱방법 | |
US5131086A (en) | Method and system for executing pipelined three operand construct | |
KR100597328B1 (ko) | 브랜치 제어를 하는 데이터 처리 시스템 및 그 방법 | |
US8555041B2 (en) | Method for performing a return operation in parallel with setting status flags based on a return value register test | |
US6611909B1 (en) | Method and apparatus for dynamically translating program instructions to microcode instructions | |
KR20100132032A (ko) | 실행되는 명령의 결과를 선택적으로 커밋하는 시스템 및 방법 | |
US6832305B2 (en) | Method and apparatus for executing coprocessor instructions | |
US20010005882A1 (en) | Circuit and method for initiating exception routines using implicit exception checking | |
JP2007526571A (ja) | Simdデバイスにおける制御フロー管理のための方法及び装置 | |
US4926312A (en) | Program skip operation control system | |
US6230261B1 (en) | Method and apparatus for predicting conditional branch instruction outcome based on branch condition test type | |
US6189093B1 (en) | System for initiating exception routine in response to memory access exception by storing exception information and exception bit within architectured register | |
JPH1196004A (ja) | データプロセッサにおける条件分岐実行を制御するための方法および装置 | |
KR20070108936A (ko) | 조건부 명령어가 실행되지 않을 경우 소스 오퍼랜드를대기하는 것을 중지하는 방법 | |
EP1310864A2 (en) | Method and circuit for conditional-flag rewriting control | |
KR100631318B1 (ko) | 파이프라인 아키텍처를 갖는 프로세서에서 조건 점프 명령을 처리하기 위한 방법 및 명령어 디코더 | |
US5802360A (en) | Digital microprocessor device having dnamically selectable instruction execution intervals | |
US6115807A (en) | Static instruction decoder utilizing a circular queue to decode instructions and select instructions to be issued | |
US6990569B2 (en) | Handling problematic events in a data processing apparatus | |
JPH10124312A (ja) | 中央処理装置 | |
KR970011209B1 (ko) | 실행된 명령 스트림을 추적하기 위해 사용되는 신호를 발생하기 위한 회로를 포함하는 마이크로프로세서 | |
JPH0212429A (ja) | ディレイド・ジャンプ対応機能付情報処理装置 | |
US20030018883A1 (en) | Microcode branch prediction indexing to macrocode instruction addresses |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |