Silicon is the main SoC firmware crate for the Rusty SoC project. It is the actual application that runs on the Rusty SoC hardware. It implements a fully-featured audio player that streams PCM audio from an SDCard to a PWM-based Audio DAC (with hardware streaming support), and make use of the OLED display and the buttons for a graphical interface.
This project is part of a larger course taught at Telecom Nancy (France) about designing RISC-V based systems using different tools like VHDL, Silice, Verilog and FPGA boards such as the ULX3S (Lattice ECP5 board) and the DE1-SoC (Altera Cyclone V board). See requirements for more details.
!: Mark a feature as planned
- ! Menu with Album list (e.g. one per directory on the SDCard)
- ! Play/Pause control using buttons
- ! On end of track, automatically gets back to the Album list
- ! Display track art when playing
- ! LED effect (baked in the hardware) -- it might not be related to the music
Known issue (#3): Energy meter works only when volume is at max, otherwise the DC offset is not 128 and the energy calculation is incorrect. This could be fixed by adding a volume control that adjusts the DC offset accordingly.
- ! Seek control using buttons (e.g. skip forward/backward by 10s)
Known issue (#1): Seeking may not work correctly near the start or end of the file - ! On-launch sound effect and/or sound made on the hardware sound generator
- ! Color screen
- ! Animation while playing (OLED display and/or LEDs)
- Sound in the menu (not clear if it's a sound effect on button press, or if music should keep playing in the menu)
- ! Volume control using buttons and LED indicator
- White (Brown? Pink?) noise generator
- Any easter egg you can think of!
- Rust-based firmware (basically everything that was provided in C/C++ has found a Rust equivalent or been reimplemented)
- Support for "static/global" memory (ro_data/data and bss sections)
- 2x Hardware SPI Masters (one for the SDCard, one for the OLED display) based on an home-made SPI peripheral (in Verilog)
- PLL-based clock generation :
- 25MHz for the core,
- 80MHz for the SPI0 peripheral (40MHz for the SDCard),
- 20MHz for the SPI1 peripheral (10MHz for the OLED display)
- 48kHz PCM Audio (8bit, Mono) instead of 8kHz
- Framebuffer-less graphics using the
embedded-graphicscrate and home-made SSD1351 driver (SPI-based) - Stereo Audio support
- Timer0 peripheral (1MHz clock) for timekeeping
See the main Rusty SoC README for instructions on how to build and run the firmware.