고성능 임베디드 시스템 설계 [FPGA, 맞춤형 회로 기반 고성능 실시간 디지털 시스템 설계와 구축]
- 원서명Architecting High-Performance Embedded Systems (ISBN 9781789955965)
- 지은이짐 레딘(Jim Ledin)
- 옮긴이정병혁, 곽종원
- ISBN : 9791161756721
- 35,000원 (eBook 28,000원)
- 2022년 09월 23일 펴냄
- 페이퍼백 | 396쪽 | 188*235mm
- 시리즈 : 임베디드 시스템
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/high-embedded-systems
요약
최신 기술의 디바이스를 설계하기 위해 고성능 임베디드 시스템 개발 과정 및 FPGA를 이용한 펌웨어 개발을 설명한다. 세 파트에서 각각 임베디드 시스템과 FPGA 개념 소개, FPGA 기능, 고성능 회로 설계, 펌웨어 개발 및 테스트를 자세히 설명한다. 이 책으로 임베디드 개발자가 고성능 임베디드 디바이스 전체 개발 과정을 알 수 있다.
이 책에서 다루는 내용
◆ 실시간 임베디드 시스템과 센서의 기본
◆ FPGA의 기능과 개발 도구 사용법
◆ 디지털 회로 설계와 KiCad를 사용한 PCB 레이아웃
◆ 저렴한 비용으로 고속 회로 보드 프로토타입 제작
◆ FPGA용 고성능 알고리듬 설계 및 개발
◆ C를 이용한 견고하고 안정적이며 효과적인 펌웨어 개발
◆ 임베디드 디바이스 하드웨어와 펌웨어의 완전한 테스트 및 디버깅
이 책의 대상 독자
소프트웨어 개발자나 하드웨어 엔지니어, 사물인터넷 개발자, 고성능 임베디드 시스템 개발 과정을 이해하고자 하는 이들을 위한 책이다. FPGA 개발의 기본 및 C나 C++로 작성된 펌웨어 개발에 관심이 있다면 도움이 될 것이다. C 언어와 디지털 회로, 전자 부품 납땜(솔더링)등의 기초를 알고 있어야 한다.
이 책의 구성
1장, ‘고성능 임베디드 시스템 설계’에서는 임베디드 시스템 구조를 이루는 요소를 소개하고 여러 임베디드 애플리케이션에서 공통적으로 사용하는 주요 시스템 기능을 소개한다.
2장, ‘세계를 감지하기’에서는 다양한 임베디드 애플리케이션에서 사용되는 센서의 이론 및 구현을 소개한다.
3장, ‘실시간 동작’에서는 임베디드 시스템이 센서나 다른 자원들로부터 측정된 입력에 대해 실시간 응답을 생성해야 할 필요성을 다룬다. 실시간 운영체제(RTOS)의 개념 및 주요 기능을 소개하며, 실시간 애플리케이션에서 멀티태스킹을 구현할 때 흔히 겪는 어려움도 알아본다.
4장, ‘FPGA 프로그램 개발 시작하기’에서는 실시간 임베디드 시스템에서 FPGA 장치의 효과적인 사용법이 무엇인지 설명한다. 표준 FPGA에 포함된 기능적 요소를 알아본다. HDL(하드웨어 명세 언어)와 블록 다이어그램 기법, C나 C++ 같은 자주 사용되는 소프트웨어 프로그래밍 언어를 포함하는 다양한 FPGA 설계 언어를 소개한다.
5장, ‘FPGA로 시스템 구현하기’에서는 FPGA를 사용한 임베디드 디바이스 설계 및 구현 과정을 깊게 살펴본다.
6장, ‘KiCad를 이용한 회로 설계하기’에서는 훌륭한 전자 설계 및 자동화 도구 오픈소스인 KiCad를 소개한다. KiCad을 통해 회로도를 사용한 회로를 설계하고 해당 인쇄 회로 기판 레이아웃을 개발한다.
7장, ‘고성능 디지털 회로 만들기’에서는 표면 실장(surface mount)과 삽입 실장(through hole) 전자부품을 사용한 프로토타입 고성능 디지털 회로 조립 관련 과정과 기법을 설명한다. 그리고 솔더링 스테이션과 확대경, 현미경, 작은 부품을 처리하기 위한 핀셋 등의 도구들을 추천한다.
8장, ‘처음으로 보드 브링업하기’에서는 이미 설계 및 구성, 청소, 검사된 인쇄 회로 기판에 전원을 공급하는 방법 즉, 악명 높은 기초 안전성 검사(스모크 테스트) 수행하는 법을 다룬다.
9장, ‘펌웨어 개발 과정’에서는 기본 동작하는 회로 보드에 아날로그-디지털 변환기(ADC)와의 통신을 포함한 FPGA 알고리듬의 남은 주요 과정들을 다루며, 마이크로 블레이즈 프로세서 펌웨어를 개발한다.
10장, ‘임베디드 시스템 테스트 및 디버깅’에서는 이제 임베디드 시스템 개발이 거의 완성됐으므로 시스템이 동작할 환경에서 완전한 테스트 방법을 설명한다. 또한 권장하는 디버깅 과정에 관한 논의와 고성능 임베디드 시스템 개발의 모범 사례를 살펴본다.
목차
목차
- 1부. 고성능 임베디드 시스템 기초
- 1장. 고성능 임베디드 시스템 설계
- 기술 요구 사항
- 임베디드 시스템 요소
- 전원
- 시간 축
- 디지털 처리
- 메모리
- 소프트웨어와 펌웨어
- 특수 회로
- 환경으로부터 입력
- 환경으로 출력
- 네트워크 통신
- 사물인터넷
- 실시간 동작
- 주기적 동작
- 이벤트 기반 동작
- 실시간 운영체제
- 임베디드 시스템에서의 FPGA
- 디지털 논리 게이트
- 플립플롭
- FPGA 요소
- FPGA 합성
- 하드웨어 설계 언어
- 임베디드 시스템 설계에서 FPGA 사용의 장점
- 자일링스 FPGA 및 개발 도구
- 요약
- 2장. 세계를 감지하기
- 기술 요구 사항
- 수동 선서, 능동 센서, 스마트 센서의 개요
- 아날로그-디지털 변환기 적용
- 임베디드 시스템이 사용하는 센서 유형
- 빛
- 온도
- 압력
- 습도
- 유체 흐름
- 힘
- 초음파
- 오디오
- 자기
- 화학
- 이온화 방사선
- 레이더
- 라이다
- 비디오와 적외선
- 관성
- GPS
- 센서와의 통신
- GPIO
- 아날로그 전압
- I2C
- SPI
- CAN 버스
- 무선
- 센서 데이터 처리
- 요약
- 3장. 실시간 동작
- 기술 요구사항
- 실시간의 의미
- 실시간 임베디드 시스템의 속성
- 다중 작업 수행하기
- 비율 단조 스케줄링
- 주요 RTOS 기능 및 과제 이해
- 뮤텍스
- 세마포어
- 큐
- 이벤트 플래그
- 타이머
- 동적 메모리 할당
- 교착상태
- 우선순위 역전
- 많이 사용되는 실시간 운영체제
- embOs
- FreeRTOS
- INTEGRITY
- Neutrino
- μc/OS-III
- VxWorks
- 요약
- 2부. 고성능 임베디드 시스템 설계 및 구축
- 4장. FPGA 프로그램 개발 시작하기
- 기술 요구사항
- 실시간 임베디드 시스템 설계에서 FPGA 사용
- 블록 램과 분산 램
- FPGA 입출력 핀과 관련 기능
- 전문 하드웨어 자원
- 프로세서 코어
- FPGA 0구현 언어
- VHDL
- Verilog
- 블록 다이어그램
- C/C++
- FPGA 개발 과정
- 시스템 요구사항 정의하기
- FPGA에 기능 할당하기
- 필요한 FPGA 기능 식별하기
- FPGA 설계 구현하기
- 첫 FPGA 프로젝트 개발
- 프로젝트 설명
- Vivado 도구 설치하기
- 프로젝트 만들기
- VHDL 소스 파일 만들기
- 로직 동작 테스트하기
- 입출력 신호 정의하기
- 최상위 VHDL 파일 만들기
- FPGA 비트스트림 합성 및 구현하기
- 비트스트림을 보드에 다운로드하기
- 비트스트림을 탑재된 플래시 메모리에 프로그램하기
- 요약
- 5장. FPGA로 시스템 구현하기
- 기술 요구사항
- FPGA 컴파일 과정
- 설계 엔트리
- 로직 합성
- 설계 최적화
- 상위 수준 합성
- 최적화와 제약사항
- FPGA 구현에 최적인 알고리듬 유형
- 고속 데이터 스트림을 처리하는 알고리듬
- 병렬 알고리듬
- 비표준 데이터 크기를 사용하는 알고리듬
- 오실로스코프 FPGA 프로젝트 시작
- 프로젝트 설명
- 기본 Vivado 프로젝트
- 요약
- 6장. KiCad를 이용한 회로 설계하기
- 기술 요구사항
- KiCad 소개
- KiCad 기본 절차
- 회로 부품 배치 및 연결
- 부품 심볼 생성
- 프로젝트 회로도 다이어그램 개발
- 텍스트 주석 추가
- 신호 레이블 추가
- 전역 레이블 추가
- 차동 신호 쌍 생성
- 외장 연결 생성
- 심볼 주석 및 전기 규칙 확인
- PCB 레이아웃 만들기
- 회로기판 프로토타입 만들기
- 요약
- 7장. 고성능 디지털 회로 만들기
- 기술 요구사항
- 회로 기판 조립 도구 및 과정
- 광학 확대
- 핀셋
- 플럭스
- 땜납
- 정전기 보호
- 수작업 납땜
- 솔더 윅
- 솔더 페이스트 애플리케이션
- 리플로우 납땜
- 조립 준비 및 부품 배치
- 리플로우 납땜과 수작업 납땜
- 리플로우 납땜
- 수작업 납땜
- 조립 후 보드 세척 및 검사
- 플럭스 제거
- 조립 후 시각적 검사
- 전기적 단락 검사
- 요약
- 3부. 실시간 펌웨어 구현 및 테스트
- 8장. 처음으로 보드 브링업하기
- 기술적 요구사항
- 전원 켜기 준비
- 기판 전원 공급
- 회로 기본 기능 검사
- 기판 전원 공급 검사
- 아날로그 증폭기 검사
- ADC 검사
- 문제 발생 시 회로 수정
- PCB 트레이스 절단
- 솔더 점퍼와 점퍼 와이어 설치
- 부품 제거
- 부품 추가
- FPGA 로직 추가 및 I/O 신호 검사
- ADC 인코더 클럭과 1KHz 보정 신호 생성
- 요약
- 요약
- 9장. 펌웨어 개발 과정
- 기술 요구사항
- FPGA 알고리듬 설계 및 구현
- 디지털 오실로스코프 시스템 개요
- 직병렬 변환기 추가
- FIFO 버퍼 추가
- AXI 버스 인터페이스 추가
- MQTT 프로토콜 추가
- 코딩 스타일
- 이름 규칙
- 코드 내 주석
- 리터럴 숫자 값 피하기
- 괄호와 들여쓰기, 세로 간격
- 가독성과 정확도에 우선순위 두기
- 어설픈 최적화 피하기
- 구현 정의된 동작 피하기
- 무조건 점프 피하기
- 식별자 범위 최소화
- 상수 항목은 상수로 표현하기
- 코드 자동 포맷팅
- 소스코드 정적 분석
- 소스코드 정적 분석의 의미
- 정적 소스 분석 도구
- 정적 코드 분석을 효과적으로 사용하기
- 가장 중요한 메시지부터 시작하기
- 분석기 출력 메시지 해결하기
- 일반적인 소스 코드 분석기 메시지
- 소스코드 버전 제어
- Git을 사용한 버전 제어
- 테스트 주도 개발
- 임베디드 시스템에 적용되는 TDD
- 요약
- 10장. 임베디드 시스템 테스트 및 디버깅
- 기술적 요구사항
- 시스템 수준 테스트 설계
- 요구사항 주도 테스트
- 수행 가능한 조건과 수행 가능하지 않은 조건에서 테스트
- 단위 테스트와 기능 테스트
- 음성 테스트와 침투 테스트
- 시뮬레이션된 환경에서 테스트
- 반복 가능한 테스트 결과 얻기
- 테스트 계획 개발
- 테스트 수행 및 결과 기록
- 수집할 데이터 식별
- 테스트 할 시스템 구성
- 테스트 절차 수행
- 테스트 결과에 관한 빠른 평가
- 필요 시 테스트 반복
- 기존 코드의 회귀 테스트
- 포괄적인 테스트 범위 보장
- 요구사항 추적성 매트릭스
- 코드 적용 범위 추적
- 어느 수준의 테스트가 충분한지 정의하는 기준 설정
- 효과적인 디버깅 기법
- 문법 혹은 컴파일 에러 및 경고 처리
- 정적 코드 분석과 단위 테스트 사용
- 문제를 명확히 정의하고 재현하기
- 입력이 올바른지 결정하기
- 시스템에 대한 가시성 확보 방법 찾기
- 이진 탐색 디버깅 과정 사용
- 기능의 일부를 임시로 제거하기
- 문제를 나타내는 가장 작은 프로그램 만들기
- 고성능 임베디드 시스템 개발의 모범사례 요약
- 테스트를 위한 설계
- 개선을 위한 여지 남기기
- 미래의 기능을 고려한 하드웨어 설계
- 현재 필요한 코드만 개발하기
- 철저한 버전 제어 유지하기
- 코드 개발 중에 단위 테스트 개발하기
- 기능이 구현되는 시점부터 시스템 수준 테스트 시작하기
- 요약