Difference between revisions of "CPUProject"

From ATI public wiki
Jump to: navigation, search
(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...")
 
 
(77 intermediate revisions by 2 users not shown)
Line 1: Line 1:
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:
+
CPU project is one of the projects designed in department of computer engineering at TTU as a lab project to provide students with some tools for studying CPU architecture.
* Developing a generic CPU without any fancy feature
+
* Writing a compiler for it
+
* Compiling GCC for this architecture
+
* Booting a light linux on it
+
= 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)==
+
= CPU implementations =
The following instrcutions designed for the CPU:
+
Currently, there are two different CPU implementations:
{| class="wikitable"
+
* [[picoCPU]]: a very simple, simulation oriented CPU written in VHDL.
|-
+
* A [[More Advanced CPU]]: a synthesizable CPU written in VHDL. It has also some more advanced features compared to the picoCPU, like stack, pipeline, etc.
! 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
+
  
== Functional Testing ==
+
= picoAssembler =
 
+
PicoAssembler is a simple, reconfigurable assembler that can be used together with the processors described above
= Assembler =
+
More info on this can be found on the [[PicoAssembler user manual and syntax reference]] page.
 
+
= Compiler =
+

Latest revision as of 15:32, 24 November 2015

CPU project is one of the projects designed in department of computer engineering at TTU as a lab project to provide students with some tools for studying CPU architecture.

CPU implementations

Currently, there are two different CPU implementations:

  • picoCPU: a very simple, simulation oriented CPU written in VHDL.
  • A More Advanced CPU: a synthesizable CPU written in VHDL. It has also some more advanced features compared to the picoCPU, like stack, pipeline, etc.

picoAssembler

PicoAssembler is a simple, reconfigurable assembler that can be used together with the processors described above More info on this can be found on the PicoAssembler user manual and syntax reference page.