Kaloyan’s Status Report for 4/18

This week, I spent time on developing the VGA display, choosing the buttons for the drum sequencer, and integrating 4-voice polyphony.

For the VGA, I was able to get an initial image running quite quickly. I followed some online blog posts and after a bug with forgetting to output a VGA clock, I managed to display a single line. I then worked on creating two modules, a static line module and a dynamic line module. I’m currently using a DSP approach (calculating the cross product between a pixel and an established line), but may switch to Bresenham’s algorithm which instead uses BRAM and precomputes all the plotted pixels without using DSPs. The static line is defined at compile time, meaning that the resource usage can be folded and done without using DSPs. Using this, I linked the values from the ADSR and created a small depiction of what the amplitude envelope looks like. The youtube video shows an example of it being adjusted using the knobs. Next, I’m going to work on displaying the drum sequencer and effects.

For the buttons, I researched different varieties. I wanted a good aesthetic for them, but also functional use. I ended up deciding to use buttons with LEDs on top to depict step pattern, an LED driver (to reduce engineering effort and controlling dimness), a perfboard, and some other materials. Once they come in, I’ll work on wiring them up and then connecting them to the VGA display.

For the remainder of my time, I worked on trying to get polyphony working. Unfortunately, I’m still debugging some weird sync issue. The clock crossing from the input domain (100 MHz) of the arbiter, which assigns key presses, to the actual audio domain (50MHz) may be causing some issue. Although multiple notes will play, their note value seems to change sporadically. I’ll keep debugging and will hopefully find the issue soon.

Throughout my time, I’ve had to learn various effective hardware algorithms/methods to efficiently implement my tasks. For example, the ADSR required careful analysis on whether to use DSP blocks or not. Since it works based on a sample tick enable, the latency to calculate the phase steps for attack, sustain, decay, and release can be hidden. This makes using the DSPs viable, since storing all the necessary LUTs in BRAM would consume too much memory. Another hardware algorithm involved the dynamic line drawing for VGA. As previously mentioned, it may be better to use Bresenham’s algorithm. For learning these methods, I have been using blog posts. I find that they go into tremendous, specific detail. Much of the time, its better than youtube videos because they cover much more ground. I find that the detailed content makes it easier to conceptualize and fully understand.

Leave a Reply

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