임베디드 시스템을 이해하는 기본적으로 알고 있으면 좋은 것들을 정리했다.
CISC 와 RISC 의 차이
임베디드 관련 서적을 보면, 초반에 가장 많이 다뤄지는 내용이 바로 이것이다.
CISC | 하나의 명령을 실행할 때 여러 사이클을 사용 |
RISC | 하나의 명령을 실행할 때 하나의 사이클 클럭을 사용 |
메모리맵 섹션 설명
섹션 | 설명 |
test | CPU 가 읽어오고 실행할 명령어가 들어있다 |
bss | 특정한 값으로 초기화되지 않은 데이터가 들어있는 메모리세션으로, 기본적으로 초기에 0으로 초기화 된다 |
data | 특정한 값으로 초기화된 데이터가 들어있으며, 초기값으로 선언한 변수영역을 포함한다 |
메모리 시스템
프로세서는 명령이나 데이터를 읽거나 쓸 때 주소 정보와 제어신호를 구동한다. MMU 는 구동된 주소 정보가 메모리 장치로의 접근이 허용되는지를 검삭하고 접근이 허용되면 물리주소로 변환하여 메모리 제어기로 제어정보와 함께 전달한다. 메모리 제어기에서는 입력된 주소 정보를 보고 플래시 장치 영역인지 DRAM 장치 영역인지를 판단하고 해당하는 제어신호를 구동한다. 캐시는 DRAM 또는 플래시에 저장되어 있는 명령이나 데이터의 일부를 보관하고 있다가 프로세서가 요구하면 최대한 빨리 전달해주기 위한 고속 메모리 장치다.
Embedded ICE
ARM9TDMI 코어는 ARM9TDM 코어에 Embedded ICE 로직이 추가된 프로세스 코어이다. Embedded ICE 로직은 ARM9TDM 코어와 연결되는 모든 제어신호, 어드레스 버스, 데이터 버스를 감시하고 있다가 호스트 디버거에서 설정한 디버그 조건이 성립되면 프로세스를 멈추고 디버깅할 수 있는 기능을 제공한다.
대부분 디버거는 프로세서를 멈추고 프로세서 내부의 레지스터나 외부 메모리 내용을 확인하거나 프로그램 검증의 목적으로 사용되는 홀트 모드 디버깅을 한다. 하지만 근래에 나오는 프로세서 코어는 EmbeddedICE-RT 를 지원하는데 여기서 'RT' 는 Real Time 의 약자로 프로세서를 멈추지 않고 디버깅할 수 있다는 의미이다. 이런 방법을 모니터(monitor) 모드 디버깅이라고 부른다.
AMBA(Advanced Microcontroller Bus Architecture)
ARM에서 개발하여 SoC 를 개발할 때 쉽게 개발할 수 있도록 제공하는 시스템 버스구조다.
여러가지 이유로 ARM 사에서는 ARM 프로세서 기반에서 각종 입출력 장치간 상호 신호 교환을 위한 표준 시스템 버스 설계 규격으로 AMBA 를 제공하고 있으며, 반도체 및 ASIC 설계자들은 이 버스구조를 기반으로 SOC 를 설계한다. 또한 이와 같은 표준 버스 인터페이스를 기반으로 입출력 장치 모듈(IP : Intellectual Property)을 설계하는 경우, 설계한 입출력 장치 모듈을 프로세서의 변경 후에도 다시 사용할 수 있으므로 SOC 의 설계시간을 단축할 수 있다. 따라서 표준 AMBA 버스를 사용하면 SoC 설계자 간의 의사소통이 용이하여 SoC 설계시간 및 오류를 단축할 수 있고, IP의 재사용이 용이해 외부의 AMBA 버스 기반으로 설계된 표준 IP 도입으로 Soc 설계 시간을 단축할 수 있다.
ARM9E 프로세서
ARM9E 는 ARM9TDMI 와 같이 ARM9 계열이다. 하지만, v5TE 아키텍처를 사용하여 DSP 기능 확장 연산 명령이나 BLX 명령과 같은 새로운 명령이 추가되어 있다. 추가된 명령어는 다음과 같다.
- ARM/Thumb 네트워크 개선을 위한 BLX 명령
- 0 을 카운트하는 CLZ 명령 추가
- 포화 연산 추가
- 32×16, 16×16 곱셈 명령 추가
icache 와 dcache
임베디드 시스템의 부팅 및 초기화 시에 icache 와 dcache 를 enable 해주는 것을 볼 수 있다.
이 것은 다시 말해 cache 를 사용하겠다는 의미이다. 그러므로 좀 더 빠른 실행 속도를 보장 받을 수 있다. 만일 disable 한다면, cache 를 사용하지 않고 무조건 memory 에서 읽어 오겠다는 의미다.