2008년 03월 26일
Cortex M3의 중요한 차이점들
1. Memory Map이 Cortex-M3에서 predefine되어 있다.
이전에는 ADS의 scl등을 사용하여 메모리 멥을 결정해주었어야 했지만, Cortex-M3에서는 Memory Map을 미리 일정한 구조로 predefine해놓았다. (물론 바꿀 수 있을 껏이다. Memory Control Unit이 있으니까... 확인해보니 바꿀 수 없다고 한다. --; 하긴 Microcontroller인데...)
2. Interrupt 개수 상향
256개까지 사용할 수 있다.(물론 0번 및 몇개는 predefine된 것이라 다른 것으로 정의할 수 있는지는 의문이다.)
또한 Interrupt로 전환하는 속도가 이전의 반내지 75%정도 좋아졌다.
그리고 다중 레지스터 전송 명령어를 사용중에 발생한 Interrupt가 바로 처리된다. 이전에는 다중 레지스터 전송 명령이 끝난뒤에 Interrupt가 실행되었다.
3. 기본 Timer를 한개 지원
이전까지는 Core가 자체적으로 Timer를 지원하지 않았기 때문에 Timer를 사용하기 위해서는 주변장치에 Timer를 위한 장치가 필요했다. 하지만 Cortex-M3는 자체적으로 Timer를 지원한다.
4. Bit Banding
기존에는 한비트 내지 두비트를 바꾸더라도 System Register를 건드리기 위해서 해당 메모리 맵의 Register위치에 해당하는 메모리 값을 얻어온 다음에 바꾸어야 했는데, Bit Banding을 쓰면, 해당 비트에 해당하는 4바이트 단위의 메모리주소에 32비트값을 0x0또는 0xffffffff으로 바꾸면 매핑되어 있는 Bit가 바뀐다.
그렇지만 그닥 쓸모있어보이진 않는다. --;
5. Programmer's Model
이전에 C로 하기 힘든 Stack Address 영역등의 메모리 영역 지정등이 C로도 가능하게 되었다. 이로써 순수 C로만 코딩이 가능하게 되었다.
또한 이전글에서와 같이 System Debug가 생겼으며, Instruction Set역시 기존의 ARM, Thumb을 지원하지 않고 단순히 Thumb2를 메인으로 사용한다. 이는 Cortex-A계열, Cortex-R계열등과는 다르게 Cortex-M계열이 지원하는 영역이 Microcontroller이기 때문이다. 내가 알기로는 A계열은 전체 셋을 다 지원하는 것으로 알고 있다.
*. Thumb2에 대해서
기존의 Thumb은 16비트 명령어 셋인데 반하여 Thumb2는 16비트 명령어 셋과 32비트 명령어셋을 혼합하여 사용하므로써 코드의 효율성을 높였다고 한다.
그리고 혼합된 형태이므로 이전의 ARM과 Thumb간의 모드 스위칭이 필요없어졌다.
*. Bus Matrix
ICode & DCode Bus와 System Bus가 따로 존재해서, 각 버스를 다양한 메모리 유닛과 연결하여 사용할 수 있다.
(보통 ICode & DCode Bus는 메인 Memory Unit에, System Bus는 보조 Memory Unit또는 그외에 사용하는 듯 하다.)
*, Branch Prediction
Dynamic Branch Prediction은 BTB(Branch Table ..., 이전에 Branch한 정보를 가지고 있음)을 사용하여,
Branch 속도를 증가시킴
Static Branch Prediction은 해당 Branch명령어를 만났을 때 Decoding상태에서 Branch할지 않할지를 판단 후 Fetch를 어디로 할지 결정한다. 이것을 통해서 Pipeline의 Flush가 좀더 덜 일어나게 만들어서 속도 향상을 이루었다.
* Vector Table의 변화
이전에는 Vector Table에는 ARM Code가 들어있었지만, Cortex는 ARM Code 또는 점프할 주소값이 들어갈 수 있다.
*. Unaligned Data Access
이제 0x1001에서 4바이트를 그냥 읽어드릴 수 있게 되었다. 단 4바이트 단위의 주소에서 엑세스하는 것이 가장 빠르다.
(즉, 느리단 이야기)

이전에는 ADS의 scl등을 사용하여 메모리 멥을 결정해주었어야 했지만, Cortex-M3에서는 Memory Map을 미리 일정한 구조로 predefine해놓았다. (물론 바꿀 수 있을 껏이다. Memory Control Unit이 있으니까... 확인해보니 바꿀 수 없다고 한다. --; 하긴 Microcontroller인데...)
2. Interrupt 개수 상향
256개까지 사용할 수 있다.(물론 0번 및 몇개는 predefine된 것이라 다른 것으로 정의할 수 있는지는 의문이다.)
또한 Interrupt로 전환하는 속도가 이전의 반내지 75%정도 좋아졌다.
그리고 다중 레지스터 전송 명령어를 사용중에 발생한 Interrupt가 바로 처리된다. 이전에는 다중 레지스터 전송 명령이 끝난뒤에 Interrupt가 실행되었다.
3. 기본 Timer를 한개 지원
이전까지는 Core가 자체적으로 Timer를 지원하지 않았기 때문에 Timer를 사용하기 위해서는 주변장치에 Timer를 위한 장치가 필요했다. 하지만 Cortex-M3는 자체적으로 Timer를 지원한다.
4. Bit Banding
기존에는 한비트 내지 두비트를 바꾸더라도 System Register를 건드리기 위해서 해당 메모리 맵의 Register위치에 해당하는 메모리 값을 얻어온 다음에 바꾸어야 했는데, Bit Banding을 쓰면, 해당 비트에 해당하는 4바이트 단위의 메모리주소에 32비트값을 0x0또는 0xffffffff으로 바꾸면 매핑되어 있는 Bit가 바뀐다.
그렇지만 그닥 쓸모있어보이진 않는다. --;
5. Programmer's Model
이전에 C로 하기 힘든 Stack Address 영역등의 메모리 영역 지정등이 C로도 가능하게 되었다. 이로써 순수 C로만 코딩이 가능하게 되었다.
또한 이전글에서와 같이 System Debug가 생겼으며, Instruction Set역시 기존의 ARM, Thumb을 지원하지 않고 단순히 Thumb2를 메인으로 사용한다. 이는 Cortex-A계열, Cortex-R계열등과는 다르게 Cortex-M계열이 지원하는 영역이 Microcontroller이기 때문이다. 내가 알기로는 A계열은 전체 셋을 다 지원하는 것으로 알고 있다.
*. Thumb2에 대해서
기존의 Thumb은 16비트 명령어 셋인데 반하여 Thumb2는 16비트 명령어 셋과 32비트 명령어셋을 혼합하여 사용하므로써 코드의 효율성을 높였다고 한다.
그리고 혼합된 형태이므로 이전의 ARM과 Thumb간의 모드 스위칭이 필요없어졌다.
*. Bus Matrix
ICode & DCode Bus와 System Bus가 따로 존재해서, 각 버스를 다양한 메모리 유닛과 연결하여 사용할 수 있다.
(보통 ICode & DCode Bus는 메인 Memory Unit에, System Bus는 보조 Memory Unit또는 그외에 사용하는 듯 하다.)
*, Branch Prediction
Dynamic Branch Prediction은 BTB(Branch Table ..., 이전에 Branch한 정보를 가지고 있음)을 사용하여,
Branch 속도를 증가시킴
Static Branch Prediction은 해당 Branch명령어를 만났을 때 Decoding상태에서 Branch할지 않할지를 판단 후 Fetch를 어디로 할지 결정한다. 이것을 통해서 Pipeline의 Flush가 좀더 덜 일어나게 만들어서 속도 향상을 이루었다.
* Vector Table의 변화
이전에는 Vector Table에는 ARM Code가 들어있었지만, Cortex는 ARM Code 또는 점프할 주소값이 들어갈 수 있다.
*. Unaligned Data Access
이제 0x1001에서 4바이트를 그냥 읽어드릴 수 있게 되었다. 단 4바이트 단위의 주소에서 엑세스하는 것이 가장 빠르다.
(즉, 느리단 이야기)
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- NOR에서 Breakpoint사용시 주의점 by dyanos
- 부팅시 by dyanos
- Cortex M3 교육 과정 중 ARM7 / 9 내용 요약 정리 by dyanos
- System Timer.. by dyanos
- Nested Interrupt에서 by dyanos
# by | 2008/03/26 15:12 | 미분류 | 트랙백 | 덧글(1)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]