CPUProject
From ATI public wiki
								Revision as of 18:51, 4 December 2014 by Siavoosh (Talk) (Created page with "CPU project is one of the projects designed in department of computer engineering at TTU as a lab project. The main aims of this project are:  * Developing a generic CPU witho...")
CPU project is one of the projects designed in department of computer engineering at TTU as a lab project. The main aims of this project are:
- Developing a generic CPU without any fancy feature
 - Writing a compiler for it
 - Compiling GCC for this architecture
 - Booting a light linux on it
 
Contents
CPU Design
Functionality Requirements
The CPU is supposed to be able to perform the following operations:
- Addition/Subtraction
 - Increment/Decrement
 - Arithmetic and Logical Shift
 - Bitwise AND, OR, XOR and NOT
 - Negation
 - Load/Store
 - Unconditional Branch (jump)
 - Branch if zero / Branch if Overflow / Branch if Carry
 - Clear Registers/Flags
 - PUSH / POP
 - NOP/HALT
 
Instruction Set Architecture (ISA)
The following instrcutions designed for the CPU:
| Instruction | Description | OpCode | DPU Command | Data To DPU | MemAddress | Next PC | 
|---|---|---|---|---|---|---|
| Add_A_B | A <-- A + B | Example | Example | Example | Example | Example | 
| Add_A_Mem | Example | Example | Example | Example | Example | Example | 
| Add_A_Dir | Example | Example | Example | Example | Example | Example | 
| Sub_A_B | Example | Example | Example | Example | Example | Example | 
| Sub_A_Mem | Example | Example | Example | Example | Example | Example | 
| Sub_A_Dir | Example | Example | Example | Example | Example | Example | 
| IncA | Example | Example | Example | Example | Example | Example | 
| DecA | Example | Example | Example | Example | Example | Example | 
| And_A_B | Example | Example | Example | Example | Example | Example | 
| OR_A_B | Example | Example | Example | Example | Example | Example | 
| XOR_A_B | Example | Example | Example | Example | Example | Example | 
| FlipA | Example | Example | Example | Example | Example | Example | 
| NegA | Example | Example | Example | Example | Example | Example | 
| Jmp | Example | Example | Example | Example | Example | Example | 
| JmpZ | Example | Example | Example | Example | Example | Example | 
| JmpOV | Example | Example | Example | Example | Example | Example | 
| Jmp_rel | Example | Example | Example | Example | Example | Example | 
| JMPEQ | Example | Example | Example | Example | Example | Example | 
| ClearZ | Example | Example | Example | Example | Example | Example | 
| ClearOV | Example | Example | Example | Example | Example | Example | 
| LoadPC | Example | Example | Example | Example | Example | Example | 
| SavePC | Example | Example | Example | Example | Example | Example | 
| ShiftArithR | Example | Example | Example | Example | Example | Example | 
| ShiftArithL | Example | Example | Example | Example | Example | Example | 
| ShiftA_R | Example | Example | Example | Example | Example | Example | 
| ShiftA_L | Example | Example | Example | Example | Example | Example | 
| Load_A_Mem | Example | Example | Example | Example | Example | Example | 
| Store_A_Mem | Example | Example | Example | Example | Example | Example | 
| Load_B_Dir | Example | Example | Example | Example | Example | Example | 
| Load_B_Mem | Example | Example | Example | Example | Example | Example | 
| JmpC | Example | Example | Example | Example | Example | Example | 
| ClearC | Example | Example | Example | Example | Example | Example | 
| ClearACC | Example | Example | Example | Example | Example | Example | 
| RRC | Example | Example | Example | Example | Example | Example | 
| PUSH | Example | Example | Example | Example | Example | Example | 
| POP | Example | Example | Example | Example | Example | Example | 
| RLC | Example | Example | Example | Example | Example | Example | 
| NOP | Example | Example | Example | Example | Example | Example | 
| HALT | Example | Example | Example | Example | Example | Example | 
Other instructions implementation
the follwoing instructions can be also implemented with the ones in IS:
- Call "function_name":
 
PUSH SavePC Push Jmp "function address" POP
- Return:
 
POP Add_A_Dir 4 LoadPC