Advertisement
Guest User

module_48kHz

a guest
Jan 7th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module module_48kHz(
  2.     clock,
  3.     reset,
  4.     start,
  5.     ready,
  6.     Ks,
  7.     Kd,
  8.     clken48kHz,
  9.     clken192kHz,
  10.     left,
  11.     right,
  12.     interpolated_LpR,
  13.     interpolated_LmR
  14. );
  15.  
  16. parameter M = 18;
  17. parameter N = 4;
  18.  
  19. input clock;
  20. input reset;
  21. input start;
  22. input ready;
  23. input clken48kHz;
  24. input clken192kHz;
  25.  
  26. input [3:0] Ks;
  27. input [3:0] Kd;
  28.  
  29. input signed [17:0] left;
  30. input signed [17:0] right;
  31.  
  32. reg signed [17:0] LpR;
  33. reg signed [17:0] LmR;
  34.  
  35. wire signed[22:0] LpR_Ks;
  36. wire signed[22:0] LmR_Kd;
  37.  
  38. reg signed [17:0] LpR_Ks_18bit;
  39. reg signed [17:0] LmR_Kd_18bit;
  40.  
  41. output reg signed [17:0] interpolated_LpR;
  42. output reg signed [17:0] interpolated_LmR;
  43.  
  44. always @*
  45.     begin
  46.         LpR <= left + right;
  47.         LmR <= left - right;
  48.     end
  49.  
  50. seqmultNM #( // definition of parameters
  51. .N( 5 ), // parameter N = number of bits of the multiplier
  52. .M( 18 ) // parameter M = numbero of bits of the multiplicand
  53.  )
  54. seqmult_LpR // instance name
  55. (
  56.  .clock( clock ), // Master clock
  57.  .reset( reset ), // Master reset, synchronous and active high
  58.  .start( start ), // Set to 1 during one clock cycle to start the multiplication
  59.  .ready( ready ), // Set to 1 when the multiplier is ready to accept a new start
  60.  .A( LpR ), // Multiplicand, signed M bits
  61.  .B( {1'b0, Ks} ), // Multiplier, signed N bits
  62.  .R( LpR_Ks ) // Result, signed M+N bits
  63.  );
  64.  
  65.  seqmultNM #( // definition of parameters
  66. .N( 5 ), // parameter N = number of bits of the multiplier
  67. .M( 18 ) // parameter M = numbero of bits of the multiplicand
  68.  )
  69. seqmult_LmR // instance name
  70. (
  71.  .clock( clock ), // Master clock
  72.  .reset( reset ), // Master reset, synchronous and active high
  73.  .start( start ), // Set to 1 during one clock cycle to start the multiplication
  74.  .ready( ready ), // Set to 1 when the multiplier is ready to accept a new start
  75.  .A( LmR ), // Multiplicand, signed M bits
  76.  .B( {1'b0, Kd} ), // Multiplier, signed N bits
  77.  .R( LpR_Ks ) // Result, signed M+N bits
  78.  );  
  79.  
  80. interpol4x
  81. interpol4x_1(
  82.  .clock( clock ), // Master clock
  83.  .reset( reset ), // Master reset, synchronous active high
  84.  .clkenin( clken48kHz ), // Input clock enable
  85.  .clken4x( clken192kHz ), // Output clock enable (4X the input enable)
  86.  .xkin( LpR_Ks ), // Input signal, 18 bit signed
  87.  .ykout( interpolated_LpR ) // Output signal, 18 bit signed
  88.  );
  89.  
  90. interpol4x
  91. interpol4x_2(
  92.  .clock( clock ), // Master clock
  93.  .reset( reset ), // Master reset, synchronous active high
  94.  .clkenin( clken48kHz ), // Input clock enable
  95.  .clken4x( clken192kHz ), // Output clock enable (4X the input enable)
  96.  .xkin( LmR_Kd ), // Input signal, 18 bit signed
  97.  .ykout( interpolated_LmR ) // Output signal, 18 bit signed
  98.  );
  99.  
  100.  always @(posedge clock)
  101.  begin
  102.     if (start)
  103.     begin
  104.         LpR_Ks_18bit <= LpR_Ks >>> 5;
  105.         LmR_Kd_18bit <= LmR_Kd >>> 5;
  106.     end
  107.  end
  108.  
  109.  endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement