OpenCores
URL https://opencores.org/ocsvn/srdydrdy_lib/srdydrdy_lib/trunk

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [examples/] [bridge/] [rtl/] [sd_tx_gigmac.v] - Diff between revs 11 and 24

Show entire file | Details | Blame | View Log

Rev 11 Rev 24
Line 25... Line 25...
  wire [7:0]   ip_data;
  wire [7:0]   ip_data;
  reg [3:0]    count, nxt_count;
  reg [3:0]    count, nxt_count;
 
 
  reg [7:0]    nxt_gmii_txd;
  reg [7:0]    nxt_gmii_txd;
  reg          nxt_gmii_tx_en;
  reg          nxt_gmii_tx_en;
  reg [3:0]    state, nxt_state;
  reg [5:0]    state, nxt_state;
 
 
  localparam s_idle = 0, s_preamble = 1, s_payload = 2, s_ipg = 3;
  wire [31:0]  crc;
 
  reg          clear;
 
  reg          crc_valid;
 
 
 
  localparam s_idle = 0, s_preamble = 1, s_payload = 2, s_ipg = 3, s_badcrc = 4, s_goodcrc = 5;
  localparam ns_idle = 1, ns_preamble = 2, ns_payload = 4, ns_ipg = 8;
  localparam ns_idle = 1, ns_preamble = 2, ns_payload = 4, ns_ipg = 8;
 
 
  sd_input #(8+2) in_hold
  sd_input #(8+2) in_hold
    (
    (
     // Outputs
     // Outputs
Line 43... Line 47...
     .reset                             (reset),
     .reset                             (reset),
     .c_srdy                            (txg_srdy),
     .c_srdy                            (txg_srdy),
     .c_data                            ({txg_code,txg_data}),
     .c_data                            ({txg_code,txg_data}),
     .ip_drdy                           (ip_drdy));
     .ip_drdy                           (ip_drdy));
 
 
 
  mac_crc32 crcgen
 
    (
 
     .data                              (ip_data[7:0]),
 
     .valid                             (crc_valid),
 
     /*AUTOINST*/
 
     // Outputs
 
     .crc                               (crc[31:0]),
 
     // Inputs
 
     .clk                               (clk),
 
     .clear                             (clear));
 
 
  always @*
  always @*
    begin
    begin
      ip_drdy = 0;
      ip_drdy = 0;
      nxt_count = count;
      nxt_count = count;
      nxt_gmii_tx_en = 0;
      nxt_gmii_tx_en = 0;
      nxt_gmii_txd = gmii_txd;
      nxt_gmii_txd = gmii_txd;
 
      clear = 0;
 
      crc_valid = 0;
 
 
      case (1'b1)
      case (1'b1)
        state[s_idle] :
        state[s_idle] :
          begin
          begin
            if (ip_srdy & (ip_code == `PCC_SOP))
            if (ip_srdy & (ip_code == `PCC_SOP))
              begin
              begin
                nxt_gmii_tx_en = 1;
                nxt_gmii_tx_en = 1;
                nxt_gmii_txd = `GMII_PRE;
                nxt_gmii_txd = `GMII_PRE;
                nxt_count = 1;
                nxt_count = 1;
                nxt_state = ns_preamble;
                nxt_state = ns_preamble;
 
                clear = 1;
              end
              end
            else
            else
              begin
              begin
                ip_drdy = 1;
                ip_drdy = 1;
              end // else: !if(ip_srdy & (ip_code == `PCC_SOP))
              end // else: !if(ip_srdy & (ip_code == `PCC_SOP))
Line 84... Line 102...
        state[s_payload] :
        state[s_payload] :
          begin
          begin
            ip_drdy = 1;
            ip_drdy = 1;
            nxt_gmii_tx_en = 1;
            nxt_gmii_tx_en = 1;
            nxt_gmii_txd = ip_data;
            nxt_gmii_txd = ip_data;
 
            crc_valid = 1;
 
 
            if (!ip_srdy | ((ip_code == `PCC_EOP) | (ip_code == `PCC_BADEOP)))
            if (!ip_srdy | ((ip_code == `PCC_EOP) | (ip_code == `PCC_BADEOP)))
              begin
              begin
                nxt_count = 0;
                nxt_count = 0;
                nxt_state = ns_ipg;
                if (ip_code == `PCC_EOP)
 
                  nxt_state = 1 << s_goodcrc;
 
                else
 
                  nxt_state = 1 << s_badcrc;
              end
              end
          end // case: state[s_payload]
          end // case: state[s_payload]
 
 
 
        state[s_goodcrc] :
 
          begin
 
            nxt_count = count + 1;
 
            nxt_gmii_tx_en = 1;
 
            case (count)
 
              0 : nxt_gmii_txd = crc[7:0];
 
              1 : nxt_gmii_txd = crc[15:8];
 
              2 : nxt_gmii_txd = crc[23:16];
 
              3 : nxt_gmii_txd = crc[31:24];
 
            endcase // case (count)
 
 
 
            if (count == 3)
 
              begin
 
                nxt_state = 1 << s_ipg;
 
              end
 
          end
 
 
 
        state[s_badcrc] :
 
          begin
 
           nxt_count = count + 1;
 
            nxt_gmii_tx_en = 1;
 
            nxt_gmii_txd   = 8'h0;
 
 
 
            if (count == 3)
 
              begin
 
                nxt_state = 1 << s_ipg;
 
              end
 
          end
 
 
        state[s_ipg] :
        state[s_ipg] :
          begin
          begin
            nxt_gmii_tx_en = 0;
            nxt_gmii_tx_en = 0;
            ip_drdy = 0;
            ip_drdy = 0;
            nxt_count = count + 1;
            nxt_count = count + 1;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.