11# TODO
2- * why does // val pcReg = RegInit(-4.S(32.W).asUInt) result in failing tests?q
3- - do not execute first instruction from on-chip memory
4- - but start with -4
5- - also remove init address register from instruction ROM
6- * UART
7- * Check if gcc can do RV32E
8- * Get the C code compilation better integrated (with a reasonable linker.ld)
9- * Get C compiled apps running (more than hello)
10- * Update simulation (and C/asm code) for new address mapping and checking for ready
11- * Why do I have read and write addresses in the data memory, when only one will happen at a time?
12- - Check others
13- * Something is fishy with testing, as SingleCycle works (even without branch)
14- * Two tests fail with co-simulation when adding stall to fetch (the toggle)
15- * width.s should not fail in the ISA simulator
16- - string should work as well, do we need a linker script?
17- - Work on failing simple tests (Simulator and Wildcat)
18- * Memory range checks
19- * Aim to have same interface for pipeline and single cycle
20- - reuse tests
21- * Forwarding from ALU/memory to address computation is missing.
22- * 4/5 stages stall on load use hazard is missing (not covered by the tests)
23- * Single cycle is not finished - tests are failing, disabled
24- * 3/4/5 load and use as address is wrong (need a forward to the adder)
25- - test missing
26- * ecall, ebreak
27- * csrrw, csrrs, csrrc, csrrwi, csrrsi, csrrci
28- * At some point try to run the "real" RISC-V tests (need quite some infra)
29- * Traps on not implemented instructions and unaligned access
30- * Better names for signals (e.g., for those with a feedback, e.g., RF write)
31- * Maybe commit the .elf files for faster tests
32- * Maybe add some tracing facility
33- * compare code can be optimized (see Tommy's code, or JOP code)
34- * Get Rust bare metal running
35- * Move selection between register and imm back into decode
36- - maybe more of the muxing could be done there
37- - probably branch target computation
38- - or the whole branching itself
39- * ecall
40- * Maybe check the .elf files in for faster tests
41- * What are the types of immediate values? mostly signed or mostly unsigned?
42- * And much more not listed here, e.g. caches, interconnect, newlib, ...
43- * Write documentation
2+
3+ * [ ] Sort the TODO list
4+ * [ ] Change memory interface to ` PipeCon `
5+ * [ ] Have a better drawing of ` PipeCon ` (in soc-comm)
6+ * [ ] Start collecting information on other core interfaces (in my paper)
7+
8+ # Unsorted TODOs
9+
10+ * [ ] why does // val pcReg = RegInit(-4.S(32.W).asUInt) result in failing tests?
11+ - [ ] Do not execute the first instruction from on-chip memory
12+ - [ ] but start PC with -4
13+ - [ ] remove initialization of the address register from the instruction ROM
14+ * [ ] UART
15+ * [ ] Check if gcc can do RV32E
16+ * [ ] Get the C code compilation better integrated (with a reasonable linker.ld)
17+ * [ ] Get C compiled apps running (more than hello)
18+ * [ ] Update simulation (and C/asm code) for new address mapping and checking for ready
19+ * [ ] Why do I have read and write addresses in the data memory, when only one will happen at a time?
20+ - [ ] Check others
21+ * [ ] Something is fishy with testing, as SingleCycle works (even without branch)
22+ * [ ] Two tests fail with co-simulation when adding stall to fetch (the toggle)
23+ * [ ] width.s should not fail in the ISA simulator
24+ - [ ] string should work as well, do we need a linker script?
25+ - [ ] Work on failing simple tests (Simulator and Wildcat)
26+ * [ ] Memory range checks
27+ * [ ] Aim to have the same interface for pipeline and single cycle
28+ - [ ] reuse tests
29+ * [ ] Forwarding from ALU/memory to address computation is missing.
30+ * [ ] 4/5 stages stall on load use hazard is missing (not covered by the tests)
31+ * [ ] Single cycle is not finished - tests are failing, disabled
32+ * [ ] 3/4/5 load and use as address is wrong (need a forward to the adder)
33+ - [ ] test missing
34+ * [ ] ecall, ebreak
35+ * [ ] csrrw, csrrs, csrrc, csrrwi, csrrsi, csrrci
36+ * [ ] At some point try to run the "real" RISC-V tests (need quite some infra)
37+ * [ ] Traps on not implemented instructions and unaligned access
38+ * [ ] Better names for signals (e.g., for those with a feedback, e.g., RF write)
39+ * [ ] Maybe commit the .elf files for faster tests
40+ * [ ] Maybe add some tracing facility
41+ * [ ] compare code can be optimized (see Tommy's code, or JOP code)
42+ * [ ] Get Rust bare metal running
43+ * [ ] Move selection between register and imm back into decode
44+ - [ ] maybe more of the muxing could be done there
45+ - [ ] probably branch target computation
46+ - [ ] or the whole branching itself
47+ * [ ] ecall
48+ * [ ] Maybe check the .elf files in for faster tests
49+ * [ ] What are the types of immediate values? mostly signed or mostly unsigned?
50+ * [ ] And much more not listed here, e.g. caches, interconnect, newlib, ...
51+ * [ ] Write documentation
4452
4553## Better Naming
4654
47- * wrEna is later called valid
55+ * [ ] wrEna is later called valid
4856
4957# Docu Start
5058
@@ -55,17 +63,20 @@ and setting ```decExReg.vald``` to ```false.B ```.
5563JALR uses the ALU with the immediate similar to ADDI.
5664
5765# Further Reading
58- * A nice single cycle implementation: /Users/martin/data/dtu/teaching/cae/exam2022/Final Assignment ...
59- * Checkout: https://github.com/SpinalHDL/VexRiscv (has a lot of info)
60- * unaligned access is not too hard with byte-wise access
61- * or trap on unaligned access
62- * Explore compiler options
63- * Explore https://inst.eecs.berkeley.edu/~cs250/fa10/ (for chip design course)
64- * https://inst.eecs.berkeley.edu/~cs250/fa10/handouts/tut3-riscv.pdf
65- * Checkout https://github.com/ucb-bar/riscv-mini
66- * Checkout https://github.com/bobbl/rudolv (Joerg Mische), might be close to Wildcat plan
67- * List of RV cores with IDs: https://github.com/riscv/riscv-isa-manual/blob/latex/marchid.md
68- * Ibex is 2 stages: https://ibex-core.readthedocs.io/en/latest/03_reference/pipeline_details.html
69- * Checkout random instruction generator: https://ibex-core.readthedocs.io/en/latest/03_reference/pipeline_details.html
70- * Checkout https://github.com/SpinalHDL/VexiiRiscv
71- * Interesting core: https://github.com/darklife/darkriscv
66+
67+ To be included in my paper.
68+
69+ * [ ] A nice single cycle implementation: /Users/martin/data/dtu/teaching/cae/exam2022/Final Assignment ...
70+ * [ ] Checkout: https://github.com/SpinalHDL/VexRiscv (has a lot of info)
71+ * [ ] unaligned access is not too hard with byte-wise access
72+ * [ ] or trap on unaligned access
73+ * [ ] Explore compiler options
74+ * [ ] Explore https://inst.eecs.berkeley.edu/~cs250/fa10/ (for chip design course)
75+ * [ ] https://inst.eecs.berkeley.edu/~cs250/fa10/handouts/tut3-riscv.pdf
76+ * [ ] Checkout https://github.com/ucb-bar/riscv-mini
77+ * [ ] Checkout https://github.com/bobbl/rudolv (Joerg Mische), might be close to Wildcat plan
78+ * [ ] List of RV cores with IDs: https://github.com/riscv/riscv-isa-manual/blob/latex/marchid.md
79+ * [ ] Ibex is 2 stages: https://ibex-core.readthedocs.io/en/latest/03_reference/pipeline_details.html
80+ * [ ] Checkout random instruction generator: https://ibex-core.readthedocs.io/en/latest/03_reference/pipeline_details.html
81+ * [ ] Checkout https://github.com/SpinalHDL/VexiiRiscv
82+ * [ ] Interesting core: https://github.com/darklife/darkriscv
0 commit comments