0_background 20_dots 40_glitches_back_2 60_glitches_back 80_transit_map 104_icosahedron_wireframe 105_decagonal_pyramid_wireframe 125_portraits 145_sun 160_glitches_front 180_paper_strips 203_rickroll_1 204_rickroll_2 205_rickroll_3
module pipelined_mac #(
    parameter WIDTH = 8
    )(
    input  wire                  clk,
    input  wire                  reset,
    input  wire [WIDTH-1:0]      a,
    input  wire [WIDTH-1:0]      b,
    // [(WIDTH*2):0] in case of overflow
    output reg  [(WIDTH*2):0]    accumulator
    );

    reg [(WIDTH*2)-1:0] mult_reg;

    always @(posedge clk) begin
        if (reset) begin
            mult_reg    <= 0;
            accumulator <= 0;
        end else begin
            // multiplication
            mult_reg    <= a * b;

            // accumulation
            accumulator <= accumulator + mult_reg;
        end
    end

endmodule
220_frame 245_hands