SumAcc.v 981 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. module SumAcc
  2. #(
  3. parameter IDataWidth = 14,
  4. parameter ODataWidth = 48
  5. )
  6. (
  7. input Clk_i,
  8. input Rst_i,
  9. input Val_i,
  10. input [IDataWidth-1:0] Data_i,
  11. output [ODataWidth-1:0] Result_o
  12. );
  13. //================================================================================
  14. // LOCALPARAMS
  15. //================================================================================
  16. // REG/WIRE
  17. reg [ODataWidth-1:0] dataAcc;
  18. reg resultVal;
  19. wire [ODataWidth-1:0] extData = {{(ODataWidth - IDataWidth){Data_i[IDataWidth-1]}}, Data_i}; //sign extension
  20. //================================================================================
  21. // ASSIGNMENTS
  22. assign Result_o = dataAcc;
  23. //================================================================================
  24. // CODING
  25. always @(posedge Clk_i) begin
  26. if (Rst_i) begin
  27. dataAcc <= {ODataWidth{1'b0}};
  28. end else if (Val_i) begin
  29. dataAcc <= dataAcc+extData;
  30. end else begin
  31. dataAcc <= 0;
  32. end
  33. end
  34. endmodule