Skip to the content.

FSS prototype top-panel concept

Fully-Synchronized Synthesizer (FSS) Prototype

This FSS prototype demonstrates the future of interfacing with a music synthesizer. Musicians often switch between programs on their synth as part of their creative process when experimenting with different sounds. However, the control knobs on their synth can’t dynamically update to visually display the true value of that knob when switching between programs. This FSS prototype solves this issue by providing program-synchronized ring displays surrounding control knobs, along with internal components housed in a beautiful chassis, and interfaced with via a single USB cable. This repository contains various source files, design files, datasheets, and documentation relevant to the development of this prototype. This prototype serves as the final project for the Computer Design Laboratory ECE 3710 class at The University of Utah for Group 2. As a requirement for this class, this final project uses the CompactRISC16 CPU and assembler that our group built as well. This CPU runs on an FPGA and executes our custom assembly code which is responsible for the FSS interface logic and communication. The FPGA board interfaces with the FSS prototype via I2C using a braided USB cable with the D+/D- pins adapted to be the SCL and SDA pins.

Authors

How This Repository is Organized

Project Videos

We wanted to create a professional video in the form of a product advertisement showing the beauty we captured in the FSS prototype’s design. That video is available here. Additionally, a demo video showing the basic usage and functional overview of the FSS prototype is available here.

Project Photos

Assembling fss.asm

fss.asm contains the assembly source code for the firmware of the FSS prototype. This assembly source code is compiled to a machine code data file which is loaded into BRAM upon FPGA programming. To assemble/compile fss.asm, follow these steps:

  1. Ensure that the CompactRISC16 submodule has been initialized and updated via: git submodule update --init
  2. Run the assembler via:
    ./CompactRISC16/assembler/assembler src/asm/fss.asm -o resources/bram_init/fss.dat -p 4096 -v 0 -b HEX
    
    • -p 4096 sets the max padding lines to 4096 (which is 2^12 due to fss_top instantiating bram with a 12-bit address space) in the output machine code file
    • -v 0 sets the padding line value to 0 (which initializes empty BRAM to all zeros) in the output machine code file
    • -b HEX sets the number base to hexadecimal in the output machine code file
  3. More info about the CR16 assembler used in this project can be found here.

Verilog Source Naming Conventions and Format

Verilog Source Formatting For This Repository

To format verilog source code, use the istyle-verilog-formatter tool via the format script:

.formatter/verilog/format <paths to files or directories>

For example, to recursively format Verilog source files in the src directory, use the following command:

.formatter/verilog/format src

The istyle-verilog-formatter is used as a submodule in the .formatter/verilog directory. Either clone this repository with git clone --recurse-submodules or use git submodule init; git submodule update to clone the istyle-verilog-formatter repository into the .formatter/verilog directory so that the format script can run properly. The format shell script will run make if the iStyle binary is not already present in the istyle-verilog-formatter directory. Note: you may need to make the script executable via: chmod 755 .formatter/verilog/format.