daily pastebin goal
14%
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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top