Kaloyan’s Status Report for 3/28

This week, I finished working on ADSR, saturator, and the initial drum machine RTL. I tested ADSR and the drum machine, but have not yet integrated saturator and tested it. By testing, I simply validated the audio output by ear to make sure it matches what I expect. Later, I am planning on using C++ testbenches to fully validate the ADSR output.

ADSR was difficult to implement, namely because I wanted to do the division in an efficient manner. Unfortunately, since decay is reliant on the sustain value chosen by the user, a 2D lookup table felt too memory-hungry to use. Instead, I opted for just using the division operator, and mapping it to DSP blocks. Since this is only done once (at the start of the keypress), I believe the latency is properly hidden. There was a glitch involving the timestep of the ADSR, which I fixed by using a 48KHz sample tick, rather than the FPGA clock itself.

The initial drum machine was not too hard to implement. I took some drum samples and wrote a python script to generate .mem files from them. These are then loaded into separate ROMs, which are read out from over the course of the sequence. The sequencer uses the switches and buttons on the DE10, and currently just plays the sample out completely without doing anything else. Next, I want to implement ADSR on the drums to give the user a more customized feel.

Videos of ADSR and drums:
ADSR

Drums

Leave a Reply

Your email address will not be published. Required fields are marked *