KR101645001B1 - Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법 - Google Patents
Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법 Download PDFInfo
- Publication number
- KR101645001B1 KR101645001B1 KR1020090013532A KR20090013532A KR101645001B1 KR 101645001 B1 KR101645001 B1 KR 101645001B1 KR 1020090013532 A KR1020090013532 A KR 1020090013532A KR 20090013532 A KR20090013532 A KR 20090013532A KR 101645001 B1 KR101645001 B1 KR 101645001B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- condition
- execution
- instructions
- vliw
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 241000761456 Nops Species 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 108010020615 nociceptin receptor Proteins 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/82—Architectures of general purpose stored program computers data or demand driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Business, Economics & Management (AREA)
- Entrepreneurship & Innovation (AREA)
- Human Resources & Organizations (AREA)
- Marketing (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Strategic Management (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Economics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
조건 실행(predicated execution)을 지원하는 VLIW 명령어 생성 장치 및 방법과 생성된 VLIW 명령어를 처리하는 VLIW 프로세서 및 방법이 개시된다. 일 실시예에 따르면 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들이 생성된다. VLIW 프로세서는 인스트럭션 번들을 디코딩하고, 디코딩 결과 추출되는 조건 실행을 나타내는 값에 따라서 인스트럭션 번들에 포함된 복수 개의 인스트럭션을 병렬적으로 실행한다.
VLIW, 인스트럭션, 조건 실행, 번들, 인스트럭션 세트 아키텍처
Description
본 발명의 하나 이상의 양상은 인스트럭션 처리에 관한 것으로, 더 상세하게는 VLIW 프로세서에서 실행될 인스트럭션의 처리에 관한 것이다.
VLIW(Very Long Instruction Word, VLIW) 프로세서는 복수의 인스트럭션을 병렬적으로 수행하기 위한 복수의 연산 장치들을 포함하고, 입력된 인스트럭션을 복수의 연산 장치들에 분배하여 전체 인스트럭션 수행 시간을 단축시킬 수 있는 컴퓨터 구조이다. 소프트웨어 프로그램이 VLIW 프로세서 상에서 실행되기 위해, 소프트웨어 프로그램은 다수의 인스트럭션을 하나의 긴 명령, 즉 소위 VLIW 명령어로 변환되어야 한다.
VLIW 프로세서에서 수행될 명령어를 컴파일링하는 컴파일러는 최적 병렬화에 의해 프로그램을 실행하는데 필요한 시간을 최소화하고자 한다. 그러나, 데이터 의존성(data dependency), 분기 명령에 의한 제어종속(control dependency), 자원 충돌(resource conflict) 등에 의해 인스트럭션 병렬화가 제한된다. 그중에서도 대표적인 제한 요인이 분기 명령(branch instruction)이다. 조건 분기 명령인 경우에는 조건을 판정하는 동안 처리시간이 지연되어 지속적인 파이프라인 처리를 방해하는 요인으로 작용한다.
따라서, 분기 명령에 의한 성능 제한을 극복하려는 많은 연구가 진행되고 있는데, 그 중의 하나로서 조건 실행(predicated execution) 방법이 있다. 조건 실행을 지원하는 컴파일러는 분기 명령을 이용하지 않고 조건적으로 실행되는 인스트럭션이 실행되도록 명령어를 컴파일한다. 상세하게는, 조건에 따라서 인스트럭션이 실행 여부를 결정하여, 분기 명령을 제거한다. 예를 들어, 조건부 실행에서 해당 조건이 참(true)이면 그 명령을 실행하고, 그렇지 않으면(false) 그 명령을 실행하지 않는다. 그러나, 이러한 조건 실행을 지원하기 위해서는 비조건부 명령어들(non-predicated instructions)을 포함한 모든 명령어 코드들도 조건부 명령어들(predicated instructions)로 생성되어야 한다.
조건 실행을 지원하는 VLIW 명령어를 효율적으로 생성하는 장치 및 방법이 제안된다.
일 실시예에 따라 생성된 조건 실행을 지원하는 VLIW 명령어를 처리하는 장치 및 방법이 제안된다.
일 양상에 따른, VLIW 명령어 생성 장치는, 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행(predicated execution)을 나타내는 값을 포함하는 인스트럭션 번들을 생성한다.
일 실시예에 따르면, 조건 실행을 나타내는 값은 프리디킷 레지스터 파일의 인덱스일 수 있다. 다른 실시예에 따르면, 조건 실행을 나타내는 값은 컨디션 비트일 수 있다.
다른 양상에 따른 VLIW 명령어 세트 생성 방법은, 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 생성한다.
또 다른 양상에 따른 VLIW 프로세서는 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 페치하는 명령어 페치부; 인스트럭션 번들을 디코딩하는 디코더; 및 인스트럭션 번들에 포함된 복수 개의 인스트럭션을 병렬적으로 수행하기 위한 명령어 수행부를 포함하고, 명령어 수행부는 조건 실행을 나타내는 값에 따라서 복수 개의 인스트럭션을 실행한다.
일 실시예에 따르면, 명령어 수행부는, 인덱스별 프리디킷 값을 저장하는 프리디킷 레지스터 파일; 및 인스트럭션 번들에 포함된 프리디킷 레지스터 파일의 인덱스에 의해 지시되는 프리디킷 값에 따라 복수 개의 인스트럭션을 병렬적으로 수행하는 복수 개의 연산 유닛을 포함할 수 있다. 복수 개의 연산 유닛은 프리디킷 레지스터 파일의 인덱스에 의해 지시되는 프리디킷 값이 특정 값으로 설정되는 경우에 복수 개의 인스트럭션을 병렬적으로 수행할 수 있다.
다른 실시예에 따르면, 명령어 수행부는, 컨디션 비트를 저장하는 프로세서 상태 레지스터; 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 프로세서 상태 레지스터에 저장된 컨디션 비트를 비교하는 비교부; 및 비교 결과에 따라 인스트럭션 번들에 포함된 복수 개의 인스트럭션을 병렬적으로 수행하는 복수 개의 연산 유닛을 포함한다. 복수 개의 연산 유닛은 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 프로세서 상태 레지스터에 저장된 컨디션 비트가 일치하는 경우 복수 개의 인스트럭션을 병렬적으로 수행할 수 있다.
또 다른 양상에 따른 VLIW 프로세서의 명령어 처리 방법은, 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 페치하는 단계; 인스트럭션 번들을 디코딩하는 단계; 및 디코딩 결과 해석된 조건 실행을 나타내는 값에 따라서 복수 개의 인스트럭션을 병렬적으로 수행하는 단계를 포함한다.
일 실시예에 따르면, 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 VLIW 명령어로 생성하여 VLIW 명령어를 효율적으로 구성할 수 있으며, 생성된 VLIW 명령어를 효율적으로 처리할 수 있다.
이하, 첨부된 도면을 참조하여 본 발명의 일 실시예를 상세하게 설명한다. 본 발명을 설명함에 있어 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 1은 일 실시예에 따른 VLIW 명령어 생성 장치를 나타내는 블록도이다.
일 실시예에 따른 VLIW 명령어 생성 장치(100)는 메모리(110) 및 컴파일러(120)를 포함한다. 메모리(110)는 외부 메모리로 존재할 수도 있다.
메모리(110)는 일 실시예에 따른 VLIW 명령어를 생성하기 위한 인스트럭션 세트 아키텍처(Instruction Set Architecture, ISA) 인코딩 맵을 저장한다. ISA 인코딩 맵은 각 명령어별 인스트럭션 구조를 정의한다. 전형적으로, 인스트럭션 구조에는 연산 코드, 2개의 피연산자 레지스터 인덱스, 결과 값이 저장될 레지스터 인덱스가 포함되며, 인스트럭션 종류에 따라 세부 요소는 달라질 수 있다.
입력되는 소프트웨어 프로그램을 복수 개의 연산 유닛을 포함하는 VLIW 프로세서에서 수행되도록 하기 위하여, 컴파일러(120)는 다수의 인스트럭션을 VLIW 인스트럭션 번들(bundle)로 변환하여 VLIW 명령어를 생성한다. 번들은 VLIW 프로세서에 병렬적으로 실행되는 n개의 인스트럭션을 의미한다. 컴파일러(120)는 메모리(110)에 저장된 ISA 인코딩 맵을 참조하여 VLIW 명령어(또는 VLIW 인스트럭션 번들)을 생성한다. 생성된 VLIW 명령어는 메모리(110)의 소정 영역에 저장되고, VLIW 프로세서(도시되지 않음)로부터 페치되어 실행될 수 있다.
도 2a 및 도 2b는 종래 기술에 따른 인스트럭션 세트 아키텍처 및 VLIW 명령 어를 간략하게 나타낸 도면이다.
도 2a는 간략화된 ISA 인코딩 맵(10)을 나타낸 것으로, 모든 인스트럭션의 몇 개의 비트가 조건 실행(pred)을 나타내기 위하여 지정(reservation)되어 있음을 나타낸다. 도 2b는 3개의 연산 유닛을 가지는 VLIW 프로세서에서 병렬적으로 수행되기 위한 3개의 인스트럭션을 포함하는 VLIW 명령어(20)를 나타낸다.
예를 들어, 하나의 인스트럭션 비트가 32 비트이고, 조건 실행을 나타내기 위한 값이 5비트를 차지하고 있는 경우를 도 2b에서 VLIW 인스트럭션 번들은 총 96비트이고, 그 중 조건 실행을 나타내는 값을 위해 15비트가 이용된다. 즉, 번들 당 약 15%를 조건 실행을 위한 부분이 차지하고 있다. 그러나, VLIW 프로세서에서 실행되는 명령어의 일부만이 분기 명령에 대응되는 조건 실행이 필요한 데 비하여, 모든 명령어에 조건 실행을 나타내는 값을 위한 부분을 두는 것은 제한된 VLIW 명령어를 사용하는데 있어서 비효율적이다.
일 실시예에 따르면, VLIW 명령어 생성 장치(100)는 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 VLIW 명령어로서 생성한다.
도 3a 및 도 3b는 각각 일 실시예에 따른 VLIW 명령어 구조를 나타낸 도면이다.
도 3a 및 도 3b에 도시된 바와 같이, 일 실시예에 따른 VLIW 명령어는 인스트럭션 단위로 조건 실행을 나타내는 값을 포함하는 도 2b의 VLIW 명령어 구조와 달리 번들 단위로 조건 실행을 나타내는 값을 포함한다.
도 3a는 일 실시예에 따라 조건 실행을 나타내는 값이 프리디킷 레지스터 파일(Predicate Register File, PRF)의 인덱스(pred)로 인코딩된 예를 나타낸다. 프리디킷 레지스터 파일은 인덱스별 프리디킷 값을 저장하고 있으며, 소정의 인덱스가 입력되면 입력된 인덱스에 해당되는 프리디킷 값이 출력되도록 구성된다. 도 3a에 도시된 바와 같이, 일 실시예에 따른 VLIW 명령어는 번들 단위로 포함된 프리디킷 레지스터의 인덱스 및 병렬적으로 수행되기 위한 복수 개의 인스트럭션을 포함한다. 컴파일러는 조건을 계산하는 명령어의 결과값을 PRF에 저장하고, 저장된 결과값을 이용하도록 명령어를 인코딩할 수 있다.
PRF의 인덱스(pred)의 폭(width)는 PRF에 포함된 프리디킷 레지스터의 개수에 따라 정해질 수 있다.
도 3b에는 다른 실시예에 따라 조건 실행을 나타내는 값이 컨디션 비트(condition bit)로 인코딩된 예를 나타낸다. 도 3b에 도시된 바와 같이, 일 실시예에 따른 VLIW 명령어는 번들 단위로 포함된 컨디션 비트 및 병렬적으로 수행되는 복수 개의 인스트럭션을 포함한다. 컨디션 비트를 포함하는 필드의 폭은 컨디션의 개수에 의해 정해질 수 있다.
컨디션 비트는 소정의 조건 명령어(Condition Operation)가 실행되면 생성되는 조건이 수행된 결과 값을 의미한다. 예를 들어, if (a<100) c=0; 이라는 프로그램이 있다면, 조건(a<100)을 계산하기 위한 소정의 명령어에 의하여 생성된 값이 컨디션 비트가 된다. 이 값에 따라서 참이면 c에 0을 넣고, 아니면 c=0은 수행되지 않는다.
프로세서 상태 레지스터(Processor Status Register, PSR)에 저장된 레지스터 값은 프로세서의 상태를 나타내는 복수 개의 플래그, 예를 들어, N(Negative), Z(Zero), C(Carry), O(Overflow)를 포함한다. PSR에서는 소정의 조건 명령어가 수행되면, 이에 따라 플래그들의 값이 결정되도록 정해져 있는데, 이 플래그들의 값이 컨디션 비트에 대응할 수 있다. 예를 들어, EQ 코드의 경우에는 비교 후 같으면 Z 플래그가 설정될 수 있다.
일 실시예에 따르면, PSR의 특정 위치에 조건의 실행 결과를 나타내는 컨디션 비트를 저장하고, 저장된 컨디션 비트와 입력되는 인스트럭션의 컨디션 비트를 비교하여, 비교 결과 일치하는 경우에만 인스트럭션이 수행되도록 할 수 있다.
도 4는 일 실시예에 따른 VLIW 프로세서를 나타내는 블록도이다.
일 실시예예 따른 VLIW 프로세서는 명령어 페치부(410), 디코더(420) 및 명령어 수행부(430)를 포함한다.
명령어 페치부(410)는 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 명령어 메모리(도시되지 않음)로부터 페치한다. 디코더(420)는 인스트럭션 번들을 디코딩한다. 명령어 수행부(430)는 인스트럭션 번들에 포함된 복수 개의 인스트럭션을 병렬적으로 수행한다.
명령어 수행부(430)는 조건 실행을 나타내는 값에 따라서 복수 개의 인스트럭션을 실행하거나 실행하지 않는다. 명령어 수행부(430)는 복수 개의 인스트럭션을 병렬적으로 실행하기 위한 복수 개의 연산 유닛 외에, 멀티플렉서, 조건 실행을 나타내는 값에 따라 명령어의 실행 여부를 결정하기 위한 레지스터, 연산 수행 결과를 저장하는 레지스터 파일이 더 포함될 수 있다.
명령어 수행부(430)가 PRF를 포함하고, 조건 실행을 나타내는 값이 PRF의 인덱스로 인코딩된 VLIW 명령어가 페치되는 경우, VLIW 명령어의 디코딩 결과 추출되는 PRF의 인덱스에 따라 PRF에 포함된 프리디킷 값이 선택된다. 선택된 프리디킷 값에 따라서, 명령어 수행부(430)가 명령을 실행하거나 실행하지 않을 수 있다.
이를 위해 연산 유닛들 디스에이블하도록 하거나, 연산 유닛들에 NOP들을 삽입하여 명령을 실행하지 않도록 할 수 있다. 다른 방법으로, 명령어 수행부(430)의 복수의 연산 유닛들은 매 싸이클마다 인스트럭션을 실행하지만, 프리디킷 값에 따라 연산 실행 결과를 저장하기 위한 레지스터 파일(도시되지 않음)로 기록할 지 여부가 결정되도록 할 수 있다. 예를 들어, 프리디킷 값이 1인 경우에는 명령어 수행부(430)는 연산 유닛의 연산 수행 결과를 레지스터 파일에 기록하며, 프리디킷 신호가 0인 경우에는 실제로 아무 연산도 수행되지 않는 경우와 같이 연산 유닛의 연산 수행 결과를 레지스터 파일에 기록하지 않을 수 있다.
명령어 수행부(430)가 프리디킷 레지스터 파일을 포함하지 않는 경우, 프로세서의 상태를 나타내는 프로세서 상태 레지스터(Processor Status Register, PSR)를 이용할 수 있다. 조건 실행을 나타내는 값이 컨디션 비트로 인코딩된 VLIW 명령어가 페치되는 경우, 명령어 수행부(430)는 VLIW 명령어의 디코딩 결과 추출되는 컨디션 비트와 PSR의 특정 위치에 지정된 컨디션 비트를 비교하고, 비교 결과에 따라 명령을 실행하거나 실행하지 않을 수 있다.
구현예에 따라, 명령어 수행부(430)는 복수의 연산 유닛들은 매 싸이클마다 인스트럭션을 실행하지만, 비교 결과에 따라 연산 실행 결과가 레지스터 파일로 기록할 지 여부가 결정되도록 할 수 있다. 예를 들어, VLIW 명령어의 디코딩 결과 추출되는 컨디션 비트와 PSR의 특정 위치에 지정된 컨디션 비트를 비트가 일치하는 경우에는 연산 유닛의 연산 수행 결과가 레지스터 파일에 기록되며, 일치하지 않는 경우에는 연산 유닛의 연산 수행 결과가 레지스터 파일에 기록되지 않을 수 있다.
도 5는 일 실시예에 따른 VLIW 명령어에 따른 연산 유닛의 동작을 나타내는 도면이다.
도 5에서 상위 블록(510)은 조건 분기 인스트럭션의 일 예를 나타낸다. x가 y보다 작은 조건이 만족되면 블록 1의 인스트럭션이 수행되고, 만족되지 않으면 블록 2의 인스트럭션이 수행된다.
하위 블록(520)은 컴파일러에 의해 조건 실행 방법에 따라 2개의 인스트럭션이 병렬적으로 수행될 수 있는 2개의 연산 유닛을 포함하는 VLIW 프로세서에서 이용하기 위하여 생성된 VLIW 명령어를 나타낸다. 조건(condition)에 의해 x와 y를 비교한 결과가 레지스터 p0에 저장된다.
x가 y보다 작은 조건이 만족되면 p0에 저장된 값이 <p0>이 되고, 이 경우 블록 1의 인스트럭션은 실행되고 실행 결과는 레지스터에 저장되고, 블록 2의 인스트럭션은 의미없는 실행이 된다. x가 y보다 작은 조건이 만족되지 않으면 p0에 저장된 값은 <~p0>가 되고, 이 경우 블록 1의 인스트럭션은 의미없는 실행이 되어 결과 값이 레지스터에 기록되지 않으며, 블록 2의 인스트럭션은 실행되고 실행 결과 값 이 레지스터에 저장된다.
도 2b에 도시된 바와 같이 명령어 단위로 조건 실행을 나타내는 값이 포함된 VLIW 번들의 경우에는 VLIW 프로세서의 각 연산 유닛마다 조건 실행을 나타내는 값을 평가하는 과정이 필요하다. 이에 비해, 일 실시예에 따르면, 조건 실행을 나타내는 값이 번들 단위로 포함된 VLIW 번들의 경우에는 VLIW 프로세서에서 각 연산 유닛마다 조건 실행을 나타내는 값을 평가할 필요가 없다.
또한, 모든 인스트럭션이 조건값을 위한 인덱스(pred) 정보 또는 컨디션 비트를 인코딩하기 위한 필드를 지정해 놓지 않아도 되게 때문에, 동일한 너비를 가지는 인스트럭션의 경우 다른 필드 값으로 활용이 가능하다. 일예로, 만약에 절약된 비트 필드를 명령어 코드를 지정하는 비트 필드로 사용할 경우, 더 많은 명령어를 정의하여 사용할 수 있다. 다른 예로는, 절약된 비트 필드를 피연산자를 위한 비트 필드로 사용할 경우, 기존에 사용했던 레지스터 파일보다 더 많은 피연산자용 레지스터를 가지는 레지스터 파일을 사용할 수 있다.
도 6은 다른 실시예에 따른 VLIW 프로세서를 나타내는 블록도이다.
도 6은 VLIW 프로세서에 PRF가 있으며, 조건 실행을 나타내는 값이 PRF의 인덱스인 VLIW 명령어가 페치되는 경우의 VLIW 프로세서를 나타낸다.
VLIW 프로세서(600)는 명령어 메모리(112)로부터 VLIW 명령어를 페치한다. 명령어 메모리(112)는 캐쉬 또는 외부 메모리일 수 있다. VLIW 프로세서(600)는 명령어 페치부(610), 디코더(620) 및 명령어 수행부(630)를 포함한다. 명령어 수행부(630)는, PRF(632) 및 복수 개의 연산 유닛(634, 636)을 포함한다. 도시되지 않았으나, 연산 유닛(634, 636)의 연산 수행 결과 값을 저장하기 위한 레지스터 파일이 더 포함될 수 있다.
명령어 페치부(610)는 조건 실행을 나타내는 값으로 PRF의 인덱스가 번들 단위로 포함된 VLIW 명령어(30)를 페치한다. 디코더(620)는 VLIW 명령어(30)를 디코딩한다.
PRF의 인덱스를 나타내는 값을 인덱스별 프리디킷 값을 저장하는 PRF(632)에 전달하면, 전달된 인덱스를 가지는 프리디킷 값이 선택되어 PRF(632)으로부터 출력된다. 복수 개의 연산 유닛(634, 636)은 인스트럭션 번들에 포함된 PRF(632)의 인덱스에 의해 지시되는 프리디킷 값에 따라 복수 개의 인스트럭션을 병렬적으로 수행한다. 복수 개의 연산 유닛(634, 636)은 PRF(632)의 인덱스에 의해 지시되는 프리디킷 값이 특정 값으로 설정되는 경우에 예를 들어, 프리디킷 값이 0인 경우 복수 개의 인스트럭션을 병렬적으로 수행할 수 있다.
도 7은 또 다른 실시예에 따른 VLIW 프로세서를 나타내는 블록도이다.
도 7은 VLIW가 PRF을 포함하지 않고 조건 실행을 나타내는 값이 컨디션 비트인 VLIW 명령어가 페치되는 경우, 프로세서의 상태를 나타내는 프로세서 상태 레지스터(PSR)를 이용하여 인스트럭션 실행 여부를 결정하는 VLIW 프로세서(700)를 나타낸다.
VLIW 프로세서(700)는 명령어 메모리(114)로부터 VLIW 명령어를 페치한다. 명령어 메모리(114)는 캐쉬 또는 외부 메모리일 수 있다. VLIW 프로세서(700)는 명령어 페치부(710), 디코더(720) 및 명령어 수행부(730)를 포함한다. 명령어 수 행부(730)는, PSR(732), 비교부(734) 및 복수 개의 연산 유닛(736, 738)을 포함한다.
명령어 페치부(710)는 조건 실행을 나타내기 위해 인코딩된 컨디션 비트가 번들 단위로 포함된 VLIW 명령어(40)를 페치한다. 디코더(720)는 VLIW 명령어(40)를 디코딩한다.
VLIW 명령어의 디코딩 결과 추출되는 컨디션 비트 및 PSR(732)의 특정 위치에 지정된 컨디션 비트는 비교부(734)로 전달되고, 비교부(734)는 추출된 컨디션 비트 및 PSR(732)의 특정 위치에 지정된 컨디션 비트를 비교한다. 일 실시예에 따르면, 비교부(734)의 비교 결과 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 컨디션 비트가 일치하는 경우 복수 개의 연산 유닛(736, 738)은 복수 개의 인스트럭션을 병렬적으로 수행한다.
도 8은 일 실시예에 따른 VLIW 명령어 처리 방법을 나타내는 순서도이다.
병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 페치한다(S 810). 인스트럭션 번들을 디코딩한다(S 820). 디코딩 결과 해석된 조건 실행을 나타내는 값에 따라서 복수 개의 인스트럭션을 병렬적으로 수행한다(S 830).
조건 실행을 나타내는 값은 PRF의 인덱스인 경우, 인스트럭션 번들에 포함된 PRF의 인덱스에 의해 지시되는 프리디킷 값에 따라 인덱스별 프리디킷 값을 저장하는 PRF에서 프리디킷 값을 선택되고, 선택된 프리디킷 값에 따라 복수 개의 인스트럭션이 병렬적으로 수행된다. PRF의 인덱스에 의해 지시되는 프리디킷 값이 특정 값으로 설정되는 경우 복수 개의 인스트럭션이 병렬적으로 수행될 수 있다.
조건 실행을 나타내는 값이 컨디션 비트인 경우, 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 PSR에 포함된 컨디션 비트를 비교하고, 비교 결과에 따라 인스트럭션 번들에 포함된 복수 개의 인스트럭션이 병렬적으로 수행될 수 있다. 이 경우 복수 개의 인스트럭션은 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 PSR에 포함된 컨디션 비트가 일치하는 경우 병렬적으로 수행될 수 있다.
일 실시예에 따르면, 병렬적으로 실행되는 복수 개의 인스트럭션인 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 VLIW 명령어로 생성하여 VLIW 명령어를 효율적으로 구성할 수 있으며, 생성된 VLIW 명령어를 효율적으로 처리할 수 있다.
본 발명의 일 양상은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로서 구현될 수 있다. 상기의 프로그램을 구현하는 코드들 및 코드 세그먼트들은 당해 분야의 컴퓨터 프로그래머에 의하여 용이하게 추론될 수 있다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다. 컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 디스크 등을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드로 저장되고 실행될 수 있다.
이상의 설명은 본 발명의 일 실시예에 불과할 뿐, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 본질적 특성에서 벗어나지 않는 범위에 서 변형된 형태로 구현할 수 있을 것이다. 따라서, 본 발명의 범위는 전술한 실시예에 한정되지 않고 특허 청구범위에 기재된 내용과 동등한 범위 내에 있는 다양한 실시 형태가 포함되도록 해석되어야 할 것이다.
도 1은 일 실시예에 따른 VLIW 명령어 생성 장치를 나타내는 블록도이다.
도 2a 및 도 2b는 종래 기술에 따른 인스트럭션 세트 아키텍처 및 VLIW 명령어를 간략하게 나타낸 도면이다.
도 3a 및 도 3b는 각각 일 실시예에 따른 VLIW 명령어 구조를 나타낸 도면이다.
도 4는 일 실시예에 따른 VLIW 프로세서를 나타내는 블록도이다.
도 5는 일 실시예에 따른 VLIW 명령어에 따른 연산 유닛의 동작을 나타내는 도면이다.
도 6은 다른 실시예에 따른 VLIW 프로세서를 나타내는 블록도이다.
도 7은 또 다른 실시예에 따른 VLIW 프로세서를 나타내는 블록도이다.
도 8은 일 실시예에 따른 VLIW 명령어 처리 방법을 나타내는 순서도이다.
Claims (20)
- VLIW 명령어 생성 장치로서,병렬적으로 실행되는 복수 개의 인스트럭션을 인스트럭션 번들로 변환하여, 상기 인스트럭션 번들 단위로 조건 실행(predicated execution)을 나타내는 값을 포함하는 인스트럭션 번들을 VLIW 명령어로서 생성하는 컴파일러; 및상기 생성된 VLIW 명령어를 저장하는 메모리;를 포함하는 장치.
- 제1항에 있어서,상기 조건 실행을 나타내는 값은 프리디킷 레지스터 파일의 인덱스인 장치.
- 제1항에 있어서,상기 조건 실행을 나타내는 값은 컨디션 비트인 장치.
- VLIW 명령어 생성 방법으로서,컴파일러가 병렬적으로 실행되는 복수 개의 인스트럭션을 인스트럭션 번들로 변환하는 단계;상기 컴파일러가 상기 인스트럭션 번들 단위로 조건 실행을 나타내는 값을 포함하는 인스트럭션 번들을 VLIW 명령어로서 생성하는 단계; 및상기 생성된 VLIW 명령어를 저장하는 단계;를 포함하는 방법.
- 제4항에 있어서,상기 조건 실행을 나타내는 값은 프리디킷 레지스터 파일의 인덱스인 방법.
- 제4항에 있어서,상기 조건 실행을 나타내는 값은 컨디션 비트인 방법.
- 인스트럭션 번들은 병렬적으로 실행되는 복수 개의 인스트럭션을 포함하고, 조건 실행을 나타내는 값이 인스트럭션 번들 단위로 인코딩된 VLIW 명령어를 페치하는 명령어 페치부;상기 인스트럭션 번들을 디코딩하는 디코더; 및상기 인스트럭션 번들에 포함된 복수 개의 인스트럭션을 병렬적으로 수행하기 위한 명령어 수행부를 포함하고,상기 명령어 수행부는 상기 조건 실행을 나타내는 값에 따라서 상기 복수 개의 인스트럭션을 실행하는 VLIW 프로세서.
- 제7항에 있어서,상기 조건 실행을 나타내는 값은 프리디킷 레지스터 파일의 인덱스인 VLIW 프로세서.
- 제8항에 있어서,상기 명령어 수행부는,인덱스별 프리디킷 값을 저장하는 프리디킷 레지스터 파일; 및상기 인스트럭션 번들에 포함된 프리디킷 레지스터 파일의 인덱스에 의해 지시되는 프리디킷 값에 따라 상기 복수 개의 인스트럭션을 병렬적으로 수행하는 복 수 개의 연산 유닛을 포함하는 VLIW 프로세서.
- 제9항에 있어서,상기 복수 개의 연산 유닛은 상기 프리디킷 레지스터 파일의 인덱스에 의해 지시되는 프리디킷 값이 특정 값으로 설정되는 경우에 상기 복수 개의 인스트럭션을 병렬적으로 수행하는 VLIW 프로세서.
- 제7항에 있어서,상기 조건 실행을 나타내는 값은 컨디션 비트인 VLIW 프로세서.
- 제11항에 있어서,상기 명령어 수행부는,컨디션 비트를 저장하는 프로세서 상태 레지스터;상기 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 프로세서 상태 레지스터에 저장된 컨디션 비트를 비교하는 비교부; 및비교 결과에 따라 인스트럭션 번들에 포함된 복수 개의 인스트럭션을 병렬적으로 수행하는 복수 개의 연산 유닛을 포함하는 VLIW 프로세서.
- 제12항에 있어서,상기 복수 개의 연산 유닛은 디코딩된 인스트럭션 번들에 포함된 컨디션 비 트와 프로세서 상태 레지스터에 저장된 컨디션 비트가 일치하는 경우 복수 개의 인스트럭션을 병렬적으로 수행하는 VLIW 프로세서.
- VLIW 프로세서의 명령어 처리 방법으로서,인스트럭션 번들은 병렬적으로 실행되는 복수 개의 인스트럭션을 포함하고, 조건 실행을 나타내는 값이 인스트럭션 번들 단위로 인코딩된 VLIW 명령어를 페치하는 단계;상기 인스트럭션 번들을 디코딩하는 단계; 및상기 디코딩 결과 해석된 상기 조건 실행을 나타내는 값에 따라서 상기 복수 개의 인스트럭션을 병렬적으로 수행하는 단계를 포함하는 방법.
- 제14항에 있어서,상기 조건 실행을 나타내는 값은 프리디킷 레지스터 파일의 인덱스인 방법.
- 제15항에 있어서,상기 인스트럭션을 실행하는 단계는,인덱스별 프리디킷 값을 저장하는 프리디킷 레지스터 파일에서 상기 프리디킷 레지스터 파일의 인덱스에 의해 지시되는 프리디킷 값에 따라 프리디킷 값을 선택하는 단계; 및상기 선택된 프리디킷 값에 따라 상기 복수 개의 인스트럭션을 병렬적으로 수행하는 단계를 포함하는 방법.
- 제16항에 있어서,복수 개의 인스트럭션을 병렬적으로 수행하는 단계는, 상기 프리디킷 레지스터 파일의 인덱스에 의해 지시되는 프리디킷 값이 특정 값으로 설정되는 경우에 수행되는 방법.
- 제14항에 있어서,상기 조건 실행을 나타내는 값은 컨디션 비트인 방법.
- 제18항에 있어서,상기 인스트럭션을 실행하는 단계는,상기 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 프로세서 상태 레지스터에 저장된 컨디션 비트를 비교하는 단계; 및상기 비교 결과에 따라 상기 인스트럭션 번들에 포함된 복수 개의 인스트럭션을 병렬적으로 수행하는 단계를 포함하는 방법.
- 제19항에 있어서,상기 복수 개의 인스트럭션을 병렬적으로 수행하는 단계는, 상기 디코딩된 인스트럭션 번들에 포함된 컨디션 비트와 상기 컨디션 비트가 일치하는 경우 수행되는 방법.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020090013532A KR101645001B1 (ko) | 2009-02-18 | 2009-02-18 | Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법 |
US12/706,006 US8601244B2 (en) | 2009-02-18 | 2010-02-16 | Apparatus and method for generating VLIW, and processor and method for processing VLIW |
US14/064,497 US9342480B2 (en) | 2009-02-18 | 2013-10-28 | Apparatus and method for generating VLIW, and processor and method for processing VLIW |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020090013532A KR101645001B1 (ko) | 2009-02-18 | 2009-02-18 | Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100094214A KR20100094214A (ko) | 2010-08-26 |
KR101645001B1 true KR101645001B1 (ko) | 2016-08-02 |
Family
ID=42560887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090013532A KR101645001B1 (ko) | 2009-02-18 | 2009-02-18 | Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법 |
Country Status (2)
Country | Link |
---|---|
US (2) | US8601244B2 (ko) |
KR (1) | KR101645001B1 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101118593B1 (ko) * | 2008-12-03 | 2012-02-27 | 한국전자통신연구원 | Vliw 명령어 처리 장치 및 방법 |
JP6378515B2 (ja) * | 2014-03-26 | 2018-08-22 | 株式会社メガチップス | Vliwプロセッサ |
US10402199B2 (en) | 2015-10-22 | 2019-09-03 | Texas Instruments Incorporated | Conditional execution specification of instructions using conditional extension slots in the same execute packet in a VLIW processor |
US11599360B2 (en) | 2020-12-14 | 2023-03-07 | Cognitive Science & Solutions, Inc. | AI synaptic coprocessor |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060004996A1 (en) | 2004-04-23 | 2006-01-05 | Gonion Jeffry E | Macroscalar processor architecture |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5471593A (en) * | 1989-12-11 | 1995-11-28 | Branigin; Michael H. | Computer processor with an efficient means of executing many instructions simultaneously |
US5903750A (en) * | 1996-11-20 | 1999-05-11 | Institute For The Development Of Emerging Architectures, L.L.P. | Dynamic branch prediction for branch instructions with multiple targets |
US6237077B1 (en) * | 1997-10-13 | 2001-05-22 | Idea Corporation | Instruction template for efficient processing clustered branch instructions |
US5922065A (en) * | 1997-10-13 | 1999-07-13 | Institute For The Development Of Emerging Architectures, L.L.C. | Processor utilizing a template field for encoding instruction sequences in a wide-word format |
US5974537A (en) * | 1997-12-29 | 1999-10-26 | Philips Electronics North America Corporation | Guard bits in a VLIW instruction control routing of operations to functional units allowing two issue slots to specify the same functional unit |
US6366999B1 (en) * | 1998-01-28 | 2002-04-02 | Bops, Inc. | Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution |
US6910123B1 (en) * | 2000-01-13 | 2005-06-21 | Texas Instruments Incorporated | Processor with conditional instruction execution based upon state of corresponding annul bit of annul code |
US7096343B1 (en) * | 2000-03-30 | 2006-08-22 | Agere Systems Inc. | Method and apparatus for splitting packets in multithreaded VLIW processor |
GB2367406B (en) * | 2000-06-13 | 2002-06-05 | Siroyan Ltd | Predicated execution of instructions in processors |
US6931632B2 (en) * | 2001-11-08 | 2005-08-16 | Hewlett-Packard Development Company, L.P. | Instrumentation of code having predicated branch-call and shadow instructions |
JP3801545B2 (ja) * | 2002-08-02 | 2006-07-26 | 松下電器産業株式会社 | コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 |
US6865662B2 (en) * | 2002-08-08 | 2005-03-08 | Faraday Technology Corp. | Controlling VLIW instruction operations supply to functional units using switches based on condition head field |
US20040205326A1 (en) * | 2003-03-12 | 2004-10-14 | Sindagi Vijay K.G. | Early predicate evaluation to reduce power in very long instruction word processors employing predicate execution |
US20060230257A1 (en) | 2005-04-11 | 2006-10-12 | Muhammad Ahmed | System and method of using a predicate value to access a register file |
AT503171A2 (de) * | 2006-01-16 | 2007-08-15 | On Demand Microelectronics Gmb | Verfahren und prozessoreinrichtung zur bedingten ausführung von instruktionen |
KR100875836B1 (ko) * | 2007-03-23 | 2008-12-24 | 삼성전자주식회사 | 병렬 처리 vliw 컴퓨터를 위한 인스트럭션 명령어 압축장치 및 그 방법 |
US20090327674A1 (en) * | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
-
2009
- 2009-02-18 KR KR1020090013532A patent/KR101645001B1/ko active IP Right Grant
-
2010
- 2010-02-16 US US12/706,006 patent/US8601244B2/en active Active
-
2013
- 2013-10-28 US US14/064,497 patent/US9342480B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060004996A1 (en) | 2004-04-23 | 2006-01-05 | Gonion Jeffry E | Macroscalar processor architecture |
Also Published As
Publication number | Publication date |
---|---|
US20140052960A1 (en) | 2014-02-20 |
US20100211759A1 (en) | 2010-08-19 |
KR20100094214A (ko) | 2010-08-26 |
US8601244B2 (en) | 2013-12-03 |
US9342480B2 (en) | 2016-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6799263B1 (en) | Prefetch instruction for an unpredicted path including a flush field for indicating whether earlier prefetches are to be discarded and whether in-progress prefetches are to be aborted | |
KR101417597B1 (ko) | 제로 프레디케이트 브랜치 예측실패에 대한 브랜치 예측실패 거동 억제 | |
US9632775B2 (en) | Completion time prediction for vector instructions | |
US9389868B2 (en) | Confidence-driven selective predication of processor instructions | |
KR20100132032A (ko) | 실행되는 명령의 결과를 선택적으로 커밋하는 시스템 및 방법 | |
US20100205405A1 (en) | Static branch prediction method and code execution method for pipeline processor, and code compiling method for static branch prediction | |
KR101645001B1 (ko) | Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법 | |
JP4864840B2 (ja) | マイクロプロセッサ | |
US9442734B2 (en) | Completion time determination for vector instructions | |
JP3977931B2 (ja) | データプロセッサにおける条件分岐実行を制御するための方法および装置 | |
US9569273B2 (en) | Apparatus and method for controlling execution of a single thread by multiple processors | |
TWI515651B (zh) | 用以增加指令集密度的編碼技術 | |
KR100837400B1 (ko) | 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 | |
KR102688577B1 (ko) | 전자 장치, vliw 프로세서 및 그 제어 방법들 | |
JP2001243070A (ja) | プロセッサ及び分岐予測方法並びにコンパイル方法 | |
JP4828409B2 (ja) | タイムステーショナリプロセッサにおける条件動作のためのサポート | |
US9201657B2 (en) | Lower power assembler | |
KR101099828B1 (ko) | 프로세싱 시스템, 이 프로세싱 시스템에 의해서 인스트럭션의 집합을 실행하는 vliw 프로세서, 방법 및 컴퓨터 판독가능한 저장 매체 | |
JP4006887B2 (ja) | コンパイラ、プロセッサおよび記録媒体 | |
JP2000081982A (ja) | コンパイラ、プロセッサおよび記録媒体 | |
CN116069602B (zh) | 一种最坏情况执行时间分析方法和装置 | |
CN216527140U (zh) | 一种分支预测的装置及处理器 | |
JP2005149297A (ja) | プロセッサおよびそのアセンブラ | |
CN114035848A (zh) | 一种分支预测的方法、装置及处理器 | |
JP2006004234A (ja) | マイクロプロセッサにおける命令実行制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20190619 Year of fee payment: 4 |