KR20180089631A - 반도체 시스템 및 반도체 장치의 동작 방법 - Google Patents

반도체 시스템 및 반도체 장치의 동작 방법 Download PDF

Info

Publication number
KR20180089631A
KR20180089631A KR1020170014216A KR20170014216A KR20180089631A KR 20180089631 A KR20180089631 A KR 20180089631A KR 1020170014216 A KR1020170014216 A KR 1020170014216A KR 20170014216 A KR20170014216 A KR 20170014216A KR 20180089631 A KR20180089631 A KR 20180089631A
Authority
KR
South Korea
Prior art keywords
patch code
code
patch
unique
copy
Prior art date
Application number
KR1020170014216A
Other languages
English (en)
Other versions
KR102629408B1 (ko
Inventor
박상욱
강봉춘
이청우
신희동
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020170014216A priority Critical patent/KR102629408B1/ko
Priority to US15/658,976 priority patent/US10459715B2/en
Priority to TW106124990A priority patent/TWI784961B/zh
Priority to CN201710971575.1A priority patent/CN108376085B/zh
Publication of KR20180089631A publication Critical patent/KR20180089631A/ko
Application granted granted Critical
Publication of KR102629408B1 publication Critical patent/KR102629408B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/66Updates of program code stored in read-only memory [ROM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2206/00Indexing scheme related to dedicated interfaces for computers
    • G06F2206/10Indexing scheme related to storage interfaces for computers, indexing schema related to group G06F3/06
    • G06F2206/1014One time programmable [OTP] memory, e.g. PROM, WORM

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)
  • Bipolar Transistors (AREA)
  • Semiconductor Integrated Circuits (AREA)

Abstract

반도체 시스템 및 반도체 장치의 동작 방법이 제공된다. 반도체 시스템은, 패치 코드를 저장하되, 상기 패치 코드는 고유 ID(unique ID)를 포함하는 비휘발성 메모리; 부팅 코드를 저장하되, 상기 부팅 코드는 상기 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 상기 패치 코드가 실행될 위치를 특정하기 위한 LR(Linked Register) 주소를 포함하는 IROM(Internal Read Only Memory); 상기 패치 코드의 사본을 저장하되, 상기 패치 코드의 사본은 상기 고유 ID를 포함하는 SRAM(Static Random Access Memory); 및 상기 패치 코드의 사본을 실행시키는 프로세서를 포함하고, 상기 패치 코드 실행 함수는 상기 비휘발성 메모리에 저장된 상기 패치 코드의 상기 고유 ID와, 상기 패치 코드 실행 함수가 실행될 때 상기 부팅 코드로부터 제공받은 상기 LR 주소를 비교하고, 상기 프로세서는 상기 비교 결과에 따라 상기 SRAM에 저장된 패치 코드의 사본을 실행시킨다.

Description

반도체 시스템 및 반도체 장치의 동작 방법{SEMICONDUCTOR SYSYEM AND METHOD FOR OPERATING SEMICONDUCTOR DEVICE}
본 발명은 반도체 시스템 및 반도체 장치의 동작 방법에 관한 것이다.
반도체 시스템, 예컨대 어플리케이션 프로세서(Application Processor, AP)를 포함하는 시스템의 부팅 과정 중 문제가 발생할 수 있다. 부팅 과정에 밀접하게 관여하는 IROM(Internal Read Only Memory)의 부팅 코드에 문제가 있다고 판단된 경우, IROM을 다시 제조하기 위해서는 시간과 비용이 많이 든다. 예를 들어, 문제를 해결한 부팅 코드를 검증하기 위해 시뮬레이션을 하기 위해, 그리고 수정된 부팅 코드를 기초로 다시 IROM을 제조하기 위해서는 많은 시간이 소요되고, 더불어 IROM을 제조하기 위한 마스크 ROM(Mask ROM)을 수정하기 위해서는 많은 비용이 필요하다.
따라서 IROM의 부팅 코드에 문제가 있다고 판단된 경우, IROM의 부팅 코드에 대한 문제를 해결하면서도 시간과 비용을 절약할 수 있는 방안이 요구된다.
본 발명이 해결하고자 하는 기술적 과제는 IROM의 부팅 코드에 대한 문제를 해결하면서도 시간과 비용을 절약할 수 있는 반도체 시스템을 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 IROM의 부팅 코드에 대한 문제를 해결하면서도 시간과 비용을 절약할 수 있는 반도체 장치의 동작 방법을 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 해당 기술 분야의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 본 발명의 일 실시예에 따른 반도체 시스템은, 패치 코드를 저장하되, 패치 코드는 고유 ID(unique ID)를 포함하는 비휘발성 메모리; 부팅 코드를 저장하되, 부팅 코드는 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 패치 코드가 실행될 위치를 특정하기 위한 LR(Linked Register) 주소를 포함하는 IROM(Internal Read Only Memory); 패치 코드의 사본을 저장하되, 패치 코드의 사본은 고유 ID를 포함하는 SRAM(Static Random Access Memory); 및 패치 코드의 사본을 실행시키는 프로세서를 포함하고, 패치 코드 실행 함수는 비휘발성 메모리에 저장된 패치 코드의 고유 ID와, 패치 코드 실행 함수가 실행될 때 부팅 코드로부터 제공받은 LR 주소를 비교하고, 프로세서는 비교 결과에 따라 SRAM에 저장된 패치 코드의 사본을 실행시킨다.
상기 기술적 과제를 달성하기 위한 본 발명의 다른 실시예에 따른 반도체 시스템은, 패치 코드를 저장하되, 패치 코드는 고유 ID(unique ID)를 포함하는 비휘발성 메모리; 부팅 코드를 저장하되, 부팅 코드는 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 패치 코드가 실행될 위치를 특정하기 위한 LR(Linked Register) 주소를 포함하는 IROM(Internal Read Only Memory); 및 프로세서를 포함하고, 패치 코드 실행 함수는 비휘발성 메모리에 저장된 패치 코드의 고유 ID와, 패치 코드 실행 함수가 실행될 때 부팅 코드로부터 제공받은 LR 주소를 비교하고, 프로세서는 비교 결과에 따라 패치 코드를 실행시킨다.
상기 기술적 과제를 달성하기 위한 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법은, 고유 ID(unique ID)를 포함하는 패치 코드를 저장하는 비휘발성 메모리를 제공하고, 부팅 코드를 저장하는 IROM(Internal Read Only Memory)을 제공하되, 부팅 코드는 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 패치 코드가 실행될 위치를 특정하기 위한 LR(Linked Register) 주소를 포함하고, 패치 코드의 사본을 저장하는 SRAM(Static Random Access Memory)을 제공하되, 패치 코드의 사본은 고유 ID를 포함하고, 비휘발성 메모리에 저장된 패치 코드의 고유 ID와, 패치 코드 실행 함수가 실행될 때 부팅 코드로부터 제공받은 LR 주소를 비교하고, 비교 결과에 따라 SRAM에 저장된 패치 코드의 사본을 실행시키는 것을 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 본 발명의 일 실시예에 따른 반도체 시스템을 설명하기 위한 개략도이다.
도 2는 본 발명의 일 실시예에 따른 반도체 시스템에서 사용되는 부팅 코드를 설명하기 위한 개략도이다.
도 3은 본 발명의 일 실시예에 따른 반도체 시스템의 일 동작례를 설명하기 위한 개략도이다.
도 4는 본 발명의 일 실시예에 따른 반도체 시스템의 일 동작례를 설명하기 위한 개략도이다.
도 5는 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 흐름도이다.
도 6은 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 흐름도이다.
도 1은 본 발명의 일 실시예에 따른 반도체 시스템을 설명하기 위한 개략도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 반도체 시스템(1)은 프로세서(10), IROM(Internal Read Only Memory)(20), SRAM(Static Random Access Memory)(30) 및 OTP(One Time Programmable)(40)를 포함한다. 이들 프로세서(10), IROM(20), SRAM(30) 및 OTP(40)는 버스(50)를 통해 서로 데이터를 주고 받을 수 있다.
프로세서(10)는 반도체 시스템(1)을 제어하기 위한 프로그램 코드를 실행한다. 본 발명의 몇몇의 실시예에서, 프로세서(10)는 CPU(Central Processing Unit), GPU(Graphic Processing Unit), AP(Application Processor) 등을 포함할 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다.
IROM(20)은 반도체 시스템(1)의 운영에 필요하되, 운영 중 변경되지 않는 프로그램 코드를 포함한다. 예를 들어, IROM(20)은 반도체 시스템(1)의 부팅 절차에 관한 프로그램 코드(부팅 코드)를 포함할 수 있다. IROM(20)은 제품으로 제조된 후에는 그 내용을 수정할 수 없다.
SRAM(30)은 프로세서(10)가 실행하는 프로그램 코드들을 저장하는 공간이다. 본 실시예에서는 SRAM(30)으로 도시하였으나, 본 발명의 범위가 이에 한정되는 것은 아니고, 예컨대 DRAM(Dynamic Random Access Memory)가 사용죌 수도 있다.
OTP(40)는 한 번 데이터를 기록하면 그 데이터 값을 바꿀 수 없는 메모리를 말한다. 본 실시예에서는 OTP(40)로 도시하였으나. 본 발명의 범위가 이에 제한되는 것은 아니고, 각종 비휘발성 메모리가 될 수도 있음은 해당 기술 분애의 통상의 기술자에게 자명하다.
프로세서(10)의 부팅 과정 중 문제가 발생한 경우, 그 원인은 다양하게 있을 수 있다. 그런데 문제 발생의 원인이 IROM(20)에 저장된 부팅 코드에 있는 경우 IROM(20)의 부팅 코드를 수정하기 위해서는 시간 및 비용이 많이 든다. 구체적으로, 부팅 코드를 수정한 후 이를 검증하기 위해 시뮬레이션을 수행하고, 검증이 확인된 부팅 코드가 반영된 마스크 ROM을 제조하고, 이를 이용하여 IROM을 제조하기 위해 시간 및 비용이 많이 필요하다.
이를 극복하기 위해, 후술하는 바와 같은 본 발명의 실시예들에 따르면, IROM(20)을 직접 수정하지 않고도, 부팅 코드의 결함으로 인한 장애를 방지하기 위해 패치 코드를 실행한다. 특히, 본 발명의 실시예들에 따르면, 부팅 코드의 복잡도를 비교적 단순하게 유지하면서도, 사용자가 원하는 임의의 동작을 할 수 있는 패치 코드를 실행하도록 할 수 있다.
도 2는 본 발명의 일 실시예에 따른 반도체 시스템에서 사용되는 부팅 코드를 설명하기 위한 개략도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 반도체 시스템(1)에서 사용되는 부팅 코드(200)와 기존의 부팅 코드(100)와의 차이를 알 수 있다.
기존의 부팅 코드(100)에 따르면 순차적으로 로직 A, 로직 B, 인스트럭션 a, 인스트럭션 b, 로직 C, 로직 D, 인스트럭션 c를 실행하도록 되어 있다. 여기서 로직은 복수의 인스트럭션을 포함하여 일련의 동작을 수행하기 위한 코드를 말한다.
이제 부팅 코드(200)를 살펴 보면, 상기 로직 A, 로직 B, 인스트럭션 a, 인스트럭션 b, 로직 C, 로직 D, 인스트럭션 c 사이에 하나 이상의 패치 코드 실행 함수(patchrun)가 삽입되어 있다. 그리고 패치 코드 실행 함수는, 상기 패치 코드 실행 함수를 실행한 후 다시 돌아오기 위한 리턴 주소(return address)인 LR(Linked Register) 주소를 부팅 코드(200)부터 제공받는다. 즉, LR 주소는 패치 코드가 실행될 위치를 특정할 수 있도록 한다. 본 발명의 실시예들에서, 링크드 레지스터(Linked Register, LR)는 프로그램 실행 중 함수(sub routine)가 호출될 때, 상기 프로그램을 수행하는 프로세서(processor) 내부에 리턴(return) 주소를 저장하는 하나의 레지스터일 수 있다.
여기서 주목할 점은, 패치 코드 실행 함수(patchrun)가 부팅 코드(200)로부터 제공받은 LR 주소는 모두 다르게 설정되어, IROM(20)의 부팅 코드 상에서 발생될 수 있는 다양한 상황에 따라, 이를 극복하기 위한 다양한 패치 코드를 적재 적소에 실행시킬 수 있다는 점이다.
예를 들어, 로직 A가 실행되기 전에 미리 처리되어야 할 작업이 있다면, 로직 A를 실행하기 전에 패치 코드 실행 함수(patchrun)를 호출함으로써 그 작업이 실행되도록 할 수 있다. 이 때 패치 코드 실행 함수(patchrun)가 제공받은 LR 주소는 로직 A가 시작하는 주소를 포함할 수 있다. 이에 따라 패치 코드 실행 함수(patchrun)의 실행이 완료된 후에는 로직 A가 실행될 수 있다.
다른 예로, 로직 B에 심각한 오류가 포함되어 다른 로직 E로 대체되어야 한다면, 로직 B를 실행하기 전에 패치 코드 실행 함수(patchrun)을 호출함으로써 로직 B 대신 로직 E가 실행되도록 할 수 있다. 이 때 패치 코드 실행 함수(patchrun)가 제공받은 LR 주소는 로직 B 다음의 주소, 예컨대 인스트럭션 a의 주소를 포함할 수 있다. 이에 따라 패치 코드 실행 함수(patchrun)의 실행이 완료된 후에는 로직 B의 실행이 생략될 수 있다.
또 다른 예로, 로직 C와 로직 D 사이에 지연(delay)을 삽입해야 하는 경우도 있다. 특히 아날로그 회로의 경우, 회로 상의 노드들 상의 값들을 안정적으로 결정하기 위해서는 전파 지연(propagation delay)과 같은 회로 특성으로부터 기인한 시간 차이나, 회로 소자 및 설계 상 특성으로부터 기인하는 시간 차이를 고려해야 하기 때문이다. 이를 위해서, 로직 C를 실행한 후 로직 D를 실행하기 전에 패치 코드 실행 함수(patchrun)를 호출함으로써 로직 C와 로직 D 사이에 지연 로직이 실행되도록 할 수 있다. 이 때 패치 코드 실행 함수(patchrun)가 제공받은 LR 주소는 로직 D의 주소를 포함할 수 있다. 이에 따라 로직 C의 실행이 완료된 후, 패치 코드 실행 함수(patchrun)에 정의된 만큼 지연이 발생하고, 그 후에야 로직 D의 실행이 시작될 수 있다.
또 다른 예로, 로직 A와 로직 B의 실행 순서를 바꾸어야 하는 경우도 있다. 이를 위해, 로직 A를 실행하기 전에 LR 주소가 로직 B의 주소를 갖는 패치 코드 실행 함수(patchrun)을 호출하여 로직 B를 먼저 실행하고, 로직 B의 실행 후에 LR 주소가 로직 A의 주소를 갖는 패치 코드 실행 함수(patchrun)을 호출하여 로직 A가 할 수 있다. 물론 이와 같은 경우, 패치 코드 상에서 무한 루프에 빠지지 않도록 하기 위한 적절한 코드가 삽입될 것이다.
이와 같은 패치 코드 실행 함수(patchrun)를 통해 부팅 코드의 복잡도를 비교적 단순하게 유지하면서도, 사용자가 원하는 임의의 동작을 할 수 있는 패치 코드를 실행하도록 할 수 있다.
도 3은 본 발명의 일 실시예에 따른 반도체 시스템의 일 동작례를 설명하기 위한 개략도이다.
도 3을 참조하면, OTP(40)는 패치 코드(41)를 저장한다. 다시 말해서 패치 코드(41)는 OTP(40)에 프로그램(program)될 수 있다. 한편 패치 코드(41)는 고유 ID(unique ID)를 포함한다. 본 발명의 몇몇의 실시예에서 고유 ID는 앞서 설명한 LR 주소와 동일한 주소 값을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, OTP(40)는 패치 코드 자체를 그대로 저장할 수 있다. 구체적으로 OTP(40)는 부팅 중 발생할 수 있는 장애 유형에 따라 선택적으로 실행될 수 있는 패치 코드를 포함할 수도 있지만, 부팅 중 발생할 수 있는 장애 유형과 무관하게 사용자가 원하는 임의의 인스트럭션들을 포함하는 코드 자체를 그대로 포함하도록 할 수도 있다. 전자의 경우 장애 발생 시 그 유형에 맞는 경우에만 장애 극복이 가능하고 유형에 맞지 않는 장애 발생 시 극복이 어려우나, 후자의 경우에는 어떤 유형의 장애에도 대응할 수 있는 방안을 제공해 줄 수 있다.
SRAM(30)은 패치 코드의 사본(31)을 저장한다. 본 실시예에서, SRAM(30)은 OTP(40)에 저장된 패치 코드를 사본(31)을 저장하므로, SRAM(30)에 저장된 패치 코드의 사본(31) 역시 OTP(40)의 고유 ID와 동일한 값을 갖는 고유 ID를 포함한다.
OTP(40)에 저장된 패치 코드(41)는 반도체 시스템(1)의 부팅 단계에서 SRAM(30)으로 복사될 수 있다. 이 경우는 SRAM(30)을 통해 패치 코드를 실행하는 경우이다.
이와 다르게, 만일 OTP(40)에 저장된 패치 코드(41)의 고유 ID가 '0'이면, 패치 코드(41)는 SRAM(30)으로 복사되지 않고, SRAM(30)의 고유 ID 영역에 '0'이 기록될 수 있다. 이 경우는 IROM(20)의 실행에 있어서 패치 코드를 실행하지 않기로 한 경우이다.
본 실시예에서는 설명의 편의를 위해 패치 코드를 실행하지 않기 위해 고유 ID로 기록되는 것을 '0'이라고 하였으나, 본 발명의 범위가 이에 제한되지 않고, '0'이 아닌 미리 약속된 임의의 값으로 바뀔 수 있음은 해당 기술 분야의 통상의 기술자에게 자명한 것이다.
본 발명의 몇몇의 실시예에서, SRAM(30)은 패치 코드의 사본(31) 뒤에 리턴 인스트럭션(RET instruction)을 추가로 저장할 수도 있다.
도 4는 본 발명의 일 실시예에 따른 반도체 시스템의 일 동작례를 설명하기 위한 개략도이다.
도 4를 참조하면, 프로세서(10)는 SRAM(30)의 패치 코드의 사본(31)의 고유 ID(33)가 '0'이면 패치 코드를 실행시키지 않는다.
본 실시예에서는 설명의 편의를 위해 패치 코드를 실행하지 않기 위해 고유 ID로 기록되는 것을 '0'이라고 하였으나, 본 발명의 범위가 이에 제한되지 않고, '0'이 아닌 미리 약속된 임의의 값으로 바뀔 수 있음은 해당 기술 분야의 통상의 기술자에게 자명한 것이다.
프로세서(10)는 SRAM(30)에 저장된 패치 코드의 사본(31)의 고유 ID(33)와, 패치 코드 실행 함수가 실행될 때 부팅 코드(200)로부터 제공받은 LR 주소(60)가 동일하면 패치 코드의 로직 부분(35)을 실행한다.
여기서, LR 주소(60)는 반도체 시스템이 채용하는 아키텍처에 따라 패치 코드 실행 함수가 호출될 때, 시스템 상에서 자동적으로 결정될 수 있다.
이와 다르게, 프로세서(10)는 SRAM(30)에 저장된 패치 코드의 사본(31)의 고유 ID(33)와, 패치 코드 실행 함수가 실행될 때 부팅 코드(200)로부터 제공받은 LR 주소(60)가 상이하면 패치 코드의 로직 부분(35)을 실행시키지 않는다.
본 실시예에서는, SRAM(30)에 저장된 고유 ID(33)와 패치 코드 실행 함수의 LR 주소(60)를 비교하여, SRAM(30)에 저장된 패치 코드의 사본(31)을 실행시키는 것을 설명하였으나, 본 발명의 범위는 이에 제한되지 않는다.
즉, 본 발명의 다른 몇몇의 실시예에서는, OTP(40)에 저장된 고유 ID와 패치 코드 실행 함수의 LR 주소(60)를 비교하여, OTP(40)에 저장된 패치 코드(41)를 실행시킬 수도 있다.
이와 같은 경우, 프로세서(10)는 OTP(40)의 패치 코드(41)의 고유 ID가 '0'이면 패치 코드를 실행시키지 않는다.
본 실시예에서는 설명의 편의를 위해 패치 코드를 실행하지 않기 위해 고유 ID로 기록되는 것을 '0'이라고 하였으나, 본 발명의 범위가 이에 제한되지 않고, '0'이 아닌 미리 약속된 임의의 값으로 바뀔 수 있음은 해당 기술 분야의 통상의 기술자에게 자명한 것이다.
프로세서(10)는 OTP(40)에 저장된 패치 코드(41)의 고유 ID와, 패치 코드 실행 함수가 실행될 때 부팅 코드(200)로부터 제공받은 LR 주소(60)가 동일하면 패치 코드(41)의 로직 부분을 실행한다.
이와 다르게, 프로세서(10)는 OTP(40)에 저장된 패치 코드(41)의 고유 ID와, 패치 코드 실행 함수함수가 실행될 때 부팅 코드(200)로부터 제공받은 LR 주소(60)가 상이하면 패치 코드(41)의 로직 부분을 실행시키지 않는다.
도 2를 다시 함께 참조하면, 도 2와 관련하여 로직 A와 로직 B의 실행 순서를 바꾸어야 하는 경우는 다음과 같을 수 있다.
먼저 패치 코드(41)의 고유 ID를 OTP(40)에 저장한다. OTP(40)에 저장된 패치 코드(41)는 SRAM(30)으로 복사된 후, 로직 A가 실행되기 전에 호출되는 패치 코드 실행 함수(patchrun)가 실행될 때마다 부트 코드(200)에서 제공받은 LR 주소와 비교하기 위해 사용된다. 로직 A가 실행되기 전에 호출되는 패치 코드 실행 함수(patchrun)가 실행되고 SRAM(30)의 UID(33)가 LR 주소와 일치하면 SRAM(30)에 저장된 패치 코드의 사본(31)(구체적으로 로직 부분(35))이 실행된다.
SRAM(30)에 저장된 패치 코드의 사본(31)은 UID(33)를 변경하여, 로직 B의 실행 후에 호출되는 패치 코드 실행 함수(patchrun)이 의해 패치 코드가 실행될 수 있도록 하고, 로직 A의 실행을 생략하고 로직 B가 바로 실행될 수 있도록 점프한다.
로직 B가 실행된 이후 다시 로직 B의 실행 후에 호출되는 패치 코드 실행 함수(patchrun)가 부트 코드(200)로부터 제공받은 LR 주소와, SRAM(30)의 UID(33)가 일치하여 패치 코드의 사본(31)(구체적으로 로직 부분(35))이 실행되면, 패치 코드에서 로직 A가 호출되고 다음으로 인스트럭션 a가 실행되도록 할 수 있다.
도 5는 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 흐름도이다.
도 5를 참조하면, 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법은 다음 단계들을 포함할 수 있다.
본 실시예에서, 단계(S501 내지 S511)는 초기화 단계들을 나타낸 것이다.
단계(S501)에서, 패치 코드를 실행시키기 위한 패치 코드 실행 함수를 사용할 것인지 여부를 결정한다. 반도체 시스템(1) 상에서 패치 코드 실행 함수를 비활성화하기로 설정한 경우(S501, Y), 바로 리턴한다(S511).
이와 다르게 반도체 시스템(1) 상에서 패치 코드 실행 함수를 활성화하기로 설정한 경우(S501, N), 단계(S503)에서, OTP(40)의 고유 ID가 '0'인지 검사한다. 만일 고유 ID가 '0'에 해당하는 경우(S503, Y), 단계(S505)에서 SRAM(30)의 고유 ID도 '0'으로 기록한 후, 리턴한다(S511).
이와 다르게 고유 ID가 '0'에 해당하지 않는 경우(S503, N), 단계(S507)에서 패치 코드를 OTP(40)로부터 SRAM(30)으로 복사한다.
본 실시예에서는 설명의 편의를 위해 패치 코드를 실행하지 않기 위해 고유 ID로 기록되는 것을 '0'이라고 하였으나, 본 발명의 범위가 이에 제한되지 않고, '0'이 아닌 미리 약속된 임의의 값으로 바뀔 수 있음은 해당 기술 분야의 통상의 기술자에게 자명한 것이다.
이후 단계(509)에서, 패치 코드의 사본(31) 뒤에 리턴 인스트럭션(RET instruction)을 추가로 저장한 후, 리턴(S511)한다.
도 6은 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 흐름도이다.
도 6을 참조하면, 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법은 다음 단계들을 포함할 수 있다.
본 실시예에서, 단계(S601 내지 S609)는 초기화 단계 이후의 단계들을 나타낸 것이다.
단계(S601)에서, 패치 코드를 실행시키기 위한 패치 코드 실행 함수를 사용할 것인지 여부를 결정한다. 반도체 시스템(1) 상에서 패치 코드 실행 함수를 비활성화하기로 설정한 경우(S601, Y), 바로 리턴한다(S609).
이와 다르게 반도체 시스템(1) 상에서 패치 코드 실행 함수를 활성화하기로 설정한 경우(S601, N), 단계(S603)에서, SRAM(30)의 고유 ID가 '0'인지 검사한다. 만일 고유 ID가 '0'에 해당하는 경우(S603, Y), 바로 리턴한다(S609).
본 실시예에서는 설명의 편의를 위해 패치 코드를 실행하지 않기 위해 고유 ID로 기록되는 것을 '0'이라고 하였으나, 본 발명의 범위가 이에 제한되지 않고, '0'이 아닌 미리 약속된 임의의 값으로 바뀔 수 있음은 해당 기술 분야의 통상의 기술자에게 자명한 것이다.
이와 다르게 고유 ID가 '0'에 해당하지 않는 경우(S603, N), 단계(S605)에서 SRAM(30)의 고유 ID가 LR 주소(60)와 동일한지 여부를 검사한다.
SRAM(30)의 고유 ID가 LR 주소(60)와 상이한 경우(S605, N), 바로 리턴한다(S607).
이와 다르게 SRAM(30)의 고유 ID가 LR 주소(60)와 동일한 경우(S605, Y), SRAM(30)에 저장된 패치 코드를 실행한다(S609).
한편, 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법은, 고유 ID를 포함하는 패치 코드를 저장하는 비휘발성 메모리를 제공하고, 부팅 코드를 저장하는 IROM을 제공하는 것을 포함할 수 있다. 여기서, 상기 부팅 코드는 상기 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 상기 패치 코드가 실행될 위치를 특정하기 위한 LR 주소를 포함할 수 있다.
또한, 상기 방법은, 패치 코드의 사본을 저장하는 SRAM을 제공하는 것을 포함할 수 있다. 여기서, 패치 코드의 사본은 고유 ID를 포함할 수 있다.
또한, 상기 방법은, 비휘발성 메모리에 저장된 상기 패치 코드의 고유 ID와, 패치 코드 실행 함수가 실행될 때 상기 부팅 코드로부터 제공받은의 LR 주소를 비교하고, 비교 결과에 따라 SRAM에 저장된 패치 코드를 실행시키는 것을 포함할 수 있다.
이제까지 설명한 본 발명의 다양한 실시예에 따르면, IROM(20)을 직접 수정하지 않고도, 부팅 코드의 결함으로 인한 장애를 방지하기 위해 패치 코드를 실행한다. 특히, 본 발명의 실시예들에 따르면, 부팅 코드의 복잡도를 비교적 단순하게 유지하면서도, 사용자가 원하는 임의의 동작을 할 수 있는 패치 코드를 실행하도록 할 수 있다. 따라서 IROM의 부팅 코드에 대한 문제를 해결하면서도 시간과 비용을 절약할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
1: 반도체 시스템 10: 프로세서
20: IROM 30: SRAM
40: OTP 50: 버스
60: LR

Claims (20)

  1. 패치 코드를 저장하되, 상기 패치 코드는 고유 ID(unique ID)를 포함하는 비휘발성 메모리;
    부팅 코드를 저장하되, 상기 부팅 코드는 상기 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 상기 패치 코드가 실행될 위치를 특정하기 위한 LR(Linked Register) 주소를 포함하는 IROM(Internal Read Only Memory);
    상기 패치 코드의 사본을 저장하되, 상기 패치 코드의 사본은 상기 고유 ID를 포함하는 SRAM(Static Random Access Memory); 및
    상기 패치 코드의 사본을 실행시키는 프로세서를 포함하고,
    상기 패치 코드 실행 함수는 상기 비휘발성 메모리에 저장된 상기 패치 코드의 상기 고유 ID와, 상기 패치 코드 실행 함수가 실행될 때 상기 부팅 코드로부터 제공받은 상기 LR 주소를 비교하고,
    상기 프로세서는 상기 비교 결과에 따라 상기 SRAM에 저장된 패치 코드의 사본을 실행시키는 반도체 시스템.
  2. 제1항에 있어서,
    상기 비휘발성 메모리는 상기 패치 코드 자체를 그대로 저장하는 반도체 시스템.
  3. 제1항에 있어서,
    상기 비휘발성 메모리는 OTP(One Time Programmable) 메모리를 포함하는 반도체 시스템.
  4. 제3항에 있어서,
    상기 패치 코드는 상기 비휘발성 메모리에 프로그램(program)되는 반도체 시스템.
  5. 제1항에 있어서,
    상기 비휘발성 메모리에 저장된 패치 코드는, 상기 반도체 시스템의 부팅 단계에서 상기 SRAM으로 복사되는 반도체 시스템.
  6. 제1항에 있어서,
    상기 프로세서는 상기 SRAM에 저장된 상기 패치 코드의 사본의 상기 고유 ID가 '0'이면 상기 패치 코드를 실행시키지 않는 반도체 시스템.
  7. 제1항에 있어서,
    상기 프로세서는 상기 SRAM에 저장된 상기 패치 코드의 사본의 상기 고유 ID와 상기 부팅 코드로부터 제공받은 상기 LR 주소가 동일하면 상기 패치 코드를 실행시키는 반도체 시스템.
  8. 제1항에 있어서,
    상기 프로세서는 상기 SRAM에 저장된 상기 패치 코드의 사본의 상기 고유 ID와 상기 부팅 코드로부터 제공받은 상기 LR 주소가 상이하면 상기 패치 코드를 실행시키지 않는 반도체 시스템.
  9. 패치 코드를 저장하되, 상기 패치 코드는 고유 ID(unique ID)를 포함하는 비휘발성 메모리;
    부팅 코드를 저장하되, 상기 부팅 코드는 상기 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 상기 패치 코드가 실행될 위치를 특정하기 위한 LR(Linked Register) 주소를 포함하는 IROM(Internal Read Only Memory); 및
    프로세서를 포함하고,
    상기 패치 코드 실행 함수는 상기 비휘발성 메모리에 저장된 상기 패치 코드의 상기 고유 ID와, 상기 패치 코드 실행 함수가 실행될 때 상기 부팅 코드로부터 제공받은 상기 LR 주소를 비교하고,
    상기 프로세서는 상기 비교 결과에 따라 상기 패치 코드를 실행시키는 반도체 시스템.
  10. 제9항에 있어서,
    상기 비휘발성 메모리는 상기 패치 코드 자체를 그대로 저장하는 반도체 시스템.
  11. 제9항에 있어서,
    상기 비휘발성 메모리는 OTP(One Time Programmable) 메모리를 포함하는 반도체 시스템.
  12. 제11항에 있어서,
    상기 패치 코드는 상기 비휘발성 메모리에 프로그램(program)되는 반도체 시스템.
  13. 제9항에 있어서,
    상기 프로세서는 상기 패치 코드의 상기 고유 ID가 '0'이면 상기 패치 코드를 실행시키지 않는 반도체 시스템.
  14. 제9항에 있어서,
    상기 프로세서는 상기 패치 코드의 상기 고유 ID와 상기 패치 코드 실행 함수의 상기 LR 주소가 동일하면 상기 패치 코드를 실행시키는 반도체 시스템.
  15. 제9항에 있어서,
    상기 프로세서는 상기 패치 코드의 상기 고유 ID와 상기 패치 코드 실행 함수의 상기 LR 주소가 상이하면 상기 패치 코드를 실행시키지 않는 반도체 시스템.
  16. 고유 ID(unique ID)를 포함하는 패치 코드를 저장하는 비휘발성 메모리를 제공하고,
    부팅 코드를 저장하는 IROM(Internal Read Only Memory)을 제공하되, 상기 부팅 코드는 상기 패치 코드를 실행시키기 위한 패치 코드 실행 함수 및 상기 패치 코드가 실행될 위치를 특정하기 위한 LR(Linked Register) 주소를 포함하고,
    상기 패치 코드의 사본을 저장하는 SRAM(Static Random Access Memory)을 제공하되, 상기 패치 코드의 사본은 상기 고유 ID를 포함하고,
    상기 비휘발성 메모리에 저장된 상기 패치 코드의 상기 고유 ID와, 상기 패치 코드 실행 함수가 실행될 때 상기 부팅 코드로부터 제공받은 상기 LR 주소를 비교하고,
    프로세서를 이용하여 상기 비교 결과에 따라 상기 SRAM에 저장된 패치 코드의 사본을 실행시키는 것을 포함하는 반도체 장치의 동작 방법.
  17. 제16항에 있어서,
    상기 비휘발성 메모리에 저장된 패치 코드는, 상기 반도체 시스템의 부팅 단계에서 상기 SRAM으로 복사되는 반도체 장치의 동작 방법.
  18. 제16항에 있어서,
    상기 프로세서는 상기 SRAM에 저장된 상기 패치 코드의 사본의 상기 고유 ID가 '0'이면 상기 패치 코드를 실행시키지 않는 반도체 장치의 동작 방법.
  19. 제16항에 있어서,
    상기 프로세서는 상기 SRAM에 저장된 상기 패치 코드의 사본의 상기 고유 ID와 상기 부팅 코드로부터 제공받은 상기 LR 주소가 동일하면 상기 패치 코드를 실행시키는 반도체 장치의 동작 방법.
  20. 제16항에 있어서,
    상기 프로세서는 상기 SRAM에 저장된 상기 패치 코드의 사본의 상기 고유 ID와 상기 부팅 코드로부터 제공받은 상기 LR 주소가 상이하면 상기 패치 코드를 실행시키지 않는 반도체 장치의 동작 방법.
KR1020170014216A 2017-02-01 2017-02-01 반도체 시스템 및 반도체 장치의 동작 방법 KR102629408B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020170014216A KR102629408B1 (ko) 2017-02-01 2017-02-01 반도체 시스템 및 반도체 장치의 동작 방법
US15/658,976 US10459715B2 (en) 2017-02-01 2017-07-25 Patching boot data utilizing one-time programmable memory and copy patch code instructions
TW106124990A TWI784961B (zh) 2017-02-01 2017-07-26 半導體系統以及操作半導體裝置的方法
CN201710971575.1A CN108376085B (zh) 2017-02-01 2017-10-18 半导体系统及操作半导体装置的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170014216A KR102629408B1 (ko) 2017-02-01 2017-02-01 반도체 시스템 및 반도체 장치의 동작 방법

Publications (2)

Publication Number Publication Date
KR20180089631A true KR20180089631A (ko) 2018-08-09
KR102629408B1 KR102629408B1 (ko) 2024-01-24

Family

ID=62979795

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170014216A KR102629408B1 (ko) 2017-02-01 2017-02-01 반도체 시스템 및 반도체 장치의 동작 방법

Country Status (4)

Country Link
US (1) US10459715B2 (ko)
KR (1) KR102629408B1 (ko)
CN (1) CN108376085B (ko)
TW (1) TWI784961B (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10990384B2 (en) * 2018-09-27 2021-04-27 Intel Corporation System, apparatus and method for dynamic update to code stored in a read-only memory (ROM)
KR102567097B1 (ko) 2018-12-05 2023-08-14 삼성전자주식회사 임베디드 시스템의 부트 롬 업데이트 방법 및 부팅 방법
KR20200075184A (ko) 2018-12-17 2020-06-26 삼성전자주식회사 불휘발성 메모리 장치 및 그것의 동작 방법
US11335405B2 (en) 2018-12-17 2022-05-17 Samsung Electronics Co., Ltd. Nonvolatile memory device and operation method thereof
CN110187920B (zh) * 2019-04-01 2022-06-10 深圳市德明利技术股份有限公司 基于otp的主控芯片的boot代码扩展方法
CN110308920B (zh) * 2019-05-31 2023-05-12 北京控制工程研究所 一种不影响正常运行的在轨修改星上产品软件的方法
CN112329373A (zh) * 2021-01-04 2021-02-05 南京芯视界微电子科技有限公司 用于飞行时间测距芯片的数据处理系统及其方法
CN115543487A (zh) * 2022-11-25 2022-12-30 北京得瑞领新科技有限公司 基于otp的只读存储器中启动代码扩展方法及芯片

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100092752A (ko) * 2009-02-13 2010-08-23 삼성전자주식회사 버퍼램을 포함하는 불휘발성 메모리 장치 및 그것의 부트 코드 관리 방법
KR20150120429A (ko) * 2013-02-22 2015-10-27 마벨 월드 트레이드 리미티드 판독 전용 메모리의 부트 코드 패칭

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6260157B1 (en) * 1999-02-16 2001-07-10 Kurt Schurecht Patching of a read only memory
US6891765B2 (en) * 2003-08-05 2005-05-10 Via Telecom, Inc. Circuit and/or method for implementing a patch mechanism for embedded program ROM
US20060265692A1 (en) * 2005-05-20 2006-11-23 Mengjin Su Method, apparatus, and computer program product for code patching
US20070083713A1 (en) * 2005-10-11 2007-04-12 Antonio Torrini System on a chip integrated circuit, processing system and methods for use therewith
US20070113064A1 (en) * 2005-11-17 2007-05-17 Longyin Wei Method and system for secure code patching
US9348730B2 (en) 2007-01-31 2016-05-24 Standard Microsystems Corporation Firmware ROM patch method
US20090031103A1 (en) 2007-07-24 2009-01-29 Via Technologies Mechanism for implementing a microcode patch during fabrication
US20090271593A1 (en) * 2008-04-29 2009-10-29 Mediatek Inc. Patching device for patching rom code, method for patching rom code, and electronic device utilizing the same
WO2009156790A1 (en) 2008-06-23 2009-12-30 Freescale Semiconductor, Inc. Patching of a read-only memory
US20100106953A1 (en) 2008-10-23 2010-04-29 Horizon Semiconductors Ltd. Method for patching rom boot code
CN102265263A (zh) * 2008-12-24 2011-11-30 松下电器产业株式会社 总线控制器及初始引导程序的修补方法
EP2660713B1 (en) * 2012-05-03 2015-03-04 Nxp B.V. Patch mechanism in embedded controller for memory access
EP2778905A1 (en) * 2013-03-15 2014-09-17 Dialog Semiconductor B.V. Integrated circuit with a patching function
KR102108838B1 (ko) 2013-06-18 2020-05-11 삼성전자주식회사 임베디드 메모리 장치 및 그것을 포함한 메모리 컨트롤러
US9471785B2 (en) * 2013-08-30 2016-10-18 Freescale Semiconductor, Inc. Systems and methods for secure boot ROM patch
US20150242213A1 (en) 2014-02-23 2015-08-27 Qualcomm Incorporated System and method for modification of coded instructions in read-only memory using one-time programmable memory
US9547489B2 (en) 2014-03-31 2017-01-17 Qualcomm Incorporated System and method for modifying a sequence of instructions in a read-only memory of a computing device
US9395975B2 (en) 2014-07-21 2016-07-19 Sandisk Technologies Llc Method and system for generating a ROM patch

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100092752A (ko) * 2009-02-13 2010-08-23 삼성전자주식회사 버퍼램을 포함하는 불휘발성 메모리 장치 및 그것의 부트 코드 관리 방법
KR20150120429A (ko) * 2013-02-22 2015-10-27 마벨 월드 트레이드 리미티드 판독 전용 메모리의 부트 코드 패칭

Also Published As

Publication number Publication date
CN108376085A (zh) 2018-08-07
US10459715B2 (en) 2019-10-29
TWI784961B (zh) 2022-12-01
CN108376085B (zh) 2023-10-20
KR102629408B1 (ko) 2024-01-24
US20180217834A1 (en) 2018-08-02
TW201830242A (zh) 2018-08-16

Similar Documents

Publication Publication Date Title
KR20180089631A (ko) 반도체 시스템 및 반도체 장치의 동작 방법
US9471785B2 (en) Systems and methods for secure boot ROM patch
US8341476B1 (en) I-R voltage drop screening when executing a memory built-in self test
US5813043A (en) Method and system including memory patching utilizing a transmission control signal and circuit
GB2570161A (en) Simulation of exclusive instructions
JP2008009721A (ja) 評価システム及びその評価方法
JP3563768B2 (ja) Romプログラム変更装置
JP2875842B2 (ja) プログラマブルコントローラ
US7640421B1 (en) Method and system for determining context switch state
US7340561B2 (en) Computer memory initialization
US7047444B2 (en) Address selection for testing of a microprocessor
US20100146332A1 (en) Data correction circuit and semiconductor integrated circuit
JP7394849B2 (ja) メモリ組込み自己テストコントローラを用いる読み出し専用メモリのテスト
CN114218032A (zh) 一种硬件设计验证方法、装置及电子设备和存储介质
JP4828996B2 (ja) 情報処理装置及びそれを用いたセキュリティ解除プログラムの不正実行禁止方法
JPWO2018100633A1 (ja) 制御装置およびプログラム更新方法
JP2001117791A (ja) 割込命令チェック装置及び記録媒体
US20060190675A1 (en) Control apparatus
CN117894362A (zh) 一次性可编程存储器修改方法、装置和电子设备
JP4333749B2 (ja) 演算システム,演算装置およびプログラム
JP2587468B2 (ja) ロツクデータ設定装置
CN116560703A (zh) Rom功能定制方法、装置、处理器、交换芯片及存储介质
JP4236808B2 (ja) 不揮発メモリ内蔵マイクロコンピュータとその不揮発メモリの自己書換方法
JP2006202034A (ja) 半導体集積回路装置
JP2547329B2 (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