Guest User

AccelCMDS

a guest
Aug 23rd, 2025
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module AccelCMDs(
  2.     input logic fpga_reset,
  3.     input logic fpga_clk,
  4.     input logic end_transaction,
  5.  
  6.     output logic [5:0] init_bit_count,
  7.     output logic [5:0] data_bit_count,
  8.     (* keep = "true", mark_debug = "true" *) output logic [47:0] cmd_to_accel,
  9.     output logic start_transaction,
  10.     output logic init_instruct,     // Flag to determine if instruction command
  11.     output logic data_read          // Flag to determine if data read command
  12.     );
  13.  
  14.     typedef enum logic [2:0] {
  15.         IDLE,
  16.         INIT_STEP_ONE,
  17.         INIT_STEP_TWO,
  18.         INIT_STEP_THREE,
  19.         DATA,
  20.         WAIT
  21.     } e_state;
  22.  
  23.     e_state state;
  24.  
  25.     logic step_one_flag, step_two_flag, step_three_flag;
  26.  
  27.     localparam logic [7:0] ADDR1 = 8'h00;
  28.     localparam logic [7:0] INIT_DATA1 = 8'b00000000;
  29.  
  30.     localparam logic [7:0] ADDR2 = 8'h2C;
  31.     localparam logic [7:0] INIT_DATA2 = 8'b00000100;
  32.  
  33.     localparam logic [7:0] ADDR3 = 8'h2D;
  34.     localparam logic [7:0] INIT_DATA3 = 8'b00000010;
  35.  
  36.     localparam logic [7:0] WRITE = 8'h0A;
  37.     localparam logic [7:0] READ = 8'h0B;
  38.  
  39.     localparam logic [7:0] XDATA_L = 8'h0E;
  40.  
  41.  
  42.     always_ff @(posedge fpga_clk) begin
  43.         if (fpga_reset) begin
  44.             init_bit_count <= 0;
  45.             data_bit_count <= 0;
  46.             cmd_to_accel <= 0;
  47.             start_transaction <= 0;
  48.             data_read <= 0;
  49.             init_instruct <= 0;
  50.             step_one_flag <= 0;
  51.             step_two_flag <= 0;
  52.             step_three_flag <= 0;
  53.             state <= IDLE;
  54.         end else begin
  55.             start_transaction <= 0;
  56.  
  57.             case (state)
  58.                 IDLE: begin
  59.                     if (end_transaction == 1) begin
  60.                         state <= IDLE;
  61.                     end else begin
  62.                         if (step_one_flag == 0) begin
  63.                             state             <= INIT_STEP_ONE;
  64.                             init_bit_count    <= 24;
  65.                         end else if (step_two_flag == 0) begin
  66.                             state             <= INIT_STEP_TWO;
  67.                             init_bit_count    <= 24;
  68.                         end else if (step_three_flag == 0) begin
  69.                             state             <= INIT_STEP_THREE;
  70.                             init_bit_count    <= 24;
  71.                         end else begin
  72.                             state             <= DATA;
  73.                             data_bit_count    <= 48;
  74.                             init_bit_count    <= 16; // change from 16 to 24
  75.                         end
  76.                     end
  77.                 end
  78.  
  79.                 INIT_STEP_ONE: begin
  80.                         init_instruct     <= 1;
  81.                         cmd_to_accel      <= {24'b0, READ, ADDR1, INIT_DATA1};
  82.                         start_transaction <= 1;
  83.                         step_one_flag     <= 1;
  84.                         state             <= WAIT;
  85.                 end
  86.  
  87.                 INIT_STEP_TWO: begin
  88.                         init_instruct     <= 1;
  89.                         cmd_to_accel      <= {24'b0, WRITE, ADDR2, INIT_DATA2};
  90.                         start_transaction <= 1;
  91.                         step_two_flag     <= 1;
  92.                         state             <= WAIT;
  93.                 end
  94.  
  95.                 INIT_STEP_THREE: begin
  96.                         init_instruct     <= 1;
  97.                         cmd_to_accel      <= {24'b0, WRITE, ADDR3, INIT_DATA3};
  98.                         start_transaction <= 1;
  99.                         step_three_flag   <= 1;
  100.                         state             <= WAIT;
  101.                 end
  102.  
  103.                 DATA: begin
  104.                         init_instruct     <= 1;
  105.                         data_read         <= 1;
  106.                         start_transaction <= 1;
  107.                         cmd_to_accel      <= {32'b0, READ, ADDR1};      //This is what is in the waveform SS, test to see if ACCEL can send back device ID.
  108.  
  109.                        // cmd_to_accel      <= {32'b0, READ, XDATA_L};
  110.                         state             <= WAIT;
  111.                 end
  112.  
  113.                 WAIT: begin
  114.                     if (end_transaction == 1)
  115.                         state <= IDLE;
  116.                 end
  117.             endcase
  118.         end
  119.     end
  120.  
  121. endmodule
Advertisement
Add Comment
Please, Sign In to add comment