Est. read time: 1 minute | Last updated: February 19, 2024 by John Gentile


Contents

In the beginning, software was run as hard coded instructions targeting a computer to run a single, finite task (hell it even used to be coded on physical punch cards). However, due to ever increasing demand for faster and more powerful systems, the antiquated systems of the past grew in the level of complexity, and corresponding resulting layers of abstraction, to the operating systems we have today. In general, a systems software van be grouped into two buckets:

  • Operating System: program(s) that manage system resources, libraries and allow applications to easily run
  • Applications: programs that run on top of an operating system and interact with the user to run a variety of tasks

Memory

Memory Mapped I/O (MMIO)

Normal memory- used for code, data, heap and stack- is usually treated as executable and can be cached, reordered, and speculatively loaded. Unaligned access can be supported.

Device Memory, which is used for MMIO, are never cached, not executable, no instruction fetch, no speculative data access, and all accesses must be aligned.

RISC-V

RISC-V Designs & Repos

  • picorv32: small (750-2k LUT), high $f_{max}$ (250-450 MHz) RV32I processor, deployed in many FPGA & ASIC implementations
  • BOOM: Berkeley Out-of-Order RISC-V processor
    • Ocelot: BOOM with V-EXT support
  • VRoom!: high-end RISC-V implementation
  • XiangShan: high-performance RISC-V processor
  • Chipyard: RISC-V SoC design framework

References