xv6-public VS picorv32

Compare xv6-public vs picorv32 and see what are their differences.

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
xv6-public picorv32
25 16
7,408 2,787
1.3% 2.1%
0.0 5.2
6 days ago about 2 months ago
C Verilog
GNU General Public License v3.0 or later ISC License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

xv6-public

Posts with mentions or reviews of xv6-public. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-12-25.
  • Challenging projects every programmer should try
    8 projects | news.ycombinator.com | 25 Dec 2023
    +1 for mini operating system.

    Us, application developers, rely on many OS features: memory management, filesystem, etc. I'm sure eventually we'll ask "how such things are done behind the scene?"

    That's why I tinker with xv6 (https://github.com/mit-pdos/xv6-public) during sparetime. Learning various process scheduling algorithms from textbook is a thing. Implementing it is another thing. I learn a lot. And it's definitely fun, even though there's almost zero chance the knowledge gained is relevant for my job (I'm a mobile app dev).

  • xv6 compile error
    1 project | /r/cprogramming | 25 Sep 2023
    Recently I compiled xv6 using gcc 7.5.0 on Ubuntu 18 , everything is ok. But when I try to compile it using gcc 13.2.1 on latest Arch, it's failed: result
  • How could the early Unix OS comprise so few lines of code?
    3 projects | news.ycombinator.com | 11 Sep 2023
    https://github.com/mit-pdos/xv6-public has under 10,000 lines of C and assembly including some user space programs.
  • The rxv64 Operating System: MIT's xv6, in Rust, for SMP x86_64 machines
    5 projects | news.ycombinator.com | 8 Sep 2023
    xv6 was originally written for 32-bit x86; the RISC-V port is a relatively recent development. See e.g. https://github.com/mit-pdos/xv6-public for some of the earlier history.

    rxv64 was written for a specific purpose: we had to ramp up professional engineers on both 64-bit x86_64 and kernel development in Rust; we were pointing them to the MIT materials, which at the time still focused on x86, but they were getting tripped up 32-bit-isms and the original PC peripherals (e.g., accessing the IDE disk via programmed IO). Interestingly, the non sequitur about C++ aside, porting to Rust exposed several bugs or omissions in the C original; fixes were contributed back to MIT and applied to the original (and survived into the RISC-V port).

    Oh, by the way, the use of the term "SMP" predates Intel's usage by decades.

  • Some were meant for C [pdf]
    2 projects | news.ycombinator.com | 21 Jun 2023
    I'd define an arena as the pattern where the arena itself owns N objects. So you free the arena to free all objects.

    My first job was at EA working on console games (PS2, GameCube, XBox, no OS or virtual memory on any of them), and while at the time I was too junior to touch the memory allocators themselves, we were definitely not malloc-ing and freeing all the time.

    It was more like you load data for the level in one stage, which creates a ton of data structures, and then you enter a loop to draw every frame quickly. There were many global variables.

    ---

    Wikipedia calls it a region, zone, arena, area, or memory context, and that seems about right:

    https://en.wikipedia.org/wiki/Region-based_memory_management

    It describes history from 1967 (before C was invented!) and has some good examples from Apache ("pools") and Postgres ("memory contexts").

    I also just looked at these codebases:

    https://github.com/mit-pdos/xv6-public (based on code from the 70's)

    https://github.com/id-Software/DOOM (1997)

    I looked at allocproc() in xv6, and gives you an object from a fixed global array. A lot of C code in the 80's and 90's was essentially "kernel code" in that it didn't have an OS underneath it. Embedded systems didn't run on full-fledges OSes.

    DOOM tends to use a lot of what I would call "pools" -- arrays of objects of a fixed size, and that's basically what I remember from EA.

    Though in g_game.c, there is definitely an arena of size 0x20000 called "demobuffer". It's used with a bump allocator.

    ---

    So I'd say

    - malloc / free of individual objects was NEVER what C code looked like (aside from toy code in college)

    - arena allocators were used, but global vars and pools are also very common.

    - arenas are more or less wash for memory safety. they help you in some ways, but hurt you in others.

    The reason C programmers don't malloc/free all the time is for speed, not memory safety. Arenas are still unsafe.

    When you free an arena, you have no guarantee there's nothing that points to it anymore.

    Also, something that shouldn't be underestimated is that arena allocators break tools like ASAN, which use the malloc() free() interface. This was underscored to me by writing a garbage collector -- the custom allocator "broke" ASAN, and that was actually a problem:

    https://www.oilshell.org/blog/2023/01/garbage-collector.html

    If you want memory safety in your C code, you should be using ASAN (dynamically instrumented allocators) and good test coverage. Arenas don't help -- they can actually hurt. An arena is a trivial idea -- the problem is more if that usage pattern actually matches your application, and apps evolve over time.

  • Run Linux Programs on DOS
    3 projects | news.ycombinator.com | 23 Apr 2023
  • The Magma operating system
    3 projects | /r/osdev | 2 Apr 2023
    Magma is proudly licensed under the MIT license, and uses code from Xv6 and Yagura.
  • User Space vs Kernel Space Development (For an experienced Dev)
    1 project | /r/learnprogramming | 23 Feb 2023
    My OS classes used xv6, a reimplementation of Unix Version 6 for a RISC-V architecture. Accompanying that was the OSTEP textbook.
  • MINIX is an awesome way to learn a wide range of CS concepts
    3 projects | /r/compsci | 20 Feb 2023
    Check out xv6 if you are only getting started with operating systems and want something simpler.
  • I am getting an undefined reference despite including the source file when compiling
    4 projects | /r/C_Programming | 13 Feb 2023
    Here is kernel.ld.

picorv32

Posts with mentions or reviews of picorv32. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-30.
  • RISC-V support in Android just got a big setback
    4 projects | news.ycombinator.com | 30 Apr 2024
    > Right now, most devices on the market do not support the C extension

    This is not true and easily verifiable.

    The C extension is defacto required, the only cores that don't support it are special purpose soft cores.

    C extension in the smallest IP available core https://github.com/olofk/serv?tab=readme-ov-file

    Supports M and C extensions https://github.com/YosysHQ/picorv32

    Another sized optimized core with C extension support https://github.com/lowrisc/ibex

    C extension in the 10 cent microcontroller https://www.wch-ic.com/products/CH32V003.html

    This one should get your goat, it implements as much as it can using only compressed instructions https://github.com/gsmecher/minimax

  • SPI PROTOCOL in FPGA
    1 project | /r/FPGA | 14 May 2023
    In contrast to most people here saying you NEED to spend money. I disagree with that. You can implement and simulate a SPI master/slave fully on your computer, no FPGA or other hardware required. There are simulation models for SPI peripherals you could use. For example: https://github.com/YosysHQ/picorv32/blob/master/picosoc/spiflash.v
  • How many gates does a decent risc-v implementation take?
    2 projects | /r/RISCV | 16 Feb 2023
    The Pico RV32 is pretty small, and can go as low as about 750 LUTs, with most features elided. I don't know how Xilinix LUTs translate to Lattice though.
  • Open-source RISC-V CPU projects for contribution
    8 projects | /r/RISCV | 28 Jan 2023
    Picorv32: https://github.com/YosysHQ/picorv32
  • We ran a Unix-like OS (Xv6) on our home-built CPU with our home-built C compiler
    3 projects | news.ycombinator.com | 27 Nov 2022
    There are loads of free RISC-V cores that you can read the source of and run on cheap FPGAs. Take a look at PicoRV32: https://github.com/YosysHQ/picorv32
  • SUGGEST AN OPEN SOURCE RISC-V CORE DESIGNED IN VERILOG
    3 projects | /r/RISCV | 26 Nov 2022
    picorv32 is written in Verilog.
  • Minimax: a Compressed-First, Microcoded RISC-V CPU
    4 projects | /r/FPGA | 26 Oct 2022
    In short: it works, though the implementation lacks the crystal clarity of FemtoRV32 and PicoRV32. The core is larger than SERV but has higher IPC and (very arguably) a more conventional implementation. The compressed instruction set is easier to expand into regular RV32I instructions than it is to execute directly.
  • Apple to Move a Part of Its Embedded Cores to RISC-V
    4 projects | news.ycombinator.com | 16 Sep 2022
    That is, reducing the number of LUT required to implement a CPU of a given ISA.

    A basic RV32 CPU is down to 500-700 LUT.

        https://github.com/YosysHQ/picorv32
  • Designing a reasonable memory interface
    1 project | /r/FPGA | 8 Aug 2022
    I've bought a cheap FPGA board (Sipeed Tang Nano 9K) because I want to implement a little 8 or 16-bit CPU. The FPGA has plenty of BRAM for such a little CPU, so I wouldn't even need to implement an SPI controller initially, but I want to implement a von Neumann architecture, and was wondering if the only way of doing so using single port (or semi dual port) RAM would be to use 2 cycles or more for memory transfer operations (one for loading the instruction, one for executing the actual memory transfer), or if there was any technique that could be used to avoid this without having to implement instruction-level parallelism. Even if not, references to understandable code implementing a simple memory interface would be appreciated. I looked at PicoRV32 but couldn't really understand its inner workings.
  • Risc-v rv32i softcore processor for Zybo-z7-10
    4 projects | /r/FPGA | 14 Apr 2022
    Have you looked at PicoRV32? https://github.com/YosysHQ/picorv32

What are some alternatives?

When comparing xv6-public and picorv32 you can also consider the following projects:

xv6-riscv - Xv6 for RISC-V

openlane - OpenLane is an automated RTL to GDSII flow based on several components including OpenROAD, Yosys, Magic, Netgen and custom methodology scripts for design exploration and optimization.

homebrew-i386-elf-toolchain - Homebrew formulas for buildling a valid GCC toolchain for the i386-elf target.

neorv32-setups - 📁 NEORV32 projects and exemplary setups for various FPGAs, boards and (open-source) toolchains.

minixfromscratch - Development and compilation setup for the book versions of MINIX (2.0.0 and 3.1.0) on QEMU

rocket-chip - Rocket Chip Generator

foam3 - FOAM: Feature-Oriented Active Modeller, Version 3 (unstable)

skywater-pdk - Open source process design kit for usage with SkyWater Technology Foundry's 130nm node.

stumpwm - The Stump Window Manager

wd65c02 - Cycle accurate FPGA implementation of various 6502 CPU variants

lispe - An implementation of a full fledged Lisp interpreter with Data Structure, Pattern Programming and High level Functions with Lazy Evaluation à la Haskell.

Projects - Ted Fried's MicroCore Labs Projects which include microsequencer-based FPGA cores and emulators for the 8088, 8086, 8051, 6502, 68000, Z80, Risc-V, and also Typewriter and EPROM Emulator projects. MCL51, MCL64, MCL65, MCL65+, MCL68, MCL86, MCL86+, MCL86jr, MCLR5, MCLZ8