GSoC Project Report: Continuous Integration for Hardware Projects on LibreCores CI

by Nancy Chauhan on August 23, 2019

Librecores provides a platform to share projects and ideas, in the area of free and open-source digital hardware design. Librecores CI is a service to provide CI for hardware projects hosted on Librecores to improve user experience and reliability.

This summer, I worked on developing continuous integration pipeline for hardware projects such as OpenRISC, a family of free and open-source processor implementations on the RISC architecture

I worked from May to August 2019. In this project I worked on contrasting technologies (EDA tools, processors, Docker, Jenkins, Groovy DSL & Jenkins Shared Pipeline library) and GitHub organizations (OpenRISC, LibreCores, FuseSoC) with the following goals:

  1. Enhance OpenRISC CI pipelines and modify them to use standard LibreCores images
  2. Enhance CI Pipelines with new test automation
  3. Develop a Yosys synthesis metrics parser and add it to the LibreCores CI base image
  4. Add Yosys Synthesis resource usage statistics parsing and publishing on Jenkins
  5. Export OpenRISC test results to TAP and publish on Jenkins
  6. Move shared code of OpenRISC Pipelines to LibreCores Pipeline Library
  7. Add TAP and Yosys code parsing & publishing steps to LibreCores Pipeline library
  8. Implement Default Pipeline for FuseSoC-based OpenRISC projects

Community Bonding: Planning the solution

During the community bonding period, we planned the goals of the project and its timeline. My mentors guided me on the existing CI pipelines and solutions to proceed with the project.

Coding Phase

The coding phase was of 3 months, during which I implemented the ideas I proposed in my GSoC proposal.

First Phase

In the first month, I worked on enhancing OpenRISC CI pipelines as it previously worked on Travis CI. The OpenRISC Continuous Integration (CI) suite is now running in a librecores-ci-openrisc docker container.

  1. Modifying mor1k Travis CI flow to use Librecores-CI image
  2. Coding Phase 1: Week 3 & 4

Second Phase

In the second phase, we started working on enhancing CI pipelines. We completed work on Yosys synthesis with changes in core description file of mor1kx (FuseSoC). This goal led to developments and changes in FuseSoC backend edalize with its newly released version v0.1.6

  1. Blog: Coding Phase 2 with Librecores CI, OpenRISC, Fusesoc & Jenkins
  2. Presentation: GSoC/Outreachy 2019: Mid-term project demos, part 2
  3. Demo Video: GSoC/Outreachy 2019: Mid-term project demos, part 2

Third Phase

In the third month, we completed Yosys Synthesis and published its result LibreCoresCI Jenkins server with plot plugin which also led to the release of new version 0.5.0 of Librecores CI base docker image.

I also worked on exporting OpenRISC test results to TAP Format and published on Jenkins with TAP plugin.

Finally, I worked on improving LibreCores Pipeline library for adding a generic pipelines for CI of the OpenRISC project. I also worked on generalising Yosys Synthesis so that it can be configured for various hardware projects with a simple declarative call.

  1. Presentation: 2019 Summer Project Demos

Conclusion

Here is my Project Dashboard which has all my contributions to the project.

What tasks were accomplished

TasksPlannedCompleted
Enhance CI PipelinesYesYes
OpenRISC CI pipelines In JenkinsYesYes
Docker Image for OpenRISCYesYes
Yosys Metrics ParserYesYes
Yosys SynthesisYesYes
Export Tests to TAPYesYes
Publish results with pluginsYesYes
Openrisc Pipeline LibraryYesYes
Yosys Synthesis Pipeline LibraryYesYes
Fusesoc Pipeline LibraryYesYes
Open OCD / GDBYesNo
E-Mail NotificationYesWIP

What did I learn in GSoC

  1. Various technologies i.e Docker, Jenkins
  2. Groovy Programming and developing Jenkins Shared Library
  3. Concepts of DSL and Closure
  4. Various EDA Tools

Future engagements

We would like to invite more hardware projects to use the LibreCores Pipeline library and development tools. If you are interested to do so, please reach out to us in the LibreCores CI Gitter Chat.

Thank you Oleg Nenashev, Stafford Horne, Olofk Kindgren for helping me complete the goals for GSoC 2019.

Please send in your feedback at nancychn1@gmail.com