URL
https://opencores.org/ocsvn/pcie_vera_tb/pcie_vera_tb/trunk
Subversion Repositories pcie_vera_tb
[/] [pcie_vera_tb/] [trunk/] [pcie_dllp_packet.vri] - Rev 10
Go to most recent revision | Compare with Previous | Blame | View Log
// ===========================================================================
// File : pcie_dllp_packet.vri
// Author : cwinward
// Date : Mon Dec 3 11:03:46 MST 2007
// Project : TI PHY design
//
// Copyright (c) notice
// This code adheres to the GNU public license
//
// ===========================================================================
//
// $Id: pcie_dllp_packet.vri,v 1.1.1.1 2007-12-05 18:37:06 cmagleby Exp $
//
// ===========================================================================
//
// $Log: not supported by cvs2svn $
//
// ===========================================================================
// Function : This file is a class of pcie packet can be used for all DLLP
// packet types.
//
// ===========================================================================
// ===========================================================================
#include <vera_defines.vrh>
class pcie_dllp_packet {
bit [7:0] byte3;
bit [7:0] byte2;
bit [7:0] byte1;
bit [7:0] dllp_type;
bit [31:0] temp_packet[];
task new(
bit [7:0] init_byte3 = 8'h40,
bit [7:0] init_byte2 = 8'h00,
bit [7:0] init_byte1 = 8'h01,
bit [7:0] init_dllp_type = 8'b01000000) {
dllp_type = init_dllp_type;
byte1 = init_byte1;
byte2 = init_byte2;
byte3 = init_byte3;
}
task build_packet (string pkt_type = "initfc1_p") {
if(pkt_type == "initfc1_p") {
temp_packet[0] = {byte3,byte2,byte1,dllp_type};
temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
}
else if(pkt_type == "initfc1_np") {
temp_packet[0] = {byte3,byte2,byte1,dllp_type};
temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
}
else if(pkt_type == "initfc1_cpl") {
temp_packet[0] = {byte3,byte2,byte1,dllp_type};
temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
}
else if(pkt_type == "initfc2_p") {
temp_packet[0] = {byte3,byte2,byte1,dllp_type};
temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
}
else if(pkt_type == "initfc2_np") {
temp_packet[0] = {byte3,byte2,byte1,dllp_type};
temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
}
else if(pkt_type == "initfc1_cpl") {
temp_packet[0] = {byte3,byte2,byte1,dllp_type};
temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
}
else if (pkt_type == "ack") {
temp_packet[0] = {byte3,byte2,byte1,dllp_type};
temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
}
}
function bit[15:0] crc16d32(bit[31:0] d) {
bit [15:0] crc;
bit [15:0] C = 32'hFFFF;
crc[0] = d[0] ^ d[2] ^ d[3] ^ d[5] ^ d[8] ^ d[10] ^ d[11] ^ d[16] ^ d[18] ^
d[19] ^ d[23] ^ d[27] ^ d[31] ^ C[4] ^ C[5] ^ C[7] ^ C[10] ^ C[12]
^ C[13] ^ C[15];
crc[1] = d[0] ^ d[1] ^ d[3] ^ d[4] ^ d[5] ^ d[7] ^ d[8] ^ d[9] ^ d[11] ^ d[15]
^ d[16] ^ d[17] ^ d[19] ^ d[22] ^ d[23] ^ d[26] ^ d[27] ^ d[30] ^
d[31] ^ C[0] ^ C[4] ^ C[6] ^ C[7] ^ C[8] ^ C[10] ^ C[11] ^ C[12] ^
C[14] ^ C[15];
crc[2] = d[0] ^ d[2] ^ d[3] ^ d[4] ^ d[6] ^ d[7] ^ d[8] ^ d[10] ^ d[14] ^ d[15]
^ d[16] ^ d[18] ^ d[21] ^ d[22] ^ d[25] ^ d[26] ^ d[29] ^ d[30] ^
C[0] ^ C[1] ^ C[5] ^ C[7] ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[13] ^
C[15];
crc[3] = d[0] ^ d[1] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10] ^ d[11] ^ d[13] ^
d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[19] ^ d[20] ^ d[21] ^ d[23]
^ d[24] ^ d[25] ^ d[27] ^ d[28] ^ d[29] ^ d[31] ^ C[0] ^ C[1] ^ C[2]
^ C[4] ^ C[5] ^ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[14] ^ C[15];
crc[4] = d[0] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10] ^ d[12] ^ d[13] ^
d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[19] ^ d[20] ^ d[22] ^ d[23]
^ d[24] ^ d[26] ^ d[27] ^ d[28] ^ d[30] ^ C[0] ^ C[1] ^ C[2] ^ C[3]
^ C[5] ^ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[15];
crc[5] = d[4] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[11] ^ d[12] ^ d[13] ^
d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[19] ^ d[21] ^ d[22] ^ d[23]
^ d[25] ^ d[26] ^ d[27] ^ d[29] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4]
^ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[11];
crc[6] = d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[10] ^ d[11] ^ d[12] ^
d[13] ^ d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[20] ^ d[21] ^ d[22]
^ d[24] ^ d[25] ^ d[26] ^ d[28] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4]
^ C[5] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^ C[12];
crc[7] = d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[7] ^ d[9] ^ d[10] ^ d[11] ^ d[12]
^ d[13] ^ d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[19] ^ d[20] ^ d[21] ^
d[23] ^ d[24] ^ d[25] ^ d[27] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
C[5] ^ C[6] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^ C[12] ^ C[13];
crc[8] = d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[8] ^ d[9] ^ d[10] ^ d[11]
^ d[12] ^ d[13] ^ d[14] ^ d[15] ^ d[16] ^ d[18] ^ d[19] ^ d[20] ^
d[22] ^ d[23] ^ d[24] ^ d[26] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
C[5] ^ C[6] ^ C[7] ^ C[9] ^ C[10] ^ C[11] ^ C[12] ^ C[13] ^ C[14];
crc[9] = d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[7] ^ d[8] ^ d[9] ^ d[10]
^ d[11] ^ d[12] ^ d[13] ^ d[14] ^ d[15] ^ d[17] ^ d[18] ^ d[19] ^
d[21] ^ d[22] ^ d[23] ^ d[25] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
C[5] ^ C[6] ^ C[7] ^ C[8] ^ C[10] ^ C[11] ^ C[12] ^ C[13] ^ C[14]
^ C[15];
crc[10] = d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10]
^ d[11] ^ d[12] ^ d[13] ^ d[14] ^ d[16] ^ d[17] ^ d[18] ^ d[20] ^
d[21] ^ d[22] ^ d[24] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^ C[5] ^ C[6] ^
C[7] ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[13] ^ C[14] ^ C[15];
crc[11] = d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10]
^ d[11] ^ d[12] ^ d[13] ^ d[15] ^ d[16] ^ d[17] ^ d[19] ^ d[20] ^
d[21] ^ d[23] ^ C[0] ^ C[2] ^ C[3] ^ C[4] ^ C[5] ^ C[6] ^ C[7] ^ C[8]
^ C[9] ^ C[10] ^ C[12] ^ C[13] ^ C[14] ^ C[15];
crc[12] = d[1] ^ d[3] ^ d[4] ^ d[6] ^ d[7] ^ d[9] ^ d[12] ^ d[14] ^ d[15] ^
d[20] ^ d[22] ^ d[23] ^ d[27] ^ d[31] ^ C[0] ^ C[1] ^ C[3] ^ C[6]
^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[14];
crc[13] = d[0] ^ d[2] ^ d[3] ^ d[5] ^ d[6] ^ d[8] ^ d[11] ^ d[13] ^ d[14] ^
d[19] ^ d[21] ^ d[22] ^ d[26] ^ d[30] ^ C[1] ^ C[2] ^ C[4] ^ C[7]
^ C[9] ^ C[10] ^ C[12] ^ C[13] ^ C[15];
crc[14] = d[1] ^ d[2] ^ d[4] ^ d[5] ^ d[7] ^ d[10] ^ d[12] ^ d[13] ^ d[18] ^
d[20] ^ d[21] ^ d[25] ^ d[29] ^ C[2] ^ C[3] ^ C[5] ^ C[8] ^ C[10]
^ C[11] ^ C[13] ^ C[14];
crc[15] = d[0] ^ d[1] ^ d[3] ^ d[4] ^ d[6] ^ d[9] ^ d[11] ^ d[12] ^ d[17] ^
d[19] ^ d[20] ^ d[24] ^ d[28] ^ C[3] ^ C[4] ^ C[6] ^ C[9] ^ C[11]
^ C[12] ^ C[14] ^ C[15];
crc16d32 = {~crc[0],~crc[1],~crc[2],~crc[3],~crc[4],~crc[5],~crc[6],~crc[7],
~crc[8],~crc[9],~crc[10],~crc[11],~crc[12],~crc[13],~crc[14],~crc[15]};
return;
}
}
Go to most recent revision | Compare with Previous | Blame | View Log