본문 바로가기

인공지능/임베디드시스템설계

엉엉.. 머리에 안들어가지만 욱여넣기..

RTOS에서.. 서로 엉키지 않기 위해서 사용하는 capabilities..?

 

1) Mutexes

1이면 free

resource를 사용하고 싶을 때 Mutex가 1인지 확인하고,

0으로 만들고 사용해 > 다 쓰고 나면 다시 1로 설정해주기!

 

2) Semaphore

비슷한데 더 많이(counting semaphore의 경우)

 

3) Queue

 

4) Event Flags

 

5) Timers

 

6) Dynamic Memory Allocation

- Heap Overflow / Heap Fragmentation

 

7) Deadlock

- 한 번에 하나의 뮤텍스만 Lock

- 동일한 순서로 뮤텍스를 잠그도록

 

8) Priority Inversion

- 작업 우선순위 역전 / 침범

 

External Memory

 

1) NOR flash - 더 안정적, 잦은 변경이 필요 없는 코드 저장용

2) NAND flash - 더 빠름, 요즘 많이 쓰임, 페이지 단위 읽고 쓰기

3) eMMC

4) HHD - 대용량 저장 장치

5) SRAM - 초기 RAM, 요즘은 internal mem으로 많이 사용됨

6) DRAM - 현재 DDR의 원형

7) SDRAM

8) DDR SDRAM

9) NVRAM

 

Words X Bits

 

Internal Memory

 

1) Register - 값을 저장, 명령어 연산을 위한 메모리 공간

2) Cache - 예측을 잘하는 게 중요, Hit Ratio !! Temporal Locality(반복문), Spatial Locality(배열) 가 있기 때문에 예측이 가능, Write Through < Write Back

 

* Page Cache : DISK에서 데이터 읽어오려면 넘 느려 -> DRAM의 일부를 DISK의 cache처럼 사용

 

Virtual Memory

 

가상의 메모리 - SW 관점의 메모리

MMU가 실제 물리적 메모리의 주소로 매핑해줌

 

1) 메모리 확장성 - 다양한 메모리를 하나의 메모리 공간에 연속적으로 매핑 가능

2) 모든 SW 프로그램에 동일한 메모리 공간 제공 가능 - 두 프로세스가 독립적인 물리적 메모리 공간을 필요로 할 때 서로의 상황을 확인하지 않고 그냥 자유롭게 하도록 하고 MMU가 각기 다른 메모리 공간을 할당해주면 돼

3) 메모리 할당과 관리 효율 - 물리적으로 연속적이지 않은 메모리라도 가상적으로는 연속적 메모리로 활용 가능

4) 메모리 보호 - 다른 프로세스의 메모리 공간 침범하는 일 막아줌

 

Memory mapped vs I/O mapped

- Mem mapped : Mem의 일부 영역을 I/O 장치 주소를 위해 사용, 명령어 동일, 임베디드 시스템

- I/O mapped : Mem 영역 <->  I/O를 위한 영역 구분, 명령어 따로, 별도의 신호 핀 필요, 복잡!!

 

DMA(Direct Memory Access)

- 프로세서의 개입으로 IO가 Mem에서 값을 읽어올수 있다고 하면 비효율적 - 그동안 프로세서 사용을 못하니까

- 메모리와 입출력 장치가 직접 데이터를 송수신 할 수 있도록 함

- 끝나면 Interrupt 발생 시켜


 

파일 시스템

: 기기의 저장장치에서 파일이나 자료를 쉽게 발견 / 접근할 수 있도록 보관 또는 조직하는 체계

 

- Read Only

- Read / Write

 

* Partitioning : 파일 시스템 포맷을 나눠 쓰는 것 / 공간 영역을 나눠쓰

 

파일 스시템 포맷

: 파일 시스템에서 사용하는 형식 / 규율

 

- 플래시 메모리를 마운팅하는데 소요되는 시간 / RAM에서 차지하는 크기와 관련 있음

 

ROOT 파일 시스템

: 가장 상위에 있는 파일 시스템 - 운영체제가 가장 먼저 로딩하는 파일 시스템

 

Mount

: 특정 파일시스템을 로딩하는 것 - 특정 파일 시스템 포맷으로 구성된 물리적인 디스크 영역을 시스템에서 사용할 수 있도록 연결하는 작업

 

Procfs

: 시스템의 정보를 확인할 수 있는 인터페이스

 

Sysfs

: 사용자에게 유용한 정보 제공을 목적 ; 주로 디바이스 정보


 

임베디드 시스템

- 특정 기능을 수행하도록 설계된 컴퓨터 시스템 ; 저전력이 주된 초점이 아니지만 저전력 기술을 필요로 하는 경우 있음

저전력 시스템

- 엥너지 사용 최적화되어 작동하도록

 

전력 최적화 및 관리 기술

센서 및 주변 기기 통합

소형 디자인

전문 하드웨어 및 소프트웨어 사용

실시간 데이터 처리

등의 유사성을 가져요....

 

Core System [4] 강의안의 초점 : 저전력을 어떻게 달성할 것인가?

- 절전 기술 관리

- 저전력 구성 요소 : 마이크로컨트롤러, 센서 및 주변 기기

- 소프트웨어석 설계

- PMIC

- 에너지 수집

 

PMIC 

: 전압 레귤레이터(안정된 전압 출력), 충전 회로(충전이 안정적으로), 과열 방지(팬을 제어/전압 조절), 에너지 수집

 

절전 기술(Power Saving Mode)

- Sleep Mode : CPU clock stop

- Deep Sleep Mode : IO clock 까지 stop

- Standby Mode : Internal Mem 내용 손실, 전압 레귤레이터 OFF

- Clock Gating : 활성화된 Component에만 Clock 공급

- Dynamic Voltage & Frequency Scaling : 작업 부하에 따라 전압과 주파수를 동적으로 조정하여 전력 소모를 최적화

 

SW 설계

- 프로세서와 메모리 간 데이터 전송 줄이기

- 인터럽트를 이용해 프로세서 깨우기

- 통신 프로토콜 이용 - 데이터 전송 빈도를 줄이기

- 저전력 라이브러리 사용

- 테스트

 

전력을 잡으면..

처리 성능, 기능성, 메모리 사용량, 통신 대역폭, 디스플레이 해상도, 구성 요소의 통합, 전원 관리 최적화, 열 관리 등과의 Trade-Off 존재한다요?

 

배터리 기술의 제한 사항

- 에너지 밀도, 수명 제한, 온도 민감성, 리튬 이온 배터리 안전 문제, 크기와 무게, 충전 시간 제한, 대체 전원

 

팁팁....

1) 회로 운영 전압 선택 - 전체 시스템의 전압을 낮추어 전력 소모 줄이기

2) 구성 요소 / IC 선택 - 전력 소모 Budget을 고려한 IC 선택하기 (전력 소모 및 운영 전압이 낮은거)

3) 무선 모듈 - 전원 켜는 시간, 활성 상태 및 비활성 상태에서의 전력 소비 고려

4) 주변 장치 전원 게이팅 - On / Off 제어가 가능한지 Check

5) 전원 공급 - 보드에 적절한 전압 공급 / 선형 레귤레이터보다 dc to dc converter

6) LED 관리

7) 디스플레이 관리

8) 누설 전류 식별 및 감소

9) 풀업 저항값 키우기

10) 마이크로컨트롤러 및 SW 관리 


 

임베디드 시스템의 주변 장치들에 대하여....

 

주변 장치와의 연결 - 하드웨어 인터페이스, 디바이스 드라이버(SW적 구성 요소), 프로토콜( 네트워크 통신에서 데이터를 교환하기 위한 규칙과 절차의 집합 ), 주변장치 컨트롤러

 

주변 장치 선택 시 고려사항 - 호환성, 시스템 요구사항, 통합 복잡성, 전력 소비, 확장성

 

주변 장치 접근 - IO mapped vs Mem mapped

- Device Register를 통해..

→ Control / Status / Data

 

주변 장치와의 '통신'

 

내부 통신 - 임베디드 디바이스 내부에서의 데이터 교환

외부 통신 - 외부 장치와의 데이터 교환

 

직렬 전송 - 단일 통신 라인 이용, 속도는 느리나.. 비용(통신 라인이 1개)의 트레이드 오프, 순차적으로 전송, 외부 통신에서 주로 사용

병렬 전송 - 여러 통신 라인 사용, 각 비트 동시 전용, 속도 빠르나 비용의 트레이드 오프, 내부 통신에서 주로 사용

 

비동기식 전송 - 송수신 간 공유하는 시간 정보 없음, 데이터만으로 순서 파악(start/stop bit), 불규칙한 데이터 전송에 적합, 5-8bit 정도의 데이터 보낼 때, 큰 블록 보내려면 parity bit 필요

동기식 전송 - 기준이 되는 시간 정보 존재, CLK같은, 블록 단위로 데이터 전송

 

비동기식에서 사용하는 START(0) / STOP(1) / ODD-EVEN PARITY BIT

보내는 데이터가 너무 길면 Timing ERR 발생 가능 (Receiver의 sampling이 조금 빠를 때 누적되면 결국 나중에 다른 값 읽어온다 !!!! )

 

에러 검출

ex) Parity Check

1차원 - 1비트 오류까지 Check 가능

2차원 - 3비트 오류까지 Check 가능

 

GPIO

- 사용자 마음대로 임의로 쓸 수 있는 pin


 

직렬통신의 프로토콜...

1) 클럭 동기화 (동기화 / 비동기화) - 심볼 동기화(8 bit 시작을 표시)

2) Bus wire (Simplex / Half - Duplex / Full - Duplex)

3) 구현 세부 사항 - 클럭 게이팅을 통해 주변 장치 활성화 / 메모리 공간의 주변 장치 영역에 매핑된 설정 레지스터 접근하여 제어

 

UART - 시리얼 통신 / 느려(임베디드 SW 개발 도구로 사용)

1) 비동기(암묵적으로 보레이트 이용해서 동기화) / 데이터 비트, 페리티 비트, 보레이트 check 필요

* start - data(LSB > MSB) - (parity) - stop

2) Half-Duplex

 

I2C - 시리얼 통신 / 저속/저전력 통신에 많이 사용

1) 동기(SCL 있음)

* SCL(클럭 라인 - 마스터 독점/슬레이브가 transaction 지연시키는 경우 제외) / SDA(데이터 라인)

2) Half-Duplex

 

* 마스터 - 슬레이브 (슬레이브가 버스 라인 공유(pull-up으로) - 하나씩만 / 마스터가 슬레이브를 선택해)

SCL - start(1)       | end(1)

SDA - start(1-0)   | end(0-1)

 

슬레이브 별로 7비트 주소(128개의 슬레이브 제어 가능)

SCL 1 SDA(1-0) : start

7bit 주소 전송 후 Write(0) / Read(1) + Ack(마스터는 SDA 1로 해두고, 슬레이브가 낮게 떨어트려서 수신 확인 - master가 읽을 때만 NACK 1로 유지)

 

SPI - 시리얼 통신 / 다양한 장치의 통신 프로토콜로 사용

1) 동기

*CPOL 씨폴 ! (기본 0 / 기본 1) / CPHA 씨파 ! (첫번째 edge / 두번째 edge) / 데이터 패킷 길이 / 비트 순서

line 4개 + 알파

1. SS(0으로 출력하여 slave 활성화) - slave 개수 만큼 !!!

2. SPI_CLK

3. SPI_MISO

4. SPI_MOSI

 

2) Full-Duplex

 

* Ack 없어서 실제 존재 여부 확인 불가능


FPGA : 디지털 집적 회로의 한 종류, 많은 수의 논리 요소들이 배치되어 있어 원하는 방식으로 연결하여 복잡한 디지털 회로 구성 가능 / 하드웨어를 프로그래밍 가능하도록 만들어, 사용자가 설계한 디지털 회로를 구현 가능함, 재프로그래밍도 가능