daily pastebin goal
0%
SHARE
TWEET

Untitled

a guest Oct 12th, 2017 48 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
Top