임베디드 개발(before)/IoT 임베디드 SW 개발자 양성과정

[30일차] ARM 프로세서 이해 및 활용(AMBA BUS, Clock, Power, Exception Handling)

주운녕 2020. 8. 22. 11:20

○ ARM core 구조에 관한 대부분의 설명과 사진은 s3c2450 user manual에 있다.


◎ 블록 다이어그램 다시 보기

● AMBA 버스

▷  AMBA(Advanced Microcontroller Bus Architecture)

- ARM에서 개발하여 오픈 한 표준 시스템 버스 설계 구격

- SoC를 구성하는 기능 블록들 간의 연결 및 관리 방법을 제공

▷ 표준 AMBA 버스의 장점

- SoC 설계자 간의 의사소통 용이

:: 설계자 간의 idea공유로 SoC 설계 시간 단축

- IP(Intellenctual Property)의 재사용이 용이

:: 외부의 표준 IP 도입으로 SoC 설계 시간 단축

▷ AHB (Advanced High-performance Bus)

- High performance

▷ APB(Advanced Peripheral Bus)

- Peripheral bus

▷ AXI(Advanced eXtensible Interface)

- AMBA 버스 Spec 3.0

- High performance, High frequency and Low Power)

 

○ AHB 버스

- high performance 지원

- pipelined operation 지원

- multiple bus master 지원

- Burst transfer 지원(RAM, DMA 등 우르르 보냄)

- Single clock edge를 사용하여 동작 (Rising edge) (*DDR 이란? double data의 약자. 클럭의 rising, falling에 둘 다 동작)

- AHB Master와 Slave, Arbiter : 한 번에 하나의 마스터가 읽기 또는 쓰기 동작을 Arbiter에게 요청, 요청에 따라 Slave가 동작 수행. 참고하기 좋은 임베디드 레시피

 

AMBA - SoC안에서 IP끼리의 Bus 규격

 

recipes.egloos.com

 

○ APB 버스

- Low Power (clock속도가 떨어짐.)

 

★ S3C2450의 이해

● Clock 설정.

▷ 보통, 시스템의 동작은 외부의 낮은 Clock을 PPL을 통해 높은 Clock으로 증가시키고 이를 동작 clock으로 하여 내부 회로를 구동시킨다.

:: clock 알면 좋은 점

1) 명령어 단위로 NOP(system delay)을 줄 때 clock 알면 정확한 시간 줄 수 있다.

2) 성능을 가늠할 수 있다.

- 외부의 낮은 clock -> PLL -> 높은 동작 Clock

▷ Mpll -> Main Clock ::: 다시 ARMCLK(CORE), HCLK(/4), PCLK(/4/2), DDRCLK로 분주된다.  

▷ Epll(Extended) -> USB clock, CAM clock, LCD clock, I2C clock, UART clock으로 출력

▷ SOURCE - 크리스탈(X-TAL), 오실레이터(OSC)(사실 이게 크리스탈 포함.)

- 12MHz(BUS 등의 clock으로)

- 32.768kHz (=2^15 * 0.001) (시계로 많이 씀)

오실레이터
이런 식으로 겹쳐지면서 작은 파형을 만들어 낸다. (voltage로 조절.)

=> 400MHz ~ 533 MHz를 만들어 낸다.

-여기서 /4로 AHB로 들어가고, /2를 더한 /4/2가 APB BUS로 들어간다.

▷ Lock Time

- PLL logic을 통해 외부 X-TAL Clock은 안정된 출력 CLock을 공급하게 되는데 최적화된 출력 clock을 공급할 때까지 시간이 필요하다. 이 구간은 불안정한 상태이기 때문에 Lock time을 설정하여 chip이 동작하지 않게 하고 이후 안정화된 클럭에 의해 동작한다.

*Tip!

(* 보통 Clock과 전력 소비(Power Consumption의 비는 1 : 2이다.)  

(* core가 빠른 건 낮은 v에서 유리하다. 낮을수록 rising, fall 이 빨라서.)

(* 3.3V-Cmos Level / 5V-TTL Level)

(* 출력으로 나오는 Clock MPll과 Epll의 계산식이 존재하지만, 보통 data sheet에 sample table이 있기 때문에 그걸 참고하면 된다.)

▷ 보통 ARMCLK : HCLK : PCLK : DDECLK = 1 : 4 : 8 : 2 의 분주비를 갖는다.

○ Power 관리

▷ Normal 모드

- CPU core를 비롯한 모든 제어 block이 정상 동작

- 전력 소모를 줄이기 위해 기본장치를 제외한 나머지 장치들에 대한 동작을 s/w적으로 제어할 수 있다.

▷ IDLE 모드

- bus, memory, interrupt 컨트롤러들과 power management block을 제외한 CPUL core stopped

- 외부 인터럽트, EINT, RTC alarm 인터럽트에 의해 벗어날 수 있다.

▷ STOP 모드

- PLL 없이 저주파를 동작으로 CLOCK으로 사용. 전력 소모를 줄인다. / PWRCFG레지스터로 제어

- Deep-Stop : ARM core의 Internal power gating을 사용 / PWRMODE [18] 레지스터로 제어

▷ SLEEP 모드

- 모든 주변장치를 포함하는 코어 전력을 셧다운 하며 재가동(wake-up) 로직을 제외한 SoC 모든 로직에서는 어떤 전력 소모도 일어나지 않는다.

- EINT[15:0], RTC alarm 인터럽트 등에 의해 POWR_OFF 모드에서 깨어난다.

 

★ 임베디드 소프트웨어 개발

○ APCS (Arm Procedure Call Standard)

● Exception Handling

 

Pipe line과 Exception 관계 그리고 ^접미사

실컷 Exception 관련한 얘기를 했습니다. 뒷 처리 얘기도 해야겠죠. 여자친구랑 데이트 하다가 화장실에 가고 싶어지면 화장실에 갔다 와야겠죠. 화장실에 갔다 오려면 가기 전에 무슨 얘기를 하고

recipes.egloos.com

 

○ Return From Exception Handler

▷ Exception 처리가 완료되면 다음의 절차를 수행하여 복귀.

- LR_<mode> 값을 PC에 복사한다.

- SPSR_<mode>를 CPSR에 복사한다.

(** 주의사항! 위 2가지의 동작이 하나의 명령으로 처리되어야 한다.)

 

▷ Exception 복귀 명령

- Data Processing 명령에 S 접미사를 사용하여 PC를 destination 레지스터로 사용하는 방법.

(Privilege 모드에서 S 접미사를 사용하면 명령어의 dst 레지스터가 PC 일 경우 CPSR = SPSR 이 된다.

SUBS PC, LR #4 //접미사 S로 CPSR=SPSR

- LDM 명령을 사용하고 register list 뒤에 ^옵션 사용

( stack에 되돌아갈 주소 값이 계산되어 들어가 있어야 한다. )

LDM SP!, {PC}^ // ^는 CPSR 복구하라는 의미

 

○ Exception 과 Pipeline

▷ Exception 종류별로 CPU에서 발생한 Exception을 인식하는 시점의 Pipeline stage가 모두 다르다.

(Pipe line stage : Fetch - Decode - Excute - Memory Access - Write Back )

- 따라서 복원되는 PC 값의 조정이 필요하다.

 

▷ Exception 복귀 명령

(R14 는 LR(link register) 과 동일하다. 이 LR을 활용하영 어디서 문제가 생겼는지 debug 할 수 있다.)

 


* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.