728x90

임베디드 시스템 소프트웨어 개발

- 소스 편집 -> 컴파일 -> 실행의 반복

- 임베디드 시스템의 성능이나 리소스가 충분하지 않음

-> 개발 기간 단축을 위해 호스크 컴퓨터에서 컴파일 후 실행파일을 임베디드 시스템에 다운로드함

 

make 유틸리티 프로그램

- 반복되는 컴파일 명령어를 간단하게 실행할수 있는 도구

 

디버깅 프로그램 GDB

- 컴파일 과정 중 디버깅 작업을 도와줌

- 소프트웨어 개발 중 가장 많인 시간 필요

- 사양 받음 -> 시스템 모델링 -> 데이터 구조 정의 -> 알고리즘 설계 -> 프로그램 코딩

-> 이후 테스트 및 디버깅이 대부분 시간 차지

 

(1) 크로스 컴파일

1) 컴파일 절차

2) 컴파일 유형

3) 툴 체인

4) ARM용 크로스 컴파일 설치

 

1) 컴파일 절차

컴파일 과정

- 소스 프로그램으로부터 목적파일 만드는 과정

 

2) 컴파일 유형

프로그램 컴파일 방식

1. 네이티브 컴파일

 - 컴파일 프로세서와 실행 프로세서가 동일한 경우

2. 크로스 컴파일

 - 컴파일 프로세서와 실행 프로세서가 다른 경우

 

임베디드 시스템에서의 컴파일

- 임베디드 시스템에선 성능이 부족하여 범용 컴퓨터에서 컴파일 하여 타겟 보드에 다운로드함 -> 크로스 컴파일

 

3) 툴 체인

- 시스템 프로그램 및 응용프로그램 개발에 사용되는 개발도구 모음

- 구성품 : 문서 편집기, 컴파일러, 어셈블러, 링커, 유틸리티 프로그램, 라이브러리

 

대표적인 임베디드 시스템 툴체인

- vi 문서 편집기, gcc 컴파일리, as 어셈블러, ld 링커

- 유틸리티 - binutils 패키지(어셈블러, 링커, 목적코드 분석 프로그램), 표준 C 라이브러리 - glibc

 

ARM 용 툴 체인

- 바이너리 유틸리티 앞에는 arm 접미사가 붙음

- objdump는 목적 파일을 분석하는 명령어

 

4) ARM용 크로스 컴파일러 설치

 

설치방법

1. pre-compiled 툴 체인 설치 

 - 압축파일 해제

 - 저장된 디렉토리를 환경변수 PATH에 등록

 - 미리 컴파일된 툴체인 -> /usr/cross-tools로 설치 위치 고정

 - 실행 파일이 저장된 디렉토리를 쉘 프로파일에 저장해서 쓰는게 편리

  * vi ~/.bash_profile

  * export PATH=/usr/cross-tools/bin:$PATH

 

2. 크로스 컴파일러 소스를 직접 호스트 컴퓨터에 설치

 - GNU 크로스 컴파일러 소스를 다운받아 호스트 컴퓨터에서 컴파일 하여 툴체인 환경 구축

 - 호스트 컴퓨터에 C 컴파일러 사전 설치

 - 소스 설치

 

크로스 컴파일러 테스트

- 정상 설치 여부 확인함

- 네이티브 컴파일러와 크로스 컴파일러를 둘다 실행해서 잘 동작되는지 확인

- 테스트 프로그램 foo.c

#include <stdio.h>

int main(){
printf("Hello Embeded System World!\n");
return 0;
}

네이티브 컴파일

#gcc -o foo-x86 fool.c

크로스 컴파일

#arm-linux-gcc -o foo-arm foo.c

 

실행 파일 타입 확인

Host #file foo-x86

Host #file foo-arm

 

타겟 보드에 다운로드 후 타겟보드에서 실행

TB #./foo-arm

 

(2) Make와 GDB

1) make 유틸리티

2) GDB 디버거

 

1) make 유틸리티

make 유틸리티 개요

- 여러개 파일로 작성된 프로그램을 효율적으로 컴파일하는 유틸리티

- 프로그램 컴파일 과정 제어, 응용 프로그램 설치위치 관리, 메뉴얼 페이지 작성에 활용

=> 프로그램 개발 프로젝트에 유용하게 사용

 

makefile

- make 유틸리티의 컴파일 절차를 정의하는 파일

- make 유틸리티가 참조하는 파일, 소스 파일과 동일한 디렉토리에 저장

- 프로그래머는 소스파일과 함께 makefile 작성

 

makefile 문법

- 의존관계 : 하나의 타겟(실행파일), 타겟과 의존관계에 있는 소스파일들

- 규칙 : 의존 관계에 있는 소스파일들로부터 타겟을 생성하는 방법 정의

 

make 명령어

- 현재 디렉토리에 저장된 makefile이나 makefile을 순차적으로 찾아서 참조

make + 타겟 이름 => make myfoo -> 타겟 = myfoo

make (타겟 미지정시) => all이라는 타겟 정의하여 사용

 

의존 관계 dependency

- 타겟과 소스파일들과의 의존 관계 정의

- 의존관계 표현 방법 : "타겟 이름"+":"+" "+"필요한 파일 이름"

- 예시

foo: boo.o doo.o -> foo를 만들기위해 boo.o, doo.o가 필요

boo.o: boo.c boo.h -> boo.o를 만들기 위해 boo.c, boo.h가 필요

doo.o: doo.c doo.h -> doo.o를 만들기 위해 doo.o, doo.h 필요

 

가상 타겟

- 실제 타겟이 아니라 make에서 사용하는 타겟 ex-all, clean

- all : 타겟으로 여러 파일 만들경우 사용

 

규칙과 주석

- 규칙 : 의존 관계에 있는 파일들로부터 타겟을 만드는 방법

- makefile내 정의시 반드시 TAB 문자로 시작

foo.o:foo.c foo.h

      gcc -c foo.c

- 주석 : #라인으로 시작

 

매크로

- makefile에서 자주사용하는 용어 재정의

- 컴파일 명령이나 옵션등을 재정의해서 사용함

- 정의 : MACRONAME=value

- 사용 : $(MACRONAME), $MACRONAME

- command-line 매크로 : make CC=gcc or make "CC = GCC"

 

내부 정의 매크로

- 사용자가 정의하는 매크로로외 make 유틸리티에서 자체 정의해둔 매크로

- $? : 현재 타겟보다 최근에 변경된 의존파일 리스트

- $@ : 현재 타겟 이름

- $< : 현재 의존파일 이름들

- $* : 접미사를 제외한 현재 의존파일 이름들

- -(minus) : 명령어 앞에 "-" 붙이면 에러발생 무시

- @ : 명령어 실행하기전에 명령어 화면표시금지

 

예시

all:myapp

CC=gcc

INSTDIR=/usr/local/bin

CFLAGS=-g -Wall



myapp:main.o foo.o boo.o

      $(CC) -o myapp main.o foo.o boo.o



main.o:main.c myhead.h

      $(CC) $(CFLAGS) -c main.c



foo.o:foo.c foohead.h

      $(CC) $(CFLAGS) -c foo.c



boo.o:boo.c boohead.h

      $(CC) $(CFLAGS) -c boo.c



clean:

    rm main.o foo.o boo.o

 

2)GDB

GDB 개요

- 텍스트 기반 GNU 디버거

- 리눅스 시스템에서 사용하는 기본 디버거

- 프로그램 소스 컴파일 시 -g 옵션 추가 -> 디버깅에 필요한 정보 생성

- 실행 명령어 : gdb 목적파일이름

 

GDB 명령어

- run 프로그램 실행

- help 명령어 도움말

- backtrace 스택 트레이스, 이전호출함수 표시

- print 함수 파라미터, 지역변수, 전역 데이터 확인

- list 현재 실행위치 주변 코드 표시

- quit GDB 종료

- break n 브레이크 포인트 설정, n번쨰 라인에서 브레이크

- clear n 브레이크 포인트 해제

- display 브레이크 포인트 도착시, 보여줄 데이터 등록

- commands n : n번브레이크 도착시 실행하는 gdb 명령어 등록

- info display : 설정된 브레이크 포인트나 브레이크포인트 도착시 보여줄 등록된 데이터에 대한 정보 표시

- cont : 실행 계속

300x250
728x90

shell

- 리눅스 운영체제의 명령어 해석기

- 해당 프로그램 실행, 리눅스 커널에 작업 요청

 

쉘 프로그래밍

- 시스템 관리작업 실시나 특정 작업을 한꺼번에 순차적으로 처리

-> 시스템에 필요한 환경변수 사전 설정

-> 응용 프로그램 실행에 필요한 설정 작업

 

(1) 쉘 개요

1) 쉘 개요

2) 리눅스 쉘

3) 프로그램 표준 스트림

4) 리눅스 쉘의 특수 기능

 

1) 쉘 개요

쉘 이란

- 사용자의 명령어를 시스템 커널에 전달 -> 명령어 해석기

- 사용자와 리눅스 사이 인터페이스 제공 프로그램

- 사용자가 shell을 통해 입력한 명령어들을 운영체제가 실행

- 리눅스는 여러 shell을 동시 사용 가능

- 커널 : 운영체제의 핵심

- X window : 사용자 그래픽 인터페이스

- ohter program : 사용자 응용프로그램

- csh, bash : 사용자가 입력한 명령어를 해석하여 필요한 작업 실행 또는 운영체제에 요청

 

유닉스 쉘

- sh Bourn shell : AT&T 의 스테판 본이 개발

- csh  C shell : 버클리 대 빌 조이가 개발

- ksh  korn shell : 데이비드 콘이 개발

- bash bourn-again shell : GNU 프로젝트 쉘

 

쉘 설정파일

- sh, ksh : ~/.profile

- csh : ~/.cshrc

- bash : ~/.bash_profile

- 쉘 사용에 필요한 각종 환경변수, 실행파일 탐색장소, 동작과 외형 등 제어하는 스크립트가 저장

 

2) 리눅스 쉘

- 리눅스 기본 쉘 : bash 

- 리눅스 기본 쉘 지정 : /bin/sh -> link -> /bin/bash 가 실행

    - 기본 쉘을 bash에서 csh로 변경시 -> link -> /bin/csh로 설정

 

bash 쉘 설정파일

- 환경변수, 쉘 명령어,, 쉘스크립트 등 포함

1. /etc/profile : 모든 bash 쉘 사용자에게 적용. 로그인 쉘에 적용

2. ~/.bash_profile : 특정 사용자에게만 적용

 

로그인 쉘

- 사용자가 로그인시 실행되는 쉘 프로그램

 

3) 프로그램 표준 스트림

표준 입력 스트림 -> 프로그램 -> 표준 출력 스트림

                                        -> 표준 에러 스트림

- 표준 이름 스트림 stdin : 키보드

- 표준 출력 스트림 stdout : 모니터. 파일 디스크립터번호 1

- 표준 에러 스트림 stderr : 모니터. 파일 디스크립터번호 2

 

4) 리눅스 쉘의 특수기능

- redirection : 프로그램 입출력 스트림 방향을 파일로 변경

    > 문자 : 표준 출력 스트림을 파일로 변경, 덮어쓰기

    < 문자 : 표준 입력 스트림을 파일로 변경

   >> 문자 : 표준 출력 스트림을 파일로 변경, 파일 끝에 추가

   << 문자 : 표준 입력 스트림을 스트림 리터럴로 변경 - 키보드 입력을 스트림으로 생성

   <<< 문자 : 표준 입력 스트림을 문자열로 변경

 

pipe

- 프로그램 출력을 다른 프로그램 입력으로 사용

- 여러 개 프로그램을 파이프로 연결하여 작업 메모리 공간 절약

- 파이프로 연결된 2개 프로그램은 데이터 스트림이 가용상태면 동시에 실행 가능.  2개의 프로그램 사이 데이터 흐름 제어

- 파이프 연산자 | 로 사용

ex) $ program1 | program2 | program3

- 프로그램1의 출력을 프로그램2 입력으로 사용. 프로그램 2의 출력을 프로그램 3의 입력으로 사용

 

filter

- 파이프와 함께 사용됨. 표준 입력스트림을 처리하여 표준 출력스트림으로 출력

- sort : 정렬하여 출력

- uniq : 중복 라인 제거

- grep : 특정 문자열 패턴을 찾아 출력

- fmt : 포맷해서 출력

- tr : 대소문자, 파일형식 변환

- sed : 스트림 편집기 사용

- awk : 문자열 패턴 검색 및 조작에 사용

 

expansion

- 특수 문자를 사용하여 문자열 패턴 확장

- 글로빙 : 와일드 카드를 사용하여 문자열 패턴 확장

- * : 해당 위치에 있는 모든 크기 문자

- ? : 해당 문자에 있는 크기가 1인 모든 문자열

- [123] : 1또는 2또는 3 한문자를 포함하는 모든 문자열

- [^123] : 1,2,3을 포함하지 않은 모든 문자열

 

추가 확장

- Brace 확장 : a{1, 2, 3} -> a1,a2,a3 한 문자를 포함하는 3개의 문자열

- Tilt 확장 : 현재 사용자의 홈 디렉토리 이름. cd 시 홈으로 이동

- 파라미터 확장 : $AAA -> 쉘 환경변수 AAA 값으로 확장

- 산술 연산 확장 : $((2+2)) -> 4

- 명령어 확장 : $(명령어) or `명령어` : $echo $(ls a?b) -> afb

- single quote 확장 : '문자열' 문자열 유지. 문자열 내 확장 문자 있어도 무시

- double quote 확장 : "문자열" : 파라미터 확장, 산술연산 확장, 명령어 확장이 포함시 확장 적용. 나머지 확장은 무시

 

(2) 쉘 스크립트

1) 쉘 스크립트 개요

2) 쉘 스크립트 작성절차

3) 쉘 스크립트 디버깅

4) 쉘 스크립트 문법

 

1) 쉘 스크립트

 쉘 스크립트

- 쉘이 실행할수 있는 명령어와 문법으로 만든 프로그램 파일

- 용도 : 사용자 입력/파일로 부터 읽은 데이터를 처리해 출력하는 작업. 반복적 작업 실행 자동화. 배치처리

- 실행 방법 : 쉘 스크립트 파일 직접 실행 or 파일 작성해서 순차적 실행

 

2) 쉘 스크립트 작성절차

- 문서 편집기 사용하여 편집

- 스크립트 파일 확장자 -> sh

- 스크립트 첫라인 첫 번째 문자 #! (쉬뱅)*       // #!이 쉬뱅. 이는 스크립트 파일임을 알려줌

- 쉬뱅 다음에 스크립트를 실행할 해석 프로그램 지정

- 실행 성공을 표시하기 위해 마지막에 exit 0 추가

 

예시

#! /bash/sh

exit 0

 

실행 방법

1. 쉘 스크립트 직접 실행 sh 파일명

2. 실행 권한 설정 : 실행 권한 부여후 ./파일명

3. 스크립트 실행 경로 설정 : export PATH=$PATH:.  -> ./파일명

 

 

3) 쉘 스크립트 디버깅

- 비교적 용이하여 별도 디버깅 툴 없음

- 에러 발생시 쉘은 에러를 포함하는 스크립트 라인번호 출력

- echo를 사용하여 변수값 출력하면서 코드 테스트

- 복잡한 에러 추적은 쉘 옵션 사용

-n : 명령어 실행하지 않고 문법만 검사

-v : 명령어 실행전 출력

-x : 실행시 자세한 인자, 명령어, 변수 출력

-u : 정의하지 않은 변수 사용시 에러 출력

-e : 오류 발생시 실행 중지

ex) sh -xv hello.sh

 

4) 쉘 스크립트 문법

변수 : 대소문자 구분, 문자열료 표현, 값 정의는 "=" 사용

- 변수값 참조시 변수명앞에 $사용

- 변수값 출력시 echo. 사용자 입력값을 변수에 할당시 "read" 명령어 사용

 

환경 변수

- 쉘 실행환경과 관련된 사전에 정의된 쉘 변수

- 쉘 스크립트 시작시 초기화

- 환경 변수 확인 -> "env" 명령어 사용

- 쉘 변수를 환경변수로 전환 : export 변수명

 

환경변수 예시

- $HOME : 홈디렉토리

- $PATH :명령어 탐색경로

- $PS1 : 명령어 프롬프트

- $IFS : 필드 구분자 리스트

- $0 : 쉘스크립트 파일이름

- $# : 쉘스크립트에 전달되는 파라미터 수

- $$ : 쉘스크립트의 process id

- $* : IFS 환경 변수의 첫번째 구분자를 사용하여 모든 파라미터를 1개의 변수로 표현

- $@ : IFS를 사용하지 않는 "$*"

Test 명령어

- 쉘에서 사용하는 조건 명령어

- "test" 또는 '[' ']' 사용

- 테스트 조건 등 검사한 후 그 결과를 참 또는 거짓값을 반환

- 아래는 foo.c 라는 파일의 존재 여부를 검사

if test -f foo.c

  then

to do something

  fi

 

if [ -f foo.c ]

  then

to do something

  fi

 

test 명령어로 사용할수 있는 조건 유형

- 문자열 비교 : string1 = string2/ -n string 문자열이 널이 아니면 참/ -z string 문자열이 널이면 참

- 수식 비교 : exp1 -eq ex2 두 표현식이 동일하면 참/ exp1 -gt exp2 exp1이 exp2보다 크면 참

- 파일 존재여부 : -d file 파일이 디렉토리인지 검사/ -e file 파일이 있으면 참 / -f file 파일이 일반파일이면 참 /

               -g file에 그룹 id가 설정시 참 / -r file 파일을 읽을수 있으면 참 / -s file 파일 크기가 0이아니면 참

 

if 문

- 실행 조건을 테스트 해서 선택적 실행

- cond 에서는 test 명령어 사용

- if문 종료시 fi로 마침

if cond

then

  task1

else

  task2

fi

 

if 문을 사용한 예시 

- if와 then을 같은 라인에서 사용시 ;(세미콜론)을 사용해서 if의 test와 then을 분리해야함

#!/bin/sh

echo "hello world ! who u are?"

read name

if [name="momo"]; then

   echo "it's U"

else

   echo "Not U"

fi

exit 0

 

for 문

- 변수 값이 지정된 범위 내에서 변수값을 바꿔가면서 반복 실행

- 문법

for var in values

do

  task

done

- 예시

#!/bin/sh

for name in foo bar boo

do

  echo $name

done

exit 0

 

while 문

- 실행 조건을 테스트해서 결과가 거짓이 될때까지 반복 실행

- 문법

while cond do

  task

done

-사용 예

#!/bin/sh

echo "Enter name"

read myname

while ["$myname"!="momo"]; do

  echo "Sorry, not myname"

  read myname

done

exit 0

 

Until 문

- 조건을 테스트해서 결과가 거짓이 될때까지 반복.

- while과 반대

- 적어도 한번은 수행

- 문법

until cond

do

   task

done

- 사용예

#!/bin/sh

echo "start!"

icnt=10

until [$icnt -eq 12]

do

  echo $icnt

  icnt=`expr $icnt+1`

done

exit 0

 

case 문

- 변수 패턴을 검사하여, 패턴에 따라 다른작업 실행

- 문법

case variable in

pattern [|pattern] ...)

statements;;

pattern [|pattern] ...)

statement;;

esac  //case의 반대로

exit 0

- 사용예

#!/bin/sh

echo "Type your color"

read mycolor

case "$mycolor" in

  green|g* ) echo "GREEN";;

  red|r* ) echo "RED";;

  * ) echo "OTHERS";;

esac

exit 0

 

List 문

- 문장 또는 명령어들을 직렬로 연결하여 사용

- AND 리스트 : 연산자 &&, 앞 명령어 성공시 뒷 명령어 실행

- OR 리스트 : 연산자 ||. 앞명령어 실패시 다음명령어 실행

- 사용 예

#!/bin/sh

...

if [ -f myfile ] && echo "hello"

then

echo "AND list"

fi

...

if [ -f myfile ] || echo "hello"

then

echo "OR list"

fi

...

exit 0

 

쉘스크립트의 함수

- 문장 그룹에 이름을 붙여 함수로 정의해 사용가능

- 함수를 사용하여 스크립트 구조화 가능

- 함수 파라미터 전달 : 쉘 스크립트 파라미터 전달과 동일.

   첫번재 파라미터 $1, 파라미터 전체 문자 $@, 파라미터 수 $# 

- 함수 리턴 값: return 명령어 사용

- 함수 호출에서 리턴값을 $?으로 참조

- 포맷

fname (){

  task

}

 

function fname{

  task

}

- 사용예

#!/bin/bash

myadd(){

  sum=$(($1+$2))

  return $sum

}

op1=10

op2=20

myadd $op1 $op2

echo "sum:$?"

exit 0

300x250
728x90

프로세서 명령어 구조

- 프로그래머 모델중 가장 중요한 요소

- 프로세서를 이해하는 출발점

- 인라인 어셈블리 프로그래밍/ 어셈블리 수준 소스 디버깅

- 프로세서 명령어 문법과 사용법을 알아야함

 

ARM 명령어 세트

- RISC 간략하고 적은수 명령어

- 고유 특징 : 모든 명령어를 조건부 명령어 -> 분기 명령어 실행 속도 향상

- 16/32비트 명령어 함께 사용 -> 프로그램 코드 크기 절약

=> 임베디드 시스템의 메모리 자원 제약 극복

 

(1) ARM 명령어 1

1) 명령어 형식

2) 조건 필드

3) 명령어 요약

4) 데이터 전송 명령어

 

1) 명령어 형식

명령어 형식

- 명령어 길이 : 32비트로 동일

- 최상위 비트에 조건부 명령 실행을 결정하는 4비트 조건 필드 -> 조건을 만족해야 명령어 실행 가능

- opcode : 명령어 동작을 정의한 코드

- Rn, Rd, Rs : 명령어 실행에 필요한 오퍼랜드를 저장한 레지스터 정의 

ARM 명령어 형식

 

2) 조건 필드 condition field

- 명령어 실행 여부를 판단하는 조건 -> 만족시 실행

- 조건 필드는 CPSR의 조건 플래그들 참고

- 조건 필드값과 명령어에 상요되는 접미사 및 조건 플래그

- ADD R0, R1, R2 : 명령어의 실행 조건이 이전 결과가 음수라는 조건인 경우

 => ADDMI R0, R1, R2가 된다.

명령어 조건 필드

 

3) 명령어 요약

명령어 요약

- ARM 명령어는 아래의 4가지로 분류 가능. ARM7TDMI 명령어 세트 예시임. 상위 버전은 추가 명령어 사용 가능

- 데이터 전송 : 메모리와 레지스터, 메모리-상태 레지스터 사이 데이터전송  LDR, LDRB ...

- 데이터 처리 : ALU와 곱셈기를 사용해 처리 - ADD, ADDC, ...

- 프로그램 제어 : 프로그램 흐름제어 - BL, BX, SWI

- 부프로세서 : 부프로세서 제어 및 부프로세서와 데이터 전송을 위한 명령어 CDP, LDC, STC, ...

 

 

4) 데이터 전송 명령어 유형

- 메모리와 데이터 사이 데이터 전송 실행

1. 단일 데이터 전송 명령여(워드 및 바이트 단위)

2. 하프워드 및 signed 데이터 전송 명령어

3. 블록 데이터 전송 명령어(여러 데이터를 차례로 전송)

4. 상태 데이터 전송명령어(상테레지스터 메모리 저장 및 복구) 

5. 데이터 스왑 명령어(메모리 저장 데이터와 레지스터 교환)

 

단일 데이터 전송 명령어

- 4바이트 워드, 1바이트 데이터를 메모리-레지스터 사이 전송

- Rn : 베이스 레지스터

- Rd : 소스 or 목적 레지스터

- Offset : 인덱스 어드레싱을 워함

- 플래그들

  I :인덱싱 오프셋 값이 상수값인지 레지스터에 저장된 값인지

  P :인덱스 어드레싱 시점을 지정. 1이면 전송전 어드레스값 계산 0이면 전숭후 계산

  W : 1인 경우 베이스 레지스터에 저장

  U : 베이스 레지스터에서 오프셋을 뺄지 더할지 결정

  B : 1이면 바이트 단위 전송

  L : 데이터 전송방향. 1일시 메모리 -> 레지스터. 0인경우 레지스터 ->메모리로 전송

어드레싱 방법 : Index 어드레싱(유효 어드레스=베이스 레지스터 + 오프셋)

1. pre indexed : 명령어 실행에 필요한 어드레스를 실행전에 계산

2. pre indexed auto update : pre indexed와 동이랗나 베이스 어드레스값 갱신

3. post indexed : 명령어 실행후 유효 어드레스를 계산하여 베이스 어드레스 갱신

4. PC relative : 현재 프로그램에서 오프셋 만큼 떨어진 메모리 장소에 저장된 데이터 엑세스

 

오프셋값 유형

- unsigned 12비트

- 레지스터 Rm 값 지정

- 레지스터 Rm 만큼 shift 방법

 

명령어 예제

1. LDR R0, [R1, R2] : (R1+R2) 어드레스에 저장된 데이터를 R0에 저장

2. LDR R0, [R1, #4]! : R1+4 어드레스에 저장된 데이터를 R0로딩후에 R1=R1+4로 갱신

3. STR R0, [R1], R2 : R0 값을 (R1+R2) 어드레스에 저장 후 R1=R1+R2로 갱신

 

하프워드 및 signed 데이터 전송 명령어

- 하프워드를 메모리와 레지스터 사이에서 전송

- 명령어 형식 : 인덱스 어드레싱에 오프셋 지정 방법에 따라 나뉨

1. 레지스터를 사용하여 오프셋 지정

2. 명령어내 8비트 상수 지정

어드레싱 방법 : 단일 데이터 전송 명령어와 동일

 

블록 데이터 전송 명령어

- 레지스터와 메모리 사이의 데이터 블록 전송

- 여러 레지스터 값을 베이스 레지스터가 지정한 어드레스를 시작 어드레스로 하는 메모리 공간에 써넣음

- 메모리 저장된 값을 차례로 읽어 레지스터들에 로딩하는 작업 실행

명령어 형식 : 레지스터 리스트 필드에 비트맵 형식으로 지정

상태 레지스터 전송 명령어

- 상태 레지스터와 범용 레지스터 사이 데이터 전송

- 상태 레지스터의 조건 플래그를 상수 값이나 레지스터 값으로 변경시 사용

- MRS 명령어 : 상태 레지스터 값 -> 범용 레지스터 값으로

- MSR 명령어 : 범용 레지스터 값 -> 상용 레지스터값

 

데이터 스왑 명령어

- 레지스터와 메모리 사이 데이터 교환

- 실행 중인동안 메모리 일긱와 쓰기 동작인 Lock 상태 - 인터럽트 금지로 정상적인 동작 보장

- 소프트웨어 세마포어 구현에 적합

 

(2) ARM 명령어 2

1) 데이터 처리 명령어

2) 프로그램 제어 명령어

3) 부 프로세서 명령어

 

1) 데이터 처리 명령어

- 산술 연산 + 논리연산 + 곱셈 연산

- 하드웨어 32비트 곱셈과 MAC 연산과 64비트 곱셉 지원

 

산술/논리 연산 명령어

- 3 오퍼랜드 명령어

- opcode : 산술/논리연산 유형 선택

- s 플래그 : 상태 레지스터 조건 코드 갱신 여부 결정.

명령어 형식
opcode 필드

 

2) 프로그램 제어 명령어

- 분기 명령어 : B, BL (분기 및 링크 레지스터를 사용한 분기)/ BX(프로세서 state 변경을 통한 분기)

- 기타 프로그램 제어 명령어 : SWI(소프트웨어 인터럽트), Undefined

 

Thumb 명령어 세트

- 자주 사용하는 32비트 ARM 명령어를 16비트로 재정의 -> 프로그램 크기 절약으로 메모리 사용량 감소

- 프로그램 작성 보다 디버깅에 주로 사용됨.

Thumb 명령어 형식

300x250
728x90

실행할 프로그램 + 데이터 -> 메모리에 저장

- 프로그램 접근 방법 이해 -> 실행 과정 이해

- 메모리 사용 -> HW측면 : 제어방식 고려, SW 측면 : 접근방식고려

- 한번에 읽을수있는 데이터 최소길이와 최대 길이 -> 데이터 구조를 정하거나 구조체 변수 선언시 필요

 

ARM 프로세서의 예외처리 절차

- 운영체제 개발, 초기화 프로그램 개발, 새 입출력장치 추가시 필요

- 임베디드 시스템에 새 디바이스 추가시 디바이스 드라이버가 제공되며 예외 처리 절차에 대한 상세한 이해 필요

 

(1) 메모리 구성

1) 메모리 저장 방식

2) 메모리 접근 방식

3) 메모리 맵

 

1) 메모리 저장방식

메모리 저장 방식

- 바이트 단위로 접근하는 메모리에 멀티 워드 데이터 저장

- 빅엔디언 방식 : MSB 부터 하위 어드레스에 저장

- 리틀 엔디언 방식 존재 : LSB 부터 하위 어드레스에 저장

 

ARM 프로세서의 메모리 저장방식

- 빅엔디언, 리틀엔디언 모두 지원

- ARM 프로세서 엔디언 선택 -> 외부 설정 핀, 시스템 설정 레지스터 사용

- ARM 11 코어의 경우 -> 2개의 외부핀, 15부 프로세서 c1 레지스터의 U,A,E 비트값으로 설정

- 컴파일 시 엔디언 적용 : -EB 빅엔디언, -EL 리틀엔디언

 

2) 메모리 접근 방식

- Word, Half-word, byte 단위 접근 가능

- 정렬된 메모리 접근 -> 워드 단위 접근 : 4배수 어드레스, 하프 워드 단위 접근 : 2의 배수접근

- 정렬되지 않은 메모리 접근 -> 하프/하프워드 단위 접근 모두 연속된 어드레스 사용.

 

3) 메모리 맵

- CPU가 메모리 접근시 사용하는 어드레스 공간 할당 방법

- 메모리 유형, 어드레스 범위, 접근제어 방식에 따라 메모리 공간 분리 사용

- 어드레스 공간 할당 방법 -> 가변 메모리맵/ 고정메모리맵(대부분 ARM프로세서 사용)

 

가변 메모리맵

- 메모리맵을 사용자가 결정

- 메모리가 단일한 어드레스 공간으로 구성

- 메모리 맵이 변경되면 어드레스 디코더 및 제어회로필요

 

고정 메모리맵

- 메모리맵을 프로세서가 결정

- 메모리 유형과 어드레스 범위가 사전에 결정

- 외부 추가회로 없이 프로세서로부터 제어신호 출력

 

(2) 예외 처리

1) 예외

2) 예외처리 절차

3) ARM에서의 예외 처리

4) 시스템 리셋

 

1) 예외

-프로세서 내부/외부에서 발생하는 작업 요청 또는 이상

- 내부 : 소프트웨어 인터럽트, 트랩

- 외부 : 인터럽트 포함

- 예외 발생시 현재 작업 중단 하여 신속히 처리

 

예외 처리기(exception handler)

- 예외 발생시 처리해야할 작업들을 정의

- 발생 시 실행죽인 작업을 중단하고 예외처리기 실행후 원상태로 복귀

- 예외 유형에 따라 우선순위 부여하여 예외처리

 

예외 처리 응답시간지연 exception latency

- 예외 발생시점서 처리기 진입할때까지 소요시간

- 시스템 실시간성 보장에 영향

 

예외 벡터 exception vector

- 예외처리기가 저장된 메모리 어드레스

 

예외 벡터 테이블 exception vector table

- 예외 벡터들을 모아놓은 테이블

- 프로그램 메모리 시작 어드레스부터 일정 크기 공간을 확보하여 저장

- 예외처리기로 분기하는 명령어들이 저장

 

예외 우선순위 priority

- 여러 예외가 동시발생시 처리 순서 결정

 

 

2) 예외처리 절차

1. 프로그램 실행중 외부에서 인터럽트 요청을 받거나 트랩이 발생

2. 현재 실행 위치를 stack에 저장.

3. 프로그램 시작위치를 예외 벡터로 변경

4-5 예외벡터에 저장된 명령어 jmp를 실행

6. 예외 처리기를 실행

7. 스택에 저장된 프로그램 시작위치를 복구하여 이전 작업을 다시수행

 

3) ARM에서의 예외처리

예외 처리기 진입 절차

1. 리턴 어드레스를 링크 레지스터에 저장

2. CPSR을 SPSR로 복사

3. CPSR 동작모드 비트 설정

4. 예외 벡터를 PC로 복사

- Thumb state에서 예외발생 시 -> Arm state로 자동변경, 인터럽트 disable 처리

 

예외 처리기로부터 복귀

- LR로부터 PC값 복사

- CPSR을 SPSR로 복구

- 예외처리 진입시 인터럽트 disable 시킨경우 disable 비트를 clear

 

예외 처리기 진입시 LR값과 리턴시 실행명령어

- ARM 프로세서 명령어 : 32/16비트 명령어 -> 예외발생시 현재 프로그램 카운터 + 오프셋값이 저장

- 예외 처리기 실행 완료 후 리턴시 오프셋 값 재조정 필요

 

ARM 예외 벡터 테이블

- 테이블 엔트리 허용공간 : 32비트 -> 예외 처리기로 분기하는 분기명령 저장

- FIQ의 경우 벡터 테이블 가장 상위에 위치 -> 분기 명령없이 직접 예외처리기 저장가능

- 우선순위 : 리셋 예외 > 소프트웨어 인터럽트 <-> undefined 예외

 

ARM 예외 벡터 테이블

- 예외 발생 -> 실행 프로그램 중단 -> 예외 처리 프로그램 실행 -> 예외 처리

- vector : 실제 프로그램 메모리 어드레스값

- Exception : ARM 프로세서에서 사용하는 예외

- Operation Mode : 예외 발생시 동작 모드

- Priority : 예외 사이의 우선순위

- FIQ는 예외벡터 테이블 맨 마지막에 위치 점프 명령어로 분기할 필요없이 빠른 인터럽트 처리가능

 

 

4) 시스템 리셋

리셋 절차

1. nRESET Low: 실행중인 명령어를 버리고 새 명령어 fetch

2. nRESET High : R14_svc, SPSR_svcd의 현재 PC값과 CPSR 값 복사

3. CPSR의 동작 모드를 슈퍼바이즈 모드(M[4:0]= 10011)로 변경 + I/F비트 set -> 추가 인터럽트 방지

4. PC를 0x0000 0000 번지로 설정하여 리셋 예외처리기 실행

 

리셋 예외처리기

1. 시스템 초기화(시스템 클록 설정, 메모리 컨트롤러 초기화, 입출력 포트 설정)

2. 스택 초기화

3. 응용 프로그램 실행 : 운영체제 사용시 커널 호출, C프로그램의 main 함수 호출

 

300x250
728x90

ARM 프로세서 동작 모드

- USER 모드 : 일반 사용자 프로그램 모드

- SYSTEM 모드 : CPSR을 완전히 읽기 쓰기 가능

- Supervisor 모드 : 운영체제를 위한 예외, 커널이나 디바이스 드라이버 처리

- FIQ 모드 : 긴급한 인터럽트 발생시 진입. 빠른 인터럽트 처리를 위한 모드

- IRQ 모드 : 일반 인터럽트 발생시 진입.

- Abort 모드 : 데이터 또는 명령어 거부시 진입

- Undefined 모드 : 패치된 명령어가 정의되지 않을시 진입

* CPSR : Current Program Status Register

 

(1) ARM 프로세서 동작모드

1) 프로그래머 모델

2) 프로세서 동작모드

3) 특권 모드

4) 예외 모드

5) 동작 모드 변경

 

1) 프로그래머 모델

프로그래머 모델이란?

- 컴퓨터 시스템 구조와 동작을 표현한 추상적 개념모델

- 프로그래머가 코드 작성위해 알아야한 최소한 프로세서에 대한 정보

- 프로그램 최적화를 위한 중요 정보

 

프로그래머 모델 구성

- 프로세서 동작모드 : 운영체제를 하드웨어적으로 지원하는 모드

- 레지스터 구성방법 : CPU가 사용가능한 효율적인 저장장소

- 메모리접근방법 : 메모리서 데이터 읽거나 쓸때 적용

- 명령어 셋 :  프로세서가 실행할수있는 명령어 셋

- 예외처리방법 : 시스템의 실사간 처리에 큰 영향을 줌. 실시간 처리 성능 예측과 성능향상에 중요

 

2) 프로세서 동작모드

 

ARM 프로세서 동작 모드

- 프로세서가 프로그램 실행시 권한 설정

- 7개 동작 모드 : 6개 특권 privileged mode + 1개 사용자 모드 user mode

   특권 모드 : 예외 처리, 시스템 자원에 접근 - system 모드, supervisor 모드, fiq 모드, irq 모드, abort 모드 등

   사용자 모드 : 사용자 프로그램 실행 상태, 시스템 자원 접근 제한. 필요시 운영체제에 요청. 동작모드 변경불가

 

3) 사용자 모드

사용자 모드

- 시스템 자원 접근 제한하여 시스템 자원 보호

- 다른 동작 모드 진입 불가

- 변경 시 소프트웨어 인터럽트로 특권모드 진입후 가능

- 사용자 모드서 레지스터 사용 : R0 ~R12 범용레지스터 R13 스택 포인터 R14 링크레지스터 R15 프로그램카운터

 

4) 특권 모드

- 예외 처리하거나 시스템 자원에 접근가능모드

- 시스템 모드 : 운영체제를 위한 모드 운영체제 커널 작업 실행. 시스템 자원 접근 가능. 예외 발생 없이 진입.

- 슈퍼바이저 모드 : 운영체제를 위한 보호모드로 시스템 리셋이 진입시 초기 동작모드. 전원 공급시 가장 먼저 진입

- IRQ 모드 : 일반 인터럽트 모드시 진입

- FIQ 모드 : 고속 인터럽트 발생시 진입. 레지스터 뱅킹 세트 확장. R8~R12까지 5개레지스터 추가하여 8개 레지스터 추가사용

- Abort 모드 : Abort 예외발생시 진입. 명령어나 데이터 메모리 접근 오류시 발생.

   명령어 접근 오류 : 명령어 pre-fetch 과정서 발생 오류

   데이터 접근 오류 : 데이터 alignment 오류, 가상 어드레스 변환오류, 메모리 도메인/ 접근권한 위반 오류 등

- Undefined 모드 : Undefined 예외 발생시 진입. 정의 되지 않은 명령어가 디코딩 시

 

5) 예외 모드

- 특권 모드 중 예외와 관련있는 동작 모드

- 시스템 모드를 제외한 5가지 -> 슈퍼바이저, IRQ, FIQ, Abort, Undefined

- 하드웨어 또는 소프트웨어 예외발생시 진입

- 동작 모드 전확 속도 향상을위해 레지스터 셋 뱅킹

- 시스템 자원에 접근

 

6) ARM 프로세서 동작 모드 설정

- ARM 프로세서 동작 모드 설정은 상태레지스터 CPSR의 동작 모드 필드 M[4:0] 사용

- 사용자 모드 : 10000

- 시스템 모드 : 11111

- 슈퍼바이저 모드 : 10011

- FIQ 모드 : 10001

- 동작 모드 값 변경은 특권 모드에서만 변경가능

 

7) 동작 모드변경

프로세서 동작 모드 변경

- 동작모드 설정 : 상테레지스터의 동작모드 필드 값 변경하여 변경 -> 특권모드서 가능

- 예외 발생하여 특권모드 진입 -> 특권모드에서 동작모드 필드 변경하여 가능

 

 

(2) 레지스터 구성

1) 레지스터 구성

2) 프로그램 상태 레지스터

 

1) 레지스터 구성

ARM 프로세서 구성

- 레지스터 : 모드 37개 32비트 레지스터로 31개 범용, 6개의 상태 레지스터. 프로세서 모드에 따라 사용가능한레지스터가 바뀜

 

특수용도 레지스터

- R13 : 스택 포인터로 각 동작 모드에 사용되는 스택 위치 정보를 저장. R13을 이용하여 스택 관리

- R14 : BL명령어로 실행. 링크 레지스터 PC 내용 복사해서 복귀 위치 저장. 

- R15 : 프로그램 카운터 

- CPSR : 현재 상태 레지스터 . 상태표시 플래그, 동작모드 설정비트, 제어비트 등 포함. SPSR(이전 CPSR 값저장)

 

Thumb state 레지스터 구성

- 레지스터 사용이 크게 재한

- R8 ~ R12 까지 범용 레지스터는 사용 불가

- ARM state처럼 범용 레지스터 뱅킹 이점을 갖지 못함

 

2) 프로그램 상태 레지스터

프로그램 상태 레지스터

- 1개의 CPSR

- 5개의 SPSR : CPSR의 뱅킹 레지스터. 예외 처리 함수에서 사용. 모드 변경시 CPSR 내용을 SPSR로 복사

- condition code flag, control bits

 

컨디션 코드 플래그 필드

- CPU 연산 결과를 반영하는 플래그 필드

- nzcv 4개의 플레그 사용

- N : 연산 결과가 음수

- Z : 연산 결과가 음수

- C : 캐리 발생, 자리빌림, 최상위 비트로 쉬프트되어 나온값

- V : 연산결과가 오버플로시 표시

 

컨트롤 비트 필트

- 인터럽트 허용 여부 결정 -> T/I비트

- 프로세서 동작모드설정 -> 모드설정비트

- 프로세서 상태 표시 -> T 비트

- 예외 발생시 변경

- 특권 모드에서 소프트웨어적으로 변경 가능

* T 비트 :  프로세서의 state 표시. 0이면 ARM state, 1이면 thumb state

* I 비트 : 인터럽트 disable 비트. 1설정시 인터럽트 불허

 

동작 모드 필드

- 동작 모드 필드 값에 따라 프로세서의 동작 모드가 결정됨

 

300x250
728x90

마이크로 프로세서 이해

- 효율적 시스템 설계 필요

- HW 측면 : 플랫폼(메인보드) 설계

- SW 측면 : 프로그램 코딩 기법 이해 - 디버깅 작업에서 필수적임

 

(1) ARM 프로세서 개요

1) ARM 프로세서

2) ARM 코어 구조

3) ARM7TDMI

4) ARM 코어 로드맵

5) ARM 프로세서 요약

 

1) ARM 프로세서

- 영국 ARM사에서 개발한 32비트 RISC 프로세서

- 1983 영국 Acorn Computer 사에서 최초 개발

- Cortex-A, R, M 시리즈로 제공

 

ARM 프로세서 특징

- 32비트 임베디드 프로세서 시장 70%이상 차지

- 저전력 고성능으로 휴대용 장치에 주로 사용

- 16비트 명령어 제공

- Java 코드 가속

- DSP 기능

- 특정 메모리 영역제안 - 보안 기능

 

ARM 코어

- ARM 프로세서의 명령어 셋을 실행할수있는 하드웨어

- ARM 구조 -> ARM 코어의하드웨어구조

- ARM 시스템 코어 = ARM 코어 + 메모리 유닛(버퍼, 캐쉬,MPU 등)

 

ARM 코어 제공 형태

- 하드 매크로 셀 Hard macro cell : 레이아웃 수준 설계, 설계 변경 불가, 코어 크기 및 전원정압 고정

- 합성가능한 코어 Synthesizeable core : HDL 사용하여 RTL 수준으로 제공, 코어크기-내부메모리 변경가능, 기능변경불가

 

HDL (Hardware Description Language)

- 논리 회로를 텍스트로 표현하는 언어

- VHDL, Verilog HDL이 표준으로 채택

 

RTL (Register Transfer Level)

- 디지털 시스템을 레지스터 사이 데이터 전송 관계로 표현하는 방식

 

2) ARM 코어 구조

 

ARM 코어 특징

-32 비트 RISC CPU 코어

- RISC 타입의 기본 구조인 로드-스토어 구조

- 빠른 인터럽트가 가능하도록 설계

- 데이터 저장방식은 빅엔디언과 리틀엔디언 선택가능

 

32비트 RISC

- 데이터 기본 처리단위 : 32비트

- 명령어 셋 구조 : RISC

- 간단하고 적은 명령어 -> 간단한 코어구조 & 빠른 명령어 실행 속도

 

Load-Store 구조

- 모든 데이터 처리는 레지스터를 대상으로 함

- 메모리 인터페이스는 load /store 명령어만 사용

- 메모리상 데이터 Load 명령어로 레지스터에 로딩 후 연산

- Store 명령어로 메모리에 저장

 

빠른 인터럽트 처리

- 빠른 인터럽트 모드 제공

- 동작 모드별 중요 레지스터 뱅킹 -> 사전에 중요 레지스터 여러 셋준비

 

메모리 저장 방식

- 아래 둘중하나 선택하여 메모리 사용 유연성을 높임

- 빅 엔디언 : 최상위 비트가 하위 어드레스에 먼저 저장 -> 모토로라 IBM, 대부분 RISC 프로세서

- 리틀 엔디언 : LSB가 하위 어드레스에 먼저 저장 -> 인텔 계열 프로세서

 

3) ARM7TDMI Core

- ARM 코어를 가장 잘 설명할수 있는 간단한 구조

- 32비트 ALU, 레지스터 뱅크, 어드레스 레지스터, 쓰기데이터 레지스터, 명령어 디코더 등으로 구성

- 폰 노이만 구조를 따름 - 프로그램 메모리와 데이터메모리가 같은 경로를 사용

- 중간에 배럴 쉬프터가 한 명령어로 ALU 연산과 쉬프트 동작 동시에 수행 가능

 

4) ARM 코어 로드맵

- 클래식 ARMCore 

- Coretex 암코어 : 응용 프로세서용, 임베디드용

- 각 프로세서 군의 특성을 파악 -> 설계 목표에 부합하는 프로세서 선정

- 최신 프로세서 구조의 발전 흐름을 알아볼 수 있음

* VFP 부동소수점 고속 연산

* Jazelie 자바 명령어 가속

 

5) ARM 프로세서 요약

- ARM 7 패밀리 ; 명령어 v4T

- 3-state pipeline

 

코어끝 접미어 의미

- 코어가 제공하는 기능

- ARM7TDMI-S 예시

T = Thumb 명령어 지원

D = 디버그 인터페이스

M = 64비트 곱셈기

I = In-circuit 애뮬레이터 인터페이스

-S = 하드웨어 기술언어로 작성된 프로세서 코어, 자동 합성도구로 합성 가능

 

ARM 9 패밀리

- v4T 명령어

- 5-state pipeline, cache 사용

- Jazelle DBX 자바 가속 제공

- Havard 구조

 

ARM9E 패밀리

- ARM9 패밀리에 신호처리 명령어를 추가

- TCM : 빈번히 사용하는 데이터 엑세스 속도 향상 -> 실시간 향상

 

ARM10 패밀리

- 6state pipeline

- 64비트 명령어 처리, 부동 벡터 처리 명령 지원 VFP

- Jazelle DBX 자바 가속 제공

 

ARM11 패밀리

- 내부는 64비트, 외부는 32비트

- SIMD, TrustZone, Thumb-2 명령어 지원

- 멀티 코어 구성

 

Cortex 패밀리 (2004년부터 발표)

- A 시리즈 : 고성능 멀티미디어용

- R 시리즈 : 실시간 제어 임베디드용

- M 시리즈 : 저가격 마이크로 컨트롤러용

 

(2) ARM 명령어 구성

1) ARM ISA

2) Thumb 명령어

3) DSP 확장 명령어

4) 기타 확장 기능

 

1) ARM ISA

ARM ISA 특징

- 32비트 고정길이 명령어 : ARM 명령어

- 16비트 고정 길이 명령어 : Thumb 명령어

- 모든 명령어들이 조건부 명령어 -> 불만족시 실행 불가

- 하나의 명령어로 Shift와 ALU 연산 동시실행

- 명령어에 자동 증가/감소 모드 제공

- 여러 레지스터들을 동시에 메모리에 저장 및 로딩

=> 최대 15번 동시 읽기/쓰기 가능

 

ARM ISA 확장

- 세로축 명령어 세트별. 가로축 명령어 확장기능

- T Thumb mode : 16비트 명령어 모드. 32비트 명령어를 16비트로 재배치 -> 메모리 사용량 줄이며, 메모리 인터페이스 부담 줄임

- DSP :  해당 명령어 셋이 DSP 제공

- Z Jazelle : 자바 하드웨어로 실행

- M Mdeia: 멀티미디어 데이터 처리를 위한 명령어 확장

- Z  Trust Zone : 보안 관련

- T2 Thumb2 : Thumb 보다 축소된 명령어 기법 사용

- 명령어 셋 v4T : 버전 4 명령어 + Thumb 명령어

- v5TE : v4TE + DSP

 

2) Thumb 명령어

Thumb 16비트 명령어

- 프로그램 코드 크기 절약

- 외부 메모리 인터페이스 최소화 -> 소비전력 절약

 

ARM 명령어와 Thumb 명령어 비교

- 약 30% 프로그램 메모리 절약

- Thumb 모드 사용시 외부 메모리 소비전력 30% 절약

 

Thumb 명령어 단점

- 조건부 명령어 사용불가

- 명령어 내 상수 표현범위가 좁음

- 사용가능한 레지스터 범위가 R0 ~ R7으로 제한

 

ARM/Thumb 연동

- ARM State : ARM 명령어를 쓸수있는상태

- Thumb state : Thumb 명령어를 실행할수있는 상태

- BX 명령어로 전환 가능

- 프로세서 동작상태는 CPSR의 T 비트로 확인

 

3) DSP 확장 명령어

- CLZ(Count Leading Zero) 명령어 : MSB에서 LSB 검사하면서, 처음으로 1이 나타나는 비트위치 검색

- Saturate 연산 명령어 : 연산 결과가 표현 범위를 초과했는지 확인. 초과시 CPSR의 Q플래그 SET

- Signed Multiplication 지원 

- Signed MAC 지원

- Double word load/store : 64비트 로드스토어를 LDRD, STRD 명령어로 표현

 

4) 확장 명령어

- Jazelle : BJX(자바 실행 전환) 명령 사용 -> 자바 바이트 코드 실행 속도 향상

- Media : SIMD 명령어로 오디오 비디오 처리 능력 향상 2~4배.

- Thumb2 : Thumb 명령어 셋 확장. 16비트 명령어보다 25% 빠름. 32비트 명령어보다 메모리 공간 절약

- TrustZone : 시스템 보안 강화

- VFP(Vector Floating Point) : 부동 소수점 연산

- NEON : 멀티미디어 데이터, 신호처리가 필요한 응용프로그램 성능 향상

300x250
728x90

임베디드 시스템 개발

- 하드웨어 개발 : 하드웨어 플랫폼 자체 개발, 설계에 적합한 상용 보드 구매 -> 프로토타입 구현 -> 상품화 시 전용보드

- 소프트웨어 개발

    운영체제 : 자체 개발 힘들 시 기존 운영체제 사용. 라이센스, 안정성 등 고려

    응용 소프트웨어 : 오픈소스 사용하여 개발 시간 단축

 

(1) 하드웨어 개발

1) 하드웨어 플랫폼

하드웨어 플랫폼 구성

- CPU 보드, IO보드

- CPU 보드 : CPU를 실장한 보드(PCB) -> Main Board, Mother Board

- IO보드 : 특정기능을 수행하는 입출력장치를 실장한 보드 -> Sub-board, Daughter board

 

2) 하드웨어 플랫폼 제작

1. 최적화 보드 자체 제작

2. 상용 보드 구매

3. 외부 전문 기업에 위탁 제작 

- 제작 비용과 시간, 성능을 고려하여 개발

 

응용 분야 최적화 보드 자체 제작

- PCB 설계 : 회로도 작성 -> 부품 배치 -> 부품 배선 -> 기반도면완성(Artwork)

         -> PCB 제작 ->부붐 실장(Mounting) -> 동작 테스트 -> 메모리 스프트웨어 로딩

        * PCB에 대한 열분석, 노이즈 분석 등으로 방열 대책, 노이즈 대책이 추가

 

3) 오픈 하드웨어 플랫폼

- 교육/개발용 오픈 아키텍처보드

- 짧은 시간 내, 제품 기능 구현 가능성 검증용으로 적합

ex) 8비트 아두이노 보드, 32비트 라즈베리파이, 32비트 갈릴레오보드

 

8비트 아두이노보드

- Atmel의 AVR 코어 기반

- 저가형 8비트 CPU 보드 -> 소규모 임베디드 시스템 구현에 적합

- 다양한 IO보드를 활용 -> 상용 시스템 구현 가능

 

32비트 라즈베리파이 보드

- 2006년 영국 라즈베리파이 재단이 개발한 싱글보드 컴퓨터

- ARM11 계열 프로세서를 사용. 운영체제는 리눅스 기반의 라즈비안

 

32비트 갈릴레오보드

- 인텔 Quark Soc X1000 프로세서 기반 마이크로 컨트롤러 보드(32비트 팬티엄급 CPU)

- 아두이노와 호환가능. 100MB 이더넷, RS-232 직렬, USB 호스트 포트 등 제공

 

(2) 소프트웨어 개발

1) 임베디드 OS

2) 실시간 OS

3) 응용프로그램 개발

4) 오픈 소스

 

1) 임베디드 OS

임베디드 OS 특성

- 범용 운영체제에 비해 작음

- 빠른 부팅, 저전력, 비디스크방식

- 다양한 프로세서 지원

- 빠른 응답속도 -> 실시간성 높음

- 메모리 기반 File System/Database 시스템 제공

- 컴포넌트 방식의 구성 - 목적 시스템에 따라 구성 변경이 가능

 

2) 실시간 OS

실시간 OS 특성

- 지정된 시간 제한 내 출력

- 정해진 시간 안에 작업 수행 가능한 환경

- 예측 가능하고 일정한 응답시간을 요구하는 응용프로그램 지원

- 하드웨어 자원사용으로 작업 시간 제한 충족

- 우선순위가 높은 작업에 많은 실행 시간 할당

 

실시간 OS 구분

- 경성 실시간 (Hard real-time) : 작업을 일정시간안에 처리해야함. 제한 시간 경과시 시스템 실패 ->비행기, 군장비

- 연성 실시간 (Soft real-time) : 제한 시간안에 실행못해도 실패로 끝나지 않음 -> 휴대폰, 라우터

- 상용 실시간

 

상용 실시간 (Commercial real-time) OS 특성

 - 선점형 멀티태스킹, POSIX(표준 유닉스 시스템 인터페이스) 지원

 - 작업 우선순위에 따라 실행

 - 시스템 콜에 의한 커널 모드와 사용자 모드 독립성 보장

 - 통합 개발환경과 디버깅 툴 제공하여 개발자들이 쉽게 개발할 수 있도록 지원

 - 고가 라이선스 비용

 

3) 응용 프로그램 개발

응용 프로그램

- 사용 목적에 따라 개발된 프로그램

- 하드웨어 플랫폼 위에서 실행 -> 특정 HW 플랫폼에 의존적

- 실행 속도 및 리소스 사용량 최소화를 위해 시스템 설계부터 코딩까지 최적화 과정을 거침

 

설계 사양 -> 설계 -> 시스템 설계 -> 최적 -> 최적설계결과

* 시스템 설계 평가의 설계 평가 요소 : 실행 속도, 하드웨어 사용량, 소비 전력

 

4) 오픈 소스

오픈 소스 소프트웨어 및 라이브러리

- 일반에 소스까지 공개된 SW/Lib

-> 설계 비용과 시간 절약

- 쉽게 검색 및 커뮤니티를 통한 기술지원

- 신뢰도와 안정성이 미흡할 수 있음

 

오픈소스의 정의

- 자유로운 재배포 -> 자유로운 배포 허용. 비용 받지 않아야함

- 소스(원시) 코드 -> 고의로 보기 힘들게 하지 않아야 함.

- 파생 저작물 -> 개작과 파생 저작물 허용. 파생 저작물은 원본 오픈소스에 적용된 라이선스 적용.

- 저작자의 소스 코드 원형 유지 : 변경된 소스 코드로 만들어진 결과 배포 허용.

- 개인이나 단체 차별 금지

- 사용분야 차별 금지

- 라이선스의 배포

- 특정 제품에만 유효한 사용 허가 금지 : 권리가 특정 소프트웨어 배포에만 한정적이여선 안됨. 

- 다른 소프트웨어에 대한 제한 금지 : 다른 라이선스를 가진 소프트웨어에 대한 제한을 포함해선 안됨

- 기술 중립적

 

Open CV

- Open Source Computer Vision

- 인텔 영상 처리 라이브러리

- 기초 ~ 고급 영상처리 알고리즘 함수로 구현되 포함됨

- 오픈 소스 규격으로 개발된 알고리즘은 라이브러리에 등록 가능

- 최적화된 C언어로 작성, 멀티코어 프로세서 장점 활용, 연산 효율성 고려하여 설계됨

 

안드로이드 플랫폼

- 모바일 디바이스를 위한 오픈 소스 소프트웨어 스택

- 언어는 JAVA, SDK와 API 사용

 

(3) HW-SW 공조설계

1) 공조설계 개요

2) 이론적 공조 설계 흐름

3) 현실적 공조 설계 흐름

 

1) 공조 설계 개요

HW-HW 공조설계

- 하드웨어, 소프트웨어가 조합된 시스템에서 기능, 성능을 목적을 달성하기 위해 협력성과 동시성을 지원하는 설계방법

 

공조설계방법

- 시스템 사양서 분석

- 실행속도가 중요한 부분은 하드웨어,  확장성 중요한부분은 소프트웨어로 구현할 부분 분할

- HW, SW 독립적으로 구현하여 통합

 

HW-SW 공조설계 문제점

- 시스템 통합과 검증에 많은 시간과 비용 소요

- HW SW 전문지식 가진 개발인력 부족

 

2) 이론적 공조 설계 흐름

 

3) 현실적 공조 설계 흐름

- 이론적 공조설계와 동일하나 설계 과정에 다소 차이

- 개략적인 개발 흐름 고려시 이런 흐름을 따름

 

300x250
728x90

임베디드 시스템

- 범용 컴퓨터와 동일한 구조

- HW/SW 구성요소 특징 분석 -> 설계 비용과 시간 등 예측 -> 최적화 작업

- HW, SW를 설계 초기 단계서 부터 같이 고려 필요

임베디드 하드웨어 구성

- Microprocess : cpu 내장하여 데이터 처리

- memory : 데이터 저장

- I/O Device :  입출력 수행하는 주변장치 peripheral로 외부 인터페이스 제공, 특정 기능 수행하는 전용 하드웨어 포함

- HW가 PCB판에 실장 -> embeded system platform

 

임베디드 소프트웨어 구성

- 초기화 코드 : 시스템 초기화 프로그램

- OS : 시스템/슬팽 프로그램 자원 관리

- 라이브러리 : 공용 프로그램 패키지

-> 응용 소프트웨어 : 임베디드 시스템 결정, 시스템 구현하고자하는 특정 용도 프로그램 

=> 메모리에 저장 => 마이크로 프로세서 cpu에서 실행

 

임베디드/범용 유사점

- 프로세서 내장 -> 동일 구조 : 프로세서, 메모리, 입출력 장치 구성

- 하드웨어 성능 향상 + 소프트웨어 유연성 -> 성능,유연 고려한 공조 설계 가능

- SW 사용 -> 시스템 설계, 시간 단축, 업그레이드 용이

 

임베디드와 범용 차이점

- 특정 분야에 최적화 -> 범용성 저하

- 최적화를 통한 성능 향상 -> 시스템 유연성 감소

 

임베디드 하드웨어

1. 마이크로프로세서

- 컴퓨터 동작에 필요한 연산과 제어를 실행하는 하드웨어 -> 단일칩

- CPU + 소용량 메모리 + 필수 입출력 장치로 구성 -> 간단한 시스템 구현 가능

- 외부에 추가적인 메모리와 입출력 장치 더해서 컴퓨터 시스템 구현

 

마이크로 프로세서 내부 CPU

- ALU, 레지스터, 제어 유닛으로 구성

- ALU : 산술 연산, 논리연산, 쉬프트 연산 수행

- 레지스터 : ALU 연산 값 일시 저장

- 제어 유닛 : CPU 회로에 필요한 제어 신호 생성, 명령어 디코더 포함

컴퓨터, 마이크로 프로세서, CPU

주요 레지스터

- 프로그램 카운터 PC : 다음에 실행할 명령어가 저장된 메모리 주소 값, PC 변경하여 프로그램 실행 흐름 제어

- 명령어 레지스터 : 메모리로부터 읽은 명령어 저장. 명령어 레지스터에 저장 -> 제어 신호 생성

- 상태 레지스터 : 연산 결과에 대한 플래그 및 제어 정보 저장, CPU 연산 결과를 검사하여 플래그 형태로 저장 

  * 연산 결과가 0일때 -> 제로 플레그, 표현 범위를 넘길때 -> 오버플로우 플래그

  * 제어정보도 포함 : 인터럽트 활성화 비트

- 스텍 포인터 : 스텍의 데이터 저장 위치 저장 -> 스텍으로 사용하는 메모리 주소값 가리킴.

 * 스텍 : 프로그램 실행에서 중요한 메모리 영역, 임시 데이터 전달이나 함수 파라미터 전달 장소로 활용

 

2. 메모리

- 프로그램과 데이터 저장하는 디바이스

- 프로그램 메모리 : 프로그램 코드 저장

- 데이터 메모리 : 프로그램 실행과 관련된 데이터 저장하는 메모리

- 온칩메모리(마이크로 프로세서 내부) + 오프칩 메모리(마이크로 프로세서 외부) = 시스템 전체 메모리

 

메모리 보관 방식에 따라 분류

- 휘발성 : 전원 중지시 저장 데이터 회손. 데이터 임시 저장 장소. SDRAM

  -> 프로그램에 사용되는 데이터 저장

- 비휘발성 : 훼손되지 않고 정보 유지. 프로그램 코드/영구적 저장하는 데이터의 저장장소. 플래시메모리

  -> 프로그램 저장. 보존되어야 할 데이터나 다음에 반영해야하는 데이터도 저장

 

임베디드 메모리

- 가격은 비싸나 크기 작고, 가볍고, 전력 적고, 소음/발열없는 플래시 메모리 주로 사용

- 설계 목표 : 메모리 접근 시작을 줄이고 용량을 키워야 함

- ALU에 가까울수록 고속 메모리, 멀어질 수록 대용량 메모리를 계층적 사용 -> 최적 메모리 설계

- 여러 프로그램 사용시 한 메모리를 공동 사용. 각 프로그램은 물리 메모리를 자신혼자쓰는것 처럼 실행

  -> 가상 메모리

- 메모리 보호작업 : 메모리 공간을 타 프로그램의 불법적 접근 방지 -> 독립적 실행과 보안성 보장

- 가상 메모리 + 메모리 보호 작업 -> 하드웨어 자원으로 운영체제의 소프트웨어에서 수행

 

3. 입출력 장치

- CPU 계산 부담을 줄이기 위해 하드웨어 주변장치라 불림

- 특정 기능을 하드웨어로 구성 -> 마이크로 프로세서 처리 성능 향상

- 마이크로 프로세서 내부에 포함(on-chip 디바이스)

- 외부에 ASIC 형태로 추가하여 (off-chip 디바이스) 마이크로 프로세서에 연결 사용

- 오브칩 구현 : 프로세서 보드와 별도로 입출력 장치 보드를 추가하여 사용

 

입출력 장치 형태

- 메모리 보호 작업 : 범용 입출력장치, 타이머, ADC, USART 등

- 부가기능 입출력 장치 : 이더넷 컨트롤러, 오디오 컨트롤러, USB 컨트롤러 등

 

4. 마이크로 프로세서 기본 기능

- 프로그램 : 특정 작업을 위한 명령들을 논리적 순서로 배열. 메모리에 저장됨.

- 프로그램 메모리에 저장된 프로그램 실행

- 결과를 데이터 메모리에 저장하거나 출력장치를 통해 외부로 출력

- 프로그램에 포함된 명령들을 정해진순서로 실행

 

명령어 실행 절차

- instruction fetch : 메모리에서 명령어를 읽어와 제어 유닛 명령 레지스터에 저장

- instruction decoding : 제어 유닛에서 명령어 디코더로 명령어를 해석하여 제어 신호를 생성

- data fetching : 명령 실행에 필요한 데이터를 데이터 메모리나 레지스터 등 데이터 저장 장소에서 가져옴

- data processing : ALU에서 데이터 처리

- result storing, write back : 결과를 레지스터나 데이터 메모리에 저장

 

마이크로 프로세서 명령 실행 흐름(기본 동작)

- 프로그램 메모리에서 명령어 읽음

- PC가 명령 주소값 가짐

- 명령어 레지스터에 명령어 저장

- 명령어 디코더가 번역

- 제어 신호 출력

- 데이터 필요 시 읽어옴

- 읽은 데이터로 ALU 연산/작업수행

- 레지스터/메모리 저장

5. 마이크로 프로세서 분류

- 데이터 처리 단위 : 4비트, 8비트, 16비트, 32비트 등

- 명령어 구조

    RISC Reduced Introduction Set Computer : 명령어 구조가 간단. 동일 작업에 간단한 여러 명령어 사용

    CISC Complext Introduction Set Computer : 명령어 구조가 복잡. 동일 작업에 복잡한 명령어 적은수 사용

- 메모리 연결 방식 : CPU와 메모리 연결 형태

     폰노이만 구조 : 프로그램과 데이터 입출력 경로가 동일

     하버드 구조 : 프로그램과 데이터 입출력 경로가 분리

- 사용 용도

   MCU Micro Controller Unit : 제어용 프로세서, 비트 단위 연산 명령어가 다양하고, 인터럽트가 빠르게 처리

   ASP Application Service Procsessor : 특정 용도에 최적화된 프로세서 -> 그래픽, 자바, 네트워크, 크립토 프로세서 등

   MPU Micro Processing Unit : 계산용 프로세서, 고성능 ALU 여러개 보유 -> 고속 계산 가능

   DSP Digital Signal Processor : 디지털 신호 처리 전용 프로세서

                                           MAC(음성/영상 데이터 처리) + FPU(부동수소수점 연산기)로 구성

   임베디드 프로세서 : 소형, 저소비 전력에 최적화 된 프로세서

 

6. 상용 마이크로 프로세서

 32 비트

  - 인텔 x86 프로세서 : 인텔 범용 컴퓨터용 프로세서. 소형화와 소비전력을 줄여 임베디드 프로세서로 사용되기도함

  - ARM 프로세서 : 임베디드 프로세서 시장 점유율이 높음. 소비전력이 작으나 높은 성능 대부분 모바일 장치서 사용

  8 비트

   - 현재 임베디드 시스템은 32비트 프로세서가 주로쓰나 8비트도 수요가 유지됨

   - PIC 프로세서, AVR 프로세서, 8051 프로세서 : 구조가 간단, 가격대비 성능 우수 -> 소형 디지털 시스템과 간단제어

   - DSP : TI사의 TMS 시리즈. 시장에서 쓰이는 대부분의 DSP 프로세서

 

임베디드 소프트웨어

1. 초기화 코드

2. 운영체제

3. 라이브러리

4. 응용 프로그램

 

1. 초기화 코드

초기화 코드

- 주로 하드웨어 초기화 작업을 실행하는 프로그램

- 스타트업 프로그램, 부트코드, 부트로더라 불림

 

초기화 코드

- 어셈블리 코드로 됨 -> 직접 응용프로그램/운영체제 실행하여 실행환경 구축

- 하드웨어와 밀접하게 관련됨. 하드웨어 설계 완료 후 HW에 적합하도록 기존 초기화 코드 수정 작업 필요

- 위치 :  임베디드 시스템 메모리 하위번지에 위치

- 기능 : 하드웨어 자가진단 및 초기화, 운영체제 구동에 필요한 시스템 파라미터 설정, 운영체제 메모리 로딩 후 실행

 

대표적인 초기화 코드

- 범용 리눅스 부트로더 : LILO, GRUB 등

- 임베디드용 부트로더 : blob, U-Boot, Bootlr, ARMBoot 등

 

2. 운영 체제

임베디드 소프트웨어 구현 방법

- 순차적 프로그램 : 단순하고 순차적 기능 구현 -> 초기 임베디드 시스템에 많이 쓰임

- 운영체제 : 멀티태스킹, 멀티프로그램실행, 네트워크, 멀티미디어 제어

 

초기 임베디드 시스템 : 순차적 프로그램 방식 구현, 입출력 장치의 이벤트 처리 요청 ->예외처리로 실시간 처리

임베디드 발전 : 내부기능, 사용자외부와 인터페이스 다양/복잡 -> 순차적 처리 방법 한계 -> 운영체제 사용

운영체제 기반

- 다양한 입출력 장치 수용, 효율적 관리

- 시스템 동작 안정성 향상

- 실시간 요구 충족

- 개발 시간 단축 및 편한 유지보수

 

무료 : 원가 절감 -> 리눅스 : 실시간 성 향상 노력, 안전 보안 지속 개선 -> 많이 활용

상용 : 실시간성과 원활한 기술 지원

자체 개발 : 회사에서 자체 필요로 개발

 

3. 라이브러리

- 응용 프로그램들에서 공통적으로 사용되는 프로그램 모듈들의 집합

- 멀티미디어, 그래픽 처리, 데이터베이스, 웹서비스, 사용자 인터페이스 - 응용프로그램 개발에 많이 쓰임

-> 운영체제와 응용프로그램 사이에있어 미들웨어 라고도 함.

- 잘 정의된 프로그램을 재사용하여 개발시간과 비용 절약 가능. 오픈소스로 공개됨

 

4. 응용 프로그램

- 시스템 구체적인 구닝을 구현한 프로그램

- 시스템 사용 목적에 맞춰 최적화 되어야 함

- 적절한 라이브러리 선택하여 개발시간과 비용 절약필요

300x250
728x90

임베디드 시스템

- 특정 용도에 최적화 된 컴퓨터 시스템

- 전기/전자 회로 + 마이크로 프로세서

 

임베디드 시스템 특징

- 성능 및 자원에 높은 효율 > 범용 시스템

- 저비용, 고성능 > 전용 하드웨어/범용 시스템

 

임베디드 장점

- 하드웨어로 속도 향상

- 소프트웨어로 유연 -> 기능 블럭들 구현, 변경, 수정 용이 -> 개발 단축, 비용 절약

- 처리 작업이 큰건 하드웨어로 구현 -> 시간 절약, 성능 향상

 

임베디드 단점

- 하드웨어/소프트웨어 혼재 -> 에러 소재 파악 힘듬 ->디버깅힘듬

- 설계 공간 확대 -> 다양한 설계가능 -> 최적 설계 예측 힘듬

- 하드웨어/소프트웨어 공조 설계가 가능한 전문 인력 부족

 

임베디드 시스템 구조

- 하드웨어 : CPU, 메모리, 입출력

- 소프트웨어 : 응용 소프트웨어, 라이브러리, 운영체제

임베디드 시스템 구조

임베디드와 범용 컴퓨터 차이

- 동일한 구성 <-> 목적에 따라 최적화

- 동일한 범용 cpu 사용 하나 사용 목적에 따라 설계 구조 변경

* 간단한 시스템은 소프트웨어 만으로 구현 가능

 

응용 분야

- 가전/개인단말 장비

- 사무 자동화 장비

- 공장 자동화 장비

- 네트워크 장비

- 군/항공우주/운송 장비

 

 

설계 특성

 

1. 설계 목표

- 고성능/ 실시간 처리/ 최적화/ 유연성/ 신뢰 및 안정성 보장/ 소비 전력 최소/ 경쟁력 / 환경 친화

 

2. 고려 요소

초기 단계

- 프로세서 : 고성능, 저가

- 운영체제 : 실시간 os/비실시간os/ 순차형 프로그램, 메모리 사용량  + 정책

설계 중 항상 고려

- HW 자원 활용도 향상 : 최소한 자원, 최적화 코딩 요구

- 시스템 유연성 확보 : 업그레이드 기능 확장 고려, hw/sw 설계 필요

- 신뢰/보안 향상 : 불법적 접근 방지 -> 리버스 엔지니어링 방지

 

3. 구현 방법

- HW-SW 공조설계 방식

- HW 구현 방법 

 1. 범용 컴퓨터 사용 -> SW만으로 구현 (os없이 펌웨어만으로도 구현 가능)

 2. 전용 CPU 보드 설계 + ASSP( 표준화 입출력 디바이스) + 전용 IC 개발)

  - 설계 겅험, 비용 시간 큼 -> 최고 성능

 3. SoC + ASSP

  - SoC 안에 CPU와 ASIC을 구현할 수 있는 프로그래머블 디바이스

  - 신뢰성 큼, 소비전력 적으나 설게비용 증가 

  - SoC에 포함할수없는 부분은 외부에 별도 ASSP 추가

 

SW 구현 방법

 1. 펌웨어 기반

  - 하드웨어 관리 간단

  - 프로그램이 동시 여러 작업 안함

  - 순차적 실행시 OS 없이 간단한 프로그램으로 완성

 2. 운영체제 기반

  - 하드웨어 자원 관리 복잡

  - 멀티태스킹 필요 한 경우

 

HW-SW 공조 설계

  -임베디드 시스템 -> 기능 블록별로 분리 -> 하드웨어 or 소프트웨어

  - 실행 속도, 메모리, 전력, 등 고려하여 구현방법 결정

 - 하드웨어 : 이미 판매하는 ASSP 사서쓰거나, 없으면 ASIC 직접 구현

 - 프로그램 언어, 프로세서 컴파일러, 운영체제 특성과 디버깅 비용을 고려하여 최적화 프로그래밍 구현

 

운영체제로 개발

 - 설계 기능 복잡, 순차 방식 한계, 동시 실행 필요 시

 - 32비트급 프로세서로 임베디드 시스템 구현시 운영체제 사용

 - 직접 개발, 상용/공개 운영체제 사용 

 

SoC (system on chip)으로 구현

- 마이크로 프로세서, 메모리, 주변장치 등을 하나의 칩으로 구현 IC

- 단일 칩 임베디드 시스템

-> 성능 향상, 소비전력 감소, 외부 잡음 차단, 크기 축소

<-> 많은 설계경험과 비용, 시간이 요구, 디버깅 힘듬

 

4. 설계 공간

- 설계 사양에 맞는 설계들이 형성되는 공간 

- 비용 함수 : 각 설계 사례를 평가하는 방법 -> 평가요소 시스템크기, 성능, 소비전력 x 평가 요소 별 가중치 = 설계 비용

- 설계 공간 탐색 : 비용함수를 최소화 하는 최적 설계 찾아가는 과정

- 설계 사양 -> 설계(+설계 경험/ 능력) -> 설계 평가(비용함수) -> 최적(아닐 시 재 설계) -> 최적 설계 결과

300x250

+ Recent posts