KR20170140225A - 향상된 명령어 세트를 구비한 중앙 처리 유닛 - Google Patents

향상된 명령어 세트를 구비한 중앙 처리 유닛 Download PDF

Info

Publication number
KR20170140225A
KR20170140225A KR1020177030823A KR20177030823A KR20170140225A KR 20170140225 A KR20170140225 A KR 20170140225A KR 1020177030823 A KR1020177030823 A KR 1020177030823A KR 20177030823 A KR20177030823 A KR 20177030823A KR 20170140225 A KR20170140225 A KR 20170140225A
Authority
KR
South Korea
Prior art keywords
segment
volatile memory
protection
information
memory
Prior art date
Application number
KR1020177030823A
Other languages
English (en)
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 마이크로칩 테크놀로지 인코포레이티드
Publication of KR20170140225A publication Critical patent/KR20170140225A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement

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 Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Executing Machine-Instructions (AREA)
  • Storage Device Security (AREA)
  • Advance Control (AREA)

Abstract

집적회로는, 비휘발성 메모리에 결합된 중앙 처리 유닛을 구비한 마스터 처리 코어, 상기 마스터 처리 코어와는 독립적으로 동작하며 휘발성 프로그램 메모리에 결합된 중앙 처리 유닛을 구비한 슬레이브 처리 코어를 포함하고, 이때, 상기 마스터 중앙 처리 유닛은 프로그램 명령어들을 상기 슬레이브 처리 코어의 상기 비휘발성 메모리로 전송하도록 구성되고, 그리고, 상기 프로그램 명령어들의 전송은 상기 마스터 처리 코어의 상기 중앙 처리 유닛 내의 전용 명령어를 실행함으로써 수행된다.

Description

향상된 명령어 세트를 구비한 중앙 처리 유닛
본 출원은 2015년 04월 30일자로 출원된, 동일 출원인에 의한 미국 가출원 제62/154,927호의 우선이익을 주장하며, 상기 가출원은 모든 목적을 위해 본 출원에 참조로 통합된다.
본 개시는 중앙 처리 유닛들(CPU)에 관한 것으로서, 특히 디지털 신호 처리 유닛들(DSP)을 구비한 마이크로컨트롤러들에 관한 것이다. 본 개시는 또한 멀티-프로세서 집적회로 디바이스들에 관한 것으로서, 특히 다중 프로세서들을 구비한 마이크로컨트롤러들에 관한 것이다.
임베디드 시스템들은 일반적으로, 중앙 처리 유닛(CPU), 메모리 및 복수의 주변 디바이스들을 포함하는 것으로서 단일 칩 시스템 또는 단일 칩 마이크로컨트롤러를 구성한다. 더 발전된 시스템들은 둘 이상의 CPU를 포함한다. 또한 CPU는, 본 출원의 양수인에 의해 제조된 dsPIC 코어들과 같은 디지털 신호 처리 기능부들(digital signal processing capabilities)을 갖도록 향상될 수 있다. 도 1은 이러한 처리 코어의 블록도를 도시한다. 알 수 있듯이, 이 코어는, X 데이터 RAM 및 별도의 Y 데이터 RAM과 같은 전형적인 디지털 신호 처리 기능부를 가지며 또한, 상기 RAM들이 둘 다 병렬로 액세스될 수 있게끔 상기 RAM들과 레지스터 파일에 결합된 DSP 엔진을 갖는다. 이 처리 코어의 다른 전형적인 엘리먼트들이 도시되어 있다. 또한, 이 종래의 DSP 마이크로컨트롤러는, 도 1의 아래쪽에, 시스템 버스를 통해 코어에 결합된 특정의 주변 디바이스들을 보여준다. 도 2는, 레지스터 파일의 작업 레지스터들과 DSP 엔진의 누산기와 같은, 코어의 레지스터들과 다른 전형적인 DSP 레지스터들을 도시한다. 도 3은 도 1의 블록도의 DSP 엔진을 보다 상세하게 도시한 블록도이다. 도 1 내지 도 3에 도시된 바와 같은 처리 코어는, 디지털 신호 처리 기능부를 포함하는 단일 처리 코어이다. 그것은 멀티-코어 디바이스에서 코어들 중 하나로서 사용될 수 있다.
특히, 이러한 처리 코어가 예를 들면 자체의 코어들 중 적어도 하나 내에 신호 처리 기능부를 포함하는 듀얼 코어 마이크로컨트롤러와 같은 멀티-코어 디바이스에서 사용되는 경우에, 이러한 처리 코어를 위한 개선된 명령어 세트에 대한 필요성이 존재한다.
멀티-프로세서 코어 마이크로컨트롤러들은 완전히 분리된 코어들로써 설계될 수 있으며, 각 코어는 서로다른 시스템 클록으로 동작할 수 있다. 따라서, 두 개 또는 그 이상의 코어들 사이의 통신을 가능케하기 위해, 특정의 통신 인터페이스가 필요하다. 특히, 멀티-프로세서 디바이스의 프로세서 메모리들 사이에서 코드로 보호된 데이터(code protected data)를 이동시키기 위한 수단이 필요하다. 해결책은, 완전히 구성될 수 있어야 하지만 실리콘 사용과 관련하여 효율적이어야 한다.
멀티-프로세서 마이크로컨트롤러의 마스터-슬레이브 구성에서 프로그램이 슬레이브에 로드된 이후에 코드 보호가 유지되면서 듀얼-코어 슬레이브 프로세서 프로그램 로드/검증 방법을 지원하는 것이 필요하다.
일 실시예에 따르면, 집적회로는, 비휘발성 메모리에 결합된 중앙 처리 유닛을 구비한 마스터 처리 코어; 및 상기 마스터 처리 코어와는 독립적으로 동작하며 휘발성 프로그램 메모리에 결합된 중앙 처리 유닛을 구비한 슬레이브 처리 코어를 포함하고, 상기 마스터 중앙 처리 유닛은 프로그램 명령어들을 상기 슬레이브 처리 코어의 상기 비휘발성 메모리로 전송하도록 구성되고, 그리고 상기 프로그램 명령어들의 전송은 상기 마스터 처리 코어의 상기 중앙 처리 유닛 내의 전용 명령어를 실행함으로써 수행될 수 있다.
추가 실시예에 따르면, 상기 전용 명령어는 소스 어드레스를 정의하는 제1 피연산자와 목적지 어드레스를 정의하는 제2 피연산자를 구비하고, 상기 목적지 어드레스는 상기 명령어가 실행된 이후에 자동으로 증분된다. 추가 실시예에 따르면, 상기 전용 명령어는 정보 워드가 버퍼로 전송되게 하고, 그리고 상기 정보는 상기 버퍼로부터 상기 휘발성 프로그램 메모리에 기록된다. 추가 실시예에 따르면, 상기 명령어는 상기 비휘발성 메모리가 상기 정보를 출력하게 하고, 그 결과로 상기 정보는 상기 버퍼에 의해 캡처된다. 추가 실시예에 따르면, 상기 정보는 24 비트 워드이다. 추가 실시예에 따르면, 상기 집적회로는 복수의 슬레이브 처리 코어들을 포함하고, 상기 전용 명령어는 타겟 슬레이브 처리 유닛을 정의하는 제3 피연산자를 구비한다. 추가 실시예에 따르면, 상기 제1 피연산자에 저장된 상기 소스 어드레스는 상기 명령어가 실행된 이후에 선택에 따라 자동으로 증분될 수 있다. 추가 실시예에 따르면, 상기 소스 어드레스는 상기 마스터 처리 코어와 관련된 주변 디바이스의 특수 기능 레지스터이다. 추가 실시예에 따르면, 상기 주변 디바이스는 직렬 통신 주변기기이다. 추가 실시예에 따르면, 상기 주변 디바이스는 병렬 입력 포트이다. 추가 실시예에 따르면, 상기 마스터 처리 코어는, 상기 비휘발성 프로그램 메모리에 저장된 정보를 검증하는 추가 명령어를 더 실행할 수 있다. 추가 실시예에 따르면, 상기 추가 명령어는 제1 정보가 상기 버퍼로 전송되게 하고, 그리고 상기 버퍼의 컨텐츠는 상기 휘발성 메모리에 저장된 제2 정보와 비교된다. 추가 실시예에 따르면, 상기 추가 명령어는, 상기 제1 정보를 출력하도록 상기 비휘발성 메모리에 적용되는 제1 어드레스와 상기 제2 정보를 출력하도록 상기 휘발성 메모리에 적용되는 제2 어드레스를 포함한다. 추가 실시예에 따르면, 상기 추가 명령어는, 상기 제1 정보와 상기 제2 정보에 관련된 에러 수정 코드(ECC)를 더 검증한다. 추가 실시예에 따르면, 상기 비휘발성 메모리와 관련된 상기 ECC는 상기 비휘발성 메모리로부터 판독될 수 있고, 그리고 상기 소스와 관련된 상기 ECC는 별도로 생성된다. 추가 실시예에 따르면, 상기 제1 처리 코어의 상기 비휘발성 메모리는 보호 계획(scheme)에 의해 정의된 코드 보호를 포함하고, 상기 슬레이브 처리 유닛의 상기 휘발성 프로그램 메모리는 상기 보호 계획의 설정값에 의존하는 코드 보호를 구비한다. 추가 실시예에 따르면, 상기 보호 계획은 상기 비휘발성 메모리의 복수의 세그먼트들을 정의하고, 각각의 세그먼트는 상기 보호 계획의 보호 설정값을 구비한다. 추가 실시예에 따르면, 상기 비휘발성 메모리를 위한 각각의 보호 설정값은, 판독 동작을 위한 설정값 및 프로그래밍 또는 소거 동작을 위한 설정값을 구비한다. 추가 실시예에 따르면, 상기 보호 계획은 미리정의된 개수의 보안 레벨들을 제공하고, 각각의 보안 레벨은 각각의 세그먼트를 위한 보호 설정값을 정의한다. 추가 실시예에 따르면, 상기 휘발성 프로그램 메모리를 위한 상기 코드 보호는 상기 비휘발성 메모리의 상기 세그먼트들 중 하나를 위한 상기 코드 보호와 동일하다. 추가 실시예에 따르면, 상기 비휘발성 메모리의 어느 세그먼트가 상기 휘발성 메모리를 위한 상기 코드 보호 설정값을 제공하도록 선택되는지를 저장하는 소정의 레지스터를 더 포함한다. 추가 실시예에 따르면, 상기 비휘발성 메모리의 판독 동작을 위한 설정값은 상기 휘발성 메모리의 판독 동작 및 기록 동작에 적용된다. 추가 실시예에 따르면, 세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 명령어는 다른 세그먼트에서 동작불가하다. 추가 실시예에 따르면, 세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 판독 명령어는 다른 세그먼트의 미리정의된 영역에서만 동작가능하다. 추가 실시예에 따르면, 상기 미리정의된 영역은 인터럽트 벡터들을 저장한다. 추가 실시예에 따르면, 상기 비휘발성 메모리는 부트 세그먼트와 일반 세그먼트를 포함한다. 추가 실시예에 따르면, 상기 비휘발성 메모리는 테스트 세그먼트를 더 포함한다.
또하나의 실시예에 따르면, 비휘발성 메모리에 결합된 제1 중앙 처리 유닛을 구비한 제1 처리 코어와 상기 제1 처리 코어와는 독립적으로 동작하며 휘발성 프로그램 메모리에 결합된 제2 중앙 처리 유닛을 구비한 제2 처리 코어를 포함하는 멀티-코어 집적회로 처리 디바이스 내의 처리 코어를 위한 펌웨어를 제공하는 방법으로서, 상기 방법은: 데이터가 상기 슬레이브 처리 코어의 상기 비휘발성 메모리에 기록되게 하는 전용 명령어를 상기 제1 중앙 처리 유닛 내에서 실행하는 것을 포함할 수 있다.
상기 방법의 추가 실시예에 따르면, 상기 전용 명령어는, 소스 어드레스를 정의하는 제1 피연산자와 목적지 어드레스를 정의하는 제2 피연산자를 구비하고, 상기 목적지 어드레스는 상기 명령어가 실행된 이후에 자동으로 증분된다. 상기 방법의 추가 실시예에 따르면, 상기 전용 명령어의 실행시, 정보 워드가 상기 비휘발성 메모리로부터 버퍼로 전송되고, 상기 정보는 상기 버퍼로부터 상기 휘발성 프로그램 메모리에 기록된다. 상기 방법의 추가 실시예에 따르면, 상기 전용 명령어를 루프에서 반복하는 것을 더 포함한다. 상기 방법의 추가 실시예에 따르면, 상기 집적회로는 복수의 슬레이브 처리 코어들을 포함하고, 상기 전용 명령어는 타겟 슬레이브 처리 유닛을 정의하는 제3 피연산자를 구비한다. 상기 방법의 추가 실시예에 따르면, 상기 제1 피연산자에 저장된 상기 소스 어드레스는 상기 명령어가 실행된 이후에 선택에 따라 자동으로 증분될 수 있다. 상기 방법의 추가 실시예에 따르면, 상기 비휘발성 프로그램 메모리에 저장된 정보를 검증하는 추가 명령어를 상기 마스터 처리 코어에 의해 실행하는 것을 더 포함한다. 상기 방법의 추가 실시예에 따르면, 상기 추가 명령어는 제1 정보가 상기 버퍼로 전송되게 하고, 상기 버퍼의 컨텐츠는 상기 휘발성 메모리에 저장된 제2 정보와 비교된다. 상기 방법의 추가 실시예에 따르면, 상기 추가 명령어는, 상기 제1 정보를 출력하도록 상기 비휘발성 메모리에 적용되는 제1 어드레스와 상기 제2 정보를 출력하도록 상기 휘발성 메모리에 적용되는 제2 어드레스를 포함한다. 상기 방법의 추가 실시예에 따르면, 상기 추가 명령어는 상기 제1 정보와 상기 제2 정보에 관련된 에러 수정 코드(ECC)를 더 검증한다. 상기 방법의 추가 실시예에 따르면, 상기 비휘발성 메모리와 관련된 상기 ECC는 상기 비휘발성 메모리로부터 판독가능하고, 상기 소스와 관련된 상기 ECC는 별도로 생성된다. 상기 방법의 추가 실시예에 따르면, 상기 제1 처리 코어의 상기 비휘발성 메모리는 보호 계획에 의해 정의된 코드 보호를 포함하고, 상기 슬레이브 처리 유닛의 상기 휘발성 프로그램 메모리는 상기 보호 계획의 설정값에 의존하는 코드 보호를 구비한다. 상기 방법의 추가 실시예에 따르면, 상기 보호 계획은 상기 비휘발성 메모리의 복수의 세그먼트들을 정의하고, 각각의 세그먼트는 상기 보호 계획의 보호 설정값을 구비한다. 상기 방법의 추가 실시예에 따르면, 상기 비휘발성 메모리를 위한 각각의 보호 설정값은, 판독 동작을 위한 설정값과 프로그래밍 또는 소거 동작을 위한 설정값을 구비한다. 상기 방법의 추가 실시예에 따르면, 상기 보호 계획은 미리정의된 개수의 보안 레벨들을 제공하고, 각각의 보안 레벨은 각각의 세그먼트를 위한 보호 설정값을 정의한다. 상기 방법의 추가 실시예에 따르면, 상기 휘발성 프로그램 메모리를 위한 상기 코드 보호는 상기 비휘발성 메모리의 상기 세그먼트들 중 하나를 위한 상기 코드 보호와 동일하다. 상기 방법의 추가 실시예에 따르면, 상기 비휘발성 메모리의 어느 세그먼트가 상기 휘발성 메모리를 위한 상기 코드 보호 설정값을 제공하도록 선택되는지를 소정의 레지스터가 저장하는 것을 포함한다. 상기 방법의 추가 실시예에 따르면, 상기 비휘발성 메모리의 판독 동작을 위한 설정값은 상기 휘발성 메모리의 판독 동작과 기록 동작에 적용된다. 상기 방법의 추가 실시예에 따르면, 세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 명령어는 다른 세그먼트에서 동작불가하다. 상기 방법의 추가 실시예에 따르면, 세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 판독 명령어는 다른 세그먼트의 미리정의된 영역에서만 동작가능하다. 상기 방법의 추가 실시예에 따르면, 상기 미리정의된 영역은 인터럽트 벡터들을 저장한다. 상기 방법의 추가 실시예에 따르면, 상기 비휘발성 메모리는 부트 세그먼트와 일반 세그먼트를 포함한다. 상기 방법의 추가 실시예에 따르면, 상기 비휘발성 메모리는 테스트 세그먼트를 더 포함한다.
도 1은 디지털 신호 기능부를 구비한 단일 CPU를 갖는 마이크로컨트롤러의 블록도를 도시한다.
도 2는 도 1에 따른 CPU의 다양한 레지스터들을 도시한다.
도 3은 도 1에 따른 CPU의 DSP 엔진의 특정 부분들을 도시한다.
도 4는 일 실시예에 따른 듀얼-코어 마이크로컨트롤러를 도시한다.
도 5는 다양한 실시예들에 따른 듀얼 또는 멀티-코어 마이크로컨트롤러를 도시한다.
도 6은 일부 실시예들에 따라 프로그램 RAM이 어떻게 액세스될 수 있는지의 상세한 내용을 도시한다.
도 7은 플래시 메모리의 세그먼트 구분(segmentations)을 도시한다.
도 8 내지 도 11은 다양한 보안 레벨들의 경우의 테이블들을 도시한다.
도 4 및 도 5에 도시된 바와 같이, 듀얼 또는 멀티 코어 처리 디바이스(400)는, 마스터 중앙 처리 유닛(CPU)(412)을 구비한 마스터 마이크로컨트롤러(410)와 슬레이브 중앙 처리 유닛(422)을 각각이 구비한 하나 이상의 슬레이브 유닛들(420)을 갖도록 설계될 수 있고, 각 슬레이브 중앙 처리 유닛(422)의 코어 설계는 마스터 CPU(412)의 코어 설계와 개괄적으로 동일하거나 유사할 수 있다. 하지만, 다른 실시예들에 따르면, 슬레이브 CPU(422)는 마스터 CPU(412)와 다를 수 있다. 마스터 마이크로컨트롤러는 도 4에 도시된 바와 같이 그 자체의 주변 디바이스들의 세트를 갖는다. 슬레이브 유닛(420)은 그 자체의 주변 디바이스들 세트를 갖거나 갖지 않을 수 있으며, 그래서 자체적으로 마이크로컨트롤러를 형성하거나 형성하지 않을 수 있다. 따라서, 각 마스터와 슬레이브 디바이스는, 사실상 완전히 독립된 처리 디바이스들을 형성하고, 전용 버스 또는 통신 인터페이스(430)와 통신할 수 있다. 도 4 및 도 5는 마스터 마이크로컨트롤러(410)와 단일 슬레이브 마이크로컨트롤러(420)를 갖는 이러한 구조를 도시한다. 통신 인터페이스(430)가 제공되어 두 코어들(410, 420) 간의 통신이 가능하게 된다. 도시된 바와 같이, 각 프로세서(412, 422)는 하버드 구조(Harvard architecture)로 설계될 수 있다. 하지만 다양한 실시예들에 따른 원리들이 폰 노이만 구조(von Neumann architecture)로 쉽게 변환될 수 있다. 마스터 유닛은 예를 들면, 프로그램 메모리로서 사용되는 플래시 메모리(416)와 데이터 메모리로서 사용되는 랜덤 액세스 메모리(414)를 포함하며, 이들 각각은 마스터 코어(412)에 결합된다.
도 4 및 도 5에 도시된 바와 같이, 슬레이브 유닛(420)은 플래시 메모리없이 설계될 수도 있다. 대신 전용 프로그램 랜덤 액세스 메모리(426)가 제공된다. 이 메모리가 휘발성이라는 점에 의해, 다양한 실시예들에 따르면, 그것은 마스터(410)를 통해서 로드될 것이다. 이러한 설계 선택은, 플래시 기술로 인한 병목 현상이 회피될 수 있다는 장점이 있다. 플래시 메모리는 일반적으로 RAM보다 느리다. 그래서, 판독 지연들이 없을 것이고, 슬레이브는 예를 들면 SMPS 애플리케이션들과 같은 특정의 고속 애플리케이션들에서 매우 유용할 수 있는 더 높은 실행 속도로 동작할 수 있을 것이다. 상술한 바와 같이, 둘 이상의 슬레이브 유닛(420)이 다양한 실시예들에 따라 구현될 수 있다. 코어들 둘 다가 동일한 경우에, 마스터 코어(412)는, 슬레이브 유닛(422)에서는 구현되지 않거나 슬레이브 유닛에서는 기능하지 않는 추가 명령어들을 포함하도록 설계될 수 있다. 이러한 추가 명령어들은, 데이터가, 플래시 메모리(416)로부터 또는 외부 소스로부터 슬레이브 디바이스(420)의 PRAM(426)으로 전송되게 할 수 있다. 예를 들면, 일 실시예에 따르면, 다중 코어들은 단일 칩 디바이스 내에 구현될 수 있고, 각 코어는 할당된 구성 레지스터를 구비할 수 있고, 여기서 이러한 레지스터의 비트들 중 하나는 유닛 각자가 마스터인지 또는 슬레이브인지를 정의할 수 있다. 코어들 중 단지 하나를 마스터로 설정하게끔 하는 로직이 제공될 수 있다. 일단 이 비트가 설정되면, 추가 명령어가 실행될 수 있다. 다른 유닛들(슬레이브들)에서, 이 명령어들은 실행되지 않을 것이며, 예를 들면, 그들은 불법(illegal) 연산부호(opcode)들로서 해석될 수 있다.
마스터 유닛(410)에 의해 PRAM(426)에 액세스하는 제어 로직은 도 4에 도시된 바와 같이 버퍼/비교기 유닛(418)을 갖는 마스터 유닛 내에 위치할 수 있다. 대안적으로, 유사한 유닛이 도 5에 도시된 바와 같이 PRAM 래퍼(wrapper) 유닛(428)을 갖는 슬레이브 유닛(420) 내에 배치될 수도 있다. 어느 유닛이든 PRAM이 마스터 유닛(410)에 또는 슬레이브 유닛(420)에 배타적으로 액세스하는 것을 허용하도록 설계된다. 다른 실시예들은, 로직의 일부분을 마스터 코어 내에 위치시키고 다른 부분들은 슬레이브 코어에 위치시킬 수 있으며, 또는 로직을 두 유닛의 외부에 배치할 수 있다. 유사하게, 통신 인터페이스(430)는 어느 하나의 유닛의 내부에 있거나 유닛들 둘 다의 외부에 있을 수 있다. PRAM 액세스 유닛들(418 또는 428)을 위한 추가 제어가 통신 인터페이스(430)에 의해 도 5에 점선으로 표시된 바와 같이 제공될 수 있다. 도 5는 또한 추가 슬레이브 유닛들(440 및 450)을 점선으로 도시한다. 모든 유닛들은 버스와 각 슬레이브 유닛의 관련된 래퍼 유닛들(428)을 통해 연결될 수 있다. 따라서, 실시예들은 듀얼 코어 구현으로 한정되지 않는다. 당업자는 다른 구현이 가능하다는 것을 알 수 있을 것이다.
도 6은 예시적인 인터페이스를 슬레이브 측에서 보여주는 블록도이다. 본 예시의 실시예에서, 마스터 슬레이브 인터페이스는 통신 인터페이스(430)를 형성한다. 두 개의 멀티플렉서들(428a, 428b)은 프로그램 RAM(426)의 데이터로의 액세스와 어드레스 버스로의 액세스를 각각 허용한다. 마스터 유닛(410), 슬레이브 코어(422) 및 PRAM(426)에 연결되는 추가의 액세스 로직(428c)이 도시되어 있다. 본 실시예에서, 통신 인터페이스(430)는 슬레이브 프로세서가 리셋 상태로 유지되는 동안에 마스터 유닛(410)에 액세스하게끔 멀티플렉서들을 제어한다. 일단 PRAM(426)에 슬레이브 펌웨어가 로드되었으면, 멀티플렉서들(428a, 428b)은 슬레이브 유닛(420)으로의 역 액세스(access back)를 허용하도록 제어될 것이고 CPU(422)는 리셋으로부터 해제될 것이다. 액세스 제어 및 데이터 검증 로직(428c)은, 마스터 유닛(410)과 슬레이브 유닛(420) 중 어느 하나로부터 송신될 수 있는, 판독 및 기록 및 인에이블 신호들을 출력(distribute)할 수 있다. 도 6에 도시된 바와 같은 인터페이스는 마스터 유닛(410)과 PRAM(426) 간의 기록 전용 경로(write only path)를 제공할 수 있다. 이러한 구현에서, 액세스 제어 및 데이터 검증 로직(428c)은 기록된 데이터의 검증을 수행하도록 구성될 수 있다. 예를 들면, 하나의 실시예에 따르면, 액세스 제어 및 데이터 검증 로직은, 마스터 유닛(410)에 결합될 때 2개의 서로다른 모드들로 동작할 수 있다. 제1 모드에서, 그것은 슬레이브 펌웨어를 PRAM(426) 내에 기록하기 위한 로직 신호들을 제공하고, 이때 데이터 바이트들은 임의의 적절한 방식으로, 예를 들면 연속으로(consecutively) PRAM(426) 내에 기록된다. 제2 모드에서, 유닛(428c)은 검증 기능을 제공할 수 있다. 송신된 데이터를 기록하는 대신에, 유닛(428c)은 마스터 유닛(410)에 의해 제공된 데이터를 PRAM(426)의 컨텐츠와 비교하여 그것이 정확하게 프로그램되었는지를 검증한다. PRAM과 관련된 마스터/슬레이브 인터페이스의 다른 실시예들이 가능하다.
따라서, 다양한 실시예들에 따르면, 멀티-코어 디바이스, 특히 듀얼 코어 마이크로컨트롤러를 위한 슬레이브 프로세서 로드/검증 방법이 제공될 수 있다. 이것은, 종래의 멀티-코어 디바이스들, 특히, 코어 내의 DSP 엔진을 사용하는 밀집(tight) 제어 루프 애플리케이션들(예를 들어, SMPS 애플리케이션들)과 관련하여, 개선된 효율과 성능을 제공한다. 하지만, 처리 코어가 DSP 엔진을 포함하도록 설계될 필요는 없다. 다양한 실시예들에 따른 원리들은, 종래의 CPU만을 포함하는 처리 코어에 적용된다. 또한, 관련된 C 컴파일러의 효율과 성능이 이러한 개선된 명령어 세트에 의해 개선될 것이다.
다양한 실시예들에 따르면, 신규의 듀얼(멀티)-코어 구조는 슬레이브 코어 프로그램 RAM(PRAM)을 로드하고 검증할 전용 CPU 명령어들을 포함한다. 특히, DSP 기반 애플리케이션들에 대한 성능 요건들이 증가함에 따라, CPU 처리량 특히 DSP 엔진 처리량을 개선하기 위한 필요성이 분명해졌는데: 예를 들면, 속도 증가를 위한 필요성이 존재한다. 일 실시예에 따르면, 듀얼 코어 디바이스는, (예를 들면, 0.75MIPs/MHz에서) 플래시 메모리를 자체의 프로그램 메모리로 사용하는 마스터 유닛(410)에 대해서는 100MHz를 목표로 하고, (예를 들면, 0.9MIPs/MHz에서) PRAM을 자체의 프로그램 메모리로 사용하는 슬레이브 유닛(420)에 대해서는 120MHz를 목표로 한다. 상술한 바와 같이, 슬레이브 유닛(420)의 프로그램 메모리(426)에 대한 PRAM 선택은, 이 유닛이 보다 효율적이면서 더 높은 속도로 동작하게끔 한다. 또한, 일부 실시예들에 따르면, DSP를 위한 하드웨어 컨텍스트 스위칭에서의 지연이 감소될 필요가 있다. 결과적으로, 다른 실시예들에 따르면, ISA 개선들은 DSP 알고리즘의 효율을 개선하기 위해 필요하다. 컴파일러 효율의 증가(gain)들은 비트 필드 명령어들과 일부 실시예들에 따른 레지스터를 보다 유연하게 사용하는 더빠른 분배기를 써서 달성될 수 있다.
이러한 개선들 중 일부는, 신규한 명령어들과 기존의 설계에 최소한으로 변경된 기능부를 추가함으로써 달성될 수 있었다. 다른 개선들은 동일한 반복 비복원 알고리즘(itertive non-restoring algorithm)을 사용하여 분배 동작들을 가속함으로써 달성될 수 있다. 다음의 개선들은 독립적으로 구현될 수 있다. 따라서, 다양한 실시예들은 이러한 개선들의 전부 또는 일부를 사용할 수 있다.
요약하면, CPU 개선들은 다음을 포함할 수 있다: 다음의 DSP 개선들의 일부 또는 전부를 제공하는 듀얼-코어 지원 명령어들: 슬레이브 코어 프로그램 RAM(PRAM)의 로드 및 검증; DSP 누산기들, 상태 및 DSP 엔진 구성을 포함하도록 확장된 하드웨어 컨텍스트(context) 스위치; 데이터 제한(경계선(bounds) 체크) 명령어들; 누산기 32-비트 데이터 로드/저장 명령어들; 그리고 DSP 정규화 명령어들. 달성될 수 있는 컴파일러 효율 향상들은: 비트 필드 명령어들과 분배 명령어의 개선이다.
다양한 실시예들에 따르면, DSP 기능을 구비한 듀얼 코어 마이크로컨트롤러는 슬레이브 프로그램 초기화를 가능케하기 위해 추가된 PRAM 로드(LDSLV) 및 검증(VFSLV) 명령어들을 갖는 슬레이브 코어를 포함할 수 있다. 이러한 명령어들은, 종래의 프로그램 공간 가시성(PSV; program space visibility) 어드레싱 또는 TBLWTx 명령어들을 사용하는 것에 비해서, 데이터를 PRAM의 메모리에 매핑된 이미지로부터 이동시키기 위한 신속한 대안으로서 설계된다. 상기 명령어들은 상술한 바와 같이, CPU가 마스터로 인스턴스(instantiated)될 때(CPU_IS_MASTER=1)에만 인에이블된다. 디스에이블될 때에는, 그것들은 불법의 연산부호들로 간주될 것이다.
PRAM을 로드/검증하기 위해 특유의 명령어들을 사용하는 것의 또하나의 장점은, PRAM을 마스터 어드레스 공간에 재매핑(remap)하지 않아도 됨으로써 또한 기존의 PSV CPU 명령어 흐름을 유지함(그리고 단지 슬레이브가 통과하는 어드레스 및 데이터를 스누프(snoop)하게 함)으로써 설계 및 검증을 간단하게 한다는 것이다. 일 실시예에 따르면, 기존의 MOV 명령어는 슬레이브 PRAM 캡처 기능을 인에이블시키는 제어 플래그를 써서 향상될 수 있다. 하지만, 특유의 명령어들(MOV 연산부호와 유사하지만, PRAM을 마스터 클록 도메인으로 스위칭하고 그것을 로드하도록 명령하기 위해 슬레이브에게 신호를 어서트하기도 함)을 생성하는 것이 더 바람직한데, 그 이유는 그것이 어떻게 PRAM이 초기화되었는지에 대해 사용자에게 더 명료한 레벨(더불어 이러한 연산부호들이 부주의하게 실행되지는 않을 것이므로 약간의 보안)을 추가하게끔 하기 때문이다.
일부 실시예들에 따른 LDSLV 명령어는, 전체 명령어 워드(I-워드)를 PS(플래시)로부터 PS(Save PRAM)으로 2 사이클 내에 이동시킬 수 있으므로, 다른 데이터 이동 명령어들과는 다르다. 각 판독은 24-비트 워드를 플래시로부터 페치(fetch)할 것이고, 이어서 그 워드가 타겟 슬레이브 PRAM에 기록되게 한다. 종래의 dsPIC/PIC24 CPU 구조는 16-비트보다 큰 데이터 값들을 플래시로부터 이동시킬 수단이 없고, 그래서 데이터는 마스터 CPU를 통해 이동될 수 없을 뿐 아니라 (플래시 데이터 버스에서 이용가능한 경우에도) 슬레이브에 의해 캡처될 수 없었다. 따라서, 이러한 신규 명령어들은, 데이터를 실행시키는 프로세서의 본래의 데이터 폭보다 넓은 데이터를 (단일 엔티티로써) 이동시킬 수 있다는 점에서 독특하다.
슬레이브는 캡처된 데이터를, 특정의 PRAM 어드레스에 기록(LDSLV)하거나 특정의 PRAM 어드레스의 컨텐츠와 비교(VFSLV)하는 데에 사용할 것이다. LDSLVNFSLV 명령어들은, VFSLV가 신호(cpu_slave_pram_verify_en)를 어서트하여 마스터 플래시로부터 판독된 데이터가 (PRAM에 로드되는 대신에) PRAM 컨텐츠와 비교되도록 지시한다는 것을 제외하고는, 동일한 방식으로 동작한다.
이러한 명령어들은 데이터를, 마스터 디바이스(410)의 플래시 메모리(416)를 포함하는 소정의 소스로부터 프로그램 RAM(PRAM)(426)으로 전송하게끔 할 수 있다. 이를 위해, 마스터 디바이스(410)는 전송된 데이터를 전송하고 검증하기 위한 전용 명령어들을 제공할 수 있다. 예를 들면:
- 데이터 워드를 마스터 플래시 이미지(416)로부터 슬레이브 PRAM 래퍼 또는 버퍼(418/428)로 이동시키는 (여기서 데이터 워드는 타겟 어드레스와 함께 캡처됨) 로드 슬레이브 명령어(LDSLV). 이러한 명령어는 예를 들면, 후증분(post increment) 기능을 갖거나 갖지 않는 간접 소스 어드레스, 후증분 기능을 갖는 간접 목적지 어드레스 및 복수의 슬레이브들 중 어느 하나가 목적지인지를 정의하는 리터럴(literal)를 정의할 것이다. 하지만, 듀얼 코어(단일 슬레이브) 구현에서, 리터럴은 생략될 수도 있다. 소스에서 후증분 기능을 가질지에 대한 옵션은, 추후의 LDSLV/VFSLV 반복을 준비하여, LDSLV/VFSLV가 실행 이후에 다음 소스 어드레스로 자동으로 증분하게끔 한다. 이것은, REPEAT 루프 내로부터의 실행인 경우에 특히 유용하다. 후증분 옵션을 사용하지 않으면, 같은 명령어가 동일한 데이터의 블록을 목적지 PRAM(426)에 기록하도록(블록필(blockfill)이라고도 함) 사용될 수 있다. 대안적으로, 소스 어드레스는, 마스터 주변 디바이스의 n-비트 예를 들면 24-비트 특수 기능 레지스터 예를 들면 플래시 컨트롤러 프로그래밍 데이터 레지스터를 가리킬 수 있다. 다른 실시예들에 따르면, 소스는 잠재적으로 병렬 입력 포트, 직렬 수신 버퍼 등일 수도 있다. 일부 실시예들은 프로그램 어드레스 공간에 매핑된 n-비트 레지스터 예를 들면 24-비트 레지스터만을 사용할 수 있다. 따라서, 외부 데이터를 24-비트 특수 기능 레지스터로 향하게 함(direct)으로써, 외부 데이터는 슬레이브 디바이스(420)의 PRAM(426) 내에 간접 기록될 수 있다. 하지만, 프로그램 데이터를 마스터 플래시 메모리(416)로부터 슬레이브 PRAM(426)으로 전송하기 위해, 후증분 기능이 주요 기능일 수 있다. 일 실시예에서, 마스터 플래시(416)와 슬레이브 PRAM(426)은 동일하게 조직화될 수 있고, 판독된 각 데이터 워드는 적절한 로직(428)에 의해서 PRAM(426) 내로 직접 전송될 수 있다. 하지만, 일부 실시예들에서, PRAM(426)은 플래시 메모리(416)와는 다른 방식으로 조직화될 수 있다. 예를 들면, 플래시 메모리(416)는 24 비트 워드들로 조직화될 수 있는 반면, PRAM(426)은 48 비트 워드들로 조직화될 수 있다. 이러한 구현에서, 플래시 메모리(416)로부터의 최초 판독값을 저장하고 그 저장된 데이터를 그다음 판독값과 함께 PRAM(426) 내에 기록하는 버퍼(418/428)가 제공될 수 있다. 일부 실시예들에 따르면, 여기서의 제한은, 소스 플래시 데이터의 폭이 아니라, LDSLV/VFSLV 동작이 단지 단일 n-비트 값 예를 들면 24-비트 값으로 작업할(work on) 수 있는가이다. 그래서 소스 플래시가 48-비트 폭일지라도, 이러한 실시예에서는 단지 24-비트 값이 이동될 수 있다. 다른 실시예들은 이러한 값으로 제한되지 않을 수 있다. 다른 전송 메커니즘이 다양한 메모리들을 위한 특정의 설계 선택들에 따라 적용될 수 있다. 더욱, 에러 수정 코딩(ECC)이 플래시 메모리(416)와 PRAM(426)에 구현될 수 있다. 에러 수정에 있어서, 플래시와 PRAM이 서로 같은 워드 폭의 ECC를 가질지라도, 일 실시예에 따르면, ECC 패리티 데이터는 복사되지 않는다. 오히려, 그것은 그것을 로딩할 때마다 PRAM 래퍼(wrapper) 내에 재발생된다. 일부 실시예들에 따르면, 이것은 코어에서 기존의 24-비트 데이터 경로들만을 사용할 수 있는 기존의 PSV 모델을 재사용하는 제한 때문일 수 있다. 다시, 다른 실시예들은 이러한 제한에 직면하지 않을 수 있다.
- 마스터 플래시 이미지로부터 예를 들면 24-비트 데이터 워드를 판독하고 그리고 데이터를 PRAM(426)의 컨텐츠와 비교하는 검증 슬레이브 명령어(VFSLV). 따라서, 플래시 메모리에 저장된 데이터와 PRAM에 저장된 데이터의 실제 비교를 수행하기 위한 비교기가 제공될 수 있다. 플래시 메모리는 ECC 기능(일부 실시예들에서 이 추가 정보는 판독불가함)에 관련하여 설계될 수 있지만, RAM으로부터의 ECD 데이터는 판독가능할 수 있다. 비교 메커니즘 예를 들면 버퍼 및 관련된 비교기는, 판독된 플래시 메모리 데이터로부터 ECC 데이터를 발생시키기 위한 로직을 구비할 수 있다. 따라서, 이 명령어는, 마스터 데이터에 대해(on) ECC 패리티를 재계산할 수 있고 저장된 PRAM ECC와 비교하여 검증을 완료하고, 또한 일부 실시예들에 따른 비교 불량 이벤트에서 (고정(sticky)) 검증 에러를 (MSI 매크로 내에) 플래그할 수 있다.
- LDSLV/VFSLV 명령어들은 REPEAT 루프 내에서 실행되도록 설계될 수 있다; 이들은 일부 실시예들에서, 최대 3 사이클(액세스 시간) 플래시로부터 1 워드/사이클까지의 전송들을 가속하기 위해서 기존의 데이터 파이프라인을 사용할 수 있다. 첫번째 실행은, 데이터 파이프라인을 준비시키고(prime) 데이터 배열을 처리하기 위해서 1 이상의 사이클 예를 들면 5 사이클이 필요할 수 있다. 하지만, 임의의 연속 전송이 단일 사이클에서 수행될 수도 있다. 마지막 명령어 또는 마무리(wrap up)에는 데이터 파이프라인을 언롤(unroll)하기 위해서 예를 들면 3 사이클이 필요할 수 있다. PRAM으로 전송될 프로그램의 크기에 따라서, 반복 루프 내에서 단일 사이클 전송들은 전송 속도를 상당히 높인다. 다른 실시예들은 일반적으로 단일 사이클에서 각 명령어를 실행할 수 있다.
- 일부 실시예들에 따른 슬레이브 듀얼 패널 모드로 동작하는 경우: 슬레이브가 디스에이블될 때 LDSLV/VFSLV 명령어들은 활성 PRAM에만 액세스할 수 있고; 그리고 LDSLV/VFSLV 명령어들은 비활성 PRAM에 항상 액세스할 수 있다. 듀얼 패널 모드는 PRAM이 2개의 개별 블록들로 분할된 일부 디바이스들에 적용된다. 이 모드에서, PRAM 제어는, "비활성" 패널이 마스터(예를 들면, 디바이스가 업데이트되는 동안에 플래시 내로 재프로그램된 신규 PRAM 이미지일 수 있음)에 의해 (재-)로드되는 동안에도 슬레이브가 "활성" 패널로부터 계속 실행될 수 있게 한다. 일단 완료되면, 마스터는 패널들을 전환할 수 있는(전용 명령어들 예를 들면 BOOTSWP 명령어를 사용하는 온-더-플라이(on-the-fly)) 신호를 슬레이브에 송신한다. 이것은, 일부 실시예들에서 구현될 수 있으며, 소프트웨어 업데이트가 디바이스 내에 재-플래시되는 동안에도 슬레이브가 실행(예를 들면 SMPS 내부 제어 루프)을 유지할 수 있도록 설계되는, 매우 전문적인 "라이브 업데이트(live update)" 개념이다. 수백 KHz 또는 그 이상에서 이 루프들을 구동하는 애플리케이션들은, 디바이스 전부 리셋과 관련된 다운-시간(down-time)(밀리 초 단위)을 원하지 않고, 신규 PRAM 코드를 로드한 다음 그것을 리셋없이 즉시 스왑할 수 있기를 원한다. 모든 BOOTSWAP이 PRAM 패널들을 문자그대로(literally) 스위칭만 하는 것이기 때문에, 이러한 실시예들에서 펌웨어는 스마트 핸드오버(smart handover)를 필요로 할 수 있다. 디바이스가 (미래의 어느 시점에서) 정상적으로 리셋되면, 신규 PRAM 코드가 "활성" 패널에 정상적으로 로드될 것이다.
코드 예시:
예시 1: LDSLV: PRAM LOAD FROM FLASH
; Slave #0 PRAM:
; load sequence prior to Slave being
; enabled
movpag #PRAM_DATA_PAGE,DSRPAG
mov.w #PRAM_DATA_BASE,w2
clr.w w5
repeat #PRAM LENTH-1
ldslv [w2++], [w5++],#0
예시 1에 도시된 코드 스니펫은, LDSLV 명령어가 애플리케이션을 초기화하는 동안에 슬레이브 #0의 PRAM을 로드하게끔 어떻게 사용될 수 있는지를 보여준다.
예시 2: VFSLV: PRAM VERIFY FROM FLASH
; Slave #0 PRAM:
; validation sequence prior to
; Slave being enabled.
movpag #PRAM_DATA_PAGE,DSRPAG
mov.w #PRAM_DATA_BASE,w2
clr.w w5
repeat #PRAM LENGTH-1
vfslv [w2++],[w5++],#0
; VERFERR = 1 if mismatch detected
Btss.b MSI0STAT,VERFERR
bra PRAMOK ; exit with no error
equ * ; exit with error
예시 2의 코드 스니펫은, VFSLV 명령어가 애플리케이션을 초기화하는 동안에 슬레이브 #0의 PRAM의 컨텐츠를 검증하도록 어떻게 사용될 수 있는지를 보여준다.
예시 3: LDSLV: PRAM BLOCK FILL FROM FLASH
; Slave #0 PRAM:
; block fill prior to Slave being
; enabled
movpag #FILL_OPCODE_PAGE,DSRPAG
mov.w #FILL_OPCODE_ADDR,w2
clr.w w5
repeat #PRAM LENGTH-1
ldslv [ [w2],[w5++],#0
예시 3에 도시된 코드 스니펫은, LDSLV 명령어가 슬레이브 #0의 PRAM을 블록필(block fill)하도록(즉, 상수를 로드함) 어떻게 사용될 수 있는지를 보여준다. 이 경우, 상수는 LDSLV(후증분되지 않음)로의 레지스터 간접 어드레스를 사용하여 플래시로부터 제공된다(sourced).
예시 4: LDSLV: PRAM LOAD FROM NVMDATAL
; Slave #0 PRAM:
; load PRAM addressed by pointer in
; w5 with opcode held in NVMDATAL
; while Slave in disabled.
; Verify data move.
; Exit with PRAM pointer incremented.
; Load DSRPAG and w2 to address
; NVMDATAL register
movpag #NVMDATAL
mov.w #NVMDATAL,w2
ldslv [w2],[w5++],#0
dec2 w5,w5
vfslv [w2],[w5++],#0
; VERFERR=1 if mismatch detected
btss.b MSI0STAT,VERFERR
bra PRAMOK; exit with no error
equ * ; exit with error
대안적으로, 블록필 연산코드 값은 NVM 컨트롤러 24-비트 NVMDATAL 레지스터로부터 공급된 변수일 수 있다. NVMDATAL 레지스터는, PS 내에 위치되고 또한 NVM 컨트롤러가 플래시 프로그램/소거를 위해 인에이블되지 않을 때(즉, NVMCON.WREN=0) 24-비트 r/w 레지스터가 된다. 레지스터는, 플래시 프로그램/소거가 인에이블될 때마다(즉, NVMCON.WREN=1) 기록-전용이다. 어떤 명령어 연산코드라도 NVMDATAL에 로드될 수 있으며 이후 PRAM에 로드될 수 있다. VFSLV 명령어도 같은 방식으로 사용되어 LDSLV 동작의 성공을 확인할 수 있다. 예시 4에 도시된 바와 같이, 이 접근법은, 예시 4에 도시된 바와 같이 그것을 마스터 플래시 메모리에 처음 프로그램할 필요성을 제거하고, 또한 디바이스 외부로부터 제공된 데이터를 가진 PRAM의 전부 또는 일부를 로드하기 위해 사용될 수도 있다.
일부 실시예들에 따르면, 추가 명령어들은 DSP 엔진을 구비한 CPU에서 구현될 수 있다. 이러한 추가 명령어들이 상술한 로드/검증 명령어들의 구현을 반드시 필요로 하는 것은 아니다. 또한, 그것들은, 멀티 코어 설계를 필요로하지 않을 뿐만 아니라, CPU와 통합된 DSP 엔진을 포함하는 단일 코어 디바이스에서 구현될 수도 있다.
따라서, 일부 실시예들에 따르면, 첫번째 유형의 명령어는 16-비트 데이터일 수 있으며, 경계 체크(bounds check) 및 제한 기능이 강제 데이터 제한(Force data Limit)(FLIM/FLIM.v) 명령어들을 추가하여 16-비트 데이터 경계 체크 및 제한 동작들을 가속할 수 있다. 이러한 명령어는 부호있는 타겟값을 각자의 W 레지스터들에 유지된 상한 또는 하한과 비교한다. 타겟값이 상한보다 크거나 하한보다 작으면, 초과 제한 레지스터가 상기 부호있는 타겟값으로(with) 로드된다. 따라서, 포화 함수는 사용자가 선택가능한 상한 및 하한으로써 정의될 수 있다. 이러한 명령어는 2가지 버전으로 구현될 수 있다:
FLIM: 상술한 기능을 CPU의 임의의 워킹 레지스터들 상에서 수행하고, 결과를 표시하도록 상태 비트들을 설정한다.
FLIM.v: 결과를 표시하는 상태 비트들을 설정하고; 어느 제한이 초과되었는지에 따라, 부호있는 값을 안티-와인드업(anti-windup) 알고리즘들에서 사용될 수 있는 Wn에 저장한다. 따라서, 이 명령어는 FLIM과 동일한 기능을 수행할뿐 아니라 아래 예시 5의 코드 스니펫에 도시된 바와 같이 전용 레지스터에 오버슈트(또는 언더슈트)를 저장한다.
예시 5:
Figure pct00001
제2 추가 명령어는, DSP 누산기 기반 경계 체크 및 제한 동작들을 가속하기 위해 추가된, 누산기 상한 및 하한 명령어들(MAXAB/MINAB)이다: 이 명령어들은 타겟 누산기의 부호있는 값을 다른 누산기에 유지된 상한값(MAXAB) 또는 하한값(MINAB) 제한과 비교한다. 만일 제한 누산기 값이 상한값(MAXAB)보다 크거나 하한값(MINAB)보다 작으면, 제한 누산기는 타겟 누산기에 복사된다. 다시, 이 명령어들은 2개의 구현들로 구현될 수 있다:
MAXAB/MINAB: 상술한 바와 같은 기능을 수행하고, 결과를 표시하도록 상태 비트들을 설정한다.
MAXAB.v/MINAB.v: 상술한 바와 같은 기능을 수행하고, 결과를 표시하도록 상태 비트들을 설정한다. 또한, FLIM.v 명령어와 유사하지만 40-비트 누산기 값으로 동작하는 이 명령어들은, 어느 제한이 초과되었는지에 따라서, 부호있는 값을 (안티-와인드업 알고리즘에 유용한) Wn 또는 메모리에 저장한다.
예시 6:
Figure pct00002
두가지 유형의 명령어들 모두가 실행되는 경우에, 그것들은 예시 6의 스니펫(snippet)에 도시된 바와 같이 이어서 실행되도록 설계될 수 있다. 이 명령어들은, 최대 또는 최소 제한이 도달되었는지를 표시하는 각자의 플래그들을 자동으로 설정한다. 일 실시예에 따르면, 최소 제한 명령어는, 어느 제한에도 도달되지 않은 경우에는 동작없음 명령어처럼 동작하도록 설계될 수 있으며, 이로써, 상태 레지스터의 플래그들에 영향을 미치지 않는다. 따라서, 위에서 보여진 바와 같이, 브랜치 명령어가 한 번만 실행될 필요가 있다. 만일, 최대 제한 명령어가 플래그를 트리거하면, 최소 제한 명령어는 nop 명령어가 실행된 것처럼 그것을 리셋하지 않을 것이다. 이어지는 브랜치 명령어는 정확하게 실행될 것이다. 이 기능은 단지 MAXAB(.V) 명령어가 MINAB(.V) 명령어 이전에 실행될 것을 요구할 수 있다.
추가 명령어들은 듀얼 또는 멀티-코어 설계를 요구하지 않으면서도 구현될 수 있다. 일부 실시예들에 따르면, 32-비트 로드/저장(Load/Store) 누산기 명령어들(LAC.d/SAC.d)이 분해능을 손상시키지 않으면서 중간결과들의 이동을 가속하기 위해 추가될 수 있다: 기존의 로드/저장 누산기(LAC/SAC) 명령어들은 16-비트 데이터를 이동시킨다; 1.31 누산기 데이터를 이동시키는 No diredt 수단은 종래의 dsPIC 코어에 존재한다. 다양한 실시예들에 따르면, 32-비트 데이터를 이동하도록 확장된 명령어들은 다음을 포함한다:
LAC.d: 판독하고, 선택적으로 시프트하고, 그다음 확장 32-비트 값을 메모리로부터 누산기(A 또는 B)로 보낸다(sign).
SAC.d: 선택적으로 시프트하고, 그다음 누산기(A 또는 B)의 LS 32-비트들을 메모리에 저장한다.
일부 실시예들에 따르면, 이들은 2 사이클 내에 실행될 수 있는 단일 명령어 워드들로서 구현될 수 있다.
다른 실시예들에 따르면, 누산기 정규화(NORM) 명령어가, (FBCL 명령어를 사용하는) 기존의 정규화 시퀀스를 가속하기 위해 추가될 수 있다. 기존의 CPU ISA는 Find First Bit Clear Left(FBCL)를 포함하는 다중 명령어들을 사용함으로써 누산기 데이터 정규화를 지원한다:
6 명령어, 5 사이클 동작 (16-비트 시프트까지만).
일부 실시예들은, 1 명령어 워드만을 사용하고 1 사이클 내에서 실행되는 NORM 명령어를 구현할 수 있다. 이 명령어는 양방향으로 최대 16-비트까지 타겟 누산기를 자동으로 정규화한다. 16 비트 이상의 정규화를 위해 캐스케이드될 수 있다:
각 반복으로부터의 지수(exponent)는 그다음 가산될 수 있다;
이것은 3 명령어들, 3 사이클 동작을 초래한다.
하지만, NORM 명령어의 다른 구현들이 단일 반복에서 전체 누산기를 정규화할 수 있다.
일부 실시예들에 따르면, 비트 필드 명령어들(BFINS/BFEXT)이, 컴파일러 효율을 개선하기 위해 추가된다. 컴파일된 코드는 종종 다수의 비트들을 타겟 워드 내에 삽입하거나 추출하고자 한다: 비트 필드 오프셋들과 폭들은 항상 상수 값들이다.
BFINS: CPU W-레지스터로부터 또는 리터럴 값으로부터의 비트 필드를 타겟 워드에 기록한다.
BFEXT: 타겟 워드로부터 비트 필드를 판독하고, 그것을 CPU W-레지스터에 로드한다.
모든 비트 필드 명령어들은 2 워드, 2 사이클 동작들이다: 비트 필드가 없으면, 전체 동작이 완료되기 위해서는 대략 7 워드, 7 사이클이 필요하다; 비트 필드가 있으면, 전체 동작이 완료되기 위해서는 대략 4 워드, 4 사이클이 필요하다.
일부 실시예들에 따르면, 제산 개선(divide improvement)은, 명령어들의 인터럽트가능하고 비복원인 제산 묶음(suite)을 제공한다(종래의 dsPIC를 위한 것과 동일함): 실행 시간은, 이제 모든 제산 명령어들에 대해 (REPEAT 명령어를 위한 1 사이클을 포함하여) 7 사이클(P33E:19 사이클)이고, 원본 제산(divide) REPEAT 카운트를 사용하는 기존의 애플리케이션 코드와 완전히 역호환(backwards compatible)된다.
또한, 일부 실시예들에 따르면, 제산(divide) 명령어들의 대체(alternate) 세트가 컴파일러 레지스터 할당 효율을 개선하기 위해 제공될 수 있다: 기존의 (32/16-비트) 제산 명령어들: 피제수는 Wm+1:Wm, 제수는 Wn, 그리고 나머지:몫은 W1:W0이다.
제산 명령어들의 대체 세트에서: 피제수는 Wm+1:Wm, 제수는 Wn 그리고 나머지:몫은 Wm+1:Wm; 여기서 W1:W0은 유지된다.
요약하면, 다음과 같은 추가의 명령어들이 특히, CPU와 DSP 엔진을 포함하는 dsPIC 코어에 제공될 수 있다. 단지 첫번째 명령어들(LDSLV와 VFSLV)만이 멀티-코어 디바이스들을 위해 특별히 설계되고, 모든 다른 명령어들은 다음의 임의의 조합으로 선택적으로 구현될 수 있다:
LDSLV, VFSLV: 슬레이브 PRAM을 로드하고 검증함
FLIM{.v}: 부호있는 16-비트 데이터 값의 경계를 체크하고 제한함
MAXAB{.v}, MINAB{.v}: 누산기 1.31 데이터 값의 경계를 체크하고 제한함.
LAC.d, SAC.d: 누산기 32-비트를 로드하고 저장함
NORM: 누산기 정규화
BFIN, BFEXT: 비트필드 인서트 및 익스트랙트(extract)
DIVx2: W1:W0을 유지하는 대체 제산 명령어 세트
도 7에 도시된 바와 같은 추가 실시예들에 따르면, 듀얼(멀티)-코어 프로세서용 코드 보호 계획이 제공될 수 있다. 이 보호 계획은 듀얼 코어 마이크로컨트롤러의 슬레이브 프로세서에서 특히 유용하다. 다른 실시예들에 따르면, 이러한 개념은 단일 코어 프로세서 또는 마이크로컨트롤러에도 적용될 수 있다. 도 7은 예시의 코드 보호 계획(700)을 도시한다. 플래시 메모리는 몇 개의 세그먼트들로 분할될 수 있는데, 각각의 세그먼트는 다른것들의 액세스에 적용할 자체의 규칙들을 가진다. 예를 들면, 디바이스 또는 퓨즈 메커니즘의 프로그래밍 동안에만 구성될 수 있는 구성 레지스터들이 액세스 보호 계획을 설정하기 위해 제공될 수 있다. 도 7은, 플래시가 사용자 플래시와 테스트 플래시 파티션으로 분할된 것을 도시한다. 하지만, 다른 실시예들은 단지 하나의 파티션을 제공하거나 또는 더 많은 파티션들을 제공할 수 있다. 사용자 플래시 파티션은 부트 세그먼트와 일반 세그먼트로 구분될 수 있다. 게다가, 인터럽트 벡터 테이블들(IVT 및 AIVT)을 위한 더 작은 세그먼트들이 제공될 수 있으며, 이들은 부트 세그먼트에 포함되거나 또는 현재 설정된 보호 레벨에 따라 별도의 보호를 가질 수도 있다. 도 7은 인터럽트 벡터 테이블(IVT) 및 다른 위치에 있는 대체 인터럽트 벡터 테이블(AIVT)을 도시한다. 하지만, 다른 실시예들은 이 두 개의 테이블을 부트 세그먼트(BS)의 앞 또는 임의의 다른 적절한 위치에 위치될 수 있는 하나의 세그먼트(VS) 내에 통합할 수도 있다. 결국, 예를 들면, 통합된 회로 내 프로그램 기능부에 의해, 디바이스가 프로그램될 때에만 기록될 수 있는 다양한 디바이스 구성 레지스터들을 포함하는 구성 세그먼트가 제공될 수 있다. 세그먼트들의 배열은 각자의 구현에 따라 다를 수 있다. 보호 계획이 다양한 서로다른 설정값들을 가용케하고, 여기서 각 세그먼트는 다르게 보호될 수 있다. 특히, 하나의 세그먼트로부터 또하나의 세그먼트로의 액세스는 특정 설정에 따라 제한될 수 있다. 또한, 세그먼트로 벡터링도 보안 설정에 따라 제한될 수 있다.
일부 실시예들에 따라 구현된 경우, 테스트 어드레스 공간은 플래시의 몇 개의 특수 섹터들을 포함하는데, 이들 모두는 예를 들면 24-비트 프로그램 공간일 수 있는 프로그램 공간의 상위 1/2에(최상위(highest) 어드레스) 있다. 이러한 실시예에서 구성 세그먼트(전형적으로 단일 섹터 또는 그 미만)는 사용자 플래시 어드레스 공간(24-비트 프로그램 공간의 하위 1/2) 내에 상주한다:
- 하나의 테스트 섹터가 공장 사용(즉, 개별적인 테스트 모드들에서만 기록가능하고 다른 경우에는 항상 보호됨)을 위해 예비되고 그리고 디바이스 ID 정보, 디바이스 보정 데이터용 "퓨즈" 값들 등을 포함한다. 이 섹터는 또한, 전형적으로, 소비자가 단지 기록만 할 수 있는(소거 불가함) "소비자 OTP" 데이터용 단일 행(row) 데이터를 포함한다.
- 상술한 바와 같은 듀얼 부트(듀얼 패널) 디바이스들에서, 부트(동작) 모드 퓨즈 값을 위해 또하나의 테스트 섹터가 예비된다. 이 섹터는 사용자가 디바이스 전부를 소거(칩 소거)하지 않는 한 보호된다.
- 하나 이상의 테스트 섹터들이 디바이스 테스트의 동안에 그리고 이어서 개발 도구들에 의해 이용됨으로써 디버그 실행(Debug Exec)을 유지하기 위해 예비된다. 이 섹터들은 (디버그 모드와 같은) 공개 테스트 모드들에서 기록가능하다.
- 구성 섹터는 사용자 옵션들을 선택하기 위한 모든 사용자 프로그램가능 "퓨즈들"을 포함한다. 그것은 선택된 코드 보호 레벨에 근거한 (사용자 정의) 기록 권한들을 가진다.
모든 "퓨즈" 데이터는 자동으로 판독되고 플래시 컨트롤러에 의해 디바이스 리셋 시퀀스의 일부로서 특수 디바이스 구성 레지스터들에 로드된다.
상술한 바와 같이, 각 세그먼트는 또하나의 세그먼트로부터의 판독/기록 액세스(이하 "외부" 액세스로 지칭됨)를 방지하기 위한 자체의 액세스 규칙들을 가질 수 있다. 더욱이, 세그먼트로의 벡터링은, 특히 높은 보안 설정에서, 제한될 수 있다. 무슨 종류의 동작이 수행될지에 따라서 각 세그먼트에 대한 설정값이 테이블에 정의될 수 있으며, 다른 동작들은 도 10에 상세히 도시된 바와 같이 서로 다른 보안 설정값을 가질 수 있다. 보안은 판독 및 기록/소거 보호로 개별적으로 분할될 수 있는데, 예를 들면, 기록 보호 비트가 기록 보호를 개별적으로 설정하기 위해 이용될 수 있다. 상기 구현은 다양한 실시예들에 따라 다를 수 있다. 도 8은 부트 세그먼트를 위한 서로다른 3가지 레벨들의 보호를 갖는 실시예를 도시한다. 도 10은 일반 세그먼트를 위한 서로다른 3가지 레벨들의 보호를 갖는 실시예를 도시한다. 유사한 테이블들이 다른 세그먼트들에 대해 사용될 수 있다. 각 보호 레벨은, 세그먼트의 외부로부터 서로다른 세그먼트들로의 판독 액세스에 대한 개별적인 보호를 제공한다. 또한, 각 레벨은 기록 보호가 설정되었는지의 여부를 설정할 수 있다. 부트 세그먼트를 위한 도 8에 도시된 실시예에서 그리고 일반 세그먼트를 위한 도 10에 도시된 실시예에서, 제1 레벨은 모든 액세스된 세그먼트들에 대해 일반적으로 적용되는 어떠한 판독 보호도 제공하지 않는다. 만일 이 모드에서 기록 보호가 활성되면, 그것은 모든 세그먼트들에 대해 적용될 것이고, 그러면 "외부"로부터 각자의 세그먼트로의 프로그래밍 또는 소거는 불가할 것이다.
제2 레벨은 표준 레벨로서 도시되어 있다. 도 8은 부트 세그먼트를 위한 보호를 도시한다. 이 설정에서, 부트 세그먼트는 "외부"로부터 판독되거나 기록될 수 없으며, 기록 보호 설정값에 따라서, 부트 세그먼트 내에서 실행된 액션들로부터 기록될 수 없다. 도 10은 일반 세그먼트를 위한 설정값을 도시한다. 여기서, 일반 세그먼트뿐 아니라 부트 세그먼트도 일반 세그먼트내에서 판독 동작들을 수행할 수 있다. 일반 세그먼트에의 기록은 기록 보호 비트가 설정되지 않은 경우에만 가능하다. 테스트 세그먼트내로부터의 임의의 동작은 일반 세그먼트로의 판독 또는 기록 액세스를 허용하지 않을 것이다.
제3 레벨은 높은 보호 레벨로서 도시되어 있다. 이 설정에서, 표준 설정 보호 이외에도 부트 세그먼트에 대해서, 부트 세그먼트로의 벡터링이 제한될 수 있다. 따라서, 이 추가적인 보호는 벡터 테이블에 대한 임의의 수정들을 방지할 수 있다. 하지만, 부트 세그먼트에 있어서, 상기 보호는 표준 설정과 동일할 수 있다.
도 10은 외부로부터의 모든 액세스가 금지되는, 일반 세그먼트를 위한 높은 보안 설정에 대해 도시한다. 다시 말하면, 일반 세그먼트는 일반 세그먼트 내로부터만 액세스될 수 있다. 일반 세그먼트(GS) 내로부터의 기록 액세스마저도 각자의 보호 비트를 설정함으로써 금지될 수 있다.
도 11은 또하나의 실시예에 따른 애플리케이션 모드의 보안 동작들을 갖는 더욱 구체적인 테이블을 포함하는 실시예를 더욱 자세하게 도시한다. 동작들은 가장-좌측 열에 리스트되어 있고, GS, BSm, CS 및 VS에 대한 대응하는 영향은 대응하는 행에 도시되어 있다. 다양한 동작들이 정의되어 있다. 제1 라인(세그먼트로의 PC 롤오버(Rollover))은 또하나의 세그먼트로의 프로그램 카운터 롤-오버에 관련된다. 제2 라인(세그먼트로의 PFC)은, 점프 또는 브랜치 명령어의 실행과 그것의 다양한 세그먼트들에 대한 영향과 같은, 임의 종류의 프로그램 흐름 변경에 관련된다. 다음 라인(IVT 또는 AIVT로부터의 벡터)은 특정 세그먼트로의 벡터링에 관련된다. 다음 라인(테이블 판독/PSV)은 세그먼트로의 PSV 또는 테이블 판독 명령어 액세스에 관련된다. 다음 라인(페이지 소거)은 각자의 세그먼트에 영향을 미칠 페이지 소거 기능에 관련된다. 다음 라인(행 프로그램)은 메모리 행의 프로그래밍에 관련된다. 다른 액션들이 다음 행들에 도시되어 있다. 따라서, 서로 다른 보호 설정값들이 서로 다른 유형들의 액션에 적용될 수 있다. 판독 또는 기록 동작들과 같은 특정 액션들은 하나의 세그먼트 내에서 수행될 수 있지만, 다른 세그먼트들에 영향을 줄 수 있다. 다양한 실시예들에 따른 보호 계획은 이러한 액션들을 선택적으로 보호하게끔 한다. 인터럽트에 의해 초래될 수 있는 액션과 같은 일부 액션들은 특정 세그먼트로부터 스스로 일어나지 않을 수 있으며, 따라서, 도 11의 테이블은 실행되는 세그먼트들 사이를 구별하지 않는다. 도 11의 테이블은, 각자의 테이블 셀에 "OK"가 보여짐으로써 액션이 허용되었는지 또는 "No" 또는 "0"이 보여짐으로써 액션이 금지되었는지를 보여주는데, 여기서 후자는 동작이 "0" 판독을 만들 것을 나타낸다. 도 11과 관련된 일부 예시들은 다음과 같다:
- 세그먼트(GS)로부터의 TBLRD/PSV의 실행은, CPU가 세그먼트(GS) 보안 레벨을 무시하고 세그먼트(GS)로부터 데이터를 판독하게끔 할 것이지만, 보안이 "없음"으로 설정된 경우에는 세그먼트(BS)로부터의 데이터만을 판독하게끔 할 것이다. 세그먼트(CS)는 세그먼트(VS)와 마찬가지로 항상 판독가능하다.
- 세그먼트(GS)를 타겟으로 하는 페이지 소거를 세그먼트(BS)에서 실행되는 코드를 사용하여 시도하는 것은, 세그먼트(GS)의 기록 보호가 인에이블되었고 및/또는 세그먼트(GS) 보안이 "높음"인 경우에, 실패할 것이다. 아래에 논의되는 바와 같이, 세그먼트(CS)는 "향상된"으로 지칭된 추가 보안 레벨을 가진다.
도 11에 도시된 바와 같이, 서로 다른 다양한 액션들은 서로 다른 설정값들에 따라 보호될 수 있으며, 여기서 판독 및 기록 액션들은 개별적으로 보호될 수 있다. 하지만, 다른 구현들은 판독과 기록을 구별하지 않을 수도 있다. 또한, 도 11은, 구성 세그먼트(CS)에 대해, 별도의 중간 보호 레벨을 가능케 하는 추가 보안 레벨이 구현될 수 있음을 도시한다.
일부 실시예들에 따르면, 슬레이브 PRAM(426)이 예를 들면, 상술한 퓨즈 회로 또는 구성 레지스터에 의해서, 부트 세그먼트(BS) 어드레스 공간 또는 일반 세그먼트(GS) 어드레스 공간 중 하나에 배치될 수 있다. 또하나의 실시예에 따르면, 슬레이브 PRAM은 마스터 세그먼트(GS) 보안을 상속할 수 있다.
따라서, 슬레이브 PRAM(426)은, 플래시 메모리(416)의 대응하는 마스터 플래시 세그먼트에 할당된 보안 레벨을 가정할(assume) 것이다. 이제 LDSLV/VFSLV 명령어 실행은 그것이 각자의 플래시 실행 세그먼트에 민감하도록 구현되는데, 상기 각자의 플래시 실행 세그먼트로부터 LDSLV/VFSLV 명령어가 실행되고 상기 각자의 플래시 실행 세그먼트에 각자의 PRAM 세그먼트가 할당된다. 따라서, 관련된 코드 보호 보안 레벨들이, 그러한 명령어들이 실행될 때 적용된다. 따라서, LDSLV/VFSLV는 PRAM 내에서 판독 기능처럼 인식된다(seen). 프로그램 또는 페이지 소거 기능 그리고 그와 관련된 보안 규칙들은, 플래시 메모리에만 적용된다. 따라서, 플래시 메모리(416)의 BS/GS 판독을 위해 미리정의된 규칙들은 LDSLV/VFSLV 명령어들의 사용시 슬레이브 PRAM 액세스에 적용될 수 있을 것이다. 이는 PRAM에서 판독 또는 기록을 다음과 같이 수행한다:
LDSLV/VFSLV는 마스터의 BS내로부터 실행될 경우에 작용할 것이고, 슬레이브 PRAM은 다음에 할당된다:
(1) BS (세그먼트 보안 레벨과 상관없음);
(2) GS (GS는 "높은" 보안 레벨에 있지 않음).
LDSLV/VFSLV는 마스터의 GS 내로부터 실행될 경우에 작용할 것이고, 슬레이브 PRAM은 다음에 할당된다:
(1) GS (세그먼트 보안 레벨과 상관없음);
(2) BS (BS는 "없음" 보안 레벨에 있음).
상기 조건들이 충족되지 않은 경우, LDSLV/VFSLV 실행은 아무런 효과가 없다. 또한, 다른 실시예들에 따른 다른 조건들이 적용될 수 있다. 상기 조건들은 단지 예시일 뿐이다. (소스 데이터 판독을 위한) 플래시 액세스 코드 보호 규칙들이 충족될 수 있음을 가정할 수 있다.
도 9는 도 8에 도시된 것과 유사한 부트 세그먼트를 위한 확장된 코드 보호 계획을 도시한다. 다시, 유사한 테이블들이 다른 세그먼트들에 사용될 수 있다. PRAM(426)이 마스터 플래시 메모리(416)의 부트 세그먼트에 할당되는 경우에 PRAM(426)은 이에 따라, 마스터 BS를 임의의 보안 레벨(예를 들면, "없음"이 아닌 다른 레벨)로 설정함으로써 세그먼트(GS)의 신뢰할 수 없는 코드로부터 보호될 수 있다. 반대로, PRAM이 마스터의 세그먼트(GS)에 할당되는 경우에 PRAM은 또한, 마스터 GS를 "높음" 보안으로 설정함으로써 BS 내의 신뢰할 수 없는 코드로부터 보호될 수 있다.

Claims (49)

  1. 비휘발성 메모리에 결합된 중앙 처리 유닛을 구비한 마스터 처리 코어; 및
    상기 마스터 처리 코어와는 독립적으로 동작하며 휘발성 프로그램 메모리에 결합된 중앙 처리 유닛을 구비한 슬레이브 처리 코어를 포함하고,
    상기 마스터 중앙 처리 유닛은 프로그램 명령어들을 상기 슬레이브 처리 코어의 상기 비휘발성 메모리로 전송하도록 구성되고, 그리고
    상기 프로그램 명령어들의 전송은 상기 마스터 처리 코어의 상기 중앙 처리 유닛 내의 전용 명령어를 실행함으로써 수행되는, 집적회로.
  2. 제1항에 있어서,
    상기 전용 명령어는 소스 어드레스를 정의하는 제1 피연산자와 목적지 어드레스를 정의하는 제2 피연산자를 구비하고,
    상기 목적지 어드레스는 상기 명령어가 실행된 이후에 자동으로 증분되는, 집적회로.
  3. 제1항 또는 제2항에 있어서,
    상기 전용 명령어는 정보 워드가 버퍼로 전송되게 하고, 그리고
    상기 정보는 상기 버퍼로부터 상기 휘발성 프로그램 메모리에 기록되는, 집적회로.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 명령어는 상기 비휘발성 메모리가 상기 정보를 출력하게 하고, 그 결과로 상기 정보는 상기 버퍼에 의해 캡처되는, 집적회로.
  5. 제3항에 있어서,
    상기 정보는 24 비트 워드인, 집적회로.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 집적회로는 복수의 슬레이브 처리 코어들을 포함하고,
    상기 전용 명령어는 타겟 슬레이브 처리 유닛을 정의하는 제3 피연산자를 구비하는, 집적회로.
  7. 제2항 내지 제6항 중 어느 한 항에 있어서,
    상기 제1 피연산자에 저장된 상기 소스 어드레스는 상기 명령어가 실행된 이후에 선택에 따라 자동으로 증분될 수 있는, 집적회로.
  8. 제2항 내지 제7항 중 어느 한 항에 있어서,
    상기 소스 어드레스는 상기 마스터 처리 코어와 관련된 주변 디바이스의 특수 기능 레지스터인, 집적회로.
  9. 제8항에 있어서,
    상기 주변 디바이스는 직렬 통신 주변기기인, 집적회로.
  10. 제8항에 있어서,
    상기 주변 디바이스는 병렬 입력 포트인, 집적회로.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서,
    상기 마스터 처리 코어는, 상기 비휘발성 프로그램 메모리에 저장된 정보를 검증하는 추가 명령어를 더 실행할 수 있는, 집적회로.
  12. 제11항에 있어서,
    상기 추가 명령어는 제1 정보가 상기 버퍼로 전송되게 하고, 그리고
    상기 버퍼의 컨텐츠는 상기 휘발성 메모리에 저장된 제2 정보와 비교되는, 집적회로.
  13. 제11항 또는 제12항에 있어서,
    상기 추가 명령어는, 상기 제1 정보를 출력하도록 상기 비휘발성 메모리에 적용되는 제1 어드레스와 상기 제2 정보를 출력하도록 상기 휘발성 메모리에 적용되는 제2 어드레스를 포함하는, 집적회로.
  14. 제11항 내지 제13항 중 어느 한 항에 있어서,
    상기 추가 명령어는, 상기 제1 정보와 상기 제2 정보에 관련된 에러 수정 코드(ECC)를 더 검증하는, 집적회로.
  15. 제14항에 있어서,
    상기 비휘발성 메모리와 관련된 상기 ECC는 상기 비휘발성 메모리로부터 판독될 수 있고, 그리고 상기 소스와 관련된 상기 ECC는 별도로 생성되는, 집적회로.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서,
    상기 제1 처리 코어의 상기 비휘발성 메모리는 보호 계획(scheme)에 의해 정의된 코드 보호를 포함하고,
    상기 슬레이브 처리 유닛의 상기 휘발성 프로그램 메모리는 상기 보호 계획의 설정값에 의존하는 코드 보호를 구비하는, 집적회로.
  17. 제16항에 있어서,
    상기 보호 계획은 상기 비휘발성 메모리의 복수의 세그먼트들을 정의하고,
    각각의 세그먼트는 상기 보호 계획의 보호 설정값을 구비하는, 집적회로.
  18. 제17항에 있어서,
    상기 비휘발성 메모리를 위한 각각의 보호 설정값은, 판독 동작을 위한 설정값 및 프로그래밍 또는 소거 동작을 위한 설정값을 구비하는, 집적회로.
  19. 제16항 내지 제18항 중 어느 한 항에 있어서,
    상기 보호 계획은 미리정의된 개수의 보안 레벨들을 제공하고,
    각각의 보안 레벨은 각각의 세그먼트를 위한 보호 설정값을 정의하는, 집적회로.
  20. 제17항 내지 제19항 중 어느 한 항에 있어서,
    상기 휘발성 프로그램 메모리를 위한 상기 코드 보호는 상기 비휘발성 메모리의 상기 세그먼트들 중 하나를 위한 상기 코드 보호와 동일한, 집적회로.
  21. 제17항 내지 제20항 중 어느 한 항에 있어서,
    상기 비휘발성 메모리의 어느 세그먼트가 상기 휘발성 메모리를 위한 상기 코드 보호 설정값을 제공하도록 선택되는지를 저장하는 소정의 레지스터를 더 포함하는, 집적회로.
  22. 제18항 내지 제21항 중 어느 한 항에 있어서,
    상기 비휘발성 메모리의 판독 동작을 위한 설정값은 상기 휘발성 메모리의 판독 동작 및 기록 동작에 적용되는, 집적회로.
  23. 제17항 내지 제22항 중 어느 한 항에 있어서,
    세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 명령어는 다른 세그먼트에서 동작불가한, 집적회로.
  24. 제17항 내지 제23항 중 어느 한 항에 있어서,
    세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 판독 명령어는 다른 세그먼트의 미리정의된 영역에서만 동작가능한, 집적회로.
  25. 제24항에 있어서,
    상기 미리정의된 영역은 인터럽트 벡터들을 저장하는, 집적회로.
  26. 제17항 내지 제25항 중 어느 한 항에 있어서,
    상기 비휘발성 메모리는 부트 세그먼트와 일반 세그먼트를 포함하는, 집적회로.
  27. 제17항 내지 제26항 중 어느 한 항에 있어서,
    상기 비휘발성 메모리는 테스트 세그먼트를 더 포함하는, 집적회로.
  28. 비휘발성 메모리에 결합된 제1 중앙 처리 유닛을 구비한 제1 처리 코어와 상기 제1 처리 코어와는 독립적으로 동작하며 휘발성 프로그램 메모리에 결합된 제2 중앙 처리 유닛을 구비한 제2 처리 코어를 포함하는 멀티-코어 집적회로 처리 디바이스 내의 처리 코어를 위한 펌웨어를 제공하는 방법으로서, 상기 방법은:
    데이터가 상기 슬레이브 처리 코어의 상기 비휘발성 메모리에 기록되게 하는 전용 명령어를 상기 제1 중앙 처리 유닛 내에서 실행하는 것을 포함하는, 방법.
  29. 제28항에 있어서,
    상기 전용 명령어는, 소스 어드레스를 정의하는 제1 피연산자와 목적지 어드레스를 정의하는 제2 피연산자를 구비하고,
    상기 목적지 어드레스는 상기 명령어가 실행된 이후에 자동으로 증분되는, 방법.
  30. 제28항 또는 제29항에 있어서,
    상기 전용 명령어의 실행시, 정보 워드가 상기 비휘발성 메모리로부터 버퍼로 전송되고,
    상기 정보는 상기 버퍼로부터 상기 휘발성 프로그램 메모리에 기록되는, 방법.
    제28항 내지 제30항 중 어느 한 항에 있어서,
    상기 전용 명령어를 루프에서 반복하는 것을 더 포함하는, 방법.
  31. 제28항 내지 제30항 중 어느 한 항에 있어서,
    상기 집적회로는 복수의 슬레이브 처리 코어들을 포함하고,
    상기 전용 명령어는 타겟 슬레이브 처리 유닛을 정의하는 제3 피연산자를 구비하는, 방법.
  32. 제29항 내지 제31항 중 어느 한 항에 있어서,
    상기 제1 피연산자에 저장된 상기 소스 어드레스는 상기 명령어가 실행된 이후에 선택에 따라 자동으로 증분될 수 있는, 방법.
  33. 제28항 내지 제32항 중 어느 한 항에 있어서,
    상기 비휘발성 프로그램 메모리에 저장된 정보를 검증하는 추가 명령어를 상기 마스터 처리 코어에 의해 실행하는 것을 더 포함하는, 방법.
  34. 제33항에 있어서,
    상기 추가 명령어는 제1 정보가 상기 버퍼로 전송되게 하고,
    상기 버퍼의 컨텐츠는 상기 휘발성 메모리에 저장된 제2 정보와 비교되는, 방법.
  35. 제33항 또는 제34항에 있어서,
    상기 추가 명령어는, 상기 제1 정보를 출력하도록 상기 비휘발성 메모리에 적용되는 제1 어드레스와 상기 제2 정보를 출력하도록 상기 휘발성 메모리에 적용되는 제2 어드레스를 포함하는, 방법.
  36. 제33항 내지 제35항 중 어느 한 항에 있어서,
    상기 추가 명령어는 상기 제1 정보와 상기 제2 정보에 관련된 에러 수정 코드(ECC)를 더 검증하는, 방법.
  37. 제36항에 있어서,
    상기 비휘발성 메모리와 관련된 상기 ECC는 상기 비휘발성 메모리로부터 판독가능하고,
    상기 소스와 관련된 상기 ECC는 별도로 생성되는, 방법.
  38. 제28항 내지 제37항 중 어느 한 항에 있어서,
    상기 제1 처리 코어의 상기 비휘발성 메모리는 보호 계획에 의해 정의된 코드 보호를 포함하고,
    상기 슬레이브 처리 유닛의 상기 휘발성 프로그램 메모리는 상기 보호 계획의 설정값에 의존하는 코드 보호를 구비하는, 방법.
  39. 제38항에 있어서,
    상기 보호 계획은 상기 비휘발성 메모리의 복수의 세그먼트들을 정의하고,
    각각의 세그먼트는 상기 보호 계획의 보호 설정값을 구비하는, 방법.
  40. 제38항 또는 제39항에 있어서,
    상기 비휘발성 메모리를 위한 각각의 보호 설정값은, 판독 동작을 위한 설정값과 프로그래밍 또는 소거 동작을 위한 설정값을 구비하는, 방법.
  41. 제39항 또는 제40항에 있어서,
    상기 보호 계획은 미리정의된 개수의 보안 레벨들을 제공하고,
    각각의 보안 레벨은 각각의 세그먼트를 위한 보호 설정값을 정의하는, 방법.
  42. 제39항 내지 제41항 중 어느 한 항에 있어서,
    상기 휘발성 프로그램 메모리를 위한 상기 코드 보호는 상기 비휘발성 메모리의 상기 세그먼트들 중 하나를 위한 상기 코드 보호와 동일한, 방법.
  43. 제42항에 있어서,
    상기 비휘발성 메모리의 어느 세그먼트가 상기 휘발성 메모리를 위한 상기 코드 보호 설정값을 제공하도록 선택되는지를 소정의 레지스터가 저장하는 것을 포함하는, 방법.
  44. 제40항 내지 제43항 중 어느 한 항에 있어서,
    상기 비휘발성 메모리의 판독 동작을 위한 설정값은 상기 휘발성 메모리의 판독 동작과 기록 동작에 적용되는, 방법.
  45. 제39항 내지 제44항 중 어느 한 항에 있어서,
    세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 명령어는 다른 세그먼트에서 동작불가한, 방법.
  46. 제39항 내지 제45항 중 어느 한 항에 있어서,
    세그먼트가 보호되면, 보호 설정값에 따라서, 하나의 세그먼트로부터 실행된 판독 명령어는 다른 세그먼트의 미리정의된 영역에서만 동작가능한, 방법.
  47. 제46항에 있어서,
    상기 미리정의된 영역은 인터럽트 벡터들을 저장하는, 방법.
  48. 제28항 내지 제47항 중 어느 한 항에 있어서,
    상기 비휘발성 메모리는 부트 세그먼트와 일반 세그먼트를 포함하는, 방법.
  49. 제28항 내지 제48항 중 어느 한 항에 있어서,
    상기 비휘발성 메모리는 테스트 세그먼트를 더 포함하는, 방법.
KR1020177030823A 2015-04-30 2016-04-29 향상된 명령어 세트를 구비한 중앙 처리 유닛 KR20170140225A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562154927P 2015-04-30 2015-04-30
US62/154,927 2015-04-30
US201562195692P 2015-07-22 2015-07-22
US62/195,692 2015-07-22
PCT/US2016/030159 WO2016176593A1 (en) 2015-04-30 2016-04-29 Central processing unit with enhanced instruction set

Publications (1)

Publication Number Publication Date
KR20170140225A true KR20170140225A (ko) 2017-12-20

Family

ID=55963480

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177030823A KR20170140225A (ko) 2015-04-30 2016-04-29 향상된 명령어 세트를 구비한 중앙 처리 유닛

Country Status (7)

Country Link
US (2) US10983931B2 (ko)
EP (1) EP3289442B1 (ko)
JP (1) JP2018514868A (ko)
KR (1) KR20170140225A (ko)
CN (1) CN107548492B (ko)
TW (1) TW201706856A (ko)
WO (1) WO2016176593A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102032146B1 (ko) 2018-04-11 2019-10-15 경희대학교 산학협력단 소자 결점을 보완하기 위한 구간 선형 정류 유닛을 사용하는 인공신경망 시스템

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111679787B (zh) * 2016-04-27 2023-07-18 慧荣科技股份有限公司 闪存装置、闪存控制器及闪存存储管理方法
US10019314B2 (en) 2016-04-27 2018-07-10 Silicon Motion Inc. Flash memory apparatus and storage management method for flash memory
EP3536740A4 (en) 2016-11-04 2019-11-13 LG Chem, Ltd. THERMOSETTING COMPOSITION
DE112018000842T5 (de) * 2017-06-12 2019-12-24 Sandisk Technologies Llc Mehrkern-on-die-speichermikrocontroller
CN111382429B (zh) * 2018-12-27 2022-12-27 华为技术有限公司 指令的执行方法、装置及存储介质
CN109886416A (zh) * 2019-02-01 2019-06-14 京微齐力(北京)科技有限公司 集成人工智能模块的系统芯片及机器学习方法
CN109870921B (zh) * 2019-03-26 2022-04-01 广东美的制冷设备有限公司 驱动控制电路与家电设备
TWI715371B (zh) 2019-12-25 2021-01-01 新唐科技股份有限公司 一次性可編程記憶體裝置及其容錯方法

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5167028A (en) * 1989-11-13 1992-11-24 Lucid Corporation System for controlling task operation of slave processor by switching access to shared memory banks by master processor
US5226138A (en) * 1990-11-27 1993-07-06 Sun Microsystems, Inc. Method for selectively transferring data instructions to a cache memory
US6327648B1 (en) * 1994-12-09 2001-12-04 Cirrus Logic, Inc. Multiprocessor system for digital signal processing
US7272703B2 (en) * 1997-08-01 2007-09-18 Micron Technology, Inc. Program controlled embedded-DRAM-DSP architecture and methods
ITMI981564A1 (it) * 1998-07-09 2000-01-09 St Microelectronics Srl Memoria non volatile in grado di eseguire un programma autonomamente
US6260082B1 (en) * 1998-12-23 2001-07-10 Bops, Inc. Methods and apparatus for providing data transfer control
GB2365545B (en) * 1999-12-23 2004-06-02 Ibm Data processing system with master and slave processors
US6691216B2 (en) 2000-11-08 2004-02-10 Texas Instruments Incorporated Shared program memory for use in multicore DSP devices
US6895479B2 (en) * 2000-11-15 2005-05-17 Texas Instruments Incorporated Multicore DSP device having shared program memory with conditional write protection
JP2002185430A (ja) 2000-12-13 2002-06-28 Sony Corp 受信装置及び方法
US6349056B1 (en) 2000-12-28 2002-02-19 Sandisk Corporation Method and structure for efficient data verification operation for non-volatile memories
US7007172B2 (en) * 2001-06-01 2006-02-28 Microchip Technology Incorporated Modified Harvard architecture processor having data memory space mapped to program memory space with erroneous execution protection
US7571287B2 (en) 2003-03-13 2009-08-04 Marvell World Trade Ltd. Multiport memory architecture, devices and systems including the same, and methods of using the same
CN1301473C (zh) * 2003-09-17 2007-02-21 中兴通讯股份有限公司 多处理器系统共享引导模块的方法
US7325122B2 (en) * 2004-02-20 2008-01-29 International Business Machines Corporation Facilitating inter-DSP data communications
JP4575059B2 (ja) 2004-07-21 2010-11-04 株式会社日立製作所 ストレージ装置
US7917753B2 (en) * 2005-05-16 2011-03-29 Texas Instruments Incorporated Transferring control between programs of different security levels
CN101366004A (zh) 2005-12-06 2009-02-11 波士顿电路公司 用于带有专用线程管理的多核处理的方法和设备
US20080235493A1 (en) 2007-03-23 2008-09-25 Qualcomm Incorporated Instruction communication techniques for multi-processor system
GB2466695B (en) * 2007-06-18 2011-11-23 Fujitsu Ltd Processor and prefetch support program
WO2009090502A1 (en) * 2008-01-16 2009-07-23 Freescale Semiconductor, Inc. Processor based system having ecc based check and access validation information means
US20110087922A1 (en) * 2009-10-09 2011-04-14 National Tsing Hua University Test method and tool for master-slave systems on multicore processors
US8478974B2 (en) 2010-06-23 2013-07-02 Assured Information Security, Inc. Method and system for reducing an impact of malware during a booting sequence
US8904190B2 (en) 2010-10-20 2014-12-02 Advanced Micro Devices, Inc. Method and apparatus including architecture for protecting sensitive code and data
US9021170B2 (en) * 2011-06-29 2015-04-28 Texas Instruments Incorporated System and method for improving ECC enabled memory timing
US9195581B2 (en) * 2011-07-01 2015-11-24 Apple Inc. Techniques for moving data between memory types
GB2503470B (en) 2012-06-27 2014-08-13 Nordic Semiconductor Asa Memory protection
US9858229B2 (en) 2014-09-30 2018-01-02 International Business Machines Corporation Data access protection for computer systems
RU2580016C1 (ru) * 2014-10-17 2016-04-10 Закрытое акционерное общество "Лаборатория Касперского" Способ передачи управления между областями памяти

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102032146B1 (ko) 2018-04-11 2019-10-15 경희대학교 산학협력단 소자 결점을 보완하기 위한 구간 선형 정류 유닛을 사용하는 인공신경망 시스템

Also Published As

Publication number Publication date
JP2018514868A (ja) 2018-06-07
WO2016176593A1 (en) 2016-11-03
EP3289442A1 (en) 2018-03-07
CN107548492A (zh) 2018-01-05
US20190188163A1 (en) 2019-06-20
US10776292B2 (en) 2020-09-15
EP3289442B1 (en) 2023-04-19
US20160321202A1 (en) 2016-11-03
CN107548492B (zh) 2021-10-01
TW201706856A (zh) 2017-02-16
US10983931B2 (en) 2021-04-20

Similar Documents

Publication Publication Date Title
US10776292B2 (en) Apparatus and method for protecting program memory for processing cores in a multi-core integrated circuit
US10388393B2 (en) Apparatus and methods for debugging on a host and memory device
US9733950B2 (en) Boot sequencing for multi boot devices
US11048588B2 (en) Monitoring the operation of a processor
US10168957B2 (en) Directed placemat of data in memory
JP2013250980A (ja) プロセッサ資源および実行保護の方法および装置
US11461139B2 (en) Memory pool allocation for a multi-core system
KR100604877B1 (ko) 내장 시스템의 메모리 어드레스의 매핑을 제어하는 장치와방법
JP7332083B2 (ja) マルチモード保護メモリ
CN107851015B (zh) 向量操作数位大小控制
US20120017035A1 (en) Runtime reprogramming of a processor code space memory area
US20210055870A1 (en) Method for managing secure library supporting data storage, and associated electronic device
JP6603100B2 (ja) メモリ制御装置及びメモリ制御方法
KR20090128672A (ko) 다중 부팅 모드를 지원하는 장치 및 방법