Advertisement
7isenko

mult

Apr 20th, 2022
1,312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module mult(
  2.     input clk_i,
  3.     input rst_i,
  4.    
  5.     input start_i,
  6.     input [7:0] a_bi,
  7.     input [7:0] b_bi,
  8.    
  9.     output reg [15:0] y_bo,
  10.     output busy_o
  11.     );
  12.    
  13.     localparam IDLE = 1'b0;
  14.     localparam WORK = 1'b1;
  15.    
  16.     reg [2:0] ctr;
  17.     wire [2:0] end_step;
  18.     wire [7:0] part_sum;
  19.     wire [15:0] shifted_part_sum;
  20.     reg [7:0] a, b;
  21.     reg [15:0] part_res;
  22.     reg state;
  23.    
  24.     assign part_sum = a &{8{b[ctr]}}; // a & (replicate b[ctr] 8 times)
  25.     assign shifted_part_sum = part_sum << ctr;
  26.     assign end_step = (ctr == 3'h7);
  27.     assign busy_o = state;
  28.    
  29.     always @(posedge clk_i)
  30.         if(rst_i)
  31.         begin
  32.             ctr <= 0;
  33.             part_res <= 0;
  34.             y_bo <= 0;
  35.            
  36.             state <= IDLE;
  37.         end else
  38.         begin
  39.             case(state)
  40.             IDLE:
  41.                 if(start_i)
  42.                 begin
  43.                     state <= WORK;
  44.                    
  45.                     a <= a_bi;
  46.                     b <= b_bi;
  47.                     ctr <= 0;
  48.                     part_res <= 0;
  49.                 end
  50.             WORK:
  51.                 begin
  52.                     if (end_step)
  53.                     begin
  54.                         state <= IDLE;
  55.                         y_bo <= part_res;
  56.                     end
  57.                    
  58.                     part_res <= part_res + shifted_part_sum; // ___СЛОЖЕНИЕ___
  59.                     ctr <= ctr + 1;
  60.                 end
  61.             endcase
  62.         end
  63. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement