Computer Architecture Lab/Winter2006/JeitMossFrühRamb/ISA

Introduction
MatPRO is a pipelined CoProzessor that handels 4x4 Matrix-Operations like addition or multiplication. It's equipped with a SimpCom-Interface to ensure an easy transport connection to existing SoC-Solutions.

key data

 * 16 bit Coprocessor for handling Matrix-Arithmetics
 * Dimension of Matrix is 4x4
 * basic datatype is 16 bit signed Integer
 * 3 Matrix-Registers
 * 16 general purpose 16 bit Registers
 * SIMD (Single Instruction Multiple Data) - Architecture

Instruction formats
To keep things simple, our instructions are all codeable in 16 bit. Besides this, all OP-Codes are 4 bit coded.

We distinguish between 5 different Instruction formats:


 * 3 Opperand - Instructions


 * 2 Opperand - Instructions


 * 1 Opperand - Instructions


 * Load/Store Word - Instructions


 * Load/Store Matrix - Instructions


 * Conditional - Instructions

Instructions
At the moment, we plan to implement 14 different instructions:

Special purpose of OPCode
Since we are using 4 bit to code the desired register, only 16 Registers are possible to address. As mentioned at the beginning, we are using 32 registers (16 Matrix-Registers and 16 "normal" registers). So how do we know which register is meant to be read?

Here comes the OPCode into play.

If you analyze the OPCode, you will notice, that the first 2 bits of it decide what to do:
 * 00xx: those are operations that don't to anything with a Matrix
 * 01xx: those are load or store instructions
 * 10xx: the sourceregisters are the Matrix-Registers
 * 11xx: The first sourceregister is a Matrix and the second sourceregister is a 16 bit value

Assembler
Legend:

m0,m1,...,mF ... Matrix-Registers

i0,i1,...,iF ... 16 bit Integer - Registers

addr8 ... 8 bit Address

addr10 ... 10 bit Address

addr12 ... 12 bit Address

imm8  ... 8 bit signed immediate

Assembler:

Assembler.zip

Block Diagramm
The matrix processor (MatPro) is designed as a coprocessor an communicates with the main processor (JOP in this case) with the SimpCon Interface. The memory is separated into a data cache and a instruction cache to keep the memory access simple. The data cache is double buffered to allow a more efficient data transfer beween the processors. The main processor writes all data and instuctions in the caches and sets RUN, then MatPro starts it's program and sets READY when the program execution is done.