This post will describe the skill you need to join the development, I separate it into different sections by the project.
Assembler
- Java coding skill
- Object oriented programming
- Maven https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
- How pom.xml work
- How maven.quantr.hk work
- How gitlab CI/CD publish to maven.quantr.hk
- Netbeans https://docs.oracle.com/javase/tutorial/getStarted/cupojava/netbeans.html
- Package project into an executable jar and run it by “java -jar xxx.jar”
- Learn how to use Apache Commons Library
- Common-cli https://commons.apache.org/proper/commons-cli/
- Common-io https://commons.apache.org/proper/commons-io/
- Checkout all libraries in https://gitlab.com/quantr/toolchain/Assembler/-/blob/master/pom.xml and try to understand what are they
- Git https://www.atlassian.com/git
- Know how to clone/commit/add/push
- Try to create a project in GitLab, clone it, add some files, and push them back. https://www.tutorialspoint.com/gitlab/index.htm
- If fork another project, how to get update from original repo
- Gitlab https://www.youtube.com/watch?v=mX7lKoabmDw
- Learn basic usage, such as view commit, checkout older version
- Learn how our CI/CD work
- Antlr https://www.antlr.org/ and https://pragprog.com/titles/tpantlr2/the-definitive-antlr-4-reference/
- Run the examples in the first few chapters
- Create a maven project and let it compile the grammar for you
- Learn how to use our antlr plugin https://www.quantr.hk/netbeans/ and https://peter.quantr.hk/2017/09/2475/ and https://peter.quantr.hk/2017/09/netbeans-antlr-plugin-great-enhancement/
- RISC-V computer architecture
- Understand what is it https://en.wikipedia.org/wiki/RISC-V
- Try to write some assembly code https://www.youtube.com/watch?v=XVU_RNiz09A and https://www.youtube.com/watch?v=PMzbRMsGpwU
- Build RISC-V toolchain
- Run it https://github.com/TheThirdOne/rars
- Do simple maths calculations, addition and subtraction
- Jump https://github.com/riscv-collab/riscv-gnu-toolchain , use below commands to compile program
- GCC
- GAS
- Understand RISC-V official syntax and AT&T syntax https://docs.opentitan.org/doc/rm/asm_coding_style/
- Inline assembly https://stackoverflow.com/questions/69034346/riscv-inline-assembly-in-gcc-atomic-load-store
- LD
- Learn how linker script work
- Conditional branch
- Understand stack https://ithelp.ithome.com.tw/m/articles/10267662
- Call and return, understand frame pointer https://twilco.github.io/riscv-from-scratch/2019/07/28/riscv-from-scratch-4.html , write a simple program that main() -> func1() -> func2() , tell me show RISC-V distinguish the frame area among func1() and func2()
- Load and Store, write a simple program that sum all bytes in memory
- RISC-V interrupt and exception, make sure know what registers controlling the interrupt
- RISC-V paging and memory protection https://gitlab.com/quantr/toolchain/riscv-simulator/-/tree/master/src/test/resources/hk/quantr/riscv_simulator/elf , do address translate by hand
- Floating Point
- IEEE 754, learn how to encode and decode by hand
- What RISC-V instruction can do floating point operations, write some examples
- Virtio https://juejin.cn/post/6891922292075397127
- Read the Unprivileged spec https://riscv.org/technical/specifications/
- Try to read the Privileged Spec, as an undergraduate student, you won’t be able to practice it, just read as much as you can
Simulator
- Prepare all the above skillsets
- Learn how to encode and decode RISC-V instruction by hand https://www.youtube.com/watch?v=VNy-J0u7-jY
- Understand how many different types of instruction https://www.cl.cam.ac.uk/teaching/1617/ECAD+Arch/files/docs/RISCVGreenCardv8-20151013.pdf
- Handwriting encode and decode instructions
- Learn how to write Makefile https://makefiletutorial.com/
- Create a simple Makefile yourself
- Understand our Makefile https://gitlab.com/quantr/toolchain/cpu/quantr-i/-/blob/main/Makefile and https://gitlab.com/quantr/toolchain/cpu/quantr-i/-/blob/main/testcase/ex/Makefile
- Learn GCC toolchain
- GCC
- LD
- Objdump
- Readelf
- Autotools
Operating System
- Bootloader
- ABI
- Standard C library, newlib
- Linker script
- Executable Format
- Dwarf
- Interrupt
- File System
- Kernel Structure
- Paging
- Task state structure
- Memory protection
- I/O
CPU
- Verilog
- Pipeline design