| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- `timescale 1ns / 1ps
- //////////////////////////////////////////////////////////////////////////////////
- // Company:
- // Engineer:
- //
- // Create Date: 10:02:35 04/20/2020
- // Design Name:
- // Module Name: SimpleMult
- // Project Name:
- // Target Devices:
- // Tool versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module SimpleMult
- #(
- parameter FactorAWidth = 14,
- parameter FactorBWidth = 14,
- parameter OutputWidth = 18
- )
- (
- input Rst_i,
- input Clk_i,
- input Val_i,
- input signed [FactorAWidth-1:0] FactorA_i,
- input signed [FactorBWidth-1:0] FactorB_i,
-
-
- output signed [OutputWidth-1:0] Result_o,
- output ResultVal_o
- );
- //================================================================================
- // LOCALPARAM
- localparam ResultWidth = FactorAWidth+FactorBWidth;
- //================================================================================
- // REG/WIRE
- reg [ResultWidth-1:0] resultReg;
- reg resultValReg;
- //================================================================================
- // ASSIGNMENTS
- assign Result_o = (ResultWidth==OutputWidth)? resultReg:resultReg[ResultWidth-2-:OutputWidth];
- assign ResultVal_o = resultValReg;
- //================================================================================
- // CODING
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (Val_i) begin
- resultReg <= FactorA_i*FactorB_i;
- resultValReg <= Val_i;
- end else begin
- resultReg <= {ResultWidth{1'b0}};
- resultValReg <= 1'b0;
- end
- end else begin
- resultReg <= {ResultWidth{1'b0}};
- resultValReg <= 1'b0;
- end
- end
- endmodule
|