takah29/arm-cpu
Armv5 single-cycle processor
README
Armv5 Single-Cycle Processor

Computed the Mandelbrot set with the implemented armv5-core.
- Icarus Verilog version 11.0
$ cd test
$ python run_program.py programs/fizzbuzz_hex.dat
- Opcode Rd, Rn, Src2
- AND, SUB, ADD, ORR, ,EOR, ADC, SBC, RSB, RSC, BIC, MVN
- Opcode Rn, Src2
- Opcode Rd, Rm, Rs/shamt5
- Opcode Rd, Src2
- Opcode Rd, Rn, Rm
- Opcode Rd, Rn, Rm, Ra
- MLA, UMULL, UMLAL, SMULL, SMLAL
- Opcode Rd, [Rn, ±Src2]
- IdxMode
- [Rn, ±Src2] (offset)
- [Rn], ±Src2 (postindex)
- [Rn, ±Src2]! (preindex)
- Opcode label
- Opcode Rm
- BX(Thumb state is not supported)


| Op |
Funct |
Instr7:4 |
Type |
|
Branch |
MemtoReg |
MemW |
ALUSrc |
ImmSrc |
RegW3 |
RegW1(BaseReg) |
RegSrc |
ALUOp |
PostIndex |
Mult |
| 00 |
0XXXXX |
0XX1 |
DP Reg |
|
0 |
0 |
0 |
0 |
XX |
1 |
0 |
00 |
1 |
0 |
0 |
| 00 |
1XXXXX |
XXXX |
DP Imm |
|
0 |
0 |
0 |
1 |
00 |
1 |
0 |
00 |
1 |
0 |
0 |
| 00 |
000XXX |
1001 |
DP Multiply (32-bit) |
|
0 |
0 |
0 |
0 |
XX |
0 |
1 |
00 |
0 |
0 |
1 |
| 00 |
001XXX |
1001 |
DP Multiply (64-bit) |
|
0 |
0 |
0 |
0 |
XX |
1 |
1 |
00 |
0 |
0 |
1 |
| 00 |
010010 |
0001 |
BX |
|
1 |
0 |
0 |
0 |
XX |
0 |
0 |
00 |
0 |
0 |
0 |
| 01 |
01XX00 |
XXXX |
STR (Imm,Offset) |
|
0 |
0 |
1 |
1 |
01 |
0 |
0 |
00 |
0 |
0 |
0 |
| 01 |
11XX00 |
XXX0 |
STR (Reg,Offset) |
|
0 |
0 |
1 |
0 |
01 |
0 |
0 |
00 |
0 |
0 |
0 |
| 01 |
00XX00 |
XXXX |
STR (Imm,PostIdx) |
|
0 |
0 |
1 |
1 |
01 |
0 |
1 |
00 |
0 |
1 |
0 |
| 01 |
10XX00 |
XXX0 |
STR (Reg,PostIdx) |
|
0 |
0 |
1 |
0 |
01 |
0 |
1 |
00 |
0 |
1 |
0 |
| 01 |
01XX10 |
XXXX |
STR (Imm,PreIdx) |
|
0 |
0 |
1 |
1 |
01 |
0 |
1 |
00 |
0 |
0 |
0 |
| 01 |
11XX10 |
XXX0 |
STR (Reg,PreIdx) |
|
0 |
0 |
1 |
0 |
01 |
0 |
1 |
00 |
0 |
0 |
0 |
| 01 |
01XX01 |
XXXX |
LDR (Imm,Offset) |
|
0 |
1 |
0 |
1 |
01 |
1 |
0 |
00 |
0 |
0 |
0 |
| 01 |
11XX01 |
XXX0 |
LDR (Reg,Offset) |
|
0 |
1 |
0 |
0 |
01 |
1 |
0 |
00 |
0 |
0 |
0 |
| 01 |
00XX01 |
XXXX |
LDR (Imm,PostIdx) |
|
0 |
1 |
0 |
1 |
01 |
1 |
1 |
00 |
0 |
1 |
0 |
| 01 |
10XX01 |
XXX0 |
LDR (Reg,PostIdx) |
|
0 |
1 |
0 |
0 |
01 |
1 |
1 |
00 |
0 |
1 |
0 |
| 01 |
01XX11 |
XXXX |
LDR (Imm,PreIdx) |
|
0 |
1 |
0 |
1 |
01 |
1 |
1 |
00 |
0 |
0 |
0 |
| 01 |
11XX11 |
XXX0 |
LDR (Reg,PreIdx) |
|
0 |
1 |
0 |
0 |
01 |
1 |
1 |
00 |
0 |
0 |
0 |
| 10 |
10XXXX |
XXXX |
B |
|
1 |
0 |
0 |
1 |
10 |
0 |
0 |
01 |
0 |
0 |
0 |
| 10 |
11XXXX |
XXXX |
BL |
|
1 |
0 |
0 |
1 |
10 |
1 |
0 |
11 |
0 |
0 |
0 |
| ALUOp |
Mult |
Branch |
Funct4:1 (cmd) |
Funct0 (S) |
Type |
|
ALUControl2:0 |
FlagW1:0 |
NoWrite |
NotAlu |
NotShift |
Swap |
Inv |
| 0 |
0 |
0 |
X1XX |
X |
Memory (ADD) |
|
000 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
^ |
^ |
X0XX |
^ |
Memory (SUB) |
|
001 |
00 |
0 |
0 |
0 |
0 |
0 |
| 0 |
1 |
0 |
0XXX |
0 |
Multiply |
|
000 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
^ |
^ |
^ |
1 |
^ |
|
^ |
01 |
0 |
0 |
0 |
0 |
0 |
| 0 |
0 |
1 |
XXXX |
X |
Branch (B, BL) |
|
000 |
00 |
0 |
0 |
0 |
0 |
0 |
| 0 |
0 |
1 |
1001 |
0 |
Branch (BX) |
|
000 |
00 |
0 |
1 |
1 |
0 |
0 |
| 1 |
0 |
X |
0100 |
0 |
ADD |
|
000 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
11 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
0010 |
0 |
SUB |
|
001 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
11 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
0000 |
0 |
AND |
|
010 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
10 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
1100 |
0 |
ORR |
|
011 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
10 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
0001 |
0 |
EOR |
|
110 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
10 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
0101 |
0 |
ADC |
|
100 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
11 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
0110 |
0 |
SBC |
|
101 |
00 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
11 |
0 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
0011 |
0 |
RSB |
|
001 |
00 |
0 |
0 |
0 |
1 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
11 |
0 |
0 |
0 |
1 |
0 |
| ^ |
0 |
X |
0111 |
0 |
RSC |
|
101 |
00 |
0 |
0 |
0 |
1 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
11 |
0 |
0 |
0 |
1 |
0 |
| ^ |
0 |
X |
1110 |
0 |
BIC |
|
010 |
00 |
0 |
0 |
0 |
0 |
1 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
10 |
0 |
0 |
0 |
0 |
1 |
| ^ |
0 |
X |
1010 |
1 |
CMP |
|
001 |
11 |
1 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
1011 |
1 |
CMN |
|
000 |
11 |
1 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
1000 |
1 |
TST |
|
010 |
10 |
1 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
1001 |
1 |
TEQ |
|
110 |
10 |
1 |
0 |
0 |
0 |
0 |
| ^ |
0 |
X |
1111 |
0 |
MVN |
|
000 |
00 |
0 |
1 |
0 |
0 |
1 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
10 |
0 |
1 |
0 |
0 |
0 |
| ^ |
0 |
X |
1101 |
0 |
LSL, LSR, ASR, ROR, RRX, MOV |
|
000 |
00 |
0 |
1 |
0 |
0 |
0 |
| ^ |
0 |
X |
^ |
1 |
^ |
|
^ |
10 |
0 |
1 |
0 |
0 |
0 |