Advertisement
Guest User

Stereo Encoder 192kHz

a guest
Jan 7th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module module_192kHz(
  2.     clock,
  3.     reset,
  4.     start,
  5.     ready,
  6.     clken192kHz,
  7.     interpolated_LpR,
  8.     interpolated_LmR,
  9.     Kp,
  10.     Kf,
  11.     stepWc,
  12.     step
  13. );
  14. parameter step_19kHz = 32'b0011001_010101;
  15. parameter step_38kHz = 32'b0001100_101010;
  16.  
  17. parameter M = 18;
  18. parameter N = 4;
  19.  
  20. input clock;
  21. input reset;
  22. input start;
  23. input ready;
  24. input clken192kHz;
  25.  
  26. wire signed [17:0] outsine19kHz;
  27. wire signed [17:0] outsine38kHz;
  28. wire signed [17:0] mstereo;
  29. wire signed [29:0] outmstereo;
  30.  
  31. input signed [17:0] interpolated_LpR;
  32. input signed [17:0] interpolated_LmR;
  33.  
  34. input Kf;
  35. input [3:0] Kp;
  36. input [29:0] stepWc;
  37. output [29:0] step;
  38.  
  39.  dds  dds_38kHz(
  40.             .clock( clock ),
  41.             .reset( reset ),
  42.             .enableclk( clken192kHz ),
  43.             .phaseinc( step_38kHz ),
  44.             .outsine( sine38kHz )
  45.     );
  46.  
  47.  dds  dds_19kHz(
  48.             .clock( clock ),
  49.             .reset( reset ),
  50.             .enableclk( clken192kHz ),
  51.             .phaseinc( step_19kHz ),
  52.             .outsine( sine19kHz )
  53.     );
  54.  
  55. // Multiplies interpolated_LmR by a sine wave with a 38kHz frequency
  56.  seqmultNM #( // definition of parameters
  57. .N( N ), // parameter N = number of bits of the multiplier
  58. .M( M ) // parameter M = numbero of bits of the multiplicand
  59.  )
  60. seqmult_19kHz // instance name
  61. (
  62.  .clock( clock ), // Master clock
  63.  .reset( reset ), // Master reset, synchronous and active high
  64.  .start( start ), // Set to 1 during one clock cycle to start the multiplication
  65.  .ready( ready ), // Set to 1 when the multiplier is ready to accept a new start
  66.  .A( sine19kHz ), // Multiplicand, signed M bits
  67.  .B( Kp ), // Multiplier, signed N bits
  68.  .R( outsine19kHz ) // Result, signed M+N bits
  69.  );  
  70.  
  71.   seqmultNM #( // definition of parameters
  72. .N( N ), // parameter N = number of bits of the multiplier
  73. .M( M ) // parameter M = numbero of bits of the multiplicand
  74.  )
  75. seqmult_38kHz // instance name
  76. (
  77.  .clock( clock ), // Master clock
  78.  .reset( reset ), // Master reset, synchronous and active high
  79.  .start( start ), // Set to 1 during one clock cycle to start the multiplication
  80.  .ready( ready ), // Set to 1 when the multiplier is ready to accept a new start
  81.  .A( interpolated_LmR ), // Multiplicand, signed M bits
  82.  .B( sine38kHz ), // Multiplier, signed N bits
  83.  .R( outsine38kHz ) // Result, signed M+N bits
  84.  );  
  85.  
  86. assign mstereo = outsine19kHz + interpolated_LpR + outsine38kHz;
  87.  
  88.   seqmultNM #( // definition of parameters
  89. .N( N ), // parameter N = number of bits of the multiplier
  90. .M( M ) // parameter M = numbero of bits of the multiplicand
  91.  )
  92. seqmult_Kf // instance name
  93. (
  94.  .clock( clock ), // Master clock
  95.  .reset( reset ), // Master reset, synchronous and active high
  96.  .start( start ), // Set to 1 during one clock cycle to start the multiplication
  97.  .ready( ready ), // Set to 1 when the multiplier is ready to accept a new start
  98.  .A( mstereo ), // Multiplicand, signed M bits
  99.  .B( Kf ), // Multiplier, signed N bits
  100.  .R( outmstereo ) // Result, signed M+N bits
  101.  );  
  102.  
  103.  assign step = mstereo + stepWc;
  104.  
  105.  endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement