KR100260012B1 - 프로그래머블 컨트롤러 - Google Patents

프로그래머블 컨트롤러 Download PDF

Info

Publication number
KR100260012B1
KR100260012B1 KR1019960042852A KR19960042852A KR100260012B1 KR 100260012 B1 KR100260012 B1 KR 100260012B1 KR 1019960042852 A KR1019960042852 A KR 1019960042852A KR 19960042852 A KR19960042852 A KR 19960042852A KR 100260012 B1 KR100260012 B1 KR 100260012B1
Authority
KR
South Korea
Prior art keywords
instruction
stage
register
memory
pipeline
Prior art date
Application number
KR1019960042852A
Other languages
English (en)
Other versions
KR970016872A (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
Priority claimed from JP7253398A external-priority patent/JPH0997180A/ja
Priority claimed from JP7282826A external-priority patent/JP3063593B2/ja
Priority claimed from JP28377795A external-priority patent/JP3206394B2/ja
Priority claimed from JP03848596A external-priority patent/JP3185649B2/ja
Priority claimed from JP03807296A external-priority patent/JP3651099B2/ja
Priority claimed from JP09128296A external-priority patent/JP3481039B2/ja
Priority claimed from JP09128396A external-priority patent/JP3414579B2/ja
Application filed by 이마이 기요스케, 마츠시다 덴코 가부시키가이샤 filed Critical 이마이 기요스케
Publication of KR970016872A publication Critical patent/KR970016872A/ko
Application granted granted Critical
Publication of KR100260012B1 publication Critical patent/KR100260012B1/ko

Links

Classifications

    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/05Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
    • 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 Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Automation & Control Theory (AREA)
  • Programmable Controllers (AREA)

Abstract

프로그래머블 컨트롤러는 명령 페칭 연산을 실행하기 위한 제1 스테이지 IF, 명령을 디코딩하고 범용 레지스터로부터 데이타를 페칭하기 위한 제2 스테이지 ID/RF, 산술 및 논리 연산, 데이타 어드레스 계산, 또는 타겟 분기선의 유효 어드레스의 계산을 실행하기 위한 제3 스테이지 EX, 데이타 메모리를 액세스하기 위한 제 4 스테이지 MEM, 및 비트 연산, 범용 레지스테에 대한 기록 연산, 또는 분기 연산을 실행하기 위한 제5 스테이지 WB/BPU를 가지는 파이프라인 스테이지를 포함하는데, 이 스테이지들은 파이프라인 방식으로 실행된다. 파이프라인 구조가 단일화된 명령 구조로 형성된 결과, 하드웨어 및 제어를 간략화시키고 파이프라인을 다중스테이지로 형성할 수 있게 된다.

Description

프로그래머블 컨트롤러
본 발명은 일차적으로 비트 연산을 위한 기본 명령 및 다수의 비트를 포함하는 데이타를 처리하기 위한 응용 명령을 수행하는 프로그래머블 컨트롤러에 관한 것으로서, 더욱 구체적으로는 기본 명령과 응용 명령 모두를 처리할 수 있도록 특별히 고안된 하드웨어 (프로세서)를 탑재한 프로그래머블 컨트롤러에 관한 것이다.
프로그래머블 컨트롤러는 산업용 장치, 기계 및 공장 자동화 장비의 제어에 널리 사용된다. 제어의 대상이 되는 장치의 증가된 복잡도와 고속 연산에 대한 요구와 관련되어, 다수의 입/출력 신호에 대한 고속 연산이 필요했다. 이런 이유로 인하여, 일차적으로 비트 연산을 위한 기본 명령 및 다수의 비트를 포함하는 데이타를 처리하기 위한 응용 명령을 수행할 수 있도록 특별히 고안된 하드웨어 (프로세서)에 의하여 고속 연산을 구현하게 된다. 프로그래머블 컨트롤러는 상기 하드웨어 및 통신 처리와 주변 장치 처리를 수행하는 범용 마이크로프로세서의 결합으로 구성된다.
상기 특별히 고안된 하드웨어 (즉, 프로세서)는 종래에는 3단 파이프라인 구조를 가졌고, 이 파이프라인 구조를 통하여 명령이 수행된다. 이러한 경우에, 실행단계에서 수행되는 처리는 하기와 같은 상세한 사항을 포함한다.
제1 스테이지: 후속 명령어를 페치 (fetch)하는 명령어 페치;
제2 스테이지: 다양한 산술 및 논리 연산, 데이타 메모리의 어드레스를 계산하기 위한 데이타 어드레스 계산 또는 명령어 디코드 및 레지스터 페치 처리에 뒤이은 타겟 분기선 연산 처리;
제3 스테이지: 데이타 메모리, 분기 연산, 비트 연산에 대한 판독/기록 연산 또는 범용 레지스터에 대한 기록 연산을 수행하기 위한 메모리 액세스 처리 (즉, 판독/기록 처리).
파이프라인 구조에서, 명령 실행의 전체 속도는 모든 스테이지 중에서 가장 느린 명령 실행 스테이지의 처리 비율 (processing rate)에 달려 있다. 그러한 파이프라인 처리의 속도를 향상시키려면, 각각의 명령 실행 스테이지가 균일한 속도로 실행되도록 할 필요가 있다. 그러나, 전술한 바와 같은 3단 파이프라인 구조에서는, 동일한 액세스 시간이 걸리는 메모리를 명령 메모리와 데이타 메모리로서 사용하면, 전체 실행 속도가 느려지고 더 많은 실행 시간이 필요하게 되는데, 이는 제1 스테이지에서 실행되는 처리보다 훨씬 긴 처리 시간이 걸리는 비트 연산과 같은 처리를 제2 또는 제3 스테이지에서 수행하기 때문이다.
본 발명은 상기와 같은 종래 기술의 단점을 고려하여 착상한 것으로서, 본 발명의 목적은 쉽게 구현할 수 있고 명령 실행 속도를 빠르게 할 수 있는 프로그래머블 컨트롤러 구조를 제공하고자 하는 것이다.
본 발명의 다른 목적은 파이프라인 해저드 (pipeline hazard)에 대처하기 위한 NOP 명령을 삽입함으로써 프로그램 크기를 증가시키지 않으면서 처리 속도를 증가시킬 수 있는 프로그래머블 컨트롤러 구조를 제공하고자 하는 것이다.
본 발명의 또 다른 목적은 고속 메모리를 사용하지 않으면서도 고속으로 처리할 수 있는 5단 파이프라인 구조를 갖는 프로그래밍 가능한 컨트로러를 제공하고자 하는 것이다.
본 발명의 또 다른 목적은 하나의 파이프라인 스테이지의 시간 내에 연산이 완전히 실행될 수 없는 명령을 쉽게 실행할 수 있는 5단 파이프라인 구조를 갖고 있는 프로그래머블 컨트롤러를 제공하고자 하는 것이다.
본 발명의 또 다른 목적은 다수의 메모리 액세스 사이클이 필요한 비트 처리 명령과 다른 명령들 모두를 빠르게 실행할 수 있는 5단 파이프라인 구조를 갖는 프로그로밍 가능한 컨트롤러를 제공하고자 하는 것으로서, 상기 프로그래밍 컨트롤러는 메모리 어드레스 계산 블럭 및 비트 처리 명령과 함께 사용되도록 특별히 고안된 파이프라인 레지스터 뿐만 아니라, 비트 처리 명령 연산 블럭으로부터 메모리를 액세스하는데 필요한 데이타를 송수신하기 위한 데이타 패스 (data path), 및 비트처리 연산의 실행 중에 비트 처리 연산에 뒤이은 명령의 실행을 필요한 만큼 보류시키기 위한 제어 회로를 포함한다. 또한, 본 발명의 또 다른 목적은 모든 명령을 일관되게 수행할 수 있는 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러를 제공하고자 하는 것으로서, 이 컨트롤러는 미분 명령과 함께 사용할 메모리가 재기록될 때 필요한 만큼 명령 수행을 보류시킬 수 있는 제어 회로를 가지고 있다.
본 발명의 또 다른 목적은 파이프라인 레지스터 내에 제어 신호를 제공하고 명령 수행 조건에 따라 상기 제어 신호의 값에 기초하여 실행 또는 취소될 지가 결정되는 명령이 실행될 때 명령 수행 조건이 결정될 때가지 필요한 만큼 명령의 실행을 보류시킴으로써, 명령이 실행될지 취소될지에 관한 결정을 계속하여 제어하면서 명령을 실행할 수 있는 프로그래밍 가능한 5단 파이프라인 구조를 제공하고자 하는 것으로서, 이 제어 신호는 현재 명령이 명령 실행 조건으로 구성된 플래그(BITACC)를 갱신하기 위한 비트 연산 명령임을 나타낸다.
본 발명의 또 다른 목적은 5단 파이프라인 구조로 되어 있고 일관되게 스펙에서 원하는 방식으로 다양한 정지 조건 (stop condition)에 기초하여 보류 연산을 실행할 수 있는 프로그래머블 컨트롤러를 제공하고자 하는 것이다.
본 발명의 또 다른 목적은 프로그램 크기를 억제함으로써 지표 부착 명령 (indexed instruction)을 고속으로 실행할 수 있는 프로그래머블 컨트롤러를 제공하고자 하는 것이다.
제1도는 본 발명의 프로그래머블 컨트롤러 (programmable controller)의 5단 파이프라인 구조를 도시한 예시도.
제2도는 본 발명의 프로그래머블 컨트롤러의 명령어 세트의 일 실시예와 명령어 구조를 개략적으로 도시하는 도면.
제3도는 본 발명의 프로그래머블 컨트롤러의 연산 코드의 구성의 예를 도시한 표.
제4도는 본 발명의 일 실시예에 따른 프로그래머블 컨트롤러를 도시한 블럭도.
제5도는 본 발명의 프로그래머블 컨트롤러의 명령 처리를 위한 시퀀스를 도시한 리스트.
제6도는 본 발명의 프로그래머블 컨트롤러의 연산 코드 (ALUOP)의 할당의 한가지 예를 도시한 표.
제7도는 제4도에 도시된 프로그래머블 컨트롤러의 데이타 패스를 도시한 블럭도.
제8도는 본 발명의 일 실시예에 따른 프로그래머블 컨트롤러를 도시한 블럭도.
제9도는 제8도에 도시한 프로그래머블 컨트롤러의 데이타 패스를 도시한 블럭도.
제10도는 제8도에 도시된 프로그래머블 컨트롤러의 선택 수단(SRCFB)의 회로 일부분을 도시한 블럭도.
제11도는 본 발명의 프로그래머블 컨트롤러의 동작을 설명하기 위한 도면.
제12도는 본 발명의 프로그래머블 컨트롤러의 동작을 설명하기 위한 도면.
제13도는 본 발명의 프로그래머블 컨트롤러의 다른 실시예를 도시한 블럭도.
제14도는 제13도에 도시한 프로그래머블 컨트롤러의 데이타 패스를 도시한 블럭도.
제15도는 본 발명의 프로그래머블 컨트롤러의 동작을 설명하기 위한 도면.
제16도는 본 발명의 프로그래머블 컨트롤러의 동작을 설명하기 위한 도면.
제17도는 본 발명의 프로그래머블 컨트롤러의 또 다른 실시예를 도시한 블럭도.
제18도는 본 발명의 프로그래머블 컨트롤러의 동작을 설명하기 위한 도면.
제19도는 본 발명의 프로그래머블 컨트롤러의 또 다른 실시예를 도시한 블럭도.
제20도는 본 발명의 프로그래머블 컨트롤러의 동작을 설명하기 위한 도면.
제21도는 본 발명의 프로그래머블 컨트롤러의 동작을 설명하기 위한 도면.
제22도는 본 발명의 프로그래머블 컨트롤러의 또 다른 실시예를 도시한 블럭도.
제23도는 본 발명의 프로그래머블 컨트롤러의 또 다른 실시예를 도시한 블럭도.
제24도는 제4도에 대응하는 간략화된 블럭도.
제25도는 본 발명의 제3 실시예에 따른 프로그래머블 컨트롤러의 블럭도.
제26도는 본 발명의 제3 실시예에 따른 프로그래머블 컨트롤러의 타이밍을 도시한 타이밍 차트.
제27도는 본 발명의 다른 실시예에 따른 프로그래머블 컨트롤러의 블럭도.
제28도는 제24도에 도시한 프로그래머블 컨트롤러의 타이밍의 하나의 예를 도시한 타이밍 차트.
제29도는 본 발명의 제4 실시예에 따른 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 블럭도.
제30도는 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 동작 타이밍의 제4 실시예를 도시한 타이밍 차트.
제31도는 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 연산 실행 제어 블럭(SUBALU)에 제공된 스테이트 머신(state machine)의 상태 천이(shift of the state)의 제4 실시예를 도시한 상태 천이도.
제32도는 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 연산 실행 제어 블럭(SUBALU)에 제공된 스테이트 머신의 상태 천이의 또 다른 실시예를 도시한 상태 천이도.
제33도는 본 발명의 다른 실시예에 따른 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 블럭도.
제34도는 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 개략적인 구성의 제5 실시예의 블럭도.
제35도는 본 발명의 제5 실시예에 따른 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 블럭도.
제36도는 본 발명의 프로그래머블 컨트롤러의 5단 파이프라인 구조를 도시한 예시도.
제37도는 본 발명의 일 실시예를 도시한 블럭도.
제38도는 제37도에 도시한 프로그래머블 컨트롤러의 동작 타이밍을 도시한 타이밍 차트.
제39도는 본 발명의 또 다른 실시예를 도시한 블럭도.
제40도는 데이타 메모리로부터 하나의 워드의 데이타가 판독되고 그 데이타의 하나의 비트가 변경된 후에 그 판독된 데이타가 다시 데이타 메모리에 기록되는 비트 처리 명령의 동작 타이밍을 도시한 타이밍 차트.
제41도는 제40도에 도시한 명령이 실행될 때 회로 내의 신호들의 타이밍 차트.
제42도는 메모리로부터 3개의 워드의 데이타가 판독되고 명령이 실행될 때 이 데이타가 다시 메모리에 기록되는 비트 처리 명령의 동작 타이밍을 도시한 타이밍 차트.
제43도는 제42도에 도시한 명령이 실행될 때 회로 내의 신호들의 타이밍 차트.
제44도는 미분 명령의 실행시에 얻은 회로의 타이밍 차트.
제45도는 제44도에 도시한 프로그래머블 컨트롤러의 동작 타이밍을 도시한 타이밍 차트.
제46도는 미분 명령의 해저드 처리 (hazard processing) 중에 발생하는 충돌(contradiction)에 대한 설명을 도시한 타이밍 차트.
제47도는 미분 명령과 비트 처리 명령이 실행될 때 대응 수단을 도시한 타이밍 차트.
제48도는 본 발명의 프로그래머블 컨트롤러의 연산 코드(PC_REHZDB)의 할당의 예를 도시하는 표.
제49도는 본 발명의 제6 실시예의 5-스테이지 구조를 갖는 프로그래머블 컨트롤러의 제1 및 제2 스테이지의 구성을 도시한 블럭도.
제50도는 본 발명의 5-스테이지 구조를 갖는 프로그래머블 컨트롤러의 제3 내지 제5 스테이지의 구성을 도시한 블럭도.
제51도는 본 발명의 프로그래머블 컨트롤러의 파이프라인 스테이지를 도시한 예시도.
제52도는 프로그래머블 컨트롤러의 동작을 도시하는 타이밍 차트.
제53도는 프로그래머블 컨트롤러의 동작을 도시하는 타이밍 차트.
제54도는 본 발명의 제7 실시예의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 제1 및 제2 스테이지의 구성을 도시한 블럭도.
제55도는 본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 제3 내지 제5 스테이지의 구성을 도시한 도면.
제56도는 본 발명의 스테이트 머신의 상태 천이를 개략적으로 도시한 도면.
제57도는 정지 명령을 수행할 때의 프로그래머블 컨트롤러의 동작을 도시한 타이밍 차트.
제58도는 인터럽션(interruption)에 의하여 보류되었을 때의 프로그래머블 컨트롤러의 동작을 도시한 타이밍 차트.
제59도는 프로그래머블 컨트롤러의 예에 따른 시퀀스 명령과 그 명령의 어드레스의 예를 도시한 도면.
제60도는 제7도에 도시한 시퀀스 명령의 동작을 도시한 흐름도.
제61도는 제59도에 도시한 프로그래머블 컨트롤러의 프리세트 데이타 영역 내에 있는 타이머 또는 카운터 명령과 그 명령의 어드레스의 예를 도시한 도면.
제62도는 제59도에 도시한 타이머 또는 카운터 명령의 동작을 도시한 흐름도.
제63도는 본 발명의 제8 실시예에 따른 프로그래머블 컨트롤러의 회로도.
제64도는 제63도에 도시한 프로그래머블 컨트롤러의 선택기의 접속을 도시한 블럭도.
제65도는 제63도에 도시한 프로그래머블 컨트롤러의 동작을 도시한 흐름도.
제66도는 본 발명의 제9 실시예에 따른 프로그래머블 컨트롤러의 회로도.
제67도는 제66도에 도시한 프로그래머블 컨트롤러의 선택기의 접속을 도시한 블럭도.
제68도는 제66도에 도시한 프로그래머블 컨트롤러의 동작을 도시한 흐름도.
〈도면의 주요부분에 대한 부호의 설명〉
1 : IF부 2 : 명령 메모리
3 : ID부 4 : EX부
5 : MEM부 6 : 데이타 메모리
7 : 메모리 액세스 인터페이스 8 : WB부
이를 위해, 본 발명의 프로그래머블 컨트롤러는 기본적인 비트 처리 연산 및 다수의 비트로 구성되는 응용 처리를 실행하는데, 그 방법은: 5개의 스테이지, 즉, 명령 메모리로부터 명령을 페치하기 위하여 명령 페치연산을 수행하기 위한 제1 스테이지, 명령을 디코딩하고 범용 레지스터로부터 값을 페치하기 위한 제2 스테이지, 산술 및 논리 연산, 데이타 어드레스 계산 또는 타겟 분기선의 유효 어드레스의 게산 등을 실행하기 위한 제3 스테이지, 데이타 메모리에 액세스하기 위한 제4 스테이지, 비트 연산, 범용 레지스터에 대한 기록 연산 또는 분기 연산 (branching operations)을 수행하기 위한 제5 스테이지의 5개의 스테이지로부터 명령 실행 스테이지들을 형성하는 단계; 및 파이프라인 방식으로 명령 실행 스테이지를 실행하는 단계를 포함한다.
본 발명의 프로그래머블 컨트롤러는 파이프라인 처리의 각각의 명령 실행 스테이지들을 위한 하드웨어로서 하기와 같은 부분들, 즉, 명령 메모리와 프로그램 카운터가 탑재된 IF부; 명령어 디코더와 범용 레지스터가 탑재된 ID부; 산술 및 논리 연산부가 탑재된 EX부; 데이타 메모리 및 이 데이타 메모리로의 액세스를 제어하기 위한 메모리 액세스 인터페이스가 탑재된 MEM부; 및 비트 연산 처리를 실행하기 위한 BPU를 포함한다.
본 발명의 프로그래머블 컨트롤러에 따르면, 프로그래머블 컨트롤러의 기본적인 처리 연산 중의 하나인 비트 연산 명령의 결과에 기초하여 각각의 명령 수행 스테이지의 수행 스펙(specification) 정보가 선정된 값으로 변경되고, 비트 연산 명령에 뒤이은 명령은 취소된다.
본 발명의 프로그래머블 컨트롤러에 따르면, 명령 실행 스테이지에 대응하는 하드웨어 사이에 복수의 파이프라인 레지스터가 제공되고, 명령 실행 스테이지의 실행 결과는 각각의 파이프라인 레지스터에 저장된다.
본 발명의 프로그래머블 컨트롤러에 따르면, 각각의 명령 실행 스테이지의 실행 스펙 정보는 복수의 파이프라인 레지스터 각각에 저장되고, 하나의 명령 실행 스테이지가 실행될 때마다 실행 스펙 정보가 다음 명령 실행 스테이지의 파이프라인 레지스터에 들어가게 된다.
본 발명의 프로그래머블 컨트롤러에 따르면, 명령 실행 스테이지에서 실행 가능하고 메모리 액세스 명령, 레지스터 간의 연산 명령, 즉치 명령 (immediate value instruction), 분기 명령 및 비트 연산 명령을 포함하는 축소 명령어 세트 구조(reduced instruction set structure)가 제공된다.
본 발명의 프로그래머블 컨트롤러에 따르면, 제3 스테이지에서 액세스될 데이타 메모리의 유효 어드레스 계산, 제4 스테이지에서 데이타 메모리에서의 데이타의 판독과 기록, 및 명령이 데이타 메모리로부터 범용 레지스터로의 데이타의 기록을 요구하는 경우에 제5 스테이지에서의 데이타의 기록을 수행하는 메모리 액세스 명령; 제3 스테이지에서 범용 레지스터 간의 산술 및 논리 연산, 및 제5 스테이지에서 범용 레지스터로의 데이타의 기록을 수행하는 레지스터 간의 연산 명령; 명령에 포함된 즉치(immediate value)와 선정된 범용 레지스터에 저장된 값을 사용하여 산술 및 논리 연산을 수행하는 즉치 연산 명령; 제3 스테이지에서 비교를 수행하고 제5 스테이지에서 상기 비교의 결과를 기초로 하여 분기 연산을 수행하는 분기 명령 (branching instruction); 및 제4 스테이지에서 데이타 메모리로부터 범용 레지스터로의 데이타의 페치를 수행하고 제5 스테이지에서 상기 데이타의 각각의 비트에 대하여 연산 처리를 수행하는 비트 연산 명령을 포함하는 축소 명령어 세트 구조가 제공된다.
이를 위해, 본 발명의 프로그래머블 컨트롤러는 파이프라인 방식으로 하기의 제1 내지 제5 스테이지, 즉, 명령 메모리로부터 명령을 페치하기 위한 명령 페치 연산을 수행하기 위한 제1 스테이지, 명령을 디코딩하고 범용 레지스터로부터 값을 페치하기 위한 제2 스테이지, 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 어드레스 계산 또는 분기 조건의 결정을 수행하기 위한 제3 스테이지, 데이타 메모리를 액세스하고 분기 연산을 수행하기 위한 제4 스테이지, 및 비트 연산, 범용 레지스터에 대한 기록 연산 또는 분기 연산을 수행하기 위한 제5 스테이지를 실행한다. 이 프로그래밍 가능한 제어기는 범용 레지스터의 출력, 제3 스테이지의 ALU의 출력, 제4 스테이지로 공급되는 ALU의 출력 중에서 제3 스테이지의 ALU의 입력 중의 하나를 선택하기 위한, 제2 스테이지에서 제공되는 선택 수단을 포함한다.
본 발명의 프로그래머블 컨트롤러는 파이프라인 방식으로 하기의 제1 내지 제5 스테이지, 즉, 명령 메모리로부터 명령을 페치하기 위하여 명령 페치 연산을 수행하기 위한 제1 스테이지, 명령을 디코딩하고 범용 레지스터로부터 값을 페치하기 위한 제2 스테이지, 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 주소 계산 또는 분기 조건의 결정을 수행하기 위한 제3 스테이지, 데이타 메모리에 액세스하거나 분기 연산을 실행하기 위한 제4 스테이지, 비트 연산, 범용 레지스터에 대한 기록 연산 또는 분기 연산을 실행하기 위한 제5 스테이지를 실행한다. 프로그래머블 컨트롤러는 제2 스테이지에서 출력되어 ALU의 입력 중의 하나가 되는 값, 제4 스테이지로 공급될 ALU의 출력, 제5 스테이지로 공급될 ALU의 출력 중에서 제3 스테이지의 ALU의 입력 중의 하나를 선택하기 위한, 제3 스테이지에서 제공되는 선택 수단을 포함한다.
본 발명의 프로그래머블 컨트롤러는 파이프라인 방식으로 하기의 제1 내지 제5 스테이지, 즉, 명령 메모리로부터 명령을 페치하기 위하여 명령 페치 연산을 실행하기 위한 제1 스테이지, 명령을 디코딩하고 범용 레지스터로부터 값을 페치하기 위한 제2 스테이지, 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 주소 계산 또는 분기 조건의 결정을 실행하기 위한 제3 스테이지, 데이타 메모리에 액세스하거나 분기 연산을 실행하기 위한 제4 스테이지, 비트 연산, 범용 레지스터에 대한 기록 연산 또는 분기 연산을 실행하기 위한 제5 스테이지를 수행한다. 프로그래머블 컨트롤러는 LOAD 명령에 따라 얻은 데이타가 LOAD 명령의 후속 명령에 필요한 경우 그 데이타가 범용 레지스터에 기록될 때까지 LOAD 명령의 후속 명령의 실행을 보류시키는 기능을 포함한다.
만일 레지스터 간의 연산 또는 인수 연산 (argument operation)에서와 같이 범용 레지스터에 기록될 값이 ALU에 의하여 게산되면, 이 값은 범용 레지스터에 기록되지 않았다 하더라도 파이프라인 어딘가에 존재하게 된다. 프로그래머블 컨트롤러와 유사하게, 파이프라인 내의 선정된 위치로부터 ALU의 인수로서 필요한 값을 얻기 위한 데이타 패스(data path)를 제공함으로써 파이프라인 해저드에 대처할 수 있다. 그러나, 범용 레지스터로 기록될 값이 선행하는 LOAD 명령에 따라 데이타 메모리로부터 얻어지면, 이 값은 메모리 액세스 연산이 실행되는 제4 스테이지에서 최초로 파이프라인에 나타난다. 후속 명령이 LOAD 명령에 의해 값이 갱신되는 범용 레지스터를 인수로서 참조하면, 프로그래머블 컨트롤러에 제공되는 데이타 패스를 사용하여 문제점을 해결하기가 어렵다.
이러한 문제점을 해결하기 위하여, 범용 레지스터에 필요한 값이 기록될 때까지 후속 명령의 수행을 보류시킬 필요가 있다. 이 방법은 NOP 명령의 삽입에 대응된다. 그러나, NOP 명령이 프로그램에 실제로 삽입되면, 프로그램 크기가 증가한다. 이러한 문제점을 방지하기 위하여, 현재 명령이 제2 스테이지에서 디코딩될 때 파이프라인 상의 선행 명령을 검사한다. 그 후, 현재 디코딩되고 있는 명령에서 필요로 하는 범용 레지스터의 값이 선행 명령에 의하여 갱신되었는지 여부가 검사된다. 만일 갱신되었다면, 현재 디코딩되고 있는 명령의 실행은 그 값이 범용 레지스터에 실제로 기록될 때까지 보류된다. 이와 동시에, 프로그램 카운터도 증가되지 못하도록 한다. 그 결과, NOP 명령의 삽입에 대응하는 연산이 수행되는 것이다.
본 발명의 프로그래머블 컨트롤러에 따르면, 프로그래머블 컨트롤러는, LOAD 명령의 후속 명령이 STORE 명령이고, STORE 명령에서 필요로 하는 값을 가지고 있는 범용 레지스터가 LOAD 명령에 의하여 갱신되면, LOAD 명령에 따라 제5 스테이지에서 범용 레지스터에 저장되는 데이타는 제4 스테이지에서 취해져서 데이타 메모리에 기록되는 것을 특징으로 한다.
전술한 바와 같이, 제3 스테이지에서 연산을 실행하는데 필요한 범용 레지스터의 값이 LOAD 명령에 의하여 갱신되면, 범용 레지스터로부터 필요한 값을 페치할 수 있을 때까지 명령의 실행을 보류시킬 필요가 있다. 그러나, STORE 명령의 경우에는, 범용 레지스터로부터 얻어진 값은 처리 없이 바로 파이프라인 레지스터를 통과하여 제4 스테이지에서 데이타 메모리에 기록된다. 그러므로, LOAD 명령에 따라 범용 레지스터에 공급된 값이 범용 레지스터에 기록되는 것을 기다리고 뒤이어 STORE 명령에 따라 범용 레지스터로부터 페치된 값을 데이타 메모리로 기록할 필요가 없다. LOAD 명령에 의하여 갱신된 범용 레지스터의 값을 데이타 메모리에 기록하기 위한 STORE 명령이 LOAD 명령의 후속 명령인 경우에는, 만일 파이프라인 해저드 연산이 프로그래머블 컨트롤러에 의하여 수행되면, 낭비적인 정지 시간이 소요된다.
이러한 문제점을 방지하기 위하여, 프로그래머블 컨트롤러에는 데이타 패스가 제공된다. LOAD 명령에 의하여 갱신된 범용 레지스터의 값을 데이타 메모리에 기록하기 위한 STORE 명령이 LOAD 명령의 후속 명령인 경우에는, 선행하는 LOAD 명령에 따라 (제5 스테이지에서) 데이타 메모리로부터 페치된 값은 STORE 명령의 실행을 보류시키는 대신에 데이타 패스를 통하여 후속 STORE 명령을 위한 데이타로서 제4 스테이지로 공급된다. 이를 요약하면, LOAD 명령에 의하여 갱신된 범용 레지스터의 값을 데이타 메모리로 기록하기 위한 STORE 명령이 LOAD 명령의 후속 명령인 경우에는, STORE 명령의 실행을 보류시키지 않으면서도 처리를 계속할 수 있다.
본 발명의 프로그래머블 컨트롤러에는 데이타 패스가 제공된다. LOAD 명령에 의하여 갱신된 범용 레지스터의 값을 데이타 메모리에 기록하기 위한 STORE 명령이 LOAD 명령의 하나의 스테이지 후에 뒤따르는 경우에는, 선행 LOAD 명령에 따라 (제5 스테이지에서) 데이타 메모리로부터 페치된 값은 STORE 명령의 실행을 보류시키는 대신에 데이타 패스를 통하여 후속 STORE 명령을 위한 데이타로서 제3 스테이지에서 취해진다. 이를 요약하면, LOAD 명령에 의하여 갱신된 범용 레지스터의 값을 데이타 메모리에 기록하기 위한 STORE 명령이 LOAD 명령의 하나의 스테이지 후에 뒤따르는 경우에는, STORE 명령의 실행을 보류시키지 않고서도 처리를 계속할 수 있다.
본 발명의 프로그래머블 컨트롤러는 파이프라인 방식으로 하기의 제1 내지 제5 스테이지, 즉, 명령 메모리로부터 명령을 페치하기 위하여 명령 페치 연산을 실행하기 위한 제1 스테이지, 명령을 디코딩하고 범용 레지스터로부터 값을 페치하기 위한 제2 스테이지, 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 주소 계산 또는 분기 조건의 결정을 실행하기 위한 제3 스테이지, 데이타 메모리에 액세스하거나 분기 연산을 실행하기 위한 제4 스테이지, 비트 연산, 범용 레지스터에 대한 기록 연산 또는 분기 연산을 수행하기 위한 제5 스테이지를 수행한다. 프로그래머블 컨트롤러는 분기 조건이 만족될 때 파이프라인 내에 이미 포함된 무효 명령의 실행을 금지하는 기능을 포함하고 있는 것을 특징으로 한다.
본 발명의 프로그래머블 컨트롤러는 파이프라인 방식으로 하기의 제1 내지 제5 스테이지, 즉, 명령 메모리로부터 명령을 페치하기 위하여 명령 페치 연산을 실행하기 위한 제1 스테이지, 명령을 디코딩하고 범용 레지스터로부터 값을 페치하기 위한 제2 스테이지, 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 주소 계산 또는 분기 조건의 결정을 실행하기 위한 제3 스테이지, 데이타 메모리에 액세스하거나 분기 연산을 실행하기 위한 제4 스테이지, 비트 연산, 범용 레지스터에 대한 기록 연산 또는 분기 연산을 수행하기 위한 제5 스테이지를 실행한다. 프로그래머블 컨트롤러는 분기 조건이 만족될 때 파이프라인 내에 이미 포함된 무효 명령의 수행을 금지하는 기능을 포함하고 있는 것을 특징으로 한다.
본 발명에 따라 5단 파이프라인 구조를 갖는 RISC 프로그래머블 컨트롤러가 분기 연산을 실행할 때, 분기선 어드레스의 계산과 분기 조건의 결정은 제3 스테이지에서 수행된다. 분기에 필요한 모든 값은 제3 스테이지에서 준비할 수 있으므로, 다음 제4 스테이지에서 분기 연산이 실행될 수 있다. 그러나, 물리적 회로의 제약때문에 어떤 회로 구성에서는 분기 연산이 제4 스테이지가 아닌 제5 스테이지에서 실행된다. 어떠한 경우에도, 분기 조건이 만족되면, 제3 스테이지에서 얻은 분기선 어드레스는 분기 연산을 실행하기 위한 스테이지에서 프로그램 카운터에 기록된다. 프로그램 카운터의 값에 따라 명령이 페치되어, 분기 연산이 완결된다. 이 때에, 파이프라인은 분기 조건이 만족되지 않을 경우 실행될 명령을 이미 포함하고 있다. 그러한 명령은 분기 조건이 만족되면 실행되지 말아야 한다. 그러한 명령의 실행을 방지하기 위하여, 파이프라인 내에 들어간 명령의 실행은 분기 조건이 만족되면 분기선 어드레스로부터 명령이 페치될 때까지 보류된다. 구체적으로는, 분기 조건이 만족되면, 데이타 메모리 또는 범용 레지스터는 파이프라인 내에 이미 들어간 명령에 의하여 재기록되는 것이 금지된다. 프로그래머블 컨트롤러는 제5 스테이지에서 분기 명령을 실행하고 전술한 바와 같은 처리를 수행한다. 프로그래머블 컨트롤러는 제4 스테이지에서 분기 명령을 실행한다.
본 발명에 따르면, 프로그래머블 컨트롤러는 파이프라인 방식으로 제1 내지 제5 스테이지, 즉, 명령 메모리로부터 명령을 페치하기 위하여 명령 페치 연산을 수행하기 위한 제1 스테이지, 명령 디코딩 연산과 범용 레지스터로부터 값을 페치하기 위한 레지스터 페치 연산을 실행하기 위한 제2 스테이지, 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 주소 계산 또는 분기 조건의 결정을 실행하기 위한 제3 스테이지, 데이타 메모리에 액세스하거나 분기 연산을 실행하기 위한 제4 스테이지, 비트 연산 처리, 범용 레지스터에 대한 기록 또는 분기 연산을 실행하기 위한 제5 스테이지를 실행한다. 프로그래머블 컨트롤러는 프로그램 카운터의 값에 1을 가산하여 얻어진 값을, 프로그램 카운터의 증가를 보류시키기 위한 제어 신호의 값에 관계 없이, 프로그램 카운터를 작동시키기 위한 클럭 신호보다 빠른 타이밍으로 변하는 클럭에 의하여 작동되는 레지스터에 래치시키는 기능과, 명령 메모리의 어드레스로서 프로그램 카운터의 값 대신에 레지스터의 값을 사용하여 명령을 페치하는 기능을 포함한다.
전술한 바와 같은 단점을 해결하기 위하여, 본 발명의 프로그래머블 컨트롤러에는 프로그래밍 카운터를 작동시키기 위한 클럭 신호보다 더 빠른 타이밍으로 변하는 클럭 신호로 작동되는 레지스터가 있다. 레지스터에 저장된 값을 명령 메모리의 어드레스로서 페치하는 결과, 명령 메모리의 어드레스는 보다 일찍 결정되어, 명령 메모리의 액세스 시간에 필요한 리드 타임(lead time)이 확실하게 된다.
본 발명에 따르면, 프로그래머블 컨트롤러는, 프로그램 카운터의 증가를 보류시키기 위한 제어 신호가 증가 연산을 보류시키기 위한 신호이면, 명령 메모리로부터 판독된 값은 명령을 페치하는 명령 레지스터에 로딩되지 않고 그 명령 레지스터의 값이 자체 내에 보유되는 구성을 가지고 있는 것을 특징으로 한다.
본 발명에 따르면, 5단 파이프라인 구조를 가지는 프로그래머블 컨트롤러는 분기 명령이 실행될 때 분기 조건이 만족되면, 분기 명령의 실행 중에 계산되는 타겟 분기선의 어드레스는 명령 메모리의 어드레스로서 사용되는 것이 특징인데, 이는 명령의 페치를 가능하게 한다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 미분 명령 (differential instruction)이 실행될 때 계산되는 비트 메모리의 어드레스를 사용함으로써 비트 메모리가 재기록될 수 있다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는, 프로그래머블 컨트롤러가 기동될 때, 그 이전에 외부로부터 설정된 프로그램 카운터의 초기값에 기초하여 명령 메모리의 정확한 어드레스로부터 명령이 페치될 수 있다.
이를 위하여, 본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는, 하나의 파이프라인 스테이지의 시간 내에 완결될 수 없는 연산의 명령이 실행될 때, 그 명령의 연산을 완결시키는데 필요한 기간 동안만 프로그램 카운터의 증가를 인터럽트하고 레지스터에 값을 다시 기록하거나 데이타 메모리에 데이타를 기록하기 위한 제어 신호를 무효화시킴으로써 파이프라인의 진행이 보류되고, 이에 따라 명령이 실행된다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 하나의 파이프라인 스테이지의 시간 내에 완결될 수 없고 불특정의 연산 시간을 필요로 하는 연산의 명령이 수행될 때, 프로그램 카운터의 증가를 인터럽트하고 레지스터에 값을 다시 기록하거나 데이타 메모리에 데이타를 기록하기 위한 제어 신호를 무효화시킴으로써 명령을 수행하는 연산 블럭으로부터 연산 완결 신호가 수신될 때까지 파이프라인의 진행이 보류되고, 이에 따라 명령이 수행된다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 하나의 파이프라인 스테이지의 시간 내에 완결될 수 없는 연산에 대한 복수의 종류의 명령이 실행될 때, 프로그램 카운터의 증가를 인터럽트하고 레지스터에 값을 다시 기록하거나 데이타 메모리에 데이타를 기록하기 위한 제어 신호를 무효화시킴으로써 파이프라인이 보류되며, 명령의 종류에 적합하게 연산의 완결을 결정하는 방법을 사용하고, 이에 따라 명령이 수행된다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 하나의 파이프라인 스테이지의 시간 내에 완결될 수 없는 연산의 명령이 실행되는지 여부를 결정하기 위한 플래그를 포함하고, 그 명령이 실행되지 않을 것으로 결정되면 그 명령 실행의 시작이 금지되어, 파이프라인 연산의 낭비적인 보류가 방지된다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 하나의 파이프라인 스테이지의 시간 내에 완결될 수 없는 연산의 명령을 실행하기 위한 연산 블럭을 포함하는데, 이 연산 블럭은 선정된 비트 위치에 설정된 값을 갖는 입력을 수신하고 필요한 대로 미사용 비트 (unused bit) 내의 값을 클리어하도록(clear) 배열되어 있을 뿐만 아니라, 복수 종류의 데이타 폭의 연산에 대처할 수 있도록 배열되어 있다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 하나의 파이프라인 스테이지의 시간 내에 완결될 수 없는 연산의 명령이 실행될 때, 만일 명령이 연산 결과를 레지스터에 저장하면, 연산 결과를 복수의 범용 레지스터에 재기록하기 위한 연산이 모두 완결될 때까지 선정된 정보가 유지된다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 하나의 파이프라인 스테이지의 시간 내에 완결될 수 없는 연산의 명령이 수행될 때, 명령 디코딩 스테이지와 명령 실행 스테이지 사이에 제공된 파이프라인 레지스터내의 명령의 인수 또는 제어 신호는 필요한 만큼 긴 시간 동안 유지된다.
본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는, 복수의 파이프라인 스테이지의 시간을 소모하여 곱셈 또는 나눗셈과 같은 프로그래머블 컨트롤러에 필요한 모든 연산을 수행할 수 있도록 특별히 고안된 연산 블럭, 및 연산 블럭과 파이프라인 구조의 필요한 부분들을 제어하기 위한 명령 실행 제어 블럭을 포함한다.
전술한 바와 같은 종래 기술의 문제점들을 해결하기 위하여, 본 발명의 프로그래머블 컨트롤러는 파이프라인 방식으로 5개의 스테이지, 즉, 명령 메모리(IM)으로부터 명령을 페치하는 명령 페치 연산을 수행하기 위한 제1 스테이지(IF), 명령 디코딩 연산과 범용 레지스터로부터 값을 페치하는 레지스터 페치 연산을 실행하기 위한 제2 스테이지(ID), 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 어드레스의 계산, 및 분기 조건의 결정을 실행하기 위한 제3 스테이지(EX), 데이타 메모리(DM)에 액세스하거나 분기 연산을 실행하기 위한 제4 스테이지(MEM), 및 비트 연산, 범용 레지스터에의 데이타의 기록, 또는 분기 연산을 실행하기 위한 제5 스테이지(WB)를 실행한다. 프로그래머블 컨트롤러는 로드 명령, 저장 명령, 및 메모리 액세스 명령 외에도 비트 처리 명령을 실행하기 위하여 비트 처리 명령과 함께 사용하기 위하여 특별히 고안된 메모리 어드레스 계산 블럭(BPUADR)을 포함한다. 비트 처리 명령과 함께 사용하도록 특별히 고안된 메모리 어드레스 계산 블럭(BPUADR)은 복수의 파이프라인 사이클 동안 데이타 메모리(DM)의 어드레스를 계산하여, 메모리 액세스 요청 신호를 발생시킨다. 그 결과, 복수의 인접한 파이프라인 스테이지 내에서 메모리 액세스를 할 수 있다. 또한, 프로그래머블 컨트롤러는 비트 처리 명령을 실행하도록 특별히 고안된 회로 블럭(BPU)를 가지고 있다. 이 회로 블럭으로부터 메모리 어드레스와 메모리 판독 요청 신호가 출력되어, 데이타 메모리(DM)으로부터의 데이타 판독이 실행된다. 선택적으로, 메모리 어드레스, 메모리에 기록할 데이타, 및 메모리 기록 요청 신호가 회로 블럭으로부터 출력되어, 데이타 메모리(DM)으로의 데이타 기록이 실행된다.
명령의 디코딩 결과에 따라 파이프라인 레지스터에는 후속 명령이 비트 처리 명령이라는 것을 보여 주는 제어 신호가 제공된다. 비트 처리 명령의 후속 명령의 실행을 보류시킬 필요가 있으면, 프로그램 카운터(PC)의 증가가 보류된다. 프로그램 카운터(PC)의 증가를 보류시키는 것만으로는 명령 실행을 보류시킬 수 없더라도, 명령의 디코딩 결과는 재기록되어, 비트 처리 명령의 후속 명령이 보류된다.
프로그래머블 컨트롤러는 입력이 변할 때에만 실행되는 미분 명령과 함께 사용하도록 특별히 고안된 데이타 메모리(BM)을 가지고 있다. 그 메모리의 어드레스 버스는 데이타 메모리(BM)과 명령 메모리(IM) 사이에 공유된다. 이러한 경우에, 명령 페치 시의 명령 메모리의 어드레스가 파이프라인 레지스터에 들어가고, 이렇게 하여 페치된 어드레스는 파이프라인 레지스터를 통하여 비트 처리 명령과 함께 사용하도록 특별히 고안된 회로 블럭으로 순차적으로 전달된다. 미분 명령이 그와 함께 사용하도록 특별히 고안된 데이타 메모리(BM)에 재기록될 때, 전달된 명령 메모리의 어드레스는 메모리에 데이타를 기록하는데 사용할 어드레스로서 사용된다. 명령 페치를 확실히 하기 위하여, 미분 명령과 함께 사용하도록 특별히 고안된 데이타 메모리에 미분 명령이 재기록될 때, 프로그램 카운터의 증가가 보류된다. 또한, 미분 명령이 그와 함께 사용하도록 특별히 고안된 데이타 메모리에 재기록될 때, 명령 메모리로부터 얻어진 명령은 후속 연산에 전혀 영향을 주지 않는 명령과 함께 재기록된다. 더욱이, 연산이 동시에 일어나면 필요한 만큼 명령 수행을 보류시킴으로써 명령의 페치가 확실하게 된다.
본 발명의 프로그래머블 컨트롤러는 전술한 종래 기술의 문제점을 해결하고 파이프라인 방식으로 5개의 스테이지, 즉, 명령 메모리(IM)으로부터 명령을 페치하는 명령 페치 연산을 실행하기 위한 제1 스테이지(IF), 명령 디코딩 연산과 범용 레지스터로부터 값을 페치하는 레지스터 페치 연산을 실행하기 위한 제2 스테이지(ID), 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 어드레스의 계산, 및 분기 조건의 결정을 실행하기 위한 제3 스테이지(EX), 데이타 메모리(DM)에 액세스하거나 분기 연산을 실행하기 위한 제4 스테이지(MEM), 및 비트 처리 연산, 범용 레지스터에의 데이타의 기록, 또는 분기 연산을 실행하기 위한 제5 스테이지(WB)을 실행한다. 프로그래머블 컨트롤러는 복수의 플래그 값을 포함하는 명령 실행 조건이 결정되고, 명령 실행 조건이 명령 실행 스테이지에서 만족될 때에만 특정명령이 실행되도록 되어 있다.
또한, 프로그래머블 컨트롤러는, 플래그 설정 명령 직후의 명령에 대한 명령 실행 스테이지가 시작될 때, 플래그 설정 명령이 명령 실행 조건을 구성하는 플래그를 갱신하는 것을 완료하는 것을 가능하게 하고, 명령이 실행될지 무효화될지 여부에 대한 결정을 계속하여 제어하면서 명령을 실행할 수 있도록 하는 구조를 포함하는 것을 특징으로 한다. 또한, 프로그래머블 컨트롤러는, 산술 연상 명령 직후의 명령에 대한 명령 실행 스테이지가 시작될 때, 다양한 종류의 산술 연산 명령이 명령 실행 조건을 구성하는 플래그를 갱신하는 것을 완료하는 것을 가능하게 하고, 명령이 실행될지 무효화될지 여부에 대한 결정을 계속하여 제어하면서 명령을 실행할 수 있도록 하는 구조를 포함하는 것을 특징으로 한다.
프로그래머블 컨트롤러는, 제5 스테이지에서 비트 연산 처리를 수행하기 위한 비트 처리 명령에 의하여 갱신된 플래그로부터 비트 처리 명령을 형성할 수 있도록 하고, 현재의 명령이 명령 실행 조건과 관계있는 플래그를 갱신하기 위한 비트 처리 명령이라는 것을 보여주는 제어 신호를 파이프라인 레지스터에 제공할 수 있도록 하고, 명령 수행 조건이 결정되지 않는 동안에는 제어 신호에 기초하여 명령 실행을 보류시킬 수 있도록 하고, 명령을 실행할 것인지 무효로 할 것인지에 대한 결정을 계속하여 제어하면서 명령을 실행할 수 있도록 하는 구조를 포함하는 것을 특징으로 한다.
전술한 바와 같은 단점을 해결하기 위하여, 본 발명의 프로그래머블 컨트롤러는 파이프라인 방식으로 5개의 스테이지, 즉, 명령 메모리로부터 명령을 페치하는 명령 페치 연산을 실행하기 위한 제1 스테이지(IF), 명령 디코딩 연산과 범용 레지스터로부터 값을 페치하는 레지스터 페치 연산을 실행하기 위한 제2 스테이지(ID), 산술 및 논리 연산, 데이타 어드레스 계산, 타겟 분기선의 유효 어드레스의 계산, 및 분기 조건의 결정을 실행하기 위한 제3 스테이지(EX), 데이타 메모리에 액세스하거나 분기 연산을 수행하기 위한 제4 스테이지(MEM), 및 비트 연산 처리, 범용 레지스터에의 데이타의 기록, 또는 분기 연산을 실행하기 위한 제5 스테이지(WB)을 실행한다. 프로그래머블 컨트롤러는 기동/정지 제어 연산을 실행하기 위한 스테이트 머신(state machine)을 포함한다. 명령이 페치될 때 얻어지는 프로그램 카운터의 값은 파이프라인 레지스터에 입력되고, 그 값은 전혀 변화하지 않은 채로 파이프라인 레지스터를 통하여 전달된다. 파이프라인 레지스터에 존재하는 프로그램 카운터의 값에 기초하여, 프로그래머블 컨트롤러가 보류 모드에 있는 동안에 기동/정지 제어 목적의 스테이트 머신은 프로그램 카운터에 기록할 값을 계산한다. 기동/정지 목적의 스테이트 머신에 의하여 정지 조건이 충족된 것이 감지된 결과로 프로그래머블 컨트롤러가 보류 모드로 전환된 후에, 정지 조건을 충족한 명령을 뒤따르는 또다른 명령은 이미 파이프라인 스테이지에 들어왔더라도 실행이 금지된다. 이러한 방식으로, 무효 명령의 실행을 방지한다. 그러한 구조를 채용한 결과, 불일치 없이 스펙에 따라 다양한 정지 조건에 기초하여 보류 연산을 실행할 수 있는 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러를 제공할 수 있다.
전술한 바와 같은 문제점을 해결하기 위하여, 본 발명의 프로그래머블 컨트롤러는 입력 프로그램의 명령 코드에 기초하여 비트 처리 연산과 계산할 대상으로서 각각 복수의 비트로 구성된 워드를 포함하는 응용 처리를 실행하는 프로세서를 가지고 있고, 이 프로세서는 데이타를 판독하고 기록하기 위한 범용 레지스터, 실행될 명령의 어드레스를 계산하기 위한 어드레스 계산부, 및 외부 메모리에 대한 데이타의 기록과 판독을 위한 메모리 액세스부를 더 포함한다. 이 프로그래머블 컨트롤러는, 범용 레지스터에 접속되어 있으며 명령 코드에 제공된 연산 대상을 간접적으로 특정하는 지표 부착 명령 (indexed instruction)의 존재 여부를 표시하기 위한 디스플레이 플래그 (display flag)의 식별 결과에 기초하여 범용 레지스터의 내용에 대한 연산을 실행함으로써 하드웨어를 사용하여 지표 부착 명령을 실행하는 선택기(selector)를 포함한다.
본 발명에 정의된 프로그래머블 컨트롤러에서는, 명령 코드는 연산될 대상에 의하여 어드레싱되는 시퀀스 명령(sequence instruction)이다.
본 발명의 프로그래머블 컨트롤러는 선택기가 어드레스 계산부 내에 제공된다.
본 발명의 프로그래머블 컨트롤러에서는, 명령 코드는 계산될 대상을 프리세트 데이타로서 사용하는 타이머 또는 카운터 명령이다.
본 발명의 프로그래머블 컨트롤러는 외부 메모리로부터 데이타를 판독하기 위한 데이타 패스에 선택기가 제공된다.
본 발명의 프로그래머블 컨트롤러에 따르면, 전체 처리 속도가 향상된다. 이는 명령어 세트와 명령어 구조를 제공하도록 하기 위하여 특별히 고안된 하드웨어 (즉, 프로세서)의 명령 실행 단계를 5개의 스테이지로 분할하고, 이 특별히 고안된 하드웨어 (즉, 프로세서)의 구성 요소들의 이용율을 향상시킴으로써 실현된다. 일반적으로, 명령 실행 단계가 다수의 스테이지로 분할되면, 이는 다시 명령 실행의 제어를 복잡하게 한다. 본 발명의 프로그래머블 컨트롤러는 명령어 구조를 많이 통일한 결과 특별히 고안된 하드웨어와 제어를 단순화함으로써 다수의 스테이지로 쉽게 구성되도록 배열된다. 그 결과, 간단한 하드웨어를 사용하여 5단 파이프라인 구조의 제어를 할 수 있다. 또한, 프로그래머블 컨트롤러는 그 기본적인 처리 연산중의 하나인 비트 처리 명령의 결과에 기초하여 각각의 명령 실행 스테이지의 실행 스펙 정보를 선정된 값으로 변경시킬 수 있도록 배열되어 있다. 따라서, 파이프라인 처리를 인터럽트하지 않고서도 프로그래머블 컨트롤러에 특별한 비트 연산 처리에 의하여 후속 응용 명령을 무효시킬 수 있다 (실행하지 않을 수 있다).
[제1 실시예]
도1은 본 발명의 프로그래머블 컨트롤러의 5단 파이프라인 구조를 도시한 도면이다. 도1은 각각의 실행 스테이지에서 파이프라인 처리의 상세한 사항을 개략적으로 도시한다. 도면에서, IF (Instruction Fetch; 명령 페치)로 표시한 제1 스테이지는 다음에 실행될 명령이 명령 레지스터에 의하여 명령 메모리로부터 페치되는 스테이지이다. ID/RF로 표시하는 제2 스테이지는 명령 디코딩과 범용 레지스터로부터의 값의 페치가 수행되는 스테이지이다. EX로 표시하는 제3 스테이지는 산술 및 논리 연산, 데이타 어드레스 계산 또는 타겟 분기선의 유효 어드레스를 계산하기 위한 분기 연산이 수행되는 스테이지이다. MEM으로 표시한 제4 스테이지는 데이타 메모리에 대한 액세스가 수행되는 스테이지이다. 최종적으로, WP/BPU로 표시하는 제5스테이지는 비트 연산, 범용 레지스터에 대한 기록 연산 또는 분기 연산이 수행되는 스테이지이다.
도2를 참조하여, 본 발명의 명령어 세트와 명령어 구조의 하나의 예에 대하여 설명하기로 한다. 도2에 도시한 바와 같이, 명령은, 메모리에 액세스하기 위한 메모리 액세스 명령 (M형 명령), 레지스터 간의 연산을 실행하기 위한 레지스터 간의 연산 명령 (R형 명령), 명령에 포함된 즉치 데이차와 범용 레지스터에 저장된 값에 대한 연산을 수행하기 위한 즉치 명령 (I형 명령), 비교를 수행하고 그 비교 결과에 응답하여 분기 연산을 실행하는 분기 명령 (J형 명령), 그리고 비트 연산 처리를 실행하기 위한 비트 연산 명령 (B형 명령)을 포함한다.
M형 명령은 src1 필드, dst1 필드, 및 오프셋 필드가 뒤이어지는 연산 코드를 포함한다. 예를 들어, M형 명령은 다음의 처리를 수행한다 (즉, 로드 명령). 즉, src1 필드에 의하여 지정된 범용 레지스터 내에 저장된 어드레스 값과 오프셋 필드에 저장된 오프셋 값을 합산함으로써 유효 어드레스가 얻어진다. 데이타 메모리에서 유효 어드레스에 저장된 값은 dst1 필드에 의하여 지정된 범용 레지스터로 로딩된다.
R형 명령은 src1 필드, src2 필드, dst1 필드와 기능 필드 (function field)가 뒤이어지는 연산 코드 필드를 포함한다. 예를 들어, R형 명령도 src1 필드에 의하여 지정된 범용 레지스터에 저장된 값과 src2 필드에 의하여 지정된 범용 레지스터에 저장된 값의 연산의 결과를 dst1 필드에 의하여 지정된 범용 레지스트에 로딩시키는 기능을 가지고 있다. 예를 들어, 기능 필드는 연산 방법의 스펙을 구체적으로 지정하는 데 사용된다.
I형 명령은 src1 필드, dst1 필드 및 즉치 필드가 뒤따르는 연산 코드를 포함한다. 예를 들어, I형 명령은 src1 필드에 의하여 지정된 범용 레지스터에 저장된 값과 즉치 필드에 저장된 값의 연산의 결과를 dst1 필드에 의하여 지정된 범용 레지스터에 로딩시키는 기능을 가지고 있다.
J형 명령은 src1 필드, src2 필드, 및 오프셋 필드가 뒤따르는 연산 코드를 포함한다. 예를 들어, J형 명령은 오프셋 필드에 저장된 오프셋 값을 프로그램 카운터에 가산하고, src1 필드에 의하여 지정된 범용 레지스터에 저장된 값과 src2 필드에 의하여 지정된 범용 레지스터에 저장된 값 간의 비교의 결과에 따라 분기 연산을 실행하는 기능을 가지고 있다.
B형 명령은 비트 처리 명령 필드가 뒤따르는 연산 코드 필드를 포함한다. 예를 들어, 이러한 B형 명령은 데이타의 특정 비트를 1로 설정하는 기능을 가지고 있다.
본 발명의 프로그래머블 컨트롤러의 명령에 대해서는, 연산 코드 필드의 비트 폭은 통일되어 있고, 범용 레지스터를 지정하기 위한 두개의 필드는 B형 명령이 아닌 명령의 연산 코드 필드를 뒤따른다. 필드의 위치는 두개의 범용 레지스터를 지정하기 위하여 통일된다. 그 결과, 후술하는 방식으로 특별히 고안된 하드웨어의 구조와 파이프라인 제어를 간단하게 할 수 있다.
도3은 본 발명의 프로그래머블 컨트롤러의 명령어 세트의 하나의 실시예를 도시한 도면이다. 도3은 6개의 비트로 구성된 연산 코드 필드를 가지고 있는 명령어 세트의 하나의 실시예를 도시하는 표이다. 표에서, "종류"는 명령어의 형태를 지정하고, "명령"은 명령의 명칭을 지정하고, "연산"은 명령의 기능을 지정한다.
도4를 참조하여 본 발명의 하나의 실시예에 따른 프로그래머블 컨트롤러에 대하여 설명하기로 한다. 도4는 본 발명의 프로그래머블 컨트롤러와 함께 사용하도록 특별히 고안된 하드웨어 구조를 도시하는 블럭도이다. 도면에서, IF부(1)은 명령을 저장하기 위한 명령 메모리(2)와, 프로그램 카운터 제어 회로(PCCAL)로부터 신호를 수신할 때 후속 실행 명령이 저장되는 명령 메모리(2)의 어드레스를 계수하는 프로그램 카운터(PC)를 포함한다. 프로그램 카운터(PC)에 의하여 계수되는 어드레스에 따라 명령 메모리(2)로부터 판독되는 명령을 가지고 있는 명령 레지스터(IR)은 IF부(1)의 연산 결과를 가지고 있는 파이프라인 레지스터(IF/ID)로서 두배가 되고 그 결과를 후속 스테이지에서 ID부(3)으로 보낸다.
ID부(3)은 일차적으로 명령의 연산 코드부를 디코딩하기 위한 명령 디코더 제어부, 복수의 범용 레지스터로 구성된 범용 레지스터 블럭(REGFILE), 및 파이프라인 레지스터(ID/EX)로 신호 출력을 스위칭하기 위하여 명령 디코더(CONTROL)의 후속 스테이지에 접속된 멀티플렉서(MUX1)을 포함한다. 범용 레지스터 블럭(REGFILE)에서, RDREG1은 범용 레지스터 중에서 어느 것이 RDDATA1로부터의 값을 출력하는지를 지정하는 신호를 수신하기 위한 단자를 지정한다. RDREG2는 범용 레지스터 중에서 어느 것이 RDDATA2로부터의 값을 출력하는지를 지정하는 신호를 수신하기 위한 입력 단자를 지정한다. WTREG는 WTDATA로부터 입력된 값이 어느 범용 레지스터에 기록되는지를 지정하는 신호를 수신하기 위한 입력 단자를 지정한다. 명령 디코더(CONTROL)로부터의 출력은 파이프라인 레지스터(ID/EX)의 WB, MEM 및 EX 스테이지에 저장된다. RDDATA1 및 RDDATA2로부터 출력된 값들은 파이프라인 레지스터(ID/EX)의 src1 및 src2 필드에 저장된다. 명령에 포함된 즉치 데이타는 파이프라인 레지스터(ID/EX)의 IREX1에 저장되고, M과 I형 명령의 dst1 필드의 값은 IREX2에 저장된다. R형 명령의 dst2 필드의 값은 파이프라인 레지스터(ID/EX)의 IREX3에 저장된다.
EX부(4)는 산술 및 논리 연산을 실행하기 위한 산술 및 논리 연산부(이하, ALU), ALU의 입력 중의 하나를 src2 필드의 출력 또는 파이프라인 레지스터(ID/EX)의 IREX1의 출력으로 스위칭하기 위한 스위칭 제어부(ARGCAL), 파이프라인 레지스터(ID/EX)의 WB와 파이프라인 레지스터(EX/MEM)의 WB 사이에 위치하고 파이프라인 레지스터(EX/MEM)의 WB로 출력을 스위칭하는 멀티플렉서(MUX2), 파이프라인 레지스터(ID/EX)의 MEM과 파이프라인 레지스터(EX/MEM)의 MEM 사이에 위치하고 파이프라인 레지스터(EX/MEM)의 WB로 출력을 스위칭하는 멀티플럭서(MUX3), 및 파이프라인 레지스터(EX/MEM)의 WTREGMEM으로의 출력으로서 IREX2에 저장된 값과 IREX3에 저장된 값 사이에 스위칭하기 위한 멀티플렉서(MUX4)를 포함한다. ALU로부터의 출력은 파이프라인 레지스터(EX/MEM)의 ALURSLT에 저장된다. 파이프라인 레지스터(ID/EX)의 src2의 출력은 파이프라인 레지스터(EX/MEM)의 SRCMEM에서도 유지된다.
MEM부(5)는 데이타 메모리(6)으로의 액세스를 제어하기 위한 메모리 액세스 인터페이스(7), 파이프라인 레지스터(EX/MEM)의 WB와 파이프라인 레지스터(MEM/WB)의 WB 사이에 배치되어 파이프라인 레지스터(MEM/WB)의 WB로 출력을 스위칭하는 멀티플렉서(MUX5)를 포함한다. 파이프라인 레지스터(EX/MEM)의 ALURSLT로부터의 출력은 파이프라인 레지스터(MEM/WB)의 ALURSLT에 유지되고, 그 출력이 데이타 메모리(6)을 어드레싱하는 데 사용된다. 파이프라인 레지스터(EX/MEM)의 MEM으로부터의 출력은 메모리 액세스 인터페이스(7)에 입력된다. 파이프라인 레지스터(EX/MEM)의 SRCMEM으로부터의 출력은 데이타 메모리(6)에 기록된다. 파이프라인 레지스터(EX/MEM)의 WTREGMEM의 출력은 파이프라인 레지스터(MEM/WB)의 WTREGMEM으로 출력된다. 데이타 메모리(6)의 RDDATA의 출력은 파이프라인 레지스터(MEM/WB)의 MEMDATA에 유지된다.
WB부(8)은 비트 연산을 실행하기 위한 비트 연산부(이하, BPU), BPU의 출력에 따라 후속 응용 명령을 무효화시키기 위한 (즉, 실행하지 않기 위한) 비트 누산기 (bit accumulator; 이하, BITACC), 및 범용 레지스터 블럭(REGFILE)에 기록할 값을 파이프라인 레지스터(MEM/WB)의 ALURSLT로부터의 출력이나 파이프라인 레지스터(MEM/WB)의 MEMDATA로부터의 출력으로 스위칭하기 위한 멀티플렉서(MUX6)을 포함한다.
특별히 고안된 하드웨어가 도4에 도시한 방식으로 구성된 경우에는, 도5에 도시한 각각의 형태의 명령을 처리하기 위한 시퀀스가 필요하게 된다. M형 명령의 경우에, 명령 페치는 제1 스테이지에서 수행되고, 명령 디코딩과 레지스터로부터의 데이타의 페치는 제2 스테이지에서 수행된다. 데이타 어드레스 계산은 제3 스테이지에서 수행되고, 메모리로의 액세스가 제4 스테이지에서 수행된다. 레지스터에 대한 기록 연산은 제5 스테이지에서 수행된다.
R형 및 I형 명령의 경우에, 명령 페치가 제1 스테이지에서 수행되고, 명령 디코딩과 레지스터로부터의 값의 페치는 제2 스테이지에서 수행된다. 산술 및 논리 연산이 제3 스테이지에서 수행되고, 레지스터에 대한 기록 연산이 제5 스테이지에서 수행된다.
J형 명령의 경우에, 명령 페치는 제1 스테이지에서 수행되고, 명령 디코딩과 레지스터로부터의 값의 페치는 제2 스테이지에서 수행된다. 비교 목적을 위한 산술 및 논리 연산은 제3 스테이지에서 수행되고, 분기 연산은 제5 스테이지에서 수행된다.
B형 명령의 경우에, 명령 페치는 제1 스테이지에서 수행되고, 명령 디코딩은 제2 스테이지에서 수행된다. 데이타 메모리(6)으로부터의 데이타의 판독은 제4 스테이지에서 수행되고, 비트 연산 처리는 제5 스테이지에서 수행된다.
도4에 도시한 본 발명의 프로그래머블 컨트롤러의 각각의 명령 처리 스테이지에 관하여 하나의 파이프라인 스테이지에 대하여 설명하기로 한다. 우선, 갱신된 프로그램 카운터(PC)의 값이 명령 메모리(2)의 어드레스로서 사용되고, 명령 메모리(2)로부터 판독된 명령은 파이프라인 레지스터(IF/ID)로 로딩된다. 명령의 어드레스가 J형 명령에 의하여 변경되는 경우를 제외하고는, 후속 클럭 신호의 상승 연부에서 하나만큼 증가되는 값이 프로그램 카운터(PC)의 값으로서 저장된다. 이와 유사하게, 새로운 명령이 차례로 프로그램 카운터에 로딩된다.
로딩된 명령의 연산 코드부는 일차적으로 제2 스테이지의 명령 디코딩 연산에서 명령 디코더(CONTROL)의 조합 회로에 의하여 디코딩된다. 이렇게 하여 디코딩된 신호는 후속 제3, 제4 및 제5 스테이지에서 사용하기 위한 모든 명령 실행 스펙을 포함한다. 명령 실행 스펙은 클럭의 다음 상승 연부에서 파이프라인 레지스터(ID/EX)의 EX, MEM, WB 스테이지로 로딩된다. 이와 동시에, 명령에 포함된 src1 및 src2 필드에 의하여 지정된 레지스터로부터 데이타가 판독된다. 이렇게 판독된 데이타는 파이프라인 레지스터(ID/EX)의 src1 및 src2 필드에도 저장된다. 또한, 즉치 (오프셋) 필드는 M형 및 I형 명령의 dst1 필드를 명령 내에 포함하고, R형 명령의 dst1 필드는 파이프라인 레지스터(ID/EX)의 IREX1, IREX2 및 IREX3에도 보유된다.
제3 스테이지에서, ALU는 파이프라인 레지스터(ID/EX) 내에 보유되는 데이타에 대한 산술 및 논리 연산을 실행한다. 연산을 실행할 데이타의 조합은 다음과 같다.
(1) 로딩되어 ALU 내에서 산술 및 논리 연산을 할 데이타 중의 하나는 src1 필드이다.
(2) 로딩되어 ALU 내에서 산술 및 논리 연산을 할 데이타 중의 나머지 하나는 다음과 같은 방식으로 ARGCAL의 값에 의하여 선택된다. 데이타 항목도 필요한 만큼 비트 확장을 한다.
(a) R형 및 J형 명령 ... src2
(b) M형 및 I형 명령 ... IREX1
R형 및 I형 명령의 경우에, ALUOP에 의하여 지정되는 연산의 실행 스펙은 대응하는 연산 코드를 ALU로 발생시킴으로써 원하는 연산을 실행하게 된다. 예를 들어, 연산 코드(ALUOP)의 할당의 예가 도6에 도시되어 있다
M형 명령의 경우에, 액세스할 데이타의 어드레스가 ALU에 의하여 계산된다. 그 결과, ALUOP는 ALU로 하여금 Add에 대한 처리를 수행하도록 지시한다. 즉, 데이타 메모리(6)의 유효 어드레스는 IREX1에 저장된 오프셋 필드에 포함된 어드레스와 src1의 레지스터의 값을 가산함으로써 얻어지는데, 이는 지표 부착 연산(indexing operation)을 한다는 것을 말한다. 0이라는 입력을 수신한 범용 레지스터가 src1 필드로서 지정되는 한, 오프셋 필드에 포함된 어드레스를 절대 어드레스로서 지정할 수 있는 것이다.
J형 명령의 경우에는, 분기 조건은 ALU 내에서의 비교에 의하여 결정된다. 이런 이유로, ALUOP는 ALU로 하여금 이 예에서 Sub를 처리하도록 지시한다. 즉, src2 필드에 의하여 지정된 레지스터의 값을 src1 필드에 의하여 지정된 레지스터의 값으로부터 감산하고, 감산의 결과와 분기 조건이 서로 비교된다. J형 명령의 경우에는, 분기 목적의 비교를 위한 회로 이외의 회로는 간략화를 위하여 도4에 도시한 블럭도로부터 생략되어 있다.
ALU 연산의 결과는 다음 클럭 신호의 상승 연부에서 파이프라인 레지스터(EX/MEM)의 ALURSLT에서 가지고 있는다. 이와 동시에, src2 필드는 변하지 않고 그대로 파이프라인 레지스터(EX/MEM)의 SRCMEM에서 가지고 있는다. M형 및 I형 명령을 위한 dst1 필드를 보유하기 위한 IREX2 또는 R형 명령을 위한 dst2 필드를 보유하기 위한 IREX3 중의 하나가 멀티플렉서(MUX4)에 의하여 선택된다. 이렇게 하여 선택된 것은 파이프라인 레지스터(EX/MEM)의 WTRGMEM에 보유된다. 선택 제어 신호(REGDST)는 M형 및 I형 명령의 경우에는 0이 되고 R형 명령의 경우에는 1이 된다.
제4 스테이지의 메모리 액세스 처리에서는, 파이프라인 레지스터(EX/MEM)에 보유된 값에 기초하여 메모리에 대한 액세스가 수행된다. 즉, ALURSLT는 데이타 메모리(6)을 어드레싱하기 위하여 사용되고, SRCMEM은 메모리에 데이타를 기록하기 위하여 사용된다. 보통의 비트 처리 명령은 데이타 메모리로부터의 데이타의 판독과 관련되고, 따라서 메모리로의 액세스는 복수의 비트 (워드)를 처리하는 경우와 마찬가지 방식으로 이 스테이지에서 실행된다.
데이타 메모리(6)에 대한 판독/기록 연산은 파이프라인 레지스터(EX/MEM)의 MEM에 의하여 제어된다. 실제의 메모리 판독/기록 클럭은 메모리 액세스 인터페이스(7)에 의하여 발생되고, 이렇게 하여 발생된 클럭은 데이타 메모리(6)에 출력된다.
비트 처리 명령의 경우에, BPU는 제5 스테이지에서 BPUOP에 의하여 지정된 비트 처리를 실행한다. 비트 처리의 결과는 다음 클럭 신호의 상승 연부에서 BITACC에 의하여 보유된다. R형 및 I형 명령의 경우에, ALURSLT의 값은 범용 레지스터 블럭(REGFILE)에 기록된다. M형 로드 명령의 경우에, MEMDATA의 값은 범용 레지스터 블럭(REGFILE)에 기록된다. 이 때에, 만일 BITACC의 값이 1이면, 후속 응용 명령 (워드 프로세싱)이 실행된다. 반면에, 만일 BITACC의 값이 0이면, 후속 응용 명령 (워드 프로세싱)을 무효화시킬 필요가 있다. 그 결과, 현재의 스테이지를 뒤따르는 파이프라인을 위한 제어 신호로서 BITACC의 데이타의 피드백을 실현하는 것이 가능하다. 즉, 프로그래머블 컨트롤러에는 후속 파이프라인 스테이지의 실행 스펙 정보를 취소하기 위한 회로가 추가로 제공되어 있다. 그러한 회로는, 실행 스펙 정보와 BITACC를 논리곱 (AND)시키기 위한 회로, 또는 도4에 도시한 바와같이 선택 신호로서 BITACC를 사용하는 멀티플렉서(MUX1, MUX2, MUX3 및 MUX4)의 형태로서 예시되고, 실행 스펙 정보 (예를 들어, 파이프라인 레지스터(ID/EX)의 WB)를 가지고 있는 각각의 파이프라인 레지스터의 영역에 대한 입력으로서 이전 스테이지에서 파이프라인 레지스터에 보유된 제어 신호 또는 후속 응용 명령 (즉, 워드 프로세싱)을 무효화시키기 위한 실행 스펙 정보 (도5에 도시한 구성의 예에서는 0)를 선택한다.
전술한 회로 동작으로부터 알 수 있는 바와 같이, 명령의 실행 스펙 정보는 각각의 클럭에 대하여 후속스테이지로 파이프라인 레지스터(ID/EX)의 EX, M 및 WB를 시프트시킴으로써 전달된다. 그러므로, 간단하면서도 효율적인 명령 실행 제어가 실현된다. 또한, 본 발명의 프로그래머블 컨트롤러는 일관된 처리를 수행하도록, 즉, 각각의 스테이지에서 처리된 데이타를 현 스테이지에서의 처리의 완결 후에 후속 파이프라인 레지스터에 보유하도록 배열된다. 이런 이유로, 특별히 고안된 하드웨어의 데이타 패스를 간단하면서도 효율적으로 만들 수 있다.
파이프라인 레지스터 (IF/ID, ID/EX, EX/MEM, MEM/WB, WB/IF)와 PC는 예를 들어 선행-연부형 D 플립플롭 (leading-edge type D flip-flop)을 사용하여 만들 수 있다. 또한, 범용 레지스터 블럭(REGFILE)은 예를 들어, 플립플롭 또는 메모리를 사용하여 만들 수 있다. 그 이외의 회로 요소들은 조합 회로로 형성할 수 있다.
[제2 실시예]
도4에 도시한 5단 파이프라인 구조 중에서, 레지스터 간의 연산을 실행하는데 사용하기 위한 데이타 패스에 대하여 도7에 도시한 블럭도를 참조하여 설명하기로 한다. ALU에 의하여 수행된 연산 결과는 두개의 파이프라인 레지스터(EX/MEM 및 MEM/WB) 각각의 ALURSLT를 통하여 범용 레지스터 블럭(REGFILE)의 범용 레지스터 중의 어느 하나에 기록된다. 어느 범용 레지스터에 값을 기록하기 위한 명령에 바로 뒤이어서 그 범용 레지스터의 값을 인수로서 사용하기 위한 명령이 뒤따르면, 범용 레지스터(R1)에 저장된 값과 범용 레지스터(R2)에 저장된 값은 예를 들어 논리곱 연산을 하게 된다 (즉, AND 연산을 하게 된다). 또한, AND 연산의 결과를 범용 레지스터(R3)로 기록하기 위한 명령 (AND R1 R2 R3)에 바로 뒤이어서, 범용 레지스터(R3)에 저장된 값과 범용 레지스터(R4)에 저장된 값을 논리합시키고(OR) (즉, 이 값들을 OR 연산시키고) 이 OR 연산의 결과를 범용 레지스터(R5)에 기록하기 위한 명령 (OR R3 R4 R5)이 뒤따르면, 이 OR 연산을 실행하는데 사용되는 인수(R3)은 OR 연산 직전에 실행되는 AND 연산의 결과이어야 한다. 그러나, OR 연산을 실행하는데 필요한 범용 레지스터(R3)에 기록할 값은 OR 연산을 위한 레지스터 페치 연산 시에 파이프라인 레지스터(EX/MEM)에 저장된다. 이 때문에, 연산의 결과가 범용 레지스터에 실제로 기록되기 이전에 후속 명령을 위하여 그 연산 결과가 필요하게 되는 경우 문제가 발생한다.
범용 레지스터가 액세스될 때 발생하는 그러한 파이프라인 해저드에 대처하기 위하여, 파이프라인 해저드가 제거될 때까지 필요한 수 만큼의 NOP 명령을 삽입할 필요가 있다. NOP 명령을 삽입하는 데에는 회로 구성의 변경이 필요하지 않기 때문에 쉽게 수행할 수 있다. 그러나, NOP 명령을 삽입하면 그만큼 명령의 수가 증가하여 프로그램 크기를 증가시키게 된다.
도8 내지 도12를 참조하여, 본 발명의 제2 실시예에 따른 프로그래머블 컨트롤러에 대하여 이하 설명하기로 한다. 도4에 도시한 프로그래머블 컨트롤러의 회로에 기초하여, 본 발명의 특수한 구성에 대하여 설명하기로 한다. 구성의 다른 부분에 대한 설명은 필요한 만큼 생략하기로 한다. 우선, 레지스터 간의 연산에서 사용하기 위한 데이타 패스에 대하여 도8을 참조하여 설명하기로 한다. 전술한 바와 같이, 도7에 도시한 종래의 데이타 패스는, 만일 레지스터 간의 연산의 결과가 범용 레지스터에 기록되기 전에 후속 명령이 범용 레지스터 블럭(REGFILE)의 범용 레지스터를 참조하면, 레지스터로부터 페치된 데이타는 갱신되어 있지 않으므로 쓸모없는 것이라는 문제점이 있었다. 그러므로, 본 발명의 프로그래머블 컨트롤러에는 도8에 도시한 바와 같이 파이프라인 연산의 제2 스테이지에서 ALU와 함께 사용하기 위한 인수를 선택하기 위한 선택 수단(SRCFB)을 배치함으로써 추가의 데이타 패스가 제공된다.
도8에 도시한 바와 같이, 범용 레지스터(REGFILE)의 출력 (즉, 범용 레지스터의 출력), 제3 스테이지의 ALU의 출력, 및 파이프라인 레지스터(EX/MEM)의 ALURSLT의 출력 (제4 스테이지에서 취해진 ALU의 출력)은 선택 수단(SRCFB)의 입력에 접속되어 있다. 선택 수단(SRCFB)의 출력은 파이프라인 레지스터(ID/EX)의 SRC1의 입력에 접속된다. 선택 수단(SRCFB)은 범용 레지스터의 출력, ALU의 출력 및 파이프라인 레지스터(EX/MEM)의 ALURSLT (즉, 제4 스테이지로 공급되는 ALU의 출력) 중에서 ALU에서 사용할 인수를 가지고 있는 파이프라인 레지스터(ID/EX)의 SRC1에 입력될 값을 선택할 수 있도록 배열된다. 도8은 SRC1에 의하여 수행되는 레지스터로부터의 데이타 페치에 관계 있는 ALU의 2개의 인수 중 하나에 접속된 데이타 패스만을 도시한다.
도9는 도8에 도시한 데이타 패스의 보다 구체적인 구성을 도시하는 블럭도이다. 본 발명에 관계 있는 부분만이 도면에 도시되어 있다. 도면에 도시된 바와 같이, 선택 수단(SRCFB)는 제2 스테이지 (이하, ID 스테이지)에 배치되어 있다. ALU의 출력과 파이프라인 레지스터(EX/MEM)의 ALURSLT의 출력은 각각 신호(EX-SRC)와 신호(MEM-SEC)로서 선택 수단(SRCFB)에 전달된다. 범용 레지스터 블럭(REGFILE)의 판독 레지스터 지정 신호(ID-SEL)는 선택 수단(SRCFB)으로 출력된다 (이 판독 레지스터 지정 신호는 범용 레지스터 파일(REGFILE)의 RDDATA1로부터 값을 출력하는 범용 레지스터를 지정하기 위한 신호를 수신하기 위한 단자(RDSEL1)에도 공급된다).
EX-SEL 신호는 제3 스테이지 (이하, EX 스테이지)의 기록 레지스터 지정 신호이고, 반면에 MEM-SEL 신호는 제4 스테이지 (이하, MEM 스테이지)의 기록 레지스터 지정 신호이다. 파이프라인 레지스터(ID/EX)의 IREX2 또는 IREX3의 값은 EX 스테이지를 위한 기록 레지스터 지정 신호(EX-SEL)로서 선택 수단(SRCFB)에 출력된다. 또한, 파이프라인 레지스터(EX/MEM)의 WTREG의 값은 MEM 스테이지를 위한 기록 레지스터 지정 신호(MEM-SEL)로서 선택 수단(SRCFB)에 출력된다.
파이프라인 레지스터(ID/EX)의 WB에 저장된 값은 EX 스테이지를 위한 레지스터 기록 유효 신호(EX-WTEN)로서 선택 수단(SRCFB)에 출력된다. 파이프라인 레지스터(EX/MEM)의 WB에 저장된 값은 MEM 스테이지를 위한 레지스터 기록 유효 신호(MEM-WTEN)로서 선택 수단(SRCFB)에 출력된다. 범용 레지스터 (REGFILE)의 출력 단자(RDDATA1)의 TA1로부터의 출력은 신호(ID-SRC)로서 선택 수단(SRCFB)에 출력된다. 선택 수단(SRCFB)의 출력은 파이프라인 레지스터(ID/EX)의 SRC1에 접속된다. 도9는 선행 명령의 연산 결과가 파이프라인 레지스터(ID/EX)의 SRC1으로 되돌아오는 회로를 도시한다.
예를 들어, 선택 수단(SRCFB)는 도10에 도시한 바와 같이 두개의 멀티플렉서의 조합으로 만들어지고, 파이프라인 레지스터(ID/EX)의 SRC1로 출력될 데이타를 선택하도록 배열된다. 도10에서, 제1 멀티플렉서에 의하여 신호(ID-SRC) 또는 신호(MEM-SRC)가 선택되고, 이렇게 선택된 신호 또는 신호(EX-SRC) 중의 하나의 신호가 제2 멀티플렉서에 의하여 선택된다.
도11을 참조하여, 범용 레지스터에 대한 액세스의 결과 발생하는 파이프라인 해저드의 경우의 도9에 도시한 회로의 동작에 대하여 이하 설명하기로 한다. 도11에 도시한 처리의 경우에, 3개의 레지스터간 명령 (즉, AND R1 R3 R4, OR R1 R3 R5, 및 AND R2 R3 R6)이 실행되는데, 이 때 범용 레지스터(R3)의 값이 제1 AND 명령 (즉, AND R1 R2 R3)에 의하여 갱신되고, 범용 레지스터(R3)의 이 갱신된 값이 인수로서 사용된다. 하나의 스테이지의 처리 시간은 1이고 그 길이는 기준 클럭 신호(PHI1)의 하나의 사이클에 대응하며, 각각의 스테이지에서의 처리는 기준 클럭(PHI1)의 상승 시각과 동기되어 실행된다는 가정을 하고 이하 설명하기로 한다. 이하의 설명은 또한 제1 명령과 연관된 처리의 시작 시각은 0이고, 각각의 스테이지의 정지 시각은 각각 시각 1 내지 시각 8이라는 것을 가정한 것이다.
우선, 제1 명령 (AND 명령)의 처리에 대하여 설명하기로 한다. 제1 명령은 시각 1에 명령 메모리로부터 명령 레지스터(IR) (IF/ID/IR)로 판독된다. 범용 레지스터(R1 및 R2)의 값은 시각 2에 각각 파이프라인 레지스터(ID/EX)의 SRC1(ID/EX/SRC1)과 SRC2 (ID/EX/SRC2)에 저장되어, ALU에서 사용하기 위한 인수들이 준비된다. ALU는 시각 3에서 AND 연산을 수행하고, 범용 레지스터에 저장될 연산 결과는 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된다. 파이프라인 레지스터 (EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된 값은 시각 4에서 파이프라인 레지스터(MEM/WB)의 ALURSLT (MEM/WB/ALURSLT)에 저장되어, 범용 레지스터(R3)에 이 값을 저장할 준비를 하게 된다. 파이프라인 레지스터(MEM/WB)의 ALURSLT (MEM/WB/ALURSLT)에 저장된 값은 기준 클럭 신호(PHI1)과 180도의 위상차가 있는 클럭 신호(PHI1)의 상승 연부 (즉, 시각 4.5)에서 범용 레지스터 파일(REGFILE)의 범용 레지스터(R3)에 기록된다.
다음으로, 제2 명령 (AND 명령, AND R1 R3 R4)의 처리에 대하여 설명하기로 한다. 범용 레지스터(R3)의 값은 시각 3에서 시작되는 EX 스테이지에서 필요하게 된다. 이런 경우에, ALU의 출력은 선택 수단(SRCFB)를 통하여 EX 스테이지로 다시 공급되고, 그 출력은 시각 3에서 파이프라인 레지스터(ID/EX)의 SRC2(ID/EX/SRC2)에 저장된다.
제3 명령 (OR 명령, OR R1 R3 R5)에 있어서는 범용 레지스터(3)의 값이 시각 4에서 시작되는 EX 스테이지에서 필요하게 된다. 이런 경우에, 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장되는 값은 선택 수단(SRCFB)를 통하여 EX 스테이지로 다시 공급되고, 이 값은 파이프라인 레지스터(ID/EX)의 SRC2 (ID/EX/SRC2)에 저장된다.
제4 명령 (AND 명령, AND R2 R3 R6)에 대하여는, 제1 AND 명령의 결과가 시각 4.5에서 범용 레지스터(R3)에 기록된다. 그 값은 범용 레지스터(R3)으로부터 페치되어 파이프라인 레지스터(ID/EX)의 SRC2 (ID/EX/SRC2)로 공급되어, 그 값이 처리되는 것이다.
전술한 바와 같이, 제1 명령의 결과는 시각 4.5에서 범용 레지스터에 기록된다. 그러므로, 시각 4.5 이전에 범용 레지스터로부터 값들을 페치하는데 필요한 제2 및 제3 명령의 경우에는, 범용 레지스터(R3)으로부터 정확한 값을 판독하는 것이 불가능하다. 그렇기 때문에, 제2 명령의 경우에 (즉, 인수로서 사용할 범용 레지스터의 값이 직전의 선행 명령에 의하여 갱신될 때), ALU의 출력이 범용 레지스터의 출력 대신에 인수로서 사용된다. 또한, 제3 명령의 경우에 (즉, 인수로서 사용될 범용 레지스터의 값이 현재 명령 하나 다음의 명령에 의하여 갱신될 때), 파이프라인 레지스터(EX/MEM)의 ALURSLT에 저장된 값은 범용 레지스터로부터의 출력 대신에 인수로서 사용된다.
범용 레지스터에 저장되고 ALU의 인수로서 사용되는 값이 선행 명령에 의하여 갱신되는지 여부를 결정하기 위한 방법에 대하여 이하에 설명하기로 한다. 범용 레지스터 파일(REGFILE)의 판독 레지스터 지정 신호(ID-SEL), EX 스테이지의 기록 레지스터 지정 신호(EX-SEL), 및 MEM 스테이지의 기록 레지스터 지정 신호(MEM-SEL)로부터 어느 범용 레지스터가 대상 레지스터(object register)가 되는지를 결정할 수 있다.
또한, EX 스테이지의 레지스터 기록 유효 신호(EX-WTEN)와 MEM 스테이지의 레지스터 기록 유효 신호(MEM-WTEN)로부터 범용 레지스터에 대하여 기록 연산이 수행되는지 여부를 결정할 수 있다. 요약하면, 레지스터로부터 값을 페치하기 위하여 필요한 판독 레지스터 번호 (즉, 범용 레지스터 파일(REGFILE)의 판독 레지스터 지정 신호(ID-SEL))와 EX 스테이지의 기록 레지스터 번호 (즉, EX 스테이지의 기록 레지스터 지정 신호(EX-SEL))가 일치하고 EX 스테이지의 레지스터 기록 유효 신호(EX-WTEN)가 "유효"이면, 범용 레지스터로부터의 출력 대신에 EX 스테이지의 레지스터 기록 데이타 (즉, ALU의 출력)를 레지스터로부터 값을 페치하는데 사용하기 위한 신호로서 사용한다. 또한, 레지스터로부터 값을 페치하기 위하여 필요한 판독 레지스터 번호 (즉, 범용 레지스터 파일(REGFILE)의 판독 레지스터 지정 신호(ID-SEL))와 MEM 스테이지의 기록 레지스터 지정 번호가 일치하고 MEM 스테이지의 레지스터 기록 유효 신호(MEM-WTEN)가 "유효"이면, 범용 레지스터로부터의 출력 대신에 MEM 스테이지의 레지스터 기록 데이타 (즉, 파이프라인 레지스터(EX/MEM)의 ALURSLT의 출력)를 레지스터로부터 값을 페치하는데 사용하기 위한 신호로서 사용한다.
또한, 만일 레지스터로부터 값을 페치하는데 필요한 모든 레지스터 번호 (즉, 범용 레지스터 파일(REGFILE)의 판독 레지스터 지정 신호(ID-SEL)), EX 스테이지의 기록 레지스터 번호 (즉, EX 스테이지의 기록 레지스터 지정 신호(EX-SEL)), 및 MEM 스테이지의 기록 레지스터 지정 번호(MEM-SEL)가 일치하고, EX 스테이지의 레지스터 기록 유효 신호(EX-WTEN)과 MEM 스테이지의 레지스터 기록 유효 신호(MEM-WTEN)이 "유효"이면, EX 스테이지의 레지스터 기록 데이타 (즉, ALU의 출력)는 레지스터로부터 값을 페치하는 데 사용하기 위한 신호로서 사용된다. 이것은 만일 특정 명령의 인수로서 사용될 범용 레지스터가 현재의 명령과 그 하나 다음의 명령에 의하여 갱신되면, 직전 선행 명령에 의하여 갱신된 결과가 인수로서 사용되기 때문이다.
범용 레지스터(R3)의 값이 연속적으로 재기록되는 네개의 연속적 명령을 처리하는 방법에 대하여 도12를 참조하여 설명하기로 한다. 간략화를 위하여, 이하의 설명에서는 범용 레지스터는 그 길이가 8 비트이고, 범용 레지스터(R1 및 R2)에는 각각 00001111(0x0F) 및 01010101(0x55)가 저장되어 있다고 가정하기로 한다. 제1 명령 (AND R1 R2 R3)에서는, 시각 2에서 파이프라인 레지스터(ID/EX)의 SRC1 (ID/EX/SRC1)과 SRC2 (ID/EX/SRC2) 각각에 0x0F와 0x55가 저장되어 있다. 연산 결과 0x05는 시각 3에서 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된다. 연산 결과 0x55는 시각 4에서 파이프라인 레지스터(MEM/WB)의 ALURSLT (EX/MEM/ALURSLT)에 저장된다. 연산 결과 0x05는 시각 4.5에서 범용 레지스터(R3)에 기록된다.
제2 명령 (OR R3 R2 R3)에 있어서는, 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된 연산 결과 Ox05는 시각 3에서 SRCFB를 통하여 파이프라인 레지스터(ID/EX)의 SRC1 (ID/EX/SRC1)으로 피드백된다. 이 명령의 연산 결과 (Ox55)는 시각 4에서 파이프라인 레지스터(EX/MEM)의 ALURSLT(EX/MEM/ALURSLT)에 저장된다.
제3 명령 (X0R R3 R1 R3)에 있어서는, 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된 연산 결과 (0x55)는 시각 4에서 파이프라인 레지스터(ID/EX)의 SRC1 (ID/EX/SRC1)으로 피드백된다.
본 발명의 다른 실시예에 따른 프로그래머블 컨트롤러에 대하여 도13에 도시한 블럭도를 참조하여 설명하기로 한다. 도8에 도시한 프로그래머블 컨트롤러에서, ALU에 사용할 인수를 선택하기 위한 데이타 패스는 파이프라인 연산의 제2 스테이지 (즉, ID 스테이지)에 제공된다. 이와 반대로, 도13에 도시한 실시예에 따르면, 데이타 패스는 도8에 도시한 실시예에서와 동일한 기능을 수행하도록 제3 스테이지 (즉, EX 스테이지)에 제공된다.
도13에 도시한 바와 같이, ALU에서 사용할 인수를 선택하기 위하여 파이프라인 연산의 제3 스테이지에 선택 수단(SRCFB)이 제공된다. 제2 스테이지로부터 ALU의 입력 단자 중의 하나로 출력된 값 (즉, 파이프라인 레지스터(ID/EX)의 SRC1의 출력), 제4 스테이지로 공급된 ALU의 출력 (즉, 파이프라인 레지스터(EX/MEM)의 ALURSLT의 출력), 및 제5 스테이지로 공급되는 ALU의 출력 (즉, 파이프라인 레지스터(MEM/WB)의 ALURSLT의 출력)은 선택 수단(SRCFB)의 입력 단자에 접속되고, SRCFB의 출력은 ALU의 입력 중의 하나에 접속된다. 선택 수단(SRCFB)는 제2 스테이지로부터 ALU의 입력 단자 중의 하나에 출력된 값 (파이프라인 레지스터(ID/EX)의 SRC1의 출력), 제4 스테이지로 공급된 SRC1의 출력(파이프라인 레지스터(EX/MEM)의 ALURSLT의 출력) 및 제5 스테이지로 공급된 ALU의 출력 (파이프라인 레지스터(MEM/WB)의 ALURSLT의 출력) 중에서 ALU의 입력 단자 중의 하나에 입력될 값을 선택할 수 있도록 배열된다. 도8은 SRC1에 의하여 수행되는 범용 레지스터로부터 데이타를 페치하는 데 관계있는 ALU의 두개의 인수 중의 하나에 접속된 데이타 패스만을 도시한다.
도14는 도13에 도시한 데이타 패스의 구성을 더욱 구체적으로 도시하는 블럭도이다. 본 발명에 관계 있는 부분만을 이 도면에 도시하였다. 도면에 도시되어 있는 바와 같이, 선택 수단(SRCFB)는 제3 스테이지 (이하, EX 스테이지)에 배치되어있다. 파이프라인 레지스터(EX/MEM)의 ALURSLT의 출력과 파이프라인 레지스터(MEM/WB)의 ALURSLT의 출력은 각각 신호(MEM-SRC)와 신호(WB-SRC)로서 선택 수단(SRCFB)으로 공급된다. 또한, 파이프라인 레지스터(ID/EX)의 SRC1의 출력은 선택 수단(SRCFB)에 출력된다.
MEM-SEL 신호는 MEM 스테이지의 기록 레지스터 지정 신호이고, WEB-SEL 신호는 WB 스테이지의 기록 레지스터 지정 신호이다. EX-SEL 신호는 EX 스테이지의 기록 레지스터 지정 신호이다. 파이프라인 레지스터(EX/MEM)의 WTREG의 값은 MEM 스테이지를 위한 기록 레지스터 지정 신호(MEM-SEL)로서 선택 수단(SRCFB)에 출력된다. 파이프라인 레지스터(MEM/WB)의 WTREG의 출력은 WB 스테이지를 위한 기록 레지스터 지정 신호(WB-SEL)로서 선택 수단(SRCFB)에 출력된다. 파이프라인 레지스터(ID/EX)의 IREX2 또는 IREX3 중의 하나의 값은 EX 스테이지를 위한 기록 레지스터 지정 신호(EX-SEL)로서 선택 수단(SRCFB)에 출력된다.
파이프라인 레지스터(EX/MEM)의 WB에 저장된 값은 MEM 스테이지를 위한 레지스터 기록 유효 신호(MEM-WTEN)로서 선택 수단(SRCFB)에 출력되고, 파이프라인 레지스터(MEM/WB)의 WB에 저장된 값은 레지스터 기록 유효 신호(WB-WTEN)로서 선택 수단(SRCFB)에 출력된다. 선택 수단(SRCFB)의 출력은 ALU의 두개의 입력 단자 중의 하나에 접속된다. 도14는 선행 명령의 연산 결과가 ALU의 두개의 입력 단자 중의 하나로 되돌아오는 회로를 도시한다.
도15를 참조하여, 도13에 도시한 회로의 동작을 설명하기로 한다. 도15는 범용 레지스터에 대한 액세스 결과 발생하는 파이프라인 해저드의 경우에 회로의 동작을 도시한다. 두개의 레지스터간 명령 (즉, AND R1 R3 R4, OR R1 R3 R5)이 실행되는데, 제1 AND 명령 (즉, AND R1 R2 R3)에 따라 범용 레지스터(R3)의 값이 갱신되고 이 범용 레지스터(R3)의 갱신된 값이 인수로서 사용된다.
우선, 제1 명령 (AND 명령)의 처리에 대하여 설명한다. 제1 명령은 시각 1에서 명령 메모리로부터 명령 레지스터 IR (IF/ID/IR)로 판독된다. 범용 레지스터(R1 및 R2)의 값은 시각 2에서 각각 파이프라인 레지스터(ID/EX)의 SRC1 (ID/EX/SRC1) 및 SRC2 (ID/EX/SEC2)에 저장되어, ALU에서 사용할 인수가 준비된다. ALU는 시각 3에서 AND 연산을 실행하고, 범용 레지스터(R3)에 저장된 연산 결과는 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된다. 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된 값은 시각 4에서 파이프라인 레지스터(MEM/WB)의 ALURSLT (MEM/WB/ALURSLT)에 저장되어, 이 값을 범용 레지스터(R3)에 저장할 준비를 한다. 파이프라인 레지스터 (MEM/WB)의 ALURSLT (MEM/WB/ALURSLT)에 저장될 값은 클럭 신호 (PHI3)의 상승 시간(즉, 시각 4.5)에서 범용 레지스터 파일(REGFILE)의 범용 레지스터(R3)에 기록된다.
다음으로, 제2 명령 (AND 명령, AND R1 R3 R4)의 처리에 대하여 설명한다. 범용 레지스터(R3)의 값은 시각 3에서 시작되는 EX 스테이지에서 필요하게 된다. 이러한 경우에, 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)의 출력은 피드백되어 SRC2로부터의 출력으로서 선택 수단(SRCFB)을 통하여 ALU의 두개의 입력 중의 하나에 입력된다.
제3 명령 (OR 명령, OR R1 R3 R5)에 있어서는, 범용 레지스터(3)의 값은 시각 4에서 시작되는 EX 스테이지에서 필요하게 된다. 이런 경우에, 파이프라인 레지스터(EX/MEM)의 ALURSLT (EX/MEM/ALURSLT)에 저장된 값은 피드백되어 SRC2로부터의 출력으로서 선택 수단(SRCFB)을 통하여 ALU의 두개의 입력 중의 하나에 입력된다.
도8 및 도13에 도시한 프로그래머블 컨트롤러에서는, 특정 명령의 인수를 공급하기 위한 범용 레지스터는 바로 직전 명령 또는 현재 명령 하나 다음의 명령에 의하여 갱신되는데, 데이타는 범용 레지스터로부터 페치되지 않고 파이프라인 레지스터의 특정 위치로부터 피드백된다. 그러나, 선행 명령이 LOAD 명령이면, MEM 스테이지에서 메모리에 대한 액세스가 이루어진 후에야 목적 데이타(object data)가 나타난다. LOAD 명령에 의하여 갱신될 범용 레지스터의 값이 후속 명령의 인수로서 사용되는 경우의 회로의 동작에 대하여 도16을 참조하여 설명하기로 한다.
제1 로드 명령 (LOADWRZ R0 R3 0x0005)는 범용 레지스터(R0)에 저장된 값에 0x0005를 가산함으로써 데이타가 판독될 메모리의 어드레스 계산을 지시하고, 메모리의 그 어드레스에 저장된 값을 범용 레지스터(R3)에 저장할 것을 지시한다. LOAD 명령과 관계 있는 데이타는 MEM 스테이지의 정지 시점 (즉, 시각 4) 이전에는 파이프라인 레지스터에 나타나지 않는다. 그러므로, LOAD 명령 직후에 뒤따르는 AND 명령은 시각 4 이전에는 파이프라인 레지스터로부터 데이타를 페치할 수 없다.
즉, 제5 스테이지 (즉, WB 스테이지)에서의 연산 도중에 범용 레지스터(REGFILE)에 값이 기록된다. 시각 4에서 파이프라인 레지스터(MEM/WB)에 나타나는 데이타 메모리 (파이프라인 레지스터(MEM/WB)의 MEMDATA)의 값은 시각 4.5에서 범용 레지스터(R3)에 저장된다. 범용 레지스터(R3)에 저장된 값은 후속 명령에 따라 시각 5에서 페치된다.
선행 명령이 레지스터간 명령 또는 즉치 명령과 같이 ALU 연산의 실행을 필요로 하면, 범용 레지스터에 기록된 데이타는 파이프라인 레지스터에 존재한다. 그러나, LOAD 명령의 경우에, 제4 스테이지 (즉, MEM 스테이지)에서 데이타 메모리로부터 값이 판독될 때까지 데이타를 얻을 수 없다. 그러므로, 정확한 값이 레지스터에 공급될 때까지 후속 명령 실행을 보류시킬 필요가 있다. 도17은 상기 기능을 수행하는 프로그래머블 컨트롤러의 하나의 실시예를 도시한다.
도17은 명령 실행을 제어하기 위한 실행 제어 블럭(HDU)가 제2 스테이지에 제공되는 회로를 도시한다. 실행 제어 블럭(HDU)는 파이프라인 레지스터(IF/ID)로부터 공급되는 두개의 판독 레지스터 지정 신호 (이 신호들은 범용 레지스터 파일(REGFILE)의 RDREG1과 RDREG2에 대응한다), 파이프라인 레지스터(ID/EX)로부터 공급되는 기록 레지스터 지정 신호(IREX2)와 데이타 메모리 액세스 제어 신호(MEM), 및 파이프라인 레지스터(EX/MEM)으로부터 공급되는 기록 레지스터 지정 신호(WTREG)와 데이타 메모리 액세스 제어 신호(MEM)를 수신한다.
ID 스테이지에서 현재 디코딩되는 명령을 필요로 하는 범용 레지스터는 다음과 같은 조건 하에서 직전의 선행 LOAD 명령에 의하여 갱신된다는 것을 알 수 있다. 즉, ID 스테이지를 위한 판독 레지스터 번호 (즉, 판독 레지스터)와 EX 스테이지를 위한 기록 레지스터 번호 (즉, 파이프라인 레지스터(ID/EX)의 기록 레지스터 지정 신호(IREX2))가 일치하고, 데이타는 EX 스테이지의 메모리 액세스 (즉, 파이프라인 레지스터(ID/EX)의 데이타 메모리 액세스 제어 신호(MEM))로부터 판독된다. 이와 유사하게, MEM 스테이지의 대응하는 신호를 사용하여 동일한 검사를 수행하면, ID 스테이지에서 현재 디코딩되는 명령을 필요로 하는 범용 레지스터가 현재 명령 하나 다음의 LOAD 명령에 의하여 갱신되는지 여부를 결정할 수 있게 된다. 현재 디코딩되는 명령을 필요로 하는 범용 레지스터가 직전 선행 LOAD 명령 또는 현재 명령 하나 이전의 다음 명령에 의하여 갱신되는지가 검출되면, 현재 디코딩되는 명령의 실행을 보류시킬 필요가 있다. 이를 위하여, 실행 제어 블럭(HDU)는 제어 신호(PC-HZD 및 ID-HZD)를 제어한다. PC-HZD 신호가 0이면, 프로그램 카운터는 통상의 방식으로 증가된다. 그러나, PC-HZD가 1이면, 프로그램 카운터는 변경되지 않도록 배열된다 (즉, 프로그램 카운터(PC)에 가산되는 값이 제어 신호(PC-HZD)에 따라 0과 1 사이를 스위칭한다). 만일 ID-HZD가 1이면, 제어 신호(ID-HZD)에 의하여 제어되는 멀티플렉서 (즉, 파이프라인 레지스터(ID/EX)의 WB로 명령의 연산 코드의 디코딩 결과 얻어지는 값 또는 0을 출력하는 멀티플렉서, 등)는 제어 신호를 0으로 덮어쓰는데, 이 제어 신호는 명령의 연산 코드를 디코딩하기 위한 명령 디코더 (CONTROL)에 의하여 디코딩되었던 것이다. 그 결과, 데이타 메모리와 범용 레지스터에는 기록이 금지된다. PC-HZD와 ID-HZD 신호로서 1을 출력함으로써 실행 제어 블럭(HDU)는 명령의 실행을 보류시킬 수 있다.
전술한 바와 같이, 현재 디코딩되는 명령을 필요로 하는 범용 레지스터가 직전 선행 명령 또는 현재 명령 하나 다음의 명령에 의하여 갱신되면, 갱신된 값이 범용 레지스터에 기록될 때까지 현재 디코딩되는 명령의 실행을 보류시킬 필요가 있다. 그러나, 현재 디코딩되는 명령이 LOAD 명령에 의하여 갱신될 범용 레지스터의 값을 데이타 메모리에 저장하기 위한 STORE 명령이면, 그 명령의 실행을 보류시킬 필요가 없다. 도18을 참조하면, LOAD 명령 후에 LOAD 명령에 의하여 갱신될 범용 레지스터의 값을 데이타 메모리에 저장하기 위한 STORE 명령이 실행 될 때에, 수행되는 회로의 동작에 대하여 설명하기로 한다.
제1 LOAD 명령 (LOADWRZ R0 R1 0x0002)에 따라 얻은 데이타는 시각 4에서 파이프라인 레지스터(MEM/WB)의 MEMDATA에 공급된다. MEMDATA에 저장된 데이타를 제2 STORE 명령에 따라 데이타 메모리에 기록하기 위하여, 데이타 메모리의 데이타 버스에 기록될 값은 시각 4 내지 시각 5 사이의 특정 시각에 설정할 필요가 있다.
만일 제1 LOAD 명령에 따라 특정 범용 레지스터에 값이 기록되고, 이렇게하여 기록된 값이 직후의 후속 STORE 명령에 따라 데이타 메모리에 기록되면, 제2 STORE 명령에 따라 MEM 스테이지에서 기록될 데이타는 전혀 변경되지 않기 때문에 이를 파이프라인 레지스터(MEM/WB)의 MEMDATA로부터 얻을 수 있다. 파이프라인 레지스터(EX/MEM)의 WTREG의 값과 파이프라인 레지스터(MEM/WB)의 WTREG의 값이 서로 일치하고, 파이프라인 레지스터(MEM/WB)의 MEM의 데이타가 LOAD 명령을 보여주면, 파이프라인 레지스터(MEM/WB)의 MEMDATA에 저장된 값은 데이타 메모리 기록된다. 그러나, 그런 경우가 아니라면, 파이프라인 레지스터의 SRCMEM의 데이타 (즉, 파이프라인에서 이동된 원래의 데이타)는 데이타 메모리에 기록된다. 이런 배열을 통하여, 만일 LOAD 명령에 의하여 갱신된 범용 레지스터의 값을 데이타 메모리에 기록하기 위한 STORE 명령이 LOAD 명령 직후에 나타나면, STORE 명령의 실행을 보류시키지 않고서도 정확한 값을 데이타메모리에 기록할 수 있다. 또한, STORE 명령에 따라 값이 기록되는 범용 레지스터가 현재 명령 하나 다음의 LOAD 명령에 의하여 갱신되는 경우에 대처하기 위해서는, 파이프라인 레지스터(ID/EX)의 IREX2의 데이타와 파이프라인 레지스터(MEM/WB)의 WTREG의 데이타가 서로 값이 일치하고 파이프라인 레지스터(MEM/WB)의 MEM의 데이타 LOAD 명령을 지정하면, 파이프라인 레지스터(MEM/WB)의 MEMDATA에 저장된 값이 데이타 메모리에 기록된다. 이러한 경우가 아니라면, 파이프라인 레지스터(ID/EX)의 SRC2의 데이타 (즉, 파이프라인에서 이동된 원래의 데이타)를 데이타 메모리에 기록하기만 하면 된다.
도19를 참조하여, 상기 기능을 갖는 프로그래머블 컨트롤러의 하나의 실시예에 대하여 설명하기로 한다. 본 발명에 관계 있는 부분만이 도면에 도시되어 있다. 도면에 도시되어 있듯이, EX와 MEM 스테이지에는 데이타 선택 블럭 (MEMFB1과 MEMFB2)가 제공된다. 데이타 선택 블럭 (MEMFB1과 MEMFB2)는 WB 스테이지로부터 출력되어 범용 레지스터에 저장되는 데이타를 EX 스테이지와 MEM 스테이지로 각각 피드백시킨다. 데이타 선택 블럭(MEMFB1)은 파이프라인 레지스터(ID/EX)의 SRC2로부터 출력된 값과 MEM/WB (ALURSLT 또는 MEMDATA) 파이프라인 레지스터로부터 출력된 값을 수신하고, 이들 중의 하나를 파이프라인 레지스터(EX/MEM)의 SRCMEM으로 선택적으로 출력시킨다. 데이타 선택 블럭(MEMFB2)는 파이프라인 레지스터(EX/MEM)의 SRCMEM으로부터 출력된 값과 MEM/WB (ALURSLT 또는 MEMDATA) 파이프라인 레지스터로부터 출력된 값을 수신하고, 이들 중 하나를 데이타 메모리(DM/EM)으로 출력시킨다.
WB 스테이지에서 연산을 분기시키는 회로의 구성에 대하여 설명하기로 한다. 그 회로의 동작은 도20 및 도21에 도시되어 있고, 그 회로의 실시예는 도22에 도시되어 있다. 분기 조건이 만족되고 분기 연산이 실행되면, 도22에 도시된 회로는 후술하는 방식으로 동작한다.
도20에 도시되어 있는 바와 같이, 시각 1에서 파이프라인 레지스터(IF/ID)의 명령 레지스터(IR)로부터 명령이 처음으로 페치된다. 그 명령의 주소는 파이프라인 레지스터(IF/ID)의 PC 스테이지에 저장된다. 분기 조건을 결정하는데 필요한 범용 레지스터의 값은 후속 ID 스테이지에서 판독된다. 이렇게 하여 판독된 값은 파이프라인 레지스터(ID/EX)의 SRC1 및 SRC2에 저장된다. 파이프라인 레지스터(IF/ID)의 PC의 값은 파이프라인 레지스터(ID/EX)의 PC 스테이지에 저장된다. 후속 EX 스테이지에서는, ALU를 사용하여 두개의 인수들이 서로 비교된다. 그 비교의 결과는 파이프라인 레지스터(EX/MEM)의 EQ, GT 및 LT에 저장된다. EX 스테이지에서는, ALU와 다른 가산기(ADDER)를 사용하여 타겟 어드레스가 계산되고, 이렇게 하여 얻은 결과는 파이프라인 레지스터(EX/MEM)의 PC에 저장된다. 후속 MEM 스테이지에서는, 비교 결과와 EX 스테이지에서 얻은 분기 명령의 종류로부터 분기 조건이 만족되는지 여부가 결정된다. 이 결정의 결과에 기초하여, MEM 스테이지에 배치된 실행 제어 블럭(HDU)는 다양한 종류의 제어 신호를 생성시킨다. 파이프라인 레지스터(EX/MEM)의 PC의 값은 파이프라인 레지스터(MEM/WB)의 PC에 저장된다. 분기 조건이 만족되면, 프로그램 카운터(PC)의 값은 마지막 WB 스테이지에서 타겟 어드레스에 저장된 값으로 갱신된다.
반면에, 분기 조건이 만족되지 않으면, 후속 명령이 바로 실행되는데, 이에는 아무런 문제가 없다. 그러나, 분기 조건이 만족되면, 타겟 어드레스에서의 명령이 페치되기 전에 파이프라인 내에 들어간 명령의 실행을 보류시킬 필요가 있다. 도21에서는, 명령 (1)이 분기 명령이고, 분기 명령 (1)의 분기 조건이 만족되면, 타겟 분기선의 어드레스가 프로그램 카운터(PC)에 기록된다. 시각 5에서 그 어드레스에 기초하여 명령이 페치된다 (즉, 분기 연산이 실행된다). 명령 (2) 내지 (4)는 이미 파이프라인 내에 들어왔음에도 불구하고, 이들 명령은 분기 조건이 만족되지 않을 때에만 실행되도록 의도된다. 그러므로, 분기 조건이 만족되면, 이들 명령은 실행되지 말아야 한다. 명령이 실행되는 것을 방지하기 위하여, MEM 스테이지에서 분기 조건의 결정 결과로서 분기 조건이 만족되면, 실행 제어 블럭(HDU)에 의하여 발생된 여러 종류의 제어 신호들을 사용함으로써 파이프라인 내에 들어간 명령이 실행되지 못하도록 한다. 명령의 실행을 방지하기 위하여 사용되는 제어 신호들은 PC-SEL, IF-HZD, ID-HZD, 및 EX-HZD 신호이다. PC-SEL 신호는 분기 어드레스가 프로그램 카운터(PC)에 기록되는지 여부를 결정하기 위한 선택 신호이다. IF-HZD, ID-HZD 및 EX-HZD 신호는 각각의 IF, ID 및 EX 스테이지에서 명령을 무효로 만들기 위한 제어 신호이다.
IF-HZD 제어 신호가 1이면, NOP 명령 코드로 덮어씌어진 연산 코드를 가지고있는 페치된 명령은 NOP 명령에 재기록된다. ID-HZD 및 EX-HZD 신호가 1이면, 데이타 메모리 또는 범용 레지스터에 기록이 금지되는 결과로서, ID 스테이지에서 디코딩된 제어 신호들은 0으로 덮어씌어진다. 결국, ID 또는 EX 스테이지에서 취한 명령들은 무효가 된다. 도22에 도시된 회로는 WB 스테이지에서 분기 조건을 실행하기 위한 회로의 예이다. 이 회로에서, MEM 스테이지에서 생성된 PC-SEL 신호는 PHI1 클럭 신호를 사용하여 래치된다. 이렇게 하여 래치된 신호는 파이프라인 레지스터(MEM/WB)의 PC 스테이지로부터 값이 출력되는 시점과 동일한 시점에 프로그램 카운터(PC)에 출력됨으로써, 분기 연산이 제어된다.
도22에 도시된 회로에서는, 분기 연산은 WB 스테이지에서 실행된다. 그러나, 분기 연산에 필요한 분기 조건의 결정과 타겟 분기선의 어드레스 계산이 이미 EX 스테이지에서 완결되었으므로, 분기 연산을 실행하는데 충분한 시간이 있는 한 MEM 스테이지에서 분기 연산을 실행할 수 있다. 도23은 MEM 스테이지에서 분기 연산을 실행하는 회로의 하나의 실시예를 도시한다. 이 회로의 경우에, PC 스테이지에 파이프라인 레지스터(MEM/WB)를 제공할 필요가 없고, 이는 회로 크기를 보다 작게 한다. 또한, 도23에 도시한 회로는 WB 스테이지에서 분기 연산을 실행하는 회로보다 하나의 명령을 덜 필요로 하고, 이는 실행 비율 (execution rate)이 향상되는 결과가 된다.
[제3 실시예]
본 발명의 제3 실시예를 설명하기 위하여, 도4 대신에 도24를 사용한다. 도 24는 도4를 상당히 간략화한 것이다.
도24에 도시한 5단 파이프라인 구조를 갖는 파이프라인 스테이지는 파이프라인 스테이지의 시간이 더 짧게 걸린다는 장점이 있지만, 이 장점은 명령 메모리(1) 또는 데이타 메모리(4)를 액세스하는데 시간이 더 짧게 걸려야 한다는 의미도 된다. 파이프라인 스테이지의 수가 5-스테이지로 증가한 결과로서, 특히 명령어 메모리(1)에 대하여 액세스가 실행될 때, 복잡한 조건 결정을 수행할 필요가 있다. 명령 메모리(1)을 액세스하는데 필요한 시간은 파이프라인 스테이지에 의하여 필요로 하는 시간이 감소되는 것을 방해한다. 그 결과, 명령 메모리(1)에 대한 액세스에 대한 전체적 성능을 감소시키거나, 고속 명령 메모리(1)을 채용할 필요가 있는데, 이는 비용이 상당히 많이 든다.
도28(a) 내지 도28(c)는 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 명령 페치와 관련된 타이밍을 도시하는 타이밍 차트이다. 간략화를 위하여, 이 프로그래머블 컨트롤러는 제어 신호(PC-HZD)만이 도24에 도시한 프로그램 카운터 제어 회로(ADDRCALC)에 영향을 준다는 가정에 기초를 두고 있으며, 프로그래머블 컨트롤러는 제어 신호(PC-HZD)가 0이면 프로그램 카운터(PC)에 1이 가산되고 제어신호(PC-HZD)가 1일 때에는 프로그램 카운터(PC)가 갱신되지 않도록 고안된다. 프로그램 카운터(PC)를 변경시키기 위한 분기 연산과 같은 명령의 타이밍은 도26에 도시한 타이밍 차트로부터 생략된다. 또한, 프로그래머블 컨트롤러는, φ1 내지 φ4의 위상을 갖는 4-위상 클럭 신호 상에서 동작하고, IF/ID와 함께 기동하는 파이프라인 레지스터들은 클럭 신호(φ1)에 의하여 작동되고, 프로그램 카운터(PC)는 클럭 신호(φ3)에 의하여 작동된다고 하는 가정에 기초를 두고 있다.
도28(a) 내지 도28(c)는 증가하는 순서로 명령 메모리(1)의 어드레스(1)로부터의 명령의 페치를 도시한다. 도28(a)는 프로그램 카운터(PC)의 값을 도시하고, 도28(b)는 제어 신호(PC-HZD)의 값을 도시한다. 도28(c)는 명령 레지스터(IR)의 값을 도시하고, 명령 레지스터(IR)은 명령 페치의 결과를 제2 스테이지(ID)로 보내고 파이프라인 레지스터(IF/ID)처럼 2배로 된다.
도28(a) 내지 도28(c)에 도시한 예에서, 제어 신호(PC-HZD)는 프로그램 카운터(PC)가 3일 때 하나의 파이프라인 스테이지의 기간 동안만 1이 되고, 프로그램 카운터(PC)의 증가가 보류된다. 명령 메모리(1)에 어드레스(3)에 위치한 명령은 2회 페치된다. 뒤이어서, 어드레스 4, 어드레스 5, ...의 순서로 명령이 페치된다. 명령이 페치될 때, 명령 메모리(1)의 어드레스가 클럭 신호(φ3)에 의하여 결정된다. 메모리의 그 어드레스의 값은 다음 클럭 신호(φ1)이 도착하기 전까지 출력되어야 한다. 즉, 명령 메모리(1)의 어드레스의 결정으로부터 명령 메모리(1)의 내용의 판독까지의 액세스 시간은 클럭 신호(φ3)부터 클럭 신호(φ1) 사이의 시간보다 짧아야 한다. 파이프라인 구조의 최적화가 진행되고 하나의 파이프라인 스테이지에서 필요로 하는 시간이 짧아지면, 클럭 신호(φ3)부터 클럭 신호(φ1) 사이의 시간은 현재까지 걸린 명령 메모리(1)의 액세스 시간보다 짧아진다. 그러므로, 보다 고속이고 더 비싼 명령 메모리(1)을 사용할 필요가 있게 된다.
프로그램 카운터(PC)가 클럭 신호(φ3)보다 더 빠른 타이밍으로 변화하는 클럭 신호(φ2)에 의하여 작동되면, 전술한 바와 같은 문제는 해결된다. 그러나, 프로그램 카운터(PC)의 증가를 제어하기 위한 제어 신호(PC-HZD)를 출력하기 위하여 복잡한 조건들이 결정된다. 클럭 신호(φ2)가 도착하기 이전에 제어 신호(PC-HZD)를 결정하는 것은 불가능하다. 그러므로, 클럭 신호(φ2) 상에서 프로그램 카운터(PC)를 작동시키는 것이 불가능했었다.
본 발명의 제3 실시예에 따른 프로그래머블 컨트롤러에 대하여 도24 내지 도 27을 참조하여 설명하기로 한다. 본 발명의 특징적인 부분만이 도면에 도시되어 있다. 나머지 부분들은 도24에 도시한 것과 동일하고, 따라서 이들에 대한 상세한 설명은 생략하기로 한다.
도25는 IF에 의하여 지정된 제1 스테이지만을 도시하는 블럭도이다. 도면에서, ADD1은 클럭 신호(φ3)에 의하여 작동되는 프로그램 카운터(PC)의 값에 1을 가산하기 위한 (즉, 프로그램 카운터를 1만큼 증가시키기 위한) 가산기이다. MUX1은 프로그램 카운터(PC)의 증가를 보류시키기 위한 제어 신호(PC-HZD)에 의하여 제어되는 멀티플렉서를 지정하고, 프로그램 카운터(PC)에 설정될 값을 가산기(ADD1)으로부터의 출력이나 프로그램 카운터(PC)의 값으로 스위칭한다. ADD2는 프로그램 카운터(PC)의 출력에 1을 가산하기 위한 (즉, 프로그램 카운터를 1만큼 증가시키기 위한) 가산기이다. PC1은 프로그램 카운터를 작동시키기 위한 클럭 신호(φ3)보다 빠른 클럭 신호(φ2)에 의하여 작동되는 레지스터이고, 가산기(ADD2)로부터의 출력을 가지고 있는다.
참조 번호(1)은 레지스터(PC1)에 의하여 지정되는 어드레스에 저장된 명령을 출력하기 위한 명령 메모리를 지정한다. MUX2는 제어 신호(PC-HZD)에 의하여 제어되는 멀티플렉서를 지정하고, 명령 레지스터(IR)에 저장될 값을 명령 메모리(1)의 출력이나 명령 레지스터(IR)에 저장된 값으로 스위칭한다. 제어 신호(PC-HZD)가 0일 때에는, 명령 메모리(1)의 출력은 명령 레지스터(IR)에 저장된다. 제어 신호(PC-HZD)가 1일 때에는, 명령 레지스터(IR)에 저장된 값이 명령 레지스터(IR)에 설정된다.
즉, 도24에 도시된 프로그래머블 컨트롤러와 비교하여, 도25에 도시한 프로그래머블 컨트롤러에는 프로그램 카운터(PC)와 동일한 데이타 폭을 갖고 클럭 신호(φ2)에 의하여 작동되는 레지스터(PC1)가 제공된다. 프로그램 카운터(PC)의 값에 1을 가산함으로써 얻어지는 값은 제어 신호(PC-HZD)의 값과 관계없이 래치된다. 판독될 명령이 저장되는 명령 메모리(1)의 어드레스로서 이 값을 사용하여 명령이 페치된다. 명령 레지스터는 제어 신호(PC-HZD)가 1일 때 명령 메모리(1)의 값을 페치하지 않고 명령 레지스터 자체의 값을 페치하도록 고안된다.
도26은 도25에 도시된 프로그래머블 컨트롤러의 명령 페치 타이밍을 도시하는 타이밍 차트이다. 도26(a)에 도시되고 클럭 신호(φ3)에 의하여 갱신되는 프로그램 카운터(PC)의 값에 1을 가산함으로써 얻어지는 값은 도26(b)에 도시된 클럭 신호(φ2)에 의하여 작동되는 레지스터(PC1)으로 래치된다. 도26(d)에 도시된 명령 레지스터(IR)은 레지스터(PC1)에 보유된 값을 어드레스로서 사용하여 명령 메모리(1)의 내용을 페치한다. 도26(c)에 도시된 제어 신호(PC-HZD)의 값이 1일 때, 명령 레지스터 자체의 값이 명령 메모리(1)의 값 대신에 페치된다.
도25에 도시된 레지스터(PC1)에 의하여, 명령 메모리(1)의 어드레스는 프로그램 카운터(PC)보다 일찍 결정될 수 있고, 보다 긴 액세스 시간이 걸리는 명령 메모리(1)을 사용할 수 있게 된다. 또한, 프로그램 카운터(PC)의 증가를 보류시키기 위한 제어 신호(PC-HZD)가 프로그램 카운터의 증가를 보류시키기 위한 신호이면 (즉, 신호는 1임), 명령 메모리(1)로부터 판독된 값은 명령을 페치하는 명령 레지스터(IR)에 로딩되지 않는다. 대신에, 명령 메모리(1)로부터 판독된 값은 명령 메모리 자체에 로딩된다. 프로그램 카운터(PC)의 증가를 보류시키기 위한 명령이 실행되는 때에도, 명령 메모리(1)과 같이 보다 긴 액세스 시간이 걸리는 메모리를 사용할 수 있게 된다.
프로그램 카운터(PC)를 1만큼 증가시키거나 값을 그대로 유지하는 명령만이 실행되면, 프로그래머블 컨트롤러는 도25에 도시된 회로 구성만에 의하여 스펙에 따라 동작한다. 그러나, 그런 명령에 부가하여, 프로그래머블 컨트롤러는 프로그램 카운터(PC)를 갱신하기 위한 조건 분기 및 무조건 분기와 같은 명령을 실행한다. 또한, 명령 메모리(1)과 함께 어드레스 버스를 공유하는 (도시되지 않은) 비트 메모리에 대하여 값을 판독하고 기록하는 프로그래머블 컨트롤러에 대한 특수한 미분 명령이 있다. 프로그램 카운터(PC)의 초기값은 프로그래머블 컨트롤러가 보류 모드에 있을 때 외부로부터 설정되고, 명령 메모리(1)의 내용의 페치는 프로그래머블 컨트롤러가 기동될 때 이렇게 하여 설정된 어드레스로부터 시작된다. 도25에 도시된 프로그래머블 컨트롤러에서와 같이, 프로그램 카운터(PC)의 값에 1을 가산함으로써 얻어지는 값이 명령 메모리(1)의 어드레스로서 사용되면, 프로그래머블 컨트롤러가 보류 모드에 있는 동안에 프로그램 카운터에 의하여 설정된 어드레스로부터 명령을 페치할 수 없게 된다.
도27은 전술한 바와 같은 문제점을 해결하는 본 발명의 하나의 실시예에 따른 프로그래머블 컨트롤러의 블럭도이다. 도25에 도시된 프로그래머블 컨트롤러와 비교하여, 도27에 도시한 프로그래머블 컨트롤러에는 레지스터(PC1)에 저장된 값을, 프로그램 카운터(PC)의 값, 가산기(ADD2)로부터의 출력, 및 후속 스테이지에서 파이프라인 레지스터로부터 출력된 재기록 목적의 타겟 분기선 어드레스 또는 비트 메모리의 어드레스로 스위칭시키는 멀티플렉서(MUX3)이 제공되어 있다. 프로그램 카운터(PC)의 값은 프로그래머블 컨트롤러가 기동된 직후에 레지스터(PC1)으로 래치된다.
분기 조건이 만족되는 결과로 분기 명령이 실행될 때, 미분 명령에 의하여 값이 비트 메모리에 재기록될 때, 또는 프로그래머블 컨트롤러가 기동된 직후에 실행될 첫번째 명령이 페치될 때, 프로그램 카운터의 값에 1을 가산함으로써 얻은 값(가산기(ADD2)의 출력)이 아닌 입력 값이 레지스터(PC1)에 저장될 값으로서 선택된다. 이들 신호들을 선택하는데 사용하는 신호들은 도27에서 생략되어 있다.
[제4 실시예]
5단 파이프라인 구조를 갖는 파이프라인 스테이지는 시간이 덜 걸린다는 장점이 있지만, 이러한 장점은 프로그래머블 컨트롤러의 스펙에 따라 필요한 응용 명령을 실행하는 데에는 문제점을 생기게 한다. 파이프라인의 제3 스테이지(EX)에 제공된 산술 및 논리 유닛(ALU)는 산술 연산, 논리 연산 및 메모리 액세스에 사용되는 어드레스 계산을 실행한다. 하나의 파이프라인 스테이지의 시간 내에 응용 명령의 특히 복잡한 곱셈 및 나눗셈을 ALU가 실행하는 것을 불가능하다.
일반적으로, 연산 시간을 감소시키려는 시도를 하면, 연산을 실행하기 위한 회로 크기는 훨씬 증가한다. 도24에 도시한 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에서 하나의 파이프라인 스테이지의 시간 내에 스펙에 포함된 곱셈 또는 나눗셈을 실행하려는 시도를 하면, LSI에 구현하기에는 너무 큰 연산 블럭이 필요하게 된다. 크기 문제를 무시하고 빠른 알고리즘을 갖는 연산 블럭을 사용한다 하더라도, 하나의 파이프라인 스테이지의 시간 내에 연산을 완결시키는 것은 여전히 불가능하다.
본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 구조에 대하여 도34를 참조하여 설명하기로 한다. 도24에 도시한 프로그래머블 컨트롤러와 대조적으로, 도34에 도시한 프로그래머블 컨트롤러는 파이프라인 구조의 제3 스테이지(EX) 내에 다음과 같은 추가의 블럭이 배치되어 있다; 즉, 산술 연산, 논리 연산 및 메모리 액세스에 사용되는 어드레스 계산을 위한 산술 및 논리 유닛(ALU)에 부가하여, 모든 응용 연산 중에서 곱셈 및 나눗셈의 복잡한 연산을 실행하도록 특별히 고안된 연산 블럭(MULT 및 DIV), 연산 블럭의 연산 실행을 제어하기 위한 연산 실행 제어 블럭(SUBALU), 및 파이프라인 레지스터(EX/MEM)에 출력되는 연산 결과를 산술 및 논리 유닛(ALU)의 출력이나 연산 실행 제어 블럭(SUBALU)의 출력으로 스위칭시키는 멀티플렉서(MUX)가 배치되어 있다.
파이프라인의 실행 관점에서 볼 때 연산 실행 제어 블럭(SUBALU)은 산술 및 논리 유닛(ALU)와 동일한 위치에 있다. 도면에 도시되어 있듯이, 연산 실행 제어 블럭(SUBALU)은 인수(S1 및 S2) 및 파이프라인 레지스터(ID/EX)로부터의 연산에 필요한 제어 신호 (디코더(2)에 의하여 디코딩된 신호)를 수신한다. 연산 실행 제어 블럭(SUBALU)는 또한 연산 블럭(MULT 또는 DIV)로 필요한 데이타를 출력한다. 연산의 결과는 멀티플렉서(MUX)를 통하여 파이프라인 레지스터(EX/MEM)에 전달된다. 이들 연산은 하나의 파이프라인 스테이지의 기간 내에 완결되지 않고, 따라서, 연산 실행 제어 블럭(SUBALU)은 제어 연산을 다음과 같이 실행한다; (1) 프로그램 카운터(PC)와 파이프라인의 연산의 증가를 보류시키고, (2) 특별히 고안된 연산 블럭이 연산 중이면, 제2 스테이지(ID)와 제3 스테이지(EX)에서 값을 범용 레지스터 (즉, 레지스터(3))에 재기록하는 것 및 데이타 메모리(4)에 데이타를 기록하는 것에 관한 요청 신호들을 무효화시킨다. 더욱 구체적인 기능에 대하여 설명적인 실시예를 참조하여 설명하기로 한다.
본 발명의 제4 실시예에 따른 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 대하여 도29를 참조하여 더욱 상세히 설명하기로 한다. 도29는 5개의 파이프라인 스테이지 중에서 제1 스테이지(IF), 제2 스테이지(ID), 및 제3 스테이지(EX)만을 도시한다. 또한, 본 발명과 무관한 파이프라인 구조의 부분들은 도면에서 생략되어 있다. 또한, 도34에 도시한 것과 동일한 구성 요소들은 동일한 참조 기호를 사용한다.
제1 스테이지(IF)에서, 프로그램 카운터(PC)는 다음 번에 페치될 명령 메모리(1)의 어드레스를 계수한다. 프로그램 카운터 제어 회로(ADDRCALC)는 프로그램 카운터(PC)에 저장된 값을 갱신한다. 도29에 도시한 프로그래머블 컨트롤러에서는, 프로그램 카운터(PC)를 변경하기 위한 분기 명령과 같은 명령을 처리하는 회로의 구성은 도면에서 생략되어 있고, 그 회로에 대한 설명은 생략하기로 한다. 후술하는 설명은 프로그램 카운터가 하나씩 증가되고, 프로그램 카운터(PC)는 제어 신호(HZD_PC)가 1일 때 원래의 값을 유지한다는 가정에 기초를 둔 것이다.
명령 레지스터(IR)는, 제1 스테이지(IF)와 제2 스테이지(ID) 사이에 배치되고, 파이프라인 레지스터(IF/ID)가 프로그램 카운터(PC)에 저장된 명령 메모리(1)로부터 명령을 페치함에 따라 두배가 되고, 명령 메모리(1)의 선정된 어드레스에 저장된다.
제2 스테이지(ID)에서, 명령의 내용은 명령 레지스터(IR)의 값에 기초하여 디코딩된다. 제2 스테이지(ID)에는 스펙에 의하여 결정된 비트 폭을 갖는 복수의 범용 레지스터를 포함하는 레지스터 파일(3), 명령을 디코딩함으로써 후속 파이프라인 스테이지에서 사용하기 위한 다양한 종류의 제어 신호들을 발생시키는 디코더(2; 이하, 디코더(DC)), 및 파이프라인 연산을 실행하는 데에 예외적인 제어 신호를 출력하는 해저드 제어 유닛(HDU)가 제공된다. 제2 스테이지(ID)와 제3 스테이지(EX)사이에 제공된 파이프라인 레지스터(ID/EX)에는 번호가 지정된 범용 레지스터의 값을 판독하고 저장하기 위한 S1 및 S2, 후속 파이프라인 스테이지 각각에 사용되는 제어 신호(EX, MEM 및 WB)와 레지스터에 값을 다시 기록하는 데 사용되는 레지스터 번호를 보여주는 REG가 제공된다.
제어 신호(EX, MEM, 및 WB)는 필요한 제어 신호의 집합이다. 레지스터에 값을 다시 기록하는 것을 제어하기 위한 제어 신호(WB)와 데이타 메모리에 데이타를 기록하는 것을 제어하기 위한 제어 신호(MEM) 중의 하나가 1일 때 기록 연산이 유효가 된다고 가정을 하자. 멀티플렉서(MUX1)는 제2 스테이지(ID)에서 디코더(DC)와 파이프라인 레지스터(ID/EX) 사이에 배치되고, 이 멀티플렉서(MUX1)은 제어 신호(HZD_ID)가 1일 때 제어 신호(EX, MEM 및 WB)를 모두를 0으로 덮어써서, 범용 레지스터 (즉, 레지스터 파일(3)) 또는 데이타 메모리(4)에 대한 기록 요청 신호가 무효가 된다.
실제로는, 산술 및 논리 유닛(ALU)는 연산을 실행시키는 제3 스테이지(EX)에서 파이프라인 레지스터(ID/EX)의 S1 및 S2의 값에 기초하여 제어 신호(EX)에 의하여 지정된 연산을 실행한다. 그 연산 결과는 파이프라인 레지스터(EX/MEM)의 DST에 저장된다.
도29에 도시된 프로그래머블 컨트롤러에는 하나의 파이프라인 스테이지의 시간 내에 연산이 완결되지 않는 명령을 실행시키기 위하여 제3 스테이지(EX)에 배치된 연산 실행 제어 블럭(SUBALU)이 제공된다. 이 연산 실행 제어 블럭은 파이프라인 연산 동안에 파이프라인 레지스터(ID/EX)로부터 입력을 수신하고 연산 결과를 파이프라인 레지스터(EX/MEM)으로 출력하는 산술 및 논리 유닛(ALU)과 동일한 기능을 가지고 있다. 연산 실행 제어 블럭은 실제의 연산을 실행하지 않으며, 별도로 특별히 고안된 연산 블럭 (곱셈을 실행하기 위한 연산 블럭과 나눗셈을 수행하기 위한 연산 블럭(DIV))이 제공된다. 연산 실행 제어 블럭(SUBALU)는 연산 블럭에 인수를 제공하고, 연산 결과를 수신하며, 이렇게 수신한 결과를 파이프라인 레지스터(EX/MEM)으로 출력한다. 이들 연산은 하나의 파이프라인 스테이지의 시간 내에 완결되지 않으며, 따라서 연산하는 동안에 파이프라인의 동작을 보류시킬 필요가 있다. 이 때문에, 연산 실행 제어 블럭(SUBALU)는 해저드 제어 유닛(HDU)에 제어 신호(RQ_HZD)를 출력한다.
연산 결과 또는 재기록할 레지스터의 번호가 파이프라인 레지스터(EX/MEM)에 출력될 때, 파이프라인 레지스터(EX/MEM)에 대한 출력은 산술 및 논리 유닛(ALU)의 출력이나 연산 실행 제어 블럭(SUBALU)의 출력 중의 하나로 스위칭되어야 한다. 이와 유사하게, 재기록할 범용 레지스터의 번호는 파이프라인 레지스터(ID/EX)의 REG의 값이나 연산 실행 제어 블럭(SUBALU)의 출력 중의 하나로 스위칭되어야 한다. 이 때문에, 연산 실행 제어 블럭(SUBALU)은 스위칭 목적으로 제어 신호(RQ_WT)를 멀티플렉서(MUX2 및 MUX3)에 출력시킨다. 멀티플렉서(MUX2)는 파이프라인 레지스터(EX/MEM)에 출력될 연산 결과를 스위칭시키고, 이렇게 스위칭된 결과는 멀티플렉서(MUX3)를 통하여 파이프라인 레지스터(EX/MEM)에 전달된다. 그 결과, 재기록될 범용 레지스터의 번호가 스위칭된다.
제어 신호(MEM 또는 WB)는 제3 스테이지(EX)에서는 전혀 작동하지 않고, 제어 신호는 단지 파이프라인 레지스터(ID/EX)로부터 파이프라인 레지스터(EX/MEM)으로 전달될 뿐이다. 제2 스테이지(ID)에서와 같이, 제3 스테이지(EX)에도 멀티플렉서(MUX4 및 MUX5)가 제공되며, 멀티플렉서(MUX4 및 MUX5)에 보내어질 제어 신호(HZD_EX)는 1로 설정되어, 제어 신호를 무효화시킬 수 있도록 한다. MUX4는 제어 신호(WB)를 0으로 덮어씀으로써 범용 레지스터 (즉, 레지스터 파일(3))에 값을 기록하기 위한 요구를 무효화시키는 멀티플렉서이다. MUX5는 제어 신호(MEM)를 0으로 덮어씀으로써 데이타 메모리(4)에 값을 기록하기 위한 요구를 무효화시키는 멀티플렉서이다.
도30에 도시된 타이밍 차트를 참조하여, 연산 실행 제어 블럭(SUBALU)의 동작을 설명하고자 한다. 도30에 도시된 타이밍 챠트는 곱셈 명령(MULT)이 명령 메모리(1)의 어드레스(10)에 위치하고, 이전 명령(F1, F2)이 상기 어드레스(10)보다 앞선 어드레스(9, 8)에 위치하며, 후속 명령(R1, R2, R3, R4)은 어드레스(11) 및 그 이후의 어드레스에 위치하는 경우를 나타낸다.
도 29에 도시된 프로그래머블 컨트롤러에서는, 컨트롤러 내부의 레지스터가 4상 클록 신호(φ1 내지 φ4) 중의 어느 한 신호에 의해 작동되고 각각의 파이프라인 레지스터는 클록 신호(φ1)에 의해 작동된다고 가정한다. 파이프라인 레지스터(IF/ID)를 겸하는 명령 레지스터(IR), 프로그램 카운터(PC), 제어 신호(HZD_PC), 파이프라인 레지스터(ID/EX)의 S1 및 EX, 연산 실행 제어 블럭(SUBALU) 내에 제공되는 스테이트 머신(state machine)의 상태(STATE), 곱셈 블럭(MULT)의 연산 종료 신호(DONE), 파이프라인 레지스터(EX/MEM)의 DST 및 WB, 제어 신호(HZD_EX), 및 연산 실행 제어 블럭(SUBALU)으로부터 출력되는 제어 신호(RQ_WT)가 도30에 도시되어 있다.
도30에 도시된 예에서, 파이프라인 레지스터를 작동시키는 클록 신호(φ1)를 갖는 파이프라인 스테이지는 상기 파이프라인의 하나의 스테이지를 구성한다. 파이프라인 스테이지(T1 내지 T5, Ta 내지 Te)가 시간에 대해 순차적으로 정렬되어 있고, 상기 파이프라인 스테이지(T1 내지 T5)와 파이프라인 스테이지(Ta 내지 Te) 사이에 소정의 시간 간격이 삽입되어 있다. 파이프라인 스테이지(T1)에서 곱셈 명령 이전의 명령[즉, 명령(F1)]이 페치되고, 곱셈 명령은 파이프라인 스테이지(T2)에서 페치된다. 곱셈 명령은 파이프라인 스테이지(T3)에서 제3 스테이지(EX)로 인입된다. 파이프라인 레지스터(ID/EX)의 EX로부터의 곱연산 요구와 해저드 제어 유닛(HDU)에 의해 발생된 제어 신호(HZD_PC)를 수신한 연산 실행 제어 블럭(SUBALU)은 프로그램 카운터(PC)의 증가를 보류시킨다. 연산 실행 제어 블럭(SUBALU) 내에 제공되는 스테이트 머신의 상태는 연산 요청 신호를 대기하는 초기 상태(IDLE)로부터 MULT1, 그리고 MULT2로 천이된다. 연산 실행 제어 블럭(SUBALU) 내에 제공되는 스테이트 머신의 상태가 MULT2인 때에는, 스테이트 머신은 곱셈 블럭(MULT)로부터 연산 종료 신호(DONE)를 수신할 때까지 대기 모드에서 대기한다. 연산 종료 신호(DONE)를 수신하면, 스테이트 머신은 상태(MULT3)로 천이되고, 그리고 스테이트 머신이 연산 요청 신호를 대기하고 있는 원래의 상태(IDLE)로 천이된다. 연산 실행 제어 블럭(SUBALU)은 상기 스테이트 머신에 관한 정보를 해저드 제어 유닛(HDU)으로 제공하고, 해저드 제어 유닛(HDU)은 상기 수신한 상태 정보에 기초하여 제어 신호(HZD_PC, HZD_EX)를 갱신한다.
도31은 도30에 도시된 곱셈 명령이 실행되는 경우에 연산 실행 제어 블럭(SUBALU) 내에 제공된 스테이트 머신의 상태 천이를 도식적으로 표시한 것이다. 곱셈 명령이 파이프라인의 제3 스테이지(EX)로 인입될 때, 스테이트 머신은 연산 요청 신호를 대기하는 초기 상태로부터 상태(MULT1)로 천이된다. 스테이트 머신은 무조건 상기 상태(MULT1)로부터 상태(MULT2)로 천이되고, 상기 상태(MULT2)에서 상기 연산의 완료를 대기한다. 곱셈 블럭(MULT)에 연산 종료 신호(DONE)이 출력되면 상기 연산이 완료된 것으로 판단된다. 상기 연산의 실행에 일정한 시간이 소요되므로 연산 블럭이 스테이트 머신으로 연산 종료 신호(DONE)를 보내지 않도록 프로그래머블 컨트롤러가 동작하는 경우에는, 연산 실행 제어 블럭(SUBALU)에 시간 계수 수단으로서 카운터가 제공된다. 상기 카운터의 계수값이 설정치보다 큰지의 여부를 상태 천이의 조건 (즉, 상기 연산 완료의 조건)으로서 이용할 수 있다.
도30에 도시된 타이밍 차트는 곱셈 연산의 경우만 도시한다. 도29에 도시한 프로그래머블 컨트롤러와 같이, 연산 실행 제어 블럭(SUBALU)에 복수의 연산 블럭이 연결되어 여러 유형의 연산이 수행되는 때에는, 연산 요청 신호를 대기하는 초기 상태(IDLE)로부터 여러 연산 상태(도32에 도시된, 곱셈 또는 나눗셈의 상태)로 상태 천이가 가능한 스테이트 머신을 제공하는 것으로 충분하다. 이 때, 각 연산 블럭으로부터 입력된 연산 종료 신호(DONE)에 의해 연산 완료를 결정하는 방법이나 연산 실행 제어 블럭(SUBALU)에 제공된 카운터(즉, 시간 계수 수단)의 값에 의해 연산 완료를 결정하는 방법 중에서 보다 편리한 방법을 선택하기만 하면 된다.
프로그래머블 컨트롤러에 의해 실행되는 명령 중에서, 소정의 명령은 그들이 실행될 것인지 여부가 판단된다 (명령의 연산이 한 파이프라인 스테이지의 시간동안 완료될 수 없는 경우). 산술 논리 유닛(ALU)에 의해 처리되는 보통의 명령의 경우, 상기 산술 논리 유닛(ALU)은 명령 실행 조건에 관계없이 연산을 수행한다. 명령을 실행하지 않는 경우에는, 레지스터에 값을 재기록하거나 데이타 메모리에 데이타를 기록하기 위한 제어 신호를 취소함으로써 상기 명령을 사실상 취소시킨다. 연산 수행을 위한 전술한 방법은 파이프라인 처리의 흐름에 있어서 장애를 최소화하도록 고안된 것이다. 연산 실행 제어 블럭(SUBALU)이 ALU와 같이 연산을 무조건 실행한다면, 명령 실행 조건이 취소될 때 상기 연산이 완료될 때까지의 대기 시간이 낭비된다. 연산 실행 제어 블럭(SUBALU)에서 연산을 수행하기 위한 명령이 상기 파이프라인의 제3 스테이지(EX)로 인입되는 때에 만일 명령 실행 조건이 만족되지 않는다면, 상기 스테이트 머신은 초기 상태(IDLE)에서 현재 연산이 실행되고 있는 상태로 천이되지 않고, 따라서 시간의 낭비를 제거할 수 있다.
예를 들어 하나의 곱셈 블럭이 8비트 데이타와 8비트 데이타의 곱셈과 16비트 데이타와 16비트 데이타의 곱셈을 수행할 수 있는 것과 같이 연산 블럭이 복수 모드의 연산을 지원하는 경우 (즉, 상기 연산 블럭이 복수의 상이한 데이타 폭에 대한 연산에 대처할 수 있는 경우), 두 레지스터의 값이 인수(arguments)로서 직접 사용된다. 8비트 데이타의 곱셈인 경우, 상기 두 레지스터 각각의 상위 8비트가 인수로 사용된다면, 곱셈 연산을 실제로 수행하는 연산 블럭이 8비트 연산 모드로 동작할 때 상기 인수를 입력 데이타의 하위 8비트에 설정할 필요가 있다. 상기 16비트 데이타를 상기 곱셈 블럭(MULT)로 직접 전송하지 않고, 연산 실행 제어 블럭(SUBALU)이 상위 8비트의 값으로 하위 8비트의 값을 치환할 필요가 있다.
곱셈 블럭(MULT)이 8비트 모드에서 동작할 때, 연산 실행 제어 블럭(SUBALU)은 연산 블럭의 스펙에 따라 데이타를 처리, 예를 들어 상기 입력 데이타에서 사용되지 않는 비트를 영(0)으로 설정하도록 요구된다. 소정의 경우에는, 상기 입력 데이타뿐만 아니라 연산 결과도 이와 유사한 방식으로 처리되도록 요구된다. 연산 블럭은 이러한 데이타 처리가 필요하지 않도록 설계되어야 한다. 그러나, 전체 시스템이 종래의 설계에 의한 자원을 사용하여 구성되는 경우에는, 전술한 처리도 필요하게 된다.
도29에 도시된 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 의해 실행되는 명령 중에서, 소정의 명령은 하나 또는 두 개의 레지스터 값에 기초하여 연산을 수행할 것과 상기 연산의 결과를 데이타 메모리(4) 또는 범용 레지스터[즉, 레지스터 파일(3)]의 1워드에 재기록할 것을 요구한다. 이와는 반대로, 연산 실행 제어 블럭(SUBALU)에 의해 실행되는 명령 중에서, 소정의 명령은 복수의 재기록 연산을 요구할 수 있다. 예를 들어, 16비트 데이타와 16비트 데이타를 곱하면 그 결과는 32비트의 길이를 갖는다. 상기 레지스터 파일(3)에 포함된 범용 레지스터가 16비트의 길이를 갖는다면, 하나의 명령에 대하여 상기 레지스터를 두 번 재기록하여야 한다. 도30에 도시한 타이밍 차트에서는, 범용 레지스터는 곱셈 명령에 대하여 단 한 번만 재기록된다. 그러나, 소정의 경우에는, 연산의 데이타 길이와 범용 레지스터 및 데이타 메모리(4)의 데이타 길이 등에 따라 여러 번 재기록 연산이 수행되어야 한다. 이러한 명령에 대처하기 위해서, 연산이 요구될 때 파이프라인 레지스터로부터 수신된 정보를 연산 실행 제어 블럭(SUBALU)이 보유하고 보통의 파이프라인 연산에서는 발생하지 않는 재기록 동작이 여러 번 수행될 수 있도록 스테이트 머신을 설계한다.
도30에 도시된 타이밍 차트에서, 제3 스테이지(EX)로 곱연산 요구가 인입된다. 이 때 후속 명령(R1)이 페치되고, 다음의 파이프라인 스테이지(T4)에서 후속 명령(R1)의 인수가 파이프라인 레지스터(ID/EX)로 인입된다. 곱셈 명령의 인수는 단지 한 파이프라인 스테이지의 시간동안 파이프라인 레지스터(ID/EX)에 존재한다. 연산을 실제로 수행하는 연산 블럭(MULT)이 상기 연산이 완료되는 시점까지 상기 인수가 파이프라인 레지스터(ID/EX)에 유지될 것을 요구하는 경우에는, 정확한 연산의 수행이 불가능하다. 파이프라인 레지스터(ID/EX)의 값을 연산 실행 제어 블럭(SUBALU)으로 전송할 것을 요구하는 명령에 있어서는, 파이프라인 레지스터(ID/EX)에 저장된 값(즉, S1의 내용)을 보유 요청 신호(hold request signal)에 따라 보유하도록 멀티플렉서(MUX 6)이 프로그래머블 컨트롤러에 제공된다. 연산 실행 제어 블럭(SUBALU)은 상기 보유 요청 신호를 발생시켜 상기 멀티플렉서(MUX 6)이 상기 값을 보유하도록 한다. 그 결과로, 후속 명령이 파이프라인 레지스터(ID/EX)로 인입되더라도, 연산 실행 제어 블럭(SUBALU)에 의해 현재 처리되고 있는 명령의 인수나 연산 모드를 원하는 동안 보유할 수 있고, 이로써 연산을 정확히 수행할 수 있다.
지금까지 곱셈 및 나눗셈 연산을 수행하는 연산 블럭의 실시예를 설명하였다. 그러나, 연산 블럭은 상기 실시예에서 개시된 것에 한정되지 않는다.
[제5 실시예]
명령 실행 중에 데이타 메모리의 한 워드에 있는 한 비트의 값을 갱신하거나 참조하기 위한 비트 처리 명령과 데이타 메모리에서 복수의 워드를 갱신하거나 참조하기 위한 비트 처리 명령은 프로그래머블 컨트롤러에서 필요한 기능이다. 이러한 비트 연산 명령을 실행하기 위해서는 복수의 메모리 액세스 사이클을 필요로한다. 따라서, 전술한 5단 파이프라인 구조가 그대로 사용되는 경우에는 비트 연산 명령을 실행하는 것이 불가능하다.
프로그래머블 컨트롤러에는 입력 신호의 상승 및 하강을 검출하기 위한 소위 미분 명령(differential instruction)이 제공된다. 상기 미분 명령과 함께 사용하는 메모리는 입력 신호에 대한 이전의 검색 결과를 기록할 필요가 있다. 이러한 이유로, 3단 파이프라인 구조를 사용하여 명령을 실행하는 종래의 프로그래머블 컨트롤러는 명령 메모리와 동일한 어드레스를 갖고 1비트 폭을 갖는 메모리를 구비한다 (미심사 상태인 일본국 특허 출원 평5-189014 및 평5-189015 참조). 예를 들어, 오프(OFF) 상태에서 온(ON) 상태로 변화하는 입력(X0)에 의해 출력(Y1)이 턴 온되는 경우에, 현재의 입력(X0)만을 검사해서는 상기 입력(X0)의 상승을 검출하는 것이 불가능하다. 상기 메모리에 저장되어 있는 이전의 입력(X0)를 참조하여, 이전의 입력(X0)이 오프 상태이고 현재의 입력(X0)이 온 상태일 때에만 입력(X0)이 상승하였다고 판단된다. 입력(X0)이 턴 온되면, 상기 턴 온된 사실은 메모리에 저장된다. 따라서, 입력(X0)이 다음의 검색 동작에서 온 상태에 있더라도 입력(X0)이 상승하였다고 판단하지 않는다. 이러한 방법으로, 입력 신호의 상승 및 하강을 검출하기 위한 미분 명령은 이전에 검색된 입력 신호의 값을 기록하기 위한 메모리를 필요로 한다. 이러한 이유로, 프로그래머블 컨트롤러는 명령 메모리와 동일한 어드레스를 갖고 1비트 폭인 메모리를 구비한다. 이러한 방법은 어드레스 관리가 단순하다는 장점이 있다. 고속 연산을 수행하도록 개발된 기존의 5단 파이프라인 구조의 프로그래머블 컨트롤러도 이러한 방법을 채용한다. 미분 명령을 사용하기 위해서 명령 메모리와 데이타 메모리는 어드레스 버스를 공유하므로 신호 라인의 수는 감소된다. 그러나, 이러한 구조에서는 미분 명령을 위한 메모리가 재기록되는 경우에 파이프라인 연산이 장애를 받는 단점이 있다.
도35는 본 발명의 제5 실시예에 따른 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 전체 구성을 나타내는 블럭도이다. 도24에 도시된 구조를 갖는 프로그래머블 컨트롤러와 비교하면, 상기 제5 실시예의 프로그래머블 컨트롤러는 비트 처리 명령을 실행하기 위한 BPU(비트 처리 유닛)와 비트 연산에 의해 갱신되는 레지스터 BITACC(비트 누산기)를 더 구비한다.
제5 실시예의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에서, 하나의 명령은 도36(a)에 도시된 바와 같이 다섯 개의 파이프라인 스테이지, 즉 IF(명령어 페치), ID(명령어 디코딩, 레지스터 페치), EX(산술 논리 연산, 데이타 어드레스의 계산, 타겟 분기점의 계산), MEM[메모리 액세스(판독/기록 동작)] 및 WB(분기 연산 및 레지스터에 데이타를 기록)으로 구분된 후 실행된다. 또한, 데이타 메모리의 1워드에 포함된 1비트의 값을 참조하거나 갱신하기 위한 "비트 처리 명령"이 프로그래머블 컨트롤러에서 요구된다. 소위 비트 처리 명령은 여러가지 유형의 명령을 포함한다. 데이타 메모리로부터 판독한 한 워드의 특정 비트의 상태에 따라 프로그래머블 컨트롤러의 레지스터 BITACC(비트 누산기)를 갱신하기 위한 명령이 있다. 도36(b) 및 도36(c)는 파이프라인 스테이지에서 비트 처리 명령의 상태를 도시한다. 도면에 도시한 바와 같이, 상기 비트 처리 명령 이외의 명령에서 상기 레지스터에 데이타를 기록하는 WB 스테이지에 대응하는 위치에 BPU 스테이지가 존재한다. 상기 BPU 스테이지에서는, MEM 스테이지에서 데이타 메모리로부터 판독한 값을 사용하여 BITACC를 갱신하고, 데이타 메모리 내의 한 비트를 갱신하며, 및 상기 데이타 메모리에 데이타를 기록한다. 여러가지 유형의 비트 처리 명령이 제공되고, 도36(a) 및 도36(b)에 도시된 바와 같이 필요한 BPU 스테이지의 수는 그 명령에 따라 달라진다.
소정의 비트 처리 명령은 하나의 명령을 처리하기 위하여 데이타 메모리로부터 1워드의 판독이 아닌 복수 워드의 판독을 필요로 한다. 예를 들어, 단순히 메모리 어드레스에 대하여 판독 및 기록을 수행하는 로딩/저장 명령의 경우, 이들은 간단한 명령어 구조를 가지고 있으므로 이들 명령에서는 특정 레지스터의 내용을 즉 치 데이타에 합산함으로써 메모리 어드레스를 구할 수 있다. 따라서, 레지스터 대 레지스터 연산(register-to-register operation)과 같은 산술 연산용 ALU를 메모리 액세스를 위한 어드레스의 계산에 사용하는 경우에는 효과적인 회로가 구현될 수 있다. 그러나, 로딩/저장 명령과는 달리, 비트 처리 명령은 항상 단순한 형식의 메모리 어드레스를 요구하는 것은 아니다. 따라서, ALU에 의해 메모리 어드레스가 계산되도록 회로를 구성하는 경우에는, 회로가 복잡해진다. 이러한 문제를 막기 위해서, 프로그래머블 컨트롤러는 비트 처리 명령에 사용하도록 특별히 설계된 어드레스 계산 블럭을 ALU와는 별도로 구비한다. 비트 처리 명령이 실행되는 경우에는 상기 어드레스 계산 블럭이 메모리 어드레스를 계산한다.
로딩/저장 명령과는 달리 비트 처리 명령이 복수의 메모리 액세스를 필요로 하는 경우에는, 상기 로딩/저장 명령의 경우에서와 같이 메모리 어드레스를 한번만 계산하여 명령을 실행하는 것이 불가능하다. 따라서, 비트 처리 명령에서 어드레스의 계산에 필요한 워드 부분을 기록하기 위한 메카니즘이 어드레스 계산 블럭에 제공된다. 그 결과로, 프로그래머블 컨트롤러는 복수의 연속된 파이프라인 사이클에 걸쳐 어드레스를 계산하는 기능을 구비한다. 메모리 액세스에 사용하기 위한 제어 신호가 상기 메카니즘에서 출력된다. 따라서, 프로그래머블 컨트롤러는 복수의 연속된 파이프라인 사이클에 걸쳐 메모리 액세스를 수행할 수 있다.
비트 처리 명령이 파이프라인 레지스터를 통해 회로 블럭(BPU)에 도달하면, 어드레스 계산 블럭이 아닌 BPU가 비트 처리 명령에서 요구되는 메모리 액세스에 사용할 어드레스를 계산할 수도 있다. 소정의 경우에는, 비트 처리 명령 이후의 명령 실행 문제 때문에, 어드레스 계산 블럭보다는 BPU를 사용하여 어드레스를 계산하는 것이 보다 바람직할 수 있다. 따라서, 프로그래머블 컨트롤러는 BPU에서 계산된 어드레스 및 데이타 판독 요청 신호를 사용하여 데이타 메모리로부터 데이타를 판독할 수 있는 데이타 경로(data path)를 구비한다.
더욱이, 비트 처리 명령이 데이타 메모리의 갱신을 요구하는 경우, BPU는 데이타 메모리에 기록할 값을 계산한다. 이를 위하여, BPU에 의해 계산된 메모리에 기록할 값과 어드레스 그리고 데이타 메모리 기록 요청 신호를 사용하여 데이타 메모리에 데이타를 기록할 수 있도록 해주는 데이타 경로가 프로그래머블 컨트롤러에 제공된다.
도37은 본 발명의 특징을 구현하기 위한 회로 구성을 도시한다. 5단 구조의 3개 스테이지[EX, MEM, WB(BPU)] 중에서, 특히 데이타 메모리 액세스에 관계되는 회로가 도37에 도시되어 있다. 도37에 도시된 EX 스테이지는 로딩/저장 명령에 따라 메모리 어드레스를 계산하는 ALU와는 별도로, 특히 비트 처리 명령과 함께 사용하기 위해서 설계된 어드레스 계산 블럭(BPUADR)을 구비한다. ALU의 출력 대신 BPUADR의 출력이 비트 처리 명령의 실행 시에 메모리 액세스에 사용할 어드레스로서 사용된다. 이를 위하여, 멀티플렉서(MUX)가 EX 스테이지에 설치되어 ALU와 BPUADR의 출력들 중에서 하나를 선택한다. 상기 선택된 출력이 EX/MEM 파이프라인 레지스터의 어드레스(AD)에 기록된다. 특히 비트 처리 명령에 사용하기 위해 설계된 어드레스 계산 블럭(BPUADR)은 메모리 액세스에 사용하기 위한 어드레스를 계산한다. 상기 계산된 어드레스는 멀티플렉서(MUX)를 통하여 EX/MEM 파이프라인 레지스터(EX/MEM)의 어드레스(AD)에 기록된다. 상기 메모리 액세스가 메모리로부터 데이타를 판독하는 것일 때에는, 파이프라인 레지스터(EX/MEM)의 메모리 판독 제어 신호(RD)가 일(1)로 된다. 상기 메모리 액세스가 메모리에 데이타를 기록하는 것일 때에는, 파이프라인 레지스터(EX/MEM)의 메모리 기록 제어 신호(WT)가 일(1)로 된다. 이러한 방법으로, 비트 처리 명령의 경우, 특히 비트 처리 명령을 사용하기 위해 설계된 어드레스 계산 블럭(BPUADR)이 데이타 메모리(DM)의 어드레스(ADDR)를 계산하여 판독 제어 신호(RD) 또는 기록 제어 신호(WT)를 출력한다. 로딩 명령 또는 저장 명령의 경우, ALU가 메모리 어드레스를 계산하고 상기 계산된 메모리 어드레스가 멀티플렉서(MUX)를 통하여 파이프라인 레지스터(EX/MEM)의 어드레스(AD)에 기록된다. 로딩 명령의 경우에는 파이프라인 레지스터(EX/MEM)의 메모리 판독 제어 신호(RD)가 일(1)이 되고, 저장 명령의 경우에는 파이프라인 레지스터(EX/MEM)의 메모리 기록 제어 신호(WT)가 일(1)이 된다.
MEM 스테이지는 EX 파이프라인 사이클에서 계산된 값뿐만 아니라, 비트 처리 명령을 실행하는 BPU 블럭에서 출력되는 값들인 데이타 메모리(DM)의 어드레스(ADDR), 기록값(WTDT) 및 메모리 제어 신호(RD, WT)에 기초하여 메모리 액세스를 가능하도록 해주는 데이타 경로를 구비한다. 도37에 도시된 메모리 제어 신호(RD, WT)가 일(1)일 때 메모리 액세스가 실행된다고 가정하면, 파이프라인 레지스터(EX/MEM)의 메모리 제어 신호(WT, RD)가 영(0)인 경우에도, 비트 처리 명령 블럭(BPU)로부터 메모리 액세스 요구를 출력함으로써 메모리 액세스를 실행할 수 있다. 즉, 비트 처리 명령 실행 회로 블럭(BPU)가 데이타 메모리(DM)으로부터 데이타를 판독하는 경우에는, 멀티플렉서(MUX)를 스위칭함으로써 파이프라인 레지스터(EX/MEM)의 어드레스(AD) 대신 메모리 어드레스(ADDR)이 비트 처리 명령 실행 회로 블럭(BPU)으로부터 데이타 메모리(DM)으로 전달된다. 더욱이, 메모리 판독 제어 신호(RD)가 OR 게이트를 통하여 비트 처리 명령 실행 회로 블럭(BPU)로 부터 데이타 메모리(DM)으로 전달된다. 그 결과로, 데이타 메모리(DM)으로부터 판독된 데이타(RDDT)가 파이프라인 레지스터(MEM/WB)를 통하여 비트 처리 명령 회로(BPU)로 입력된다. 비트 처리 명령 실행 회로 블럭(BPU)이 데이타 메모리(DM)에 데이타를 기록하는 경우에는, 멀티플렉서(MUX)를 스위칭함으로써 파이프라인 레지스터(EX/MEM)의 어드레스(AD) 대신 메모리 어드레스(ADDR)이 비트 처리 명령 실행 회로 블럭(BPU)으로부터 데이타 메모리(DM)으로 전달된다. 더욱이, 파이프라인 레지스터(EX/MEM)의 데이타(DT) 대신 기록 데이타(WTDT)가 비트 처리 명령 실행 회로 블럭(BPU)로부터 데이타 메모리(DM)에 전달된다. 또한, 메모리 기록 제어 신호(WT)가 OR 게이트를 통하여 비트 처리 명령 실행 회로 블럭(BPU)로부터 데이타 메모리(DM)으로 전달된다. 그 결과로, 데이타를 비트 처리 명령 회로(BPU)로부터 데이타 메모리(DM)로 기록하는 것이 가능하다.
도38은 본 발명의 제5 실시예에 따른 프로그래머블 컨트롤러의 타이밍 차트이다. 도38(a)는 로딩/저장 명령의 타이밍 차트이고, 도38(b)는 명령 실행 시 3워드 데이타가 데이타 메모리로부터 판독되고 상기 3워드 데이타가 데이타 메모리로 재기록되는 경우에 비트 처리 명령의 타이밍 차트이다. 도38(a)에 도시된 타이밍 차트에서는, EX 스테이지에서 ALU에 의해 어드레스가 계산되고, MEM 스테이지에서 데이타 메모리와의 데이타 판독 및 기록이 수행된다. 한편, 도38(b)에 도시된 타이밍 차트에서는, EX 스테이지에서 BPUADR에 의해 어드레스가 계산된다. 상기 계산된 어드레스에 기초하여, MEM 스테이지에서 데이타 메모리로부터 데이타가 판독된다. BPUADR은 비트 처리 명령에서 어드레스 계산에 필요한 명령 워드를 보유한다. BPUADR은 EX 스테이지 이후의 MEM 스테이지에서도 어드레스를 계산함으로써, MEM 스테이지 직후에 수행되는 파이프라인 사이클에서도 데이타 메모리로부터 데이타를 판독하거나 데이타 메모리 판독 요청 신호를 출력하는 것이 가능하다. 그 결과로, 데이타 메모리로부터의 데이타 판독이 BPU1 스테이지에서도 실행된다. 메모리로부터 다른 데이타 워드를 판독하는 것이 필요하게 된다. 그러나, 비트 처리 명령의 명령 워드는 이미 파이프라인 레지스터를 경료한 후 BPU1 스테이지의 BPU에 도달하였다. 따라서, BPU의 두(2) 사이클 동안 데이타 메모리로부터 데이타를 판독하는 데에 필요한 모든 신호가 BPU로부터 출력되고, 이로써 데이타 메모리로부터의 데이타 판독이 달성된다. 더욱이, 판독 동작 이후에 3워드 데이타를 데이타 메모리에 기록하는 경우에는, 모든 필요한 값이 BPU로부터 출력되고, 세(3) 사이클에 걸쳐 데이타 메모리로 데이타가 기록된다.
본 발명의 프로그래머블 컨트롤러에 의해, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러가 명령 처리를 위해 메모리 액세스를 여러 번 수행해야 하는 비트 처리 명령을 실행할 수 있다. 그러나, 상기 비트 처리 명령은 복수의 파이프라인 사이클에 걸쳐 데이타 메모리에 대한 권리를 갖는다. 따라서, 비트 처리 명령 다음의 후속 명령의 실행은 후속 명령이 데이타 메모리를 액세스할 수 있을 때까지 보류할 필요가 있다. 이러한 이유로, 파이프라인 레지스터에 전달되어 다음 신호가 비트 처리 명령이라는 것을 알려주는 제어 신호에 따라 프로그램 카운터의 증가를 보류할 수 있는 기능이 프로그래머블 컨트롤러에 제공된다. 프로그램 카운터의 값의 증가를 보류하는 것만으로는 후속 명령의 실행을 보류하는 것이 불가능한 경우에는, 파이프라인 레지스터에 전달되어 다음 신호가 비트 처리 명령이라는 것을 알려주는 제어 신호에 따라 명령 디코딩 결과를 오버라이팅함으로써 상기 명령을 취소하는 기능이 프로그래머블 컨트롤러에 제공된다.
더욱이, 제어 신호만을 사용하여 원하는 때에 후속 명령의 실행을 보류하는 것을 실현하는 것이 불가능한 경우에는, 비트 처리 명령이 현재 실행되고 있다는 것을 나타내는 BPU에서 출력된 제어 신호에 따라 프로그램 카운터의 증가를 보류하는 기능이 프로그래머블 컨트롤러에 제공된다. 이와 마찬가지로, 프로그램 카운터의 증가를 보류함으로써 후속 명령의 실행을 보류하는 것이 불가능한 경우에는, 파이프라인 레지스터에 전달되어 다음 신호가 비트 처리 명령이라는 것을 알려주는 제어 신호에 따라 명령 디코딩 결과를 오버라이팅함으로써 상기 명령을 무효화하는 기능이 프로그래머블 컨트롤러에 제공된다.
도39는 이러한 특징들을 구현하기 위한 회로 구성을 도시한다. 도39에 도시된 IF 스테이지의 명령 메모리(IM)로부터 얻은 명령 워드는 파이프라인 레지스터(IF/ID)의 명령 레지스터(IR)에 저장된다. 상기 저장된 명령 워드는 ID 스테이지의 디코더 블럭(DC)에서 디코딩되어 파이프라인 레지스터(ID/EX)에 기록된다. 상기 디코딩된 명령이 비트 처리 명령인 경우에는, 파이프라인 레지스터에 제공되는 제어 신호(BPU)에 일(1)이 기록된다. 상기 제어 신호(BPU)는 파이프라인 레지스터(ID/EX, EX/MEM, MEM/WB)를 순차적으로 경료한다. 그리고 나서, 상기 제어 신호는 해저드 검출 유닛(HDU)으로 전달된다. 해저드 검출 유닛(HDU)은 해저드 신호(HZD_PC, HZD_ID, HZD_EX)를 발생시킨다. 해저드 신호(HZD_PC)는 프로그램 카운터(PC)의 증가를 보류시키고, 해저드 신호(HZD_ID)는 메모리 액세스 및 ID 스테이지에서 얻은 결과를 레지스터에 기록하는 동작을 취소한다. 해저드 신호(HZD_EX)는 메모리 액세스 및 EX 스테이지에서 얻은 결과를 레지스터에 기록하는 동작을 취소한다. 파이프라인 레지스터에 제공되는 제어 신호(BPU) 뿐만 아니라, 비트 처리 명령 실행 블럭이 비트 처리 명령이 현재 실행되고 있다는 것을 나타내는 제어 신호를 출력한다. 해저드 검출 유닛(HDU)은 이러한 신호를 함께 처리해서 해저드 신호를 발생시킨다.
명령 실행 중에 얻은 타이밍 차트를 참조하여, 프로그래머블 컨트롤러의 동작을 설명하고자 한다. 도40에 도시된 바와 같이, 1워드 데이타를 데이타 메모리로부터 판독하고 그 데이타의 1비트를 변경한 후 데이타 메모리에 재기록하는 비트 처리 명령에 대하여 설명하고자 한다. 도40에 도시된 타이밍 차트의 경우, 비트 처리 명령이 명령 메모리의 어드레스(1)에 저장되어 있고, 후속 명령들은 어드레스(2 및 3)에 저장된 것으로 가정한다. 도40에 도시된 비트 처리 명령에 따르면, 처음에 데이타가 MEM 스테이지에서 데이타 메모리로부터 판독되고, 상기 판독된 데이타의 1비트가 BPU1 스테이지에서 처리된다. 상기 처리된 데이타는 BPU2 스테이지에서 데이타 메모리에 재기록된다. 따라서, 후속 명령에 관련된 메모리 액세스가 비트 처리 명령의 BPU2 스테이지 이후에 수행되지 않는다면 복수의 명령이 동시에 데이타 메모리를 액세스한다. 명령 메모리의 어드레스(1)의 비트 처리 명령이 ID 스테이지에 있을 때, 명령 메모리의 어드레스(2)의 후속 명령은 IF 스테이지에 위치한다. 따라서, 후속 명령이 페치되는 것을 막지 못한다. 더욱이, 어드레스(2)의 명령을 위한 MEM 스테이지는 이전의 비트 처리 명령을 위하여 BPU2 스테이지 이후에 실행되어야 하고, 따라서 명령의 실행이 두 개의 파이프라인 사이클 동안만 보류되어야 한다.
도41은 도40의 명령이 실행될 때 회로의 신호 타이밍 차트이다. 명령 메모리의 어드레스(1)의 비트 처리 명령이 시각(1)에서 페치되고, 명령 워드가 명령 레지스터(IR) 및 파이프라인 레지스터(IF/ID)에 입력된다. 상기 입력된 명령 워드는 디코딩되고, 이로써 상기 페치된 명령이 비트 처리 명령이라는 정보가 시각(2)에서 파이프라인 레지스터(ID/EX)의 제어 신호(BPU)에 나타난다. 상기 제어 신호(BPU)는 파이프라인 레지스터(EX/MEM, MEM/WB)로 전달된다. 상기 제어 신호(BPU)가 파이프라인 레지스터(ID/EX, EX/MEM)에 있을 때, 해저드 검출 유닛(HDU)는 해저드 신호(HZD_PC)를 출력한다. 그 결과로, 프로그램 카운터(PC)는 2사이클 동안 보류된다. 어드레스(2)의 명령이 시각(2)부터 시각(5)까지 계속 페치된다. 이전의 비트 처리 명령이 상기 페치된 명령을 직접 디코딩함에 의해서 영향받지 않는 경우에는, 디코딩이 그대로 수행된다. 그러나, 페치된 명령을 디코딩한 결과 잘못된 연산이 발생하는 경우에는, 해저드 신호(HZD_ID)가 해저드 신호(HZD_PC)와 동일한 타이밍에서 또한 출력된다. 상기 해저드 신호(HZD_ID)는, 명령 레지스터(IR)의 디코딩 결과가 파이프라인 레지스터(ID/EX)에 기록될 때 메모리 액세스 및 레지스터에의 데이타 기록에 관련된 제어 신호(MEM, WB, EX)를 취소한다. 상기 해저드 신호(HZD_ID)가 발생되는 때에는, 파이프라인 레지스터(ID/EX)의 상태는 NOP 명령이 디코딩될 때와 동일하다. 해저드 신호(HZD_PC)와 함께 해저드 신호(HZD_ID)를 사용하는 결과, 후속 명령에 대한 제어가 구현된다: 즉, 도40에 도시된 명령(2)에서와 같이 명령의 실행이 단지 2사이클 동안만 보류되고, 비트 처리 명령의 메모리 액세스가 완료될 때까지는 후속 명령을 위한 메모리 액세스가 수행되지 않는다.
3워드 데이타가 메모리로부터 판독되고 명령이 실행될 때 상기 판독된 데이타가 메모리에 재기록되는 비트 처리 명령에 대하여 설명하고자 한다. 이 경우에서는 비트 처리 명령이 명령 메모리(IM)의 어드레스(1)에 저장되어 있고, 다른 명령들이 인접한 어드레스(2 및 3)에 저장되어 있다고 가정한다. 도42에 도시된 바와 같이, 비트 처리 명령(1)은 연속된 여섯(6) 사이클 동안 메모리 액세스를 수행하고, 후속 명령(2)는 상기 명령(1)의 BPU6 스테이지까지 MEM 스테이지의 실행을 지연시켜야 한다. 이러한 경우에는, 파이프라인 레지스터를 통하는 제어 신호(BPU) 만을 사용하여 후속 명령의 실행을 보류하는 것이 불가능하다. 따라서, 도43에 도시된 바와 같이 비트 처리 명령이 현재 실행되고 있다는 것을 나타내는 제어 신호가 비트 처리 명령 실행 블럭(BPU)으로부터 출력된다. 상기 제어 신호가 상기 제어 신호(BPU)와 함께 사용되어 해저드 신호(HZD_PC)를 발생시킨다면, 필요할 때 후속 명령의 실행을 보류하는 것이 가능하다. 필요할 때에 해저드 신호(HZD_ID)가 발생된다면, 페치된 명령의 디코딩 결과를 취소하는 것도 가능하다.
프로그래머블 컨트롤러는 입력 신호의 상승 또는 하강을 검출하기 위한 미분 명령을 갖는다. 상기 미분 명령에서는 입력 신호의 이전의 검색 결과를 저장하기 위한 메모리가 필요하다. 이러한 이유로, 3단 파이프라인 구조로 명령을 실행하는 종래의 프로그래머블 컨트롤러에 채용되었던 메모리, 즉 명령 메모리와 동일한 어드레스를 갖고 1비트 폭을 갖는 메모리가 프로그래머블 컨트롤러에 제공된다. 미분 명령에 사용하기 위해서 데이타 메모리와 명령 메모리는 어드레스 버스를 공유하는데, 이로써 신호 라인을 감소시킬 수 있다. 그 결과로, 5단 파이프라인 구조를 갖는 고속의 프로그래머블 컨트롤러가 종래와 동일한 미분 명령을 수행하는 것이 가능하다.
전술한 회로 구성, 및 미분 명령과 함께 사용하는 메모리에 의해서, 미분 명령의 실행 시 요구되는 메모리 재기록 어드레스는 미분 명령이 저장되는 명령 메모리의 어드레스와 동일하게 된다. 재기록 어드레스를 저장하기 위한 한가지 가능한 방법에 따르면, 미분 명령이 페치될 때 얻어지는 프로그램 카운터 값이 스택에 저장되고 미분 명령이 재기록될 때 상기 어드레스를 얻는다. 그러나, 상기 방법에 따르면 제어가 복잡해지고, 분기 명령 등을 위해 프로그램 카운터(PC)의 값이 EX 스테이지까지 전달되어야 한다. 이러한 문제점을 없애기 위해, 다음의 구성이 채용된다. 즉, 파이프라인 레지스터를 사용하여 명령 메모리의 어드레스(즉, PC의 값)가 비트 처리 명령 실행 블럭(BPU)로 전달되고, 상기 BPU가 미분 명령을 실행할 경우에, 미분 명령을 메모리에 재기록할 때 상기 전달된 어드레스가 재사용된다.
미분 명령이 메모리에 재기록되면, 상기 명령 메모리의 어드레스는 상기 미분 명령을 메모리에 재기록할 때 사용하는 어드레스와 동일하게 된다. 명령이 이전대로 계속 페치되면, 현재 메모리에 기록된 미분 명령이 원래 페치되었던 명령 대신 다시 페치되다. 이러한 문제를 방지하기 위하여, 미분 명령이 메모리에 재기록된 동안은 파이프라인 사이클에서 프로그램 카운터의 증가는 보류되고 이로써 명령 페치가 수행된다.
단지 프로그램 카운터(PC)의 증가를 보류하는 것만으로 잘못된 명령의 실행을 막는다는 것은 불가능하다. 만일 명령 디코딩 결과를 취소하는 것이 불가능하다면, 명령 메모리로부터 페치된 값을 NOP(무연산 명령)으로 오버라이팅하여 얻은 결과를 명령 레지스터(IR)에 입력한다. 그 결과로, 잘못된 명령 실행을 막을 수 있다.
미분 명령을 실행할 때의 회로의 타이밍 차트와 미분 명령의 실행과 관련된 회로 부분을 참조하여 프로그래머블 컨트롤러를 설명하고자 한다. 도44는 미분 명령을 실행할 때의 회로의 타이밍 차트를 도시한다. 도45는 IF 및 ID 스테이지의 블럭도이다. 본 실시예에서는, 미분 명령이 명령 메모리의 어드레스(1)에 위치하고, 비트 처리 명령 이외의 명령들이 어드레스(2) 및 후속 어드레스에 위치하며, 어드레스(1)에 위치한 미분 명령이 가장 먼저 실행된다고 가정한다. 상기 미분 명령은 BPU2 스테이지에서 메모리에 재기록된다. 도44에 도시된 바와 같이, 미분 명령을 메모리에 재기록하는 파이프라인 사이클에서, 해저드 신호(HZD_PC)가 발생하여 프로그램 카운터(PC)의 증가를 보류시키고, 이로써 명령 메모리의 어드레스(6)에 저장된 명령을 페치하는 것을 보장할 수 있다. 상기 PC를 단순히 보류시킴으로써, 미분 명령이 메모리에 재기록될 때 명령 메모리의 어드레스가 어드레스(1)로 변경된다. 어드레스(1)의 명령이 다시 페치된다. ID 스테이지에서 페치된 상기 명령을 취소하는 것도 또한 가능하다. 그러나, 본 실시예에서는, NOP(무연산 명령)를 나타내는 값이 명령 메모리에서 페치된 값 대신 명령 레지스터(IR)에 기록되고, 이로써 잘못된 명령의 실행을 방지할 수 있다.
해저드의 해결 방법을 판단할 수 있는 다른 명령에서의 해저드 처리와는 반대로, 미분 명령이 재기록될 때의 해저드 처리는 상기 미분 명령의 실행이 완료되기 직전에 필요하다. 이러한 이유로, 명령의 조합에 따라서는 해저드 처리에 모순이 발생할 수 있고, 이에 의해 프로그래머블 컨트롤러가 오동작할 수 있다. 이러한 문제를 방지하기 위해서, 해저드 검출 유닛(HDU)은 여러가지 유형의 해저드의 발생을 감시한다. 미분 명령에서 해저드 처리에 있어 모순점이 발생하는 경우에는, 명령의 실행이 몇 사이클동안 추가적으로 더 보류되어 회로 오동작을 방지한다.
도46은 상기 모순점의 한 예를 도시한다. 도46에서는, 미분 명령이 어드레스(1)에 위치하고, 도40에 도시한 바 있는 데이타 메모리에 대하여 1워드 데이타를 판독/기록하기 위한 비트 처리 명령이 어드레스(3)에 위치한다. 상기 비트 처리 명령을 제외한 다른 명령들은 어드레스(2), 어드레스(4) 및 후속 어드레스에 위치한다. 명령은 어드레스(1)의 미분 명령부터 순서대로 실행된다. 해저드 신호는 해저드 검출 유닛(HDU)에서 발생된 신호를 나타낸다. 해저드 신호(HZD_ID, HZD_PC1)은 어드레스(3)의 비트 처리 명령에 관련된 것이다. 해저드 신호(HZD_PC2, HZD_IF)는 어드레스(1)의 미분 명령에 관련된 것이다. 해저드 검출 유닛(HDU)으로부터 출력된 해저드 신호(HZD_PC)는 해저드 신호(HZD_PC1, HZD_PC2)를 논리합 연산(OR)하여 얻는다. 프로그램 카운터(PC)의 증가는 시각(4)에서 시각(5) 그리고 시각(5)에서 시각(6)의 2사이클 동안 보류된다. 명령은 해저드 신호(HZD_PC1)에 의해 디코딩되고, 시각(5)에서 시각(6)동안 파이프라인 레지스터(ID/EX)에 기록된 값은 NOP로 오버라이팅된다. 반면, 미분 명령의 해저드를 해결하기 위해 해저드 신호(HZD_IF)에 의해 시각(6)에서 명령 레지스터(IR)에서 얻은 명령도 NOP로 오버라이팅된다. 만일 이러한 두 개의 해저드 처리가 그대로 실행된다면, 어드레스(4)의 명령은 디코딩도 실행도 아니다. 해저드 처리에서 이러한 모순점이 발생하는 경우에는, 해저드 검출 유닛(HDU)에서 다른 사이클동안에 해저드 신호(HZD_PC)를 발생시켜 명령이 실행되지 않도록 조치할 필요가 있다.
도47은 미분 명령과 비트 처리 명령이 실행될 때의 대응 조치를 도시하는 타이밍 차트이다. 신호(BMWTRQ)는 미분 명령이 비트 메모리를 기록할 때 "1"로 설정되고 다른 조건에서는 "0"으로 설정된다. 신호(PC_REHZDB)는 파이프라인 레지스터를 구동하는 클록에 대하여 역상 클록(inverse phase block)이 동작하는 신호를 나타낸다. 도48은 본 발명에 따른 프로그래머블 컨트롤러의 연산 코드(PC_REHZDB) 할당의 한 예를 도시하는 테이블이다. 신호(BMWTRQ)는 다음과 같이 변화한다: BMWTRQ가 "1"이고 HZD_ID가 "1"일 때 PC_REHZDB는 "1"로 설정되고, HZD_PC1 또는 HZD_PC2가 "0"일 때 PC_REHZDB는 "0"으로 설정된다. 신호(PC_REHZDB)는 파이프라인 레지스터를 구동하는 클록에 의해 파이프라인 레지스터를 래치함으로써 발생되는 신호를 나타낸다. 신호(HZD_PC)는 HZD_PC1, HZD_PC2 및 PC_REHZD의 논리합을 나타낸다. 신호(HZD_PC)는 PC의 증가를 정지시킨다.
[제6 실시예]
프로그래머블 컨트롤러에 필요한 명령들 중에서, 어떤 명령은 항상 실행되는 것이 아니고 소정의 명령 실행 조건이 만족될 경우에만 실행된다. 상기 5단 파이프라인 구조의 여러 위치에, 상기 명령 실행 조건을 구성하는 플래그가 제공된다. 비트 처리 명령에 의해 갱신되는 플래그(BITACC)는 5단 파이프라인 구조에서 제5 스테이지 또는 그 후속 스테이지에서 갱신된다. 이러한 이유로, 명령 실행 조건에 따라 실행되거나 취소되도록 결정되는 명령이 상기 플래그(BITACC)를 갱신하기 위한 비트 처리 명령 직후에 위치하는 경우에는, 후속 명령이 실행될 때, 상기 비트 처리 명령은 상기 플래그(BITACC)를 아직 갱신하지 않았다. 명령 실행 조건이 아직 결정되지 않았으므로 실행/취소 제어가 적절히 수행되는 것이 불가능하다.
도49 및 도50은 본 발명의 제6 실시예에 따른 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 전체 구성을 도시하는 블럭도이다. 도35에 도시된 프로그래머블 컨트롤러의 예와 본 발명의 프로그래머블 컨트롤러의 구조를 비교하면, 본 발명의 프로그래머블 컨트롤러는 플래그 레지스터(FR)와 해저드 검출 유닛(HDU)를 더 구비하고 있다. 해저드 검출 유닛(HDU)은 상기 플래그 레지스터(FR)의 강제 실행 플래그(EXEFLG)와 에러 플래그(ERRCNTRL) 그리고 비트 처리 명령 실행 유닛(BPU)에 의해 갱신되는 상기 플래그(BITACC)의 값에 기초하여 상기 명령 실행 조건을 결정한다. 상기 명령 실행 조건이 만족되지 않는 경우에는, 해저드 신호(HZD_EX)에 일(1)이 출력된다.
예를 들어, 본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 제51도에 도시된 바와 같이 한 명령을 5개의 파이프라인 스테이지, 즉 IF(명령 페치), ID(명령 디코딩, 레지스터 페치), EX(산술 논리 연산, 데이타 어드레스의 계산, 타겟 분기점 계산), MEM[메모리 액세스(판독/기록 동작)], 및 WB(분기 연산, 레지스터 기록 동작)으로 분리시킨 후 명령을 실행한다. 이러한 명령에 더하여, 프로그래머블 컨트롤러는 데이타 메모리의 1워드 데이타에서 1비트의 값을 참조하거나 갱신하기 위한 "비트 처리 명령"을 필요로 한다. 상기 비트 처리 명령은 여러 유형의 명령을 포함한다. 소정의 명령은 데이타 메모리로부터 판독된 1워드 데이타에 포함된 특정 비트의 상태에 따라 프로그래머블 컨트롤러에 제공되는 레지스터[BITACC(비트 누산기)]를 갱신하는 데에 사용되고, 다른 명령은 상기 BITACC 뿐만 아니라 데이타 메모리에 포함된 특정 1비트의 값을 갱신하는 데에 사용된다. 도51(b) 및 도51(c)는 비트 처리 명령의 파이프라인 스테이지와 플래그(BITACC)의 갱신을 도시한다. 상기 도면에 도시된 바와 같이, 비트 처리 명령 이외의 명령이 레지스터에 값을 기록하는 경우에는 BPU 스테이지가 WB 스테이지에 대응하는 위치에 존재한다. BPU 스테이지에는, MEM 스테이지에서 데이타 메모리로부터 판독된 값을 사용한 BITACC의 갱신, 데이타 메모리에 포함된 1비트 값의 갱신, 및 데이타 메모리에 대한 기록 동작 등이 수행된다. 여러가지 유형의 비트 처리 명령이 존재하고, 도51(b) 및 도51(c)에 도시된 바와 같이 요구되는 BPU 스테이지의 수는 그 명령에 따라 변화한다. 도면에서 플래그(BITACC)의 값은 영(0)에서 일(1)로 변경되지만, 이와는 반대로 변경될 수도 있다.
프로그래머블 컨트롤러의 명령들 중에서, 소정의 명령은 항상 실행되는 것이 아니고 복수의 플래그 값이 만족되는 것을 포함하는 명령 실행 조건이 만족될 경우에만 실행된다. 본 실시예에서, 소정의 명령은 다음의 조건이 만족될 경우에만 실행된다.
EXEFLG ∪ (BITACC ∩ ERRCNTRL) = 1
상기 식에서, EXEFLG는 강제 실행 플래그이고, ERRCNTRL은 에러 플래그이다. 상기 플래그는 다른 플래그와 함께 본 회로의 플래그 레지스터(FR)에 포함된다. BITACC는 비트 처리 명령에 의해 갱신되는 플래그이다. 도49 및 도50은 상기 플래그가 전술한 명령 실행 조건을 만족할 때에만 특정 명령을 실행하는 본 실시예에 따른 프로그래머블 컨트롤러를 도시한다.
IF 스테이지에서 명령 메모리(IM)로부터 페치된 명령 워드는 파이프라인 레지스터(IF/ID)에 제공되는 명령 레지스터(IR)에 저장된다. 상기 저장된 명령 워드는 ID 스테이지의 디코더 블럭(DC)에서 디코딩되고, 디코딩 연산의 결과는 파이프라인 레지스터(ID/EX)에 기록된다. 디코딩된 명령이 비트 처리 명령인 경우, 파이프라인 레지스터에 제공되는 제어 신호(BPU)에 일(1)이 기록된다. 상기 제어 신호(BPU)는 파이프라인 레지스터(ID/EX 및 EX/MEM)를 통하여 순차적으로 전송된다. 상기 제어 신호는 해저드 검출 유닛(HDU)에 출력된다. 해저드 검출 유닛(HDU)는 해저드 신호(HZD_PC, HZD_ID, HZD_EX)를 출력한다. 해저드 신호(HZD_PC)는 프로그램 카운터(PC)의 증가를 보류시키고, 상기 해저드 신호는 ID 스테이지에서 수행된 디코딩 연산의 모든 결과에 대한 메모리 액세스 및 레지스터 기록 동작을 취소한다. 상기 신호(HZD_EX)는 EX 스테이지에서 수행된 디코딩 연산의 모든 결과에 대한 메모리 액세스 및 레지스터 기록 동작을 취소한다.
도49 및 도50에 도시된 파이프라인 레지스터(ED/EX)의 INST 신호는 명령 실행 조건에 따라 현재 명령의 실행/취소를 나타낸다. EX 스테이지에서의 명령이 연산 실행 및 연산 취소에 대한 것인 경우에는, 해저드 검출 유닛(HDU)은 플래그 레지스터(FR)의 강제 실행 플래그(EXEFLG) 및 에러 플래그(ERRCNTRL)와 비트 처리 명령 실해 유닛(BPU)에 의해 갱신되는 플래그(BITACC)의 값에 기초하여 명령 실행 조건을 결정한다. 상기 명령 실행 조건이 만족되지 않는 경우에는, 해저드 신호(HZD_EX)에 일(1)이 출력된다. 해저드 신호(HZD_EX)가 일(1)인 경우에는, 외부 메모리 및 레지스터 파일(RF)를 제어하기 위한 신호가 "갱신 동작이 수행되지 않음"을 나타내는 값으로 오버라이팅된다. EX와 MEM 스테이지에서 어떠한 동작이 수행되고 있더라도, 그 동작의 결과는 보유되지 않으며, 이로써 명령 실행을 막게 된다.
명령 실행 조건에 따라 실행 또는 취소되는 명령 직전에, 상기 명령 실행 조건을 변경하기 위한 명령이 제공되는 경우에 대해 설명하고자 한다. 상기 명령 실행 조건을 구성하는 플래그 중에서, 강제 실행 플래그(EXEFLG) 및 에러 플래그(ERRCNTRL)는 FLGSET 명령에 의해서 갱신된다. 본 실시예에서, FLGSET 명령은 명령이 현재 실행되고 있는 EX 스테이지에서 플래그를 갱신한다. 명령 실행 조건에 따라 실행 또는 취소되는 명령이 FLGSET 명령 직후에 위치하는 경우에도, 상기 실행 조건은 후속 명령이 실행될 때에는 이미 결정된다. 그 결과로, 명령을 실행할 것인지 아니면 취소할 것인지의 판단을 지속적으로 제어하면서 명령을 실행하는 것이 가능하다. 도52는 전술한 동작을 설명하는 타이밍 차트이다.
에러 플래그(ERRCNTRL)는 FLGSET 명령 뿐만 아니라 예를 들어 나눗셈과 같은 산술 연산 명령이나 BCD 코드 변환 명령 등 기타 다른 명령에 의해서도 갱신된다. 예를 들어, 어떤 값을 영(0)으로 나누는 경우나 BCD 코드 영역 밖의 값의 경우에, 연산은 에러로 다루어진다. FLGSET 명령 이외에 에러 플래그(ERRCNTRL)를 갱신하는 명령에 대해서는, EX 스테이지에서의 실행이 개시되기 전에 바로 다음의 후속 명령이 에러 플래그(ERRCNTRL)를 갱신한다. 그 결과로, 명령을 실행할 것인지 아니면 취소할 것인지에 관한 판단을 지속적으로 제어하면서 후속 명령을 실행할 수 있다.
명령 실행 조건을 구성하는 모든 플래그들의 플래그(BITACC)는 비트 처리 명령의 BPU 스테이지가 완료되었을 때 갱신된다. 따라서, 상기 명령 실행 조건에 따라 실행 또는 취소되는 명령이 비트 처리 명령 직후에 위치하는 경우에는, 후속 명령을 위한 EX 스테이지는 비트 처리 명령이 플래그(BITACC)를 갱신하기 전에 실행되고, 이는 상기 명령을 실행할 것인지 아니면 취소할 것인지에 관한 판단을 제어하는 것을 불가능하도록 만든다. 이러한 문제점을 예방하기 위해서, 도53에 도시된 바와 같이 플래그(BITACC)를 갱신하기 위한 비트 처리 명령이 상기 명령 실행 조건에 따라 실행 또는 취소되는 명령 전에 위치하는 경우에는, 상기 명령 실행 조건에 따라 실행 또는 취소되는 명령이 실행될 때 프로그래머블 컨트롤러는 상기 명령 실행 조건에 따라 실행 또는 취소되는 명령이 실행되지 않도록 하기 위해서 상기 플래그(BITACC)가 갱신되고 상기 명령 실행 조건이 결정될 때까지 대기 상태(wait state)에 들어간다. 상기 기능에 의하여, 상기 명령 실행 조건에 따라 실행 또는 취소되는 명령이 상기 플래그(BITACC)를 갱신하기 위한 비트 처리 명령 직후에 위치하는 경우에도, 상기 명령을 실행할 것인지 아니면 취소할 것인지에 대한 판단을 지속적으로 제어하는 것이 가능하게 된다.
도49 및 도50에 도시된 블럭도를 참조하여 본 발명의 특징을 설명하고자 한다. 현재의 명령이 플래그(BITACC)를 갱신하기 위한 비트 처리 명령이라는 것을 나타내어 제어 신호(BPU)가 파이프라인 레지스터(ID/EX, EX/MEM)에 제공된다. ID 스테이지에서의 명령이 명령 레지스터(IR)에 로딩된 명령의 디코딩 결과로서 상기 명령 실행 조건에 따라 실행되거나 취소되는 명령인 경우에는, 해저드 검출 유닛(HDU)은 파이프라인 레지스터(ID/EX, EX/MEM)의 제어 신호(BPU)를 검사한다. 파이프라인의 EX 스테이지 또는 MEM 스테이지에 BITACC를 갱신하기 위한 비트 처리 명령이 존재하는 경우에는, 해저드 신호(HZD_PC, HZD_ID)에 일(1)이 출력된다. 해저드 신호(HZD_PC)가 일(1)인 경우, ID 스테이지에서의 명령 디코딩 결과는 어떠한 연산도 실행되지 않았다는 것을 나타내는 값[즉, 도면에서 영(0)]으로 멀티플렉서(MUX)를 사용하여 오버라이팅된다. 상기 두(2) 개의 해저드 신호를 발생시킴으로써, ID 스테이지에서 특정 명령의 실행을 보류할 수 있다. 보류된 명령은 플래그(BITACC)를 갱신하기 위한 비트 처리 명령이 파이프라인의 EX 스테이지와 MEM 스테이지에서 없어질 때 해저드 신호(HZD_PC, HZD_ID)를 영(0)으로 오버라이팅함으로써 재개된다.
[제7 실시예]
5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러는 하나의 명령을 다섯(5) 개의 파이프라인 스테이지, 즉 IF(명령어 페치), ID(명령어 디코딩, 레지스터 페치), EX(산술 논리 연산, 데이타 어드레스의 계산, 타겟 분기점의 계산), MEM[메모리 액세스(판독/기록 동작)] 및 WB(분기 연산 및 레지스터에 데이타 기록)으로 구분한 후 실행한다. 이러한 명령에 더하여, 프로그래머블 컨트롤러는 데이타 메모리의 1워드에 포함된 1비트 값을 참조하거나 갱신하기 위한 "비트 처리 명령"을 또한 요구한다. 상기 비트 처리 명령은 여러가지 유형의 명령을 포함한다. 상기 데이타 메모리로부터 판독한 1워드에 포함된 특정 비트의 상태에 따라 프로그래머블 컨트롤러의 레지스터 BITACC(비트 누산기)를 갱신하기 위한 명령이 제공되고, BITACC뿐만 아니라 상기 데이타 메모리에 포함된 특정 1비트의 값을 갱신하기 위한 명령이 제공된다.
프로그래머블 컨트롤러는 정지 명령의 실행, 인터럽트 발생, 또는 연산 실패의 발생과 같은 여러 이유로 보류된다. 보류된 후의 프로그래머블 컨트롤러의 상태, 예를 들어 프로그램 카운터(PC)의 값 등은 정지 조건에 따라 정해진다. 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러가 정지 명령의 실행의 결과로 보류된 경우에는, 상기 정지 명령의 디코딩이 완료되었을 때 상기 정지 명령 이후의 다른 명령이 이미 파이프라인 스테이지로 인입되어 있다. 또한, 프로그래머블 컨트롤러가 실제로 정지하기 전에 여러 개의 명령들이 파이프라인 스테이지에 더 들어와 있을 수도 있다. 그러한 경우에는, 프로그래머블 컨트롤러가 보류된 후 얻는 프로그램 카운터(PC)의 값이 본 명세서에서 기술하였던 바람직한 값과 동일하지 않을 수 있다. 정지 조건을 만족한 명령 이후의 다른 명령이 파이프라인 레지스터에 이미 인입되어 있는 경우에는, 실행되어서는 안될 명령이 실행될 것이다.
도54 및 도55는 본 발명의 제7 실시예에 따른 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러의 전체 구성을 도시하는 블럭도이다. 도면에서 a 내지 h로 표시된 선은 대응하는 요소에 연결되어 있다. 도35에 도시된 프로그래머블 컨트롤러와 본 발명의 프로그래머블 컨트롤러의 구조를 비교하면, 본 발명의 프로그래머블 컨트롤러는 본 프로그래머블 컨트롤러의 기동/정지 동작의 제어를 위한 스테이지 머신(STM)과 잘못된 명령의 실행을 방지하기 위한 해저드 검출 유닛(HDU)를 더 구비하고 있다.
본 발명의 프로그래머블 컨트롤러는 다음의 경우에 보류된다고 가정한다:
(a) 정지 명령의 실행 시:
프로그래머블 컨트롤러는 정지 명령을 실행할 때 보류된다. 프로그래머블 컨트롤러가 보류된 후의 프로그램 카운터(PC)의 값은 정지 명령 자신의 어드레스가 된다.
(b) 인터럽트 요청 신호의 발생 시:
프로그래머블 컨트롤러는 인터럽트 요청 신호가 발생한 후 최초로 나타나는 "정지 표시"로 지정된 명령을 실행하기 전에는 보류되지 않는다. 프로그래머블 컨트롤러가 완료된 후 프로그램 카운터(PC)의 값은 프로그래머블 컨트롤러의 보류를 발생시켰던 상기 "정지 표시를 갖는 명령" 이후의 다른 명령의 어드레스가 된다.
본 실시예의 프로그래머블 컨트롤러에서, 전체 명령에서 특정 위치에 제공되는 비트가 "정지 표시"로서 사용된다. 상기 비트가 "1"로 설정된 명령만이 인터럽트 요구 명령이 발생하였을 때 프로그래머블 컨트롤러를 보류시킬 수 있는 명령이 된다.
도54 및 도55는 전술한 정지 스펙을 만족시키는 본 실시예의 프로그래머블 컨트롤러의 블럭도이다. 상기 도면은 본 발명의 본 실시예에 관한 회로 블럭만을 도시한다. 도면에 도시된 STM은 프로그래머블 컨트롤러의 기동/정지 동작을 제어하는 스테이트 머신이다. 상기 스테이트 머신(STM)은 기동 요청 신호와 인터럽트 요청 신호를 수신할 뿐만 아니라, 정지 명령 및 정지 표시의 실행을 알기 위해서 제어 신호(STOP, END)를 수신한다. 상기 제어 신호를 설명하고자 한다. IF 스테이지에서 명령 메모리(IM)로부터 페치된 명령 워드는 파이프라인 레지스터(IF/ID)의 명령 레지스터(IR)에 저장된다. 상기 명령 워드는 DC 스테이지에서 디코더 블럭(DC)에 의해 디코딩되고, 상기 명령 워드의 디코딩 결과는 파이프라인 레지스터(ID/EX)에 기록된다. 디코딩된 명령이 정지 명령인 경우에는, 파이프라인 레지스터(ID/EX)에 제공되는 제어 신호(STOP)에 일(1)이 기록된다. 더욱이, 정지 표시로 지정된 명령을 실행하는 경우에는, 상기 명령이 디코딩되고, 파이프라인 레지스터(ID/EX)에 제공되는 제어 신호(END)에 일(1)이 기록되어 상기 명령이 정지 표시를 갖고 있다는 것을 나타낸다. 상기 제어 신호(STOP, END)에 기초하여, 스테이트 머신(STM)이 정지 명령 및 정지 표시를 갖는 명령이 실행되었다는 것을 알 수 있다.
명령 메모리(IM)의 어드레스를 나타내는 프로그램 카운터(PC)의 값은 파이프라인 레지스터(IF/ID)에 입력된다. 그리고 나서, 상기 값은 순차적으로 ID/EX 및 EX/MEM 파이프라인 레지스터로 전송되어 프로그래머블 컨트롤러가 보류될 때 프로그램 카운터(PC)의 값을 계산하는 데에 사용된다. 스테이트 머신(STM)은 프로그래머블 컨트롤러가 보류되기 시작하는 지점인 파이프라인 레지스터(ID/EX, EX/MEM)에 제공되는 프로그램 카운터(PC)의 값과 상기 명령의 디코딩 결과를 표시하는 파이프라인 레지스터(ID/EX)의 값, 그리고 정지 조건의 하나인 인터럽트 요청 신호를 얻는다. 프로그램 카운터의 값을 저장하는 가능한 방법은 명령이 스택으로 로딩될 때 얻어지는 프로그램 카운터의 값을 저장하는 단계와 프로그래머블 컨트롤러가 보류된 때 상기 스택으로부터 값을 페치하는 단계를 포함한다. 상기 방법에 의해서 제어는 보다 복잡해진다. 더욱이, 프로그램 카운터(PC)의 값은 분기 명령에 사용하기 위해서 파이프라인 레지스터를 통해 전송된다. 이러한 이유로, 파이프라인 레지스터(ID/EX 또는 EX/MEM)에 제공된 프로그램 카운터의 값은 스테이트 머신(STM)으로 전달된다. 그리고 나서, 정지 스펙에 따라서 상기 값은 프로그램 카운터(PC)로 재기록된다.
스테이트 머신(STM)은 필요한 때에 해저드 신호 발생 요청 신호를 해저드 검출 유닛(HDU)으로 보내어, 해저드 신호가 발생되도록 한다. 그 결과로, 명령의 실행이 취소되고, 프로그래머블 컨트롤러가 보류 모드에 있는 동안 잘못된 명령을 실행하는 것이 가능하다. 해저드 검출 유닛(HDU)은 해저드 신호(HZD_PC, HZD_IF, HZD_ID, HZD_EX)를 발생한다. 상기 신호 중에서, 신호(HZD_PC)는 프로그램 카운터(PC)의 증가를 보류시키고, 신호(HZD_IF)는 IF 스테이지에서 명령 페치를 취소한다. 신호(HZD_ID)는 ID 스테이지에서 수행된 디코딩 동작의 모든 결과에 대한 메모리 액세스 및 레지스터 기록 동작을 취소한다. 신호(HZD_EX)는 EX 스테이지에서 수행된 디코딩 동작의 모든 결과에 대한 메모리 액세스 및 레지스터 기록 동작을 취소한다.
도56은 기동/정지 제어를 위한 스테이트 머신의 상태 천이를 도시한다. 프로그래머블 컨트롤러가 휴지 상태(rest)이거나 프로그래머블 컨트롤러의 전원이 턴 온될 때에 스테이트 머신은 IDLE 상태로 천이한다. 프로그래머블 컨트롤러를 위한 기동 요청 신호가 스테이트 머신에 입력되면, 스테이트 머신은 IDLE 상태에서 S0으로 천이한다. 그 결과로, 프로그래머블 컨트롤러는 명령의 실행을 개시한다. 스테이트 머신의 상태가 S0이면, 프로그래머블 컨트롤러는 종전대로 계속 명령을 실행한다. 정지 명령이 들어오면, 스테이트 머신의 상태는 S0에서 S11로 천이한다. 스테이트 머신은 순차적으로 S12 및 S13으로 천이한다. 그리고 나서, 스테이트 머신의 상태 천이 중에 정지 연산이 요구되고, 그리고 나서 프로그래머블 컨트롤러는 보류된다. 스테이트 머신의 상태는 또한 IDLE 상태로 천이한다.
현재 명령을 처리하는 스테이트 머신의 상태가 S0일 때에 인터럽트 요청 신호가 발생하면, 스테이트 머신의 상태는 S0에서 S21로 천이한다. 그 결과로, 프로그래머블 컨트롤러는 명령 실행 중에 정지 표시부 명령의 실행을 대기한다. 스테이트 머신의 상태가 S21일 때 상기 정지 표시부 명령이 실행되는 경우에는, 스테이트 머신의 상태는 S21로부터 S22, S23, S24, 그리고 S25로 천이한다. 스테이트 머신의 상태 천이 중에 정지 연산이 요구되고, 그리고 나서 스테이트 머신의 상태는 IDLE상태로 천이되어, 이로써 프로그래머블 컨트롤러는 보류된다. 스테이트 머신의 상태가 S21이고 프로그래머블 컨트롤러가 정지 표시부 명령을 대기하고 있는 동안에 정지 명령이 실행되면, 스테이트 머신의 상태는 S21로부터 S11로 천이한다. 그 결과로, 스테이트 머신의 상태는 정지 명령이 수행되었을 때 이루어지는 정지 연산 상태로 천이한다. 상태 S0 또는 S21에서와 같이 스테이트 머신이 복수의 상태로 천이하는 것이 가능한 경우에는, 도56에 도시된 우선 순위 (1) 또는 (2)와 같이 스테이트 머신의 상태 천이에 대한 우선 순위가 미리 결정된다. 상태 S0에서 정지 명령이 실행되는 때에 정지 명령의 실행 및 인터럽트 요청 신호의 발생이 동시에 발생한 경우에는, 스테이트 머신의 상태는 S11로 천이한다. 더욱이, 상기 정지 명령의 실행 시기에 연산은 보류 연산으로 변경된다.
도57 및 도58은 본 실시예의 프로그래머블 컨트롤러의 보류 연산을 나타내는 타이밍 차트를 도시한다. 도57은 정지 명령이 어드레스(3)의 명령 메모리(IM)에 저장되어 있다는 가정하에 정지 명령을 실행할 때의 보류 연산을 도시한다. 도57에서, STATE는 기동/정지 제어를 위한 스테이트 머신의 상태를 표시하고, PCKEEP은 프로그래머블 컨트롤러가 보류 모드(suspend mode)일 때 스테이트 머신에 존재하는 프로그램 카운터(PC)를 임시로 저장하기 위한 레지스터를 나타낸다. PCWTRQ는 스테이트 머신이 프로그램 카운터(PC)에 값을 기록할 때 사용하는 제어 신호를 표시한다. IF_ID_IR은 파이프라인 레지스터(IF/ID)에 존재하는 명령을 페치하기 위한 명령 레지스터를 나타낸다. HZD_PC는 프로그램 카운터(PC)의 증가를 보류하기 위한 해저드 신호를 나타내고, HZD_IF는 명령 메모리(IM)으로부터 페치된 명령을 NOP 명령으로 오버라이팅하기 위한 해저드 신호를 나타낸다.
정지 명령이 실행될 때, 정지 명령은 디코딩되고, 제어 신호(STOP)에 일(1)이 기록되어 파이프라인 레지스터(ID/EX)에서 이에 대응하는 명령이 정지 명령임을 나타낸다. 파이프라인 레지스터(ID/EX)에 제공되는 제어 신호(STOP)의 값이 일(1)일 때, 기동/정지 제어를 위한 스테이트 머신은 S0으로부터 S11로 천이한다. 이어서, 스테이트 머신은 무조건 S12, S13 그리고 IDLE 상태로 천이한다. 스테이트 머신의 상태가 S11인 경우에는, 파이프라인 레지스터(ID/EX)의 프로그램 카운터(PC)의 값은 PCKEEP에 저장된다. 스테이트 머신의 상태가 S12인 경우에는, PCKEEP의 값이 프로그램 카운터(PC)에 기록된다. 상기 기록된 값은 정지 명령의 어드레스를 나타낸다.
도58은 프로그래머블 컨트롤러가 인터럽트 요청 신호에 의해 보류되는 때의 보류 동작을 도시한다. 정지 표시부 명령이 명령 메모리의 어드레스(3)에 저장되어 있고, 인터럽트 요청 신호(INT_RQ)가 상기 명령이 실행되기 전에 발생되었다고 가정한다. 도58에 도시된 각각의 신호는 도57에 도시된 것과 동일하다. 인터럽트 요청 신호(INT_RQ)가 입력되면, 기동/정지 제어를 위한 스테이트 머신이 S0으로부터 S21로 천이하고, 이로써 프로그래머블 컨트롤러는 정지 표시부 명령의 실행을 대기한다. 정지 표시부 명령을 실행하기 위해서, 상기 명령은 디코딩되고, 파이프라인 레지스터(ID/EX)의 제어 신호(END)에 일(1)이 기록되어 대응하는 명령이 정지 표시 부임을 표시한다. 파이프라인 레지스터(ID/EX)의 제어 신호(END)의 값이 일(1)일 때, 기동/정지 제어를 위한 스테이트 머신은 S21로부터 S22로 천이된다. 이어서, 스테이트 머신은 무조건 S23, S24, S25, 그리고 IDLE 상태로 천이된다. 스테이트 머신의 상태가 S23인 때에는, 파이프라인 레지스터(EX/MEM)의 프로그램 카운터(PC)의 값에 일(1)을 가산하여 얻은 값이 PCKEEP에 기록된다. 스테이트 머신의 상태가 S24인 때에는, PCKEEP의 값이 프로그램 카운터(PC)에 기록된다. 상기 기록된 값은 상기 정지 표시부 명령 이후의 다른 명령의 어드레스를 나타낸다.
[제8 실시예]
프로그래머블 컨트롤러에서, 입력 프로그램의 명령 코드가 순차 명령(sequence instruction)인 때에는, 연산이 하나의 어드레스 상에서 수행된다. 계산될 대상에 대한 지표 부착(indexing)은 인덱스 레지스터의 데이타와 상수이고 명령 코드에 표시되는 즉치의 합산값을 의미하고, 연산될 대상의 어드레스로서 사용된다.
도59는 비트 연산 명령의 하나로서 연산될 비트의 상세한 정보를 누산기(ACC)가 판독하도록 하는 명령인 ST 명령의 예를 도시한다. 인덱스 레지스터(IX)의 데이타는 15를 나타내고, 명령 코드의 즉치는 3이다. 따라서, 이들의 합산값은 18이다. 결국, 도59(a)에 도시된 ST IX X3 명령은 도59(b)에 도시된 ST X18과 동일하다. 도59(c)에 도시된 메모리의 어드레스(1)에 있는 워드 데이타의 비트8은 ST X18 명령에 따른 연산에 의한다. 하드웨어인 누산기(ACC)는 비트8의 상세한 정보를 판독한다.
프로세서는 명령 코드에서 즉치로서 이전에 표시된 어드레스에 있는 데이타에 대한 연산만을 수행한다. 그 결과로, 비트 처리가 하드웨어로 수행될 수 있다. 지표 부착 명령이 이러한 프로세서로 실행되는 경우에는, 도60에 도시된 실행 시퀀스가 필요하게 된다.
먼저, 단계(21)에서 인덱스 레지스터로부터 데이타(IX)가 판독되고, 상기 판독된 데이타(IX)는 레지스터부에서 범용 레지스터의 r2로 입력된다. 인덱스 레지스터의 데이타(r2)는 명령 코드의 즉치(m)에 가산되고, 단계(22)에서 상기 합산값은 범용 레지스터의 r1로 입력된다. 단계(23)에서, r1은 4비트 만큼 우측으로 쉬프트되어 상기 워드의 비트 위치로부터 워드 어드레스를 분리해낸다. 워드 어드레스를 나타내는 "연산 결과"와 워드에서의 비트 위치를 나타내는 "나머지"는 각각 범용 레지스터의 r3와 r4에 입력된다.
단계(24)에서, r3을 어드레스로 하는 연산 대상 비트를 포함하는 워드 데이타가 판독된다. 상기 판독된 워드 데이타는 범용 레지스터의 r5로 입력된다. 단계(25)에서, r5의 워드 데이타를 4비트 만큼 우측으로 쉬프트함으로써 상기 연산 대상 비트는 비트0으로 쉬프트된다. r5에 포함된 상기 연산 대상 비트가 추출되고, 상기 추출된 비트는 범용 레지스터의 r6으로 입력된다. 본 실시예에서는, 상기 추출된 비트는 비트0으로 전달된다.
단계(26)에서, 원래의 데이타를 보관할 필요가 있고, 어드레스(0)에 있는 현재의 데이타는 일시적으로 r7에 전달된다. 단계(27)에서, 비트0에 전달된 상기 연산 대상 비트를 갖는 r6의 데이타는 메모리의 소정의 어드레스(0)으로 전달된다. 실제의 비트 처리 명령을 위한 배열이 이로써 이루어졌다.
단계(28)에서, 어드레스(0)의 비트0에 대한 비트 처리 명령인 ST X0이 실행된다. 마지막으로, 단계(29)에서 어드레스(0)에 있는 원래 데이타(r7)이 어드레스(0)으로 복귀하고, 이로써 상기 지표 부착 명령의 실행이 완료된다.
입력 프로그램의 명령 코드가 타이머/카운터 명령인 경우에는, 연산 대상이 설정치 데이타(preset data)가 된다. 설정치 데이타의 지표 부착은 인덱스 레지스터의 값과 상수이고 명령 코드에 표시되는 즉치의 합산값을 의미하고, 설정치 데이타 영역에서 어드레스로서 사용된다. 도61은 TMR 명령의 예를 도시한다. 즉, 입력 조건이 온(ON)이면 입력 조건이 오프(OFF)가 될 때까지 시각을 계수하는데, 이 때 지정된 설정 데이타가 경과치의 초기값으로 사용된다. 상기 경과치가 영(0)인 때에는, 상기 타이머의 접점이 온(ON)이 된다. 본 실시예에서는, 인덱스 레지스터(IX)가 15이고 명령 코드의 즉치가 3이다. 따라서, 도61(a)에 도시된 TMR 0 및 IXDT 3 명령은 TMR 0 및 DT 18 명령과 동일하게 된다. 도61(c)에 도시된 바와 같이, TMR 명령은 메모리 어드레스(18)의 워드 데이타를 설정 데이타로서 사용하고 상기 워드 데이타의 내용을 하드웨어를 사용하여 판독함으로써 계산된다.
비트 처리 명령을 하드웨어를 사용하여 실행하는 프로세서에서는, 타이머 명령 또는 카운터 명령을 실행한 결과로서, 설정 데이타가 저장되어 있는 메모리의 어드레스가 타이머 숫자 또는 카운터 숫자에 의해 하나로 결정된다. 설정치로서 상기 데이타만을 계산할 수 있다. 이러한 프로세서를 사용하여 설정 데이타의 지표 부착 명령을 실행하려고 하면, 도62에 도시된 실행 시퀀스가 필요하게 된다.
먼저, 단계(31)에서 인덱스 레지스터의 데이타(IX)가 판독되고, 상기 판독된 데이타는 레지스터부에 제공된 범용 레지스터의 r1에 입력된다. 단계(32)에서, 인덱스 레지스터의 데이타(r1)과 명령 코드의 즉치(m)이 서로 가산된다. 즉, 실제로 연산될 대상인 설정 데이타 영역의 메모리 어드레스가 계산되고, 그 계산 결과가 범용 레지스터의 r3에 입력된다. 단계(33)에서, r3에 의해 어드레싱되는 워드 데이타, 즉 설정 데이타가 판독되고, 상기 판독된 워드 데이타는 범용 레지스터의 r2에 입력된다.
단계(34)에서, 원래 데이타를 보관하고 현재의 어드레스("n")에 있는 설정 데이타를 일시적으로 r7에 전달할 필요가 있다. 단계(35)에서, r2의 워드 데이타는 타이머 숫자 또는 카운터 숫자에 의해 하나로 정해지는 상기 어드레스("n")에 일시적으로 전달된다.
단계(36)에서, 연산될 설정치에 대한 연산 명령인 TMR n이 실행된다. 마지막으로, 단계(37)에서 보관되었던 원래 데이타(r7)이 어드레스("n")으로 복귀된다. 이로써, 상기 지표 부착 명령의 실행이 완료되었다.
전술한 종래의 프로그래머블 컨트롤러에서, 상기 지표 부착 명령이 시퀀스 명령 및 타이머/카운터 명령과 함께 실행되는 경우에는, 상기 지표 부착 명령이 여러 명령 조각들과 나누어지고 명령의 흐름이 순차적으로 실행되는 때에 옳은 결과를 얻을 수 있다.
그러나, 상기 방법은 더 많은 프로그램 메모리를 요구하고, 이는 실행 속도를 저하시킨다.
도63 내지 도65를 참조하여, 본 발명의 제8 실시예에 따른 프로그래머블 컨트롤러를 설명하고자 한다.
도면에서, A로 나타낸 프로세서는 5개의 부분을 갖는다. 후술하는 명령 코드(6)은 실행 대상인 연산에 의해 어드레싱되는 시퀀스 명령을 실행한다. 참조 번호(1)은 명령 페치부를 나타내고, 명령 코드(6)은 상기 명령 페치부에 입력된다. 참조 번호(2)는 r0 내지 r7을 포함하는 명령 디코딩부를 나타낸다. 상기 명령 디코딩부(2)는 데이타 판독과 데이타 기록을 위한 범용 레지스터(21a)를 갖는 레지스터군(21)과 명령 디코더(22)를 포함한다. 상기 명령 디코딩부(2)는 상기 명령 페치부(1)로부터 입력되는 명령 코드(6)을 디코딩하고 상기 디코딩된 명령을 실행한다.
참조 번호(3)은 CPU 등으로 이루어진 연산 유닛(ALU)를 구비하는 어드레스 계산부를 나타낸다. 상기 어드레스 계산부(3)은 상기 명령 디코딩부(2)에 의해 디코딩된 명령 코드(6)에 기초하여 실행될 명령의 어드레스를 계산한다. 상기 ALU(31)은 명령이 지표 부착 명령인 경우에 어드레스를 출력하기 위한 선택기(7)을 구비한다. 상기 선택기(7)은 후술하고자 한다.
참조 번호(4)는 외부 메모리를 갖는 메모리 액세스부를 나타낸다. 어드레스는 상기 ALU(31)로부터 외부 메모리(41)로 입력되고, 데이타도 상기 범용 레지스터(21a)로부터 외부 메모리(41)로 기록된다. 상기 데이타는 상기 외부 메모리(41)로부터 판독 및 출력된다.
참조 번호(5)는 CPU 등으로 구성된 연산 유닛(ALU ; 51)과 비트 누산기(BACC ; 52)를 구비한 연산부를 나타낸다. 연산 대상인 데이타는 상기 메모리 액세스부(4)로부터 상기 연산부(5)로 입력되고, 상기 범용 레지스터(21a)로의 데이타 기록 및 비트 연산이 수행된다.
본 프로세서(A)의 동작을 설명하고자 한다. 명령 코드(6)은 한(1) 비트로 구성된 표시 플래그(61), 명령(62), 및 즉치 어드레스(63)을 구비한다. 상기 표시 플래그(61)은 연산 대상을 간접적으로 특정하기 위한 지표 부착 명령이 존재하는지의 여부를 표시한다. 상기 명령 코드(6)이 입력되면, 상기 명령이 지표 부착되지 않은 경우에는, 명령 코드(6)에 포함된 즉치가 어드레스 계산부(3)을 통하여 상기 외부 메모리(41)로 직접 출력된다. 상기 명령 코드(6)에 포함된 비트 위치 스펙 데이타와 함께 연산 대상 비트에 대하여, 지정된 연산이 실행된다.
도64를 참조하여, 상기 명령이 지표 부착된 경우의 어드레스 계산 시퀀스를 설명하고자 한다. 명령이 지표 부착 명령인지를 표시하기 위하여 명령 코드(6)이 표시 플래그(61)에 제공된다. 표시 플래그(61)의 플래그 비트와 명령 코드(6)에 포함된 즉치 어드레스 데이타가 상기 선택기(7)에 입력된다. 선택기(7)은 프로세서에 제공된 범용 레지스터(21a)에 연결되어 있다. 상기 범용 레지스터(21a) 중에서 선택기(7)에 연결될 레지스터는 하드웨어로 미리 정해진다. 본 실시예에서는, r1 레지스터가 선택기(7)에 연결되고, 상기 r1 레지스터의 데이타가 선택기(7)에 입력된다. 표시 플래그(61)이 상기 명령 코드(6)에 포함된 명령이 지표 부착 명령임을 표시하는 경우에는, 선택기(7)은 r1 레지스터의 데이타를 연산 대상 어드레스로서 외부 메모리로 출력한다. 이외의 경우에는, 상기 명령 코드(6)의 즉치(63)이 출력된다. 이후의 연산은 종래의 비트 처리 명령의 연산과 동일하다.
도65에 도시된 플로우 챠트에 기초하여 하드웨어를 사용하여 지표 부착 명령을 실행하는 시퀀스를 설명하고자 한다. 먼저, 단계(1)에서 인덱스 레지스터의 데이타(IX)가 판독되어 상기 레지스터군(21)에 배치된 범용 레지스터(21a)의 r2 레지스터에 입력된다. 단계(2)에서 상기 r2 레지스터의 데이타와 명령 코드(6)에 포함된 즉치를 가산하고, 계산 대상 어드레스를 상기 범용 레지스터(21a)의 r1 레지스터에 입력한다. 단계(3)에서, 지표 부착 명령인 ST IX X3이 실행된다.
이와 같은 방법으로, 지표 부착 명령의 실행은 단지 인덱스 레지스터로부터 데이타를 판독하고 상기 범용 레지스터(21a)의 r1 레지스터에 연산 어드레스 계산값을 설정하는 것에 의해서 이루어진다.
제8 실시예에 따른 프로그래머블 컨트롤러에 있어서, 계산 대상을 간접적으로 특정하기 위해 상기 지표 부착 명령이 존재하는지의 여부를 표시하는 표시 플래그(61)이 상기 명령 코드(6)에 제공된다. 상기 범용 레지스터(21a)의 내용이 연산 대상의 어드레스로서 사용되고, 하드웨어를 사용한 상기 표시 플래그(61)의 식별 결과에 기초하여 상기 범용 레지스터(21a)에 연결된 선택기(7)은 지표 부착 명령을 실행한다. 상기 명령 코드(6)에 포함된 어드레스 상에 소정의 연산을 수행하는 종래의 프로그래머블 컨트롤러와는 달리, 본 실시예의 프로그래머블 컨트롤러는 여러가지 전처리 명령을 필요로하지 않으며, 따라서 필요한 프로그램 메모리의 크기가 작다. 따라서, 지표 부착 명령의 연산 실행을 위한 처리 속도를 향상시킬 수 있다.
상기 명령 코드(6)은 연산 대상 명령에 의해 어드레싱되는 시퀀스 명령이고, 이에 의해 비트 처리 명령의 여러가지 전처리 명령이 불필요하다. 지표 부착된 접점 또는 코일 등을 포함하는 논리 조건에 관한 설명을 갖는 시퀀스 명령이 처리 속도를 향상시킴에 의해 실행될 수 있다.
선택기(7)이 어드레스 계산부(3)에 제공된다. 따라서, 표시 플래그(61)의 식별 결과로서 명령 코드(6)이 지표 부착 명령을 포함하고 있는 것으로 판명되는 경우에는, 상기 범용 레지스터(21a)의 내용이 어드레스로서 출력된다. 이외의 경우에는, 명령 코드(6)의 즉치가 어드레스로서 출력된다. 간단한 구조로써 지표 부착 어드레스 출력을 실행하는 것이 가능하다.
범용 레지스터(21a), 어드레스 계산부(3) 및 메모리 액세스부(4)를 포함하는 프로세서(A)의 구조와 한 비트로 구성된 표시 플래그(61)를 갖는 명령 코드(6)의 구조, 그리고 비트 명령의 내용은 본 제8 실시예에 개시된 것에 한정되지 않는다.
[제9 실시예]
도66 내지 도68을 참조하여 본 발명의 제9 실시예에 따른 프로그래머블 컨트롤러를 설명하고자 한다. 전술한 제8 실시예에서의 프로그래머블 컨트롤러와 상이한 본 프로그래머블 컨트롤러의 특징을 설명하고자 한다. 실질적으로 동일한 특징을 갖는 부재는 동일한 참조 번호로 표시하였다.
참조 부호(B)로 나타낸 프로세서는 5개의 부분을 갖는다. 명령 코드(6)은 연산 대상을 설정 데이타로 하여 타이머/카운터 명령의 연산을 수행한다. 메모리 액세스부에 제공된 선택기(7)은 외부 메모리(41)의 판독 데이타 경로에 연결되어, 외부 메모리로부터 데이타를 판독한다.
본 프로세서(B)의 동작을 설명하고자 한다. 명령 코드(6)가 입력되었을 때, 상기 명령이 지표 부착되어 있지 않은 경우에는, 상기 명령 코드(6)에 포함된 타이머/카운터 숫자에 의해 하나로 결정된 설정 어드레스가 어드레스 계산부(3)를 통해서 상기 외부 메모리(41)로 출력된다. 상기 외부 메모리(41)로부터 출력된 데이타는 상기 선택기(7)을 통해서 처리부의 ALU(51)로 입력된다. 상기 ALU(51)은 상기 데이타를 설정 데이타로서 처리한다.
상기 명령이 지표 부착된 경우에는, 도67에 도시된 바와 같이, 명령 코드(6)에 표시 플래그(61)이 제공되어 상기 명령이 지표 부착 명령인지의 여부를 표시한다. 상기 표시 플래그(61)의 플래그 비트는 상기 선택기(7)에 입력된다.
선택기(7)은 본 프로세서(B)에 제공된 범용 레지스터(21a)에 연결된다. 상기 범용 레지스터(21a) 중에서 어떤 레지스터가 상기 선택기(7)에 연결될 것인지는 하드웨어로 미리 결정되어 있다. 본 실시예에서는, r2 레지스터가 선택기(7)에 연결되어 있다. 상기 명령 코드(6)에 포함된 타이머/카운터 숫자로부터 하나로 결정된 어드레스를 사용하여 상기 외부 메모리(41)로부터 판독된 데이타와 상기 r2 레지스터의 데이타가 상기 선택기(7)로 입력된다.
지표 부착 명령이 명령 코드(6)에 포함되어 있다고 표시 플래그(61)이 표시하는 경우에는, 상기 선택기(7)은 r2 레지스터 또는 외부 메모리(41)로부터 판독된 데이타를 출력한다. 제9 실시예의 프로그래머블 컨트롤러의 이후의 연산은 종래의 타이머/카운터 명령의 연산과 동일하다.
도68에 도시된 플로우 차트를 참조하여, 하드웨어를 사용하여 타이머/카운터 명령의 설정치를 지표 부착하기 위한 명령 실행의 시퀀스를 설명하고자 한다. 먼저, 단계(11)에서 인덱스 레지스터의 데이타(IX)가 판독되고, 상기 판독된 데이타가 레지스터군(21)에 배치된 범용 레지스터(21a)의 r1 레지스터에 입력된다. 단계(12)에서, r1 레지스터의 데이타와 상기 명령 코드(6)에 포함된 즉치를 서로 가산하여, 그 가산 결과를 상기 범용 레지스터(21a)의 r3 레지스터에 입력한다. 상기 r3 레지스터에 의해 어드레싱된 워드 데이타, 즉 설정 데이타는 단계(13)에서 판독되고, 상기 판독된 데이타는 r2 레지스터에 입력된다. 이어서, 단계(14)에서 연산 대상인 설정 데이타에 대한 연산인 TMRn 명령이 실행된다.
이러한 방법으로, 단지 인덱스 레지스터로부터 데이타를 판독하고 r2 레지스터에 설정치 데이타를 설정하는 것에 의해서, 지표 부착 명령에 의해 변경된 타이머/카운터 명령을 실행한다.
제9 실시예에 따른 프로그래머블 컨트롤러에 있어서, 계산 대상을 간접적으로 특정하기 위해 상기 지표 부착 명령이 존재하는지의 여부를 표시하는 표시 플래그(61)이 상기 명령 코드(6)에 제공된다. 상기 범용 레지스터(21a)의 내용이 연산 대상의 어드레스로서 사용되고, 하드웨어를 사용한 상기 표시 플래그(61)의 식별 결과에 기초하여 상기 범용 레지스터(21a)에 연결된 선택기(7)은 지표 부착 명령을 실행한다. 상기 명령 코드(6)에 포함된 어드레스 상에 소정의 연산을 수행하는 종래의 프로그래머블 컨트롤러와는 달리, 본 실시예의 프로그래머블 컨트롤러는 여러가지 전처리 명령을 필요로하지 않으며, 따라서 필요한 프로그램 메모리의 크기가 작다. 따라서, 지표 부착 명령의 연산 실행을 위한 처리 속도를 향상시킬 수 있다.
상기 명령 코드(6)은 연산 대상을 설정 데이타로서 사용하는 타이머/카운터 명령이고, 이에 의해 비트 처리 명령의 여러가지 전처리 명령이 불필요하다. 그 결과로, 처리 속도가 증가됨에 의해, 지표 부착된 타이머/카운터와 같은 제어 조건에 관한 설명을 포함하는 타이머/카운터 명령이 실행 가능하다.
선택기(7)이 외부 메모리로부터 데이타를 판독하기 위한 데이타 경로에 제공된다. 따라서, 표시 플래그(61)의 식별 결과로서 상기 명령 코드(6)이 지표 부착 명령을 포함하고 있는 것으로 판명되는 경우에는, 상기 범용 레지스터(21a)의 내용이 어드레스로서 출력된다. 이외의 경우에는, 상기 외부 메모리(41)로부터 판독된 데이타가 출력된다. 간단한 구조로써 지표 부착된 카운터/타이머 명령을 실행하는 것이 가능하다.
범용 레지스터(21a), 어드레스 계산부(3) 및 메모리 액세스부(4)를 포함하는 프로세서(B)의 구조와 한 비트로 구성된 표시 플래그(61)를 갖는 명령 코드(6)의 구조, 그리고 상기 명령의 내용은 본 제9 실시예에 개시된 것에 한정되지 않는다.
특히 지정된 하드웨어의 구조, 명령 세트, 명령 구조, 그리고 연산 코드부의 구성은 본 실시예에 개시된 것에 한정되지 않는다.
본 발명의 프로그래머블 컨트롤러는 단일의 명령 구조와 상기 명령 구조에 맞도록 특별히 설계된 하드웨어를 구비한다. 상기 특별히 설계된 하드웨어와 그 제어는 간단하다. 그 결과로, 상기 특별히 설계된 하드웨어(프로세서)의 복잡성과, 상기 하드웨어(프로세서)의 명령 실행 스테이지를 다중 스테이지로 형성하는 데에 따른 그 제어의 복잡성이 완화된다. 명령 실행 스테이지를 다중 스테이지로 형성하는 것이 용이하기 때문에, 전체 프로그래머블 컨트롤러의 처리 속도가 개선된다.
본 발명의 프로그래머블 컨트롤러는 각 명령 실행 스테이지의 실행 스펙 정보를 본 프로그래머블 컨트롤러의 기본 처리 연산들 중의 하나인 비트 연산 명령의 결과에 기초한 소정의 값으로 변화시킬 수 있도록 설계되었다. 그 결과로, 이후의 응용 명령을 취소하기 위한 (즉, 실행 방지를 위한) 제어 연산이, 파이프라인 처리를 훼손하지 않고서, 프로그래머블 컨트롤러에 특유한 비트 연산 처리에 의해 실행될 수 있다.
본 발명의 프로그래머블 컨트롤러에서는, 각 클록에 대하여 파이프라인 레지스터(ID/EX)의 EX, M, 및 WB 스테이지를 이후의 스테이지로 쉬프트함으로써 명령의 실행 스펙 정보를 전달할 수 있다. 간단하지만 효과적인 실행 제어를 구현할 수 있다.
본 발명의 프로그래머블 컨트롤러는 단일 처리를 수행하도록, 즉 각 스테이지에서 처리된 데이타를 그 스테이지에서의 처리를 완료된 다음에 그 이후의 스테이지에서 파이프라인 레지스터에 보유하도록 배열되어 있다. 특별히 설계된 하드웨어의 데이타 버스를 간단하고 효과적으로 만들 수 있다.
본 발명의 프로그래머블 컨트롤러는 범용 레지스터가 판독되는 결과로서 발생되는 파이프라인 해저드를 해결하기 위해서 NOP 명령을 삽입할 필요가 없다. 그 결과로, NOP 명령을 삽입하도록 되어 있는 프로그래머블 컨트롤러와 비교할 때 프로그램의 크기를 감소시키고 실행 속도를 증가시킬 수 있다.
본 발명의 프로그래머블 컨트롤러는 LOAD 명령에 의해 갱신되는 범용 레지스터가 상기 LOAD 명령 다음의 명령에 의해 판독되는 것에 의해 발생되는 파이프라인 해저드를 해결하기 위해서 NOP 명령을 삽입할 필요가 없다. 그 결과로, 프로그램의 크기를 감소시킬 수 있다.
본 발명의 프로그래머블 컨트롤러는 LOAD 명령의 다음 명령이 상기 LOAD 명령에 의해 갱신되는 상기 범용 레지스터를 판독하기 위한 STORE 명령일 때 상기 STORE 명령을 보류할 필요가 없다. 따라서, 프로그래머블 컨트롤러의 처리 속도를 향상시킬 수 있다.
본 발명의 프로그래머블 컨트롤러는 LOAD 명령의 하나 다음의 명령이 상기 LOAD 명령에 의해 갱신될 범용 레지스터를 판독하기 위한 STORE 명령일 때 상기 STORE 명령을 보류할 필요가 없다. 따라서, 프로그래머블 컨트롤러의 처리 속도를 향상시킬 수 있다.
본 발명의 프로그래머블 컨트롤러는 분기 조건이 만족될 때 무의미한 명령이 실행되는 파이프라인 해저드 문제를 해결하기 위하여 NOP 명령을 삽입할 필요가 없다. 따라서, 프로그램의 크기를 작게 할 수 있다.
5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 따르면, 프로그램 카운터 작동용 클록 신호의 변화 타이밍과 명령 레지스터 작동용 클록 신호의 변화 타이밍 사이의 시간 간격이 작다. 명령 메모리에 비해 필요이상으로 빠른 메모리가 명령 메모리에 사용되어야 하는 경우에도, 명령 메모리의 어드레스 결정 시점과 상기 명령 메모리로부터의 판독 시점 사이의 시간을 확대할 수 있다. 따라서, 저속의 메모리를 사용할 수 있고, 이로써 비용 저감에 기여한다.
본 발명에 따른 프로그래머블 컨트롤러는 프로그램 카운터를 갱신하기 위한 분기 명령을 정확히 실행할 수 있다.
본 발명에 따른 프로그래머블 컨트롤러는 프로그램 카운터를 갱신하기 위한 미분 명령을 정확히 실행할 수 있다.
본 발명에 따른 프로그래머블 컨트롤러는 기동 즉시 명령을 정확히 페치할 수 있다.
본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 따르면, 한 파이프라인 스테이지의 시간 주기 내에 완료하기 어려운 연산을 갖는 명령의 경우에도, 필요한 시간동안 파이프라인의 연산을 보류함으로써 상기 명령을 용이하게 실행할 수 있다.
본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 따르면, 한 파이프라인 스테이지의 시간 주기 내에 완료하기 어려운 연산을 갖는 명령의 실행 조건이 만족되지 않는 경우에도, 파이프라인이 불필요하게 오랫동안 보류되는 것을 막을 수 있다.
본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 따르면, 파이프라인 구조에 따라 연산 블럭을 재설계할 필요가 없고, 이전의 설계 자원을 효과적으로 사용할 수 있다.
본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 따르면, 보통의 파이프라인 연산에서는 발생하지 않는 복수의 재기록 연산이 필요한 명령을 실행하는 것이 가능하다.
본 발명의 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 따르면, 파이프라인 레지스터에서 연산 인수를 보유하는 것이 가능하고, 이로써 연산 블럭의 크기를 감소시킬 수 있다.
본 발명에 따르면, 명령의 한 비트가 갱신되거나 명령 실행 시에 메모리에 대한 복수 워드의 판독 및 기록이 필요한 비트 처리 명령을 호출하는 명령이 실행되는 경우에, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러를 사용함으로써, 본 발명의 어드레스 계산 방법과 메모리 액세스 방법을 사용하여 파이프라인 사이클을 소모하는 일 없이 상기 명령을 효과적으로 실행할 수 있다. 더욱이, 본 발명의 제어 방법을 채용함으로써, 명령 메모리에 NOP 명령을 삽입하지 않고 비트 처리 명령 이후의 명령들을 계속 실행할 수 있다. 3단 파이프라인 구조를 갖는 종래의 프로그래머블 컨트롤러보다 고속 연산 처리가 가능한 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에서, 상기 메모리를 채용함으로써 종래의 미분 명령과 동일한 미분 명령을 실행할 수 있다. 그 결과로, 어드레스 버스를 위한 신호 라인의 수를 감소시킬 수 있다. 미분 명령에 사용하기 위한 메모리 재기록 어드레스를 전술한 바와 같이 사용한다면, 미분 명령을 실행하는 제어 연산을 대단히 용이하게 수행할 수 있다. 전술한 제어 방법을 사용하는 결과, 명령 메모리에 NOP 명령을 삽입하지 않고 미분 명령을 상기 명령 메모리에 재기록함으로써, 프로그래머블 컨트롤러가 오동작하는 것도 방지할 수 있다. 더욱이, 전술한 제어 방법을 사용하는 결과, 상기 처리들을 수행하더라도 명령을 일관되게 실행할 수 있다.
본 발명에 따르면, 5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러가 복수의 플래그를 포함하는 명령 실행 조건을 판단하고, 명령 실행 스테이지에서 상기 명령 실행 조건이 만족된 경우에만 특정의 명령을 실행한다. 그 결과, 명령을 실행할 것인지 아니면 취소할 것인지에 관한 판단을 제어할 수 있다.
명령 실행 조건을 구성하거나 산술 연산 명령과 같은 명령을 구성하는 플래그를 갱신하기 위한 플래그 세팅 명령에 의해 명령 실행 조건이 갱신된 후, 후속 명령이 실행된다. 그 결과, 명령을 실행할 것인지 아니면 취소할 것인지에 관한 판단을 일관되게 제어할 수 있다.
비트 처리 명령의 파이프라인 스테이지의 마지막 부분에 의해 갱신되는 비트 누산기가 명령 실행 조건을 구성하는 플래그에 포함되는 경우에는, 명령 실행 조건에 따라 실행 또는 취소되는 명령 실행을 명령 실행 조건을 판단할 때까지 보류함으로써, 명령 메모리에 NOP 명령을 삽입하지 않고서 명령을 실행할 것인지 아니면 취소할 것인지에 관한 판단을 일관되게 제어할 수 있다.
5단 파이프라인 구조를 갖는 프로그래머블 컨트롤러에 따르면, 컨트롤러가 보류된 후 여러 정지 조건과 프로그래머블 컨트롤러의 상태에 관한 스펙이 만족되어야 하는 경우에, 기동/정지 제어용 스테이지 머신을 사용하여 프로그래머블 컨트롤러의 기동/정지 연산을 제어함으로써 복잡한 요구 조건에 대처할 수 있다. 전술한 바와 같이, 명령이 페치될 때 얻는 프로그램 카운터의 값은 파이프라인 레지스터를 통해 전달되고, 프로그래머블 컨트롤러가 보류 모드일 때의 프로그램 카운터의 값은 상기 전달된 값에 기초하여 설정된다. 그 결과로, 용이하게 소정의 스펙에 따른 보류 연산을 실행할 수 있다. 명령을 취소할 수 있는 상기 구조를 채용한 결과, 보류 연산을 개시한 후 무의미한 명령이 실행되는 것을 방지할 수 있다.
본 발명의 프로그래머블 컨트롤러에서, 연산 대상을 간접적으로 특정하는 지표 부착 명령이 존재하는지의 여부를 나타내는 표시 플래그가 명령 코드에 제공된다. 범용 레지스터에 연결된 선택기는 상기 표시 플래그를 인식한 결과에 기초하여 상기 범용 레지스터의 내용을 연산 대상으로 사용하여 하드웨어로 상기 지표 부착 명령을 실행한다. 그 결과로, 여러 전처리 명령이 불필요하게 되고 프로그램의 크기를 줄일 수 있게 되어, 지표 부착 명령에 관한 연산의 수행 속도를 향상시킬 수 있다.
프로그래머블 컨트롤러에 의해 얻을 수 있는 전술한 효과에 더하여, 본 프로그래머블 컨트롤러는 연산 대상에 의해 어드레싱되는 시퀀스 명령인 명령 코드를 포함한다. 명령 코드에 포함된 어드레스 상에서 연산을 수행하는 종래의 프로그래머블 컨트롤러와는 반대로, 본 발명의 프로그래머블 컨트롤러에서는 처리 속도를 향상시킴으로써, 지표 부착된 접점 또는 코일 등의 논리 조건을 포함하여 설명을 구비한 시퀀스 명령의 실행이 가능하다.
프로그래머블 컨트롤러에 의해 얻을 수 있는 전술한 효과에 더하여, 본 프로그래머블 컨트롤러는 어드레스 계산부에 선택기를 포함한다. 표시 플래그의 인식 결과로부터 명령 코드가 지표 부착 명령을 포함하는 것으로 드러나는 경우에는, 범용 레지스터의 내용이 어드레스로서 출력된다. 그렇지 않은 경우에는, 명령 코드에 포함된 즉치가 어드레스로서 출력되고, 간단한 구조로 지표 부착된 시퀀스 명령을 실행하는 것이 가능하다.
프로그래머블 컨트롤러에 의해 얻을 수 있는 전술한 효과에 더하여, 본 프로그래머블 컨트롤러는 타이머/카운터 명령인 명령 코드를 갖는다. 상기 타이머/카운터 명령은 연산 대상으로서 설정치를 갖는다. 명령 코드에 포함된 타이머/카운터 숫자에 의해 하나로 정해진 설정치를 계산해내는 종래의 프로그래머블 컨트롤러와는 달리, 본 발명의 프로그래머블 컨트롤러에서는 여러 전처리 명령을 피할 수 있다. 처리 속도를 향상시킴으로써, 지표 부착된 타이머/카운터 등 제어 조건을 포함하는 설명을 구비한 타이머/카운터 명령의 실행이 가능하다.
프로그래머블 컨트롤러에 의해 얻을 수 있는 전술한 효과에 더하여, 본 프로그래머블 컨트롤러는 외부 메모리로부터 데이타를 판독하는 데이타 경로에 설치된 선택기를 포함한다. 표시 플래그의 식별에 의해 명령 코드가 지표 부착 명령을 포함하는 것으로 드러난 경우, 상기 선택기는 범용 레지스터의 내용을 출력한다. 그렇지 않은 경우에는, 상기 선택기는 상기 외부 메모리로부터 판독된 데이타를 출력한다. 간단한 구성으로 지표 부착된 타이머/카운터 명령을 실행하는 것이 가능하다.

Claims (35)

  1. 명령 메모리로부터 명령을 페칭하기 위하여 명령 페칭 연산을 실행하기 위한 제1 스테이지; 상기 명령을 디코딩하고 범용 레지스터로부터 소정의 값을 페칭하기 위한 제2 스테이지; 산술 또는 논리 명령, 데이타 어드레스 계산, 또는 타겟 분기선의 유효 어드레스의 계산을 실행하기 위한 제3 스테이지; 데이타 메모리에 액세스하기 위한 제4 스테이지; 및 비트 연산, 상기 범용 레지스터에 대한 기록 연산, 및 분기 연산 중의 어느 하나를 실행하기 위한 제5 스테이지를 포함하는 명령 실행 스테이지를 포함하고, 기본 비트 처리 연산 및 복수의 비트를 포함하는 응용 처리를 실행하며, 상기 제1 스테이지 내지 제5 스테이지는 파이프라인 방식으로 실행되고, 상기 각각의 명령 실행 스테이지의 실행 스펙 정보는 비트 처리 연산의 결과에 기초하여 선정된 값으로 변경되며, 상기 비트 처리 명령에 후속하는 명령은 비트 처리 명령의 결과에 기초하여 무효 및 유효 중의 어느 하나로 되는 프로그래머블 컨트롤러.
  2. 제1항에 있어서, 로드 명령에 후속하는 명령이 상기 로드 명령에 따라 획득되는 데이타를 필요로 하는 경우, 상기 범용 레지스터에 상기 데이타가 기록될 때까지 상기 로드 명령에 후속하는 명령의 실행을 보류하는 프로그래머블 컨트롤러.
  3. 제2항에 있어서, 상기 로드 명령에 후속하는 명령이 저장 명령인 경우, 상기 저장 명령이 필요로 하는 값을 저장하고 있는 상기 범용 레지스터가 상기 로드 명령에 의해 갱신되는 때에는, 상기 저장 명령의 상기 제3 스테이지 및 제4 스테이지의 어느 하나의 스테이지가 상기 로드 명령에 따라 제5 스테이지에서 상기 범용 레지스터에 저장되는 상기 데이타를 취하고 상기 데이타 메모리에 기록하는 프로그래머블 컨트롤러.
  4. 제1항에 있어서, 상기 제2 스테이지에 제공되는 수단으로서, 상기 범용 레지스터의 출력, 상기 제3 스테이지의 ALU의 출력, 및 상기 제4 스테이지로 공급되는 상기 ALU의 출력 중에서 상기 제3 스테이지의 상기 ALU의 어느 한 입력을 선택하기 위한 선택 수단을 더 포함하는 프로그래머블 컨트롤러.
  5. 제1항에 있어서, 상기 제3 스테이지에 제공되는 수단으로서, 상기 제2 스테이지로부터 ALU의 어느 한 입력으로 출력되는 값, 상기 제4 스테이지로 공급되는 상기 ALU의 출력, 및 상기 제5 스테이지로 공급되는 상기 ALU의 출력 중에서 상기 제3 스테이지의 상기 ALU의 어느 한 입력을 선택하기 위한 선택 수단을 더 포함하는 프로그래머블 컨트롤러.
  6. 제1항에 있어서, 상기 제3 스테이지는 분기 조건의 결정을 실행하며, 상기 제5 스테이지는 분기 연산을 실행하며, 상기 분기 조건이 만족되는 경우에는 상기 파이프라인에 이미 포함된 무효 명령의 실행이 금지되는 프로그래머블 컨트롤러.
  7. 제1항에 있어서, 하나의 파이프라인 스테이지의 시간 이내에 완료될 수 없는 연산을 포함하는 명령을 실행하기 위한 연산 블럭을 더 포함하며, 상기 하나의 파이프라인 스테이지의 시간 이내에 완료될 수 없는 연산을 포함하는 명령이 실행되는 경우, 상기 명령의 연산을 완료하는데 필요한 시간 동안만 프로그램 카운터의 증가를 인터럽트시킴과 더불어 레지스터에 값을 다시 기록하기 위한 신호 및 데이타 메모리에 데이타를 기록하기 위한 신호를 포함하는 제어 신호들을 무효화시킴으로써, 상기 파이프라인을 보류시켜 상기 명령을 실행하는 프로그래머블 컨트롤러.
  8. 제7항에 있어서, 요구되는 연산 시간이 불명확한 명령이 실행되는 경우, 상기 프로그램 카운터의 증가를 인터럽트시킴과 더불어, 레지스터에 값을 다시 기록하기 위한 신호 또는 데이타 메모리에 데이타를 기록하기 위한 신호를 포함하는 제어 신호들을 무효화시킴으로써, 상기 명령을 실행하는 연산 블럭으로부터 연산 완료 신호가 수신될 때까지 상기 파이프라인을 보류시켜 상기 명령을 실행하는 프로그래머블 컨트롤러.
  9. 제7항에 있어서, 복수의 상기 명령이 실행되며, 상기 프로그램 카운터의 증가를 인터럽트시킴과 더불어, 레지스터에 값을 다시 기록하기 위한 신호 또는 데이타 메모리에 데이타를 기록하기 위한 신호를 포함하는 제어 신호들을 무효화시킴으로써, 상기 명령을 실행하는 연산 블럭으로부터 연산 완료 신호가 수신될 때가지 상기 파이프라인을 보류시켜 상기 명령을 실행하는 프로그래머블 컨트롤러.
  10. 제8항에 있어서, 복수의 상기 명령이 실행되며, 상기 프로그램 카운터의 증가를 인터럽트시킴과 더불어, 레지스터에 값을 다시 기록하기 위한 신호 또는 데이타 메모리에 데이타를 기록하기 위한 신호를 포함하는 제어 신호들을 무효화시킴으로써, 상기 명령을 실행하는 연산 블럭으로부터 연산 완료 신호가 수신될 때까지 상기 파이프라인을 보류시켜 상기 명령을 실행하는 프로그래머블 컨트롤러.
  11. 제7항 내지 제10항 중의 어느 한 항에 있어서, 상기 연산 블럭은 복수의 유형을 가지는 데이타의 길이의 연산에 대처할 수 있도록 구성되며, 또한 상기 연산 블럭은 선정된 비트 위치에 설정된 값을 가지는 입력을 수신하고 필요에 따라 미사용 비트 위치의 값을 소거시키도록 구성되는 프로그래머블 컨트롤러.
  12. 제7항에 있어서, 상기 하나의 파이프라인 스테이지의 시간 이내에 실행될 수 없는 연산을 포함하는 명령이 실행되는 경우, 상기 명령이 연산 결과를 복수의 범용 레지스터에 저장하는 때에는, 상기 연산 결과를 상기 레지스터에 다시 기록해 넣는 연산들이 모두 완료될 때까지 선정된 정보가 유지되는 프로그래머블 컨트롤러.
  13. 제7항에 있어서, 상기 하나의 파이프라인 스테이지의 시간 이내에 실행될 수 없는 연산을 포함하는 명령이 실행되는 경우에는, 상기 명령을 디코딩하는 스테이지와 상기 명령을 실행하기 위한 스테이지 사이에 제공되는 파이프라인 레지스터에서 상기 명령의 인수와 제어 신호 중의 어느 하나가 필요한 시간 동안 유지되는 프로그래머블 컨트롤러.
  14. 제1항에 있어서, 로드 명령 및 저장 명령을 포함하는 메모리 액세스 명령 외에 상기 비트 처리 명령을 특별하게 사용하기 위한 메모리 어드레스 계산 블럭을 더 포함하는 프로그래머블 컨트롤러.
  15. 제14항에 있어서, 상기 비트 처리 명령과 함께 사용하도록 특별하게 설계된 상기 메모리 어드레스 계산 블럭은 복수의 파이프라인 사이클에 대한 상기 데이타 메모리의 어드레스를 계산하고 메모리 액세스 요청 신호를 발생시킴으로써, 상기 복수의 인접한 파이프라인 스테이지들의 메모리에 대한 액세스를 수행하는 프로그래머블 컨트롤러.
  16. 제1항에 있어서, 상기 비트 처리 명령을 특별하게 실행하기 위한 회로 블럭을 더 포함하며, 상기 회로 블럭은 데이타를 메모리에 기록하거나 메모리로부터 데이타를 판독하기 위하여 메모리 기록 요청 신호와 메모리 기록 데이타 중의 적어도 어느 하나와 메모리 어드레스를 출력하는 프로그래머블 컨트롤러.
  17. 제14항 내지 제16항 중의 어느 한 항에 있어서, 이전의 명령이 상기 비트 처리 명령임을 나타내는 제어 신호는 파이프라인 레지스터에서 제공되며, 상기 비트 처리 명령에 후속하는 명령의 실행을 보류할 필요가 있는 경우 상기 프로그래머블 컨트롤러는 프로그램 카운터의 증가를 보류시키며, 상기 프로그램 카운터의 증가를 보류시키는 것만으로 상기 명령의 실행을 보류시킬 수 없는 경우에도 상기 명령의 디코딩 결과를 다시 재기록함으로써 상기 비트 처리 명령에 후속하는 상기 명령을 보류시키는 프로그래머블 컨트롤러.
  18. 제17항에 있어서, 상기 회로 블럭이 상기 제어 신호를 출력하는 프로그래머블 컨트롤러.
  19. 제1항에 있어서, 입력이 변화할 때에만 실행되는 미분 명령을 특별하게 사용하기 위한 데이타 메모리를 더 포함하며, 그 메모리의 어드레스 버스는 상기 데이타 메모리와 상기 프로그래머블 컨트롤러의 상기 명령 메모리 사이에서 공유되는 프로그래머블 컨트롤러.
  20. 제19항에 있어서, 상기 비트 처리 명령을 특별하게 실행하기 위한 회로 블럭을 더 포함하며, 상기 명령이 페칭될 때의 상기 명령 메모리의 어드레스는 파이프라인 레지스터로 인입되며, 상기 파이프라인 레지스터를 통한 상기 비트 처리 명령과 함께 사용하도록 특별하게 설계된 상기 회로 블럭으로 상기 페칭된 어드레스가 순차적으로 전달되며, 상기 미분 명령의 결과가 상기 데이타 메모리로 다시 기록되는 경우, 상기 명령 메모리의 상기 전달된 어드레스는 상기 메모리로 데이타를 기입하는데 사용하기 위한 어드레스로서 사용되는 프로그래머블 컨트롤러.
  21. 제19항 또는 제20항에 있어서, 상기 미분 명령의 결과가 상기 데이타 메모리로 다시 기록되는 경우, 상기 프로그램 카운터의 증가 중의 어느 하나는 상기 명령의 페칭을 보장하기 위하여 보류되며, 상기 명령 메모리로부터 획득된 상기 명령은 후속되는 연산에 어떠한 영향도 미치지 않는 명령으로 재기록되는 프로그래머블 컨트롤러.
  22. 제1항에 있어서, 상기 비트 처리 명령을 특별하게 사용하기 위한 메모리 어드레스 계산 블럭, 상기 비트 처리 명령을 특별하게 실행하기 위한 회로 블럭, 및 입력이 변화하는 경우에만 실행되는 미분 명령을 특별하게 사용하기 위한 데이타 메모리를 더 포함하며, 상기 비트 처리 명령 및 상기 미분 명령의 경우 필요에 따라 명령을 보류시킴으로써 상기 명령의 페칭을 보장하는 프로그래머블 컨트롤러.
  23. 제1항에 있어서, 지표 부착 명령이 존재하는 경우, 상기 비트 처리 명령의 명령 코드는 상기 지표 부착 명령을 지시하는 플래그를 제공하며, 선정된 값은 범용 레지스터로부터 판독되며, 비트 처리를 실행하기 위하여 데이타 메모리로부터 데이타를 판독하기 위한 어드레스로서 상기 비트 처리 명령의 상기 명령 코드의 순시값에 의해 제공되는 어드레스 대신에 상기 선정된 데이타를 사용하는 프로그래머블 컨트롤러.
  24. 제1항에 있어서, 프리셋 값 (preset value)이 지표 부착 명령에 의해 수정되는 경우, 상기 비트 처리 명령의 일부에 해당하는 타이머 또는 카운터 명령의 명령 코드가 상기 지표 부착 명령에 의해 수정된 상기 프리셋 값을 지시하는 플래그를 제공하며, 선정된 값은 범용 레지스터로부터 판독되며, 타이머 또는 카운터 명령을 실행하기 위한 프리셋 값으로서 상기 비트 처리 명령의 명령 코드가 제공하는 어드레스의 데이타 메모리로부터 판독된 프리셋 데이타 대신에 상기 선정된 데이타를 사용하는 프로그래머블 컨트롤러.
  25. 제1항에 있어서, 프로그램 카운터를 동작시키기 위한 클럭 신호보다 빠른 타이밍에서 변화하는 클럭 신호에 의해 동작되는 레지스터를 더 포함하며, 상기 프로그램 카운터의 증가를 보류시키기 위한 제어 신호의 값에 관계없이 상기 프로그램 카운터의 값에 1을 가산함으로써 얻어지는 값을 상기 레지스터로 래칭시키며, 명령을 페칭하기 위하여 상기 프로그램 카운터의 값 대신에 상기 레지스터의 값을 상기 명령 메모리의 어드레스로서 사용하며, 상기 프로그램 카운터의 증가를 보류시키기 위한 상기 제어 신호가 증가 연산을 보류시키기 위한 신호에 해당하는 경우, 상기 명령 메모리로부터 판독된 상기 값은 명령을 페칭하는 상기 명령 레지스터로 로딩되지 않으며, 상기 명령 레지스터의 값이 유지되는 프로그래머블 컨트롤러.
  26. 제25항에 있어서, 상기 분기 명령이 실행될 때 상기 분기 조건이 만족되는 경우, 상기 분기 명령의 실행 중에 계산된 타겟 분기선의 어드레스를 상기 명령 메모리의 어드레스로서 사용하여, 명령을 페칭할 수 있게 하는 프로그래머블 컨트롤러.
  27. 제25항에 있어서, 미분 명령이 실행될 때 계산된 상기 비트 메모리의 어드레스를 사용함으로써 비트 메모리가 재기록될 수 있는 프로그래머블 컨트롤러.
  28. 제25항에 있어서, 상기 프로그래머블 컨트롤러가 기동되는 경우, 상기 프로그래머블 컨트롤러가 기동되기 전에 외부로부터 설정된 상기 프로그램 카운터의 초기 값을 기초로 하여 상기 명령 메모리의 올바른 어드레스로부터 명령을 페칭할 수 있는 프로그래머블 컨트롤러.
  29. 제1항에 있어서, 명령이 페칭되는 경우, 프로그램 카운터의 값은 파이프라인 레지스터로 전달되며, 상기 파이프라인 레지스터를 통해 전달된 상기 프로그램 카운터의 값은 상기 프로그래머블 컨트롤러가 보류되는 때의 상기 프로그램 카운터의 값을 계산하기 위하여 사용되는 프로그래머블 컨트롤러.
  30. 제29항에 있어서, 기동/정지 제어 연산을 수행하기 위한 스테이트 머신을 더 포함하며, 상기 스테이트 머신은 상기 파이프라인 레지스터가 제공하는 상기 프로그램 카운터의 값을 판독하고, 상기 보류된 연산의 스펙에 따라 이전에 획득된 값을 기초로 하여 상기 프로그래머블 컨트롤러가 보류되는 때의 상기 프로그램 카운터의 값을 계산하며, 상기 프로그래머블 컨트롤러가 보류되기 전에 상기 프로그램 카운터에 상기 계산된 값을 기록하는 프로그래머블 컨트롤러.
  31. 제30항에 있어서, 상기 정지 조건이 만족되고 상기 보류 연산이 개시될 때, 상기 파이프라인으로 이미 도입된 상기 명령의 실행을 무효화시켜 무효 명령이 실행되지 못하도록 하는 프로그래머블 컨트롤러.
  32. 제1항에 있어서, 복수의 플래그 값을 포함하는 명령 실행 조건이 결정되며, 상기 제3 스테이지의 상기 명령 실행 조건이 만족될 때에만 특별한 명령이 실행되는 프로그래머블 컨트롤러.
  33. 제32항에 있어서, 상기 명령 실행 조건을 포함하는 플래그를 갱신시키기 위한 플래그 설정 명령은 완료되어 상기 플래그 설정 명령 직후의 명령에 대한 명령 실행 스테이지가 개시될 때 플래그를 갱신시키며, 상기 명령이 실행되는지 또는 무효화되는지에 대한 결정을 일관되게 제어하면서 상기 명령을 실행하는 프로그래머블 컨트롤러.
  34. 제32항에 있어서, 상기 명령 실행 조건을 포함하는 플래그를 갱신시키기 위한 여러가지 유형의 산술 연산 명령은 완료되어 상기 산술 연산 명령 직후의 명령에 대한 명령 실행 스테이지가 개시될 때 플래그를 갱신시키며, 상기 명령이 실행되는지 또는 무효화되는지에 대한 결정을 일관되게 제어하면서 상기 명령을 실행하는 프로그래머블 컨트롤러.
  35. 제32항에 있어서, 상기 명령 실행 조건은 제5 스테이지에서 비트 연산 처리를 수행하기 위한 상기 비트 처리 명령에 의해 갱신되는 플래그에 의하여 형성되고, 상기 파이프라인 레지스터에 제어 신호가 제공되며, 상기 제어 신호는 당시의 명령이 상기 명령 실행 조건에 관련된 상기 플래그를 갱신하기 위한 상기 비트 처리 명령임을 나타내며, 상기 명령 실행 조건이 결정되지 않은 동안 상기 명령의 실행은 상기 제어 신호를 기초로 하여 보류되고, 상기 명령이 실행되는지 또는 무효화되는지에 대한 결정을 일관되게 제어하면서 상기 명령을 실행하는 프로그래머블 컨트롤러.
KR1019960042852A 1995-09-29 1996-09-30 프로그래머블 컨트롤러 KR100260012B1 (ko)

Applications Claiming Priority (14)

Application Number Priority Date Filing Date Title
JP7253398A JPH0997180A (ja) 1995-09-29 1995-09-29 プログラマブルコントローラ
JP95-253398 1995-09-29
JP7282826A JP3063593B2 (ja) 1995-10-31 1995-10-31 プログラマブルコントローラ
JP28377795A JP3206394B2 (ja) 1995-10-31 1995-10-31 5段パイプライン構造のプログラマブルコントローラ
JP95-282826 1995-10-31
JP95-283777 1995-10-31
JP03848596A JP3185649B2 (ja) 1996-02-26 1996-02-26 プログラマブルコントローラ
JP96-038485 1996-02-26
JP96-038072 1996-02-26
JP03807296A JP3651099B2 (ja) 1996-02-26 1996-02-26 プログラマブルコントローラ
JP09128296A JP3481039B2 (ja) 1996-04-12 1996-04-12 プログラマブルコントローラ
JP96-091283 1996-04-12
JP09128396A JP3414579B2 (ja) 1996-04-12 1996-04-12 プログラマブルコントローラ
JP96-091282 1996-04-12

Publications (2)

Publication Number Publication Date
KR970016872A KR970016872A (ko) 1997-04-28
KR100260012B1 true KR100260012B1 (ko) 2000-06-15

Family

ID=27564464

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960042852A KR100260012B1 (ko) 1995-09-29 1996-09-30 프로그래머블 컨트롤러

Country Status (5)

Country Link
US (1) US5933651A (ko)
EP (1) EP0766155B1 (ko)
KR (1) KR100260012B1 (ko)
CN (1) CN1137421C (ko)
DE (1) DE69621091T2 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1115773A (ja) * 1997-06-24 1999-01-22 Matsushita Electron Corp 半導体集積回路、コンピュータシステム、データ処理装置及びデータ処理方法
WO2000073863A1 (en) * 1999-05-28 2000-12-07 Mitsubishi Denki Kabushiki Kaisha Programmable controller
US6490674B1 (en) * 2000-01-28 2002-12-03 Hewlett-Packard Company System and method for coalescing data utilized to detect data hazards
US7395411B2 (en) * 2005-03-14 2008-07-01 Sony Computer Entertainment Inc. Methods and apparatus for improving processing performance by controlling latch points
CN1333334C (zh) * 2005-08-15 2007-08-22 中国航天时代电子公司第七七一研究所 微处理器的整数单元中五级容错流水结构的实现方法
US8099448B2 (en) 2005-11-02 2012-01-17 Qualcomm Incorporated Arithmetic logic and shifting device for use in a processor
US8429384B2 (en) * 2006-07-11 2013-04-23 Harman International Industries, Incorporated Interleaved hardware multithreading processor architecture
CN101526896B (zh) * 2009-01-22 2011-11-23 杭州中天微系统有限公司 嵌入式处理器的加载/存储单元
JP5473817B2 (ja) * 2010-07-23 2014-04-16 三菱電機株式会社 プログラマブルコントローラおよびバス変換器
WO2012066683A1 (ja) * 2010-11-19 2012-05-24 三菱電機株式会社 システム構築支援ツールおよびシステム構築支援装置
US8612726B2 (en) * 2010-12-07 2013-12-17 King Fahd University Of Petroleum And Minerals Multi-cycle programmable processor with FSM implemented controller selectively altering functional units datapaths based on instruction type
JP5480793B2 (ja) * 2010-12-10 2014-04-23 株式会社日立製作所 プログラマブルコントローラ
CN103677965B (zh) * 2014-01-03 2017-03-22 北京神舟航天软件技术有限公司 一种全数字快速仿真方法
JP2018120449A (ja) * 2017-01-26 2018-08-02 ソニーセミコンダクタソリューションズ株式会社 演算処理装置および情報処理システム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4270184A (en) * 1978-03-16 1981-05-26 Tokyo Shibaura Denki Kabushiki Kaisha Microprocessor-based programmable logic controller
US4307447A (en) * 1979-06-19 1981-12-22 Gould Inc. Programmable controller
US4521851A (en) * 1982-10-13 1985-06-04 Honeywell Information Systems Inc. Central processor
DE3302929A1 (de) * 1983-01-28 1984-08-02 Siemens AG, 1000 Berlin und 8000 München Speicherprogrammierbare steuerung
US4870614A (en) * 1984-08-02 1989-09-26 Quatse Jesse T Programmable controller ("PC") with co-processing architecture
JPH081599B2 (ja) * 1988-02-24 1996-01-10 三菱電機株式会社 データ処理装置
US4985825A (en) * 1989-02-03 1991-01-15 Digital Equipment Corporation System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer
JP2834837B2 (ja) * 1990-03-30 1998-12-14 松下電工株式会社 プログラマブルコントローラ
CA2045756C (en) * 1990-06-29 1996-08-20 Gregg Bouchard Combined queue for invalidates and return data in multiprocessor system
US5333284A (en) * 1990-09-10 1994-07-26 Honeywell, Inc. Repeated ALU in pipelined processor design
JP2682232B2 (ja) * 1990-11-21 1997-11-26 松下電器産業株式会社 浮動小数点演算処理装置
JP2874351B2 (ja) * 1991-01-23 1999-03-24 日本電気株式会社 並列パイプライン命令処理装置
JP2848060B2 (ja) * 1991-10-24 1999-01-20 株式会社日立製作所 プログラマブルコントローラおよびシーケンス制御方法
JP3369204B2 (ja) * 1991-10-25 2003-01-20 株式会社東芝 プログラマブルコントローラ
WO1994009416A1 (en) * 1992-10-19 1994-04-28 Siemens Industrial Automation, Inc. High speed programmable logic controller
EP0649084A1 (en) * 1993-10-18 1995-04-19 Cyrix Corporation Microprocessor branch processing
EP0661625B1 (en) * 1994-01-03 1999-09-08 Intel Corporation Method and apparatus for implementing a four stage branch resolution system in a computer processor
JP3000857B2 (ja) * 1994-08-31 2000-01-17 松下電工株式会社 プログラマブルコントローラ

Also Published As

Publication number Publication date
CN1137421C (zh) 2004-02-04
EP0766155A1 (en) 1997-04-02
CN1153933A (zh) 1997-07-09
DE69621091T2 (de) 2002-12-19
DE69621091D1 (de) 2002-06-13
KR970016872A (ko) 1997-04-28
US5933651A (en) 1999-08-03
EP0766155B1 (en) 2002-05-08

Similar Documents

Publication Publication Date Title
KR100260012B1 (ko) 프로그래머블 컨트롤러
EP0768602B1 (en) Variable word length VLIW-instruction processor
US5584031A (en) System and method for executing a low power delay instruction
EP0855058B1 (en) Programmable branch prediction system and method for computer systems
US5727227A (en) Interrupt coprocessor configured to process interrupts in a computer system
JP3881763B2 (ja) データ処理装置
CN101373427A (zh) 程序执行控制装置
US5313644A (en) System having status update controller for determining which one of parallel operation results of execution units is allowed to set conditions of shared processor status word
US5887129A (en) Asynchronous data processing apparatus
JP2006502488A (ja) 省電力vliwプロセッサ
US5497496A (en) Superscalar processor controlling fetching of instructions based upon number of empty instructions registers detected for each cycle
KR100570906B1 (ko) 데이터처리기에서조건부분기실행을제어하기위한장치및방법
US6125440A (en) Storing executing instruction sequence for re-execution upon backward branch to reduce power consuming memory fetch
US6993674B2 (en) System LSI architecture and method for controlling the clock of a data processing system through the use of instructions
JP4800582B2 (ja) 演算処理装置
KR100705872B1 (ko) 몇몇의 명령원으로부터의 명령 실행 프로세서 및 방법
EP1208424B1 (en) Apparatus and method for reducing register write traffic in processors with exception routines
JP2001014161A (ja) プログラマブルコントローラ
US20100005276A1 (en) Information processing device and method of controlling instruction fetch
KR102379886B1 (ko) 벡터 명령 처리
US5828861A (en) System and method for reducing the critical path in memory control unit and input/output control unit operations
KR970011209B1 (ko) 실행된 명령 스트림을 추적하기 위해 사용되는 신호를 발생하기 위한 회로를 포함하는 마이크로프로세서
JP2607319B2 (ja) プログラマブルコントローラ
JP3206394B2 (ja) 5段パイプライン構造のプログラマブルコントローラ
JP2000029696A (ja) プロセッサおよびパイプライン処理制御方法

Legal Events

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

Payment date: 20120302

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20130304

Year of fee payment: 14

LAPS Lapse due to unpaid annual fee