MultModule.v 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 10:02:35 04/20/2020
  7. // Design Name:
  8. // Module Name: mult_module
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module MultModule
  22. #(
  23. parameter AdcDataWidth = 14,
  24. parameter IfNcoOutWidth = 18,
  25. parameter MultDataWidth = 36
  26. )
  27. (
  28. input Rst_i,
  29. input Clk_i,
  30. input signed [AdcDataWidth-1:0] AdcData_i,
  31. input signed [IfNcoOutWidth-1:0] Sin_i,
  32. input signed [IfNcoOutWidth-1:0] Cos_i,
  33. output signed [MultDataWidth-1:0] AdcSin_o,
  34. output signed [MultDataWidth-1:0] AdcCos_o
  35. );
  36. //================================================================================
  37. // LOCALPARAM
  38. //================================================================================
  39. // REG/WIRE
  40. reg signed [IfNcoOutWidth-1:0] adcDataCompl;
  41. reg signed [IfNcoOutWidth-1:0] sinReg;
  42. reg signed [IfNcoOutWidth-1:0] cosReg;
  43. reg signed [MultDataWidth-1:0] AdcSinReg;
  44. reg signed [MultDataWidth-1:0] AdcCosReg;
  45. //================================================================================
  46. // ASSIGNMENTS
  47. assign AdcSin_o = AdcSinReg;
  48. assign AdcCos_o = AdcCosReg;
  49. //================================================================================
  50. // CODING
  51. always @(posedge Clk_i) begin
  52. if (!Rst_i) begin
  53. adcDataCompl <= {AdcData_i,4'b0};
  54. sinReg <= Sin_i;
  55. cosReg <= Cos_i;
  56. end else begin
  57. adcDataCompl <= 0;
  58. sinReg <= 0;
  59. cosReg <= 0;
  60. end
  61. end
  62. always @(posedge Clk_i) begin
  63. if (!Rst_i) begin
  64. AdcSinReg <= adcDataCompl*sinReg;
  65. AdcCosReg <= adcDataCompl*cosReg;
  66. end else begin
  67. AdcSinReg <= {MultDataWidth{1'b0}};
  68. AdcCosReg <= {MultDataWidth{1'b0}};
  69. end
  70. end
  71. endmodule