Skill you need

This post will describe the skill you need to join the development, I separate it into different sections by project.

Assembler

You need these skillsets in order to join our development:

  1. Java coding skill
  2. Maven https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
  3. Netbeans https://docs.oracle.com/javase/tutorial/getStarted/cupojava/netbeans.html
    1. Package project into an executable jar and run it by “java -jar xx.jar”
    2. Learn how to use Apache Commons Library
      1. Common-cli https://commons.apache.org/proper/commons-cli/
      2. Common-io https://commons.apache.org/proper/commons-io/
      3. Checkout all libraries in https://gitlab.com/quantr/toolchain/Assembler/-/blob/master/pom.xml and try to understand what are they
  4. Git https://www.atlassian.com/git
    1. Know how to clone/commit/add/push
    2. Try to create a project in GitLab, clone it, add some files, and push them back. https://www.tutorialspoint.com/gitlab/index.htm
  5. Gitlab https://www.youtube.com/watch?v=mX7lKoabmDw
  6. Antlr https://www.antlr.org/ and https://pragprog.com/titles/tpantlr2/the-definitive-antlr-4-reference/
    1. Run the examples in the first few chapters
    2. Create a maven project and let it compile the grammar for you
    3. 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/
  7. RISC-V computer architecture
    1. Understand what is it https://en.wikipedia.org/wiki/RISC-V
    2. Try to write some assembly code https://www.youtube.com/watch?v=XVU_RNiz09A and https://www.youtube.com/watch?v=PMzbRMsGpwU
    3. Build RISC-V toolchain
    4. Run it https://github.com/TheThirdOne/rars
      1. Do simple maths calculate, addition and substraction
      2. Jump https://github.com/riscv-collab/riscv-gnu-toolchain , use below commands to compile program
        1. GCC
        2. GAS
          1. Understand RISC-V official syntax and AT&T syntax https://docs.opentitan.org/doc/rm/asm_coding_style/
          2. Inline assembly https://stackoverflow.com/questions/69034346/riscv-inline-assembly-in-gcc-atomic-load-store
        3. LD
      3. Conditional branch
      4. Understand stack https://ithelp.ithome.com.tw/m/articles/10267662
      5. Call and return, understand frame point 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()
      6. Load and Store, write a simple program that sum of all bytes in memory
      7. RISC-V interrupt and exception
      8. RISC-V paging and memory protection https://gitlab.com/quantr/toolchain/riscv-simulator/-/tree/master/src/test/resources/hk/quantr/riscv_simulator/elf
      9. Floating Point
      10. Virtio https://juejin.cn/post/6891922292075397127
    5. Read the Unprivileged spec https://riscv.org/technical/specifications/
    6. 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

  1. Prepare all the above skillsets
  2. Learn how to encode and decode RISC-V instruction by hand https://www.youtube.com/watch?v=VNy-J0u7-jY
    1. Understand how many different type of instruction https://www.cl.cam.ac.uk/teaching/1617/ECAD+Arch/files/docs/RISCVGreenCardv8-20151013.pdf
    2. Handwriting encode and decode instructions
  3. Learn how to write Makefile https://makefiletutorial.com/
    1. Create a simple Makefile yourself
    2. 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
  4. Learn GCC toolchain
    1. GCC
    2. LD
    3. Objdump
    4. Readelf
    5. Autotools

Operating System

  1. Bootloader
  2. ABI
  3. Standard C library, newlib
  4. Linker script
  5. Executable Format
  6. Dwarf
  7. Interrupt
  8. File System
  9. Kernel Structure
    1. Paging
    2. Task state structure
    3. Memory protection
    4. I/O

CPU

  1. Verilog
  2. Pipeline design