[Embedded System Design] chap1. 복습
(바로 시작하면 심장이 놀랄 수 있으니... 주저리주저리로 시작해보는...)
임베디드 교수님은 매번 배웠던 내용과 피피티 내용을 가지고 질문을 하신당.. 질문이 두려워 이런 경우 한정 미리 준비를 하는 나에게는 참으로 복습을 도와주시니 감사..하다고 할 수 있겠어요〒▽〒....
임베디드 시스템은 SoC를 듣자니 VLSI가 너무 힘들었던 기억이 있어서 살짝 피해서 조금 더 소프트웨어의 성향이 강하지 않을까 하는 마음으로 수강하게 되었다. 사실 임베디드라는 말을 되게 많이 듣는데 그 정확한 정의가 무엇인지 모르는데 혼자 찾아볼 깡은 없어서... 수업을 한 번 들어봄으로 이해라는 것을 해보자 싶었당 😋 시험은 어떻게 나올지 모를만큼 내용이 포괄적이고 개괄적이지만..! 그래도 듣기를 잘한 것 같다는 생각!
말은 이만 줄이고 진짜 복습해보자!
30분 뒤에는 출발해야하니....
[1주차]
임베디드 시스템?
: 특정한 목적을 가지고 설계된 시스템
; general purpose의 컴퓨터와는 반대되는 개념이라고 볼 수 있겠다!
; 대부분 사용할 수 있는 자원의 양과 전체 시스템의 크기에 제한이 있다!
→ 설계하는데 있어 신경쓸게 더 많아짐(최대한 효율적으로)
: the Integration of digital processing within a device that has some larger purpose beyond mere computing.
- 임베디드 시스템의 Power Source는 배터리를 이용하거나 host system에 의존한다.
- 임베디드 시스템의 Time base - primary system clock signal generated using a crystal oscillator / a Microelectromechanical system(MEMs) oscillator에 의존, small error가 발생할 수 있음.
- Digital Processing by digital processor
→ Microcontroller : highly integrated device
→ Microprocessor : one or more CPUs
→ SoC(System on Chip) : even more highly integrated device that a microcontroller ; several microcontroller + additional digital HW
- Memory : RAM for working mem / ROM(Flash memory) for storing executable program code
다음으로 이어지는 내용이 임베디드 리눅스 시스템인데.. 어떤 흐름으로 이게 이어지는지 완벽히 이해가 되지 않는다.
임베디드 시스템 중 크기가 크고 자원을 많이 필요로 하는 경우 GNU나 Linux OS 등의 도움을 받는다는 걸까?
그런 경우 real-time으로 처리할 수 있도록 하는 것과 energy 사용을 조절하는 것이 마주하게 되는 challenge가 되겠다.
(왜냐? 계산이 많아질수록 프로그램이 무거워지는데 OS까지 더하면 아주 무거워지겠지? delay를 최소화하고 정각에 시간을 딱 맞춰 시스템이 작동하도록 설계하는게 더 어려워지는거야. 프로그램이 무거울수록 한번 돌리는데 energy가 많이 드는 것도 당연..!)
임베디드 시스템의 '하드웨어 구조'
· Microcontroller-centered
: a singel integrated circuit w/ a CPU(Central Processing Unit), memory(RAM-ramdom access memery / Flash memory) and programmable I/O peripherals(serial receivers, transmitters)
: 마이크로컨트롤러에서의 비트수는 데이터 처리 단위를 말한다! 처리 단위가 커질수록 processing efficiency는 높겠으나 power hungry 문제는 있겠다!
: 과거 임베디드 시장에서는 8비트 마이크로컨트롤러를 많이 사용했었다.
: 여기에서 SoC와의 연결고리가 나오는구만! Typically designed to be inexpensive, low-resource, low-energy consuming, self-contained systems on a single integrated circuit을 SoC(Sytem-on-Chip)이라고 부른다!
Chip
먼저 칩에 대해 이야기해볼까요?
여러 종류의 칩이 있겠지만, 대표적으로 CPU를 떠올릴 수 있습니다. 그런데 아시다시피 CPU는 혼자서 무언가를 할 수가 없어요. 잘 생각해 보면 우리가 데스크톱 컴퓨터를 살 때 CPU만 사지 않습니다. CPU는 물론이고 메모리와 그래픽 카드 등 CPU와 함께 일하기 위한 여러 가지 부품들을 같이 사서 하나로 조립합니다. 각 부품들이 모여서 데스크톱이라는 시스템을 완성합니다.
System on a Chip (SoC)
그런데 여기서 드는 의문이 있습니다. 생각해 보면 CPU, 메모리, 그래픽카드 모두 반도체입니다. 그냥 하나의 반도체 칩으로 만들어버리면 안 되는 걸까요? 🤔
이러한 생각으로 프로세서(CPU) 뿐만 아니라 그에 필요한 여러 부품들을 하나의 칩으로 만든 게 시스템 온 칩, SoC입니다. 시스템을 구성하는 대부분 또는 모든 구성 요소들을 하나의 칩으로 만든 것이죠.
Advantages and Disadvantages
여러 개의 부품으로 시스템을 구성하지 않고 하나의 칩으로 만들어버리면 어떤 이익이 있을까요? 왜 요새 SoC를 많이 쓰는 걸까요?
Advantages
SoC로 시스템을 구현하게 되면 아래와 같은 장점이 있습니다.
- 저전력
- 더 높은 퍼포먼스
- 경량화
- 작은 크기
각 부품들은 서로 데이터를 주 받아야 합니다. 그런데 부품들이 따로따로 멀리 떨어져 있으면 데이터를 주고받기 위해 전기적인 신호, 즉 전류가 멀리멀리 이동해야 합니다. 이 과정에서 전력도 많이 사용하고, 데이터가 오가는 시간도 많이 듭니다. 그런데 시스템을 하나의 칩으로 만들어 버리면 어떨까요? 그냥 하나의 칩에 부품들이 모여있으니 불필요한 데이터 전송도 줄일 수 있고, 따라서 데이터가 이동하는 시간도 줄어드니 계산하는데 걸리는 시간도 줄어들겠죠? 더불어 전체 시스템을 작은 하나의 칩으로 만들어버리니 크기도 작아지고 가벼워집니다.
Disadvantages
아래와 같은 단점들도 있습니다.
첫 번째는 아무래도 개발 비용이죠. 부품 하나하나만 보더라도 설계하고 검증하는데 엄청난 노력이 필요하다는 것은 분명합니다. 그런데 저 부품들을 하나로 묶어서 전체 시스템이 잘 동작하나 확인하려면 더 어렵겠죠. 또, 면적이 큰 칩을 만들면 수율에 문제가 있을 수도 있고요. 결론적으로 시스템이 복잡해지면 개발은 더 어려워집니다.
두 번째는 발열입니다. 전력을 적게 쓰니 전체 시스템의 발열은 줄겠지만, 문제는 그 발열이 작은 하나의 칩에서 발생한다는 것입니다. SoC 설계의 중요한 고려 사항 중 하나가 발열입니다.
세 번째는 시스템 사양 변경이 안됩니다. 부품들이 따로 있을 때는 그때그때 개인의 필요에 따라 각 부품을 원하는 사양으로 구성할 수 있습니다. 그러나 SoC는 소비자가 마음에 안 든다고 부품 일부를 바꿀 수 없습니다. 그냥 주는 대로 사용해야 하는 거죠. 이렇게 시스템 사양을 마음대로 바꾸지 못한다는 게 단점일 수 있습니다.
출처 : https://techne-atelier.com/semiconductor/system-on-chip/
· Bus
: all the components must share a bus line with the processor
: 버스를 통해 모든 구성요소들이 프로세서와 연결이 되어있어야 한다. 그래야 논리대로 값을 가져오고 저장하며 처리할 수 있으니!
The RAM, flash memory, and control registers of the transceivers are all mapped in the same physical address space. The addresses where RAM and Flash Memory are mapped depend on the specific model and are usually provided in the datasheet.
이 문장은 특정 장치인 트랜시버의 내부 구조에 대해 설명하고 있습니다. 여기서 "RAM", "flash memory", 그리고 "control registers"는 트랜시버의 중요한 구성 요소들을 나타냅니다.
- "RAM": 임시 데이터를 저장하는 공간으로, 프로그램이 실행될 때 사용됩니다.
- "Flash memory": 영구적으로 데이터를 저장하는데 사용되는 메모리로, 전원이 꺼져도 데이터가 보존됩니다.
- "Control registers": 장치를 제어하기 위한 레지스터로, 특정 동작을 수행하거나 상태를 확인하는 데 사용됩니다.
이 문장은 이러한 구성 요소들이 모두 같은 물리적 주소 공간에 매핑된다는 것을 설명하고 있습니다. 즉, 이러한 요소들은 컴퓨터의 메모리 내에서 서로 다른 주소에 위치하지 않고, 같은 주소 공간에 위치합니다. 그리고 RAM과 Flash Memory가 매핑되는 구체적인 주소는 특정 모델에 따라 다르며, 이 정보는 보통 해당 장치의 데이터 시트에 제공됩니다.
트랜시버의 내부 구조를 자세히 설명하겠습니다.
- RAM (랜덤 액세스 메모리) :
- 트랜시버의 RAM은 주로 임시 데이터를 저장하는 데 사용됩니다.
- 송신기와 수신기 간에 전송되는 데이터의 일부가 이곳에 일시적으로 저장됩니다.
- 예를 들어, 송신기가 전송할 데이터를 임시로 저장하거나, 수신된 데이터를 처리하기 위해 사용될 수 있습니다.
- Flash Memory (플래시 메모리) :
- 플래시 메모리는 트랜시버에 영구적으로 데이터를 저장하는 데 사용됩니다.
- 이 메모리에는 펌웨어, 설정 데이터 또는 사용자 정의 프로그램과 같은 중요한 정보가 저장됩니다.
- 특히, 트랜시버의 작동 방식과 설정을 제어하는 데 필요한 프로그램 코드가 여기에 저장됩니다.
- Control Registers (제어 레지스터) :
- 제어 레지스터는 트랜시버의 동작을 제어하고 상태를 모니터링하기 위해 사용됩니다.
- 이 레지스터에는 트랜시버의 다양한 설정 및 구성 요소에 대한 제어 정보가 저장됩니다.
- 예를 들어, 무선 주파수, 전송 속도, 전송 파워 등의 설정이 이곳에 저장됩니다.
- 또한, 특정 이벤트의 발생 여부를 감지하고 처리하기 위한 상태 정보도 이곳에 저장됩니다.
이러한 구성 요소들은 트랜시버의 내부에서 각각 다른 역할을 수행하며, 함께 동작하여 효율적인 무선 통신을 가능하게 합니다. 또한, 이러한 구성 요소들은 트랜시버의 물리적 주소 공간에 매핑되어 있어서, 프로그래밍 및 제어에 쉽게 접근할 수 있도록 구성됩니다.
Q. RAM, Flash Memory, Control Register들이 트랜시버 내 같은 물리적 주소 공간에 매핑되어 있다는 것에 대해 자세히 설명해줘.
트랜시버 내의 RAM, Flash Memory, 그리고 Control Registers가 같은 물리적 주소 공간에 매핑되어 있다는 것은 이러한 구성 요소들이 모두 하나의 메모리 주소 체계를 공유하고 있다는 의미입니다. 이것은 트랜시버 내의 모든 메모리 및 레지스터가 단일 주소 범위 내에 위치한다는 것을 의미합니다.
이를 이해하기 위해서는 컴퓨터 아키텍처와 메모리 매핑에 대한 기본 개념이 필요합니다. 대부분의 컴퓨터 시스템에서는 메모리 주소 공간이 있으며, 이는 컴퓨터가 데이터를 읽고 쓰는 데 사용하는 주소의 범위를 나타냅니다. 이러한 주소 공간은 주로 주소 버스에 의해 제어되며, CPU 및 다른 주변 장치들이 메모리에 액세스할 때 사용됩니다.
트랜시버 내의 RAM, Flash Memory, 그리고 Control Registers가 같은 물리적 주소 공간에 매핑되어 있다는 것은 이러한 각 구성 요소들이 모두 동일한 주소 버스를 통해 액세스된다는 것을 의미합니다. 다시 말해, CPU나 다른 주변 장치들이 트랜시버의 RAM, Flash Memory, 혹은 Control Registers에 액세스할 때는 동일한 메모리 주소 체계를 사용하게 됩니다.
이러한 메모리 매핑 구조는 트랜시버의 설계와 프로그래밍을 간소화하며, 메모리 관리를 효율적으로 할 수 있도록 합니다. 또한, 모든 메모리와 레지스터가 동일한 주소 공간에 매핑되어 있기 때문에 데이터 및 제어 정보에 쉽게 접근할 수 있으며, 이는 트랜시버의 성능과 기능을 향상시키는 데 도움이 됩니다.
· Processor
: Instruction들(RAM이나 Flash Memory에 Binary Format으로 저장되어 있는)을 실행시키도록 설계된 부분
: code의 경우 firmware의 형태로 flash memory에 저장된 경우가 많다.
: instruction에 따라 메모리에 접근하여 값을 가져오고 연산하고 저장하는 과정이 수행되는 곳이다! 컴구를 떠올리자... 안 떠오르니까 이것도 도서관 가서 책 보면서 한 번 복습해야것다...ㅎㅎ
· Host machine
: 임베디드 시스템은 자립은 어려운 시스템이다. 컴파일 해주고 값 다 연결해서 바로 작동이 가능한 final code로 처리해줄 도우미가 필요한데 그 역할을 수행하는 것을 host machine이라고 함.
· Debug Interface
: debugging을 해줄 mechanism을 적어도 하나씩 가지고 있다.
임베디드 시스템 설계는 까다롭다..! General하게 설계된 processor에 비해 저사양이라 due time에 완료할 수 있을지, battery가 제한되는데 문제는 생기지 않을지 따져봐야할 것이 많은 어려운 작업이라는 것..!! 와웅
·RAM(random access memory)
: 임베디드 시스템은 resource 제약과의 씨름이다! 최적화 방법에 대한 고민이 와방 필요함요!!
: 메모리 구조가 simpler하다! (메모리 접근이 physical level에서 이루어진다 - physical address 이용)
: MMU가 없어 Address Translation을 해주지 않아도 되므로 복잡도가 줄어든다.
"메모리 접근이 physical level에서 이루어진다"는 말은 메모리에 저장된 데이터에 접근할 때, 주소(address)를 사용하여 직접적으로 해당 메모리 위치에 접근한다는 것을 의미합니다. 이때 사용되는 주소는 물리적인 메모리 주소(physical address)입니다. 즉, 컴퓨터의 실제 하드웨어 수준에서 메모리에 접근하는 것을 의미합니다. 이는 주로 운영체제나 하드웨어에서 직접적으로 처리되는 접근 방식입니다. 이에 반해, 논리적인 주소(logical address)는 프로그램이나 프로세스가 사용하는 주소로, 이는 메모리 관리 유닛(MMU) 등의 하드웨어나 운영체제에 의해 물리적인 주소로 변환되어 접근됩니다.

· Flash memory
: 임베디드 기기에서는 'one single binary file'이 필요한 모든 SW 구성요소들을 포함하고 있다.
: firmware - 정해진 코드가 하드웨어처럼 flash memory에 저장된 것 / 자유롭게 write할 수 없어 hw의 성향을 가지고 있으나 코드이므로 sw이기도 한... 요상한 놈...
: Flash memory는 메모리 공간에 고정된 주소에 directly mapped 되므로, processor가 single instruction을 Flash Memory로부터 순차적으로 fetching하고 executing 하는 것이 가능하다 → 원래는 Flash Memory에 저장된 instruction을 RAM으로 복사해온 뒤, fetching하고.. 순차적으로 executing까지 이루어졌다면, execute in place(XIP)! 복사의 과정 필요없이 임베디드 시스템에서는 Flash memory에 있는 코드에 바로 접근하는 것이 가능하다!
: Internal flash memory
- not accessible for writing
- 한 개의 single byte를 바꾸기 위해서 한 block이 read/write 되어야 하므로 cost가 많이 발생한다.
- In-Application Programming(IAP) : 펌웨어 업그레이드 기능 ; Flash Memory writing을 돕는 특별한 장치가 필요하다.
- Firmware가 저장되는 공간이므로 firmware 크기만큼 충분히 확보하는 것도 임베디드 시스템에서 중요한 문제가 되겠다.
: External flash memory
- Additional 비휘발성 메모
- SDD 같은 거
- Direct memory mapping는 불가능하기에 펌웨어 이미지를 저장하기에는 부적합하다.
- IAP에 비해 write access는 빠르다. 데이터를 저장하는 작업에 유용하게 사용될 수 있다.
· De facto standards
: Peripherals와 Microcontrollers의 소통에 필요한 기준
- Asynchronous UART-based serial communication
: Synchronous - CLK 동기화 ↔ Asynchronous - 비동기화; 상대적으로 맞춰 하는
- Serial Peripheral Interface (SPI) bus
: Serial clock line to synchronize the endpoints
: Master-Slave Protocol
: One-to-many Communication over the same three-wire bus
: Sensor devices, LCDs, flash memory controllers, network interfaces
- Inter-intergrated circuit (I2C) bus
: Interconnecting multiple microcontrollers, as well as multiple slave devices, on the same two-wire bus
- Universal Serial Bus (USB)
: designed to replace UART
: transceiver가 host mode를 지원하면, 임베디드 시스템은 USB host 기능을 수행할 수 있다. 이때, 시스템은 device driver와 application을 제공해야 한다.
IoT(Internet of Things)?
: 임베디드 장치들이 인터넷 프로토콜을 이용해 서로 communicate하는 network를 의미한다.
Reference Platform?
: 임베디드 CPU core는 RISC(reduced instruction set computer)를 선호한다.
: ARM reference design - Cortex A/R/M
Operating in real time?
- Periodic Operation
: Synchronization with the passage of time in the real world
- maintains an internal clock
- uses a system clock to trigger the execution of each processing cycle
- output that response within a prescribed time interval
- ranging from 10 to 1000 updates per second
→ "wait for timer" - polling a timer output signal or enter a low power state waiting for the timer interrupt
- Event-driven Operation
: Respond to discrete events
→ "wait for input event" - reads the input device that triggered the event, along with any other inputs that are needed
Real-time OS - 시간에 민감
* Thread in real-time operating systems
→ 관찰해야 하는 모든 대상에게 monitor를 달아놓는다면? 잘 관찰되겠지만... 낭비가 심해 할 일 없는데 돌아가는 시간 많단 말이야
→ More than one of these functions to a single processor - "Multi-Threaded Process" 번갈아가며 Task를 수행한다
: separate periodically scheduled functions that execute in a logically simultaneous manner
Logic Gates > Flip-Flops > Digital Circuits > Hardware Description Language(HDL) > FPGAs
FPGA 장점
1) Processor customization
2) Flexible Peripheral Configuration
3) High-Level Synthesis
4) HW acceleration for parallelizable application
5) Extensive debugging capabilities
6) Rapid prototyping of ASIC designs