Mercurial > pygar
changeset 0:6d1ff93e3afa pygar svn.1
[svn r1] This is the current draft of out project
author | rlm |
---|---|
date | Tue, 13 Apr 2010 15:08:30 -0400 |
parents | |
children | 91a1f76ddd62 |
files | documents/000402.png documents/AudioProcessing.lyx documents/AudioProcessing.pdf |
diffstat | 3 files changed, 160 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
1.1 Binary file documents/000402.png has changed
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/documents/AudioProcessing.lyx Tue Apr 13 15:08:30 2010 -0400 2.3 @@ -0,0 +1,160 @@ 2.4 +#LyX 1.6.4 created this file. For more info see http://www.lyx.org/ 2.5 +\lyxformat 345 2.6 +\begin_document 2.7 +\begin_header 2.8 +\textclass article 2.9 +\use_default_options true 2.10 +\language english 2.11 +\inputencoding auto 2.12 +\font_roman default 2.13 +\font_sans default 2.14 +\font_typewriter default 2.15 +\font_default_family default 2.16 +\font_sc false 2.17 +\font_osf false 2.18 +\font_sf_scale 100 2.19 +\font_tt_scale 100 2.20 + 2.21 +\graphics default 2.22 +\paperfontsize default 2.23 +\use_hyperref false 2.24 +\papersize default 2.25 +\use_geometry false 2.26 +\use_amsmath 1 2.27 +\use_esint 1 2.28 +\cite_engine basic 2.29 +\use_bibtopic false 2.30 +\paperorientation portrait 2.31 +\secnumdepth 3 2.32 +\tocdepth 3 2.33 +\paragraph_separation indent 2.34 +\defskip medskip 2.35 +\quotes_language english 2.36 +\papercolumns 1 2.37 +\papersides 1 2.38 +\paperpagestyle default 2.39 +\tracking_changes false 2.40 +\output_changes false 2.41 +\author "" 2.42 +\end_header 2.43 + 2.44 +\begin_body 2.45 + 2.46 +\begin_layout Title 2.47 +Multi-Voice Audio Playback 2.48 +\end_layout 2.49 + 2.50 +\begin_layout Author 2.51 +Laurel Pardue, Robert McIntyre 2.52 +\end_layout 2.53 + 2.54 +\begin_layout Section* 2.55 +Micro-Architecture 2.56 +\end_layout 2.57 + 2.58 +\begin_layout Subsection* 2.59 +A quick summary of our system 2.60 +\end_layout 2.61 + 2.62 +\begin_layout Standard 2.63 +The audio data ( 2.64 +\begin_inset Quotes eld 2.65 +\end_inset 2.66 + 2.67 +samples 2.68 +\begin_inset Quotes erd 2.69 +\end_inset 2.70 + 2.71 +) start in the memory, but are soon pulled into action by the DMA (direct 2.72 + memory access). 2.73 + The DMA sends the samples to a chain of 0 or more 2.74 +\emph on 2.75 +soft-cores 2.76 +\emph default 2.77 +, where they are transformed according to the soft-cores' algorithms. 2.78 + After running the gauntlet of soft-cores, the samples flow first to a buffering 2.79 + FIFO, and finally to a 2.80 +\emph on 2.81 +mixer 2.82 +\emph default 2.83 +, which sends the samples off to be played by speakers of stored in a file. 2.84 +\end_layout 2.85 + 2.86 +\begin_layout Subsection* 2.87 +A more detailed look a our system 2.88 +\end_layout 2.89 + 2.90 +\begin_layout Standard 2.91 +Our audio pipeline starts its life with whatever music we want to play already 2.92 + in memory. 2.93 + The music has multiple tracks, or 2.94 +\begin_inset Quotes eld 2.95 +\end_inset 2.96 + 2.97 +voices, 2.98 +\begin_inset Quotes erd 2.99 +\end_inset 2.100 + 2.101 + which we arrange on the memory in contiguous sequences. 2.102 + Therefore, each voice starts at its own start-address, and continues on 2.103 + for as long as it needs. 2.104 + We cap each voice with an end-of-file marker. 2.105 + We make every voice the same length to simplify timing issues, even though 2.106 + that might mean that there is a lot of wasted space in the form of dead 2.107 + areas with no sound. 2.108 +\end_layout 2.109 + 2.110 +\begin_layout Standard 2.111 +When the processing starts, the DMA reads in each voice and sends the audio 2.112 + data ( 2.113 +\begin_inset Quotes eld 2.114 +\end_inset 2.115 + 2.116 +samples 2.117 +\begin_inset Quotes erd 2.118 +\end_inset 2.119 + 2.120 +) off to a chain of soft-cores. 2.121 + The DMA knows to which chain the samples should be forwarded by looking 2.122 + up the samples' voice in a hash table read at startup. 2.123 + Once the samples enter the soft-core chain, the first soft-core in line 2.124 + takes the samples and performs some sort of audio operation, producing 2.125 + modified audio samples. 2.126 + These samples feed into the next soft-core which performs a different algorithm. 2.127 + As condition for functional correctness, we require the algorithm that 2.128 + each soft-core contains to be able to produce audio samples at the desired 2.129 + 44khz rate, but we allow an arbitrary setup time for the soft-core to get 2.130 + ready. 2.131 + That way, a pipelined processor can take its time and fill up its pipeline 2.132 + completely with no worries. 2.133 + Once the soft-core starts producing samples, it must produce them at a 2.134 + rate of at least 44khz forever. 2.135 + If every soft-core in the chain obeys this timing condition, then the whole 2.136 + chain will as well, so the entire chain of soft-cores can be treated as 2.137 + a single big soft-core for timing purposes. 2.138 + Our soft-cores are just Lab 5 processors preloaded with specific audio 2.139 + processing algorithms. 2.140 +\end_layout 2.141 + 2.142 +\begin_layout Standard 2.143 +Eventually, the samples make their way to the end of the chain of soft-cores. 2.144 + Every chain of soft-cores ends in a FIFO. 2.145 + For this project, we will have 12 separate voices. 2.146 + Therefore, there will be 12 soft-core chains, each with a FIFO at its end, 2.147 + one for each voice. 2.148 + Each of the 12 FIFOs leads to the mixer, which only begins operation once 2.149 + all 12 FIFOs are full. 2.150 + Because of the timing constraints we impose on our soft-cores, once every 2.151 + FIFO has at least one sample, all 12 will forever more be able to supply 2.152 + samples at 44khz. 2.153 + The mixer therefore waits until all 12 FIFOs have elements and then reads 2.154 + samples from all FIFOS at a rate of 44khz. 2.155 + The mixer combines the samples through simple addition and scaling, creating 2.156 + a single stream of sample data, which is sent back from the FPGA to the 2.157 + host computer where we play the stream and/or save it to a file. 2.158 + The mixer ensures that it outputs samples at a rate of 44khz by running 2.159 + everything through its own internal buffer FIFO clocked at 44khz. 2.160 +\end_layout 2.161 + 2.162 +\end_body 2.163 +\end_document
3.1 Binary file documents/AudioProcessing.pdf has changed