KR100774598B1 - 순차 접근 메모리에 저장된 부트 코드를 통한 컴퓨터 시스템의 초기화 - Google Patents

순차 접근 메모리에 저장된 부트 코드를 통한 컴퓨터 시스템의 초기화 Download PDF

Info

Publication number
KR100774598B1
KR100774598B1 KR1020027009110A KR20027009110A KR100774598B1 KR 100774598 B1 KR100774598 B1 KR 100774598B1 KR 1020027009110 A KR1020027009110 A KR 1020027009110A KR 20027009110 A KR20027009110 A KR 20027009110A KR 100774598 B1 KR100774598 B1 KR 100774598B1
Authority
KR
South Korea
Prior art keywords
boot
access memory
sequential access
processor
code
Prior art date
Application number
KR1020027009110A
Other languages
English (en)
Other versions
KR20020097161A (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 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20020097161A publication Critical patent/KR20020097161A/ko
Application granted granted Critical
Publication of KR100774598B1 publication Critical patent/KR100774598B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • 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/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44573Execute-in-place [XIP]
    • 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
    • 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
    • G06F9/4403Processor initialisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Read Only Memory (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

컴퓨터 시스템은 프로세서와; 그리고 부트 프로그램이 저장되어 있는 순차 접근 메모리를 포함한다. 부트 로더는 상태 머신을 포함하는 바, 이러한 상태 머신은 컴퓨터 시스템의 초기화에 응답하여, 부트 프로그램을 판독하도록 순차 접근 메모리를 제어한 다음, 순차 접근 메모리 내의 부트 프로그램으로 점프하도록 프로세서를 제어한다. 부트 프로그램의 제 1 메모리 페이지에 의해, 부트 코드는 RAM에 전송된다. 이후, 프로세서는 RAM 내의 부트 코드로 점프하고, 이에 의해 부트 코드의 나머지가 순차 접근 메모리로부터 RAM으로 전송되어 실행된다.

Description

순차 접근 메모리에 저장된 부트 코드를 통한 컴퓨터 시스템의 초기화{COMPUTER SYSTEM INITIALIZATION VIA BOOT CODE STORED IN SEQUENTIAL ACCESS MEMORY}
본 발명은 일반적으로 전자 디지털 컴퓨터 기술에 관한 것으로서, 특히 부트 코드(boot code)가 순차 접근 메모리(sequential access memory)에 저장되는 컴퓨터 시스템에 관한 것이다.
종래의 디지털 컴퓨터 시스템은 부트 코드 명령어를 저장하고 있는 비휘발성 ROM을 갖고 있다. 이 부트 프로그램 코드는 운영 체제(OS) 또는 응용 프로그램이 시스템의 제어를 얻기 전에 그 시스템의 저레벨 하드웨어기능을 설정하는 데에 이용된다.
시스템의 중앙 처리 장치(CPU)(전형적으로 마이크로컨트롤러 또는 마이크로프로세서)는 시스템의 초기화(파워업 또는 리셋을 포함한다)시에 ROM 내의 소정의 어드레스로 점프하여, 부트 코드를 실행하도록 구성된다. 이러한 부트 코드에 의해, 운영 체제 또는 시작 응용 프로그램이 로드되어 실행된다.
부트 코드 ROM은 임의의 어드레스의 명령어 또는 데이터가 직접적으로 그리고 독립적으로 액세스될 수 있는 임의 접근 메모리(Random Access Memory)이다. 이것은, 분기 다음의 명령어가 메모리 내의 임의의 위치에서 판독될 수 있는 대부분의 프로그램의 분기 동작(branch behavior)을 지원한다. 이러한 메모리들은 또한 전원이 공급된 직후에 판독 준비가 된다.
임의 접근 메모리와 비교하여 장점들 및 단점들을 갖는 순차 접근 메모리들이 개발되었다. 순차 접근 메모리에서, 각 어드레스는 직접 액세스가 가능하지 않다. 이 메모리는, 예를 들어 각각 512 바이트인 페이지들로 구성되고, 그 페이지 상의 임의의 특정 어드레스에 저장된 코드를 얻기 위해서는 페이지 전체 또는 페이지의 반을 판독할 필요가 있다.
본 발명을 실시하는 데에 유익하게 이용될 수 있는 순차 접근 메모리는 캘리포니아 서니베일 소재의 Advanced Micro Device (AMD)사의 상표명 Am30LV0064D UltraNANDTM이다. 이 메모리는 NAND 아키텍쳐에 기초한 플래시 ROM 디바이스이다.
순차 접근 비휘발성 메모리와 비교하여, 임의 접근 ROM은 주로 어드레스 라인들에 대해 보다 많은 물리적인 핀들 및 연결들을 필요로 하고, 동일한 비트 밀도에 대해 더 많은 비용이 들고, 순차 접근 메모리처럼 고밀도로 사용할 수 없다.
한편, 순차 접근 메모리들은 일반적으로 한 세트의 정보를 선택하고 판독가능하게 하기 위해서는 커맨드 시퀀스가 장치에 기록될 것을 요구하며, 이에 따라 전원이 공급된 직후에는 판독 준비가 되지 않는다. 이들은 단지 새로운 커맨드 시퀀스가 기록될 때 까지 메모리 내의 순차적인 위치들로부터 정보를 읽을 수 있을 뿐이며, 이에 따라 직선적인 프로그램 실행 만을 지원한다.
비휘발성 순차 메모리의 고밀도 및 저비용의 이점이 요구되는 컴퓨터 시스템에서, 최소한 최초의 프로그램 실행(initial program execution)(시스템으로 부팅하는 것으로도 알려져있다)을 지원하기 위해서는 비휘발성 임의 접근 메모리를 제공할 필요가 있었다. 이러한 프로그램 실행은, 적어도 순차 접근 메모리가 판독을 위해 셋업되고, 순차 접근 메모리 내의 프로그램들이 실행을 위해 휘발성 RAM에 전달될 수 있을 때까지 비휘발성 ROM에서 실행되어야 한다.
상기 설명한 바와 같이, 순차 접근 메모리는 임의 접근 메모리보다 비용이 낮고 밀도가 높다. 바람직한 타입의 이용 메모리가 순차 접근 메모리인 시스템에서, 시스템의 비용 및 크기를 줄이기 위해서는, 최초 프로그램 실행을 지원하기 위한 개별적인 비휘발성 임의 접근 메모리의 필요성을 제거하는 것이 바람직하다. 하지만, 종래에는 이러한 기능을 제공하지 못했다.
삭제
상기의 관점으로부터, 본 발명은 순차 접근 메모리만을 사용하여 최초 프로그램 실행을 수행함으로써 개별적인 비휘발성 임의 접근 메모리에 대한 필요성을 없애는 컴퓨터 시스템을 제공한다.
이것은, 프로세서, 부트 프로그램이 저장된 순차 접근 메모리 및 부트 로더(boot loader)를 포함하는 본 발명에 따른 컴퓨터 시스템에 의해 달성된다. 부트 로더는 상태 머신을 포함하는 바, 이 상태 머신은 컴퓨터 시스템의 초기화에 응답하여, 부트 프로그램의 제 1 부분을 포함하는 순차 접근 메모리의 제 1 메모리 페이지를 판독하도록 순차 접근 메모리를 제어한다. 부트 코드의 제 1 부분은 순차 접근 메모리가 프로세서에 메모리의 순차 워드들 만을 전달할 수 있다는 조건하에서 생성된다. 부트 코드의 제 1 부분은 프로세서에게 부트 코드의 제 2 부분을 휘발성 RAM 내에 복사하도록 명령한다. 일단 부트 코드의 제 2 부분이 RAM 내에 복사되면, 부트 코드의 제 1 부분은 분기 (점프) 명령어를 실행하는 바, 이는 RAM 내의 부트 코드의 제 2 부분에 제어를 전송한다. 이렇게 되면, 부트 코드의 제 2 부분은, RAM의 부트 코드 내에서의 점프를 포함하는 통상의 코드 실행을 가능하게 하는 RAM 메모리의 임의 접근 특성을 이용할 수 있게 된다. 부트 코드의 제 2 부분은, 필요한 다른 코드를 RAM에 전달하기 위해, 적절한 커맨드들이 순차 접근 메모리에 전송되게 할 수 있다.
본 발명의 상기 또는 다른 특징 및 장점은 첨부된 도면 및 하기의 상세한 설명으로부터 본 발명이 속하는 기술 분야의 당업자에게 명백해질 것이다. 도면에서, 동일한 도면 부호는 동일한 부분을 나타낸다.
도 1은 본 발명에 의한 컴퓨터 시스템의 단순화된 블록도이다.
도 2는 도 1의 컴퓨터 시스템의 부트 로더 및 순차 접근 메모리의 전기적인 개략도이다.
도 3은 부트 로더의 핀 구성도이다.
도 4는 본 발명에 의한 방법을 나타낸 흐름도이다.
도 5는 부트 로더의 상태 머신을 나타낸 상태도이다.
도 6은 본 시스템의 타이밍도이다.
도 7은 부트 로더 및 순차 접근 메모리의 보다 상세화된 전기적인 개략도이다.
도 8은 단일 집적 회로에서 구현된 부트 로더 및 순차 접근 메모리의 단순화된 블록도이다.
도 1은 마더보드(12)를 포함하는 본 발명에 따른 컴퓨터 시스템(10)을 나타낸다. 이러한 마더보드(12) 상에는, 마이크로컨트롤러 또는 마이크로프로세서라고도 알려져있는 프로세서 또는 중앙 처리 장치(CPU)(14), 휘발성 RAM(16) 및 파워 서플라이(18)가 통상적인 방식으로 동작가능하게 제공된다. 입출력(I/O) 장치(20)는 마더보드(12)를 디스플레이 모니터(22), 키보드(24) 및 1개 이상의 디스크 드라이브(26) 등의 전형적인 I/O 장치들에 서로 연결시킨다. 이러한 컴포넌트들은 28에 총체적으로 나타낸 바와 같이 신호 버스들, 전력선들, 커넥터 등에 의해 서로 연결된다.
본 발명에 따르면, 시스템(10)은 파워 굿(power-good) 신호 또는 리셋 신호 발생기(30)를 더 포함하는 바, 이는 파워 서플라이(18)가 턴온되고 동작 전압들이 그 적정 레벨들에 이른 후에 PWRGOOD(또는 RESET) 신호를 발생시킨다. 시스템(10)은 순차 접근 메모리(32) 및 부트 로더(34)를 더 포함한다.
메모리(32)는 캘리포니아 서니베일 소재의 Advanced Micro Device(AMD)사로부터 상업적으로 입수할 수 있는 상품명 UltraNANDTM 메모리가 바람직하다. 본 예에 나타낸 메모리(32)는 NAND 아키텍쳐 기반의 Am30LV0064D UltraNANDTM 플래시 EEPROM이며, 64 메가비트의 데이터를 저장할 수 있다. 데이터는 16,384개의 메모리 페이지에 저장되는 바, 각 페이지는 512 바이트의 레귤러 데이터(regular data) 및 16 바이트의 스페어 데이터(spare data)를 포함한다. 본 발명에 따르면, 메모리(32)는 최하위 메모리 페이지(lowest memory page)에서 시작되는 부트 코드 명령어들을 저장하는 바, 이들은 컴퓨터 시스템(10)의 초기화(파워업 또는 리셋)시에 최초로 실행된다. 이를 위해 어떠한 비휘발성 RAM도 제공되지 않는다.
부트 로더(34) 및 메모리(32)는 도 2에 도시되어 있으며, 부트 로더(34)의 핀구성도는 도 3에 도시되어 있다. 부트 로더(34)는 캘리포니아 서니베일 소재의 Vantis사로부터 상업적으로 입수할 수 있는 AmPALLV16V8-10SC 프로그램가능 논리 디바이스(PLD)인 것이 바람직하다. 메모리(32)의 및 부트 로더(34)의 상세한 구성 및 동작은 하기에서 제시된다.
도 4는 시스템(10)에 의해 수행되는 본 발명에 의한 부트스트랩 로딩 방법을 나타내는 흐름도이다. 초기화되면, 부트 로더(34)는 프로세서(14)를 억제하여, 명령어들을 실행하는 것을 막는다. 부트 로더(34)는 PWRGOOD 신호의 상태를 감지하고, 이 PWRGOOD 신호가 파워 서플라이(18)가 적절한 동작 전압을 발생시키고 있음을 표시할 때에 인에이블된다.
부트 로더(34)는 프로그램된 논리에 의해 그 내에 구현되는 내부 상태 머신을 갖는다. 메모리(32)는 데이터의 판독이 가능해지기 전에, 셋업 커맨드의 기록을 요구한다. 부트 로더(34) 내의 상태 머신은 셋업 커맨드들을 발생시킨 다음, 메모리(32)에 기록한다. 먼저, 부트 로더(34)는 판독 커맨드를 메모리(32)의 커맨드 래치에 기록한다. 이후, 부트 로더(34)는 어드레스를 메모리(32)의 어드레스 래치에 기록한다.
본 예에서는, 갭리스 판독 커맨드(Gapless read command)가 이용된다. 이러한 갭리스 판독 커맨드는 UltraNAND 메모리(32)의 슈퍼셋(superset) 커맨드로서, 다수의 메모리 페이지들을 순차적으로 출력할 수 있게 한다. 또한, 통상의 판독 커맨드도 이용가능한 바, 이것은 한 번에 단일 페이지를 판독하고, 각 페이지가 528 비트 출력 데이터 레지스터에 로드될 때 마다 7Ts의 대기 시간을 수반한다. 갭리스 판독 커맨드는 페이지간 대기 시간(inter-page latency)을 제거하고, 제 1 페이지가 로드될 때의 단일의 7Ts 대기 시간 만이 있다. 이에 의해, 부트 코드는 메모리에 대한 임의의 추가의 판독 커맨드를 필요로 하지 않으면서 다수의 메모리 페이지들을 스팬(span)할 수 있게 된다. 부트 로더(34)가 메모리(32)의 어드레스 래치에 로드하는 어드레스는 메모리(32)의 제 1 페이지의 어드레스이다. 하지만, 통상의 판독 커맨드가 본 발명의 범위에서 대안적으로 이용될 수 있다.
다음 단계에서, UltraNAND 메모리(32)는 그 내부 구조로부터 그 출력 데이터 레지스터에 부트 코드의 제 1 페이지를 판독하고, 그의 Ready/Busy(RY/BY#) 신호를 Ready 상태로 설정함으로써 페이지 판독 동작의 완료를 표시한다. 부트 로더(34) 상태 머신은 INIT#를 비활성이 되게 함으로써 프로세서(14)가 명령어 실행을 진행할 수 있게 한다. 프로세서(14)에는 통상의 상태 머신 또는 하드 마이크로코드가 제공되어, 그 프로세서가 시스템에서 부트 코드를 찾아낼 것으로 기대하는 소정의 어드레스로 점프하게 한다. 시스템은 메모리(32)를 선택하기 위해 이러한 어드레스를 디코딩한다. 프로세서는 메모리(32)의 출력 데이터 레지스터 내의 제 1 메모리 페이지로부터 부트 코드 명령어들을 판독 및 실행하기 시작한다. 주목할 사항으로서, 프로세서는 메모리에 의해 제공되는 어떤 데이터도 부트 코드 명령어로서 받아들인다. 프로세서에 의해 제시되는 부트 코드 어드레스는 메모리에 의해 무시된다. 이는, 프로세서가 부트 코드를 선택하기 위해 하위 또는 상위 어드레스 값을 이용하든지에 상관없이, 임의의 프로세서에 대해 동일한 제 1 메모리 페이지가 이용됨을 의미한다. 그러나, 부트 코드는 프로세서가 부트 코드를 선택하기 위해 이용하는 어드레스를 인식하고 있어야 한다. 부트 코드의 제 1 워드에 대해 상위 메모리 어드레스를 이용하는 프로세서의 경우, 그 코드는 프로세서 어드레스를 하위 어드레스로 변경하는 점프 명령어를 포함해야 한다. 이 어드레스는 여전히 메모리(32)를 선택하기 위해 시스템에 의해 디코드되는 어드레스 범위 내에 있어야 한다. 이러한 점프 명령어가 없으면, 이러한 프로세서는 더 이상 부트 메모리(32)를 선택하지 않는 하위 메모리 어드레스에 랩 어라운드(wrap around)하는 포인트까지 그 어드레스를 증분시킬 수 있다. UltraNAND 디바이스는 단지 어드레스 버스로부터 독립적인 명령어의 순차적 스트림을 운반하기 때문에, 이용되는 실제 어드레스는 중요하지 않다. 하지만, 점프 목적지 어드레스는, 부트 코드의 제 1 부분이 RAM에 복사되는 부트 코드의 제 2 부분에 점프할 때 까지 메모리(32) 어드레스 공간 내에 상기 어드레스를 유지하도록, 메모리의 상부(top)로부터 충분히 아래에 있어야 한다.
또한, 부트 코드는 프로세서가 어떻게 명령어를 페치하는 지를 인식하고 있어야 한다. 많은 프로세서는, 프로세서의 명령어 실행 상태 머신이 명령어들을 실제로 이용하기 전에 그 명령어들을 버퍼 내에 판독하는 명령어 페치 상태 머신을 갖는다. 이것은 흔히 명령어의 프리페치라 불린다. 점프 명령어가 실행될 때, 프리페치된 명령어는 무시될 것이다. 프리페치되어 프리페치 버퍼에 넣어진 어떠한 명령어도, 점프 명령어가 어드레스(이 어드레스로부터 다음 명령어가 실행되어야 한다)를 변경할 때에는 실행되지 않는다. 이것은, 순차 접근 메모리가 프로세서 어드레스를 무시하기 때문에 중요하다. 메모리의 판독이 행해질 때 마다, 순차 접근 메모리는 단지 메모리로부터 다음 워드를 전달한다. 점프 명령어가 실행되어 프리페치 버퍼를 클리어하기 전에 명령어 프리페치 상태 머신은 메모리로부터 복수의 워드들을 취할 수 있기 때문에, 부트 코드는 얼마나 많은 메모리 워드들이 점프 명령어에 의해 폐기(discard)될 수 있는 지를 인식하고 있어야 한다. 점프 이후 실행되어야 하는 다음 명령어는 프리페치 버퍼로부터 클리어될 수 있는 점프 명령어 다음의 위치들의 범위에 있어서는 안된다. 스킵되어야 하는 워드들의 정확한 수가 예측될 수 없다면, 코드는 점프 명령어 다음에 충분한 비동작(No-operation, NOP) 명령어들을 포함시킴으로써, 점프 다음의 명령어가 확실히 폐기되지 않게 할 필요가 있다. 점프 이후의 NOP 명령어의 임의의 부분은, 다음의 유효 명령어가 코드에 도달할 때까지 안전하게 실행될 수 있다. 페치되고 이후 프리페치 버퍼로부터 클리어되는 NOP 명령어들의 정확한 수는 나머지 코드 실행에 대해 문제가 되거나 간섭하지 않는다.
상기 설명한 바와 같이, 명령어 페치 어드레스에 대한 임의의 조정을 행한 이후, 다음 태스크(task)는 부트 코드의 제 2 부분을 RAM에 복사하는 것이다. 바람직하게는, 부트 코드의 다음 명령어는 "스트링 복사(string copy)" 동작을 야기하는 바, 이 동작에 의해 메모리(32) 내의 직후의 워드들의 순차적인 그룹이 XIP(Execution in Place, 제자리 실행) 휘발성 임의 접근 메모리 내에 복사된다. 이러한 워드들의 그룹은, 부트 코드의 제 1 부분 내에 끼워 넣어지는 부트 코드의 제 2 부분이다. XIP 메모리는 RAM(16)이거나, 또는 대안적으로는 프로세서(14) 내의 캐시 또는 다른 메모리가 될 수 있다.
여기에서 또한, 어떠한 프로세서들은 명령어 프리페칭을 수행하기 때문에, 스트링 판독 명령어와 부트 코드의 제 2 부분의 시작 사이에 NOP 명령어들을 삽입할 필요가 있다. 이것은, 스트링 복사가 메모리로부터 워드들의 판독을 시작하기 전에, 부트 코드의 어떠한 제 2 부분도 프리페치 버퍼 내에 받아들여질 수 없게 하기 위한 것이다. 프리페치 버퍼 내에 이미 있는 워드들과 스트링 복사 명령어에 의해 처음 복사된 워드들 간의 시작 경계를 예측하는 것이 불가능할 수도 있다. 따라서, 복사되는 스트링의 종단 다음에는 부가적인 NOP 명령어들이 뒤따라야 하고, 복사의 길이는 부트 코드의 모든 제 2 부분 전부가 복사되도록 보장해야 한다. 따라서, 복사되는 스트링은 얼마의 시작 또는 종단 NOP 명령어들을 포함할 수 있다. NOP 명령어들은 부트 코드의 제 1 부분 또는 제 2 부분에 의해 수행되는 동작들에 영향을 주지 않는다. 하지만, 이들은 실행되는 명령어와 복사되는 스트링 사이의 경계에 유연성을 준다.
스트링 코드 내의 코드의 정확한 정렬은 알 수 없기 때문에, XIP 메모리 내에 로드되는 부트 프로그램의 부분 내에 상대 분기(relative branch)를 이용할 필요가 있다.
또한, XIP 메모리에 부트 코드의 제 2 부분을 어셈블하기 위해서는 일련의 즉시 이동 명령어(move immediate instruction)들을 이용하는 것이 가능하다. 이에 의해, 코드 정렬에 대해 보다 많은 제어를 제공한다. 하지만, 이것은 부트 코드를 더 크게 하고 생성을 더욱 어렵게 하는데, 그 이유는 부트 코드의 제 2 부분은 명령어들의 스트림으로부터 즉시 이동 명령어들의 스트림(여기서, 이동되고 있는 이동되는 데이터는 부트 코드의 제 2 부분의 이미지이다)으로 변환되어야 하기 때문이다.
부트 코드의 제 2 부분이 XIP 메모리에 저장된 후, 부트 코드의 제 1 부분의 마지막 명령어(메모리(32)로부터 실행된다)에 의해, 프로세서는 XIP 메모리 내의 어드레스로 점프한다. 이후, 프로세서는 메모리(32)로부터 복사된 부트 코드의 제 2 부분을 실행하기 시작한다. 이것은 부트스트랩 프로세스로서, 복수의 단계들로 계속될 수 있다. 첫번째 단계는 순차 접근 메모리(32)로부터 실행되는 부트 코드이다. 다음 및 임의의 후속 단계들은 메모리(32)로부터 XIP 메모리로 복사되고 실행을 위해 점프되는 부가적인 초기화 코드 블록들을 필요로 한다. 비록 명시적으로 설명되지는 않았지만, 전형적으로 부트스트랩 프로세스는 또한 하드 드라이브로부터 운영 체제 및 가능하게는 1개 이상의 응용 프로그램들을 로딩하고 실행시킨다.
바람직하게는, 도 8의 32' 및 34'로 나타낸 바와 같이, 부트 로더(34)의 상태 머신 및 관련 기능은 단일 집적 회로(40) 내에 순차 접근 메모리와 함께 구현될 수 있다. 이것은, 예를 들어 요구되는 부트 로더 기능을 수행하기 위해 순차 접근 메모리에 충분한 논리 회로를 부가함으로써 달성될 수 있다. 이 실시예는 보다 단순하며, 순차 접근 메모리와 임의 접근 메모리의 어떠한 작은 부분을 통합하는 것 보다 적은 디바이스 변경을 요구한다. 이것은, 상태 머신이 어떠한 부가적인 프로세스 단계 또는 부가적인 어드레스 핀도 요구하지 않기 때문이다. UltraNAND 또는 다른 순차 접근 메모리는 유사한 타입의 다른 메모리들에 대해 핀의 호환성을 유지할 수 있다.
다음의 설명은 본 발명의 상세한 기능을 개시하고 있다.
개요
UltraNAND 제품 라인은 고밀도의 비휘발성 메모리에 대한 수요에 대처하기 위해 Advanced Micro Device(AMD)사에 의해 개발되었다. 타켓 애플리케이션은 내장형 또는 탈착가능한 미디어 시스템의 코드 및 데이터 저장을 포함한다. 하기의 상세한 설명은 UltraNAND 메모리와 함께 이용하기 위한 부트 로더 PLD를 제시한다.
일반적으로, 마이크로컨트롤러 기반의 시스템은, UltraNAND 제어 신호들을 직접 제공하는 데에 사용될 수 있는 프로그램가능한 입출력(PIO) 핀들을 이용가능하게 한다. 이러한 PIO 핀들이 이용가능하지 않은 경우에는, 프로세서, 부트 로더 및 순차 접근 메모리 간의 적절한 연결을 위해 임의의 부가적인 인터페이스 논리가 요구될 수 있다. 부트 로더 PLD는 단일의 AmPALLV16V8-10SC 칩 내에 설계될 수 있고, 파워업 이후 UltraNAND 디바이스로부터 직접 부트할 필요가 있는 코드 저장 애플리케이션들을 지원하도록 의도된다.
UltraNAND의 코드 저장 관련 이점
UltraNAND는 이미 시장에서 입수할 수 있는 NAND 아키텍쳐의 플래시 메모리들과 완전히 하드웨어적 및 소프트웨어적으로 호환가능하도록 설계되었다. 하지만, UltraNAND는 에러 정정 회로(ECC)를 필요로 하지 않으면서 100,000 프로그램/삭제 사이클 내구성(endurance)을 제공하는 개선된 제품으로서 설계되었다. UltraNAND는 또한 100% 양호한 블록들이 이용가능하여, 불량 블록 맵핑(bad blocking mapping)의 필요성을 없앤다.
(NOR 플래시 보다) 낮은 비트당 비용, ECC를 필요로 하지 않는 증가된 프로그램/삭제 사이클 내구성 및 100% 양호한 디바이스들의 이용가능성에 의해, UltraNAND가 코드 저장 애플리케이션에 이상적으로 적합하게 된다. 특히, 시스템 코드가 UltraNAND 플래시 메모리에 저장되고, 고속의 임의 접근 또는 실행을 위해 동기(synchronous) DRAM 등의 고속의 메모리 자원들에 대해 전송 또는 새도우(shadow)되는 경우에 적합하다.
부트 로더 PLD
UltraNAND로부터 직접 부팅할 필요가 있는 코드 저장 애플리케이션에 대해서는, UltraNAND 초기화를 위해 어떠한 타입의 부트 로더가 요구된다. 이것은, 파워업 이후, UltraNAND 데이터 레지스터들의 유효 정보를 포함하지 않기 때문이다. 이러한 부트 로더 PLD(34)는 프로세서를 버스로부터 오프(off)시켜 유지하고, 최대 2개의 UltraNAND 플래시 디바이스들을 초기화하는 데에 필요한 제어 신호 시퀀스를 제공한다.
초기화 프로세스는 부트 코드를 포함하는 제 1 플래시 메모리 페이지를 내부의 UltraNAND 데이터 레지스터들 내에 프리로드(pre-load)하기 위해 UltraNAND 디바이스들 각각에게 AMD 슈퍼셋 갭리스 판독 커맨드(02h)를 발행(issue)한다. 이에 의해, 시스템 마이크로컨트롤러 또는 프로세서(14)는 파워업 이후 메모리(32)로부터 순차적인 시스템 부트 코드를 판독하여 실행할 수 있게 된다. 코드 저장 애플리케이션들에 있어서, 시스템 마이크로컨트롤러는 UltraNAND 디바이스(32)로부터 부트한 다음, UltraNAND에 저장된 나머지 코드를 코드 실행을 위해 RAM에 전송할 수 있다. 코드는 RAM으로부터 실행될 수 있기 때문에, XIP 메모리라고도 불린다.
부트 액세스를 위한 UltraNAND 인터페이스 요건
UltraNAND 메모리(32)는 멀티플렉스된 어드레스/데이터 버스를 사용한다. 모든 커맨드, 어드레스 및 데이터 정보는 I/O[0..7](8비트의 I/O포트)를 통해 디바이스에/로부터 전달된다. 디바이스 상에 제공되는 제어 신호들은, CE#(칩 인에이블), CLE(커맨드 래치 인에이블), ALE(어드레스 래치 인에이블), WE#(기록 인에이블), SE#(스페어 영역 인에이블) 및 WP#(기록 방지)이다. 또한, 디바이스가 내부 동작에 의해 비지 상태(busy) 상태가 되는 때를 나타내는 데에 이용되는 오픈 드레인 RY/BY#(Ready/Busy) 출력핀이 있다.
UltraNAND를 사용하는 시스템 애플리케이션들은, 많은 경우 다른 시스템 자원에서 사용되지 않는 적절한 제어 신호들을 디바이스에 대해 발생시켜야 한다. 여기에서 설명되는 부트 로더 PLD(34)는 디바이스 초기화를 위해 UltraNAND 메모리(32)에 의해 요구되는 모든 유일한 신호(unique signal)들을 제공한다.
UltraNAND 디바이스에 포함된 정보의 페이지를 내부 데이터 레지스터들에 전달하기 위해, 커맨드 및 어드레스 시퀀스가 수행되어야 한다. 이러한 커맨드 및 어드레스 입력에 이어서, UltraNAND 디바이스는 7TS(최악의 경우)의 판독 대기 시간(이 시간 동안 디바이스는 비지 상태로 보일 것이다) 내에서, 적절한 플래시 페이지로부터의 정보를 데이터 레지스터들에 전송할 것이다. 일단 비휘발성의 정보 페이지가 데이터 레지스터들에 성공적으로 전송되면, UltraNAND 디바이스는 준비(ready) 상태가 되고, 시스템은 바이트당 50nS의 최대 속도로 플래시 디바이스(32)로부터 유효 정보를 순차적으로 판독할 수 있다.
시스템 인터페이스 설명
이 예에서, 부트 로더 PLD 유닛(34)은 단일의 UltraNAND 디바이스(32)를 지원한다. 부트 로더 PLD(34)는 일시적으로 부트 로딩 프로세스 동안 UltraNAND 플래시에 의해 요구되는 시스템 제어 신호의 소스가 된다. 이렇게 되면, 부트 로더 PLD(34)는 UltraNAND 초기화를 위해 요구되는 신호 시퀀스를 발생시킬 수 있다.
파워 굿 신호 발생기(30)는 부트 로더 PLD(34)에 PWRGOOD 입력 신호를 제공하는 바, 이는 Vcc가 유효할 때까지 로우로 유지된다. PWRGOOD가 무효(로우) 상태에서 유효(하이) 상태로 천이할 때, 부트 로더 PLD(34)는 이러한 천이를 검출하고 UltraNAND 디바이스(32)를 초기화한다.
PWRGOOD 신호가 사용되지 않는 어떠한 애플리케이션들에서는, 시스템 RESET# 신호가 대신 이용될 수 있다. 부트 로더 PLD(34)에 의해 발생되는 INIT# (초기화) 신호는 부트 로더 PLD(34)가 UltraNAND 디바이스(32)를 초기화하는 데에 비지 상태임을 나타내는 데에 이용된다. 시스템(10)은 INIT# 신호를 모니터하여, 이 INIT#가 무효(하이)가 될 때까지 시스템 마이크로컨트롤러(14)를 버스로부터 오프시켜야 한다. 일단 INIT#가 UltraNAND 부트 프로세스의 완료를 표시하면, 시스템(10)은 마이크로컨트롤러(14)가 UltraNAND 디바이스로부터 정보를 판독할 수 있게 한다.
많은 경우들에 있어서, INIT# 신호는 시스템(10)의 나머지 부분들에 대한 리셋 신호로서 이용될 수 있다. 통상의 시스템 RESET# 신호는 단지 부트 로더 PLD(34)에게만 향하고, 부트 로더는 INIT# 신호를 사용하여, UltraNAND 디바이스(32)가 판독될 준비가 될 때까지 시스템(10)의 나머지 부분들을 리셋 상태로 유지한다.
부트 로더 프로세스의 어드레스 단계 동안, 어드레스 바이트들은 디바이스가 비지 상태가 될 때까지 UltraNAND에 기록될 것이다. 이에 의해, 부트 로더(34)는 3개 이상의 어드레스 펄스들을 요구하는 디바이스들을 지원할 수 있다. 부트 로더 초기화 프로세스에 이어서, 부트 로더는 WE#, CLE, ALE 및 I/O1를 3상태(tri-state)로 하고, CE0# 및 CE1#를 시스템 버스(28)로부터 UltraNAND 디바이스로 보낸다.
부트 로더 신호 설명
UltraNAND 부트 로더(34)는 갭리스 판독 커맨드 시퀀스로, 1개 또는 2개의 UltraNAND 디바이스를 초기화하는 데에 요구되는 모든 신호들을 발생시킨다. PLD(34) 내의 간단한 상태 머신은 INIT#, WE#, CLE, ALE 및 I/O1를 제어하여 UltraNAND 초기화를 제어한다. 부트 로더 PLD(34)를 개시하기 위해, 시스템은 SYSCLK(시스템 클럭) 및 PWRGOOD(파워굿 표시자)를 제공할 필요가 있다. 모든 관련 신호들의 정의 및 신호들을 발생시키는 데에 요구되는 소스가 하기의 테이블에 리스트된다. 부트 로더 초기화 시퀀스의 타이밍도가 도 6에 도시되어 있다.
신호 소스 정의
ALE 부트로더/시스템 UltraNAND 어드레스 사이클 동안 3상태 어드레스 래치 인에이블
CLE 부트로더/시스템 UltraNAND 명령어 사이클 동안 3상태 커맨드 래치 인에이블
WE# 부트로더/시스템 부팅 동안 UltraNAND를 초기화하는 데에 이용되는 3상태 기록 신호
INIT# 부트로더 부트로더, PLD가 UltraNAND를 초기화하고 있음을 표시
I/O[0..7] 부트로더/시스템 UltraNAND에 커맨드 및 어드레스를 전송하는 데에 이용되는 I/O 라인
ST3 부트로더 PLD로부터의 미사용된 최상위의 상태 머신 출력
OE# 부트로더 PLD 레지스터 출력을 인에이블하기 위해 INIT#에 결합되어야 함
OUTCE[0..1]# 부트로더 PLD에서 UltraNAND 디바이스로의 칩 인에이블 출력
CE[0..1]# 시스템 UltraNAND에 대한 시스템으로부터의 칩 인에이블 디코드 신호
PWRGOOD 시스템 VCC가 유효할 때 까지 로우를 유지하는 파워굿 신호
SYSCLK 시스템 부트로더 상태 머신에 의해 요구되는 시스템 클럭
READY UltraNAND UltraNAND의 상태를 표시하기 위해 RY/BY# 신호에 연결
부트 로더 PLD 동작 이론
본 섹션에서는, 부트 로더 PLD(34)의 설계 및 동작에 대해 설명한다. 부트 로더 PLD(34)는 상태 머신 및 I_01에 대해 플립 플롭들을 이용한다. 최대 2개의 UltraNAND 디바이스(32)를 제어하는 데에 요구되는 다른 모든 신호들을 발생시키기 위해, 조합 논리가 이용된다. 본 섹션에서 이용되는 디바이스의 참조 부호는, "2개의 UltraNAND 디바이스를 지원하는 전형적인 부트 로더 애플리케이션"의 개략도인 도 7에 나타난다.
출력 신호 생성
INIT#는, 부트 로더 PLD(34)가 UltraNAND(32) 어레이를 초기화하고 있음을 시스템에게 알리는 데에 이용되는 조합 출력이다. INIT#가 액티브인 동안, 시스템(10)은 정상적인 시스템 동작 동안 UltraNAND CLE, ALE, WE# 및 I/O[0..7] 신호들을 구동시키기 위해 이용되는 시스템 신호들(어드레스 라인들 또는 PIO 핀들)을 3상태로 유지해야 한다. 많은 경우, INIT# 신호는 다른 시스템 컴포넌트들에 대한 리셋 신호로서 이용될 수 있는데, 그 이유는 리셋 상태는 종종 프로세서의 출력을 3상의 상태로 유지시키기 때문이다.
INIT# 기간 동안, PLD(34)는 커맨드 및 어드레스 정보를 UltraNAND(32) 데이터 버스 상에 구동시키고, UltraNAND 초기화에 대해 요구되는 바와 같이 CLE, ALE, WE#를 제어한다. CLE가 액티브한 커맨드 단계 동안, I_O1을 이용하여 02h 값을 UltraNAND(32) 데이터 버스 상에 구동시킴으로써, 갭리스 판독 커맨드를 UltraNAND(32)에 기록한다. CLE가 인액티브하고 ALE이 액티브한 어드레스 단계 동안, 00h 값이 UltraNAND(32) 데이터 버스 상에 구동된다.
이에 의해, 부트 로더 PLD(34)는 블록 0, 페이지 0, 바이트 0에 대한 어드레스를 UltraNAND(32)에 로드할 수 있게 되어, 시스템은 초기화 이후의 제 1 바이트를 판독할 수 있게 된다. INIT# 동안, PLD(34)는 칩 인에이블 입력들의 상태에 관계없이 출력 칩 인에이블을 활성화시킨다. 이에 의해, 부트 로더 PLD(34)는 부트 로더 동작 동안 최대 2개의 UltraNAND(32)를 동시에 초기화할 수 있다.
I_O1은 3상태 레지스터 출력으로서, 부트 로더 PLD(34) 초기화 단계 동안 갭리스 판독 커맨드(02h)를 UltraNAND(32)에 기록하는 데에 이용된다. INIT#가 액티브할 때, 시스템은 UltraNAND(32) 데이터 버스(I/O)[0..7]를 3상태로 유지하도록 요구된다. 풀다운(pull-down) 저항팩(R4)에 의해, 다른 모든 데이터 비트들을 로우로 유지하게 되면, I_O1은 커맨드 단계 동안 하이로 구동되어, 02h 오피코드(op-code)를 UltraNAND(32)에 기록할 수 있게 된다. 어드레스 단계 동안, I_O1는 로우로 구동되고, 이에 따라 모든 어드레스 사이클들은 00h 값을 UltraNAND(32) 어드레스 레지스터들을 기록하게 된다. OUTCE[0..1]#은 UltraNAND(32) 디바이스들을 인에이블시키는 데에 이용되는 2개의 칩 인에이블 출력들이다.
칩 인에이블들은 부트 로더의 액티비티(activity)를 위해 INIT# 기간 동안 액티브 상태로 강제된다. 일단 INIT#가 인액티브(하이)가 되면, 칩 인에이블 입력들에 의해 칩 인에이블 출력들이 결정된다. ST[0..3]는 상태 머신의 최대 16개의 상태들을 정의하는 데에 이용되는 4개의 3상태 레지스터된 상태 비트(tri-stated registered state bit)들이며, 이들중 9개의 상태들이 실제로 이용된다. 이러한 비트들은 INIT#가 액티브인 기간 동안 액티브하게 구동되고, INIT#가 인액티브할 때에는 3상태가 된다.
이러한 상태 비트들중 3개는 WE# (ST0), CLE (ST1) 및 ALE (ST2)를 정의하는 데에 이용된다. 부트 로더 PLD(34) 내의 상태 머신은, PLD 출력들이 현재 상태와 입력 조건들에 의존하는 전형적인 밀리 머신(Mealy machine)이다. AmPALLV16V8-10SC 디바이스(34)는 모든 레지스터된 출력이 하이인 상태로 파워업된다. 따라서, 상태 머신은 휴지(IDLE) 상태를 전부 1의 출력 상태로서 정의한다.
상태(01) 내지 상태(09)는, 조합 출력에서 노이즈 펄스를 제거하고 비동기 입력에 의한 난조 상태(race condiction)를 피하기 위한 크레이 코드 변화이다. 도 5는 상태 머신 흐름도를 나타낸다.
WE#와 같은 ST0은, 초기화동안 UltraNAND(32) 플래시에 정보를 기록하는 데에 이용된다. 시스템은 초기화 기간 동안 UltraNAND(32)에 대한 시스템 WE# 입력을 3상태로 유지하도록 요구된다. 일단 초기화가 완료되면, 부트 로더 PLD(34)는 WE# 출력을 3상태로 하고, 시스템(10)는 요구되는 WE#를 구동할 수 있게 된다.
CLE와 같은 ST1은, 초기화 동안 UltraNAND(32) 플래시에 대한 커맨드 기록을 인에이블시키는 데에 이용된다. 시스템은 초기화 기간 동안 UltraNAND(32)에 대한 시스템 CLE 입력을 3상태로 유지하도록 요구된다. 일단 초기화가 완료되면, 부트 로더 PLD(34)는 그의 CLE 출력을 3상태로 하고, 시스템(10)은 요구되는 CLE를 구동할 수 있게 된다.
ALE와 같은 ST2은 초기화 동안 UltraNAND(32)에 대한 어드레스 기록을 인에이블시키는 데에 이용된다. 시스템은 초기화 기간 동안 UltraNAND(32)에 대한 시스템 ALE 입력을 3상태로 유지하도록 요구된다. 일단 초기화가 완료되면, 부트 로더 PLD(34)는 그 ALE 출력을 3상태로 하고, 시스템(10)은 요구되는 ALE를 구동할 수 있게 된다.
다른 신호
CE[0..1]#는 UltraNAND(32) 디바이스들을 선택하기 위해 시스템(10)에 의해 발생되는 2개의 칩 인에이블 입력 신호들이다. 초기화 프로세스 동안, CE[0..1]# 입력들은 부트 로더 PLD(34)에 의해 무시되고, OUTCE[0..1]#가 액티브하게 구동되어, 이용되는 UltraNAND(32) 디바이스를 선택한다. 일단 초기화가 완료되면, 부트 로더 PLD(34)는 단지 CE[0..1]# 출력을 통해 시스템(10) CE[0..1]# 신호들을 UltraNAND(32) 디바이스들 상에 보낸다.
PWRGOOD는, 부트 로더 PLD(34)가 UltraNAND(32)를 초기화해야 할 때를 나타내는 데에 이용되는 시스템 발생 신호이다. PWRGOOD는, Vcc가 유효할 때 까지 파워업 동안 로우(디어서트(de-asserted)) 상태를 유지한다. 파워가 부트 로더 PLD(34)에 인가되면, 상태 머신은 IDLE 상태가 되고, PWRGOOD가 액티브(하이) 상태가 될 때 까지 이 상태를 유지한다. 일단 부트 로더 PLD(34)에 의해 PWRGOOD의 로우로부터 하이로의 천이가 검출되면, PLD(34)는 UltraNAND 플래시 메모리(32)를 초기화하기 시작한다.
이용가능한 PWRGOOD 신호를 갖지 않는 시스템에 대해서는, 일반적으로 시스템 RESET# 신호가 동일한 기능을 수행한다. RESET#가 시스템을 리셋하기 위해 액티브(로우)가 되면, 부트 로더 상태 머신은 IDLE 상태가 된다. RESET#이 인액티브(하이)가 되면, 부트 로더는 UltraNAND(32) 디바이스들을 초기화한다.
RY/BY#는, 언제 디바이스가 내부 동작으로 인해 비지 상태인지를 나타내기 위해 UltraNAND(32) 디바이스에 의해 발생된다. 시스템(10)은 RY/BY# 하드웨어 신호를 이용하거나, 또는 상태 레지스터 내의 RY/BY# 상태 비트를 폴링(polling)함으로써, 언제 동작이 진행중인지 또는 완료되는 지를 결정한다. 부트 로더 PLD(34)는 UREADY 입력을 통해 RY/BY# 신호를 모니터하여, 언제 UltraNAND 플래시(32)가 내부 플래시 어레이로부터 내부 데이터 레지스터들로의 정보의 전송을 종료하는 지를 결정한다. 이때, 메모리(32)는 초기화되고, 제어는 시스템(10)으로 넘어가게 된다.
SYSCLK는 디바이스 상태 머신을 구동시키기 위해 부트 로더 PLD(34)에 의해 요구된다. UltraNAND(32)는 25nS의 최소의 기록 펄스 폭 지정을 갖기 때문에, SYSCLK에 대한 최대 주파수는 40MHz이다.
부트 로더 상태 머신
부트 로더 PLD(34)에서는, 간단한 상태 머신을 이용하여 UltraNAND 초기화를 수행한다. 부트 로더 상태 머신은 1개 또는 2개의 UltraNAND 디바이스들(32)를 초기화하는 데에 필요한 적절한 신호들을 제공하기 위해 부트 로더 PLD(34)의 출력들을 구동시킨다. 도 5는 부트 로더 PLD 상태 머신의 흐름도를 도시한다.
실행의 상세
여기에서 설명되는 부트 로더 PLD에 의해, PLD는 파워업시 최대 2개의 UltraNAND 디바이스들을 초기화할 수 있는 능력을 갖는다. 부트 로더 PLD를 사용할 때 고려되어야만 하는 몇 개의 기본적인 시스템 인터페이스 고려사항들이 있다.
CLE, ALE, WE# 및 I/O[1..7]의 3상태 제어
파워업 이후 부트 로더 PLD가 UltraNAND 플래시를 초기화하는 기간 동안, 부트 로더 프로세스는 I/O[1..7], CLE, ALE 및 시스템 WE# 신호를 제어해야 한다. 따라서, INIT#가 어서트(로우)되는 동안 시스템은 이러한 신호들을 3상태로 유지할 필요가 있다. 일단 INIT#가 하이가 되어, 부트 로더 초기화의 완료를 나타내면, 시스템은 적절한 이러한 신호들을 구동할 수 있다.
순차적 부트 코드의 예
시스템 어드레스 버스가 UltraNAND 플래시 판독 어드레스를 직접 결정하기 않기 때문에, 톱 부트(top boot) 마이크로컨트롤러와 바텀 부트(bottom boot) 마이크로컨트롤러에 대해 별개의 PLD 해결책이 필요없게 된다. 시스템 어드레스 디코더 논리는, 파워업 및 플래시 초기화 이후 마이크로컨트롤러 코드 페치에 대해 UltraNAND가 인에이블되는 것을 보장하기만 하면 된다. 이하에 포함되는 것은, 시스템 부트 코드가 어떻게 x86급 마이크로컨트롤러에 대한 UltraNAND 플래시 부트 영역에 저장될 수 있는 지의 예이다.
일단 UltraNAND가 초기화되면, 시스템 마이크로컨트롤러는 UltraNAND 데이터 레지스터들로부터 순차적으로 직접 코드 페치를 시작할 수 있다.
시스템의 프로세서가 부트 코드의 개시에 대해 낮은 메모리 어드레스를 이용하면, 플래시 디바이스에 저장된 부트 코드는 마이크로컨트롤러로 하여금 순방향 또는 역방향으로 분기 또는 점프를 시도하게 하지 않는다. 이에 의해, 임의의 명령어 프리페칭 논리에 의해 UltraNAND로부터 판독된 명령어들과 실제 명령어 실행 시퀀스 간에 불연속이 없게 된다.
프로세서가 부트 코드의 제 1 워드에 대해 높은 메모리 어드레스를 이용하는 경우, 이러한 부트 코드는 프로세서의 어드레스를 메모리(32)를 선택하기 위해 시스템에 의해 디코드되는 어드레스 범위 내에 여전히 있는 하위 어드레스로 변경하는 점프 명령어를 포함해야 한다. 점프 명령어가 없으면, 이러한 프로세서는 부트 메모리(32)를 더 이상 선택하지 않는 하위 메모리 어드레스에 랩 어라운드되는 포인트까지 그 어드레스를 증분시킬 수 있다.
점프에 의해, 프리페치되는 명령어 스트림으로부터의 어떠한 수의 바이트들은 프리페치 버퍼가 점프에 의해 클리어될 때에 폐기된다. 점프에 의해 폐기되는 프리페치 버퍼 내의 바이트들의 정확한 수를 아는 것은 어렵기 때문에, 전체 프리페치 버퍼를 채우기 위해서는 점프 다음에 충분한 NOP 명령어들이 있어야 한다.
UltraNAND로부터 직접 실행되는 첫 번째의 부트 코드는 단지, 보다 포괄적인 부트스트랩 프로그램을 UltraNAND 디바이스로부터 XIP 메모리 자원(SDRAM 또는 DRAM 등)에 로드시킨다. 이러한 부트스트랩 코드의 로딩은 스트링 이동에 의해 또는 연속적인 즉시 이동 커맨드들을 통해 행해질 수 있다.
스트링 이동이 이용되는 경우, 이용되는 프로세서의 명령어 프리페치 버퍼를 채우기 위해서는 스트링 명령어 다음의 명령어 스트림이 충분한 NOP 명령어로 개시 및 종료해야 한다. 이에 의해, 스트링 이동 판독 동작에 의해 선택되는 코드 스트림이, 프리페치 버퍼가 채워지는 포인트를 넘어서 개시될 수 있게 된다. 프리페치 버퍼가 UltraNAND로부터 바이트들을 판독하는 것을 중단하고, 스트링 이동 동작이 바이트들을 판독하는 정확한 포인트가 예측될 수 없기 때문에, XIP 메모리 자원 내로 로드되는 코드는 남는 NOP 명령어들중 일부로 시작될 수 있다.
코드의 정확한 정렬을 제어할 수 없기 때문에, XIP 메모리 내로 로드되는 부트스트랩 프로그램의 부분 내에서 상대 분기를 이용하는 것이 중요하다. 코드의 바이트 정렬에 대해 엄격한 제어를 요구하는 프로세서에 있어서, 즉시 이동 명령어들의 스트림은 부트스트랩 코드를 XIP 메모리 내에 로딩하기 위한 보다 나은 시도가 될 수 있다.
일단 부트 코드가 XIP 메모리에 어셈블되면, 마지막 명령어에 의해 마이크로컨트롤러는 실행을 위해 부트 코드 내로 점프한다. 아래의 예는, 초기화 이후, UltraNAND로부터 순차적으로 실행하는 어셈블리 코드 포맷에 있어서의 x86급 부트 코드 시퀀스를 포함한다.
정의
SOURCE+ UltraNAND 디바이스용 메모리 맵핑된 베이스 어드레스. 이 어드레스는 판독시 UltraNAND 디바이스가 선택되게 해야 한다.
DESTINATION+ UltraNAND에 저장된 시스템 코드를 유지하기 위한 XIP 메모리 자원에 대한 목적지 어드레스. UltraNAND 메모리의 콘텐츠가 새도우 메모리에 전송되면, 부트코드 예에서의 마지막 라인이 시스템 코드 실행을 위해 XIP 영역으로 점프한다.
XIP+ XIP 메모리에 대한 세그먼트 어드레스
ULTRA- 순차 메모리에 대한 세그먼트 어드레스
COUNT+ UltraNAND 디바이스에서 XIP 메모리로 전송되는 바이트의 수. 이 카운트는 프리페치될 수 있는 최대 바이트수를 포함해야 한다. 이 경우 32 바이트가 486 프로세서의 프리페치 버퍼 크기이다.
START- 부트코드의 시작을 위한 어드레스. x86 프로세서는 FÆFFOh에서, 즉 메모리의 최상의 16바이트 내에서 실행을 시작한다. 따라서, UltraNAND 디바이스를 여전히 선택하는 어드레스 공간 내에 하위 코드 어드레스로 먼저 점프할 필요가 있다. 이것은 어드레스가 UltraNAND를 더 이상 선택하지 않는 어드레스 공간에 랩어라운드되는 것을 방지한다. UltraNAND 디바이스는 단지 어드레스 버스에 독립적으로 순차적인 명령어들의 스트림을 전달하기 때문에 실제 어드레스는 중요하지 않다. 그러나, 점프 목적지 어드레스는 이 초기의 부트스트랩 코드가 XIP 메모리에 복사되는 나머지 부트스트랩 코드로 점프할 때까지 UltraNAND 어드레스 공간 내에 어드레스를 유지하기 위해 메모리의 최상으로부터 충분히 아래에 있어야 한다.
NOP- 정상 실행 시스템에서 어드레스 FÆFFOh가 되는 것까지 나머지 바이트를 NOP 명령어로 채운다. 이것은 분기 명령어를 벗어난 위치에서 명령어 프리페치 장치의 판독에 의해 발생되는 예기치못한 임의의 코드실행 또는 경계 문제를 방지한다. 이 NOP 명령어들의 일부분 또는 전부는 프리페치 장치에 의해 UltraNAND에서 판독될 수 있고 일부는 분기가 프리페치 버퍼를 플러시(flush)할 때 폐기된다. 그러나, UltraNAND로부터의 바이트 스트림 판독으로부터 폐기되는 명령어들의 정확한 수는 알 수 없다. NOP 명령어를 사용함으로써 프로세서는 스트림의 나머지 명령어를 만날 때 까지 판독만을 유지할 것이다.
코드예
JMP START ;리셋 어드레스로부터 부트 코드 어드레스 범위로 점프하여, 명령어 어드레스 카운터가 순차적인 메모리 어드레스 범위 바깥으로 랩핑하고 가지 않게 된다.
NOP ;점프가 프리페치 버퍼를 실행하고 클리어하기 전에 프리페치 버퍼가 다음의 명령들중 어느 것도 페치할 수 없게 하기 위하여, 다음 32 바이트를 NOP로 채운다.
START: STD MOV DS, ULTRA MOV ES, XIP MOV ESI,SOURCE MOV DEI, DESTINATION MOV ECX, COUNT REP MOVSB NOP Æ {XIP 코드 스트림} NOP Æ JMP DESTINATION ;스트링 이동 동안 목적지 어드레스를 증분시키기 위해 방향 플래그(direction flag)를 설정 ;UltraNAND 메모리에 대해 세그먼트 어드레스 로드 ;XIP 메모리에 대해 세그먼트 어드레스를 갖는 여분 세그먼트 레지스터(Extra Segment register) 로드 ;시작 UltraNAND 어드레스 로드 ;스트링 이동을 준비하기 위해 목적지 어드레스 로드 ;스트링 이동 동안 전달하기 위해 바이트들의 수를 로드 ;바이트들을 UltraNAND로부터 새도우 메모리로 이동 ;프로세서 프리페치 버퍼를 채우기 위한 32 바이트의 NOP ;XIP 메모리 내로 이동될 코드 스트림 ;모든 코드가 이동할 수 있도록 하기 위해, 스트링 이동의 정확한 중단 포인트는 코드에 앞설 수 있는 것 만큼의 많은 NOP 명령어들에 의해 코드의 끝을 오버슈트(over shoot)해야 하기 때문에, 64개의 더 많은(64 more) NOP 명령어들이 필요하다. ;일단 전송이 이루어지면, XIP 메모리 내의 부트스트랩 코드로 점프한다.
요약하면, 본 발명은 최초의 프로그램 실행을 순차 접근 메모리 만을 이용하여 수행함으로써, 개별적인 비휘발성 임의 접근 메모리가 필요없는 컴퓨터 시스템을 제공한다.
본 발명의 내용을 습득한 후 본 발명이 속하는 당업자에게 있어서 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 다양한 변형이 가능할 것이다.

Claims (38)

  1. 컴퓨터 시스템으로서,
    프로세서와;
    부트 프로그램을 저장하는 순차 접근 메모리와; 그리고
    상기 컴퓨터 시스템의 초기화에 응답하여, 상기 순차 접근 메모리를 제어하여 상기 부트 프로그램을 판독하고, 상기 프로세서를 제어하여 상기 순차 접근 메모리 내의 부트 프로그램을 실행하는 부트 로더를 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  2. 제 1 항에 있어서,
    상기 부트 로더는 판독 커맨드 및 어드레스를 상기 순차 접근 메모리에 기록한 다음, 상기 순차 접근 메모리를 제어하여 상기 판독 커맨드를 실행하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  3. 제 2 항에 있어서,
    상기 순차 접근 메모리는 상기 부트 프로그램을 적어도 하나의 메모리 페이지에 저장하도록 구성되고; 그리고
    상기 판독 커맨드에 의해 제 1 메모리 페이지가 판독되는 것을 특징으로 하는 컴퓨터 시스템.
  4. 제 3 항에 있어서,
    상기 판독 커맨드는 갭리스 판독 커맨드(gapless read command)인 것을 특징으로 하는 컴퓨터 시스템.
  5. 제 1 항에 있어서,
    상기 부트 로더는 상기 순차 접근 메모리가 상기 부트 프로그램의 적어도 일부를 판독에 이용할 수 있을 때 까지 상기 프로세서를 금지시킨 다음, 상기 프로세서를 인에이블시키도록 구성되고; 그리고
    상기 프로세서는, 인에이블될 때 상기 순차 접근 메모리로부터 상기 부트 프로그램을 판독하여 실행하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  6. 제 1 항에 있어서,
    상기 부트 로더는 상기 컴퓨터 시스템이 초기화될 때에 활성화되도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  7. 제 1 항에 있어서,
    상기 부트 로더는 프로그램가능한 논리 디바이스를 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  8. 제 1 항에 있어서,
    상기 부트 로더는 상태 머신을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  9. 제 8 항에 있어서,
    상기 부트 로더는 상기 상태 머신이 구현되는 프로그램가능한 논리 디바이스를 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  10. 제 8 항에 있어서,
    상기 상태 머신은 판독 커맨드 및 어드레스를 상기 순차 접근 메모리에 기록한 다음, 상기 순차 접근 메모리를 제어하여 상기 판독 커맨드를 실행하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  11. 제 1 항에 있어서,
    상기 부트 프로그램은 상기 프로세서를 제어하여 부트 코드를 상기 순차 접근 메모리로부터 휘발성 RAM에 전송한 다음, 상기 RAM 내의 상기 부트 코드로 점프하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  12. 제 11 항에 있어서,
    상기 RAM은 상기 프로세서 내의 캐시 메모리로 이루어지는 것을 특징으로 하는 컴퓨터 시스템.
  13. 제 11 항에 있어서,
    상기 RAM은 상기 프로세서와 분리된 XIP(Execution-in-Place, 제자리 실행) 메모리로 이루어지는 것을 특징으로 하는 컴퓨터 시스템.
  14. 제 1 항에 있어서,
    상기 순차 접근 메모리 및 상기 부트 로더는 단일의 집적 회로에서 구현되는 것을 특징으로 하는 컴퓨터 시스템.
  15. 제 1 항에 있어서,
    상기 부트 프로그램은, 상기 프로세서의 어드레스를 상기 순차 접근 메모리를 선택하는 어드레스들의 범위 내에 유지하기 위해 상기 프로세서의 프로그램 어드레스 논리 동작을 예측하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  16. 제 1 항에 있어서,
    상기 부트 프로그램은, 임의의 코드 프리페치 논리의 동작을 예측하고, 필요한 명령어들이 상기 프리페치 논리에 의해 프리페치되고 폐기되지 않도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  17. 제 1 항에 있어서,
    상기 부트 프로그램은, 프리페치 버퍼 논리에 의해 코드 스트림 내에 불연속이 생길 수 있는 코드 섹션들 간의 패딩(padding)으로서 NOP 명령어들을 포함하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  18. 제 1 항에 있어서,
    상기 부트 프로그램은 상기 프로세서를 제어하여 부트 코드를 상기 순차 접근 메모리로부터 휘발성 RAM에 전송한 다음 상기 RAM 내의 상기 부트 코드로 점프하도록 구성되고; 그리고
    상기 부트 프로그램은 상기 RAM의 상기 부트 코드 내의 분기들이 상대적이도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  19. 제 1 항에 있어서,
    상기 부트 프로그램은 즉시 이동 명령어들을 이용하여 부트 코드를 상기 순차 접근 메모리로부터 휘발성 RAM으로 전송하도록 상기 프로세서를 제어한 다음, 상기 RAM 내의 상기 부트 코드로 점프하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  20. 프로세서 및 순차 접근 메모리를 포함하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법으로서,
    (a) 상기 순차 접근 메모리에 부트 프로그램을 저장하는 단계와;
    (b) 상기 컴퓨터 시스템의 초기화에 응답하여, 상기 부트 프로그램을 판독하도록 상기 순차 접근 메모리를 제어하고, 상기 순차 접근 메모리 내의 상기 부트 프로그램으로 점프하도록 상기 프로세서를 제어하는 부트 로더를 제공하는 단계와; 그리고
    (c) 상기 컴퓨터 시스템을 초기화하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  21. 제 20 항에 있어서,
    상기 단계(b)는, 판독 커맨드 및 어드레스를 상기 순차 접근 메모리에 기록한 다음, 상기 순차 접근 메모리를 제어하여 상기 판독 커맨드를 실행하도록 상기 부트 로더를 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  22. 제 21 항에 있어서,
    상기 단계(a)는 적어도 하나의 메모리 페이지에 상기 부트 프로그램을 저장하도록 상기 순차 접근 메모리를 구성하는 단계를 포함하고;
    상기 단계(b)는 상기 판독 커맨드에 의해 제 1 메모리 페이지가 판독되도록 상기 부트 로더를 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  23. 제 22 항에 있어서,
    상기 판독 커맨드는 갭리스 판독 커맨드인 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  24. 제 20 항에 있어서,
    상기 단계(b)는 상기 순차 접근 메모리가 상기 부트 프로그램의 적어도 일부를 판독할 때 까지 상기 프로세서를 금지시킨 다음, 상기 프로세서를 인에이블시키도록 상기 부트 로더를 구성하는 단계를 포함하고; 그리고
    상기 프로세서는, 인에이블될 때 상기 순차 접근 메모리 내의 상기 부트 프로그램을 실행하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  25. 제 20 항에 있어서,
    상기 단계(b)는 상기 컴퓨터 시스템이 초기화될 때에 활성화되도록 상기 부트 로더를 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  26. 제 20 항에 있어서,
    상기 단계(b)는 프로그램가능한 논리 디바이스를 포함하도록 상기 부트 로더를 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  27. 제 20 항에 있어서,
    상기 단계(b)는 상태 머신을 포함하도록 상기 부트 로더를 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  28. 제 27 항에 있어서,
    상기 단계(b)는, 상기 상태 머신이 구현되는 프로그램가능한 논리 디바이스를 포함하도록 상기 부트 로더를 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  29. 제 27 항에 있어서,
    상기 상태 머신은 판독 커맨드 및 어드레스를 상기 순차 접근 메모리에 기록한 다음, 상기 순차 접근 메모리를 제어하여 상기 판독 커맨드를 실행하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  30. 제 20 항에 있어서,
    (d) 상기 컴퓨터 시스템은 휘발성 RAM을 더 포함하고;
    상기 단계 (a)는, 상기 프로세서를 제어하여 부트 코드를 상기 순차 접근 메모리로부터 상기 RAM에 전송한 다음 상기 RAM 내의 상기 부트 코드로 점프하도록 상기 부트 프로그램을 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  31. 제 30 항에 있어서,
    상기 RAM은 상기 프로세서 내의 캐시 메모리로 이루어지는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  32. 제 30 항에 있어서,
    상기 RAM은 상기 프로세서와 분리된 XIP 메모리로 이루어지는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  33. 제 20 항에 있어서,
    상기 단계(b)는 단일의 집적 회로에 상기 순차 접근 메모리 및 상기 부트 로더를 구현하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  34. 제 20 항에 있어서,
    상기 단계 (a)는, 상기 프로세서의 어드레스를 상기 순차 접근 메모리를 선택하는 어드레스들의 범위 내에 유지하기 위해 상기 프로세서의 프로그램 어드레스 논리 동작을 예측하도록 상기 부트 프로그램을 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  35. 제 20 항에 있어서,
    상기 단계 (a)는, 임의의 코드 프리페치 논리의 동작을 예측하고, 필요한 명령어들이 상기 프리페치 논리에 의해 프리페치되고 폐기되지 않도록 상기 부트 프로그램을 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  36. 제 20 항에 있어서,
    상기 단계 (a)는, 프리페치 버퍼 논리에 의해 코드 스트림 내에 불연속이 생길 수 있는 코드 섹션들 간의 패딩으로서 NOP 명령어들을 포함하도록 상기 부트 프로그램을 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  37. 제 20 항에 있어서,
    상기 단계 (a)는, 상기 프로세서를 제어하여 부트 코드를 상기 순차 접근 메모리로부터 휘발성 RAM에 전송한 다음 상기 RAM 내의 상기 부트 코드로 점프하도록 상기 부트 프로그램을 구성하는 단계를 포함하고;
    상기 단계 (a)는, 상기 RAM의 상기 부트 코드 내의 분기들이 상대적이도록 상기 부트 프로그램을 구성하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
  38. 제 20 항에 있어서,
    상기 단계 (a)는 상기 프로세서를 제어하여 즉시 이동 명령어들을 이용하여 부트 코드를 상기 순차 접근 메모리로부터 휘발성 RAM으로 전송한 다음 상기 RAM 내의 상기 부트 코드로 점프하도록 상기 부트 프로그램을 구성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 시스템의 최초 프로그램을 실행하는 방법.
KR1020027009110A 2000-01-14 2000-12-15 순차 접근 메모리에 저장된 부트 코드를 통한 컴퓨터 시스템의 초기화 KR100774598B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/483,318 2000-01-14
US09/483,318 US6601167B1 (en) 2000-01-14 2000-01-14 Computer system initialization with boot program stored in sequential access memory, controlled by a boot loader to control and execute the boot program

Publications (2)

Publication Number Publication Date
KR20020097161A KR20020097161A (ko) 2002-12-31
KR100774598B1 true KR100774598B1 (ko) 2007-11-09

Family

ID=23919595

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020027009110A KR100774598B1 (ko) 2000-01-14 2000-12-15 순차 접근 메모리에 저장된 부트 코드를 통한 컴퓨터 시스템의 초기화

Country Status (9)

Country Link
US (1) US6601167B1 (ko)
EP (1) EP1248976B1 (ko)
JP (1) JP2003519870A (ko)
KR (1) KR100774598B1 (ko)
CN (1) CN1307542C (ko)
AT (1) ATE250777T1 (ko)
DE (1) DE60005563T2 (ko)
TW (1) TW502150B (ko)
WO (1) WO2001052062A2 (ko)

Families Citing this family (94)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080256352A1 (en) * 2000-01-06 2008-10-16 Super Talent Electronics, Inc. Methods and systems of booting of an intelligent non-volatile memory microcontroller from various sources
KR20010106654A (ko) * 2000-05-22 2001-12-07 윤종용 운영체제와 사용자 환경을 포함하는 기록 가능한 광디스크및 이에 적합한 장치
DE10050604A1 (de) * 2000-10-12 2002-04-25 Siemens Ag Verfahren zum Starten einer Datenverarbeitungsanlage sowie zugehörige Komponenten
US6874083B2 (en) * 2000-12-22 2005-03-29 Intel Corporation Method and apparatus to ensure proper voltage and frequency configuration signals are defined before applying power to processor
US7065639B2 (en) * 2000-12-29 2006-06-20 Hewlett-Packard Development Company, L.P. Utilization of SRAM in an execution of initialization code process upon system start up
US7058779B1 (en) * 2001-03-05 2006-06-06 Advanced Micro Devices, Inc. Computer system initialization via boot code stored in a non-volatile memory having an interface compatible with synchronous dynamic random access memory
US7386653B2 (en) * 2001-08-06 2008-06-10 Sandisk Il Ltd Flash memory arrangement
US7165137B2 (en) * 2001-08-06 2007-01-16 Sandisk Corporation System and method for booting from a non-volatile application and file storage device
US20030056071A1 (en) * 2001-09-18 2003-03-20 Triece Joseph W. Adaptable boot loader
US7032106B2 (en) 2001-12-27 2006-04-18 Computer Network Technology Corporation Method and apparatus for booting a microprocessor
US7234052B2 (en) * 2002-03-08 2007-06-19 Samsung Electronics Co., Ltd System boot using NAND flash memory and method thereof
TWI228220B (en) 2002-03-08 2005-02-21 Samsung Electronics Co Ltd System boot using NAND flash memory and method thereof
US9170812B2 (en) * 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
KR100441608B1 (ko) 2002-05-31 2004-07-23 삼성전자주식회사 낸드 플래시 메모리 인터페이스 장치
US20030233533A1 (en) * 2002-06-13 2003-12-18 M-Systems Flash Disk Pioneers Ltd. Boot from cache
KR100448905B1 (ko) * 2002-07-29 2004-09-16 삼성전자주식회사 낸드플래쉬메모리를 시스템구동 및 저장용으로 사용하는장치
KR100469669B1 (ko) * 2002-09-24 2005-02-02 삼성전자주식회사 플래시 메모리를 이용하여 부팅되는 시스템 장치 및 그시스템 부팅 방법
US7082525B2 (en) * 2002-10-02 2006-07-25 Sandisk Corporation Booting from non-linear memory
US7340566B2 (en) * 2002-10-21 2008-03-04 Microsoft Corporation System and method for initializing a memory device from block oriented NAND flash
US6988163B2 (en) * 2002-10-21 2006-01-17 Microsoft Corporation Executing binary images from non-linear storage systems
SG117428A1 (en) * 2002-11-07 2005-12-29 Mrd Technologies Pte Ltd Method and apparatus for loading boot code
US7430659B2 (en) * 2002-11-29 2008-09-30 Sigmatel, Inc. System and method to initialize a multiple function device with a multi-part boot algorithm
US7657615B1 (en) 2002-12-08 2010-02-02 Sun Microsystems, Inc. Approach for provisioning network devices
US20040123089A1 (en) * 2002-12-20 2004-06-24 Bodily Melvin Dirk Method of field upgradeable boot code
KR100493884B1 (ko) * 2003-01-09 2005-06-10 삼성전자주식회사 시리얼 플래시 메모리에서의 현지 실행을 위한 제어 장치및 그 방법, 이를 이용한 플래시 메모리 칩
KR100849296B1 (ko) * 2003-06-13 2008-07-29 삼성전자주식회사 주제어부와 보조제어부를 구비하는 시스템에서의보조제어부의 초기화 장치 및 방법
GB2404748B (en) * 2003-08-01 2006-10-04 Symbian Ltd Computing device and method
US7149890B2 (en) * 2003-11-21 2006-12-12 Intel Corporation Initializing system memory
JP4745613B2 (ja) * 2004-01-20 2011-08-10 キヤノン株式会社 情報処理装置及び情報処理方法
JP4357331B2 (ja) * 2004-03-24 2009-11-04 東芝メモリシステムズ株式会社 マイクロプロセッサブートアップ制御装置、及び情報処理システム
KR100678047B1 (ko) * 2004-05-06 2007-02-02 삼성전자주식회사 낸드 플래시 메모리를 구비한 이동 통신 단말기 및 그의부팅 방법
US20050262337A1 (en) * 2004-05-24 2005-11-24 Siemens Vdo Automotive Corporation Method and device for determining flash software compatibility with hardware
US20050273585A1 (en) * 2004-06-08 2005-12-08 Leech Phillip A System and method associated with persistent reset detection
CN100405296C (zh) * 2004-06-30 2008-07-23 大唐移动通信设备有限公司 扩展串行引导代码量的方法
KR100604877B1 (ko) * 2004-07-03 2006-07-31 삼성전자주식회사 내장 시스템의 메모리 어드레스의 매핑을 제어하는 장치와방법
US7211977B2 (en) * 2004-07-13 2007-05-01 Hewlett-Packard Development Company, L.P. Pulse width modulation fan control
US8457152B2 (en) * 2004-07-16 2013-06-04 Qualcomm Incorporated Multiple modulation schemes in single rate layering wireless communication systems
US8028143B2 (en) * 2004-08-27 2011-09-27 Qualcomm Incorporated Method and apparatus for transmitting memory pre-fetch commands on a bus
US20060064684A1 (en) * 2004-09-22 2006-03-23 Royer Robert J Jr Method, apparatus and system to accelerate launch performance through automated application pinning
JP2006146485A (ja) * 2004-11-18 2006-06-08 Toshiba Corp 携帯端末
KR100693559B1 (ko) * 2005-02-01 2007-03-14 주식회사 팬택 전자기기의 램 초기화 방법
WO2006074793A1 (en) * 2005-01-14 2006-07-20 Telefonaktiebolaget Lm Ericsson (Publ) Method and device for initializing a booting procedure of a mobile device
US7971046B2 (en) 2005-01-14 2011-06-28 Telefonaktiebolaget L M Ericsson (Publ) Method and device for initializing a booting procedure of a mobile device
US7356680B2 (en) * 2005-01-22 2008-04-08 Telefonaktiebolaget L M Ericsson (Publ) Method of loading information into a slave processor in a multi-processor system using an operating-system-friendly boot loader
KR100640389B1 (ko) * 2005-04-06 2006-10-30 삼성전자주식회사 Nand플래시 메모리를 구비한 장치에서 어플리케이션을실행하는 방법 및 그 장치
CN100405297C (zh) * 2005-05-18 2008-07-23 鸿富锦精密工业(深圳)有限公司 嵌入式系统出厂预设值初始设定程序的更新方法
US7716464B2 (en) * 2005-06-23 2010-05-11 Intel Corporation Method to have fault resilient booting
US20070016721A1 (en) * 2005-07-18 2007-01-18 Wyse Technology Inc. Flash file system power-up by using sequential sector allocation
KR100667822B1 (ko) * 2005-10-10 2007-01-11 삼성전자주식회사 낸드 플래시 메모리를 이용한 화상형성장치의 초기화제어장치 및 방법
KR100778293B1 (ko) * 2005-10-10 2007-11-22 삼성전자주식회사 디지털방송처리장치 및 디지털방송처리장치 부트로더의업그레이드 방법
JP2007206885A (ja) * 2006-01-31 2007-08-16 Toshiba Corp コンピュータシステム及びシステム起動方法
KR20070095136A (ko) * 2006-03-20 2007-09-28 엘지전자 주식회사 프로그램이 가능한 부팅 지원 장치 및 방법
US7555678B2 (en) * 2006-03-23 2009-06-30 Mediatek Inc. System for booting from a non-XIP memory utilizing a boot engine that does not have ECC capabilities during booting
US8065563B2 (en) * 2006-03-23 2011-11-22 Mediatek Inc. System for booting from a non-XIP memory utilizing a boot engine that does not have ECC capabilities during booting
CN100458694C (zh) * 2006-04-04 2009-02-04 深圳安凯微电子技术有限公司 微处理器启动过程中对所用通用闪存的检测方法
US7849302B2 (en) 2006-04-10 2010-12-07 Apple Inc. Direct boot arrangement using a NAND flash memory
JP2007316871A (ja) * 2006-05-24 2007-12-06 Fujitsu Ltd プロセッサユニット
JP5019567B2 (ja) * 2006-08-04 2012-09-05 ソニーモバイルコミュニケーションズ株式会社 メモリ管理方法および携帯端末装置
JP2008065434A (ja) 2006-09-05 2008-03-21 Matsushita Electric Ind Co Ltd プログラム起動制御装置
US8312298B2 (en) 2006-11-17 2012-11-13 National Instruments Corporation PXI express controller power control state machine
US7930582B2 (en) * 2006-11-22 2011-04-19 Ricoh Company, Ltd. Image processing apparatus and method of transmitting reference clock
US8095816B1 (en) 2007-04-05 2012-01-10 Marvell International Ltd. Processor management using a buffer
US8443187B1 (en) 2007-04-12 2013-05-14 Marvell International Ltd. Authentication of computing devices in server based on mapping between port identifier and MAC address that allows actions-per-group instead of just actions-per-single device
US8321706B2 (en) 2007-07-23 2012-11-27 Marvell World Trade Ltd. USB self-idling techniques
US8683213B2 (en) 2007-10-26 2014-03-25 Qualcomm Incorporated Progressive boot for a wireless device
IL187044A0 (en) * 2007-10-30 2008-02-09 Sandisk Il Ltd Fast secure boot implementation
US20090144538A1 (en) * 2007-11-05 2009-06-04 Duda Kenneth J Patch installation at boot time for dynamically installable, piecemeal revertible patches
JP2009157632A (ja) * 2007-12-26 2009-07-16 Toshiba Corp 情報処理装置
US8510560B1 (en) 2008-08-20 2013-08-13 Marvell International Ltd. Efficient key establishment for wireless networks
KR101595043B1 (ko) 2008-09-18 2016-02-17 마벨 월드 트레이드 리미티드 적어도 부분적으로 부팅 동안에 어플리케이션들을 메모리에 프리로딩하는 방법
CN102834804B (zh) 2010-04-21 2016-04-27 惠普发展公司,有限责任合伙企业 传递操作系统引导信息的方法、计算装置及设备
US9720859B1 (en) 2010-04-30 2017-08-01 Mentor Graphics Corporation System, method, and computer program product for conditionally eliminating a memory read request
US9141394B2 (en) * 2011-07-29 2015-09-22 Marvell World Trade Ltd. Switching between processor cache and random-access memory
US9436629B2 (en) 2011-11-15 2016-09-06 Marvell World Trade Ltd. Dynamic boot image streaming
US9110595B2 (en) 2012-02-28 2015-08-18 AVG Netherlands B.V. Systems and methods for enhancing performance of software applications
US9575768B1 (en) 2013-01-08 2017-02-21 Marvell International Ltd. Loading boot code from multiple memories
US9582386B2 (en) 2013-03-15 2017-02-28 Cloudendure, Ltd. System and method for maintaining a copy of a cloud-based computing environment and restoration thereof
US10191823B2 (en) 2014-03-11 2019-01-29 Cloudendure Ltd. System and method for restoring original machines from replicated machines in a secondary computing environment
US20170093971A1 (en) * 2015-09-30 2017-03-30 Cloudendure Ltd. System and method for orchestrating replicated components in a replicated cloud based computing environment
US9736801B1 (en) 2013-05-20 2017-08-15 Marvell International Ltd. Methods and apparatus for synchronizing devices in a wireless data communication system
US9521635B1 (en) 2013-05-21 2016-12-13 Marvell International Ltd. Methods and apparatus for selecting a device to perform shared functionality in a deterministic and fair manner in a wireless data communication system
WO2015015305A1 (en) 2013-07-31 2015-02-05 Marvell Word Trade Ltd. Parallelizing boot operations
TWI497268B (zh) * 2013-12-19 2015-08-21 Inventec Corp 伺服器系統及其通電後運作時序之控制方法
US10691838B2 (en) * 2014-06-20 2020-06-23 Cypress Semiconductor Corporation Encryption for XIP and MMIO external memories
RU2579942C2 (ru) * 2014-09-01 2016-04-10 Открытое Акционерное Общество "Байкал Электроникс" Устройство прямого отображения адресов данных, располагающихся во внешнем последовательном пзу, в адресное пространство микропроцессорного ядра, компьютерная система и способ передачи данных
RU2579949C2 (ru) * 2014-09-30 2016-04-10 Открытое Акционерное Общество "Байкал Электроникс" Компьютерная система
US10331586B2 (en) 2015-10-30 2019-06-25 Samsung Electronics Co., Ltd. Nonvolatile memory device for providing fast booting and system including the same
CN109075968A (zh) 2016-03-08 2018-12-21 马维尔国际贸易有限公司 用于安全设备认证的方法和装置
KR102387461B1 (ko) * 2017-07-24 2022-04-15 삼성전자주식회사 스토리지 장치, 스토리지 시스템 및 이의 동작 방법
CN108804221B (zh) * 2018-04-11 2020-09-11 百富计算机技术(深圳)有限公司 基于xip方式的嵌入式系统及其资源优化方法
US11461101B2 (en) * 2019-09-27 2022-10-04 Arm Technology (China) Co. LTD Circuitry and method for selectively controlling prefetching of program instructions
CN112667558A (zh) * 2019-10-15 2021-04-16 瑞昱半导体股份有限公司 处理系统与芯片内执行控制方法
KR102248686B1 (ko) * 2020-02-14 2021-05-04 엘에스일렉트릭(주) 외부 메모리 접근 시스템
US11868276B2 (en) 2022-06-02 2024-01-09 Hewlett-Packard Development Company, L.P. Non-volatile memory write access control

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664194A (en) 1995-12-04 1997-09-02 Metricom, Inc. Method for autonomously transferring code to a computer without accessing local memory by the central processing unit
US5799186A (en) 1990-12-20 1998-08-25 Eastman Kodak Company Method and apparatus for programming a peripheral processor with a serial output memory device
US5951685A (en) 1996-12-20 1999-09-14 Compaq Computer Corporation Computer system with system ROM including serial-access PROM coupled to an auto-configuring memory controller and method of shadowing BIOS code from PROM

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3221763B2 (ja) * 1993-04-08 2001-10-22 株式会社日立製作所 音声コーデック
JPH06348504A (ja) * 1993-06-04 1994-12-22 Sharp Corp マイクロプロセッサシステム
JP3405569B2 (ja) * 1993-09-24 2003-05-12 株式会社東芝 セル逆変換装置
US5379431A (en) * 1993-12-21 1995-01-03 Taligent, Inc. Boot framework architecture for dynamic staged initial program load
JPH08202559A (ja) * 1995-01-30 1996-08-09 Nec Corp 世代ファイル管理方式
US5940627A (en) * 1997-03-13 1999-08-17 Compaq Computer Corporation User selectable feature set for a flash ROM based peripheral
JP3072722B2 (ja) * 1997-06-20 2000-08-07 ソニー株式会社 フラッシュメモリを用いるデータ管理装置及びデータ管理方法並びにフラッシュメモリを用いる記憶媒体
US6438687B2 (en) * 1997-10-30 2002-08-20 Micron Technology, Inc. Method and apparatus for improved storage of computer system configuration information
US5987605A (en) * 1998-02-28 1999-11-16 Hewlett-Packard Co. Methods and apparatus for dual-boot memory selection, update, and recovery in a programmable device
US6446139B1 (en) * 1999-06-28 2002-09-03 Adaptec, Inc. Multiple chip single image BIOS

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5799186A (en) 1990-12-20 1998-08-25 Eastman Kodak Company Method and apparatus for programming a peripheral processor with a serial output memory device
US5664194A (en) 1995-12-04 1997-09-02 Metricom, Inc. Method for autonomously transferring code to a computer without accessing local memory by the central processing unit
US5951685A (en) 1996-12-20 1999-09-14 Compaq Computer Corporation Computer system with system ROM including serial-access PROM coupled to an auto-configuring memory controller and method of shadowing BIOS code from PROM

Also Published As

Publication number Publication date
WO2001052062A2 (en) 2001-07-19
WO2001052062A3 (en) 2001-12-27
KR20020097161A (ko) 2002-12-31
ATE250777T1 (de) 2003-10-15
US6601167B1 (en) 2003-07-29
EP1248976B1 (en) 2003-09-24
TW502150B (en) 2002-09-11
CN1556950A (zh) 2004-12-22
DE60005563T2 (de) 2004-06-17
EP1248976A2 (en) 2002-10-16
CN1307542C (zh) 2007-03-28
DE60005563D1 (de) 2003-10-30
JP2003519870A (ja) 2003-06-24

Similar Documents

Publication Publication Date Title
KR100774598B1 (ko) 순차 접근 메모리에 저장된 부트 코드를 통한 컴퓨터 시스템의 초기화
US8185728B2 (en) System boot using NAND flash memory and method thereof
US7340566B2 (en) System and method for initializing a memory device from block oriented NAND flash
EP1343082B1 (en) System boot using nand flash memory and method thereof
US5371876A (en) Computer system with a paged non-volatile memory
US7296143B2 (en) Method and system for loading processor boot code from serial flash memory
US6711059B2 (en) Memory controller
US7490177B2 (en) System method for performing a direct memory access for automatically copying initialization boot code in a new memory architecture
US7908466B2 (en) Method and apparatus for booting a microprocessor system using boot code stored on a serial flash memory array having a random-access interface
KR100281432B1 (ko) 플래쉬 메모리에 기초한 주메모리
US5388248A (en) Flash memory card including plural flash memories and circuitry for selectively outputting ready/busy signals in different operating modes
US7302518B2 (en) Method and system for managing a suspend request in a flash memory
JP2004021990A (ja) プロセッサを含むコンピュータのファームウェア・セレクタ
US6622244B1 (en) Booting from a reprogrammable memory on an unconfigured bus by modifying boot device address
CN114816273B (zh) 针对Norflash的自适应最优配置的方法、装置及介质
CN116185299A (zh) 闪存控制器及相关装置和方法
KR100534613B1 (ko) 플래쉬 메모리를 이용한 시스템 부팅 장치 및 그 방법
US11704258B2 (en) Latency reduction in SPI flash memory devices
JP3097602B2 (ja) データ処理装置
JP2001075798A (ja) 情報処理装置
JP2008108361A (ja) 不揮発性半導体記憶装置
JPH1153210A (ja) エミュレーション用マイクロコンピュータ

Legal Events

Date Code Title Description
A201 Request for examination
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: 20110923

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20121019

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee