1. FLASH 메모리 : NORF와 NANDF 의 차이
- NANDF : 대용량 가능하나 베드섹터가 존재한다. -> 기존의 A.D.C BUS와 구조가 다른 BUS를 사용한다. (관련 기업 : 도시바, 삼성전자)
- NORF : 고용량은 어렵지만 안정적이다. (관련기업 : 인텔)
2. 실습 보드 구조
3. RAM에서의 실행하기
- 대개 ROM보다 RAM에서의 실행이 더 빠르다.
-
1) memory controller를 성정하여 RAM 초기화.
2) ROM에 저장된 프로그램을 RAM에 복사한다.
3) PC(Program Counter)를 위치시켜 RAM 의 코드를 실행한다.
4) 프로그램을 압축해서 ROM에 저장하기도 한다.
-
ROM에 저장된 .Text 를 RAM에 복사하는 코드가 필요하다. (*.ld (Linker Description))
4. 타겟 시스템에 실행파일 내려보내기
- RAM Download : 개발과정에서 개발을 용이하게 하기 위해 사용. 반복적으로 다운로드해야 하므로 이에 적합한 RAM에 다운로드(ROM을 거쳐 다운로드한 뒤 RAM에 복사하면 번거로워져서)
- ROM Download : 개발 완료 후 제품 출시시. 전원이 꺼져도 보존되어야 하므로 ROM (Flash)에 다운로드.
(ROM write, Flash write)
- 임베디드 시스템 아키텍쳐
1. MCU 선정 : COTS(Commercial Off-The Shelf : 상용제품), 성능, 적절한 개발 툴, 가격
1) 업그레이드를 고려
2) 주변 장치 포함 여부
3) 아키텍쳐를 한번 결정하면 바꾸기가 쉽지 않으므로 신중히 결정.
- 성능 : 필요한 디바이스가 달려있는 프로세서를 선택하는 것이 좋다. (Ex. 네트워크 장치를 설계한다면, 네트워크 컨트롤러가 달려있는 프로세서가 더 경쟁력 있다.)
-> 프로세서 외부에 컨트롤러를 달면 여러 가지 문제 발생 (비용, 시간(시스템설계, 디버깅), 공간, 전력 등)
- 운영체제 : 프로세서에 이미 사용하고자 하는 임베디드 운영체제가 포팅되어 있다면, 개발 시간과 비용을 줄일 수 있다.
2. SoC(MCU) vs MPU(CPU)
- MCU, CPU : 컴퓨터에서 사용되는 용어
- SoC, MPU : 임베디드에서 사용되는 용어
3. 마이크로프로세서의 버스요소
1) Address Bus : 주소를 전달 (어드레스 다발)
2) Data Bus : 데이터를 전달 (데이터 전송로)
3) Control Bus : 칩선택, 입출방향, 클럭 데이터 흐름 관리 통로
- 버스의 폭은 전달하는 정보량과 비례 (Ex. 8 Line 버스는 8bit의 정보를 병렬로 전달)
- 16bit, 32bit, 64bit 시스템이란? : 한 번에 저장할 수 있는 레지스터의 폭을 의미- State에 따라 명령어(Instruction word)가 4byte or 2byte로 나누어진다. 32bit 데이터 버스에서 16개 라인만 연결되어 있으니, 만약 4byte(32bit)를 요청하면 16개의 라인을 통해 데이터를 2번 가져와야 한다는 설정을 따로 해주어야 한다. 2byte면 1번만 가져오면 된다.
4. 시스템 메모리- Volatile(휘발성) / Non-Volatile(비휘발성) Memory
1) Volatile(휘발성) : DRAM, SRAM 등
2) NV(Non-Volatile) : ROM, Flash, HDD, DVD, CD, 등
- Flash memory
1) NOR 타입 : A-D-C Bus 구조. (Intel, AMD 시리즈)
2) NAND 타입 : ALE, CLE, DATA8 pins (NOR 형과 Bus 구조가 다름.) (Samsung, Tosiba 시리즈)
5. 메모리 맵 구성 연습
- 주소 공간 : Processor의 Address Bus Line 에 의해 만들어진 참조 공간.
- 메모리 맵 : 각 디바이스들이 주소 공간에 할당 되어진 상태.
@ MCU, ROM, RAM 으로 구성된 간단한 시스템 구성 연습.
#가정 조건
- 세 부품 모두 8bit data bus.
- mcu의 주소선은 A0~A7까지 8개로 가정.
- ROM, RAM은 A0~A5까지 6개의 주소 신호 선을 갖는다고 가정. => 0x00~0x3F까지 64개의 주소 공간을 가진다.
=> 1 공간당 8bit (= 1byte) 이므로 ROm, RAM 각각 64Byte의 용량을 가진다.
가장 낮은 주소 |
가장 높은 주소 |
|
ROM |
0x00 (16진) 0y0000:0000 (2진) |
0x3F 0y0011:1111 |
RAM |
0x40 0y0100:0000 |
0x7F 0y0111:1111 |
다음 그림을 보면 이해할 수 있다. - MCU에 ROM, RAM, DEV1, DEV2 가 연결된 상태.
- DEV1, DEV2가 추가됨에 따라 MCU의 주소 신호선 A6, A7을 활용해 Chip Select 한다. (00, 01, 10, 11 네 가지 -> Address Decoder를 통해 1110, 1101, 1011, 0111 의 경우로 나눈다. -> 각 장치의 /CS에 접근하여 경우에 맞게 활성화시킨다.
6. 메모리 계층 구조 실제(구현)
- 지역성의 이점을 취하는 방식으로 구현.
1) 시간적 지역성(temporal Locality) : 특정 메모리 주소가 참조되었다면, 가까운 미래에 또다시 그 메모리 주소가 참조될 확률이 높다. (ex. 루프)
2) 공간적 지역성(spatial locality) : 특정 메모리 주소가 참조되었다면, 가까운 미래에 근접한 메로리 주소가 참조될 확률이 높다. (ex. 배열, 구조체, 클래스에 저장된 데이터 참조)
7. 캐시 시스템 : 두 가지의 지역성의 특성을 활용한 것이 캐시 시스템
- DRAM 메모리는 느리지만, 용량은 크다.(저렴하다)
- SRAM 메모리는 빠르지만, 용량이 작다.(비싸다.)
지역성을 이용해서 SRAM쪽으로 평균 접근 속도를 근접시킨다.
- 캐쉬에 저장된 데이터를 다시 사용하게 되면 히-트(Hit) : 상위 레벨(레지스터와 가까운 레벨)에서 접근하고자 하는 데이터를 찾을 수 있다.
- 접근하고자 하는 데이터가 캐쉬에 없으면 미스(miss) : 하위 레벨에서 접근하고자 하는 데이터를 찾을 수 있다. -> 프로세서는 다음 하위 레벨에서 데이터를 가져올 때까지 기다려야 한다.
8. 캐쉬의 동작원리
- 종류
1) 직접 매핑(Direct Mapping Cache) 메인 메모리(RAM)와 동일한 배열을 만들어 각각 순서에 매핑하는 것.
- 장점 : 접근이 빠르다. - 구조를 그대로 가져와서 단순하고 탐색이 쉽다.
- 단점 : 낭비가 있다.(적중률이 낮다.) - 다른 RAM에서 동일 주소에 부를 시, 이전 연관도 무시하고 덮어씌워야함.
2) 연관 매핑(Associative Mapping) 동일한 배열을 복사하지 않고 낭비 없이 캐시에 넣는다.
- 장점 : 적중률이 높다.- 지워지는 데이터가 없어서.
- 단점 : 순서가 없기에 캐시를 전부 뒤져서 tag가 같은 데이터가 있는지 확인해야 한다. 그만큼 복잡한 회로.
3) 세트 연관 매핑(Set Associative Mapping) : 두 가지 장점만 적절히 섞음. Cache를 여러 장 만든다. (마치 이차원 배열처럼) 각각의 라인들은 하나의 세트에 속해있고, 세트 번호를 통해 영역을 탐색한다. 모든 라인에 연관 매핑처럼 무작위로 위치하여있다. 라인수(ways)에 따라 n-way 연관 매핑이라고 한다.
9. 캐시 메모리의 구조
10. 메모리 보호 유닛(MPU) : Region 별로 구분하여 R/W 제어
@Partition(파티션)
- 메모리를 일정 크기의 (region(지역))으로 구분. (4KB~4GB까지)
- Region 별로 Cache attribute(캐시 분배), Access permission(접근 허용) 별도로 지정할 수 있다.
@Region
- 1개 이상의 instruction region과 data region으로 구성되어 있다.
- Cache를 enable 하기 전에 우선 enable 되어 있어야 한다.
11. 메모리 관리 유닛(MMU) : 운영체제에 가상 메모리(Virtual Memory) 기능을 제공.
- (메모리 보호(MPU기능) + 메모리 주소 변환) 하기 위해 필요하다.
- 연속적 물리 주소가 아니어도 CPU는 연속적 주소로 인식하여 메모리 확장 효과
- 모든 프로세스마다 동일 주소 사용, CPU의 프로세스 관리 용이 및 구현 단순화
- 구현
- 주소 변환을 위한 페이지 테이블 (Translation table)을 사용한다. (같은 1000번지도 partition (p1, p2, p3 등)에 따라 1:1000, 2:1000, 3:1000 이런 식으로 구분해준다.)
- 캐시와 비슷한 TLB(Translation Lookaside Buffer)(변환하기 위해 참조해야 하는 address 버퍼) 를 사용한다.
* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.
'임베디드 개발(before) > IoT 임베디드 SW 개발자 양성과정' 카테고리의 다른 글
[14일차] 취업 강의 (0) | 2020.07.30 |
---|---|
[13일차] 임베디드 프로그래밍(인터럽트) (0) | 2020.07.29 |
[11일차] 임베디드 시스템의 이해 (0) | 2020.07.27 |
[10일차] C언어 교육-(파일 개방과 입출력 함수) (0) | 2020.07.24 |
[9일차] C언어 교육-(함수 포인터, 동적 할당 메모리, 구조체 등) (1) | 2020.07.23 |