SimpleMult.v 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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: SimpleMult
  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 SimpleMult
  22. #(
  23. parameter FactorAWidth = 14,
  24. parameter FactorBWidth = 14,
  25. parameter OutputWidth = 18
  26. )
  27. (
  28. input Rst_i,
  29. input Clk_i,
  30. input Val_i,
  31. input signed [FactorAWidth-1:0] FactorA_i,
  32. input signed [FactorBWidth-1:0] FactorB_i,
  33. output signed [OutputWidth-1:0] Result_o,
  34. output ResultVal_o
  35. );
  36. //================================================================================
  37. // LOCALPARAM
  38. localparam ResultWidth = FactorAWidth+FactorBWidth;
  39. //================================================================================
  40. // REG/WIRE
  41. reg [ResultWidth-1:0] resultReg;
  42. reg resultValReg;
  43. //================================================================================
  44. // ASSIGNMENTS
  45. assign Result_o = (ResultWidth==OutputWidth)? resultReg:resultReg[ResultWidth-2-:OutputWidth];
  46. assign ResultVal_o = resultValReg;
  47. //================================================================================
  48. // CODING
  49. always @(posedge Clk_i) begin
  50. if (!Rst_i) begin
  51. if (Val_i) begin
  52. resultReg <= FactorA_i*FactorB_i;
  53. resultValReg <= Val_i;
  54. end else begin
  55. resultReg <= {ResultWidth{1'b0}};
  56. resultValReg <= 1'b0;
  57. end
  58. end else begin
  59. resultReg <= {ResultWidth{1'b0}};
  60. resultValReg <= 1'b0;
  61. end
  62. end
  63. endmodule