OpenCores
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] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cmagleby
// ===========================================================================
2
// File    : pcie_dllp_packet.vri
3
// Author  : cwinward
4
// Date    : Mon Dec 3 11:03:46 MST 2007
5
// Project : TI PHY design
6
//
7
// Copyright (c) notice
8
// This code adheres to the GNU public license
9
//
10
// ===========================================================================
11
//
12
// $Id: pcie_dllp_packet.vri,v 1.1.1.1 2007-12-05 18:37:06 cmagleby Exp $
13
//
14
// ===========================================================================
15
//
16
// $Log: not supported by cvs2svn $
17
//
18
// ===========================================================================
19
// Function : This file is a class of pcie packet can be used for all DLLP
20
// packet types.
21
//
22
// ===========================================================================
23
// ===========================================================================
24
#include 
25
 
26
class pcie_dllp_packet {
27
  bit [7:0]  byte3;
28
  bit [7:0]  byte2;
29
  bit [7:0]  byte1;
30
  bit [7:0]  dllp_type;
31
  bit [31:0] temp_packet[];
32
 
33
  task new(
34
           bit [7:0]  init_byte3     = 8'h40,
35
           bit [7:0]  init_byte2     = 8'h00,
36
           bit [7:0]  init_byte1     = 8'h01,
37
           bit [7:0]  init_dllp_type = 8'b01000000) {
38
 
39
          dllp_type = init_dllp_type;
40
          byte1     = init_byte1;
41
          byte2     = init_byte2;
42
          byte3     = init_byte3;
43
  }
44
 
45
  task build_packet (string pkt_type = "initfc1_p") {
46
    if(pkt_type == "initfc1_p") {
47
      temp_packet[0] = {byte3,byte2,byte1,dllp_type};
48
      temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
49
    }
50
    else if(pkt_type == "initfc1_np") {
51
      temp_packet[0] = {byte3,byte2,byte1,dllp_type};
52
      temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
53
    }
54
    else if(pkt_type == "initfc1_cpl") {
55
      temp_packet[0] = {byte3,byte2,byte1,dllp_type};
56
      temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
57
    }
58
    else if(pkt_type == "initfc2_p") {
59
      temp_packet[0] = {byte3,byte2,byte1,dllp_type};
60
      temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
61
    }
62
     else if(pkt_type == "initfc2_np") {
63
      temp_packet[0] = {byte3,byte2,byte1,dllp_type};
64
      temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
65
    }
66
     else if(pkt_type == "initfc1_cpl") {
67
      temp_packet[0] = {byte3,byte2,byte1,dllp_type};
68
      temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
69
    }
70
     else if (pkt_type == "ack") {
71
      temp_packet[0] = {byte3,byte2,byte1,dllp_type};
72
      temp_packet[1] = {16'b0,crc16d32(temp_packet[0])};
73
    }
74
 
75
  }
76
 
77
  function bit[15:0] crc16d32(bit[31:0] d) {
78
 
79
    bit [15:0] crc;
80
    bit [15:0] C = 32'hFFFF;
81
 
82
    crc[0] = d[0] ^ d[2] ^ d[3] ^ d[5] ^ d[8] ^ d[10] ^ d[11] ^ d[16] ^ d[18] ^
83
      d[19] ^ d[23] ^ d[27] ^ d[31] ^ C[4] ^ C[5] ^ C[7] ^ C[10] ^ C[12]
84
      ^ C[13] ^ C[15];
85
    crc[1] = d[0] ^ d[1] ^ d[3] ^ d[4] ^ d[5] ^ d[7] ^ d[8] ^ d[9] ^ d[11] ^ d[15]
86
      ^ d[16] ^ d[17] ^ d[19] ^ d[22] ^ d[23] ^ d[26] ^ d[27] ^ d[30] ^
87
      d[31] ^ C[0] ^ C[4] ^ C[6] ^ C[7] ^ C[8] ^ C[10] ^ C[11] ^ C[12] ^
88
      C[14] ^ C[15];
89
    crc[2] = d[0] ^ d[2] ^ d[3] ^ d[4] ^ d[6] ^ d[7] ^ d[8] ^ d[10] ^ d[14] ^ d[15]
90
      ^ d[16] ^ d[18] ^ d[21] ^ d[22] ^ d[25] ^ d[26] ^ d[29] ^ d[30] ^
91
      C[0] ^ C[1] ^ C[5] ^ C[7] ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[13] ^
92
      C[15];
93
    crc[3] = d[0] ^ d[1] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10] ^ d[11] ^ d[13] ^
94
      d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[19] ^ d[20] ^ d[21] ^ d[23]
95
      ^ d[24] ^ d[25] ^ d[27] ^ d[28] ^ d[29] ^ d[31] ^ C[0] ^ C[1] ^ C[2]
96
      ^ C[4] ^ C[5] ^ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[14] ^ C[15];
97
    crc[4] = d[0] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10] ^ d[12] ^ d[13] ^
98
      d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[19] ^ d[20] ^ d[22] ^ d[23]
99
      ^ d[24] ^ d[26] ^ d[27] ^ d[28] ^ d[30] ^ C[0] ^ C[1] ^ C[2] ^ C[3]
100
      ^ C[5] ^ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[15];
101
    crc[5] = d[4] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[11] ^ d[12] ^ d[13] ^
102
      d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[19] ^ d[21] ^ d[22] ^ d[23]
103
      ^ d[25] ^ d[26] ^ d[27] ^ d[29] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4]
104
      ^ C[6] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[11];
105
    crc[6] = d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[10] ^ d[11] ^ d[12] ^
106
      d[13] ^ d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[18] ^ d[20] ^ d[21] ^ d[22]
107
      ^ d[24] ^ d[25] ^ d[26] ^ d[28] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4]
108
      ^ C[5] ^ C[7] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^ C[12];
109
    crc[7] = d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[7] ^ d[9] ^ d[10] ^ d[11] ^ d[12]
110
      ^ d[13] ^ d[14] ^ d[15] ^ d[16] ^ d[17] ^ d[19] ^ d[20] ^ d[21] ^
111
      d[23] ^ d[24] ^ d[25] ^ d[27] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
112
      C[5] ^ C[6] ^ C[8] ^ C[9] ^ C[10] ^ C[11] ^ C[12] ^ C[13];
113
    crc[8] = d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[8] ^ d[9] ^ d[10] ^ d[11]
114
      ^ d[12] ^ d[13] ^ d[14] ^ d[15] ^ d[16] ^ d[18] ^ d[19] ^ d[20] ^
115
      d[22] ^ d[23] ^ d[24] ^ d[26] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
116
      C[5] ^ C[6] ^ C[7] ^ C[9] ^ C[10] ^ C[11] ^ C[12] ^ C[13] ^ C[14];
117
    crc[9] = d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[7] ^ d[8] ^ d[9] ^ d[10]
118
      ^ d[11] ^ d[12] ^ d[13] ^ d[14] ^ d[15] ^ d[17] ^ d[18] ^ d[19] ^
119
      d[21] ^ d[22] ^ d[23] ^ d[25] ^ C[0] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^
120
      C[5] ^ C[6] ^ C[7] ^ C[8] ^ C[10] ^ C[11] ^ C[12] ^ C[13] ^ C[14]
121
      ^ C[15];
122
    crc[10] = d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10]
123
      ^ d[11] ^ d[12] ^ d[13] ^ d[14] ^ d[16] ^ d[17] ^ d[18] ^ d[20] ^
124
      d[21] ^ d[22] ^ d[24] ^ C[1] ^ C[2] ^ C[3] ^ C[4] ^ C[5] ^ C[6] ^
125
      C[7] ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[13] ^ C[14] ^ C[15];
126
    crc[11] = d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[5] ^ d[6] ^ d[7] ^ d[8] ^ d[9] ^ d[10]
127
      ^ d[11] ^ d[12] ^ d[13] ^ d[15] ^ d[16] ^ d[17] ^ d[19] ^ d[20] ^
128
      d[21] ^ d[23] ^ C[0] ^ C[2] ^ C[3] ^ C[4] ^ C[5] ^ C[6] ^ C[7] ^ C[8]
129
      ^ C[9] ^ C[10] ^ C[12] ^ C[13] ^ C[14] ^ C[15];
130
    crc[12] = d[1] ^ d[3] ^ d[4] ^ d[6] ^ d[7] ^ d[9] ^ d[12] ^ d[14] ^ d[15] ^
131
      d[20] ^ d[22] ^ d[23] ^ d[27] ^ d[31] ^ C[0] ^ C[1] ^ C[3] ^ C[6]
132
      ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[14];
133
    crc[13] = d[0] ^ d[2] ^ d[3] ^ d[5] ^ d[6] ^ d[8] ^ d[11] ^ d[13] ^ d[14] ^
134
      d[19] ^ d[21] ^ d[22] ^ d[26] ^ d[30] ^ C[1] ^ C[2] ^ C[4] ^ C[7]
135
      ^ C[9] ^ C[10] ^ C[12] ^ C[13] ^ C[15];
136
    crc[14] = d[1] ^ d[2] ^ d[4] ^ d[5] ^ d[7] ^ d[10] ^ d[12] ^ d[13] ^ d[18] ^
137
      d[20] ^ d[21] ^ d[25] ^ d[29] ^ C[2] ^ C[3] ^ C[5] ^ C[8] ^ C[10]
138
      ^ C[11] ^ C[13] ^ C[14];
139
    crc[15] = d[0] ^ d[1] ^ d[3] ^ d[4] ^ d[6] ^ d[9] ^ d[11] ^ d[12] ^ d[17] ^
140
      d[19] ^ d[20] ^ d[24] ^ d[28] ^ C[3] ^ C[4] ^ C[6] ^ C[9] ^ C[11]
141
      ^ C[12] ^ C[14] ^ C[15];
142
 
143
    crc16d32 = {~crc[0],~crc[1],~crc[2],~crc[3],~crc[4],~crc[5],~crc[6],~crc[7],
144
                ~crc[8],~crc[9],~crc[10],~crc[11],~crc[12],~crc[13],~crc[14],~crc[15]};
145
 
146
    return;
147
  }
148
 
149
 
150
  }

powered by: WebSVN 2.1.0

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