Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // State machine states
  2.     localparam IDLE                 = 0;
  3.     localparam SEND_CMD             = 1;
  4.     localparam TIME_HI              = 2;
  5.     localparam TIME_LO              = 3;
  6.  
  7.     reg [2:0] state;
  8.  
  9.     wire [1:0] pkt_type = 2'b10;
  10.     wire        eob = 1'b0;
  11.    // wire        has_time = 1'b0;
  12.     wire [11:0] seqnum = 12'd0; // don't care
  13.     wire [15:0] payload_length = 16'd16; //don't care (payload length in bytes)
  14.  
  15.     wire [63:0] cmd_tdata;
  16.     wire cmd_tlast, cmd_tvalid, cmd_tready;
  17.     wire [127:0] cmd_tuser;
  18.  
  19.     reg [63:0] cmd_tdata_r;
  20.     reg cmd_tlast_r, cmd_tvalid_r;
  21.  
  22.     wire [31:0] numlines;
  23.  
  24.     wire send_imm = ~has_time;
  25.     wire chain = 1'b0;
  26.     wire reload = 1'b0;
  27.     wire stop = 1'b0;
  28.  
  29.     reg run_wait;
  30.  
  31.     reg [31:0] command_i_r;
  32.     reg [7:0]  addr_i_r;
  33.     reg [63:0] time_i_r;
  34.  
  35.     assign numlines = awg_data_len + num_adc_samples;
  36.  
  37.     cvita_hdr_encoder cvita_hdr_encoder(
  38.       .pkt_type(pkt_type),.eob(eob), .has_time(1'b0),
  39.       .seqnum(seqnum),
  40.       .payload_length(payload_length),
  41.       .src_sid(src_sid), .dst_sid(dst_sid),
  42.       .vita_time(vita_time),
  43.       .header(cmd_tuser)
  44.     );
  45.     chdr_framer #(.SIZE(FIFO_SIZE), .WIDTH(64)) chdr_framer (
  46.       .clk(clk), .reset(reset), .clear(clear),
  47.       .i_tdata(cmd_tdata), .i_tuser(cmd_tuser), .i_tlast(cmd_tlast), .i_tvalid(cmd_tvalid), .i_tready(cmd_tready),
  48.       .o_tdata(cmdout_tdata), .o_tlast(cmdout_tlast), .o_tvalid(cmdout_tvalid), .o_tready(cmdout_tready));
  49.  
  50.     always @(posedge clk) begin
  51.       if (reset | clear) begin
  52.         state      <= IDLE;
  53.         command_i_r <= 'b0;
  54.         addr_i_r <= 'b0;
  55.         time_i_r <= 'b0;
  56.         run_wait <= 1'b0;
  57.         cmd_tvalid_r <= 0;
  58.         cmd_tlast_r <= 0;
  59.       end else begin
  60.         case (state)
  61.             IDLE : begin
  62.             if(run_wait & adc_run) begin
  63.                 command_i_r <= {send_imm,chain,reload,stop,numlines[27:0]};
  64.                 time_i_r <= vita_time;
  65.                 addr_i_r <= SR_RX_CTRL_COMMAND;
  66.                 cmd_tvalid_r <= 1'b1;
  67.                 // cmd_tlast_r <= 0;
  68.                 cmd_tlast_r <= 1'b1;
  69.                 run_wait <= 0;
  70.                 state <= SEND_CMD;
  71.             end else if (awg_init & send_cmds) begin
  72.                 run_wait <= 1;
  73.                 if (cmd_tready) begin
  74.                     cmd_tvalid_r <= 0;
  75.                     cmd_tlast_r <= 0;
  76.                  end
  77.             end
  78.             else if (cmd_tready) begin
  79.                cmd_tvalid_r <= 0;
  80.                cmd_tlast_r <= 0;
  81.              end
  82.           end
  83.  
  84.           SEND_CMD : begin
  85.             if (cmd_tready) begin
  86.                 if (send_imm) begin
  87.                     state <= TIME_LO;
  88.                     command_i_r <= time_i_r[31:0];
  89.                     addr_i_r <= SR_RX_CTRL_TIME_LO;
  90.                     cmd_tvalid_r <= 1;
  91.                     cmd_tlast_r <= 1;
  92.                 end else begin
  93.                     state <= TIME_HI;
  94.                     command_i_r <= time_i_r[63:32];
  95.                     addr_i_r <= SR_RX_CTRL_TIME_HI;
  96.                     cmd_tvalid_r <= 1;
  97.                     // cmd_tlast_r <= 0;
  98.                     cmd_tlast_r <= 1;
  99.                 end
  100.             end
  101.           end
  102.  
  103.           // Wait for output to be ready
  104.           TIME_HI : begin
  105.               if (cmd_tready) begin
  106.                   state <= TIME_LO;
  107.                   command_i_r <= time_i_r[31:0];
  108.                   addr_i_r <= SR_RX_CTRL_TIME_LO;
  109.                   cmd_tvalid_r <= 1;
  110.                   cmd_tlast_r <= 1;
  111.               end
  112.           end
  113.  
  114.           TIME_LO : begin
  115.               if (cmd_tready) begin
  116.                   state <= IDLE;
  117.                   cmd_tvalid_r <= 0;
  118.                   cmd_tlast_r <= 0;
  119.               end
  120.           end
  121.  
  122.           default : state <= IDLE;
  123.         endcase
  124.       end
  125.     end
  126.  
  127.     assign cmd_tvalid = cmd_tvalid_r;
  128.     assign cmd_tlast = cmd_tlast_r;
  129.     assign cmd_tdata = {24'd0,addr_i_r,command_i_r};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement