TheLegace

audio2

Dec 5th, 2011
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module audio2(
  2.   // Clock Input (50 MHz)
  3.   input CLOCK_50, // 50 MHz
  4.   input CLOCK_27, // 27 MHz
  5.   //  Push Buttons
  6.   input  [3:0]  KEY,
  7.   //  DPDT Switches
  8.   input  [17:0]  SW,
  9.   //  7-SEG Displays
  10.   output  [6:0]  HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7,
  11.   //  LEDs
  12.   output  [8:0]  LEDG,  //  LED Green[8:0]
  13.   output  [17:0]  LEDR, //  LED Red[17:0]
  14.   // TV Decoder
  15.   output TD_RESET, // TV Decoder Reset
  16.   // I2C
  17.   inout  I2C_SDAT, // I2C Data
  18.   output I2C_SCLK, // I2C Clock
  19.   // Audio CODEC
  20.   output/*inout*/ AUD_ADCLRCK, // Audio CODEC ADC LR Clock
  21.   input  AUD_ADCDAT,  // Audio CODEC ADC Data
  22.   output /*inout*/  AUD_DACLRCK, // Audio CODEC DAC LR Clock
  23.   output AUD_DACDAT,  // Audio CODEC DAC Data
  24.   inout  AUD_BCLK,    // Audio CODEC Bit-Stream Clock
  25.   output AUD_XCK,     // Audio CODEC Chip Clock
  26.   //  GPIO Connections
  27.   inout  [35:0]  GPIO_0, GPIO_1
  28. );
  29.  
  30.  
  31. //  All inout port turn to tri-state
  32. assign  GPIO_0      =   36'hzzzzzzzzz;
  33. assign  GPIO_1      =   36'hzzzzzzzzz;
  34.  
  35. wire [6:0] myclock;
  36. wire RST;
  37. assign RST = KEY[0];
  38.  
  39. // reset delay gives some time for peripherals to initialize
  40. wire DLY_RST;
  41. Reset_Delay r0( .iCLK(CLOCK_50),.oRESET(DLY_RST) );
  42.  
  43. // Send switches to red leds
  44. assign LEDR = SW;
  45.  
  46. // Turn off green leds
  47.  
  48. // Turn off 7-segment displays
  49. parameter BLANK = 7'h7f;
  50. assign HEX0 = BLANK;
  51. assign HEX1 = BLANK;
  52. assign HEX2 = BLANK;
  53. assign HEX3 = BLANK;
  54. assign HEX4 = BLANK;
  55. assign HEX5 = BLANK;
  56. assign HEX6 = BLANK;
  57. assign HEX7 = BLANK;
  58.  
  59.  
  60. assign  TD_RESET = 1'b1;  // Enable 27 MHz
  61.  
  62.  
  63. samples_RAM(
  64.                 .clock(CLOCK_50),
  65.                 .address(index),
  66.                 .wren(0),
  67.                 .q(signal)
  68. );
  69.  
  70. VGA_Audio_PLL   p1 (   
  71.     .areset(~DLY_RST),
  72.     .inclk0(CLOCK_27),
  73.     .c0(VGA_CTRL_CLK),
  74.     .c1(AUD_CTRL_CLK),
  75.     .c2(VGA_CLK)
  76. );
  77.  
  78. I2C_AV_Config u3(  
  79. //  Host Side
  80.   .iCLK(CLOCK_50),
  81.   .iRST_N(KEY[0]),
  82. //  I2C Side
  83.   .I2C_SCLK(I2C_SCLK),
  84.   .I2C_SDAT(I2C_SDAT)  
  85. );
  86.  
  87. assign  AUD_ADCLRCK =   AUD_DACLRCK;
  88. assign  AUD_XCK     =   AUD_CTRL_CLK;
  89.  
  90. audio_clock u4(
  91. //  Audio Side
  92.    .oAUD_BCK(AUD_BCLK),
  93.    .oAUD_LRCK(AUD_DACLRCK),
  94. //  Control Signals
  95.   .iCLK_18_4(AUD_CTRL_CLK),
  96.    .iRST_N(DLY_RST)
  97. );
  98.  
  99. audio_converter u5(
  100.     // Audio side
  101.     .AUD_BCK(AUD_BCLK),       // Audio bit clock
  102.     .AUD_LRCK(AUD_DACLRCK), // left-right clock
  103.     .AUD_ADCDAT(AUD_ADCDAT),
  104.     .AUD_DATA(AUD_DACDAT),
  105.     // Controller side
  106.     .iRST_N(DLY_RST),  // reset
  107.     .AUD_outL(audio_outL),
  108.     .AUD_outR(audio_outR),
  109.     .AUD_inL(audio_inL),
  110.     .AUD_inR(audio_inR)
  111. );
  112.  
  113. wire [15:0] audio_inL, audio_inR;
  114. wire [15:0] audio_outL, audio_outR;
  115. wire [15:0] signal;
  116.  
  117. reg [31:0] index = 0;
  118. wire snareB,hihatB,bassB;
  119.  
  120. oneshot k0(KEY[0], AUD_DACLRCK, snareB);
  121. oneshot k1(KEY[1], AUD_DACLRCK, hihatB);
  122. oneshot k2(KEY[2], AUD_DACLRCK, bassB);
  123.  
  124. wire [15:0] snareSignal,hihatSignal,bassSignal;
  125. reg snareFlag,hihatFlag,bassFlag;
  126.  
  127. assign audio_outR = signal;
  128. assign audio_outL = signal;
  129.  
  130. assign LEDG[0] = snareB;
  131. assign LEDG[1] = snareE;
  132. assign LEDG[2] = snareD;
  133. assign LEDG[5:3] = state;
  134.  
  135. parameter def = 0, snare = 1, hihat = 2, bass = 3;
  136. reg [3:0] state;
  137. reg snareE,snareD,hihatE,hihatD,bassE,bassD;
  138.  
  139. initial begin
  140.     state = def;
  141. end
  142.  
  143. always @(negedge AUD_DACLRCK) begin
  144.     if(snareB) begin
  145.         state = snare;
  146.     end
  147.     else if(hihatB) begin
  148.         state = hihat;
  149.     end
  150.     else if(bassB) begin
  151.         state = bass;
  152.     end
  153.        
  154.     case(state)
  155.         snare:
  156.         begin
  157.             index <= 0;
  158.             if(index < 4000-1) index <= index + 1'b1;
  159.             else begin
  160.                 index<=0;
  161.                 state = def;
  162.             end
  163.         end
  164.         hihat:
  165.         begin
  166.             index <= 4000;
  167.             if(index < 8000-1) index <= index + 1'b1;
  168.             else begin
  169.                 index<=4000;
  170.                 state = def;
  171.             end
  172.         end
  173.         bass:
  174.         begin
  175.             index <= 8000;
  176.             if(index < 12000-1) index <= index + 1'b1;
  177.             else begin
  178.                 index<=8000;
  179.                 state = def;
  180.             end
  181.         end
  182.     endcase
  183. end
  184.  
  185. endmodule
  186.  
  187. module oneshot(sin, clock, sout);
  188.     input sin, clock;
  189.     output sout;
  190.     reg sout, q;
  191.    
  192.     always @(posedge sin or posedge sout) begin
  193.         if(sout)
  194.             q <= 0;
  195.         else
  196.             q <= 1;
  197.     end
  198.     always @(posedge clock) begin
  199.         sout <= q;
  200.     end
  201. endmodule
  202.  
Advertisement
Add Comment
Please, Sign In to add comment