상기 기술적 과제를 수행하기 위한 프로그램을 해독하고 수행하도록 명령하고 관리하는 CPU를 구비하는 내장형 시스템은 전기적으로 프로그램과 소거가 불가 능한 제1불휘발성 메모리; 전기적으로 프로그램과 소거가 가능한 제2불휘발성 메모리; 제1제어신호를 발생하는 제어신호 발생회로; 및 상기 제1제어신호, 상기 CPU로부터 출력되는 리셋 어드레스와 적어도 하나의 명령신호(IST_FET)에 응답하여 상기 제1불휘발성 메모리와 상기 제2불휘발성 메모리 중에서 어느 하나로 상기 리셋 어드레스를 전송하기 위한 디코더를 구비한다.
상기 제어신호 발생회로는 전기적으로 프로그램과 소거가 가능한 제3불휘발성 메모리를 구비하고, 상기 디코더가 상기 제3휘발성 메모리의 초기상태 또는 상기 제3휘발성 메모리 소거에 따라 발생된 상기 제1제어신호에 응답하여 상기 리셋 어드레스를 상기 제1불휘발성 메모리로 전송하면 상기 제1불휘발성 메모리는 상기 리셋 어드레스에 응답하여 자신의 리셋 루틴을 수행하고, 상기 디코더가 상기 제3휘발성 메모리 프로그램에 따라 발생된 상기 제1제어신호에 응답하여 상기 리셋 어드레스를 상기 제2불휘발성 메모리로 전송하면 상기 제2불휘발성 메모리는 자신의 리셋 루틴을 수행한다.
상기 제3불휘발성 메모리는 상기 제1불휘발성 메모리에서의 리셋 루틴이 종료되는 경우 프로그램된다.
상기 디코더는 비활성화된 상기 제1제어신호에 응답하여 상기 리셋 어드레스를 상기 제1불휘발성 메모리로 전송하고, 상기 디코더는 활성화된 상기 제1제어신호에 응답하여 상기 리셋 어드레스를 상기 제2불휘발성 메모리를 전송한다.
상기 제1불휘발성 메모리는 ROM이고, 상기 제2불휘발성 메모리는 플레쉬 메모리이다.
상기 제어신호 발생회로는 제2제어신호를 더 발생하고, 상기 디코더는 활성화된 상기 제2제어신호에 응답하여 상기 CPU가 상기 제1불휘발성 메모리에 접근하는 것을 차단한다.
상기 디코더는 활성화된 상기 제2제어신호에 응답하여 상기 CPU가 상기 제1불휘발성 메모리에 접근하는 것이 차단됨을 나타내는 신호를 상기 CPU로 출력한다.
상기 제어신호 발생회로는 전기적으로 프로그램과 소거가 가능한 제3불휘발성 메모리를 구비하고, 상기 제3불휘발성 메모리가 프로그램되는 경우 상기 제어신호 발생회로는 활성화된 상기 제2제어신호를 발생하고, 상기 제3불휘발성 메모리가 소거되는 경우 상기 제어신호 발생회로는 비활성화된 상기 제2제어신호를 발생한다.
상기 제어신호 발생회로는 제3제어신호를 더 발생하고, 상기 디코더는 활성화된 상기 제3제어신호에 응답하여 상기 CPU가 상기 제1불휘발성 메모리에 접근하는 것을 영구히 차단한다.
상기 제어신호 발생회로는 제2제어신호를 더 발생하고, 상기 디코더는 활성화된 상기 제2제어신호에 응답하여 상기 제2불휘발성 메모리만을 선택하기 위한 상기 선택신호를 발생한다.
상기 제어신호 발생회로는 전기적으로 프로그램만이 가능한 제3불휘발성 메모리를 구비하고, 상기 제3불휘발성 메모리가 프로그램되는 경우 상기 제어신호 발생회로는 활성화된 제2제어신호를 발생한다.
상기 CPU는 리셋신호에 응답하여 상기 리셋 어드레스와 상기 명령신호를 상 기 디코더로 출력한다.
상기 기술적 과제를 달성하기 위한 프로그램을 해독하고 수행하도록 명령하고 관리하는 CPU를 구비하는 내장형 시스템은 전기적으로 프로그램과 소거가 불가능한 제1불휘발성 메모리; 전기적으로 프로그램과 소거가 가능한 제2불휘발성 메모리; 전기적으로 프로그램과 소거가 가능한 제3불휘발성 메모리; 및 상기 제3불휘발성 메모리의 프로그램과 소거 중 어느 하나에 따라 발생된 제1제어신호, 상기 CPU로부터 출력되는 리셋 어드레스와 적어도 하나의 명령신호에 응답하여 상기 리셋 어드레스를 상기 제1불휘발성 메모리와 상기 제2불휘발성 메모리 중에서 어느 하나를 출력하는 디코더를 구비한다.
상기 기술적 과제를 달성하기 위한 프로그램을 해독하고 수행하도록 명령하고 관리하는 CPU, 전기적으로 프로그램과 소거가 불가능한 제1불휘발성 메모리, 전기적으로 프로그램과 소거가 가능한 제2불휘발성 메모리, 전기적으로 프로그램과 소거가 가능한 제3불휘발성 메모리를 구비하는 시스템에서 리셋 루틴을 수행하는 방법은 제1파워 업 또는 제1리셋 시에, 상기 디코더가 상기 제3불휘발성 메모리의 초기상태 또는 상기 메모리가 소거됨에 따라 발생된 제1제어신호, 상기 CPU로부터 출력되는 리셋 어드레스와 적어도 하나의 명령신호에 응답하여 상기 리셋 어드레스를 상기 제1불휘발성 메모리로 전송하는 단계; 상기 제1불휘발성 메모리가 상기 리셋 어드레스에 기초하여 리셋 루틴을 수행하면서 상기 제2불휘발성 메모리가 필요로 하는 프로그램을 상기 제2불휘발성 메모리에 기입하는 단계; 제2파워 업 또는 제2리셋시, 상기 디코더가 상기 제2불휘발성 메모리가 프로그램됨에 따라 발생된 상기 제1제어신호에 응답하여 상기 리셋 어드레스를 상기 제2불휘발성 메모리로 전송하는 단계; 및 상기 제2불휘발성 메모리가 상기 리셋 어드레스에 기초하여 리셋루틴을 수행하는 단계를 구비한다.
본 발명과 본 발명의 동작상의 이점 및 본 발명의 실시에 의하여 달성되는 목적을 충분히 이해하기 위해서는 본 발명의 바람직한 실시예를 예시하는 첨부 도면 및 첨부 도면에 기재된 내용을 참조하여야만 한다.
이하, 첨부한 도면을 참조하여 본 발명의 바람직한 실시예를 설명함으로써, 본 발명을 상세히 설명한다. 각 도면에 제시된 동일한 참조부호는 동일한 부재를 나타낸다.
도1은 본 발명의 실시예에 따른 CPU를 구비하는 내장형 시스템의 블록도를 나타낸다. 도1을 참조하면, 본 발명에 따른 내장형 시스템(100)은 CPU(110), 제1불휘발성 메모리(120), 제2불휘발성 메모리(131), 제어신호 발생회로(133), 및 디코더(140)를 구비한다.
상기 CPU(110)는 내장형 시스템에서 사용되는 프로그램을 해독하고 상기 프로그램을 수행하도록 명령하고 상기 내장형 시스템 또는 상기 프로그램을 종합적으로 관리한다.
제1불휘발성 메모리(120)는 전기적으로 프로그램과 소거가 불가능한 메모리이고, ROM으로 구현될 수 있다. 제2불휘발성 메모리(131)는 전기적으로 프로그램과 소거가 가능한 메모리이고, 플레쉬 메모리(flash memory)로 구현될 수 있다.
상기 제어신호 발생회로(133)는 적어도 하나의 불휘발성 메모리(135와 137) 를 구비한다.
상기 제3불휘발성 메모리(135)는 전기적으로 프로그램과 소거가 가능한 메모리이고, 플레쉬 메모리로 구현될 수 있다. 예컨대, 상기 제3불휘발성 메모리(135)는 소정의 데이터를 프로그램하는 과정(이를 '프로그램'이라 한다)을 통하여 특정의 데이터 값(예컨대, 논리 '하이' 또는 '1')을 유지하고, 상기 제3불휘발성 메모리(135)는 소정의 데이터를 소거(erase)하는 과정(이를 '소거'라 한다)을 통하여 특정의 데이터 값(예컨대, 논리 '로우' 또는 '0')을 유지한다. 당업자라면 상기 플레쉬 메모리(셀)의 프로그램 또는 소거과정을 잘 알고 있으므로 이에 대한 상세한 설명은 생략한다.
따라서 상기 제3불휘발성 메모리(135)는 프로그램 또는 소거에 따라 서로 다른 상태(예컨대, 하이 또는 로우)를 갖는 제1제어신호(IniUser)를 발생한다.
그리고 상기 제어신호 발생회로(133)는 제4불휘발성 메모리(137)를 더 구비할 수 있으며, 상기 제4불휘발성 메모리(137)는 상술한 바와 같은 프로그램 또는 소거에 따라 서로 다른 상태를 갖는 제2제어신호(RomHidden)를 발생한다.
도5는 도1에 도시된 내장형 시스템의 작동 타이밍도를 나타낸다. 도 1 및 도 5를 참조하면, 내장형 시스템(또는 칩(100))이 처음으로 고객 또는 사용자에게 전달된 때, 제1제어신호(IniUser)와 제2제어신호(RomHidden)각각은 비활성화 상태(예컨대, 논리 로우)로 설정되어 있다.
사용자에 의하여, 상기 칩(100)에 처음으로 전원이 공급(이를 '파워 업(power up)'이라 한다)되고 외부 리셋 신호(EXT_RST)가 활성화 상태(예컨대, 논리 하이)로 되는 경우, 상기 제어신호 발생회로(133)-더 엄밀하게는 제3불휘발성 메모리(135)는 논리 하이 또는 펄스 형태를 갖는 외부 리셋 신호(EXT_RST)에 응답하여 논리 로우를 갖는 제1제어신호(IniUser)를 디코더(140)로 출력한다.
상기 제어신호 발생회로(137)-더 엄밀하게는 제4불휘발성 메모리(137)는 제2제어신호(RomHidden)를 상기 디코더(140)로 더 출력할 수 있다. 상기 제2제어신호 (RomHidden)의 기능에 대해서는 후술한다.
상기 외부 리셋 신호(EXT_RST)가 논리 하이로 된 후 소정의 시간이 경과된 후 내부 리셋 신호(INT_RST)가 논리 하이로 된다. 따라서 CPU(110)는 논리 하이를 갖는 내부 리셋 신호(INT_RST)에 응답하여 리셋 어드레스(RST_ADD =C_ADD:n:0>=Ox00000)를 디코더(140)로 출력한다.
또한, 상기 CPU(110)는 리셋 어드레스(C_ADD:n:0>=Ox00000)에 상응하는 메모리 영역에 저장된 명령어를 읽어 내기 위한 논리 하이를 갖는 명령신호(IST_FET)를 디코더(140)로 출력한다.
상기 디코더(140)는 논리 로우를 갖는 제1제어신호(IniUser), 상기 리셋 어드레스(C_ADD<n:0>=Ox00000), 및 적어도 하나의 명령신호(IST_FET)에 응답하여 상기 리셋 어드레스(D_ADD<m:0>=Ox00000)를 제1불휘발성 메모리(120)로 전송한다.
즉, 상기 디코더(140)는 논리 로우를 갖는 제1제어신호(IniUser)와 논리 하이로된 명령신호(IST_FET)에 응답하여 논리 하이를 갖는 제1선택신호(ROM_SEL)를 제1불휘발성 메모리(120)로 전송하고, 리셋 어드레스(D_ADD<m:0>=Ox00000)를 상기 제1불휘발성 메모리(120)로 전송한다. 이때 제2선택신호(FM_SEL)는 논리 로우를 유 지하므로, 상기 제2불휘발성 메모리(131)는 디스에이블(disable) 상태를 유지한다.
상기 제1불휘발성 메모리(120)는 논리 하이를 갖는 제1선택신호(ROM_SEL)에 응답하여 인에이블(enable)되고, 어드레스(Ox00000)에 상응하는 상기 제1불휘발성 메모리(120)의 영역에 저장된 명령어는 데이터 버스(150)를 통하여 CPU(110)로 전송된다.
상기 CPU(110)가 상기 리셋 어드레스(Ox00000)에 상응하는 명령어를 해석하고 해석된 명령어에 상응하는 어드레스(C_ADD<n:0>)를 상기 디코더(140)로 전송하면, 상기 디코더(140)는 상기 어드레스(C_ADD<n:0>)에 상응하는 어드레스 (D_ADD<m:0>)를 제1불휘발성 메모리(120)로 전송한다. 상기 제1불휘발성 메모리 (120)는 상기 어드레스(D_ADD<m:0>)에 상응하는 명령어(예컨대, 리셋 핸들러 루틴(reset handler routine))에 따라 초기화를 수행한다.
그 후 상기 제1불휘발성 메모리(120)는 CPU(110)의 제어하에 상기 제1불휘발성 메모리(120)에 저장된 플레쉬 로더(flash loader)에 의하여 제2휘발성 메모리(131)에 필요한 OS(operating system)를 포함하는 프로그램을 상기 제2휘발성 메모리(131)에 기입(또는 저장)한다. 상기의 과정을 '제조사 코드에 따른 리셋 루틴' 또는 '초기화 모드(initialization mode)'라 한다.
도2는 도1에 도시된 디코더의 회로도를 나타낸다. 도2를 참조하면, 디코더(140)는 다수개의 논리 회로들(201 내지 227)을 구비한다. AND게이트(201)는 리셋 어드레스(C_ADD<n:0>)와 명령어 인출을 위한 명령신호(IST_FET)를 논리곱한다. AND게이트(203)는 AND게이트(201)의 출력신호와 제1제어신호(IniUser)를 논리곱 한다.
OR게이트(205)는 AND게이트(203)의 출력신호와 어드레스(C_ADD<n:0> =Ox80000~Ox80FFF)를 논리합 한다. 인버터(207)는 제2제어신호(RomHidden)을 반전시키고, AND게이트(209)는 OR게이트(205)의 출력신호와 인버터(207)의 출력신호를 논리곱하고 제1선택신호(ROM_SEL)를 출력한다.
인버터(211)는 AND게이트(203)의 출력신호를 반전시키고, AND게이트(213)는 인버터(211)의 출력신호와 어드레스(C_ADD<n:0>=Ox00000~OX7FFFFF)를 논리곱하고 제2선택신호(FM_SEL)를 출력한다.
버퍼(217)는 다수개의 인버터들(219와 221)의 체인으로 구성되고 어드레스 (C_ADD<n:0>=Ox90000~OX900FF)를 버퍼링하고 선택신호(FS_SEL)를 출력한다. 버퍼(223)는 다수개의 인버터들(225와 227)의 체인으로 구성되고 어드레스 (C_ADD<m:0>)를 버퍼링하고 어드레스(D_ADD<m:0>)을 출력한다.
도3은 플레쉬 메모리에 필요한 프로그램을 셋-업하기 전의 ROM과 상기 플레쉬 메모리의 메모리 맵을 나타낸다. 도 3을 참조하면, 제1불휘발성 메모리(120)는 다양한 코드, 예컨대 리셋 벡터(reset vector), Vectored Exceptions, 예외 루틴들(Exception routines), 리셋 핸들러 루틴(reset handler routine), 및 플레쉬 로더 등의 코드를 저장한다. 제2불휘발성 메모리(131)는 어떠한 코드도 저장하고 있지 않다.
칩(100)이 처음으로 고객에게 전달된 경우, 제2불휘발성 메모리(131)에는 아무런 프로그램(또는 코드)도 없으므로, 상기 칩(100)에 전원이 공급되어도 상기 제2불휘발성 메모리(131)는 아무런 작동을 수행하지 못한다. 따라서 상기 제2불휘발 성 메모리(131)에 상기 프로그램(또는 코드)이 설정되지 않은 상태에서, 상기 칩(100)을 작동시키기 위해서는 리셋 어드레스(Ox00000)가 제1불휘발성 메모리 (120)로 전송되어야 한다.
그러나, 상기 제1불휘발성 메모리(120)와 상기 제2불휘발성 메모리(131)는 서로 중복된 어드레스(예컨대, Ox00000, Ox0001C)의 영역을 가지고 있다. 따라서 CPU(110)는 상기 제1불휘발성 메모리(120)의 어드레스 영역과 상기 제2불휘발성 메모리(131)의 어드레스 영역을 구분하기 위한 명령신호(IST_FET와 DRW)를 디코더 (140)로 출력한다.
상기 디코더(140)는 명령어 인출을 위한 명령신호(IST_FET)와 논리 로우를 갖는 제1제어신호(IniUser)에 응답하여 논리 하이를 갖는 제1선택신호(ROM_SEL)를 발생하면, 상기 CPU(110)는 상기 제1불휘발성 메모리(120)에 저장되어 있고 상기 CPU(110)로부터 출력된 리셋 어드레스(Ox00000)에 상응하는 메모리 영역에 저장된 명령어를 가져올(fetch) 수 있다.
그러나. 상기 CPU(110)가 데이터를 기입하거나 데이터를 독출하기 위한 명령신호(DRW)를 논리 하이로 만들면, 상기 디코더(140)는 논리 하이를 갖는 명령신호(DRW)와 논리 하이를 갖는 상기 제1제어신호(ROM_SEL)에 응답하여 논리 하이를 갖는 제2선택신호(FM_SEL)를 발생한다. 따라서 상기 CPU(110)는 상기 제2불휘발성 메모리(120)에 저장되어 있고 상기 CPU(110)로부터 출력된 리셋 어드레스 (Ox00000)에 상응하는 메모리 영역에 저장된 명령어를 가져올(fetch) 수 있다.
즉, 제1불휘발성 메모리(120)의 제조사가 그림 3에 도시된 바와 같이 상기 제1불휘발성 메모리(120)에 소정의 코드를 저장해 놓으면, 상기 칩(100)에 최초로 전원이 공급되거나 리셋되는 경우, CPU(110)는 내부 리셋 신호(INT_RST)에 응답하여 명령어를 읽기 위한 리셋 어드레스(Ox00000)와 명령신호(IST_FET)를 디코더(140)로 출력하고, 상기 디코더(140)는 논리 로우를 갖는 제1제어신호 (IniUser)와 논리 하이를 갖는 명령신호(IST_FET)에 응답하여 제1불휘발성 메모리(120)를 인에이블 시키기 위한 제1제어신호(ROM_SEL)를 논리 하이로 만든다.
따라서 상기 제1불휘발성 메모리(120)는 리셋 핸들러 루틴에 의하여 초기화되고, 그 후에 플레쉬 로더는 제2불휘발성 메모리(131)에 사용자 고유의 리셋 핸들러 루틴을 포함한 모든 필요한 프로그램(또는 코드)을 셋업한다. 상기 제2불휘발성 메모리(131)에 상기 프로그램(또는 코드)의 셋업이 완료되면, 상기 제3불휘발성 메모리(133)는 프로그램된다.
즉, 상기 제1불휘발성 메모리(120)는 상기 CPU(110)의 제어하에 제조사 코드에 따라 리셋 루틴을 수행하여 상기 제2불휘발성 메모리(131)에 필요한 소정의 코드를 기입한다. 상기 초기화 모드가 종료된 후, 상기 제3불휘발성 메모리(133)는 프로그램된다.
그 후, 상기 내장형 시스템(또는 칩)이 파워-업 또는 리셋되는 경우, 상기 제어신호 발생회로, 즉 상기 제3불휘발성 메모리(135)는 외부 리셋 신호(EXT_RST)에 응답하여 논리 하이를 갖는 제1제어신호(IniUser)를 디코더(140)로 출력한다.
그리고 상기 CPU(110)의 리셋 신호인 내부 리셋 신호(INT_RST)가 논리 하이로 되는 경우, 상기 CPU(110)는 리셋 어드레스(C_ADD<n:0>=Ox00000)를 디코더(140) 로 출력하고, 상기 리셋 어드레스(C_ADD<n:0>=Ox00000)에 상응하는 명령어를 읽기 위한 명령신호(IST_FET)를 디코더(140)로 출력한다.
상기 디코더(140)는 논리 하이를 갖는 상기 제1제어신호(IniUser)와 논리 하이를 갖는 상기 명령신호(IST_FET)에 응답하여 논리 하이를 갖는 제2선택신호 (FM_SEL)를 발생하고, 상기 리셋 어드레스와 관련된 어드레스(D_ADD<m:0>)를 출력한다. 이때 제1선택신호(ROM_SEL)는 논리 로우를 유지하므로, 상기 제1불휘발성 메모리(120)는 디스에이블 상태를 유지한다.
그러나, 상기 제2불휘발성 메모리(131)는 논리 하이를 갖는 상기 제2선택신호(FM_SEL)에 응답하여 인에이블되고, 상기 제2불휘발성 메모리(131)는 리셋 어드레스(Ox00000)에 상응하는 영역에 저장된 명령어(즉, 사용자가 설정한 명령어)를 버스(150)를 통하여 CPU(110)로 출력한다.
상기 CPU(110)는 사용자가 설정한 명령어를 해석하고 해석된 명령어에 상응하는 어드레스(C_ADD<n:0>)를 상기 디코더(140)로 전송하면, 상기 디코더(140)는 상기 어드레스(C_ADD<n:0>)에 상응하는 어드레스(D_ADD<m:0>)를 제2불휘발성 메모리(131)로 전송한다.
상기 제2불휘발성 메모리(131)는 상기 어드레스(D_ADD<m:0>)에 상응하는 명령어(예컨대, 사용자 특성의 리셋 핸들러 루틴(user specific reset handler routine))에 따라 초기화를 수행한다. 그 후 상기 제2불휘발성 메모리(131)는 CPU(110)의 제어하에 사용자가 설정한 사용자 코드를 수행한다. 이를 '사용자 고유코드에 따른 리셋 루틴' 또는 '사용자 모드'라 한다.
한편, 초기화 모드에서 칩(100)이 작동하다가 여러 가지 예외(exception)가 발생되는 경우 벡터드 인트럽트(vectored interrupt)를 지원하는 CPU에서는 정해진 어드레스로 제어가 옮겨진다. 따라서 이 벡터드 익셉션(vectored exception)영역도 제1불휘발성 메모리(120)에 저장되어 있어야 한다.
따라서 상기 벡터드 익셉션(vectored exception)영역에 대한 어드레스는 초기화 모드에서는 제1불휘발성 메모리(120)에 사상되어 있어야 하고 사용자 모드에서는 제2불휘발성 메모리(131)에 사상되어 있어야 한다.
도4는 플레쉬 메모리에 필요한 프로그램을 셋-업한 후의 ROM과 상기 플레쉬 메모리의 메모리 맵을 나타낸다. 도 4를 참조하면, 사용자 모드에서 상기 칩(100)으로 전원이 공급되거나 리셋되는 경우, 상기 디코더(140)는 논리 하이를 갖는 제1제어신호(IniUser), 리셋 어드레스(Ox00000)와 명령신호(IST_FET)에 응답하여 논리 하이를 갖는 제2선택신호(FM_SEL)를 발생한다. 따라서 상기 칩(100)은 사용자가 셋업한 상기 사용자 고유코드에 따른 리셋 루틴에 따라 작동한다.
스마트 카드와 같이 보안성이 중요시되는 시스템(또는 칩)에서, 고객들은 상기 칩 제조사가 제공하는 부트 루틴 및/또는 플레쉬 로더에 대한 확신을 갖지 못하는 경우가 있다. 왜냐하면, 칩 제조사에서 트로이 목마코드와 같은 백 도어(back door)를 만들어 놓을 것을 우려하기 때문이다.
본 발명에 따른 내장형 시스템(또는 칩)은 고객들은 자신의 고유의 코드를 제2불휘발성 메모리(131)에 저장(또는 설정)한 이 후에 상기 CPU(110)가 상기 제1불휘발성 메모리(120)에 접근하지 못하게 할 수 있다.
즉, 사용자가 칩 제조사에서 제공하는 제1불휘발성 메모리(120)에 저장된 프로그램이 상기 내장형 시스템(또는 칩)의 작동에 관여하는 것을 우려하여 상기 제1불휘발성 메모리(120)를 제거하기를 원하는 경우, 본 발명에 따른 내장형 시스템(100)의 제어신호 발생회로(133)는 제2제어신호(RomHidden)를 발생하기 위한 제4불휘발성 메모리(137)를 더 구비한다.
상기 제어신호 발생회로(133)가 외부 리셋 신호(EXT_RST)에 응답하여 논리 로우를 갖는 제1제어신호(IniUser)와 논리 하이를 갖는 제2제어신호(RomHidden)를 발생하면, 상기 CPU(110)가 제1불휘발성 메모리(120)를 선택하기 위한 어드레스를 출력하는 경우라도 상기 디코더(140)는 논리 하이를 갖는 제2제어신호(RomHidden)에 응답하여 상기 CPU(110)가 상기 제1불휘발성 메모리(120)에 접근하는 것을 차단하고, 접근이 차단됨을 나타내는 신호(IVD)를 상기 CPU(110)로 출력한다.
따라서 상기 CPU(110)는 상기 제1불휘발성 메모리(120)에 저장된 프로그램(또는 코드)를 실행할 수 없고 원하는 데이터를 독출할 수도 없다.
그러나, 상기 제2제어신호(RomHidden)의 발생에 관련된 상기 제4불휘발성 메모리(157)가 소거되는 경우, 상기 제4불휘발성 메모리(137)는 논리 로우를 갖는 상기 제2제어신호(RomHidden)를 발생한다.
따라서 상기 디코더(140)는 논리 로우를 갖는 제1제어신호(IniUser)와 논리 로우를 갖는 상기 제2제어신호(RomHidden)에 응답하여 논리 하이를 갖는 제1선택신호(ROM_SEL)를 발생시킬 수 있다. 즉, 초기화 모드에서는 상기 제1불휘발성 메모리(120)에 저장되어 있는 리셋 핸들러 루틴에서 초기화가 이루어진다.
도6은 본 발명의 다른 실시예에 따른 프로그램을 해독하고 수행하도록 명령하고 관리하는 CPU를 구비하는 내장형 시스템의 블록도를 나타낸다. 도 6을 참조하면, CPU를 구비하는 내장형 시스템(100')는 CPU(110), 제1불휘발성 메모리(120), 제2불휘발성 메모리(131), 제어신호 발생회로(133'), 및 디코더(140')를 구비한다.
상기 제어신호 발생회로(133')는 적어도 두 개의 불휘발성 메모리들(135, 137, 139, 및 141)을 구비한다. 상기 디코더(140')의 상세한 내부블록은 도 2를 참조하여 구현될 수 있다.
불휘발성 메모리(135)는 제1불휘발성 메모리(120)와 제2불휘발성 메모리 (131)중에서 어느 하나를 선택하기 위한 제1제어신호(IniUser)를 발생한다.
불휘발성 메모리(137)는 제2제어신호(RomHidden)를 발생하고, 불휘발성 메모리(139)는 제3제어신호(UserLock)를 발생하고, 불휘발성 메모리(141)는 제4제어신호(RomHiddenLock)를 발생한다. 각 제어신호(IniUser, RomHidden, UserLock, 및 RomHiddenLock)의 번호는 설명의 편의를 위하여 임의적으로 사용된 것이다.
상기 제어신호 발생회로(133)는 제3제어신호(UserLock)를 발생하기 위한 전기적으로 프로그램만이 가능한 불휘발성 메모리(139)를 구비한다.
논리 하이를 갖는 상기 제3제어신호(UserLock)는 칩(100)이 사용자 모드로 설정된 후 상기 칩(100)이 영구히 초기화 모드로 돌아가는 것을 금지한다. 즉, 논리 하이를 갖는 제2제어신호(RomHidden)에 의하여 상기 CPU(110)가 상기 제1불휘발성 메모리(120)에 접근이 금지된 후 예상치 못한 잘못된 조작으로 인하여 사용자 모드가 초기화 모드로 바뀌는 경우 상기 칩(100)은 더 이상 사용될 수 없다.
따라서 이를 방지하기 위하여 논리 하이를 갖는 제3제어신호(UserLock)가 필요하다. 즉, 제1제어신호를 발생하는 불휘발성 메모리(135)를 프로그램하고 제2제어신호를 발생하는 불휘발성 메모리(137)를 프로그램한 후, 제3제어신호를 발생하는 불휘발성 메모리(139)를 프로그램하는 경우 상기 칩(100)은 다시 초기화 모드로 돌아 갈 수 없다.
예컨대. 상기 불휘발성 메모리(139)의 초기상태는 논리 로우이고, 상기 불휘발성 메모리(139)가 프로그램되는 경우, 상기 불휘발성 메모리(139)는 외부 리셋 신호(EXT_RST)에 응답하여 논리 하이를 갖는 제3제어신호(UserLock)를 발생한다.
상기 불휘발성 메모리(139)가 한번 프로그램되면, 상기 칩(100)은 영구히 사용자 모드로만 사용된다. 즉, CPU(100)는 제1불휘발성 메모리(120)를 영구히 억세스 할 수 없다.
또한, 상기 제어신호 발생회로(133)는 제4제어신호(RomHiddenLock)를 발생하기 위한 전기적으로 프로그램만이 가능한 불휘발성 메모리(141)를 구비한다.
상기 제4제어신호(RomHiddenLock)를 발생하기 위한 불휘발성 메모리(141)의 초기상태는 논리 로우이다. 상기 불휘발성 메모리(141)가 한번 프로그램되면, 상기 불휘발성 메모리(141)는 외부 리셋 신호(EXT_RST)에 응답하여 논리 하이를 갖는 제4제어신호(RomHiddenLock)를 발생한다.
상기 불휘발성 메모리(141)가 한번 프로그램되면, 상기 칩(100)은 영구히 사용자 모드로만 사용된다. 즉, CPU(100)는 제1불휘발성 메모리(120)를 영구히 억세스 할 수 없다.
예컨대, 상기 제4제어신호(RomHiddenLock)가 논리 로우인 경우 상기 제2제어신호(RomHidden)를 발생하는 불휘발성 메모리(137)는 프로그램 또는 소거가 가능하다. 그러나 상기 제4제어신호(RomHiddenLock)가 논리 하이로 되면, 상기 제2제어신호(RomHidden)를 발생하는 불휘발성 메모리(137)는 프로그램 또는 소거가 불가능하다.
본 발명은 도면에 도시된 일 실시 예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 등록청구범위의 기술적 사상에 의해 정해져야 할 것이다.