CPU의이해 CPU 란무엇인가? dolicom@naver dolicom@naver.com http://blog.naver.com/dolicom
CPU 란무엇인가? 프로그램에따라실행되는상태제어기 이미작성된프로그램에의해작동 전자장치제어의두뇌 전자의디지털기술을이용 수학적처리를기반으로작동 (2 진수 ) IT 및정보처리의핵심
인텔 CPU 와무어 (Moore) 의법칙
CPU 의진화- 숫자의표현 4 비트 4040 간단한장치제어 ( 전화기, ) 8 비트 8080, 8051 16 비트 8086, 80286(PC) 32 비트 - 80386 64비트 최근 64비트 DSP CPU 고속수학계산을필요한장치 TI사의 TMS32시리즈 Floating-Point ( 실수자료형레지스터 & ALU)
CPU 발전 인텔 4004 4 비트 8008 8080 모토롤라 자일로그 모스텍 6800 8비트 8085 Z80 6502 6809 80186 8086 Z8000 6510 68000 8088 16 비트 80286 80386 Z80000 68020 80486 80860 RISC 68030 32 비트 Pentium4 68040 88000 RISC Core2 IA64 64 비트
CPU 의진화 2 * 임베디드 RISC CISC 4 비트 MOS technology intel 4004 4040 (intel) Zilog motorola 8 비트 6502 (MOS Technology) Apple-II 8008 8080 8085 Z80 (Zilog) 6800 (Motorola) 8051*(Intel) AVR* (Atmel) 16 비트 8086 8088(IBM-PC/XT) 80286(IBM PC/AT) (intel) 68000(16/32) (Motorola) 32비트 80386 80486 Pentium (intel,amd) 68020 68030 (MAC) 68040 (Motorola) PowerPC(IBM) MPC860(Motorola)* ARM* AVR32*
Intel Pentium4 2005년 1.69억TR 3.73GHz 90nm공정 2MB SRAM
PC (Personal Compter) 8 비트 Apple-II 6502 Mac 16/32 비트 680x0 계열 (Motorola) IBM-PC(XT) 8088 IBM-PC(AT) 80286 IBM-PC 80486 16 비트 IA-32 : 32 비트 32 비트 Mac PowerPC (IBM) IBM-PC PentiumPro,2,3,4 IA-32 : 32 비트 MMX( 멀티메디어,3D 그래픽 ) Mac (Intel) IBM-PC Pentium(D,EM64T) IBM-PC Core2 64비트 -AMD64 -Pentium4(EM64T) IA-64 Dual CPU -Pentium D(Pentium4x2) -Core2 -AMD64 X2
Apple-II / MAC Apple-II (1977/June 6) MOS Technology 6502, 1MHz 4KB RAM 메모리 BASIC ( 인터프리터-ROM에존재 ) Video-24 라인 /40 컬럼 Monochrome, 대문자 text NTSC 호환 1978- External 5¼ floppy disk Apple DOS Diskette drive Apple-II Plus (1979) 48KB RAM, 12KB ROM, 4KB IO Language Card UCSD Pascal, FORTAN 77
IBM-PC IBM-PC /XT (1983) Intel 8088, 4.77MHz 128KB 메모리 360KB double-sided 5 ¼ floppy disk Socket 8087(FPU) coprocessor IBM-PC / AT (1984) Intel 80288, 8MHz 256KB ~ 16MB 12MB5¼ 1.2MB floppy disk 20MB Hard Disk PC-DOS3 DOS3.0 Enhanced Graphics Adapter 640x350(16C/64p)
CISC 와 RISC CISC Complex Instruction Set Computer x86, 68000, VAX 반 RISC 의의미가애매해짐 486 -> >Pipelined dcisc 더작아지는 mirco-operations( 명령을실행을위한 CPU 내의코드 ) RISC : 명령축소 Reduced Instruction Set Computer 고속실행을목적으로 AVR PIC ARM PowerPC SPARC AVR,PIC, ARM, PowerPC, SPARC 최근들어 2 개의경계가불분명해짐
CPU 의동작요소 CPU 메모리 (ROM,RAM) 특정목적지원프로그램 IO 장치 ( 입출력장치, 통신장치 ) KEYPAD LCD Ethernet (LAN) USB 기타
CPU 시스템구조 PC 장치 UART 통신 8051 Timer Serial 8051 core 레지스터 ALU FLAG ROM/FLASH RAM IO 모듈 키패드 LCD USB CPU에서동작하는모든프로그램은반드시메모리에적제되어있어야한다. ROM이나 RAM 중어느한곳에있어도상관없다.
메모리종류 ROM Mask ROM : 생산시고정된데이터로칩이만들어진다. 따라서롬라이터로 쓰기가불가능하다. 주로대량생산에사용. PROM (Programmable ROM): 생산시데이터로없이만들어지고, 롬라이터로쓰기하면변경불가능하다. EPROM (Erasable PROM): 롬라이터로데이터 ( 프로그램 ) 을쓰고자외선으로지워재프로그램가능. EEPROM (Electrically EPROM): 동작중쓰기가가능하여, 시스템의특정정보를담는것이주목적이다. (RAM에비해쓰기속도저하, 쓰기복잡 ) RAM SRAM(Static RAM): 쓰기와읽기가가능. 전기가공급되면데이터유지 DRAM (Dynamic RAM): 쓰기와읽기가가능. 전기가공급되어도일정시간이지나면데이터가사라짐. 주기적리프레쉬 (refresh) 가필요. FLASH 읽기와쓰기가가능하고전원이없어도데이터가사라지지않음. RAM 에비해쓰기가복잡. CPU 에의한쓰기프로그램이필요. 최근임베디드시스템은거의이메모리사용. PC의롬바이어스도이메모리사용. ( 초기 PC PROM/EPROM) 바이러스
EPROM 소켓을이용장착 데이터를삭제할때자외선을이용한다. 자외선이통과하도록창이열려있다. -데이터가지워지면모두 0xFF 됨 데이터를쓸때는별도의장치를이용한다. 따라서소켓을쓰는것이일반적
DRAM 메모리종류 진화 DRAM 의분류 : SRAM 보다구조가단순하고고밀도, 가격저렴. DRAM : 초기의메모리. SDRAM SDRAM :DRAM보다엑세스속도증가를위해클럭을사용하여읽고쓰는시간을동기화한다. 두클럭에데이터를한번억세스한다. DDR SDRAM : SDRAM 보다속도를높이기위해한클럭동안엑세스한다. DDR2 SDRAM : 클럭의속도를 2배높여억세스한다.
CPU 시스템구성요소 I-I I Timer 전자적논리회로에의해하드웨어적으로구현되며정확한클럭과시간을얻을수있다. CPU 프로그램과연결되어수백 us ~ 수백msec 처리가능. 하드웨어적고속클럭처리가가능. 하드웨어적처리에의한클럭. UART(RS-232C) 시리얼통신을위한모듈로컴퓨터간통신을위해컴퓨터초기부터구현되어온방식이다. 모뎀과연결되어전화선을통한원거리통신가능. CPU의프로그램을전송하거나실행되는상황을 PC로전송- debug 툴로도사용.
CPU 시스템구성요소 I-2 SPI 장치 ( 칩 ) 사이의통신을위해시리얼통신방식. 데이터신호와함께전송을시점을알리는클럭이전송. UART 보다고속처리가가능. 시스템내의칩과칩사이, 모듈과모듈사이의통신에사용 USB 시리얼통신중가장최근에개발된방식. 전송속도가높아장치간의많은데이터전송하는데유리. 신호선과함께전원도공급되어간단한장치개발에유리. CPU의프로그램을전송하거나실행되는상황을 PC로전송- debug 툴로도사용.
CPU 시스템구성요소 II Keypad : 장치의제어를위한가장일반적인입력장치. 핸드폰의번호키. 컴퓨터의키보드 LCD : 시스템의상태를표시하는출력장치 STN : 흑백의무칼라표시장치 문자형 : 주어진폰트의내용을출력한다. ASCII 코드출력. 그래픽형 : 픽셀단위의그래픽처리가가능한표시장치 TFT-LCD : 칼라표시를지원하면그래픽처리가가능 LAN(Ethernet) 근거리통신망을구성하여컴퓨터간의통신 가장대표적통신망
CPU 와임베디드 CPU 와보조모듈의물리적구성 CPU의종류에따라많은차이가있다. CPU와각모듈을하나의칩으로만든다. 장치의크기및이동성등을고려하여구성 장치의특성에맞는구성 CPU을찾아개발. MCU (Micro Controller Unit) CPU와기본적인모듈을한칩에구현 보통장치제어용 CPU 을말함. 임베디드 MCU 와비슷한개념으로 CPU 와모듈을모아하나의칩으로구현 최근이말은 OS 와결합되어구성되는의미가강함 Windows CE, linux 포팅
MCU 와임베디드 CPU 의형상과칩의구성 CPU 의실행속도향상 칩의크기및파워 ( 휴대장치, 장치제어 )
MCU 와임베디드 8051 과 MCU 형상
8051 의구성 - Intel 외부인터럽트 Interrupt Control ROM 프로그램 RAM Timer/Counter Timer 1 Timer 0 CPU OSC Bus Control 4 I/O 포트 Serial Port P0 P1 P2 P3 TxD RxD Address/Data
AT80C51 www.atmel.com
AT89C51 - ATMEL
MCU 와임베디드 ARM 과임베디드형상
ARM9 인텔 PXA255
ARM7- 삼성반도체 S3C44B0X
ARM9- 삼성반도체 S3C2410
CPU 란무엇인가? CPU 란논리연산을하는전자기계 프로그램에동작하는상태머신
CPU 코어 PC:Program Counter SP:Stack Pointer 제어신호데이터흐름 메모리 명령해석및명령동작제어부 메모리제어 PC SP DPTR data bus... A B R0,R1, R7 FLAG ALU 사칙연산논리연산쉬프트
CPU 의기본구성 레지스터 : CPU 가데이터를처리를위한저장 ALU : 수학적계산을하는부분 사칙연산, 논리연산, 쉬프트연산 FLAG : ALU 계산결과 flag 부분이저장 명령해석및명령동작제어부 기계어코드를읽고명령을해석하여실행
명령어실행-Machine Cycle 한명령이실행되기까지의전체시간 Fetch -기계어명령읽기 Decode - 기계어기능해석 Execute - 실행 Store - 메모리에저장 ADD A,R0
프로그램작성 C 또는어셈블리 ( 기계어 ) 로작성 int cval; void Calc() { int val; val = 0; val += 2; cval = val; 컴파일러 기계어 74 00 25 02 F5 A0 어셈블러 Calc: MOV A,00H ADD A,02H MOV 0A0,A... } ROM에넣기 ( 시스템에따라 ROM, FLASH, RAM)
CPU 의동작 Step 1 프로그램 00 01 02 03 74 00 25 02 주소기계어 어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A 0006 02 00 57 JMP MAIN 0009 02...... data bus... A B... FLAG ALU
Step 2 fetch 주소기계어어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 MOV 0A0,A 기계어명령읽기 00 01 02 03 74 00 25 02 0000 PC 명령어버퍼 74 명령어해석 처음 00번지기계어를읽는다. 명령어 74 는다음데이터를 A레지스터로옮기라는명령으로규정 -> 해석 data bus... A B... FLAG ALU
주소기계어어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 3 다음데이터읽기 00 01 02 03 74 00 0001 PC 25 다음 1 번지의데이터 00 을 02 명령어버퍼읽어 A레지스터에넣는다. 명령한개가종료됨. 74 명령어해석 data bus... A 00 B... FLAG ALU
주소기계어어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 MOV 0A0,A Step 4 fetch 00 01 02 03 74 00 25 02 처음 02번지기계어를읽는 다. 명령어 25는다음데이터를 A레지스터와더하라는명령 25 명령어해석 으로규정 -> 해석 A+02H -> A 준비 0002 PC 명령어버퍼 data bus... A = 0 B... FLAG ALU
주소기계어어셈블러 Step 5 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H ADD 실행 0033 F5 A0 MOV 0A0,A Operand 읽기 00 74 01 00 02 25 03 02 0003 PC 명령어버퍼 처음 03번지데이터를읽어 25 명령어해석 opreand 버퍼에저장. 02 Oprand 버퍼 data bus... A B... FLAG ALU
주소기계어어셈블러 ORG 0000H 0000 74 00 MOV A,00H 0030 25 02 ADD A,02H 0033 F5 A0 MOV 0A0,A Step 6 ADD 계산 00 74 01 00 02 25 03 02 25 명령어해석 처음 03번지데이터를읽어 opreand 버퍼에저장. A+02H -> A 실행 ADD 명령종료 0000 PC 명령어버퍼 02 Oprand 버퍼 data bus... A = 02 B... FLAG 설정 S=0 Z=0 C=0 V=0 00 02 ALU 02 ADD 명령
주소기계어어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 7 fetch MOV 00 74 0004 PC 01 00 02 25 03 02 명령어버퍼 F5 명령어해석 다음명령 MOV 을읽는다 MOV 명령해석 04 05 F5 A0 02 Oprand 버퍼 09 0A 0B xx xx xx... A = 02 B... FLAG 설정 data bus ALU
주소기계어어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 8 MOV 의주소값읽기 00 01 02 74 00 25 03 02 04 F5 05 A0 09 xx 0A xx 0B xx data bus 0005 PC 명령어버퍼 MOV명령에서메모리주소값임을 해석하고 F5 명령어해석 주소값을읽는다. A0 Oprand 버퍼 A = 02 B...... FLAG 설정 ALU
주소기계어어셈블러 0000 74 00 MOV A,00H 0002 25 02 ADD A,02H 0004 F5 A0 MOV 0A0,A Step 9 A 레지스터쓰기 00 01 02 ROM 74 00 25 03 02 04 05 09 F5 A0 xx 0A 02 0B xx address bus RAM data bus 0006 PC 명령어버퍼 MOV명령에서메모리주소값임을 해석하고 F5 명령어해석 주소값을읽는다. A0 Oprand 버퍼 A = 02 B...... FLAG 설정 ALU 02
CPU 의동작순서표 MOV A,00H ADD A,02H MOV 0A0,A FETCH OPRAND FETCH OPRAND FETCH OPRAND 데이터 74 00 실행 25 02 실행 F5 A0 02 실행 엑세스 주소 Read Read Read Read Read Read write 00 01 02 03 04 05 A0
CPU 동작속도높이기 MOV A,00H ADD A,02H MOV 0A0,AA FETCH OPRAND FETCH OPRAND FETCH OPRAND 데이터 74 00 실행 25 02 실행 F5 A0 파이프1 파이프 2 파이프3 파이프4 74 00 실행 XX XX prefetch 25 00 실행 XX XX F5 A0 실행 XX 02 F5 실행 ( 실제 8051 은이개념이적용안된가상의개념임, Intel 80486, ARM 등에적용 )
ARM 프로그램작성 C 또는어셈블리 ( 기계어 ) 로작성 int cval; void Calc() { int val; } val = 2; val += 3; cval = val; 컴파일러 기계어 0200A0E3 0310A0E3 14209FE5 000082E5 어셈블러 ROM 에넣기 ( 시스템에따라 ROM, FLASH, RAM) ISP, JTAG, Calc: mov r0,#2 add r0,r0,#3 0 ldr r2,.l3 str r0, [r2, #0]....L3:.word cval
int ival; int main() { ival = 3; ival += 2; } ARM GAS pasm.s page 1 i l 3 compiler 1.file func.c.file "func.c".text.align 2.global main.type main, %function main: mov ip, sp stmfd sp!, {fp, ip, lr, pc} sub fp, ip, #4 sub sp, sp, #4 bl func mov r0, #2 add r0, r0, #3 ldr r2,.l3 str r0, [r2, #0] mov r3, r0 str r3, [fp, #-16] ldr r3, [fp, #-16] mov r0, r3 ldmfd sp, {r3, fp, sp, pc}.size main,.-main.align 2.global func.type func, %function.align 2.L3:.word ival.size func,.-func.comm ival,4,4.ident "GCC: (GNU) 3.4.5" assembler 1 file "func c" 2.text 3.align 2 4.global main 5.type main, %function 6 main: 7 0000 0DC0A0E1 mov ip, sp 8 0004 00D82DE9 stmfd sp!, {fp, ip, lr, pc} 9 0008 04B04CE2 sub fp, ip, #4 10 000c 04D04DE2 sub sp, sp, #4 11 0010 FEFFFFEB bl func 12 0014 0200A0E3 mov r0, #2 13 0018 030080E2 add r0, r0, #3 14 001c 14209FE5 ldr r2,.l3 15 0020 000082E5 str r0, [r2, #0] 16 17 0024 0030A0E1 mov r3, r0 18 19 0028 10300BE5 str r3, [fp, #-16] 20 002c 10301BE5 ldr r3, [fp, #-16] 21 0030 0300A0E1 mov r0, r3 22 0034 08A89DE8 ldmfd sp, {r3, fp, sp, pc} 23.size main,.-main 24.align 2 25.global func 26.type func, %function 27.align 2 28.L3: 29 0038 00000000.word ival 30.size func,.-func 31.comm ival,4,4 32.ident "GCC: (GNU) 3.4.5 이코드가메모리에전송되고 CPU가읽어실행하는코드 ARM GAS pasm.s page 2 DEFINED SYMBOLS *ABS*:00000000 func.c pasm.s:6.text:00000000 main pasm.s:7.text:00000000 $a pasm.s:29.text:00000038 $d *COM*:00000004 ival UNDEFINED SYMBOLS func
ARM 명령어의특징 32 비트로한개의기계어명령구성 Operand 가 32 비트의명령어와결합 CISC 는명령어다음에 operand 존재 32 비트 operand 데이터를취급하기위해한개또는 2개의명령어가필요 STACK 관련명령어가없고, 블록명령으로대신 BL : 리턴주소값레지스터에대피 R14(LR) 이에비해 CISC 는 CALL 실행시 STACK 사용.
Step 0 프로그램적체 00 04 08 0c memory 0200A0E3 0310A0E3 14209FE5 000082E5 주소기계어어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 0010 02...... Bus MUX data bus... R0 R1... FLAG MUL Barrel Shifter ALU
Step 1 fetch : 기계어명령읽기.00 0200A0E3 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0].04 0310A0E3.08 000000000 14209FE5 Addr.bus.0C 명령어버퍼 000082E5 E3A00002 PC(R15) 명령어해석 처음 00000000번지기계어를읽는다. 명령어 E3A00002는데이터를 R0레지스터로옮기라는명령으로규정 -> 해석 Bmux data bus 000000002... R0 R1... FLAG MUL ALU Barrel Shifter
Step 2 실행 : 데이터를 R0 에넣기.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 명령중데이터만을레지스 0004 0310A0E3 add r0,r0,#3 0 0008 14209FE5 ldr r2,.l3 터에넣는다. 000C 000082E5 str r0, [r2, #0] 명령한개가종료됨. 000000000 PC 명령어버퍼 E3A00002 명령어해석 Bmux data bus 000000002 R0 00000002 Amux... R1... FLAG MUL ALU Barrel Shifter
.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Step 3 fetch : 기계어명령읽기 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 r0#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000004 명령어버퍼 E3A01003 PC 명령어해석 다음 00000004번지기계어읽기 명령어 E3A01003 해석 ALU을통해더하기 -> 해석 Bmux data bus 000000003 R0 Amux... R1... FLAG MUL ALU Barrel Shifter
Step 4 add 실행.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000004 PC 명령어버퍼 E3A01003 명령어해석 다음 00000004번지기계어읽기 명령어 0210A0E3해석 ALU을통해더하기 -> 해석 Bmux data bus 000000003 R0 00000002 Amux... R1... FLAG N=0 Z=0 C=0 V=0 000000002 00000005 MUL Barrel Shifter ALU 000000003
Step 4-1 add 실행후 R0 에저장.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000004 PC 명령어버퍼 E3A01003 명령어해석 클럭의에지에맞추어 R0에저장 에지후, A-MUX disable 됨 ALU의 A 버스는 0xXXXXXXXX Bmux data bus 000000003 R0 00000005 Amux... R1... FLAG 0xxxxxxx N=0 Z=0 C=0 V=0 000000002 MUL Barrel Shifter 000000003 ALU 00000005
Step 5 fetch : ldr.00.04.08.0c 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 r0#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000008 명령어버퍼 E59F2014 PC 명령어해석 다음 00000008번지기계어읽기 명령어 E59F2014 해석.L3(00000004) 을 R2에저장 Bmux data bus 000000054 R0 Amux R1 R2...... FLAG MUL ALU Barrel Shifter
.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Step 6 ldr 실행 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 r0#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 000000008 명령어버퍼 E59F2014 PC 명령어해석 int ival; -> 0x00000054 에할당 int *pival; pival = &ival; => 컴파일러에의해 R2 로지정 operand 값.L3(00000054) 을 R2에저장 Bmux data bus 000000054 R0 Amux R1 R2 00000054...... FLAG MUL ALU Barrel Shifter
Step 7 fetch : str.00.04.08.0c 0200A0E3 0310A0E3 14209FE5 000082E5 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 r0#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 00000000C Addr.bus 명령어버퍼 E5820000 PC 명령어해석 Str fetch 명령어 E5820000 해석 R2의주소에 R0의값저장 Bmux data bus 000000000 R0 00000005 Amux R1 R2 00000054...... FLAG MUL ALU Barrel Shifter
Step 8 str 실행.00.04.08.0C 0200A0E3 0310A0E3 14209FE5 000082E5 Addr.bus 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 r0#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] 00000000C 명령어버퍼 E5820000 PC 명령어해석 Str fetch 명령어 E5820000 해석 R2의주소에 R0의값저장 Bmux data bus.50.54.58.5c xxxxxxxx 00000005 xxxxxxxx xxxxxxxx address bus 00000000... R0 00000005 R1 R2 00000054... FLAG Amux MUL Barrel Shifter ALU 00000054 00000005
ARM 동작속도높이기 주소기계어 어셈블러 reset: 0000 0200A0E3 mov r0,#2 0004 0310A0E3 add r0,r0,#3 0008 14209FE5 ldr r2,.l3 000C 000082E5 str r0, [r2, #0] MOV A,00H ADD A,02H MOV 0A0,AA FETCH OPRAND FETCH OPRAND FETCH OPRAND 데이터 74 00 실행 25 02 실행 F5 A0 mov r0,#2 파이프1 파이프 2 파이프3 파이프4 E3A00002 decode 실행 E3A00005 XX add r0,r0,#3 E3A01003 decoded 실행 XX XX prefetch ldr r2,.l3 E59F2014 decode 실행 XX str r0,[r2,#0] E5820000 decode 주소계산전송 * 8051 없는가상의개념 (80486, ARM 등에존재 )
CPU 장치개발
장치개발과정 목적이정해지면목적에맞는칩을선정 회로설계 PCB 제작 CPU 개발환경구축 CPU 에맞는환경이다름 프로그램작성 프로그램실행과디버깅반복 생산및판매
CPU 와프로그램 목적이맞는프로그램은시스템특성에따라 C 와어셈블러로작성 C Compiler LIB (Library) 개발툴만드는회사가작성 printf(), strcpy(), sin(), 어셈블리코드 OBJ (Object) + EXE, HEX code Assembler Linker
int a; 프로그램과메모리사용 int main() 기계어코드 (ROM/RAM) 명령이처리위한기계어코드영역 { 변수데이터 (RAM) } a = 10; a++; printf( a=%d,a) return 0; 명령이실행될때데이터가저장되는공간 고정데이터 (ROM/RAM) 명령이실행될때변하지않는변수공간
컴파일러와개발툴 컴파일러는각 CPU 에따라다르게작성된다. CPU 의종류가다르면다른컴파일러가필요하다. 컴파일러는구입하는것이일반적이다. 같은 CPU라도컴파일러판매회사는다름 8051 : IAR, Keil 어셈블러는주로 CPU 생산업체에서공급한다. C 를사용하지않는다면컴파일러구입없이간단히개발할수있다.
메모리프로그램전송방식 작성된프로그램이실행하기위해최종에는메모리에전송이필요 (CPU 의동작없이 ) CPU와메모리존재의형태에따라전송방식을다르다. 코드영역이 EPROM 일경우 EPROM을롬라이터를사용하여쓴다. 외부 FLASH 을사용일경우 CPU 가 JTAG 을지원할경우는 JTAG 라이터로전송 내부 FLASH 을사용할경우 CPU 에서라이터 (ISP 또는 JTAG) 을사용하여전송
코드영역이 EPROM EPROM이 CPU 내부에있는경우도마찬가지 롬라이터 PC 8031 EPROM 소켓 UART USB ROM Writer program RAM
롬라이터와 EPROM 지우기 타이머 자외선형광등 타이머에의해자동꺼짐
내부 FLASH 을사용 (AT89LP2052) EPROM이 CPU 내부에있는경우도마찬가지 PC ISP Writer program LPT 버퍼
AT89LP2052 PC ISP Writer LPT ISP
외부 FLASH 을사용 JTAG- 임베디드 CPU 의경우가대표적 ARM PC JTAG 케이블 JTAG Writer program LPT 버퍼 TDI TDO TMS TCK TRST JTAG ARM core 74HC541 FLASH control FLASH
프로그램디버깅체계 1 에뮬레이터장비 MCU 계열은메모리가한칩에있어메모리용량때문에코드를 RAM에서실행시킬수없다 CPU을대신하여프로그램을대신할수있는장비가필요 장비의커넥터를 PCB에연결하여 CPU 대신동작시켜회로와프로그램을확인한다. 장비값이비싸나디버깅이쉬워개발기간단축 전자적으로쓸수있는 FLASH의사용으로직접프로그램을전송 특별할장비가필요없어에뮬레이터장비구입비없음 간단한전송장치를써고디버깅이불편하다. UART을통해실행상황을 PC로전송하여디버깅할수있다.
프로그램디버깅체계 2 ISP 로내부 FLASH 사용할경우 RAM의용량이제한되어있어프로그램을 RAM에넣을수없다. 매번 ISP로프로그램을전송한다. 외부에메모리를추가하여 RAM 에프로그램을넣을수있는경우 프로그램을매번 RAM 넣고실행후최종적으로 ROM/FLASH로옮겨실행한다. 이때전송은 ROM 프로그램의실행을통해 PC와통신하여 RAM 으로프로그램을전송한다. 통신은 UART(RS-232C), USB, ETHERNET 사용할수있다.
에뮬레이터장비사용
에뮬레이션방식 PCB 8052 커넥터 목적프로그램작성 목적프로그램에뮬레이터에전송 에뮬레이터 실행후오류확인 PC error 오류? No error IDE 툴 실제 8052 부착하고프로그램전송
8031 의디버깅체계 ( 외부메모리 ) 8031 EPROM 모니터 EPROM 에 PC 와통신하여코드를 RAM 복사할수있는프로그램작성후굽는다 목적프로그램작성 Serial RAM 목적프로그램 RAM 에전송 실행후오류확인 PC error 오류? 코드전송용프로그램 No error 최종코드를 ROM 에전송후실행
AT89LP2052 ISP FLASH AT89LP2052 8051 core 목적프로그램작성 FLASH 목적프로그램 FLASH 에 ISP 로전송 ISP 실행후오류확인 ISP writer PC error 오류? No error 추가전송없이사용
ARM 의디버깅체계 ( 외부메모리 ) PC CPU 개입없음초기 FLASH 에쓰기 FLASH FLASH 에 PC 와통신하여코드를 RAM 복사할수있는프로그램작성후 JTAG 로전송 JTAG bootloader 목적프로그램작성 ARM Serial USB RAM 목적프로그램 RAM 에전송 Bootloader에의해 RAM에복사됨 실행후오류확인 PC 코드전송용프로그램 CPU의프로그램에의해통신및쓰기 error 오류? No error 최종코드를 FLASH에전송후실행