620 likes | 1.24k Views
VHDL 을 이용한 8- bit Microprocessor 설계. 한국외국어대학교 전자공학과 CAD / VLSI LAB. Computer Systems Layer Model 표. Microprocessor 설계(1). Microprocessor 설계(2). 기본적인 출발은 명령어구조( Instruction Set Architecture) 이다. 이 명령어 구조는 software 와 hardware 의 중간 매개체 역할을 한다. 설계과정
E N D
VHDL을 이용한 8-bit Microprocessor 설계 한국외국어대학교 전자공학과 CAD / VLSI LAB.
Computer Systems Layer Model 표 Microprocessor 설계(1)
Microprocessor 설계(2) • 기본적인 출발은 명령어구조(Instruction Set Architecture)이다. • 이 명령어 구조는 software와 hardware 의 중간 매개체 역할을 한다. • 설계과정 • 명령어 구조를 기반으로 계층적인 설계를 통해 Top-down 방식으로 이루어진다. • 설계 방식에 따라 내부 버스의 구조, ALU의 구조, Cache구조 등을 설계 해야 한다.
8-bit Microprocessor 의 설계 • 8-bit Simple Instruction Set Computer (8-bit SISC) • 8-bit wide instructions and data • Single register - Accumulator only • Only 8 instructions • Fixed-length, single format instructions • 5-bit addressable memory space • Direct addressing mode only
Instruction Format Instruction Set Architecture(8bit) • Register
Pin Timing(1) • 여기서의 MEM_CLK는 메모리가 있을 때를 가정하고 생각한다. • CLK and MEM_CLK are in the opposite phase. • All internal registers in the CPU are rising-edge-triggered. • Memory address and enables are sampled on the rising edge of MEM_CLK. • On memory read, valid memory data is driven when MEM_CLK is high. • On memory write, memory data is sampled on the rising edge of MEM_CLK.
Instruction Types and Execution Steps(1) • 각 명령어는 1 Cycle에 수행되는 것이 아니라, 3 ~ 4번의 clock cycle을 통해 수행된다. • 각 단계별 수행 내용은 다음 장의 표와 같다. • 각 단계별로 수행되는 내용을 바탕으로 Microprocessor의 Data Path 및 제어부를 설계하여야 한다.
SISC 형태의 구현(1) • 먼저 top level의 schematic을 아래와 같이 보였다.
SISC 형태의 구현(2) • 각 단자(pin)의 이름 및 신호의 명칭은 아래와 같다. • SISC • CLK External CPU Clock input • RESET External Reset input • WRITE Memory Write Enable output • READ Memory Read Enable output • MEM_ADDR[4:0] Memory Address output • MEM_DATA_IN[7:0]Memory Read Data input • MEM_DATA_IN[7:0]Memory Write Data output
SISC 형태의 구현(3) • MEMORY • READ Memory Write Enable input • WRITE Memory Read Enable input • MEM_ADDR[4:0] Memory Address input • MEM_DATA_IN[7:0]Memory Read Data output • MEM_DATA_out[7:0]Memory Write Data input
명령어 Timing(1) • Store Instruction Timing
명령어 Timing(2) • Add, And, Xor, Load Instructions Timing
명령어 Timing(3) • Jump Instruction Timing
명령어 Timing(4) • Skip-If-Zero Instruction Timing
명령어 Timing(5) • Halt Instruction Timing
Microprocessor 검증(1) • 설계 내용을 VHDL로 기술하고 메모리 부분에는 Fibonacci 수열 계산 프로그램을 넣고, 시뮬레이션을 수행하여 결과를 얻을 수 있다. • 주의: 이 프로젝트에서는 메모리 대신, 직접 입력으로 값을 주었다.
00000 10111111 start: Load Xn 00001 01011110 Add Xn-1 00010 11011010 Store tmp 00011 10111111 Load Xn 00100 11011110 Store Xn-1 00101 10111010 Load tmp 00110 11011111 Store Xn 00111 10111101 Load n 01000 01011011 Add one 01001 11011101 Store n 01010 10011100 Xor Last_n 01011 00100000 Skip-if-zero 01100 11100000 Jump start 01101 00000000 Halt 11010 dddddddd tmp: X 11011 00000001 one: 1 11100 00001010 Last_n: 10 11101 00000000 n: 0 11110 00000001 Xn-1: 1 11111 00000001 Xn: 1 Microprocessor 검증(2) 앞에서 언급한 Fibonacci 수열 계산 프로그램은 다음과 같다.Fibonacci Series Computation : Xn <- Xn-1 + Xn-2, X0=1, X1=1
SISC의 VHDL로의 구현(1) • 앞의 미세구조에서 표현한 schematic을 여러 block으로 나누어 설계 • 크게 10개의 block으로 나누어 생각 • 메모리는 설계를 하지 않음. 대신 메모리에 해당하는 파형을 simulation을 할 때 직접 넣어 준다. • 실제 사용되는 핀은 다음과 같이 7개이다. • CLK, RESET, READ, WRITE, MEM_ADDR, MEM_DATA_IN, MEM_DATA_OUT
SISC의 VHDL로의 구현(2) • MDR(Memory Data Register) block • 기능 • 데이터 메모리를 일시적으로 기억 • 특징 • IR레지스터와 같이 데이터를 기억 • 파일과 entity 이름은 REG • 동작 • LD = ‘1’인 경우에 동작 • Clock = ‘1’이고 rising edge(clock event가 발생)일때 REG_IN 에 입력된 값을 REG_OUT 으로 보냄
SISC의 VHDL로의 구현(3) • IR(Instruction Register) block • 기능 • 메모리에서 읽은 명령어를 기억 • 특징 • MDR레지스터와 같은 역할 • 파일과 entity 이름은 REG 이다. • VHDL 표현과 출력 파형 • MDR 레지스터와 같다.
SISC의 VHDL로의 구현(4) • ALU(Arithmetic Logic Unit) block • 기능 • 5 가지의 연산(ADD, AND, XOR, Load, Store) • 입.출력 변수 OPCODE : Instruction 입력 (3-bit) OP1, OP2 : 연산하고자 하는 데이터 (각 8-bit) ALU_OUT : 연산 후 출력되는 결과 (8-bit) • 특징 • OPCODE에 따라 연산 수행 • Array 연산을 하기 위해 use IEEE.std_logic_unsigned.all; 구문을 사용한다.
SISC의 VHDL로의 구현(5) • FLAG block • 기능 • ALU연산의 결과(Accumulator에 저장되는 값)이 ‘0’ 인가의 여부를 조사하여 ‘0’ 이면 ‘1’ 을, 그렇지 않으면 ‘0’ 을 출력한다. • 결과가 ‘1’ 이면 PC(명령어 주소)를 ‘1’ 증가시키고, ‘0’ 이면 그대로 둔다. • 동작 • CLK = ‘1’이고 rising edge일 때 ALU의 결과가 ‘0’이면 SET(1) 값을 출력한다.
SISC의 VHDL로의 구현(6) • ACC(Accumulator) block • 기능 • ALU 연산의 결과를 잠시 저장하는 역할 • Data 폭이 8-bit인 레지스터 • 입.출력 변수 CLK : RESET : ‘1’이면 Accumulator 값을 ‘0’으로 초기화 LD : ‘1’이면 값 저장가능 ACC_IN : 입력되는 ALU의 출력 (8-bit) ACC_OUT : Accumulator의 출력 (8-bit) • 동작 • Rising edge에서 동작
SISC의 VHDL로의 구현(7) • IR_BUF block • 기능 • Instruction이나 데이터가 메모리에서 읽혀 잠시 저장되거나, 계산된 데이터가 메모리에 저장되기 전에 결과를 잠시 저장하는 부분이다. • 동작 • RW 값에 따라 메모리에 값을 읽거나 저장 RW = ‘1’ ALU에서 계산된 값을 메모리에 write 함 RW = ‘0’ 데이터나 Instruction 들을 메모리에서 읽어 옴
SISC의 VHDL로의 구현(8) • PC_LOGIC block • 기능 • PC(Program Counter)를 1 씩 증가 시켜 다음으로 수행될 주소를 지정하거나, 새로운 주소를 갖게 한다. • 동작 • INC_PC = ‘1’ 이고 LD_PC = ‘1’ 이면 PC_IN을 ‘1’ 증가시켜 출력
SISC의 VHDL로의 구현(9) • ADDR_MUX block • 기능(1) • 프로그램 메모리의 주소 나타냄 • 입.출력 변수 A : PC_LOGIC block 으로부터 오는 data (5-bit) B : IR block 에서 오는 data (5-bit) SEL : ‘1’이면 A 선택, ‘0’이면 B 선택 MUX_OUT : 선택된 값 출력 (5-bit) • 두 개의 입력 중 SISC가 수행하고자 하는 연산에 맞는 값을 출력
기능(2) • 예) Instruction을 수행하고자 할 때, IR 레지스터에서 오는 값을 출력하고, 메모리를 가리켜 데이터를 읽거나 쓰고자 하면 PC_LOGIC으로부터 오는 값을 출력 • Data 폭이 5bit 짜리인 Multiplexer 사용
SISC의 VHDL로의 구현(10) • STATE block • 기능 • 하나의 Instruction은 보통 3-4개의 Cycle로 동작 • 이 블록은 현재의 상태를 나타냄 • 특징 • RESET = ‘1’이면, 다시 Instruction Cycle이 처음부터 시작
SISC의 VHDL로의 구현(11) • CONTROL block • 기능 • 3-bit Op-code의 명령어와 4 단계로 구분되는 Instruction Cycle에 따라, 마이크로 프로세서의 각 데이터 연산 블록에 대한 여러 가지 제어 신호를 내보내는 역할을 한다. • 제어 신호는 Multiplexer에 대한 선택 신호나 메모리를 읽고 쓰는 신호, 레지스터의 Enable신호이다. • 각 단계에서의 동작은 앞 내용 참조