Advertisement
Guest User

Untitled

a guest
Mar 20th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.49 KB | None | 0 0
  1. module booth(
  2. input [7:0]in,
  3. input clk,nrst,
  4. output reg [7:0]out);
  5. initial begin
  6. $dumpfile("dump.vcd");
  7. $dumpvars(1,booth);
  8. end
  9. localparam S1=4'd0;
  10. localparam S2=4'd1;
  11. localparam S3=4'd2;
  12. localparam S4=4'd3;
  13. localparam S5=4'd4;
  14. localparam S6=4'd5;
  15. localparam S7=4'd6;
  16. localparam S8=4'd7;
  17. localparam S9=4'd8;
  18. localparam S10=4'd9;
  19. localparam S11=4'd10;
  20. localparam S12=4'd11;
  21. reg [3:0]st;
  22. reg [3:0]st_nxt;
  23. reg [1:0]count,count_nxt;
  24. reg [8:0]q,q_nxt,a,a_nxt;
  25. reg [7:0]m,m_nxt;
  26.  
  27. always @(posedge clk,negedge nrst)
  28. begin
  29. if(!nrst)
  30. begin
  31. st<=S1;
  32. count<=1'd0;
  33. q<=9'd0;
  34. a<=9'd0;
  35. m<=8'd0;
  36. end
  37. else begin
  38. st<=st_nxt;
  39. count<=count_nxt;
  40. q<=q_nxt;
  41. a<=a_nxt;
  42. m<=m_nxt;
  43. end
  44. end
  45.  
  46. always @(*)
  47. begin
  48. st_nxt=st;
  49. count_nxt=count;
  50. q_nxt=q;
  51. a_nxt=a;
  52. m_nxt=m;
  53. case(st)
  54. S1:begin
  55. st_nxt=S2;
  56. end
  57. S2:begin
  58. q_nxt[8:1]=in;
  59. a_nxt=8'd0;
  60. q_nxt[0]=1'b0;
  61. count_nxt=3'b0;
  62. st_nxt=S3;
  63. end
  64. S3:begin
  65. m_nxt=in;
  66. case(q[2:0])
  67. 3'b000:begin
  68. st_nxt=S8; end
  69. 3'b111:begin
  70. st_nxt=S8; end
  71. 3'b001:begin
  72. st_nxt=S4;end
  73. 3'b010:begin
  74. st_nxt=S4;end
  75. 3'b110:begin
  76. st_nxt=S5;end
  77. 3'b101:begin
  78. st_nxt=S5;end
  79. 3'b011:begin
  80. st_nxt=S6;end
  81. 3'b100:begin
  82. st_nxt=S7;end
  83. endcase
  84. end
  85. S4:begin
  86. a_nxt=a+m;
  87. st_nxt=S8;end
  88. S5:begin
  89. a_nxt=a-m;
  90. st_nxt=S8;end
  91. S6:begin
  92. a_nxt=a+2*m;
  93. st_nxt=S8;end
  94. S7:begin
  95. a_nxt=a-2*m;
  96. st_nxt=S8;end
  97. S8:begin
  98. {a_nxt[6:0],q_nxt[8:0]}={a,q[8:2]};
  99. a_nxt[7]=a[8];
  100. a_nxt[8]=a[8];
  101. if(count==2'b11)
  102. st_nxt=S10;
  103. else st_nxt=S9;
  104. end
  105. S9:begin
  106. count_nxt=count+1'b001;
  107. case(q[2:0])
  108. 3'b000:begin
  109. st_nxt=S8; end
  110. 3'b111:begin
  111. st_nxt=S8; end
  112. 3'b001:begin
  113. st_nxt=S4;end
  114. 3'b010:begin
  115. st_nxt=S4;end
  116. 3'b101:begin
  117. st_nxt=S5;end
  118. 3'b110:begin
  119. st_nxt=S5;end
  120. 3'b011:begin
  121. st_nxt=S6;end
  122. 3'b100:begin
  123. st_nxt=S7;end
  124. endcase
  125. end
  126. S10:begin
  127. out=q[8:1];
  128. st_nxt=S11;
  129. end
  130. S11:begin
  131. out=a[7:0];
  132. st_nxt=S12;
  133. end
  134. S12:begin
  135. st_nxt=st;
  136. end
  137. endcase
  138. end
  139. endmodule
  140.  
  141.  
  142.  
  143. module booth_tb;
  144. reg [7:0]in;
  145. reg nrst,clk;
  146. output [7:0]out;
  147.  
  148. booth mod (.in(in),.nrst(nrst),.clk(clk),.out(out));
  149. initial begin
  150. $dumpfile("dump.vcd");
  151. $dumpvars(1,booth_tb);
  152. end
  153. initial begin
  154. clk=0;
  155. repeat(100) begin #3 clk=~clk; end
  156. end
  157. initial begin
  158. nrst=0;
  159. #1 nrst=~nrst;
  160.  
  161. end
  162. initial begin
  163. in=8'd5;
  164. #10 in=8'd2;
  165.  
  166. end
  167. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement