Required Knowledge

From CPUDev Wiki
Jump to: navigation, search

Most Likely Required

The knowledge/experience described below is required. It doesn't matter whether you are doing just an emulator or a hardware implementation too, it will be needed (even if only as a consideration when designing the ISA).

  • Knowledge of binary and hexadecimal numerical systems - These are often used when assigning and reporting values of registers, wires, memory cells, etc.
  • Knowledge of boolean logic and basic logic gates (AND, OR, XOR, NOT, etc) - These are the building blocks of every moderately or highly complex circuit.
  • Knowledge of sequential and combinational logic - These determine the behaviour of a circuit.
  • Programming experience - You can't possibly expect to do a CPU when you don't even know how programs are executed.
  • Basic understanding of assembly language (for any architecture) - You will write your first programs for your CPU in assembly after all.
  • Basic understanding of CPU theory - Things like advantages and disadvantages of various instruction sets, pipelining, out-of-order execution, etc.

Not Required but Good to Have

The knowledge/experience described below isn't actually required for a CPU developer, but it can still be useful.

  • Compiler development experience - A compiler has the job of translating code written in a high-level language into low-level code (bytecode, assembly code or even machine code). This gives us a good indication about:
    • What kind of instructions are most likely to be used when executing a program written in a high-level language;
    • The complexity level of a compiler, depending on the underlaying CPU ISA.
  • Operating System development experience - An operating system has the job of providing drivers, managing hardware resources (e.g. memory, CPU time) and enforcing security policies (e.g. paging, limited access to underlaying hardware) to user-space programs. This gives us a good indication about:
    • The importance of common/"standard" interconnects/peripherals in a computing system;
    • The various additional features (e.g. integrated timer per each core for task switching) that would be useful in a CPU;
    • The various protection capabilities (e.g. paging, supervisor level vs. user level) that would be needed (or not needed) in a CPU.