Advertisement
Guest User

Untitled

a guest
Nov 12th, 2023
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 KB | None | 0 0
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 11/10/2023 05:13:54 PM
  7. // Design Name:
  8. // Module Name: Rx_fsm
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21.  
  22.  
  23. module Rx_fsm(
  24. input CLK50MHZ,
  25. input baud_tick,
  26. input FIFO_nFull,
  27. input RxD,
  28. input n_rst,
  29. output reg [7:0] sample,
  30. output reg Rx_Done
  31. );
  32.  
  33. reg [5:0] state, next_state;
  34. reg [3:0] tick_no;
  35. reg [3:0] bit_no;
  36. parameter init = 6'b000001,
  37. wait7 = 6'b000010,
  38. wait16 = 6'b000100,
  39. sample_out = 6'b001000,
  40. add_bit = 6'b010000,
  41. done = 6'b100000;
  42. // State and next state register
  43. always@(posedge CLK50MHZ or negedge n_rst) begin
  44. if(!n_rst) begin
  45. state <= init;
  46. end
  47. else if(baud_tick) begin
  48. state <= next_state;
  49. end
  50. else begin
  51. state <= state;
  52. end
  53. end
  54.  
  55. //Counter register
  56. // always@(posedge CLK50MHZ or negedge n_rst) begin
  57. // if(!n_rst) begin
  58. // tick_no <= 0;
  59. // end
  60. // else if(baud_tick) tick_no <= tick_no + 1;
  61. // else tick_no <= tick_no;
  62. // end
  63.  
  64. always@(*) begin: next_state_logic
  65. case(state)
  66. init: begin
  67. tick_no = 0;
  68. bit_no = 0;
  69. if(!RxD) next_state = wait7;
  70. else next_state = init;
  71. end
  72. wait7: begin
  73. bit_no = 0;
  74. tick_no = tick_no + 1;
  75. if(tick_no == 8) begin
  76. next_state = wait16;
  77. tick_no = 0;
  78. end
  79. else next_state = wait7;
  80. end
  81. wait16: begin
  82. bit_no = bit_no;
  83. tick_no = tick_no + 1;
  84. if(tick_no == 16) begin
  85. next_state = sample_out;
  86. tick_no = 0;
  87. end
  88. else next_state = wait16;
  89. end
  90. sample_out: begin
  91. next_state = add_bit;
  92. tick_no = tick_no;
  93. bit_no = bit_no;
  94. end
  95. add_bit: begin
  96. bit_no = bit_no + 1;
  97. tick_no = 0;
  98. if(bit_no == 8) begin
  99. next_state = done;
  100. bit_no = 0;
  101. tick_no = 0;
  102. end
  103. else next_state = wait16;
  104. end
  105. done: begin
  106. tick_no = 0;
  107. bit_no = 0;
  108. next_state = init;
  109. end
  110. default: begin
  111. next_state = init;
  112. tick_no = 0;
  113. bit_no = 0;
  114. end
  115. endcase
  116. end
  117.  
  118. always@(state) begin: output_logic
  119. case(state)
  120. init: begin
  121. sample = 8'b0;
  122. Rx_Done = 1'b0;
  123. end
  124. wait7: begin
  125. sample = 8'b0;
  126. Rx_Done = 1'b0;
  127. end
  128. wait16: begin
  129. sample = 8'b0;
  130. Rx_Done = 1'b0;
  131. end
  132. sample_out: begin
  133. sample[bit_no] = 1'b1;
  134. Rx_Done = 1'b0;
  135. end
  136. add_bit: begin
  137. sample = 8'b0;
  138. Rx_Done = 1'b0;
  139. end
  140. done: begin
  141. sample = 8'b0;
  142. Rx_Done = 1'b1;
  143. end
  144. default: begin
  145. sample = 8'b0;
  146. Rx_Done = 1'b0;
  147. end
  148. endcase
  149. end
  150. endmodule
  151.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement