| 123456789101112131415161718192021222324252627282930313233343536373839 |
- module SumAcc
- #(
- parameter IDataWidth = 14,
- parameter ODataWidth = 48
- )
- (
- input Clk_i,
- input Rst_i,
- input Val_i,
- input [IDataWidth-1:0] Data_i,
-
- output [ODataWidth-1:0] Result_o
- );
- //================================================================================
- // LOCALPARAMS
- //================================================================================
- // REG/WIRE
- reg [ODataWidth-1:0] dataAcc;
- reg resultVal;
- wire [ODataWidth-1:0] extData = {{(ODataWidth - IDataWidth){Data_i[IDataWidth-1]}}, Data_i}; //sign extension
-
- //================================================================================
- // ASSIGNMENTS
- assign Result_o = dataAcc;
- //================================================================================
- // CODING
- always @(posedge Clk_i) begin
- if (Rst_i) begin
- dataAcc <= {ODataWidth{1'b0}};
- end else if (Val_i) begin
- dataAcc <= dataAcc+extData;
- end else begin
- dataAcc <= 0;
- end
- end
- endmodule
|