KR950014162B1 - 파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법 - Google Patents

파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법 Download PDF

Info

Publication number
KR950014162B1
KR950014162B1 KR1019930028675A KR930028675A KR950014162B1 KR 950014162 B1 KR950014162 B1 KR 950014162B1 KR 1019930028675 A KR1019930028675 A KR 1019930028675A KR 930028675 A KR930028675 A KR 930028675A KR 950014162 B1 KR950014162 B1 KR 950014162B1
Authority
KR
South Korea
Prior art keywords
block
instruction
buffer
counter
load
Prior art date
Application number
KR1019930028675A
Other languages
English (en)
Other versions
KR950020146A (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 재단법인한국전자통신연구소
Priority to KR1019930028675A priority Critical patent/KR950014162B1/ko
Publication of KR950020146A publication Critical patent/KR950020146A/ko
Application granted granted Critical
Publication of KR950014162B1 publication Critical patent/KR950014162B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

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

파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법
제 1 도는 반복명령어를 잘못 설계하였을 경우에 발생되는 파이프라인 흐름도.
제 2 도는 본 발명에 따른 반복명령어를 구현하기 의한 블럭도.
* 도면의 주요 부본에 대한 부호의 설명
10 : IR(Instnlction Register)블럭 20 : 카운터 버퍼
30 : 카운터블럭
40 : RE버퍼(Repeat End AddressBuffer)
50 : RE블럭
60 : RS버퍼(Repeat Start Address Buffer)
70 : RS블럭 80 : 컨트롤블럭
90 : 프로그램 카운터
본 발명은 마이크로 프로세서에서의 반복명령어를 구현하는 방법에 관한 것으로, 구체적으로 파이프라인을 이용하여 두가지 종류의 반복명령어를 하나의 명령어로 코딩해석하고, 프로그램 컨트롤(programcontrol)에 따른 명령어 수행지연이 없는 반복명령어를 효율적으로 구현하는 방법에 관한 것이다.
프로그래밍이 가능한 IC인 마이크로 프로세서나 DSP(Digital Signal Processor)칩의 명령어중 하나의 명령어나 여러가지 명령어들을 반복수행시키는 명령어는 고급언어의 Do, While, For와 같은 명령을 어샘블리 언어 그대로 번역되게 한다.
또한, 상기 명령어는 오버해드(over-head)없이 명령어를 수행하므로 DSP와 같이 반복계산이 많이 요구되는 IC에서 중요한 역할을 한다.
현재 상용화된 DSP칩들은 대부분 한 명령어에 대한 반복명령어(Repeat lnstruction)와 여러 명령어에 대한 반복명령어를 제공하고 있으나, 한 명령어에 대한 반복과 여러 명령어에 대한 반복명령어가 분리되어 있어서 사용하기에 불편한 문제짐이 있다.
따라서, 본 발명에서는 상기한 문제짐을 해결하기 위하여 파이프라인을 갖는 마이크로 프로세서에 두가지 종류의 반복명령어를 하나의 명령어로 코딩해석하고, 또한 프로그램 컨트롤에 따른 명령어 수행지연이 없는 반복명령어를 구현하는 구현방법을 제공한다.
현재 사용중인 마이크로 프로세서는 명령어를 구현하는데 있어서 파이프라인을 이용한다.
Pipeline은 프로세서마다 다른 구조를 가질 수 있으나, 많은 프로세서들은 프로그램 메모리로부터 명령어를 인출(Fetch)하는 명령어 인출사이클(Fetch Cycle)명령어를 해석하여 명령어 수행에 필요한 제어신호를 발생시키는 디코딩 사이클(Decoding Cycle), 그리고 실제로 명령어를 수행하는 실행사이클(ExecuteCycIe)의 파이프라인을 가지고 있다. 특히 명령어 Fetch는 다음과 같이 표현될 수 있다.
Update Program Counter(PC) ;
Instruction Register(IR)←Memory[PC] ;
여기서 프로그램 카운터(Program Counter(PC))는 다음에 프로그램 메모리(Program Memory)에서 다음에 읽어올(fetch) 메모리 번지수를 저장하는데 사용되는 레지스터로서, Branch, Cal1, Return, Repeat과 같이 프로그램 컨트롤을 바꾸는 명령어는 PC의 내용을 Update하는 방식을 조정함으로써 구현된다. 프로그램 컨트롤을 바꾸는 명령어 의해는 PC Update는 현재 PC내용에 1을 더함(+1)으로써 수행된다.
상기한 바와같이 3단의 파이프라인을 가진 프로세서에서 동시에 3개의 명령어가 각기 다른 파이프라인에서 수행되고 있다.
이때 반복명령어는 다음과 같이 구현될 수 있다.
즉, 명령어 인출(Instruction Fetch)이 완료되어 디코딩이 수행중인 반복명령어는 다음과 같이 동작한다.
RS BUF←PC ;
COUNT BUF←IR(COUNT) ;
RE BUF←IR(RE) ;
여기서 RS_BUF는 반복될 것 명령어의 메모리 번지수를 저장하는데 사용되는 RS(Repeat StartAddress)레지스터의 버퍼 레지스터로서, 더코드 스테이지(Decode Stage)에서 PC의 내용을 저장한다.
이때 PC는 반복명령어 바로 다음 명령어를 가르키므로 반복명령어의 시작은 반복명령어 바로 다음 명령어로부터 시작된다.
COUNT_BUF는 반복될 횟수를 저장하는데 사용되는 COUNT레지스터의 버퍼 레지스터로서, 디코드 스테이지에서 명령 레지스터(Instruction Register, 이하,IR로 나타낸다)가 지정하는 내용을 저장한다.
RE_BUF는 반복될 마지막 명령어의 메모리 번지수를 저장하는데 사용되는 RE(Repeat End Address)레지스터의 버퍼 레지스터로서, 디코드 스테이지에서 IR이 지정하는 내용을 저장한다.
그리고 실행사이클에서는
RS←RS BUF ;
COUNT←COUNT BUF ;
RE←RE BUF ;
로 되어 각 버퍼의 내용이 실제 레지스터로 옮겨진다.
이때, 버퍼의 역할이 더코드 파이프(Decode Pipe)와 실행파이프(Execute Pipe)를 시간적으로 분리하는 역할임을 나타내고 있다. 실행사이클 이후에는 COUNT가 0이 아닌 경우 다음과 같은 로직(Logic)이 항상구동되어 프로그램 카운터(PC)의 다음 내용을 컨트롤한다.
즉,IF(COUNT!=0) {
IF(PC= =RE) {
PC=RS ;
COUNT = COUNT -1
}
}
상기와 같은 구조로 반복명령어를 설계하면 2개 이상의 명령어들을 반복하는 경우에는 오버해드 없이 잘 동작하지만 1개의 명령어가 반복되는 경우 다음과 같은 문제가 발생한다.
예를들어 다음과 같은 반복명령이 있다고 가정하자.
REPEAT l0 rpt1
rptl: ADD
SUB
MUL
상기 명령은 10번 ADD를 수행하고난 뒤 SUB와 MUL을 수행하라는 명령어들이다.
이때 상기의 반복명령어(Repeat Instruction) 설명대로 REPEAT명령어가 설계되었다고 가정하면 제 1 도에 표시된 바와같이 수행된다.
즉, t1에 REPEAT명령어가 Fetch 되었다고 가정하면 제 1 도에 표시된 순서로 파이프라인이 차게된다. 또한, t2에 Repeat명령어가 디코드되고 있으므로 COUNT가 0인 상태이므로 프로그램 카운더는 t3 사이클에 +1되어 Sub를 Fetch한다.
또한 t3 사이클에 PC는 RE+1이 되어 있으므로(PC==RE) 조건은 아무런 역할을 하지 못하고 PC는 +1이 되어 t4에는 다음 명령어인 Mu1을 Fetch한다.
여기에서 PC<_RS로 하는 조건을(PC>=RE)로 바꾸면 t3에 (PC>RE)가 되어 t4에는 PC>_RS로 되어 Add가 Fetch되나 t3 사이클에는 여전히 Add가 Fetch되지 못하고 Sub가 Fetch가 되는 문제가 남는다.
따라서 상기한 문제 때문에 대부분의 DSP칩에서 하나의 명령어를 반복하는 명령어를 여러개의 명령어를 반복하는 명령어와 분리하여 구현하였다.
상기한 문제를 해결하기 위해서 반복명령어는 디코드 사이클에서 하나의 명령어가 반복되는 경우에는 PC의 내용이 +1되는 것을 디저블(Disable)시켜 같은 명령어를 한번 더 Fetch하도록 하고, 이에 따라 카운터내용도 -1하도록 H/W를 구성한다.
다음은 첨부한 도면을 감조하여 본 발명을 상제히 설명한다.
제 2 도는 본 발명에 의한 반복명령어를 구현하기 위한 회로의 블럭도를 나타내었다.
회로의 구성은 다음과 같다.
제 2 도에 표시된 컨트롤 블럭(Control Block)은 반복 명령을 구현하는데 필요한 컨트롤신호를 생성한다. 그리고 카운트 블럭(count Block)은 앞으로 반복하여야 할 반복횟수를 저장하는데 사용되는 다운 카운터(Down Counter)와 파이프라인상에서 디코드와 실행스테이지(Execute Stage)를 분리하기 위한 래지스터인 카운트버퍼(Count buffer)와 이러한 기억소자의 입출력을 조정하는 신호들로 구성되어 있다.
RE블럭은 앞으로 반복하여야할 명령어중 마지막 명령어의 변지수를 저장하는데 사용되는 레지스터와 파이프라인 상에서 디코드와 실행스테이지를 분리하기 위한 래지스터인 RE버퍼와 이러한 기억소자의 입출력을 조정하는 신호들로 구성되어 있다.
RS블럭은 앞으로 반복하여야 할 명령어중 마지막 명령어의 번지수를 저장하는데 사용되는 레지스터와 파이프라인상에서 디코드와 실행스테이지를 분리하기 위한 레지스터인 RE버퍼와 이러한 기억소자의 입출력을 조정하는 신호들로 구성되어 있다.
RS블럭은 앞으로 반복하여야 할 명령어중 제 1 명령어의 번지수를 저장하는데 사용되는 레지스터와 파이프라인상에서 디코드와 실행스테이지를 분리하기 위한 레지스터언 RS버퍼와 이러한 기억소자의 입출력을 조정하는 신호들로 구성되어 있다.
상기 신호들로 구성된 전체회로는 RS org, RE org, COUNT mg를 입력으로 받아서 PC의 입력이 되는 RS와 LOAD RS, FREEZE PC의 Contro1신호 출력을 발생시킨다.
그외의 내부에서 소요되는 컨트롤신호들로는 dec_cb,load_buf, olad_reg, dec_c가 있는데, 외부로 나가는 컨트롤신호인 load_rs, freeze_pc와 같이 컨트롤블럭에서 생성된다.
또한 신호선 1은 카운터버퍼(20)의 출력을 표시하는데 상기 신호들은 카운터의 입력(30)과 컨트롤블럭(80)의 입력으로 동작한다.
또한 신호선 2은 카운터의 출력(30)을 표시하고 이 신호들은 컨트롤불럭(80)의 입력으로 동작한다. 또한 신호선 3은 RE버퍼의 출력(40)을 표시하며 이 신호들은 RE(50)의 입력으로 동작한다.
또한 신호선 4은 RE(50)의 출력을 표시하며 이 신호들은 컨트롤블럭(80)의 입력으로 동작한다. 또한 신호선 5은 RS버퍼(40)의 출력을 표시하며 이 신호들은 RS(60)의 입력으로 동작한다.
또한 신호선 6은 RS버퍼(60)의 출력을 표시하며 이 신호들은 컨트롤블럭(80)과 PC(90)의 입력으로 동작한다.
또한 신호선 7은 IR(10)의 출력을 표시하며 이 신호들은 컨트롤불럭(80)의 입력으로 동작한다.
또한 신호선 8은 PC(90)의 출력을 표시하며 이 신호들은 컨트롤블럭(80)의 입력으로 동작한다.
제 2 도의 블럭도는 다음과 같이 동작한다.
즉, 디코드 스테이지는 카운터버퍼(20)와 RE버퍼(40), 그리고 RS버퍼(60)를 중심으로 구현되었다. 그리나 디코드 스테이지에서는 아래에 나타낸 바와같이 구현되며(A)로 표기한다.
IF(IR==REPEAT){
Assert load_buf ;
IF(RE_org==RS_org){
Assert dec_cb ;
Assert freeze_pc ;
}
}
식 (A)에서 IR의 내용이 반복명령어(Repeat Instmction)이면 1oad_buf가 어서트(assed)되고 이에 따라Count_org는 카운터 버퍼(20)에, RE_org는 RE버퍼(40)에, RS_org는 RS버퍼(60)에 각각 로딩(Loading)된다.
이때, Count_org, RE_org, RE_org의 내용은 IR(10)에 직접 기록되거나, 그 내용을 담고 있는 레지스터나 메모리주소에 대한 내용을 IR(10)에 기록하여 디코드 스테이지에서 읽어들여 각 버퍼의 입력으로 전달된다.
만약, 반복명령어가 하나의 명령어만을 반복하기 위한 경우에는, 상기의 조건에 의해 로드된 카운터버퍼(20)의 내용을 1만큼 감소시키고, PC update를 막아야 하는데, 상기 동작은 dec_cb와 freeze_pc를 assert하여 수행된다.
다시말하면 dec_cb가 어서트되면 카운터버퍼(20)의 내용이 1만큼 감소하고, freeze_pc가 assert되면 PC의 내용이 update되지 않는다.
loadbuf, deccb, freezepc 신호는 컨트롤블럭(80)에서 생성되며 이 신호들의 타이밍(timing)은 상기에서 설명된 동작을 구현할 수 있도록 구현되어야 한다.
실행스테이지에서는
{
Assert load_reg ;
} (B)
를 수행하면 되는데, load_reg가 Assert되면 1번신호가 카운터(30)에, 3번신호가 RE(50)에,5변신호가 RS(70)에 각각 전달된다. 이렇게 카운터(30), RE(50), RS(70)가 로딩되면 아래에 나타낸 (C)와 같은 컨트롤이 즉시 동작하계 되어 반복명령을 구동시킨다
즉, 반복명령어는 실행스테이지로부터, 카운터가 0이 되는 순간까지 PC update에 영향을 준다.
IF(Counter==0){
IF(PC==RE){
Assert load_rs ;
Assert dec_c ;
}
} (C)
식 (C)의 동작을 보면 COUNT가 0이 아니고, PC(90)와 RE(50)가 같으면, 즉 반복명령어의 마지막 명령어가 Fetch되었으면,load_rs를 assert하여 PC(90)에 RS(70)를 로딩하고, dec_c를 assert하여 카운터의 내용도 1만큼 감소시켜 반복명령어를 구현한다.
이상에서 설명한 바와같이, 상기 식 (A),(B),(C)에 의해 반복명령어를 구현하면 한가지 종류의 반복명령어에 대한 반복과 여러 명령어들에 대한 반복을 구현할 수 있어서 사용하기에 편리하며, 디코드 스테이지에 freeze_pc신호의 발생을 제외하고는 한 명령어의 반복이나 여러 명령의 반복에 대한 컨트를이 동일하여 소요되는 하드웨어를 최소화할 수 있는 효과가 있다.

Claims (2)

  1. 반복명령을 구현하기 위한 컨트롤 신호를 생성하는 컨트롤 블럭(80)과, 반복할 반복횟수를 저장하는 다운카운터와 파이프라인상에서 디코드와 실행스테이지를 분리하는 카운터 버퍼(20)로 구성된 카운터 블럭(30)과 반복할 마지막 명령어의 번지수를 저장하는 레지스터와 RE(40)로 구성된 RE블럭(50)과, 반복할 제 1 명령어의 번지수를 저장하는 레지스터와 RS버퍼(60)로 구성된 RS블럭(70)과, IR블럭(10)과, PC블럭(90)으로 구성된 컴퓨터 시스템에서 반복명령어를 구현하는 방법에 있어서 : 상기 IR블럭(10)의 내용이 반복명령어이면load-baf가 어서트되어 Count-org는 상기 카운터 버퍼(20)에 RE-org는 상기 RE버퍼(40)에 RS-org는 상기 RS버퍼(60)에 입력되고, 상기 반복명령어가 하나의 반복명령어이면 dec-cb가 어서트되어 상기 카운터 버퍼(20)의 내용이 1만큼 감소하고 freeze-pc가 어시트되어 상기 PC(90)의 내용이update되지 않게 하고, load-reg가 어서트되어 상기 카운터 블럭(30), RE블럭(50), RS블럭(70)에 각각전달되고, 마지막 반복명령어가 Fetch되면 load-rs를 어서트하여 상기 PC(90)블럭에 RS블럭(70)을 로딩하고, dec-c를 어서트하여 상기 카운터 블럭(30)의 내용을 1만큼 감소시켜 반복명령을 구동시키는 것을 특징으로 하는 파이프라인이 구비된 프로세서에서 간단한 반복명령어의 구현방법.
  2. 제 1 항에 있어서, 상기 load-baf, dec-cb, freeze-PC 신호는 상기 컨트롤 블럭(80)에서 생성되는것을 특징으로 하는 파이프라인 구조를 갖는 파이프라인이 구비된 프로세서에서 간단한 반복명령어의 구현방법.
KR1019930028675A 1993-12-20 1993-12-20 파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법 KR950014162B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019930028675A KR950014162B1 (ko) 1993-12-20 1993-12-20 파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019930028675A KR950014162B1 (ko) 1993-12-20 1993-12-20 파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법

Publications (2)

Publication Number Publication Date
KR950020146A KR950020146A (ko) 1995-07-24
KR950014162B1 true KR950014162B1 (ko) 1995-11-22

Family

ID=19371819

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019930028675A KR950014162B1 (ko) 1993-12-20 1993-12-20 파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법

Country Status (1)

Country Link
KR (1) KR950014162B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100710220B1 (ko) * 2005-02-22 2007-04-20 엘지전자 주식회사 디지털 신호처리 방법

Also Published As

Publication number Publication date
KR950020146A (ko) 1995-07-24

Similar Documents

Publication Publication Date Title
JP2796797B2 (ja) ディジタル命令プロセッサ制御装置によってインターラプトルーチンを処理する方法
EP0241946B1 (en) Information processing system
KR100571322B1 (ko) 파이프라인식 프로세서에서의 예외 취급 방법, 장치 및시스템
US5131086A (en) Method and system for executing pipelined three operand construct
KR950007881B1 (ko) 데이터 처리장치
US5502827A (en) Pipelined data processor for floating point and integer operation with exception handling
KR100210205B1 (ko) 스톨캐쉬를 제공하기 위한 장치 및 방법
US20070260857A1 (en) Electronic Circuit
US5835746A (en) Method and apparatus for fetching and issuing dual-word or multiple instructions in a data processing system
EP0079370B1 (en) Digital computer for executing instructions in three time-multiplexed portions
US6161171A (en) Apparatus for pipelining sequential instructions in synchronism with an operation clock
KR950012118B1 (ko) 병렬 파이프라인 명령 처리 장치
KR950014162B1 (ko) 파이프라인(Pipeline)이 구비된 프로세서에서 간단한 반복명령어의 구현방법
JP4465081B2 (ja) Vliwプロセッサにおける効率的なサブ命令エミュレーション
KR920002573B1 (ko) 데이타 처리기
KR100705872B1 (ko) 몇몇의 명령원으로부터의 명령 실행 프로세서 및 방법
KR102631214B1 (ko) 대규모 언어 모델 추론을 가속화하기 위한 효율적인 데이터 포워딩 방법 및 시스템
JP3461887B2 (ja) 可変長パイプライン制御装置
JP2000029696A (ja) プロセッサおよびパイプライン処理制御方法
JPS6020245A (ja) デ−タ処理装置の命令制御回路
JPS62189535A (ja) マイクロプロセツサ制御装置
JPH0512009A (ja) デイジタル信号処理装置
JPS61118840A (ja) 電子計算機の制御方式
JP2002323983A (ja) 命令生成方法、命令生成方法及び情報処理装置
JPH0658629B2 (ja) データ処理装置

Legal Events

Date Code Title Description
A201 Request for examination
G160 Decision to publish patent application
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20091029

Year of fee payment: 15

LAPS Lapse due to unpaid annual fee