Mercurial > pygar
annotate common/Mixer.bsv @ 75:a15cc186e07d pygar svn.76
[svn r76] should be fully parameterized for however many cores we want (not fully tested)
author | punk |
---|---|
date | Wed, 12 May 2010 03:14:53 -0400 |
parents | cdad17407328 |
children |
rev | line source |
---|---|
rlm@2 | 1 import FIFOF::*; |
rlm@2 | 2 import FIFO::*; |
rlm@2 | 3 |
rlm@2 | 4 |
rlm@2 | 5 interface Mixer; |
rlm@2 | 6 method Action feed(Sample samp, VoiceId id); // feed in a sample to a specific FIFOF |
rlm@2 | 7 method Action stream(); // Outputs muxed data. |
rlm@2 | 8 endinterface |
rlm@2 | 9 |
rlm@2 | 10 |
rlm@2 | 11 method vectorFull?(Vector#(FIFOF#(Sample)) vect) |
rlm@2 | 12 |
rlm@2 | 13 (reduce .notEmpty vect) |
rlm@2 | 14 |
rlm@2 | 15 endmethod |
rlm@2 | 16 |
rlm@2 | 17 |
rlm@2 | 18 |
rlm@2 | 19 module mkMixer(Mixer); |
rlm@2 | 20 |
rlm@2 | 21 FIFO output = mkFIFO(); |
rlm@2 | 22 |
rlm@2 | 23 |
rlm@2 | 24 // make vector of fifos, length = MAX_VOICES |
rlm@2 | 25 fifo_vect Vector#(FIFOF#(Sample)) = mkVector(`MAX_VOICES); |
rlm@2 | 26 |
rlm@2 | 27 |
rlm@2 | 28 for $i(1 .. `MAX_VOICES) |
rlm@2 | 29 begin |
rlm@2 | 30 fifo_vect[$i] = mkFIFOF(); |
rlm@2 | 31 end |
rlm@2 | 32 |
rlm@2 | 33 rule(vectorFull?(fifo_vect)) |
rlm@2 | 34 |
rlm@6 | 35 Sample out = (/ (reduce + fifo_vector) (log `MAX_VOICES)) |
rlm@2 | 36 output.enq(out); |
rlm@2 | 37 |
rlm@2 | 38 endrule |
rlm@2 | 39 |
rlm@2 | 40 |
rlm@2 | 41 endmodule |
rlm@2 | 42 |