mirror of
https://github.com/supleed2/ELEC50010-IAC-CW.git
synced 2024-12-22 21:35:48 +00:00
Add information on MIPS
This commit is contained in:
parent
d90b7d3971
commit
37e8924001
60
MIPS.txt
Normal file
60
MIPS.txt
Normal file
|
@ -0,0 +1,60 @@
|
|||
MIPS 32 bits
|
||||
|
||||
== Bits, Bytes, Hex ==
|
||||
-- 8 bits = 1 byte = 2 hex
|
||||
-- 32 bits = 4 bytes = 8 hex
|
||||
-- e.g. 00000000 00000000 00000000 00000000 -> 0x00000000
|
||||
|
||||
== CPU ==
|
||||
inputs:
|
||||
-- manual MIPS assembly code -> instructions in binaries
|
||||
-- C code -> compiled c program under mips -> disassemble binaries -> assembly code -> instruction in binaries
|
||||
-- these binary instructions goes into instruction memory
|
||||
outputs:
|
||||
-- output of the instructions
|
||||
errors:
|
||||
-- ?????? how do we detect errors ??????
|
||||
|
||||
== Submodules ==
|
||||
-- ALU
|
||||
-- Register File
|
||||
-- Data Memory
|
||||
-- Instruction Register
|
||||
-- PC
|
||||
-- Control Unit
|
||||
|
||||
== Testbench ==
|
||||
-- ????? not so sure yet ?????
|
||||
|
||||
== Endianess ==
|
||||
-- big endian: bytes are numbered starting with byte 0 at MSB
|
||||
-- use -EB flag to ensure big endian
|
||||
|
||||
== Instruction Access ==
|
||||
-- PC (program counter): 32 bit register
|
||||
-- PC is initialised to 0xBFC00000
|
||||
-- PC changed as instructions are executed
|
||||
-- IR = Mem[PC] -> instruction is fetched from data memory using data at the address given by program counter
|
||||
|
||||
Address bus: CPU -> Memory
|
||||
Data bus: CPU <=> Memory
|
||||
|
||||
== Register File ==
|
||||
-- 32 general-purpose registers
|
||||
|
||||
== Program Counter ==
|
||||
-- PC is just a 32 bit register in which the value (address of instruction) get updated by other blocks
|
||||
-- Controlled by PCSrc (for branching or regular increment by 4 bytes)
|
||||
|
||||
== Questions ==
|
||||
Pseudo-instructions -> how to deal with them -> convert to actual instructions?
|
||||
Do we implement big-endian mips?
|
||||
What verilator could be useful for
|
||||
How would a testbench in c++ be helpful?
|
||||
Don't understand that part where we need to implement cache
|
||||
|
||||
== Todo ==
|
||||
Testbench in c++
|
||||
Cache
|
||||
CPU stall cycle
|
||||
|
Loading…
Reference in a new issue