Advertisement
asurkis

Untitled

Mar 13th, 2021
1,423
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2.  
  3. module mult (
  4.     input clk_i,
  5.     input rst_i ,
  6.     input [7 : 0] a_bi,
  7.     input [7 : 0] b_bi,
  8.     output busy_o,
  9.     output reg [15 : 0] y_bo
  10. );
  11.  
  12. localparam IDLE = 1'b0;
  13. localparam WORK = 1'b1;
  14.  
  15. reg [2 : 0] ctr;
  16. wire [2 : 0] end_step;
  17. wire [7 : 0] part_sum;
  18. wire [15 : 0] shifted_part_sum;
  19. reg [7 : 0] a, b;
  20. reg [15 : 0] part_res;
  21. reg state;
  22.  
  23. assign part_sum = a & {8{b[ctr]}} ;
  24. assign shifted_part_sum = part_sum << ctr ;
  25. assign end_step = (ctr == 3'h7);
  26. assign busy_o = state;
  27.  
  28. always @(posedge clk_i)
  29.     if (rst_i) begin
  30.         ctr <= 0;
  31.         part_res <= 0;
  32.         y_bo <= 0;
  33.         state <= WORK;
  34.         a <= a_bi;
  35.         b <= b_bi;
  36.     end else begin
  37.         case (state)
  38.             IDLE: y_bo <= part_res;
  39.             WORK:
  40.                 begin
  41.                     if (end_step) begin
  42.                         state <= IDLE;
  43.                         y_bo <= part_res;
  44.                     end
  45.                     part_res <= part_res + shifted_part_sum;
  46.                     ctr <= ctr + 1;
  47.                 end
  48.         endcase
  49.     end
  50. endmodule
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement