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

Subversion Repositories srdydrdy_lib

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

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 11 Rev 24
Line 19... Line 19...
      rxd   = 0;
      rxd   = 0;
      repeat (startup_skew) #0.1;
      repeat (startup_skew) #0.1;
      forever rx_clk = #4 ~rx_clk;
      forever rx_clk = #4 ~rx_clk;
    end
    end
 
 
  // Copied from: http://www.mindspring.com/~tcoonan/gencrc.v
 
  // 
 
  // Generate a (DOCSIS) CRC32.
 
  //
 
  // Uses the GLOBAL variables:
 
  //
 
  //    Globals referenced:
 
  //       parameter    CRC32_POLY = 32'h04C11DB7;
 
  //       reg [ 7:0]   crc32_packet[0:255];
 
  //       integer      crc32_length;
 
  //
 
  //    Globals modified:
 
  //       reg [31:0]   crc32_result;
 
  //
 
  localparam    CRC32_POLY = 32'h04C11DB7;
 
  task gencrc32;
  task gencrc32;
    input [31:09] crc32_length;
    input [7:0]   length;
    integer     cbyte, cbit;
    output [31:0] icrc;
    reg         msb;
    reg [31:0]    nxt_icrc;
    reg [7:0]    current_cbyte;
    integer       i, len;
    reg [31:0]   temp;
    begin
    begin
      icrc = {32{1'b1}};
      crc32_result = 32'hffffffff;
 
      for (cbyte = 0; cbyte < crc32_length; cbyte = cbyte + 1) begin
      for (len=0; len<length; len=len+1)
        current_cbyte = rxbuf[cbyte];
        begin
         for (cbit = 0; cbit < 8; cbit = cbit + 1) begin
          nxt_icrc[7:0] = icrc[7:0] ^ rxbuf[len];
            msb = crc32_result[31];
          nxt_icrc[31:8] = icrc[31:8];
            crc32_result = crc32_result << 1;
 
            if (msb != current_cbyte[cbit]) begin
          for (i=0; i<8; i=i+1)
               crc32_result = crc32_result ^ CRC32_POLY;
            begin
               crc32_result[0] = 1;
              if (nxt_icrc[0])
            end
                nxt_icrc = nxt_icrc[31:1] ^ 32'hEDB88320;
         end
              else
 
                nxt_icrc = nxt_icrc[31:1];
      end
      end
 
 
      // Last step is to "mirror" every bit, swap the 4 bytes, and then complement each bit.
          icrc = nxt_icrc;
      //
        end // for (len=0; len<length; len=len+1)
      // Mirror:
 
      for (cbit = 0; cbit < 32; cbit = cbit + 1)
 
         temp[31-cbit] = crc32_result[cbit];
 
 
 
      // Swap and Complement:
      icrc = ~icrc;
      crc32_result = ~{temp[7:0], temp[15:8], temp[23:16], temp[31:24]};
 
   end
   end
endtask
endtask
 
 
 
/* -----\/----- EXCLUDED -----\/-----
 
  // Copied from: http://www.mindspring.com/~tcoonan/gencrc.v
 
  //
 
  // Generate a (DOCSIS) CRC32.
 
  //
 
  // Uses the GLOBAL variables:
 
  //
 
  //    Globals referenced:
 
  //       parameter    CRC32_POLY = 32'h04C11DB7;
 
  //       reg [ 7:0]   crc32_packet[0:255];
 
  //       integer      crc32_length;
 
  //
 
  //    Globals modified:
 
  //       reg [31:0]   crc32_result;
 
  //
 
  localparam    CRC32_POLY = 32'h04C11DB7;
 
  task gencrc32;
 
    input [31:09] crc32_length;
 
    integer     cbyte, cbit;
 
    reg         msb;
 
    reg [7:0]   current_cbyte;
 
    reg [31:0]  temp;
 
    begin
 
      crc32_result = 32'hffffffff;
 
      for (cbyte = 0; cbyte < crc32_length; cbyte = cbyte + 1) begin
 
        current_cbyte = rxbuf[cbyte];
 
         for (cbit = 0; cbit < 8; cbit = cbit + 1) begin
 
            msb = crc32_result[31];
 
            crc32_result = crc32_result << 1;
 
            if (msb != current_cbyte[cbit]) begin
 
               crc32_result = crc32_result ^ CRC32_POLY;
 
               crc32_result[0] = 1;
 
            end
 
         end
 
      end
 
 
 
      // Last step is to "mirror" every bit, swap the 4 bytes, and then complement each bit.
 
      //
 
      // Mirror:
 
      for (cbit = 0; cbit < 32; cbit = cbit + 1)
 
         temp[31-cbit] = crc32_result[cbit];
 
 
 
      // Swap and Complement:
 
      crc32_result = ~{temp[7:0], temp[15:8], temp[23:16], temp[31:24]};
 
   end
 
endtask
 
 -----/\----- EXCLUDED -----/\----- */
 
 
  task print_packet;
  task print_packet;
    input [31:0] length;
    input [31:0] length;
    integer      i;
    integer      i;
    begin
    begin
      for (i=0; i<length; i=i+1)
      for (i=0; i<length; i=i+1)
Line 90... Line 120...
      { rxbuf[0],rxbuf[1],rxbuf[2],rxbuf[3],rxbuf[4],rxbuf[5] } = da;
      { rxbuf[0],rxbuf[1],rxbuf[2],rxbuf[3],rxbuf[4],rxbuf[5] } = da;
      { rxbuf[6],rxbuf[7],rxbuf[8],rxbuf[9],rxbuf[10],rxbuf[11] } = sa;
      { rxbuf[6],rxbuf[7],rxbuf[8],rxbuf[9],rxbuf[10],rxbuf[11] } = sa;
      for (p=12; p<length; p=p+1)
      for (p=12; p<length; p=p+1)
        rxbuf[p] = $random;
        rxbuf[p] = $random;
 
 
      gencrc32 (length);
      //gencrc32 (length);
      { rxbuf[length-4], rxbuf[length-3],
      gencrc32 (length, crc32_result);
        rxbuf[length-2], rxbuf[length-1] } = crc32_result;
      { rxbuf[length-1], rxbuf[length-2],
 
        rxbuf[length-3], rxbuf[length-4] } = crc32_result;
 
 
      $display ("%m : Sending packet DA=%x SA=%x of length %0d", da, sa, length);
      $display ("%m : Sending packet DA=%x SA=%x of length %0d", da, sa, length);
      print_packet (length);
      print_packet (length);
 
 
      repeat (7)
      repeat (7)

powered by: WebSVN 2.1.0

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