Advertisement
toweber

mac_reduced_param.v

Aug 29th, 2022
1,117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module mac #(parameter S_WIDTH=4, W_WIDTH=4, MULT_WIDTH = 8, ACC_PR_WIDTH = 10, ACC_WIDTH = 6)    (in1, in2, clk, reset, acc);  
  2.    input signed [S_WIDTH-1:0] in1;
  3.    input signed [W_WIDTH-1:0] in2;  
  4.    input       clk;
  5.    output reg signed [ACC_WIDTH-1:0] acc;
  6.    input        reset;
  7.    
  8.    reg signed [MULT_WIDTH-1:0]   out_mult;
  9.    reg signed [ACC_PR_WIDTH:0]   acc_pre_reduced;
  10.    
  11.    always @(posedge clk or posedge reset)
  12.      begin
  13.         out_mult <= in1*in2;
  14.         if (reset)
  15.           begin
  16.              acc_pre_reduced <= 0;
  17.              acc <= 0;
  18.           end            
  19.         else
  20.           acc_pre_reduced = out_mult+acc_pre_reduced;
  21.           if (acc_pre_reduced > 2**(ACC_WIDTH-1))          acc = 2**(ACC_WIDTH-1)-1;
  22.           else if (acc_pre_reduced < -(2**(ACC_WIDTH-1)))          acc = -2**(ACC_WIDTH-1);
  23.           else acc = acc_pre_reduced;
  24.      end
  25.        
  26. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement