Advertisement
Tavi33

Booth

Mar 15th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. module booth
  2.  
  3. #( parameter OPERAND_BITS = 8,
  4. parameter RESULT_BITS = 16)
  5.  
  6. (
  7. input clk,
  8. input rst,
  9. input start,
  10.  
  11. input [OPERAND_BITS - 1 : 0] a,
  12. input [OPERAND_BITS - 1 : 0] b,
  13.  
  14. output[RESULT_BITS - 1 : 0] result
  15.  
  16. );
  17.  
  18. reg [OPERAND_BITS - 1 : 0] A;
  19. reg [OPERAND_BITS - 1 : 0] M;
  20. reg [OPERAND_BITS - 1 : -1] Q;
  21. reg [2:0] count;
  22.  
  23. localparam [2:0] WAIT=3'd0, INIT=3'd1, ADD=3'd2, SUB=3'd3, SHIFT=3'd4, END=3'd5;
  24.  
  25. reg [1:0] state;
  26. reg [1:0] state_nxt;
  27.  
  28. wire [1:0] Q01= {Q[0],Q[-1]};
  29.  
  30.  
  31.  
  32.  
  33. // sequential process
  34.  
  35. always
  36.  
  37. @(posedge clk)
  38. begin
  39. case(state)
  40. WAIT: ;
  41. INIT:
  42. begin
  43. A <= 0;
  44. count <= 0;
  45. M <= a;
  46. Q <= b;
  47. Q[-1] <= 0;
  48. end
  49. ADD:
  50. begin
  51. A = A + M;
  52. end
  53. SUB:
  54. begin
  55. A = A - M;
  56. end
  57. SHIFT:
  58. begin
  59. A[7] = A[7];
  60. {A[6:0],Q} = {A,Q[7:0]};
  61. count = count + 1;
  62. end
  63. endcase
  64.  
  65. // do something
  66.  
  67. end
  68.  
  69. always @(posedge clk or negedge rst)
  70. begin
  71. if(rst)
  72. state <= WAIT;
  73. else
  74. state <= state_nxt;
  75. end
  76.  
  77.  
  78.  
  79. // combinational process
  80.  
  81. always
  82.  
  83. @(start, Q01)
  84.  
  85. begin
  86.  
  87. // create state machine
  88. case(state)
  89. WAIT:
  90. if(start)
  91. state_nxt = INIT;
  92. else
  93. state_nxt = WAIT;
  94. INIT:
  95. if(Q01 == 2'b0_1)
  96. state_nxt = ADD;
  97. else
  98. state_nxt = SUB;
  99. ADD:
  100. if(count)
  101. state_nxt = END;
  102. else
  103. state_nxt = SHIFT;
  104. SUB:
  105. if(count)
  106. state_nxt = END;
  107. else
  108. state_nxt = SHIFT;
  109. SHIFT:
  110. if(Q01 == 2'b0_1)
  111. state_nxt = ADD;
  112. else
  113. state_nxt = SUB;
  114.  
  115. END: ;
  116. endcase
  117. // determine values for all signals in each state
  118.  
  119. end
  120.  
  121. assign result = {A, Q[7:0]};
  122.  
  123. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement