# A2P
## Back to the 90s!
A2P is a mashup of OpenPOWER architecture and VexRiscv, creating a new 32b Power core for experimentation and lightweight designs.
## Status
### Function
* Ops (100+) not thoroughly tested, but running a minimal kernel and partial Litex BIOS in Verilator and on FPGAs. Likely still
some bugs in CR/XER handling.
* Need to define supported translation modes.
* SOC builds with Litex; software is built manually and runs from 'ROM' with on-board RAM.
* Core and SOC run in Verilator/pyverilator. SOC uses emulated host UART.
### FPGA Implementation
* Currently using Cmod A7-35T board.
* Needs SOC code update to access external SRAM. I2C works.
* A lot of LUTs are being used by bypass/GPR write. Recent analysis (100MHz, Vivado/Artix):
```
cellanal.py
--- cells_ff.txt ---
Total: 1791
IC 115
decode 244
execute 456
regfile 0
hazards 38
ALU2 32
MULDIV 136
memory 295
DC 69
SPR 239
MSR 15
writeBack 1
ibus 32
dbus 32
SPINAL _zz_ 87
Total in matched areas 1791
*** >32 bits (93): a2p_i/A2P_WB/inst/IBusCachedPlugin_fetchPc_pcReg_reg ***
*** >32 bits (52): a2p_i/A2P_WB/inst/memory_to_writeBack_MUL_LOW_reg ***
Totals by cells:
1: 131 131
2: 16 163
3: 7 184
4: 6 208
5: 18 298
6: 1 304
7: 1 311
8: 5 351
10: 1 361
11: 2 383
26: 1 409
30: 3 499
31: 5 654
32: 31 1646
52: 1 1698
93: 1 1791
--- cells_lut.txt ---
Total: 2539
IC 85
decode 262
execute 1758
regfile 9
hazards 35
ALU2 0
MULDIV 145
memory 133
DC 1
SPR 56
MSR 0
writeBack 0
ibus 1
dbus 8
SPINAL _zz_ 46
Total in matched areas 2539
*** >32 bits (35): a2p_i/A2P_WB/inst/Hazards_writeBackBuffer_payload_data ***
*** >32 bits (62): a2p_i/A2P_WB/inst/IBusCachedPlugin_fetchPc_pcReg_reg ***
*** >32 bits (34): a2p_i/A2P_WB/inst/MULDIV1_result ***
*** >32 bits (66): a2p_i/A2P_WB/inst/MULDIV_accumulator ***
*** >32 bits (40): a2p_i/A2P_WB/inst/_zz_141_ ***
*** >32 bits (42): a2p_i/A2P_WB/inst/decode_to_execute_RA ***
*** >32 bits (220): a2p_i/A2P_WB/inst/decode_to_execute_RB ***
*** >32 bits (107): a2p_i/A2P_WB/inst/execute_to_memory_BRANCH_CALC ***
*** >32 bits (64): a2p_i/A2P_WB/inst/execute_to_memory_CR_WRITE_imm ***
*** >32 bits (212): a2p_i/A2P_WB/inst/execute_to_memory_DECODER_stageables_49 ***
*** >32 bits (1028): a2p_i/A2P_WB/inst/execute_to_memory_REGFILE_WRITE_DATA ***
*** >32 bits (86): a2p_i/A2P_WB/inst/execute_to_memory_SRC_CR ***
*** >32 bits (37): a2p_i/A2P_WB/inst/execute_to_memory_XER_WRITE_imm ***
*** >32 bits (68): a2p_i/A2P_WB/inst/memory_to_writeBack_MUL_LOW ***
Totals by cells:
1: 158 158
2: 1 160
3: 5 175
4: 1 179
5: 5 204
8: 2 220
9: 1 229
17: 1 246
20: 2 286
25: 1 311
31: 1 342
32: 3 438
34: 1 472
35: 1 507
37: 1 544
40: 1 584
42: 1 626
62: 1 688
64: 1 752
66: 1 818
68: 1 886
86: 1 972
107: 1 1079
212: 1 1291
220: 1 1511
1028: 1 2539
```