Advertisement
Guest User

Untitled

a guest
Oct 12th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. module read_flash_fsm ( input logic clk,
  2. input logic start,
  3. input logic[21:0] in_addr,
  4. input logic[7:0] flash_data,
  5. output logic finish,
  6. output logic[21:0] out_addr,
  7. output logic out_CE_N,
  8. output logic out_OE_N,
  9. output logic[15:0] audio_data );
  10.  
  11. // State Encoding = {State Number, finish, out_CE_N, out_OE_N}
  12. parameter WAIT_FOR_FIRST_BYTE = 6'b000_011;
  13. parameter OUTPUT_TO_FLASH = 6'b001_000;
  14. parameter REGISTER_DATA = 6'b010_011;
  15. parameter WAIT_FOR_SECOND_BYTE = 6'b011_111;
  16. parameter OUTPUT_FINISH = 6'b111_111;
  17.  
  18. reg[5:0] state;
  19. wire sample_collected;
  20.  
  21. // FSM
  22. always_ff @ (posedge clk) begin
  23. case (state)
  24.  
  25. WAIT_FOR_FIRST_BYTE : if (start) state <= OUTPUT_TO_FLASH;
  26.  
  27. OUTPUT_TO_FLASH : state <= REGISTER_DATA;
  28.  
  29. REGISTER_DATA : if (sample_collected) begin
  30. state <= OUTPUT_FINISH;
  31. audio_data[15:8] = flash_data;
  32. sample_collected <= 1'b0;
  33. end
  34. else begin
  35. state <= WAIT_FOR_SECOND_BYTE;
  36. audio_data[7:0] = flash_data;
  37. sample_collected <= 1'b1;
  38. end
  39.  
  40. WAIT_FOR_SECOND_BYTE : if (start) state <= OUTPUT_TO_FLASH;
  41.  
  42. OUTPUT_FINISH : begin
  43. state <= WAIT_FOR_FIRST_BYTE;
  44. audio_data = 16'b0;
  45. end
  46. default : state <= WAIT_FOR_FIRST_BYTE;
  47. endcase
  48. end
  49.  
  50. assign out_addr = in_addr;
  51. assign finish = state[2];
  52. assign out_CE_N = state[1];
  53. assign out_OE_N = state[0];
  54.  
  55. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement