Bringing OpenPiton to Amazon EC2 F1 FPGAs

OpenPiton + Ariane Logo

OpenPiton release 13 (19-10-23-r13) is now available. The headline feature of this release is support for running OpenPiton+Ariane in the cloud via Amazon EC2 F1. Release 13 also offers other bug fixes and improvements that you can see on our GitHub repository.

We now provide a step-by-step guide in the README of OpenPiton on GitHub which explains how to emulate OpenPiton+Ariane on Amazon EC2 F1 cloud FPGAs. You can make use of our existing release image to test software and firmware, or synthesise your own OpenPiton-based hardware design by following our instructions.

Follow us on twitter (@openpiton) and (@pulp_platform) for up-to-date news.

Download Page

Please post in our Google Group if you have any questions or issues with OpenPiton+Ariane. Release 14 will have plenty of new bells and whistles, but we’re looking for your input. Get in touch if there’s something you’d like to see included in OpenPiton in future.

OpenPiton RISC-V Tutorial at MICRO 2019

OpenPiton + Ariane Logo

We are excited to announce our new OpenPiton RISC-V tutorial at MICRO 2019! Now is your chance to get hands-on with the RISC-V hardware research platform, including learning to use OpenPiton on Amazon AWS F1.

The tutorial is in conjunction with MICRO 2019 in Columbus, Ohio. It is a half-day tutorial on Saturday afternoon, October 12th. Interested attendees can register here and enjoy the early registration discount until September 6th.

The tutorial is a hands-on session which will first introduce attendees to our validation infrastructure using open-source simulators. Attendees will also learn how to synthesise multiple Ariane RISC-V cores to FPGA (including Amazon F1) and get direct experience with booting multicore RISC-V Linux on our provided FPGAs. We will also teach attendees how to configure and extend the OpenPiton architecture to enable research in architecture, systems, security, EDA, and beyond.

We look forward to seeing you at MICRO 2019!

Best regards,
OpenPiton Team

OpenPiton Release 12

OpenPiton + Ariane Logo

OpenPiton release 12 (19-06-06-r12) is now available. This release brings several improvements to bring feature parity to Ariane alongside a number of smaller bug fixes and improvements that you can see on our GitHub repository.

  • Addition of Ariane FPU on FPGA: With the addition of the Ariane FPU by default, OpenPiton+Ariane is now Linux distribution capable
  • First-class simulation simulation support for Verilator: This enables fast, fully open-source simulation of all of our supported cores
  • Simulation of OpenPiton+Ariane with VCS
  • Ethernet support for Ariane on FPGA

Make sure to check out OpenPiton on GitHub to see how to simulate and FPGA emulate OpenPiton+Ariane. This is all available to download under permissive open source licenses.

Follow us on twitter (@openpiton) and (@pulp_platform) for up-to-date news.

Download Page

Please post in our Google Group if you have any questions or issues with OpenPiton+Ariane. Release 13 is already starting to shape up, but we’d like to know what features you need most. Get in touch if there’s something you’d like to see included in a future OpenPiton release.

OpenPiton+Ariane Tutorials in June

OpenPiton + Ariane Logo

We are excited to announce two OpenPiton+Ariane tutorials this June! Now is your chance to get hands-on with the RISC-V hardware research platform.

The first tutorial is part of the Week of Open Source Hardware (WOSH) in conjunction with the RISC-V Workshop Zurich. It is a half-day tutorial on Thursday afternoon, June 13th, at ETH Zurich, Switzerland. Interested attendees can register here.

The second tutorial is in conjunction with ISCA/FCRC 2019 in Phoenix, Arizona. It is a half-day tutorial on Sunday afternoon, June 23rd. Interested attendees can register here and enjoy the early registration discount until May 24th.

Both tutorials are hands-on sessions which will first introduce attendees to our validation infrastructure using open-source simulators. Attendees will also learn how to synthesise multiple Ariane RISC-V cores to FPGA and get direct experience with booting multicore RISC-V Linux on our provided FPGAs. We will also teach attendees how to configure and extend the OpenPiton architecture to enable research in architecture, systems, security, EDA, and beyond.

Boot SMP Linux on OpenPiton+Ariane

OpenPiton + Ariane Logo

OpenPiton release 11 (19-03-19-r11) is now available. This release brings two major improvements alongside a number of smaller bug fixes and improvements that you can see on our GitHub repository.

In conjunction with the PULP Platform’s Ariane release 4.1, OpenPiton+Ariane boots SMP Linux on FPGA. This makes OpenPiton+Ariane the first Linux-booting, open-source, RISC-V system that scales from single-core to manycore. You can download our 1-core (Nexys Video Artix-7), 2-core (Genesys2 Kintex-7), and 4-core (VC707 Virtex-7) FPGA bitfiles today to try this out. We are actively working on adding support for the Ariane Floating-Point Unit and improving the stability of the system, but we are excited to share this significant early milestone as a teaser of what’s to come. Our existing Piton and Ariane chips provide us a mature base for future OpenPiton+Ariane implementations in silicon.

We are also pleased to announce initial support for simulating OpenPiton using Verilator. This brings the number of available simulators for OpenPiton to five. This new support is also under active development with the intent to provide a fast, open-source simulation infrastructure.

Make sure to check out OpenPiton on GitHub to see how to simulate and FPGA emulate OpenPiton+Ariane. This is all available to download under permissive open source licenses.

Follow us on twitter (@openpiton) and (@pulp_platform) for up-to-date news.

Download Page

Please post in our Google Group if you have any questions or issues with OpenPiton+Ariane. Release 12 is already starting to shape up, but we’d like to know what features you need most. Get in touch if there’s something you’d like to see included in a future OpenPiton release.

Announcing OpenPiton with Ariane

OpenPiton + Ariane Logo

We have great news for fans of open source hardware: The Princeton Parallel Group led by David Wentzlaff, and the Digital Circuits and Systems Group of ETH Zürich led by Luca Benini have joined forces to bring you the OpenPiton open-source research processor platform with first-class support for 64-bit Ariane RISC-V cores. The latest update of the open-source Ariane processor, (Ariane IV) now supports the P-Mesh cache system from OpenPiton, and with today’s OpenPiton release 10 (18-11-29-r10), we have our first working system. Going forward, OpenPiton will be the go-to multicore environment for Ariane. Likewise, Ariane will have first-class upstream support in OpenPiton. Together, OpenPiton+Ariane provides the ideal permissive open-source RISC-V system that scales from single-core to manycore.

Make sure to check out OpenPiton on GitHub  to see how to simulate OpenPiton+Ariane and run C programs in manycore configurations. All available to download under permissive open source licenses. We are not done yet: an FPGA implementation for Genesys2 and an SMP Linux-capable configuration are not far away – stay tuned!

Follow us on twitter (@openpiton) and (@pulp_platform) for up-to-date news.

OpenPiton+Ariane | Princeton+ETHZ | A Collaboration

OpenPiton + Ariane block diagram

JuxtaPiton: Taking OpenPiton Heterogeneous with RISC-V

Katie Lim presenting JuxtaPiton at the MICRO 2018 Student Research Competition

What is JuxtaPiton?

JuxtaPiton is (to our knowledge) the world’s first open-source, general-purpose, heterogeneous-ISA processor. It is an enhancement to OpenPiton, built by integrating the PicoRV32 RISC-V core, written by Clifford Wolf, into the OpenPiton framework. JuxtaPiton inherits all of the capabilities of OpenPiton, with the added ability to instantiate chosen tiles with RISC-V cores, rather than the usual OpenSPARC T1 core, which uses the SPARC v9 ISA. The PicoRV32 core is connected to OpenPiton’s L1.5 cache, making it cache coherent with other cores in the system, thanks to our P-Mesh cache coherence protocol.

When implemented on FPGA, JuxtaPiton can boot Debian Linux on an OpenSPARC core as with OpenPiton. With the addition of a PicoRV32 core in the system, the OpenSPARC core can offload the execution of RISC-V binaries to be natively executed on the PicoRV32 core. When the RISC-V binary needs to make a system call, it can proxy it on the OpenSPARC core instead. This is done through shared memory as provided by P-Mesh.

To validate the integration of the PicoRV32 core in simulation, we have added the option to run the RISC-V assembly tests provided with PicoRV32 inside the OpenPiton infrastructure. You can use the existing commands and tools to run these tests, and add any new tests you might want to validate the functionality of your OpenPiton modifications.

JuxtaPiton will be presented in a poster at FPGA 2019. The paper which accompanies this poster is now available on arXiv. The primary author of this work, Katie Lim, also presented JuxtaPiton at the Student Research Competition at MICRO 2018, where she won first prize for the undergraduate research category.

We hope that JuxtaPiton will provide a useful platform for heterogeneous-ISA processor research and we welcome further contributions from the community. If you find this work useful, please cite our FPGA/arXiv paper and let us know. Our thanks go to Clifford Wolf for creating the PicoRV32 core and making it available open source.

How to use JuxtaPiton

JuxtaPiton is available as part of OpenPiton release 9 (18-11-20-r9). You can download it from the OpenPiton website or clone it on GitHub.

Simulation

If you want to run assembly tests on the PicoRV32 tile alone, you can use the -pico argument to the sims build. At the moment, only the tests distributed with PicoRV32 are supported, rather than the whole of the riscv-tests repository. After adding a RISC-V RV32I cross-compiler to your path, you can run all of the supplied tests with the command sims -group=pico_tile1 -sim_type=vcs (replacing vcs with icv/ncv/msm if you would prefer to use Icarus Verilog, Cadence Incisive, or Mentor Modelsim to run the simulations). To check the status of the tests, cd to the dated folder created by running the provided command, then run regreport $PWD >report.log which will output the status of each of the tests to the file report.log. You can then read the file’s contents to see which tests pass, fail, or timeout.

To try out PicoRV32 tiles alongside OpenSPARC tiles in simulation, pass the flag -pico_het to the sims build. We do not presently provide a software infrastructure for testing the FPGA-equivalent functionality in simulation at present. Instead, you will need to manually tinker with the simulation if you want to make the OpenSPARC tile wake up the PicoRV32 tile and have it run tests like the loader program enables you to do on FPGA.

Instantiating Cores for FPGA

The number of tiles and whether or not PicoRV32 tiles are instantiated in a design are controlled by options in piton/design/xilinx/pyhp_setup.tcl. The actual selection of which tiles are SPARC tiles vs RISC-V tiles is controlled in piton/design/chip/rtl/chip.v.pyv where the tiles are instantiated. A TILE_TYPE parameter is passed into each tile instantiation and propagated from there to appropriate parts of the hierarchy.

The tile instantiation is such that tiles with an odd ID are PicoRV32 tiles and tiles with an even ID are SPARC tiles. The provided FPGA bitfile was built with 2 tiles with PicoRV32 tiles turned on, so tile 0 is a SPARC tile, and tile 1 is a PicoRV32 tile.

FPGA Build

The use of PicoRV32 tiles can be toggled with the define PITON_PICO_HET in piton/design/xilinx/design.tcl
To build the same design as the provided bitfile, you should first add PITON_PICO_HET and NO_RTL_CSM to the list of defines in piton/design/xilinx/design.tcl
Next, in piton/design/xilinx/pyhp_setup.tcl you should set PTON_X_TILES to 2, PTON_NUM_TILES to 2, and uncomment the PICO lines in the file which enable the PicoRV32 cores.
You can then run the normal command to build a bitstream for FPGA:
protosyn -b genesys2 -d system.

Any other configuration modifications such as number of tiles, size of caches, etc., can be made as normal (see the OpenPiton FPGA manual for more details).

Software Infrastructure

For testing on Genesys2 FPGA, we implemented a user program that runs on the OpenSPARC core to host the PIcoRV32 core. The user program acts as an ELF loader for RISC-V binaries and can also proxy syscalls from the PicoRV32 core when the binaries are linked against a modified version of Newlib. We also added two new syscalls and a new hypercall to the OpenPiton Linux kernel and hypervisor, respectively.

The hypervisor configuration was also adjusted, so that Linux does not use the top 16 MB of memory. This memory is used for initial communication between the SPARC core and the PicoRV32 core.

If you program your Genesys2 FPGA with the provided bitfile and then write a microSD card with the provided OS image, then you will be able to observe the boot process by connecting to the UART on the FPGA board. This process is the same as for OpenPiton and is described in more detail in the FPGA manual.

To use the loader, execute it on the OpenSPARC core and give it a RISC-V binary as a command line argument. You can try it with the pico_ldr and simple_pico_test binaries provided in the juxtapiton-loader repository and on the provided disk image. Boot Linux on the SPARC core, cd to the appropriate directory, then run ./pico_ldr simple_pico_test

This will print a number of lines to the terminal describing what the JuxtaPiton system is doing. Towards the end, the PicoRV32 core will print out “Hello world” by writing directly to the UART. Because it writes directly to the UART, its output will be mixed in with print statements from the OpenSPARC core.

You can also build your own RISC-V binaries to run on the JuxtaPiton system.

Building RISC-V Binaries

To build RISC-V binaries, you’ll have to compile your own RISC-V toolchain. Good instructions are given by Clifford Wolf on the PicoRV32 GitHub page.

Binaries that run on the PicoRV32 core must be statically compiled, because it does not have a dynamic loader. We did this by compiling each C/assembly file separately to object files with the flags -fPIC and -static. We then linked the object files together using the linker script riscv.ld as provided in the juxtapiton-loader repository, and the flag -static.

The linker script is a modified version of the one provided in the PicoRV32 core repository. Because PicoRV32 doesn’t support virtual memory, the start address is modified to be 0x1000. The script also includes commands to pick the appropriate versions of libraries to link with. Currently it links with Newlib, libgloss, and GCC libraries. The modified libgloss library that allows syscalls to be proxied is included in the juxtapiton-loader repo as well.

NOTE: the paths given in the linker script to libraries should be modified to ones that match the location of your libraries

The PicoRV32 core has been modified to put itself back into reset when there is a store to 0xffff_ffff. If you want to run a binary on the PicoRV32 core without resetting the whole FPGA, make sure the last operation in the RISC-V binary is a store to 0xffff_ffff.

OpenPiton Comes to GitHub With Release 8

OpenPiton comes to GitHub and macOS

OpenPiton release 8 (18-08-08-r8) is now available. Headline features of release 8 are:

  • OpenPiton Public GitHub: Check out our new GitHub repository where you can stay up-to-date with our newest releases!
  • OpenPiton comes to macOS: OpenPiton users on macOS can now run simulations with Icarus Verilog and stream assembly and C tests to the OpenPiton system on FPGA.
  • Simulation with Mentor ModelSim: OpenPiton simulations can now be run using Mentor ModelSim!
  • Updated Cadence Incisive Support: Simulations can now be run with the significantly updated Cadence Incisive 15.2

Download Page

Please post in our Google Group if you have any questions or issues with the platform. We have ideas for release 9 and beyond, but we want to hear your needs too! Get in touch if there’s something you’d like to see included in a future OpenPiton release.

OpenPiton Release 7

OpenPiton release 7 (18-06-21-r7) is now available. Headline features of release 7 are:

  • Inferring all BRAMs: Now you can easily change the size of the caches for FPGA implementations. This also makes porting OpenPiton to new FPGA boards much simpler.
  • Chipset/IO crossbar: Define the devices you use in an XML file and all P-Mesh NoC connections will be generated automatically.
  • Zeroing memory in hardware: This reduces boot time – booting to a bash shell now takes only two minutes (full system boots in <10 minutes).
  • Printing from C/assembly: Your print statements in C/assembly will now be output to a simulated UART.
  • Development VM: A pre-packaged environment to quickly get started with OpenPiton using the open-source Icarus Verilog simulator. (Coming in a couple of days!)

Download Page

We presented our power characterization of the Princeton Piton processor at HPCA ’18 and made the PCB design as well as the power and energy characterization data openly available.
Please post in our Google Group if you have any questions or issues with the platform. We are full of ideas for release 8 and want your input. Get in touch if there’s something you’d like to add.

OpenPiton Release 6

OpenPiton release 6 (17-09-21-r6) is now available featuring new simulators and faster boot times.

Headline features of release 6 are:

  • Support for Icarus Verilog, enabling you to run much of the OpenPiton simulation infrastructure with an open source simulator
  • Support for Cadence NC-Sim (Incisive)
  • A new SD controller, supporting SDHC cards up to 32GB, which cuts boot time as much as 50%
  • Persistent SD storage for our previous SPI-based SD controller*

Other changes include:

  • Clock-gating fix for FPU on FPGA to improve implementation time and results*
  • Bug fixes for single-threaded core*
  • Documentation improvements*
  • Code quality improvements identified due to supporting more Verilog simulators

Download Page

Please post in our Google Group if you have any questions or issues with the platform. We are full of ideas for release 7 and want your input. Get in touch if there’s something you’d like to add.

*Thanks to our external contributors for identifying these improvements