Advertisement
Guest User

17

a guest
Dec 11th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. `timescale 1ns / 1ps
  2.  
  3. module top(
  4. input [1:0] in,
  5. input clk,
  6. input rst,
  7. output out
  8. );
  9.  
  10. parameter S0=4'b0000, S1=4'b0001, S2=4'b0010, S3=4'b0011, S4=4'b0100, S5=4'b0101, S6=4'b0110, S7=4'b0111, S8=4'b1000;
  11.  
  12. reg [3:0] state = S0;
  13. reg [3:0] nextstate = S0;
  14. reg out_tmp = 1'bx;
  15.  
  16. always @(*) begin
  17. case( state )
  18.  
  19. S0:
  20. case( in )
  21. 2'b00:
  22. nextstate = S0;
  23. 2'b01:
  24. nextstate = S1;
  25. 2'b10:
  26. nextstate = S5;
  27. 2'b11:
  28. nextstate = S0;
  29. default:
  30. nextstate = S0;
  31. endcase
  32.  
  33. S1:
  34. case( in )
  35. 2'b00:
  36. nextstate = S8;
  37. 2'b01:
  38. nextstate = S1;
  39. 2'b10:
  40. nextstate = S0;
  41. 2'b11:
  42. nextstate = S2;
  43. default:
  44. nextstate = S0;
  45. endcase
  46.  
  47. S2:
  48. case( in )
  49. 2'b00:
  50. nextstate = S0;
  51. 2'b01:
  52. nextstate = S7;
  53. 2'b10:
  54. nextstate = S3;
  55. 2'b11:
  56. nextstate = S2;
  57. default:
  58. nextstate = S0;
  59. endcase
  60.  
  61. S3:
  62. case( in )
  63. 2'b00:
  64. nextstate = S4;
  65. 2'b01:
  66. nextstate = S0;
  67. 2'b10:
  68. nextstate = S3;
  69. 2'b11:
  70. nextstate = S6;
  71. default:
  72. nextstate = S0;
  73. endcase
  74.  
  75. S4:
  76. case( in )
  77. 2'b00:
  78. nextstate = S4;
  79. 2'b01:
  80. nextstate = S1;
  81. 2'b10:
  82. nextstate = S5;
  83. 2'b11:
  84. nextstate = S0;
  85. default:
  86. nextstate = S0;
  87. endcase
  88.  
  89. S5:
  90. case( in )
  91. 2'b00:
  92. nextstate = S4;
  93. 2'b01:
  94. nextstate = S0;
  95. 2'b10:
  96. nextstate = S5;
  97. 2'b11:
  98. nextstate = S6;
  99. default:
  100. nextstate = S0;
  101. endcase
  102.  
  103. S6:
  104. case( in )
  105. 2'b00:
  106. nextstate = S0;
  107. 2'b01:
  108. nextstate = S7;
  109. 2'b10:
  110. nextstate = S3;
  111. 2'b11:
  112. nextstate = S6;
  113. default:
  114. nextstate = S0;
  115. endcase
  116.  
  117. S7:
  118. case( in )
  119. 2'b00:
  120. nextstate = S8;
  121. 2'b01:
  122. nextstate = S7;
  123. 2'b10:
  124. nextstate = S0;
  125. 2'b11:
  126. nextstate = S2;
  127. default:
  128. nextstate = S0;
  129. endcase
  130.  
  131. S8:
  132. case( in )
  133. 2'b00:
  134. nextstate = S8;
  135. 2'b01:
  136. nextstate = S1;
  137. 2'b10:
  138. nextstate = S5;
  139. 2'b11:
  140. nextstate = S0;
  141. default:
  142. nextstate = S0;
  143. endcase
  144.  
  145. default:
  146. nextstate = S0;
  147. endcase
  148. end
  149.  
  150. always @( posedge clk ) begin
  151. if( rst == 1'b1 ) begin
  152. state <= S0;
  153. end
  154. else begin
  155. state <= nextstate;
  156. end
  157. end
  158.  
  159. always @(*) begin
  160. if( state == S1 || state == S2 || state == S3 || state == S4 ) begin
  161. out_tmp <= 1'b0; // LEFT
  162. end
  163. else if( state == S5 || state == S6 || state == S7 || state == S8 ) begin
  164. out_tmp <= 1'b1; // RIGHT
  165. end
  166. else begin
  167. out_tmp <= 1'bx; // UNKNOWN
  168. end
  169. end
  170.  
  171. assign out = out_tmp;
  172.  
  173. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement