User Tools

Site Tools


2014:fpga_piano_lfsr_with_sine_wave_generator

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
2014:fpga_piano_lfsr_with_sine_wave_generator [2014/12/18 22:42]
teamuptownfunk [Run the piano/song/LFSR]
2014:fpga_piano_lfsr_with_sine_wave_generator [2014/12/18 23:17] (current)
teamuptownfunk
Line 35: Line 35:
  
 {{:​2014:​trueloveskiss_waveform.jpg?​900|}} {{:​2014:​trueloveskiss_waveform.jpg?​900|}}
-hot damn 
  
 +We tried to create a mode in our project that played a song. Our code implemented this such that we would have "​song"​ be a matrix that was 8 bits wide (for each note of the octave) and 9 bits deep (one for every beat in the song). For every beat, we hard coded the note or chord that we wanted to play. For example the C chord (CEG) was 10101000. Each note or chord would loop in order through genvar. Unfortunately,​ although this module seemed to have worked in ModelSim, it wouldn’t synthesize in Xilinx. Our suspicion is that this was a problem with the timing of our loop. We didn’t include any delays in our loop, because we didn’t know how the syntax of delays worked when placing them into our module.
 ==== Why did we do it? ==== ==== Why did we do it? ====
-Because hearing our hardware sing is pretty cool! We all love music and we wanted to connect Comp Arch to other cool things, like music. We also wanted to learn more about how the FPGA worked with a audio and explore how the frequency domain worked together with hardware to produce sound. We were also curious about how a piano with digital musical note frequencies sounded, in comparison to the piano musical notes we were accustomed to hearing. We were even thinking about changing the digital signal to an an analog one to be able to compare the differences or even building a triangle wave in addition to the square wave to hear the differences. It was all about sound experimentation and how we could use what we learned this semester to make cool sounds! ​ +Because hearing our hardware sing is pretty cool! We all love music and we wanted to channel that through our CompArch project. We also wanted to learn more about how the FPGA worked with a audio and explore how the frequency domain worked together with hardware to produce sound. We were also curious about how a piano with digital musical note frequencies sounded, in comparison to the piano musical notes we were accustomed to hearing. We were even thinking about changing the digital signal to an an analog one to be able to compare the differences or even building a triangle wave in addition to the square wave to hear the differences. It was all about sound experimentation and how we could use what we learned this semester to make cool sounds!
 ==== How did we do it?==== ==== How did we do it?====
  
-The first thing we needed to do was slow down the clock. We ran the clock through an Up Counter so that the flip flops would wait for the clock appropriately to get the correct signal at 440 Hz. We had an up counter for each note, but it was pointed out to us that we could have just one up counter and get the signal at any point of the up counter at the frequencies we wanted. ​+== Piano == 
 +The first thing we needed to do was slow down the clock. We ran the clock through an Up Counter so that the flip flops would wait for the clock appropriately to get the correct signal at, for example, ​440 Hz. We had an up counter for each note, but it was pointed out to us that we could have just one up counter and get the signal at any point of the up counter at the frequencies we wanted. ​The note modules (musicA, musicB, etc) each take in a clock, counter and enable and output to the speaker. We then created a LUT to We uploaded this to the FPGA after making a top level module that declared all the switches as the enables for the notes as mentioned above.  
 +To upload to the FPGA, you need to open the project FPGAPiano in Xilinx and set top.v as the top level module. Then continue to synthesize, generalize, and configure as described in the FPGA tutorial. Now the switches will act as a piano! ​
  
-==== Run the piano/​song/​LFSR ====+== LFSR == 
 +Using the LFSR, we initially attempted to listen to the output bits, a random collection of 0s and 1s. Since the output of the LFSR is approximately,​ random, we were expecting to hear just static. However, our problem is that we did not slow down our clock, so our speaker, outputting frequencies in the MHz, played a soft incredibly high-pitched noise. 
 + 
 +We then decided to slow down our clock to the frequencies of each note, as in our piano, and then feed that into the LFSR. When we did that, we were able to hear repetitive chip-tune like sounds, very much making the expected static noises in a discernible pattern. 
 + 
 +In order to make our chip-tunes a higher pitch, the base clock frequency can be changed. We used a 25 MHz clock on the FPGA so that our upcounters did not need to count to larger numbers, but for our chip-tunes, simply manipulating the frequency of the clock on the FPGA produces drastically different sounds. In order to make a chip-tune that sounds more like the effects used in an old school arcade game, try switching the clock to 50 or 100 MHz. 
 + 
 +==== Run the piano/​song/​LFSR ​& Pick up where we left off ====
 You can synthesize either the piano mode or the LFSR chip tunes mode on the FPGA. You can synthesize either the piano mode or the LFSR chip tunes mode on the FPGA.
-==== Pick up where we left off ==== +Clone our repository at https://​github.com/​yunhsincynthiachen/​CompArchFPGAPianoFinal and program the FPGA in Xilinx opening the project ​LFSR or FPGAPiano. 
-Clone our repository at https://​github.com/​yunhsincynthiachen/​CompArchFPGAPianoFinal and program the FPGA in Xilinx opening the project ​___________ ​or ____________.+ 
 +Here are instructions to run the code in ModelSim and Xilinx: 
 + 
 +In ModelSim: For the FPGA Piano, run “do_piano.do” in ModelSim, in order to run the test bench that shows the FPGA piano can play multiple notes at the same time, and can switch notes. For the FPGA LFSR Piano, run “do_LFSR.do” in ModelSim, in order to run the test bench that shows the LFSR can run different pseudo-random patterns. In order to test out a song that we were trying to program in the FPGA, we have a file called “doTrueLove.do” that when run, implements the entire song and shows the waves and sequence of all of the notes in the song. 
 + 
 +In Xilinx: For the FPGA Piano, in the file “FPGA Piano”, open and implement the top module of the project FPGA Piano. For the LFSR, in the file “LFSR”, open and implement the top module of the project LFSR.  In order to run or look at our attempt at programming a button to switch between the states of piano and the LFSR, run the project “LFSR_all” in the folder “LFSR_and_Piano”.  
  
 http://​tinyurl.com/​ca-fpga-13 http://​tinyurl.com/​ca-fpga-13
2014/fpga_piano_lfsr_with_sine_wave_generator.1418960563.txt.gz · Last modified: 2014/12/18 22:42 by teamuptownfunk