Document revision histroy $Log: ae32000-isa-rm_ko.tex,v $ Revision 1.7 2008/05/06 10:00:34 babyworm fix type Revision 1.6 2008/03/12 01:32:38 babyworm

Similar documents
=

Microsoft Word - 1. ARM Assembly 실습_xp2.doc

hwp

Chapter ...

Deok9_Exploit Technique

Microsoft PowerPoint - a6.ppt [호환 모드]

ARM01

hlogin2

T100MD+

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

Microsoft PowerPoint - hy2-12.pptx

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

Microsoft PowerPoint - LN_1_ARM_CPU_0.ppt [호환 모드]

Microsoft PowerPoint - 05-ARM-Instruction-Set.ppt

SRC PLUS 제어기 MANUAL

Microsoft Word - FunctionCall

Microsoft PowerPoint - hw8.ppt [호환 모드]

Microsoft PowerPoint - chap04-연산자.pptx

[8051] 강의자료.PDF

Remote UI Guide


Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

Microsoft PowerPoint - polling.pptx

ºÎ·ÏB

歯FDA6000COP.PDF

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap01-C언어개요.pptx

ARM Reverse Engineering

MicrocontrollerAcademy_Lab_ST_040709

MAX+plus II Getting Started - 무작정따라하기

Microsoft Word - Installation and User Manual_CMD V2.2_.doc

CANTUS Evaluation Board Ap. Note

Microsoft Word - ExecutionStack

Microsoft PowerPoint - 30.ppt [호환 모드]

Microsoft PowerPoint - CHAP-03 [호환 모드]

untitled

APOGEE Insight_KR_Base_3P11

Introduction to LMC

API 매뉴얼

Microsoft PowerPoint - o8.pptx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

untitled

PowerPoint 프레젠테이션

강의10

untitled

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

API 매뉴얼

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

9

인켈(국문)pdf.pdf

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

Microsoft PowerPoint - a8a.ppt [호환 모드]

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

歯설명서_020925_.PDF

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

No Slide Title

핸디로더(PGM-500) 사용자 메뉴얼

1217 WebTrafMon II

1

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

구문 분석

C# Programming Guide - Types

PowerPoint 프레젠테이션

Here is a "PLDWorld.com"... // EXCALIBUR... // Additional Resources // µc/os-ii... Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL D

. 고성능마이크로프로세서 LU 와레지스터 파일의구조 (2.). 직접디지털주파수합성기 (FS) 의구조 3. 고성능마이크로프로세서부동소수점연산기 (Floating-Point Unit) 구조 (2) (2.) (2.) 2. 암호화를위한 VLSI 구조와설계의개요 (2.) 다음참

adfasdfasfdasfasfadf

슬라이드 1

Computer Architecture

chap 5: Trees

BY-FDP-4-70.hwp

untitled

PowerPoint Presentation

온라인 IT 교육최강 ( 강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1

BJFHOMINQJPS.hwp

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

IoT FND8 7-SEGMENT api

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

Microsoft PowerPoint - ch07.ppt

PRO1_09E [읽기 전용]

Orcad Capture 9.x

4. 다음주소지정방식중속도가가장빠른주소방식은? 가. immediate addressing mode 나. direct addressing mode 다. indirect addressing mode 라. index register. 5. 간접주소 (indirect addr

USER GUIDE

OCW_C언어 기초

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

슬라이드 1

PowerPoint 프레젠테이션

시스코 무선랜 설치운영 매뉴얼(AP1200s_v1.1)

Microsoft PowerPoint - 강의2.ppt

The_IDA_Pro_Book

Microsoft PowerPoint - chap03-변수와데이터형.pptx

6주차.key

슬라이드 제목 없음

2002년 2학기 자료구조

K&R2 Reference Manual 번역본

FARA PLC N70plus 시스템 사용자 메뉴얼

Manufacturing6

MR-3000A-MAN.hwp

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

R50_51_kor_ch1

Transcription:

for AE32000: An 32bit EISC microprocessor Processor Team, R&D center, ADChips Inc. Revision : 1.7 January 12, 2010 Advanced Digital Chips Inc.

Document revision histroy $Log: ae32000-isa-rm_ko.tex,v $ Revision 1.7 2008/05/06 10:00:34 babyworm fix type Revision 1.6 2008/03/12 01:32:38 babyworm modified hangul emph type Revision 1.5 2008/03/12 01:28:47 pioneer Correct typo Revision 1.4 2007/10/12 02:49:09 babyworm fix font Revision 1.3 2007/10/12 02:32:43 babyworm fix format Revision 1.2 2007/09/18 07:38:49 babyworm modify style Revision 1.1 2007/09/18 05:45:41 babyworm Initially Added c Advanced Digital Chips Inc. All right reserved. No part of this document may be reproduced in any form without written permission from Advanced Digital Chips Inc. Advanced Digital Chips Inc. reserves the right to change in its products or product specification to improve function or design at any time, without notice. Office 14th Floor, Instopia Bldg., 467-23, Dogok-Dong, Gangnam-Gu, Seoul, 135-270, Korea. Tel : +82-2-2107-5800 Fax : +82-2-571-4890 URL : http://www.adc.co.kr

Contents 목차 2 1 Introduction 11 1.1 About this Document............................... 12 1.1.1 Cautions.................................. 12 1.1.2 Feedback.................................. 12 1.2 About EISC Architecture............................. 13 1.3 About AE32000.................................. 15 2 Programmer s Model 16 2.1 Data Types..................................... 17 2.2 Processor Modes.................................. 18 관리자 모드............................. 18 사용자 모드............................. 18 OSI 모드.............................. 18 2.3 General Purpose Registers............................. 19 2.4 Special Purpose Registers............................. 20 2.4.1 Status Register............................... 20 2.4.2 Program Counter(PC)........................... 24 2.4.3 Link Register(LR)............................. 24 2.4.4 Extenstion Register(ER)......................... 25 2.4.5 Multiply Result Registers......................... 25 2.4.6 CR0, CR1.................................. 25 2.4.7 SSP, ISP, USP............................... 28 2

2.5 Exceptions..................................... 29 2.5.1 Exception의 종류............................. 30 1) Reset............................... 30 2) External Hardware Interrupt.................. 30 3) Software Interrupt........................ 31 4) Non Maskable Interrupt.................... 31 5) System Coprocessor Interrupt................. 31 6) Coprocessor Interrupt...................... 31 7) Breakpoint & Watchpoint Interrupt.............. 32 8) Bus Error............................. 32 9) Double Fault........................... 32 10) Undefined Instruction Exception................ 32 11) Unimplemented Instruction Exception............ 32 2.5.2 Interrupt Vector Table........................... 32 2.5.3 Vector Base................................. 35 2.5.4 Exception Priority............................. 35 2.6 Memory Interface.................................. 37 2.6.1 Address Space............................... 37 2.6.2 Endianness................................. 37 2.6.3 Unaligned Menory Access......................... 38 2.6.4 Prefetching & Self-Modifying Code................... 38 2.6.5 Memory Map................................ 39 2.6.6 Memory Mapped I/O........................... 39 3 Instruction Set Highlights 40 3.1 Binary Encoding.................................. 41 3.2 Memory Access................................... 46 3.3 Move......................................... 47 3.4 Branch........................................ 48 3.5 Arithmetic & Logical............................... 50 3.6 Coprocessor Access................................. 52 3.7 DSP Acceleration.................................. 53 3.7.1 Multiply and Accumulation........................ 53 3.7.2 Saturate Arithmetic............................ 55 3

3.7.3 Unpack................................... 56 3.7.4 Miscellianeous............................... 58 3.8 JAVA Acceleration................................. 59 4 AE32000 Instructions 60 4.1 ABS - absolute value............................... 61 4.2 ADC - addition with carry............................ 62 4.3 ADD - addition................................... 64 4.4 ADDQ - short immediate addition........................ 66 4.5 AND - bitwise AND................................ 67 4.6 ASL - Arithmetic Shift Left............................ 69 4.7 ASR - Arithmetic Shift Right........................... 71 4.8 AVGB - SIMD average (SIMD BYTE)..................... 73 4.9 AVGS - SIMD average (SIMD SHORT)..................... 75 4.10 BRKPT - instruction breakpoint......................... 77 4.11 CLR - clear a bit of status register....................... 79 4.12 CMP - compare.................................. 80 4.13 CMPQ - short immediate compare........................ 82 4.14 CNT0 - count leading zeros............................ 84 4.15 CNT1 - count leading ones............................ 85 4.16 CPCMD - coprocessor command......................... 86 4.17 CVB - convert to byte............................... 88 4.18 CVS - convert to short.............................. 89 4.19 EXEC - exception on coprocessor status.................... 90 4.20 EXJ - exchange Java mode............................ 92 4.21 EXTB - extension from byte........................... 94 4.22 EXTS - extension from short........................... 95 4.23 GETC - get a status from coprocessor...................... 96 4.24 HALT - halt instruction to save power consumption.............. 99 4.25 JAL - jump and link................................ 100 4.26 JALR - register indirect jump and link..................... 103 4.27 JC - jump on carry................................ 104 4.28 JGE - jump on signed greater or equal..................... 106 4.29 JGT - jump on signed greater.......................... 108 4

4.30 JHI - jump on unsigned higher.......................... 110 4.31 JLE - jump on signed less or equal....................... 112 4.32 JLS - jump on unsigned lower or equal..................... 114 4.33 JLT - jump on signed less than......................... 116 4.34 JM - jump on minus................................ 118 4.35 JMP - jump always................................ 120 4.36 JNC - jump on not carry............................. 122 4.37 JNV - jump on not overflow........................... 124 4.38 JNZ - jump on not zero.............................. 126 4.39 JP - jump on positive............................... 128 4.40 JPLR - jump to link register........................... 130 4.41 JR - register indirect jump............................ 131 4.42 JV - jump on overflow............................... 132 4.43 JZ - jump on zero................................. 134 4.44 LD - load 32-bit.................................. 136 4.45 LDAU - Auto-Increment load........................... 138 4.46 LDB - load signed byte.............................. 140 4.47 LDBU - load unsigned byte............................ 143 4.48 LDC - load on coprocessor............................ 146 4.49 LDI - load immediate............................... 148 4.50 LDS - load signed short.............................. 150 4.51 LDSU - load unsigned short........................... 153 4.52 LEA - load effective address........................... 156 4.53 LERI - load extension register with immediate................. 159 4.54 LSR - logical shift right.............................. 161 4.55 MAC - multiply and add............................. 163 4.56 MACB - SIMD MAC BYTE........................... 164 4.57 MACS - SIMD MAC SHORT.......................... 166 4.58 MAX - Maximum................................. 168 4.59 MFCR0 - move from CR0............................. 170 4.60 MFCR1 - move from CR1............................. 171 4.61 MFMH - move from MH............................. 172 4.62 MFML - move from ML.............................. 174 4.63 MFMRE - move from MRE............................ 175 5

4.64 MIN - Minimum.................................. 176 4.65 MRS - multiply result shift and extraction................... 178 4.66 MSOPB - SIMD MAC BYTE.......................... 180 4.67 MSOPS - SIMD MAC SHORT......................... 182 4.68 MTCR0 - move to CR0.............................. 184 4.69 MTCR1 - move to CR1.............................. 185 4.70 MTMH - move to MH............................... 186 4.71 MTML - move to ML............................... 187 4.72 MTMRE - move to MRE............................. 188 4.73 MUL - signed multiply.............................. 189 4.74 MULU - unsigned multiply............................ 191 4.75 MVFC - move from coprocessor......................... 193 4.76 MVTC - move to coprocessor........................... 194 4.77 NEG - negate.................................... 195 4.78 NOP - no operation................................ 196 4.79 NOT - logical inversion.............................. 197 4.80 OR - bitwise OR.................................. 198 4.81 POP - pop list................................... 200 4.82 PREFD - data cache prefetch........................... 203 4.83 PREFI - instruction cache prefetch....................... 205 4.84 PUSH - push list.................................. 207 4.85 ROL - rotete left.................................. 209 4.86 ROR - rotete right................................. 211 4.87 SADD - saturated addition............................ 213 4.88 SADDB - signed saturated addition (SIMD BYTE).............. 215 4.89 SADDS - signed saturated addition (SIMD SHORT)............. 217 4.90 SADUB - unsigned saturated addition (SIMD BYTE)............. 219 4.91 SADUS - unsigned saturated addition (SIMD SHORT)............ 221 4.92 SBC - subtract with carry............................ 223 4.93 SET - set status register............................. 225 4.94 SSL - set shift left................................. 226 4.95 STAU - Auto-Increment store........................... 228 4.96 ST - store 32-bit.................................. 230 4.97 STB - store byte.................................. 232 6

4.98 STC - store on coprocessor............................ 234 4.99 STEP - single step debugging........................... 236 4.100STS - store short.................................. 237 4.101SUB - subtract................................... 239 4.102SWI - software interrupt............................. 241 4.103SYNC - synchronization.............................. 243 4.104TST - test(logical compare)............................ 245 4.105UPKHS - unpack short to higher part...................... 247 4.106UPKLS - unpack short to lower part...................... 248 4.107UPK0HB - unpack 0 byte to higher part.................... 249 4.108UPK0LB - unpack 0 byte to lower part..................... 250 4.109UPK1HB - unpack 1 byte to higher part.................... 251 4.110UPK1LB - unpack 1 byte to lower part..................... 252 4.111UPK2HB - unpack 2 byte to higher part.................... 253 4.112UPK2LB - unpack 2 byte to lower part..................... 254 4.113UPK3HB - unpack 3 byte to higher part.................... 255 4.114UPK3LB - unpack 2 byte to lower part..................... 256 4.115XOR - bitwise XOR................................ 257 A 찾아보기 259 7

List of Tables 2.1 상태 레지스터의 각 비트 정의 및 설정 방법.................. 20 2.2 Counter Register의 각 필드 정의 및 동작.................... 27 2.3 인터럽트 우선 순위................................ 35 3.1 Memory Access Instructions............................ 46 3.2 Move Instructions................................. 47 3.3 Branch Instructions................................ 48 3.4 Arithmetic & Logical Instructions........................ 50 3.5 Coprocessor Access Instructions......................... 52 3.6 Multiply and Accumulation Instructions..................... 53 3.7 Saturate Instructions................................ 55 3.8 Unpack Instructions................................ 56 3.9 DSP 기타 Instructions............................... 58 3.10 JAVA Instructions................................. 59 4.171Bank에 따른 POP list............................... 202 4.178Bank에 따른 PUSH list.............................. 209 8

List of Figures 2.1 사용에 주의하여야 할 범용 레지스터...................... 19 2.2 Status Register................................... 20 2.3 Counter Register field............................... 26 2.4 Exception 처리 과정................................ 29 2.5 인터럽트 벡터 테이블의 구성........................... 33 2.6 Endianess...................................... 37 3.1 Instruction Set Highlights............................. 43 3.2 SIMD MAC 연산의 동작............................. 54 3.3 Saturate Arithmetic................................ 55 3.4 Unpack 연산의 동작................................ 57 9

This page intentionally left blank TRADEMARKS EISC R 는 Advacned Digital Chips Inc.의 등록상표입니다. AE32000 R 은 Advacned Digital Chips Inc.의 등록상표입니다. AMBA R, AHB R, AXI R, APB R 는 ARM Inc.의 등록상표입니다. GNU toolchain은 GPL/LGPL을 따릅니다. 기타 각사의 등록 상표는 각사의 소유입니다. 10

Chapter 1 Introduction 본 매뉴얼은 32비트 EISC프로세서인 AE32000 명령어 셋 아키텍쳐에 대 한 전반적인 내용을 다루도록 한다. AE32000 명령어 셋 아키텍쳐(ISA)는 EISC(Extendable Instruction Set Architecture)를 기반으로 하며, 16비트 의 고정 길이 명령어 형식을 지니고 있다. 본 장에서는 다음과 같은 사항을 다루도록 한다. About this Document About EISC Architecture About AE32000 11

1.1. ABOUT THIS DOCUMENT 12 1.1 About this Document 이 문서는 EISC 아키텍처 기반의 32비트 마이크로 프로세서 명령어 셋 아키텍처인 AE32000에 대하여 설명하려고 한다. 또한, AE32000 명령어 셋에서 정의 된 명령어들에 대하여 설명하고 사용법 및 주의 사항을 제시하기 위하여 작성되었다. 이 문서는 AE32000 프로세서를 이용하는데 알아야 하는 명령어에 대한 프로세서의 동작을 기술하는데 집중 하도록 한다. 1.1.1 Cautions AE32000의 명령어 셋은 프로세서의 구현에 따라 확장/축소 될 수 있으므로, 자신의 프로 세서 참조 매뉴얼을 통하여 지원되는 명령어 및 특성을 알고 있어야 한다. 이 매뉴얼에서 는 해당 명령어가 공통적으로 적용되지 않는 경우에는 해당 명령이 어느 프로세서(혹은 variant)에서 사용 혹은 사용 불가능한지를 명시적으로 나타내도록 한다. 1.1.2 Feedback 문서에 오류나 정정 사항이 있다면, 홈페이지 www.adc.co.kr에 접속하셔서 알려주시거 나, babyworm@adc.co.kr로 해주시면 감사드리겠습니다.

1.2. ABOUT EISC ARCHITECTURE 13 1.2 About EISC Architecture 내장형 프로세서는 일반적인 데이터 처리용 프로세서와 비교하여 보았을때 저가, 저전력 이 중요한 부분을 차지한다. 수행 프로그램이 ROM의 형태로 저장되는 내장형 프로세서 분야에서 수행 프로그램의 크기를 효과적으로 줄임으로 다이(die)에 있어서 많은 크기를 차지하는 ROM의 크기를 줄일 수 있으므로 조금 더 저가의 내장형 시스템을 공급할 수 있다. EISC(Extendable Instruction Set Computer)는 수행 프로그램의 크기 및 메모리 접근 의 회수를 매우 효과적으로 줄일 수 있도록 설계된 명령어 셋으로서, 확장 명령어를 이용 하여 명령어의 즉치 값 및 변위 등의 값을 자 유롭게 확장할 수 있는 형태를 지닌 아키 텍쳐로서 기존의 CISC와 RISC의 장점을 합친 형태를 취하고 있다. EISC는 기본적으로 RISC가 갖고 있는 간단한 구조의 하드웨어를 취하면서도 CISC의 장점을 추가하여 높은 성능을 갖게 하였고, 코드 밀도가 높아 기존의 RISC 프로세서와 비교하여 약 60%, CISC 프로세서와 비교하여 약 80% 정도로 프로그램 크기가 작다는 장점을 지니고 있다. 따라 서, 코드 밀도가 중시되는 내장형 응용 분야에 있어서 강점을 지니고 있다. 기존의 CISC (Complex Instruction Set Computer) 기반의 마이크로 프로세서는 코드 밀도에 있어서 장 점이 있으나 고속화에 문제점을 지니고 있으며, RISC (Reduce Instruction Set Computer) 기반의 마이크로 프로세서는 대부분 32-bit 크기의 명령어를 지님으로 프로그램 코드의 크 기가 지나치게 커진다는 단점을 지니고 있다. EISC기반의 32-bit 마이크로 프로세서인 AE32000은 16-bit 크기의 명령어를 이용하여 32-bit 데이터를 효과적으로 처리할 수 있도록 설계되었다. 이는 ARM사의 Thumb 계열의 프로세서나 MIPS16에서도 채택하고 있는 방법이나, EISC 아키텍쳐의 경우 16-bit 크기의 명령어 사용으로 인한 즉치 값(immediate value) 공간의부족을 이전의 접근 방식과는 다 르게 독립적으로 사용 가능한 LERI(Load Extension Register and set E) 명령을 이용하는 것으로 해결하였다. LERI명령은 2비트 Op-Code와 14비트 즉치 값을 가지는 명령으로서 ER(Extension Register)에 즉치 값을 저장하고, 이후에 즉치 값의 확장이 필요한 명령에 서 ER의 값을 인출하여 해당 명령어의 즉치 값과 덧붙이는 구조를 지니고 있다. 이러한 구조의 장점은 앞에서 기술한 바와 같이 짧은 즉치 값의 크기로 인하여 발생 가능한 문제 를 효과적으로 해결 할 수 있다는 것이나, LERI의 부가로 인하여 코드의 길이가 길어질 수 있다는 문제와 성능의 저하를 가져 올 수 있다는 문제를 지니고 있다. 따라서, EISC 기반의 프로세서는 이 LERI를 효과적으로 처리하는 것이 중요하다.

1.2. ABOUT EISC ARCHITECTURE 14 AE32000은 EISC기반의 32-bit 마이크로 프로세서로서 Low-End용 32-bit 마이크로 프 로세서인 SE3208의 특징에 부가적으로 더 깊은 파이프라인과 OSI(On-Silicon In Circuit Emulator) 지원 기능, 캐쉬 및 가상 메모리의 지원기능, LERI 명령어 폴딩 기능등을 추 가하여 성능을 향상시킨 프로세서이다. 본 사용자 매뉴얼은 고성능 EISC(Extendable Instruction Set Computer) Family중 32bit버전인 AE32000에 대하여 다루도록 한다.

1.3. ABOUT AE32000 15 1.3 About AE32000 AE32000은 EISC 아키텍쳐를 기반으로 하고 있는 32-bit 프로세서를 위한 명령어 셋 아 키텍처이다. 이 명령어 셋은 16비트 명령어를 이용하여 32비트 데이터 패스를 제어하는 축약 코드 RISC(Compressed Code RISC)의 형태적 특징을 지니고 있음으로써, 코드 밀 도가 상대적으로 훌륭하며, EISC 아키텍처 특유의 즉치 확장 기능을 통하여 쉽게 32비트 즉치값의 생성이 가능함으로써, 즉치 연산이 용이하고, 32비트 메모리 영역에 대한 주소 생성이 간단하다는 장점을 지니고 있다. AE32000 아키텍처는 그 구현에 있어서 프로세서의 처리 효율을 향상시키기 위하여 분리된 명령어/데이터 버스를 지니는 Separated-Bus 아키텍처 1 를 채용하며, 즉치 확장을 위한 leri 2 명령어를 좀더 효과적으로 처리하기 위한 LERI instruction folding 기법이 적 용된다. AE32000 명령어 셋 아키텍처는 보조 프로세서를 통한 기능 확장성을 지니고 있으며 4개의 보조 프로세서와 연결 가능한데, 보조 프로세서 0번은 시스템 보조 프로세서로 1 번은 부동 소수점 연산 보조 프로세서로 예약 되어 있다. AE32000 명령어 셋 아키텍처는 다음과 같이 몇 가지 Revision을 지니고 있다. 해당 명 령어 셋은 binary 수준에서 하위 호환성을 지니고 있으나, AE32000A와 AE32000B간에는 곱셈의 결과 저장 방식이 다르므로, 호환성이 떨어진다. 1. AE32000A: 초기 AE32000 아키텍처. 현재 사용하지 않음 2. AE32000B: MH/ML 및 기본적인 DSP가 추가된 ISA. 3. AE32000C: 사용되지 않는 PREFD, PREFI 명령등이 제외 혹은 시스템 보조 프로세서 의 기능으로 변경되었으며, DSP 기능 확장, JAVA 기능 확장 및 명령어 추가. (a) AE32000C-DSP: SIMD DSP 확장 명령어가 추가 됨 (b) AE32000C-Tiny: 저전력 프로세서를 위하여 DSP 명령어 중 일부 제한 (c) AE32000C-JAVA: JAVA 하드웨어 가속기를 위하여 확장 명령어가 추가 됨 1 Harvard Architecture라고도 불린다 2 즉치값 확장을 위하여 사용되는 명령어. 159페이지의 4.53절을 참조하라

Chapter 2 Programmer s Model 본 장에서는 프로그래머 관점에서의 AE32000 프로세서 기반의 SoC에서 프로그램을 작성하는데 있어서 필요한 사항을 기술하도록 한다. 16

2.1. DATA TYPES 17 2.1 Data Types AE32000은 32비트 데이터 처리를 기반으로 하고 있으므로 word의 크기는 32비트가 된 다. AE32000은 다음과 같은 형식의 데이터 처리를 지원한다. 또한, 각 데이터는 signed 와 unsigned number가 지원된다. byte : 8 bits, char short : 16 bits, short int word : 32 bits, int, long int 32비트간의 곱셈을 수행하는 경우 그 결과는 64비트로 표현 될 수 있다. 64비트 값의 길이는 컴파일러에 따라 그 정의가 다르다. MSC_VER : signed 64bit int, signed int64 GNUC : signed long long

2.2. PROCESSOR MODES 18 2.2 Processor Modes 많은 프로세서들은 동작 모드를 구분함으로서 사용자 프로그램의 잘못된 프로그램으로 인하여 프로세서가 오 동작하는 것을 방지하고 있다. AE32000은 기존의 프로세서들이 가지고 있는 관리자 모드 및 사용자 모드 이외에 디버깅시에 사용할 수 있는 OSI 모드를 지니고 있다. 다음은 AE32000이 지원하는 프로세서 모드들이다. 관리자 모드 (Supervisor mode) 사용자 모드 (User mode) OSI 모드 (OSI mode) 관리자 모드 : 관리자 모드는 모든 자원에 대한 접근이 가능한 모드로서, OS와 같이 자 원 관리를 담당하는 프로그램들이 사용하는 모드이다. 프로세서의 모드를 구분함으로서 사용 자원 관리에 있어서 안정성을 높이기 위하여 사용된다. 사용자 모드에서 SWI를 통 하여 진입 가능하며, POP SR을 통하여 이전 프로세서 모드로 복귀 가능하다. 관리자 모드에서 사용자 모드, 혹은 OSI모드로 전환할 때 SET, CLR을 통하여 processor mode 를 직접 바꿈으로서 모드를 바꾸는 것은 시스템 초기 이외에는 권장되지 않으며, 반드시 사용이 필요한 경우 주의하여야 한다. 사용자 모드 : 사용자 모드는 사용자 프로그램이 수행되는 모드로서, 일반 용도의 프로 그램이 구동되는 부분이다. 사용자에서는 사용자에게 할당된 자원(할당된 메모리 영역 및 보조 프로세서)에 대한 접근만이 가능하며, 만일 사용자에게 할당되지 않은 자원에 접근 하는 경우 violation이 발생한다. OSI 모드 : 프로세서의 동작을 디버깅하기 위한 모드로서, 관리자 모드의 권한과 동일 한 자원 접근 권한을 지닌다. 단, 관리자 모드와 구분되는 스택 영역을 지니고 있으므로, 관리자 모드에서의 각 레지스터 상태를 보다 정확하고 쉽게 찾아낼 수 있다는 장점이 있 다. (물론, 이러한 동작은 관리자 모드에서 세심한 프로그램을 통하여 찾아낼 수 있으나, OSI모드를 사용하는 경우 모니터 프로그램 및 관리가 간단하다는 장점을 지닌다.)

2.3. GENERAL PURPOSE REGISTERS 19 2.3 General Purpose Registers AE32000은 16개의 범용 레지스터를 지니고 있으므로, 데이터를 위한 메모리의 잦은 접근 을 줄일 수 있다는 장점을 지닌다. ae32000-elf-gcc를 이용하여 컴파일 하는 경우 5번과 7 번 레지스터는 frame pointer과 index register로서 사용되도록 지정되어 있으므로, 인라인 어셈블러에서 이 레지스터를 사용할 때는 주의를 기울여야 한다. 일반적으로 8번과 9번 레지스터는 argument passing을 위하여 사용되므로, 만일 인자 에 대한 처리를 인라인 어셈블러를 통하여 하고자 할때 이 레지스터들의 사용에 주의하여 야 한다. 2개 이상의 인자가 사용될 경우에는 부족한 인수들을 stack을 이용하여 passing 한다. 컴파일러에서 레지스터를 할당할 때는 0, 1, 2, 3, 4, 6, 10, 11, 12, 13, 14, 15의 순서로 할당을 선호하게 된다. 자세한 사항은 ae32000-elf-gcc혹은 소프트웨어 레퍼런스 매뉴얼을 참조. 번 호 목 적 5 Frame Pointer 7 Index Register 8 Argument 0 9 Argument 1 Figure 2.1: 사용에 주의하여야 할 범용 레지스터

2.4. SPECIAL PURPOSE REGISTERS 20 2.4 Special Purpose Registers AE32000에는 9개의 특수 목적 레지스터와 3개의 스택 포인터 레지스터들이 존재하며, 이중 각 동작 모드에서 사용되는 스택 포인터(SSP, ISP, USP)를 제외한 모든 특수 목적 레지스터들은 PUSH/POP되는 것이 가능하다. 2.4.1 Status Register AE32000의 동작 상태 혹은 설정을 나타내는 레지스터로서 SET/CLR 명령에 의하여 15~0 번 비트까지 조절 할 수 있다. 단, 15~8번 비트의 경우 관리자 모드에서만 변경 가능하며, 사용자 모드에서 15~8번 비트를 변경하고자 하는 경우 아무런 영향을 미치지 않는다. 31 28 27 24 23 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Proc. Proc. Processor Reserved Version Revision Reserved J STEP Mode NMI ENI VI E Endianess Mode L C Z S V Family Always 0 (Hi) (Lo) Processor ID Tag Step Mode Enable Non- JAVA Mode Maskable Interrupt Enable Interrupt Extension Flag Auto-vectored Interrupt When VI is 0. Lock Carry Zero EISC Proc. Mode [15,9] 00: Supervisor Mode 01: OSI Mode 10: User Mode Sign Overflow Figure 2.2: Status Register Table 2.1: 상태 레지스터의 각 비트 정의 및 설정 방법 Tag Width Description Processor Family 4bit 프로세서의 종류를 나타낸다. AE32000C-Lucida 프로세서의 경우 AE32000 Family로서 4 번 을 지닌다. Version 4bit 프로세서의 버전을 나타낸다. AE32000C-Lucida 프로세서의 경우 AE32000의 세번째 버전인 C 버전에 해당하므로, 3 값을 지닌다. Revision 4bit 프로세서의 revision을 나타낸다. Revision은 동일한 명령어 셋 아키텍쳐 및 구성에서 마이크로 아키텍쳐적으로 작은 수정이 가해진 경우이다. AE32000C-Lucifer : 0 AE32000C-Lucida : 1

2.4. SPECIAL PURPOSE REGISTERS 21 Table 2.1: 상태 레지스터의 각 비트 정의 및 설정 방법(계속) Tag Width Description J 1bit JAVA Flag를 의미한다. JAVA 응용 프로그램을 JAVA 하드웨어 가속기를 사용하여 실 행 시키는 경우에 사용된다. SET/CLR 명령을 이용하여 프로 세서의 모드를 변경시킬 수 없다. Bit Setting 0 : EISC Mode 1 : JAVA Mode STEP 1bit Single Step Mode를 의미한다. 디버깅 기능 중에 Single Step 기능을 활성화 시킨 경우를 의미 한다. Single Step Mode가 적용되는 경우 하나의 명령어(LERI 제외)가 실핼된 후 자동적으로 OSI exception이 발생하게 된다. Single Step Mode는 관리자 모드 및 사용자 모드에서만 적용 되며, OSI 모드에서는 Single Step Mode로 지정되어 있더라도 Single Step 기능을 수행하지 않는다. Bit Setting 0 : Disable 1 : Enable Proc Mode 2bit Processor Operation Mode를 의미한다. SR의 15번째 bit와 9번째 bit의 조합으로서 구성되며, 프로세서 의 현재 동작을 나타낸다. SET/CLR 명령을 이용하여 프로세 서의 상태를 변경시킬 수 있으나, 이는 권장되지 않는다. Bit Setting 00 : Supervisor Mode 01 : OSI Mode 10 : User Mode 11 : Undefined Mode

2.4. SPECIAL PURPOSE REGISTERS 22 Table 2.1: 상태 레지스터의 각 비트 정의 및 설정 방법(계속) Tag Width Description NMI 1bit Non Maskable Interrupt Enable을 의미한다. Non Maskable Interrupt(NMI)를 받아들일 것인지 결정한다. Bit Setting 0 : Disalbe 1 : Enable INT 1bit Interrupt Enable을 의미한다. 외부 인터럽트를 받아들일 것인지 결정한다. Bit Setting 0 : Disable 1 : Enable VI 1bit Vectored Interrupt Mode를 의미한다. 외부 인터럽트의 처리 방식을 vectored 형식으로 할 것인지 auto vectored 형식으로 할 것인지 결정한다. Bit Setting 0 : Autovectored Interrupt 1 : Vectored Interrupt E 1bit Extension Flag를 의미한다. Bit Setting 0 : Normal Instruction 1 : Extenstion Instruction

2.4. SPECIAL PURPOSE REGISTERS 23 Table 2.1: 상태 레지스터의 각 비트 정의 및 설정 방법(계속) Tag Width Description Endian 1bit Endianess를 의미한다. 프로세서의 Endian 형식을 결정한다. 이 비트는 Power-On Configuration으로서 동작 중간에 변경할 수 없다. Bit Setting 0 : Little Endian Mode 1 : Big Endian Mode L 1bit Lock Flag를 의미한다. Lock은 프로세서의 Automic processing 동작에 설정된다. 이 bit이 설정되어 있는 경우 프로세서는 NMI와 INT가 disable된 것 처럼 동작한다. Bit Setting 0 : Disable 1 : Enable - Locking Mode C 1bit Carry Flag를 의미한다. 이전 연산의 결과에서 Carry가 발생한 경우 설정된다. Bit Setting 0 : Carry Not Occured 1 : Carry Occured Z 1bit Zero Flag를 의미한다. 이전 연산의 결과가 0 인 경우 설정된다. Bit Setting 0 : Result isn t Zero 1 : Result is Zero

2.4. SPECIAL PURPOSE REGISTERS 24 Table 2.1: 상태 레지스터의 각 비트 정의 및 설정 방법(계속) Tag Width Description S 1bit Sign Flag를 의미한다. 이전 연산의 결과가 음수인 경우 설정된다. Bit Setting 0 : Positive result 1 : Negative result V 1bit Overflow Flag를 의미한다. 이전 연산의 과정에서 Overflow가 발생한 경우 설정된다. Bit Setting 0 : Overflow Not Occured 1 : Overflow Occured 2.4.2 Program Counter(PC) 프로그램의 수행 위치를 가르키는 레지스터로서 다음에 수행되어야 할 명령의 주소를 지 니고 있다. 단, 파이프라인 프로세서에서는 여러 개의 명령이 동시에 수행되고 있으므로, ID 단계에서 수행되는 명령을 기준으로 PC값이 설정되며, 분기가 결정된 경우 분기 목적 주소가 PC로 설정된다. 주의) 0bit은 항상 0 값을 가진다 2.4.3 Link Register(LR) Jump and Link 형식의 분기( JAL, JALR 명령)를 수행하는 경우 복귀할 주소(link address) 를 저장한다. 분기에서의 복귀는 JPLR명령을 이용하여 LR에 저장된 주소로 분기할 수 있으며, 만일 중첩된 분기에서 복귀할 때는 PUSH LR, POP PC의 명령어 Sequence를 이용할 수도 있다. 주의) 0bit은 항상 0 값을 가진다

2.4. SPECIAL PURPOSE REGISTERS 25 2.4.4 Extenstion Register(ER) LERI 1 명령을 통하여 설정되며, 즉치값이나 오프셋을 확장하는데 이용되며, 이 레지스 터의 값은 SR의 E-flag가 1 인 경우에만 valid하다. AE32000 계열의 프로세서는 LERI Folding기능을 지니고 있으므로, 아키텍쳐/마이크로아키텍쳐 수준에서 실제로 사용하지 는 않는다. 따라서, ER을 PUSH하는 경우 0 의 값이 PUSH되며, POP의 경우에도 프로 세서의 동작상에 영향을 주지 않는다. 따라서, 실제적인 아키텍쳐 수준에서 ER은 dummy 로 동작한다. 단, UDI(Undefined Instruction Interrupt)의 경우나 UII(Unimplemented Instruction Interrupt)에서는 해당 명령을 인터럽트 핸들러에서 분석하여 동작을 수행하기 위하여 ER 의 값을 GAP(General Access Pointer) 형태로 보존한다. 2.4.5 Multiply Result Registers Multiply Result Register는 곱셈( MUL, MULU / MAC 연산 및 MAC 관련 DSP 동작의 결과를 저장하는 레지스터로서 일반적인 경우에 64 비트의 크기를 지닌다. 이 결과 값의 상위 32비트는 MH로, 하위 32비트는 ML로 지정된다. MAC 연산의 경우 이 레지스터들은 accumulation register로서 사용되며, DSP 확장 옵션 2 을 사용한 경우 accumulator의 정확 성을 잃지 않기 위하여 MRE 레지스터가 부가적으로 사용되어 Multiply Result Register의 상위 16비트 3 를 추가적으로 확장 할 수 있다. MRE 4 레지스터는 일반적인 PUSH/POP 에 의하여 저장/복원될 수 없으므로, 값의 보존이 필요한 경우 반드시 범용 레지스터를 경유하여 PUSH/POP을 수행하여야 한다. 2.4.6 CR0, CR1 자동 증가 메모리 지정 모드를 지원하기 위한 레지스터로서, 반복적인 for loop 및 DSP 연산을 효과적으로 지원하기 위하여 사용된다. 다음과 같은 주소 모드가 지원되며, 주소 모드에 따라 각 비트의 용도가 변경된다. 그림. 2.3과 표. 2.2는 각각 Counter Register의 필드 정보와 모드별 동작에 대한 기술이다. Auto Increment Mode : 12비트 카운터를 자동으로 incrementor만큼 증가 시킨다. 카운터는 항상 POST Increment된다. AE32000C 프로세서군에서 모두 사용할 수 있다. 1 Load Extension Register with Immediate : 즉치 값으로서 ER을 확장하는 명령 2 이 옵션에 대한 자세한 사항은 AE32000C-Lucida Processor User Guide를 참조 3 구현에 따라 다를 수 있으나, 일반적으로 16비트가 추가된다 4 MUL/MULU 명령어들은 이 레지스터를 사용하지 않는다. MAC과 연관성 있는 명령어들만 사용한다. 단 MAC 명령어와 연관성이 있는 명령어를 이용하는 경우에도 AE32000C-Lucida version에서만 MRE를 이용할 수 있다.

2.4. SPECIAL PURPOSE REGISTERS 26 3 1 2 8 2 7 2 4 2 3 1 2 1 1 0 E O F F M O D E In c r C N T M A S K Figure 2.3: Counter Register field Auto Increment with End-offset Compare Mode : 12비트 카운터를 자동으로 incrementor만큼 증가 시킨다. 카운터는 항상 POST Increment되며 EOFF과의 비교는 PRE Increment 값이 사용된다. 카운터가 EOFF과 같을 경우 zero-flag가 인가된다. AE32000C 프로세서군에서 모두 사용할 수 있다. Wrap-around Auto Increment Mode : 12비트 카운터를 자동으로 incrementor만큼 증가 시킨다. 메모리 주소는 항상 POST Increment된다. 단, 카운터 값이 MASK에 의해 마스킹되므로 cicular 형태로 메모리 접근이 일어난다. DSP 확장 옵션을 사용해야 해당 모드를 사용할 수 있다. Wrap-around Auto Increment with End Check Mode : 기본 동작은 Wrap-around Auto Increment Mode와 같다. 단, 카운터가 0 이 되는 경우 zero-flag가 인가 된다. 이때 비교에 사용되는 카운터는 POST Increment된 값을 사용한다. DSP 확장 옵션을 사용해야 해당 모드를 사용할 수 있다. Bit Reverse Mode : 카운터를 n-bit에 대해 증가 시키되, 이를 n-bit 단위로 bit reverse하여 메모리 주소를 생성한다. 이때, n-bit는 MASK에 의해 결정된다. 예를들어 카운터가 0x1이고 MASK가 0xF인 경우, 메모리 주소의 오프셋 값은 0x8 이 되고, 카운터가 0x3이고 MASK가 0xFF인 경우, 메모리 주소의 오프셋 값은 0xC0 가 된다. DSP 확장 옵션을 사용해야 해당 모드를 사용할 수 있다.

2.4. SPECIAL PURPOSE REGISTERS 27 Table 2.2: Counter Register의 각 필드 정의 및 동작 Tag Width Description Mode 4bit Counter Register의 동작 모드를 결정한다. 주소 모드를 지정하며, 지정된 모드에 따라 Counter Register의 다른 필드의 역할이 결정된다. Bit Setting 0000 : Auto Increment Mode 0001 : Auto Increment with End-offset Compare Mode 0100 : Wrap-around Auto Increment Mode 0101 : Wrap-around Auto Increment with End Check Mode 0110 : Bit Reverse Mode Incrementor 4bit Counter의 증분을 나타낸다. Counter에 더해질 계수를 지정한다. 현재는 항상 4 의 값이 사 용된다. Bit Setting 0000 : 4 End Offset 12bit 최종 값을 나타낸다. Auto Increment with End-offset Compare Mode에서 최종 값 으로 사용된다. Counter 값이 최종 값과 일치하는 경우 SR의 zero-flag가 설정된다. Mask 12bit 몇 비트 연산을 수행할 것인지 결정한다. Wrap-around Mode 및 Bit Reverse Mode에서 몇 비트 연산을 수행할 것인지 결정한다. Wrap-around Auto Increment with End Check Mode인 경우, 카운터가 최종 값에 이르면 SR의 zero-flag가 설정된다. Bit Reverse Mode에서는 Mask의 크기를 8비트 이하만 지원한 다. Counter 12bit Counter의 값을 나타낸다. 실제적인 카운터의 값을 지니고 있다. 이 값이 index register와 더해져서 메모리 접근 주소로 사용된다.

2.4. SPECIAL PURPOSE REGISTERS 28 2.4.7 SSP, ISP, USP AE32000 프로세서는 각 프로세서 동작 모드에 해당하는 스택 포인터를 지닌다. 스택 포 인터는 스택 영역의 최상위 위치(가장 최근에 PUSH된 entry의 주소)를 지정하며, 하위 2 비트의 값은 항상 0 값을 지닌다. 스택의 성장은 항상 상위 주소에서 하위 주소 방향으로 이루어진다.(PUSH시 주소가 감소한다.) 스택 포인터는 프로세서 동작 모드에 따라 shadowing되며, 현재 프로세서 동작 모드 이외의 스택 포인터는 시스템 보조프로세서의 레지스터(SCPR13, SCPR14)를 통하여 접 근이 가능하다. SCPR13 : User Stack Pointer Supervisor Mode, OSI Mode 에서 USP에 접근할 수 있도록 한다. SCRP14 : OSI Stack Pointer / Supervisor Stack Pointer Supervisor Mode 에서 ISP에 접근할 수 있으며, OSI Mode 에서 SSP에 접근할 수 있도록 한다. 각 프로세서 동작 모드를 사용하기 위해서는 프로그래밍 초기에 해당 스택 포인터를 지정해 주어야만 한다. 이때 LEA명령을 이용해 현재 프로세서 동작 모드에 해당하는 스 택 포인터 값을 설정할 수 있다. 프로그램에서 하나 이상의 프로세서 동작 모드를 사용할 경우, 각 동작 모드를 변경해 가며 LEA 명령을 이용해 각 동작 모드에 해당하는 스택 포 인터 값을 설정할 수 있다. 하지만, 아래의 예와 같이 시스템 보조프로세서 레지스터를 이용하여 동작 모드의 변경 없이 다른 동작 모드의 스택 포인터를 설정할 수도 있다. 이때 시스템 보조프로세서 레지스터를 접근하기 위한 MVTC 명령이 사용된다.

2.5. EXCEPTIONS 29 2.5 Exceptions Exception은 프로세서의 정상적인 흐름을 방해하는 모든 상황을 의미한다. AE32000 프 로세서는 프로그램 수행중에 exception이 발생하였을 경우, 그림. 2.4와 같은 과정을 통해 exception을 처리한다. 3) Get Interrupt Vector address Vector Table 2) Access Interrupt Vector Table 4) Jump to Interrupt Handler Interrupt Handler Function 5) Execute Interrupt Handler 1) Save context Stack 6) Resotre context Figure 2.4: Exception 처리 과정 1. Save context Exception 발생과 관련이 있는 명령이 있는지 확인하여, exception 처리 이후 해당 명령부터 다시 수행하기 위해 현재의 프로세서 상태 및 해당 명령의 주소를 스택 영역에 저장한다. 2. Access Interrupt Vector Table

2.5. EXCEPTIONS 30 발생된 exception의 종류에 해당하는 인터럽트 벡터 테이블에 접근한다 5. 인터럽트 벡터 테이블에 대한 자세한 내용은 2.5.2절을 참조하기 바란다. 3. Get Interrupt Vector address 인터럽트 벡터 테이블을 접근하여 exception을 처리하기 위한 인터럽트 핸들러의 함 수 포인터를 가지고 온다. 4. Jump to Interrupt Handler Exception을 처리하기 위한 인터럽트 핸들러 함수로 분기한다. 5. Execute Interrupt Handler Exception을 처리하기 위한 인터럽트 핸들러 함수를 수행한다. 인터럽트 핸들러에서 사용할 범용 레지스터들은 스택을 통해 보관되어야 하며, exception을 처리한 이후 인터럽트 핸들러 함수를 빠져 나올 때는 저장된 범용 레지스터와 함께 (1)단계에서 저장된 프로세서 상태 및 복구 명령의 주소를 복구시켜야 한다 6. 6. Restore context 인터럽트 핸들러 함수를 수행한 이후 exception 발생 이전의 프로세서 상태로 복구 시킨다. 2.5.1 Exception의 종류 1) Reset 코어 프로세서의 초기화 동작을 요구하고자 할 때, 외부에서 코어 프로세서로 입력해 주 는 신호를 통하여 발생한다. 이 인터럽트를 받는 경우 프로세서는 초기화를 수행한다. 초기화시 모든 범용 레지스터 및 특수 목적 레지스터는 unknown 값 또는 0 의 값으로 변경된다 7. 리셋 벡터는 Power-on Configration에 따라 달라진다. 2) External Hardware Interrupt 외부 하드웨어 모듈에서 요청하는 인터럽트를 의미한다. 현재 상태의 PC, SR 값을 관리 자 스택에 PUSH한 후 인터럽트 핸들러를 수행한다. 다른 PUSH가 필요한 레지스터들은 인터럽트 핸들러에 의하여 관리되어야 한다. 외부 인터럽트는 다음 두 가지 방식으로 인 터럽트 벡터를 지정할 수 있다. 5 인터럽트가 발생하면, 그 인터럽트의 종류에 따라 특정 번호가 주어지며 이를 기반으로 인터럽트 벡터 테이 블에 접근한다. 6 해당 동작은 인터럽트 핸들러 함수 앞부분에 #pragma interupt handler 를 추가하여 동작되는 부분이다. 자세한 내용은 Software User Guide 를 참조하기 바란다. 7 구현 모델에 따라 변경될 수 있다.

2.5. EXCEPTIONS 31 Auto-vectored Interrupt: 인터럽트 벡터가 지정되어 있는 경우로서, 인터럽트가 발생한 경우 내정되어 있는 인터럽트 벡터로 이동한다. Vectored Interrupt: 외부 인터럽트 컨트롤러에서 해당 인터럽트의 번호를 넘겨줌으로서, 인터럽트 벡터 의 위치를 판별하여 선택된 인터럽트 벡터로 이동한다. 3) Software Interrupt 소프트웨어적으로 발생시키는 인터럽트를 의미한다. 관리자의 자원을 사용자 모드에서 접근하고자 하는 경우 호출하며, 일반적으로 system call을 위하여 사용된다. 현재 상태 의 PC, SR 값을 관리자 스택에 PUSH한 후, 지정된 인터럽트 번호의 인터럽트 핸들러를 수행한다. 4) Non Maskable Interrupt 5) System Coprocessor Interrupt 메모리 접근 과정에서 발생하는 인터럽트들을 의미한다. Memory Management Unit에 의 해 발생되며, 다음과 같은 경우에 발생된다. Access violation: 관리자 영역으로 지정된 부분을 사용자가 접근하는 경우 Address alignment error: TLB miss: TLB를 사용하여 가상 주소를 접근하고자 할 때 TLB에 entry가 존재 하지 않는 경우 6) Coprocessor Interrupt 보조 프로세서의 접근 과정에서 발생하는 인터럽트를 의미한다. 또한, 이 인터럽트는 연 산을 수행하는 보조 프로세서의 연산 결과를 polling하여 발생시킬 수 있다. 보조 프로세 서 접근 과정에서 발생하는 인터럽트는 관리자 전용으로 지정된 보조 프로세서를 사용자 모드에서 접근할 때 발생한다.

2.5. EXCEPTIONS 32 7) Breakpoint & Watchpoint Interrupt OSI에서 제공하는 디버깅 기능을 제공하기 위한 인터럽트이다. OSI 모듈에서 지정된 breakpoint 8 와 watchpoint 9 의 조건을 만족하였을 때 이 인터럽트가 호출되어 프로세서의 동작 모드를 OSI 모드로 변경시킨다. 8) Bus Error 명령어 버스나 데이터 버스의 복구 불가능한 버스의 오류를 의미한다. 목적 주소에 메모 리가 존재하지 않는 경우 발생할 수 있다. 인터럽트 벡터 테이블 주소가 0x00000010으로 고정되어 있다 10. 9) Double Fault 인터럽트가 발생하여 인터럽트 핸들러로 진입하는 과정에서 오류가 발생한 경우를 의미 한다. 이 경우 supervisor stack의 영역에 문제가 있거나, 인터럽트 핸들러의 위치를 변경 시키는 Vector base register의 설정이 잘못되어 있는 경우 발생할 수 있다. 인터럽트 벡터 테이블 주소가 0x0000000C로 고정되어 있다 11. 10) Undefined Instruction Exception 정의되지 않은 명령이 입력된 경우 발생하는 예외이다. 이 경우 버전에 따라 오류를 발 생시키거나, NOP로 처리할 수 있다. 11) Unimplemented Instruction Exception 명령어 셋에는 정의되어 있으나, 해당 버전에서는 구현되어 있지 않은 명령을 의미한다. 이 경우 인터럽트를 통하여 소프트웨어적으로 에뮬레이션함으로서 값을 얻어낸다. 호환 성을 높이기 위하여 사용된다. 2.5.2 Interrupt Vector Table Exception의 처리를 위하여 프로세서는 인터럽트 핸들러 함수를 읽어와야 하는데, 이 인 터럽트 핸들러 함수의 주소는 인터럽트 벡터 테이블에 존재한다. AE32000 프로세서의 인터럽트 벡터 테이블은 기본적으로 0x0번지에 존재하며, 뒤에 나올 2.5.3절에서 설명할 8 관찰할 명령어 접근 주소를 의미한다. 9 관찰할 데이터 접근 주소를 의미한다. 10 자세한 내용은 2.5.2절을 참조하기 바란다. 11 자세한 내용은 2.5.2절을 참조하기 바란다.

2.5. EXCEPTIONS 33 벡터 베이스를 변경하여 위치를 이동시킬 수 있다. 단, 몇 가지 인터럽트들의 벡터 위치 는 이동시킬 수 없다. 그림. 2.5는 벡터 테이블의 구성을 나타내며, 그림에서 shade 처리 되어 있는 인터럽트들은 벡터 위치를 이동시키는 것이 불가능하다. Word Size Reset 0x0000 0000 NMI 0x0000 0004 INT (auto) 0x0000 0008 Double Fault 0x0000 000C Bus Error 0x0000 0010 0x0000 0014 Reserved 0x0000 0018 0x0000 001C SCP exception 0x0000 0020 CP1 exception 0x0000 0024 CP2 exception 0x0000 0028 CP3 exception 0x0000 002C Reset (OSI) 0x0000 0030 OSI break 0x0000 0034 UDI 0x0000 0038 UII SWI 0x0000 003C 0x0000 0040 0x0000 007C 0x0000 0080 INT (vectored) 0x0000 03FC Reset (OSIROM) 0xFFFF 0000 OSI break (OSIROM) 0xFFFF 0004 Figure 2.5: 인터럽트 벡터 테이블의 구성 인터럽트 벡터는 앞에서 언급하였듯이 0x0번지에 위치해야 하므로, C 컴파일러를 사 용하는 경우에는 loader script에서 반드시 이 위치가 0x0에 올 수 있도록 다음과 같이 memory layout을 지정하여야 한다. 1 SECTIONS 2 {

2.5. EXCEPTIONS 34 3 /* Read-only sections, merged into text segment: */ 4. = 0x0; 5.text : 6 { 7 *(.vects) // Interrupt vector location 위의.vects 는 section을 가르키는 symbol로서, 로더에서 이러한 section symbol을 기반 으로 메모리를 배치하게 된다. 물론, 이러한 section symbol은 코드 내에 존재해야 의미를 지닌다. 코드 내에 정의된.vects 는 다음과 같다. 1 void (*vector_table[])(void) attribute ((section (".vects")))= { 2 reset_vector, /* V00 : Reset Vector */ 3 nmi_autovector, /* V01 : NMI Vector */ 4 interrupt_autovector, /* V02 : Interrupt Auto Vector */ 5 double_fault_exception, /* V03 : Double fault Vector */ 6 bus_error_exception, /* V04 : Bus Error Exception */ 7 NOTUSEDISR, /* V05 : Reserved */ 8 NOTUSEDISR, /* V06 : Reserved */ 9 NOTUSEDISR, /* V07 : Reserved */ 10 coprocessor0_exception, /* V08 : Coprocessor0 Exception*/ 11 coprocessor1_exception, /* V09 : Coprocessor1 Exception*/ 12 coprocessor2_exception, /* V0A : Coprocessor2 Exception*/ 13 coprocessor3_exception, /* V0B : Coprocessor3 Exception*/ 14 osi_reset_vector, /* V0C : OSI reset vector */ 15 osi_break_exception, /* V0D : OSI break exception */ 16... 17... 18... 19 }; 위에서 볼 수 있듯이 벡터 테이블은 인자를 지니지 않고, 반환값을 지니지 않는 함수 포인터들의 배열로 이루어져 있다. 또한, 테이블의 속성으로서 section symbol을.vects 로서 지정하여 로더에서 이를 인식할 수 있도록 해 두었다.

2.5. EXCEPTIONS 35 2.5.3 Vector Base 벡터 베이스란 인터럽트 벡터 테이블의 위치를 의미한다. 기본적으로 인터럽트 벡터 테 이블은 0x0번지에 위치하며, 벡터 베이스를 변경하여 인터럽트 벡터 테이블의 위치를 이 동시킬 수 있다. 단, 앞서 설명했듯이 몇 가지 인터럽트들의 벡터 위치는 이동시킬 수 없으며, 이동될 수 없는 벡터들은 그림. 2.5을(를) 참조하기 바란다. 벡터 베이스는 시스 템 보조 프로세서의 12번 레지스터인 벡터 베이스 레지스터에 저장되며, 이 값이 지정된 이후부터 대부분의 인터럽트는 변경된 인터럽트 벡터 테이블로부터 벡터 주소를 읽어온 다. 즉, 시스템 보조 프로세서의 12번 레지스터는 프로세서 리셋시 0의 값을 가지며, 레지 스터를 설정하게 되면 인터럽트 벡터 테이블의 위치가 변경되는 것이다. 이때, 단순히 인터럽트 벡터 테이블의 위치가 변경된 것이지 벡터 테이블의 데이터(인터럽트 핸들러의 주소)가 옮겨진 것은 아니다. 따라서, 기존의 인터럽트 벡터 테이블의 데이터를 복사한 위치이거나, 별도의 인터럽트 벡터 테이블이 존재하는 위치로 벡터 베이스를 지정하여야 한다. 벡터 베이스 레지스터는 벡터 테이블의 접근을 ROM 영역에서 RAM 영역으로 변경 하는 경우, 동작의 수행 시간을 단축시키고 인터럽트의 hooking을 가능하게 할 수 있 다. 벡터 베이스에서 지정된 벡터 테이블 영역은 가상 메모리를 사용하는 경우 반드시 TLB(Traslate Look-aside Buffer) 내에 존재해야 한다. 이는 AE32000 프로세서의 경우 software managed TLB를 채용하고 있으므로, 벡터 처리 과정 중에 벡터 테이블 접근에서 TLB miss exception이 발생하는 경우 불필요한 double fault가 발생할 수 있기 때문이다. 2.5.4 Exception Priority AE32000 프로세서의 인터럽트는 인터럽트들 간의 우선 순위가 존재한다. 프로세서 내부 적으로 지니고 있는 우선 순위는 표. 2.3과 같다. 인터럽트 간의 우선 순위는 같은 시점에 서 발생한 하나 이상의 인터럽트의 우선 순위를 가리는데 사용되며, 일반적으로는 먼저 요청된 인터럽트가 우선한다. Table 2.3: 인터럽트 우선 순위 순위 설명 약어 1 Reset RST 2 Bus Error BERR 3 Double Fault DF 4 OSI Exception OSI 5 Coprocessor Exception CP

2.5. EXCEPTIONS 36 Table 2.3: 인터럽트 우선 순위(계속) 순위 설명 약어 6 System-Coprocessor Exception CP0 7 Non-Maskable Interrup NMI 8 Software Interrupt SWI 9 Interrupt INT 10 Halt HALT 11 Undefined Instruction Exception UDI 12 Unimplemented Instruction Exception UII

2.6. MEMORY INTERFACE 37 2.6 Memory Interface 2.6.1 Address Space AE32000은 32bit프로세서이므로 32bit주소 영역을 지니고 있다. 즉, 4GB 까지의 선형 메 모리 영역에 대한 접근이 가능하다. 내장형 응용 분야에서 4GB의 메모리를 요구하는 경 우는 매우 제한적이므 로, 실제 주소 영역을 제한할 수 있다. 하지만, 이러한 경우에도 시스템 보조 프로세서에서 제공하는 가상 주소를 이용하여 32비트 주소 영역을 사용할 수 있다. 2.6.2 Endianness Endian이란 한 워드 내에서의 데이터를 어떠한 방향으로 정렬할 것인지를 규정하는 것 이다. Endian은 크게 Big Endian과 Little Endian으로 나뉜다. Big Endian은 말 그대로 워드의 큰 부분(상위)이 워 드의 끝에 위치하는 것을 나타내며, Little Endian은 말 그대 로 워드의 작 은 부분(하위)이 워드의 끝에 위치하는 것을 의미한다. 아래의 그림은 한 워드를 특정 위치에 저장한 경우의 그림이다. Figure 2.6: Endianess 위의 그림과 같이 Little Endian의 경우 작은 값을 워드의 하위에 위치시 킨다. Little Endian의 장점은 데이터의 크기와 관계없이 동일한 접근 방식 을 사용하면 되므로, 데 이터 크기가 커지는 math routine등에서 사용이 쉽다는 점이다. Big Endian의 경우 위의 그림에서와 같이 상위의 값이 워드의 하위에 위 치한다. Big Endian의 장점은 최상위 바 이트가 워드의 최하위에 위치하고 있으므로, 부호를 판별하기 용이하다는 장점을 지니고 있다. (즉, 데이터 길이와 관계없이 offset을 0으로 하고 바이트를 읽는 경우 그 데이터의

2.6. MEMORY INTERFACE 38 부호를 판별할 수 있다. 이는 byte단위로 입력되는 스트림에서 연산 종류 를 빠르게 결 정할 수 있다는 장점을 지닌다). 단점은 데이터의 크기가 바 뀌는 경우 그 접근 방식이 달라져야 한다는 점이다. AE32000은 구현에 따라 Little-Endian version과 Bi-Endian버전 이 있다. 또한 endian이 구분에 따라 다른 컴파일러를 이용해야 하므로 주의를 기 울여야 한다. 2.6.3 Unaligned Menory Access 정렬되지 않은 메모리 접근은 워드 단위로 정렬된 메모리에서 워드 단위에서 나올 수 없는 주소로 워드에 접근을 시 도한 경우이다. 예를 들면 32bit시스템에서 0x2라는 주소로 워 드를 접근 하는 경우 메모리 구성상 0x0이라는 주소에서 상위 2바이트를 읽어오고, 0x4 라는 주소에서 하위 2바이트를 읽어와서 정렬해야 하는데, 이러한 메 모리 접근을 unaligned memory access라 한다. AE32000은 구현에 따라 unaligned memory access에 대 하여 exception 을 발생시키는 버전과 이를 지원하는 버전으로 구분된다. 이를 지원하지 않는 버전의 경우에도 exception handling을 통하여 이를 지원할 수 있으 므로, 큰 문제는 되지 않으나 속도 차이가 크게 날 수 있으므로 항상 염 두에 두고 프로그램을 작성하여야 한다. 2.6.4 Prefetching & Self-Modifying Code 이 절에서는 프로그래밍에 주의해야 할 부분을 설명한다. Prefetching - Prefetch는 다수의 명령어를 프로세서에서 먼저 읽어 들이 는 동작을 의미한다. AE32000에서는 구현에 따라 틀리지만, 메모리와 프 로세서간의 속도 차 이를 극복하기 위하여 캐쉬 메모리를 사용하는 경우가 많다. 이 경우 캐쉬 미스가 발생한 경우 명령어 접근에 시간이 오래 걸리 며, 명령어 fetch가 끝날 때까지 프 로세서는 정지한다. Prefetch는 이러한 문제를 줄일 수 있는 방법으로서 사용된다. AE32000에서는 이외에 LERI 명령어의 folding을 위하여 사용된다. Self-Modifying Code - Self-Modifying Code 는 프로그램 수행 도중에 프 로그램 자체를 변경하는 프로그램을 의미한다. 이러한 프로그램은 네트웍 을 firmware 업 그레이드 등의 용도로 유용하게 사용될 수 있으나, 하드웨 어적인 복잡도나 context 의 관리가 어려워진다는 단점을 지니고 있으므로 대부분의 프로세서에서는 이를 허 용하지 않는다. AE32000는 기본적으로 자체 변경 코드를 지원하지 않으며, 이러한 동작 을 수행하기 위해서는 프로그램에서 변경할 프로그램을 일정 RAM영역에 둔 다음에 RESET interrupt 수행하도록 하고, 리셋 벡터 부분에서 해당 RAM영역의 데이터를 writeable-rom(eg. flash ROM)으로 옮기는 동작을 수행하면 된다.

2.6. MEMORY INTERFACE 39 2.6.5 Memory Map AE32000는 기본적으로 최하위 주소에 벡터 테이블을 위치시키도록 되어 있으며, 이 부 분에 대해서는 변경 할 수 없다. (벡터 테이블의 위치는 Vector Base를 변경함으로서, 그 위치를 조정할 수 있으나 inexact exception processing을 하는 exception은 항상 0x0번지 를 지닌다. 2.5.11 참조) 또한, 스택은 상위 주소 영역에서 하위 주소 영역으로 성장 하므 로, 스택 영역은 메모리의 상위 부분에 위치하여야 하며 충분한 공간 이 주어져야 한다. AE32000에서는 이 두 가지 조건을 만족하는 경우 어떠한 형태의 메모리 맵이라도 구성 가능하다. 2.6.6 Memory Mapped I/O AE32000은 장치 접근을 위한 dedicated instruction이 없으며, 모두 memory mapped방 식을 취하고 있다. 이 장치들에 대한 메모리 할당은 버스에서 지정하는 것을 따르도록 한다.

Chapter 3 Instruction Set Highlights AE32000는 코드 밀도를 높이기 위하여 다양한 명령어를 갖추고 있다. 본 장에서는 AE32000의 명령어에 대한 대략적인 구분과 주의 사항에 대해 설명한다. 40

3.1. BINARY ENCODING 41 3.1 Binary Encoding AE32000 프로세서의 binary encoding과 간략한 Mnemonic은 그림. 3.1과 같다. Mnemonic 에 사용된 지시어들은 다음과 같은 뜻을 가진다. dst 목적 레지스터(destination register)로 범용 레지스터 중의 하나를 뜻한다. 연산의 결과를 저장하는 레지스터이다. src, src1, src2 원천 레지스터(source register)로 범용 레지스터 중의 하나를 뜻한다. 연산에 사용 되는 오퍼랜드를 의미한다. idx 인덱스 레지스터(index register)로 범용 레지스터 중의 하나를 뜻한다. 1 index addressing에서 인덱스 값으로 사용된다. offset 즉치 값(immediate value)으로 정수 값을 가진다. index addressing, stack addressing, pc reltive program memory addressing에서 변위(offset) 값으로 사용된다. imm 즉치 값(immediate value)으로 정수 값을 가진다. 연산에 직접 사용되거나 LERI 명 령에 의해 확장되어 연산에 사용된다. list PUSH, POP 명령에 사용되는 범용 레지스터, 특수 목적 레지스터의 집합을 나타낸 다. sftamt 쉬프트 연산에 사용되는 쉬프트 횟수를 나타낸다. 정수 값으로 0에서 31 사이의 값 을 가진다. sftreg 쉬프트 연산에 사용되는 쉬프트 횟수를 간직하는 레지스터로 범용 레지스터 중의 하나를 뜻한다. 32비트 레지스터 가운데 하위 5비트가 사용된다. 1 LDAU, STAU 명령에서는 다른 의미를 가진다.

3.1. BINARY ENCODING 42 flag pos SET, CLR 명령에 사용되는 정수 값으로 상태 레지스터의 0에서 15 사이의 각 비트 를 나타낸다. or Counter Register의 number를 나타낸다. cpno 보조프로세서(Coprocessor)의 number를 나타낸다. 0에서 3 사이의 정수 값을 가진 다. src grp UNPACK 연산에 사용되는 연속된 두개의 범용 레지스터를 뜻한다. 하위에 0과 1 이 생략된 두 개의 범용 레지스터를 나타낸다.(예. 010-4,5번 레지스터)

3.1. BINARY ENCODING 43 Figure 3.1: Instruction Set Highlights Instruction f e d c b a 9 8 7 6 5 4 3 2 1 0 Mnemonic LD 0 0 0 0 dst offset idx LD (idx, off), dst ST 0 0 0 1 src offset idx ST src, (idx, off) LDB 0 0 1 0 dst 0 offset idx LDB (idx, off), dst LDS 0 0 1 0 dst 1 offset idx LDS (idx, off), dst STB 0 0 1 1 dst 0 offset idx STB src, (idx, off) STS 0 0 1 1 dst 1 offset idx STS src, (idx, off) LERI 0 1 imm LERI imm LDBU 1 0 0 0 dst 0 offset idx LDBU (idx, off), dst LDSU 1 0 0 0 dst 1 offset idx LDSU (idx, off), dst LD 1 0 0 1 dst 0 offset LD (SP, off), dst ST 1 0 0 1 src 1 offset ST src, (SP, off) LDI 1 0 1 0 dst imm LDI imm, dst PUSH 1 0 1 1 0 0 0 0 REG LIST(7,6,5,4,3,2,1,0) PUSH list PUSH 1 0 1 1 0 0 1 0 (15,14,13,12,11,10,9,8) PUSH list PUSH 1 0 1 1 0 1 0 0 (SR,PC,LR,ER,MH,ML,CR1,CR0) PUSH list POP 1 0 1 1 0 0 0 1 REG LIST(7,6,5,4,3,2,1,0) POP list POP 1 0 1 1 0 0 1 1 (15,14,13,12,11,10,9,8) POP list POP 1 0 1 1 0 1 0 1 (SR,PC,LR,ER,MH,ML,CR1,CR0) POP list LEA(ASPO) 1 0 1 1 0 1 1 0 offset LEA (SP, imm), SP MRS 1 0 1 1 0 1 1 1 0 imm dst MRS imm, dst 1 0 1 1 0 1 1 1 Reserved ADD 1 0 1 1 1 0 0 0 dst src/imm ADD src/imm, dst ADC 1 0 1 1 1 0 0 1 dst src/imm ADC src/imm, dst SUB 1 0 1 1 1 0 1 0 dst src/imm SUB src/imm, dst SBC 1 0 1 1 1 0 1 1 dst src/imm SBC src/imm, dst AND 1 0 1 1 1 1 0 0 dst src/imm AND src/imm, dst OR 1 0 1 1 1 1 0 1 dst src/imm OR src/imm, dst XOR 1 0 1 1 1 1 1 0 dst src/imm XOR src/imm, dst CMP 1 0 1 1 1 1 1 1 dst src/imm CMP src/imm, dst ASR 1 1 0 0 dst 0 sftamt 0 0 ASR sftamt, dst LSR 1 1 0 0 dst 0 sftamt 0 1 LSR sftamt, dst ASL 1 1 0 0 dst 0 sftamt 1 0 ASL sftamt, dst SSL 1 1 0 0 dst 0 sftamt 1 1 SSL sftamt, dst ASR 1 1 0 0 dst 1 0 sftreg 0 0 ASR sftreg, dst LSR 1 1 0 0 dst 1 0 sftreg 0 1 LSR sftamt, dst ASL 1 1 0 0 dst 1 0 sftreg 1 0 ASL sftreg, dst SSL 1 1 0 0 dst 1 0 sftreg 1 1 SSL sftreg, dst

3.1. BINARY ENCODING 44 Instruction f e d c b a 9 8 7 6 5 4 3 2 1 0 Mnemonic ADDQ 1 1 0 0 dst 1 1 0 imm ADDQ imm, dst CMPQ 1 1 0 0 dst 1 1 1 imm CMPQ imm, src JNV 1 1 0 1 0 0 0 0 offset JNV lable JV 1 1 0 1 0 0 0 1 offset JV lable JP 1 1 0 1 0 0 1 0 offset JP lable JM 1 1 0 1 0 0 1 1 offset JM lable JNZ 1 1 0 1 0 1 0 0 offset JNZ lable JZ 1 1 0 1 0 1 0 1 offset JZ lable JNC 1 1 0 1 0 1 1 0 offset JNC lable JC 1 1 0 1 0 1 1 1 offset JC lable JGT 1 1 0 1 1 0 0 0 offset JGT lable JLT 1 1 0 1 1 0 0 1 offset JLT lable JGE 1 1 0 1 1 0 1 0 offset JGE lable JLE 1 1 0 1 1 0 1 1 offset JLE lable JHI 1 1 0 1 1 1 0 0 offset JHI lable JLS 1 1 0 1 1 1 0 1 offset JLS lable JMP 1 1 0 1 1 1 1 0 offset JMP lable JAL 1 1 0 1 1 1 1 1 offset JAL lable EXTB 1 1 1 0 0 0 0 0 0 0 0 0 dst EXTB dst EXTS 1 1 1 0 0 0 0 0 0 0 0 1 dst EXTS dst MFMRE 1 1 1 0 0 0 0 0 0 0 1 0 dst MFMRE dst MTMRE 1 1 1 0 0 0 0 0 0 0 1 1 src MTMRE src CVB 1 1 1 0 0 0 0 0 0 1 0 0 dst CVB dst CVS 1 1 1 0 0 0 0 0 0 1 0 1 dst CVS dst NEG 1 1 1 0 0 0 0 0 0 1 1 0 dst NEG dst NOT 1 1 1 0 0 0 0 0 0 1 1 1 dst NOT dst JR 1 1 1 0 0 0 0 0 1 0 0 0 src JR src JALR 1 1 1 0 0 0 0 0 1 0 0 1 src JALR src JPLR 1 1 1 0 0 0 0 0 1 0 1 0 JPLR NOP 1 1 1 0 0 0 0 0 1 0 1 1 NOP SWI 1 1 1 0 0 0 0 0 1 1 0 0 imm SWI exception_no STEP 1 1 1 0 0 0 0 0 1 1 0 1 STEP HALT 1 1 1 0 0 0 0 0 1 1 1 0 imm HALT halt_level BRKPT 1 1 1 0 0 0 0 0 1 1 1 1 BRKPT CNT0 1 1 1 0 0 0 0 1 0 0 0 0 src CNT0 src CNT1 1 1 1 0 0 0 0 1 0 0 0 1 src CNT1 src SET 1 1 1 0 0 0 0 1 0 0 1 0 flag pos SET position CLR 1 1 1 0 0 0 0 1 0 0 1 1 flag pos CLR position MTML 1 1 1 0 0 0 0 1 0 1 0 0 src MTML src MTMH 1 1 1 0 0 0 0 1 0 1 0 1 src MTMH src MFML 1 1 1 0 0 0 0 1 0 1 1 0 dst MFML dst MFMH 1 1 1 0 0 0 0 1 0 1 1 1 dst MFMH dst MTCR0 1 1 1 0 0 0 0 1 1 0 0 0 src MTCR0 src MTCR1 1 1 1 0 0 0 0 1 1 0 0 1 src MTCR1 src SYNC 1 1 1 0 0 0 0 1 1 0 1 0 SYNC EXJ 1 1 1 0 0 0 0 1 1 0 1 1 EXJ LEA(LSEA) 1 1 1 0 0 0 0 1 1 1 0 0 idx LEA (idx, imm), SP LEA(LESA) 1 1 1 0 0 0 0 1 1 1 0 1 dst LEA (SP, imm), dst MFCR0 1 1 1 0 0 0 0 1 1 1 1 0 dst MFCR0 dst MFCR1 1 1 1 0 0 0 0 1 1 1 1 1 dst MFCR1 dst AVGB 1 1 1 0 0 0 1 0 dst 0 src/imm AVGB src/imm, dst AVGS 1 1 1 0 0 0 1 0 dst 1 src/imm AVGS src/imm, dst

3.1. BINARY ENCODING 45 Instruction f e d c b a 9 8 7 6 5 4 3 2 1 0 Mnemonic TST 1 1 1 0 0 0 1 1 src2 src1 TST src1, src2 LEA 1 1 1 0 0 1 0 0 dst idx LEA (idx, imm), dst ROR 1 1 1 0 0 1 0 1 0 imm dst ROR imm, dst ROL 1 1 1 0 0 1 0 1 1 imm dst ROL imm, dst MUL 1 1 1 0 0 1 1 0 dst 0 src/imm MUL src/imm, dst MULU 1 1 1 0 0 1 1 0 dst 1 src/imm MULU src/imm, dst MAC 1 1 1 0 0 1 1 1 src2 src1/imm MAC src1/imm, src2 LDB 1 1 1 0 1 0 0 0 0 offset dst LDB (SP, imm), dst LDS 1 1 1 0 1 0 0 0 1 offset dst LDS (SP, imm), dst LDBU 1 1 1 0 1 0 0 1 0 offset dst LDBU (SP, imm), dst LDSU 1 1 1 0 1 0 0 1 1 offset dst LDSU (SP, imm), dst STB 1 1 1 0 1 0 1 0 0 offset src STB src, (SP, imm) STS 1 1 1 0 1 0 1 0 1 offset src STS src, (SP, imm) LDAU 1 1 1 0 1 0 1 1 0 idx cr dst LDAU CRNO, idx, dst STAU 1 1 1 0 1 0 1 1 1 idx cr src STAU CRNO, src, idx CPCMD 1 1 1 0 1 1 cpno 0 0 cpcmd CPCMD CPNO, cpcmd GETCn 1 1 1 0 1 1 cpno 0 1 0 0 status GETC CPNO, bit_position EXECn 1 1 1 0 1 1 cpno 0 1 0 1 status EXEC CPNO, bit_position MVTCn 1 1 1 0 1 1 cpno 0 1 1 0 dst MVTC CPNO, cpdst MVFCn 1 1 1 0 1 1 cpno 0 1 1 1 src MVFC CPNO, cpdst LDCn 1 1 1 0 1 1 cpno 1 0 0 0 dst LDC CPNO, (R1, imm), cpdst LDCn 1 1 1 0 1 1 cpno 1 0 0 1 dst LDC CPNO, (SP, imm), cpdst STCn 1 1 1 0 1 1 cpno 1 0 1 0 src STC CPNO, cpsrc, (R1, imm) STCn 1 1 1 0 1 1 cpno 1 0 1 1 src STC CPNO, cpsrc, (SP, imm) 1 1 1 0 1 1 1 1 Reserved MACB 1 1 1 1 0 0 0 0 src2 src1/imm MACB src1/imm, src2 MACS 1 1 1 1 0 0 0 1 src2 src1/imm MACS src1/imm, src2 MSOPB 1 1 1 1 0 0 1 0 src2 src1/imm MSOPB src1/imm, src2 MSOPS 1 1 1 1 0 0 1 1 src2 src1/imm MSOPS src1/imm, src2 SADDB 1 1 1 1 0 1 0 0 dst src/imm SADDB src/imm, dst SADDS 1 1 1 1 0 1 0 1 dst src/imm SADDS src/imm, dst SADUB 1 1 1 1 0 1 1 0 dst src/imm SADUB src/imm, dst SADUS 1 1 1 1 0 1 1 1 dst src/imm SADUS src/imm, dst SADD 1 1 1 1 1 0 0 0 dst src/imm SADD src/imm, dst UPKLS 1 1 1 1 1 0 0 1 src_grp 0 dst UPKLS src_grp, dst UPKHS 1 1 1 1 1 0 0 1 src_grp 1 dst UPKHS src_grp, dst MIN 1 1 1 1 1 0 1 0 dst 0 src/imm MIN src/imm, dst MAX 1 1 1 1 1 0 1 0 dst 1 src/imm MAX src/imm, dst ABS 1 1 1 1 1 0 1 1 0 0 0 0 dst ABS dst 1 1 1 1 1 0 1 1 Reserved UPK0LB 1 1 1 1 1 1 0 0 src_grp 0 dst UPK0LB src_grp, dst UPK0HB 1 1 1 1 1 1 0 0 src_grp 1 dst UPK0HB src_grp, dst UPK1LB 1 1 1 1 1 1 0 1 src_grp 0 dst UPK1LB src_grp, dst UPK1HB 1 1 1 1 1 1 0 1 src_grp 1 dst UPK1HB src_grp, dst UPK2LB 1 1 1 1 1 1 1 0 src_grp 0 dst UPK2LB src_grp, dst UPK2HB 1 1 1 1 1 1 1 0 src_grp 1 dst UPK2HB src_grp, dst UPK3LB 1 1 1 1 1 1 1 1 src_grp 0 dst UPK3LB src_grp, dst UPK3HB 1 1 1 1 1 1 1 1 src_grp 1 dst UPK3HB src_grp, dst

3.2. MEMORY ACCESS 46 3.2 Memory Access AE32000 프로세서에서 지원되는 메모리 접근 명령들은 표. 3.1에 나열되어 있다. Table 3.1: Memory Access Instructions Class Details Mnemonic Load Word LD (%Ri/%SP, imm), %Rd Byte (unsigned) Byte (signed) Short (unsigned) Short (signed) Word (auto increment) LDBU (%Ri/%SP, imm), %Rd LDB (%Ri/%SP, imm), %Rd LDSU (%Ri/%SP, imm), %Rd LDS (%Ri/%SP, imm), %Rd LDAU CRNO, %Ri, %Rd Load Multiple Pop POP reg list Store Word ST %Rs, (%Ri/%SP, imm) Byte Short Word (auto increment) STB %Rs, (%Ri/%SP, imm) STS %Rs, (%Ri/%SP, imm) STAU CRNO, %Rs, %Ri Store Multiple Push PUSH reg list Byte, Short(Half Word), Word 크기로 접근이 가능하며, Load의 경우 Byte/Short 크 기의 데이터를 signed/unsigned extension을 통해 32비트 레지스터에 채울 수 있다. PUSH/POP 명령은 하나의 명령을 통해 다수의 레지스터에 대한 Load/Store를 할 수 있다. LD/ST auto increment 명령어들은 AE32000C 버젼에서 지원하는 DSP연산(Auto Increment Mode)을 강화하기 위해 추가되었다.

3.3. MOVE 47 3.3 Move AE32000에서 지원되는 레지스터간의 데이터 이동 명령들은 표. 3.2에 나열되어 있다. Table 3.2: Move Instructions Class Details Mnemonic Move Move MOV %s, %d Move with add Move from GPR to MH Move from GPR to ML Move from MH to GPR Move from ML to GPR Move from GPR to MRE Move from MRE to GPR Move from GPR to CR0 Move from GPR to CR1 Move from CR0 to GPR Move from CR1 to GPR LEA (%Rs/%SP, imm), %Rd/%SP MTMH %Rs MTML %Rs MFMH %Rd MFML %Rd MTMRE %Rs MFMRE %Rd MTCR0 %Rs MTCR1 %Rs MFCR0 %Rd MFCR1 %Rd 범용 레지스터간의 데이터 이동은 MOV 명령을 사용한다. 범용 레지스터와 스택 포이터간의 데이터 이동은 LEA 명령을 사용하며, 이동시에 즉치값을 같이 더하여 이동할 수 있다. 이때 즉치값은 32비트 singed number 이므로, 실제적으로 가/감산이 가능하다. 범용 레지스터와 특수 목적 레지스터간의 데이터 이동은 MTxx, MFxx 명령을 사용 하며, 즉치값이 더해질 수 없다. 단, 음영 부분의 명령어는 AE32000C에서만 지원한다.

3.4. BRANCH 48 3.4 Branch 분기 명령은 프로그램의 흐름을 제어하는 동작을 수행하는 명령으로서, 조건 분기와 무 조건 분기로 나뉜다. AE32000 프로세서에서는 코드 밀도를 향상시키기 위하여 다양한 형태의 조건 분기를 지원한다. 분기 명령들은 표. 3.3에 나열되어 있다. Table 3.3: Branch Instructions Class Details Mnemonic Branch Jump JMP label Jump and Link Jump on overflow clear Jump on overflow set Jump on sign clear (positive or zero) Jump on sign set (negative) Jump on non-zero (not equal) Jump on zero (equal) Jump carry clear (unsigned higher or equal) Jump carry set (unsigned lower) Jump signed greater Jump signed less Jump signed greater or equal Jump signed less or equal Jump unsigned higher Jump unsigned lower or equal Jump register indirect Jump register indirect and Link Jump to LR(Link Register) JAL label JNV label JV label JP label JN label JNZ label JZ label JNC label JC label JGT label JLT label JGE label JLE label JHI label JLS label JR %Rs JALR %Rs JPLR 분기의 목적 주소는 다음 두 가지 형태로 지정할 수 있다. PC-relative : 현재 PC값을 기준으로 offset 만큼 분기하는 방식으로 가장 일 반적으로 사용되는 형태이다. offset의 값은 32bit singend값이 될 수 있어 가/ 감산이 가능하다. Register indirect : 범용 레지스터의 값을 이용해 분기하는 방식으로서, dynamic linked library 등의 함수를 연결할 때 사용된다. AE32000 프로세서의

3.4. BRANCH 49 구현에서는 PC-relative 방식보다 더 많은 분기 패널티가 존재한다. JAL, JALR 명령은 분기의 시점에서 현재 PC값을 LR(Link Register)에 저장하며, JPLR 명령을 통해 복귀할 수 있다.

3.5. ARITHMETIC & LOGICAL 50 3.5 Arithmetic & Logical AE32000 프로세서에서는 기본적인 산술 연산 이외에 DSP에서 사용할 수 있는 다양한 연산 기능(32비트 배럴 쉬프트, MAC연산, leading 0/1 count)을 제공한다. Table 3.4: Arithmetic & Logical Instructions Class Details Mnemonic flag Arithmetic Add ADD %Rs/imm, %Rd C Z S V Add with short immediate ADDQ imm5, %Rd C Z S V Add with carry ADC %Rs/imm, %Rd C Z S V Substract SUB %Rs/imm, %Rd C Z S V Substract with carry SBC %Rs/imm, %Rd C Z S V Negate NEG %Rd Logical AND AND %Rs/imm, %Rd Z S OR OR %Rs/imm, %Rd Z S XOR XOR %Rs/imm, %Rd Z S NOT NOT %Rd Z S Test TST %Rs1/imm, %Rs2 Z S Compare Compare CMP %Rs1/imm, %Rs2 C Z S V Compare with short immediate CMPQ imm5, %Rs C Z S V Shift Arithmetic shift right ASR %Rc/imm5, %Rd C Z S Logical shift right LSR %Rc/imm5, %Rd C Z S Arithmetic shift left ASL %Rc/imm5, %Rd C Z S Set shift left SSL %Rc/imm5, %Rd C Z S Multiply Multiply MUL %Rs/imm, %Rd Multiply unsigned Multiply and accumulate MULU %Rs/imm, %Rd MAC %Rs/imm, %Rs2 Misc Extension from byte to word EXTB %Rd Z S Extension from short to word EXTS %Rd Z S Convert from word to byte CVB %Rd Z S Convert from word to short CVS %Rd Z S Count leading zero CNT0 %Rs Z Count leading one CNT1 %Rs Z

3.5. ARITHMETIC & LOGICAL 51 각 연산의 결과에 의해 변경되는 flag는 표. 3.4에 표시되어 있다. 대부분의 연산 기능의 경우 %Rs 대신 즉치값을 이용하는 것이 가능하며, 이때 즉치 값은 32bit singed number가 된다. MUL, MULU 연산의 %Rd는 짝수 범용 레지스터(R0, R2, R4,...)만 가능하다.

3.6. COPROCESSOR ACCESS 52 3.6 Coprocessor Access AE32000 프로세서는 시스템 보조 프로세서 이외에 3개 까지의 보조 프로세서를 연결하는 것이 가능하다. 보조 프로세서를 접근하기 위한 명령들은 표. 3.5에 나열되어 있다. Table 3.5: Coprocessor Access Instructions Class Details Mnemonic flag Coprocessor Instruction CPCMD coproc command Move from Coproc. to GPR MVFC %Rd@CP Move from GPR to Coproc. MVTC %Rd@CP Check status bit in Coproc. GETC imm4 Z Load from memory to Coproc. LDC CPNO, (%Ri, imm), %Rd@CP Store from Coproc. to memory STC CPNO, %Rs@CP, (%Ri, imm) Exception on Coproc. status EXEC imm4 Z MVTC, MVFC 명령은 범용 레지스터 0번을 이용한 데이터 전달만 가능하다. LDC, STC 명령은 시스템 보조 프로세서와 같이 사용될 수 없다. LDC, STC 명령의 인덱스 레지스터는 스택 포인터 또는 범용 레지스터 2 1번이 이 용된다. EXEC 명령은 보조 프로세서의 상태 비트를 이용하여 Coprocessor Interrupt를 발 생시킨다. 2 스택 포인터를 이용한 이유는 스택 기반의 주소 indexing이 빈번하기 때문이며, GPR 1 번의 경우는 명령어 인코딩 용량 관계로 임의로 지정하여 사용하였다.