File: system_verilog.sv

package info (click to toggle)
wxwidgets2.8 2.8.10.1-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 239,052 kB
  • ctags: 289,550
  • sloc: cpp: 1,838,857; xml: 396,717; python: 282,506; ansic: 126,171; makefile: 51,406; sh: 14,581; asm: 299; sql: 258; lex: 194; perl: 139; yacc: 128; pascal: 95; php: 39; lisp: 38; tcl: 24; haskell: 20; java: 18; cs: 18; erlang: 17; ruby: 16; ada: 9; ml: 9; csh: 9
file content (139 lines) | stat: -rw-r--r-- 3,145 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// System Verilog Syntax Highlighting Test File
// Comments are like this

package oop;

class BaseScoreboard;
  string name;
  bit[3:0] srce, dest;
  int run_for_n_packets;  // max number of packets to transmit before giving up on coverage goals
  static int pkts_checked = 0;
  static int sent_pkt_count = 0;
  static int recvd_pkt_count = 0;
  Packet refPkts[$];

  function new(string name = "class", int run_for_n_packets ); 
    if (TRACE_ON) $display("@%0d: %s.new() started", $time, name);
    this.name = name;
    this.run_for_n_packets = run_for_n_packets;
  endfunction : new

  task report();
    if (TRACE_ON) $display("@%0d: %s.report() started", $time, name);
    $display("%0d packets sent, %0d packets sampled, %0d packets checked\n", 
              sent_pkt_count, recvd_pkt_count, pkts_checked);
  endtask : report

endclass : BaseScoreboard


class Scoreboard extends BaseScoreboard;

  covergroup router_cvg;
    coverpoint srce;
    coverpoint dest;
    cross srce, dest;
    option.at_least = 1;
    option.auto_bin_max = 256;
  endgroup

  function new(string name = "class", int run_for_n_packets ); 
    super.new(name, run_for_n_packets); 
    router_cvg = new();
  endfunction : new

  task check(Packet pktrecvd);
    int    index;
    int    status;
    string diff;
    Packet pktsent;
    if (TRACE_ON) $display("@%0d: %s.check() started", $time, name);
  endtask


endclass : Scoreboard

endpackage : oop

/*****************************************************************************/

program test(io_if dutif, input bit clk);

import oop::*;

bit[3:0] srce, dest;
reg[7:0] payload[$], pkt2cmp_payload[$];

Scoreboard sb;

initial begin
  DONE <= 0;
  sb = new("sb", 2500); 
  pkt2send = new();
  pkt2send.pt_mode = 1;
  do begin
       fork
         begin send(); end
         begin recv(); end
       join
     end
  repeat(10) @(posedge clk);
end

task automatic recv();
  static int pkts_recvd = 0;
  int i;
  pktrecvd = new($psprintf("Pkt_recvd[%0d]", pkts_recvd++));
  pktrecvd.payload = new[pkt2cmp_payload.size()];
  for (i=0; i<pkt2cmp_payload.size(); i++)
    pktrecvd.payload[i] = pkt2cmp_payload[i];
  pktrecvd.dest = dest;
endtask

task automatic send();
  int i;
  payload.delete();
  for (i=0; i<pkt2send.payload.size(); i++)
    payload.push_back(pkt2send.payload[i]);
  srce = pkt2send.srce;
  dest = pkt2send.dest;
endtask

endprogram

interface io(input clock, input bit[15:0] din, frame_n);
bit [15:0] passthru;

sequence s_pass_thru_0 ;
  frame_n[ 0] ##1 !frame_n[ 0] ##0 din[ 0] == 0 [*4];  // 0000
endsequence

property p_pass_thru_0 ;
  @(posedge clk) fr_valid |-> s_pass_thru_0;
endproperty

assert property (p_pass_thru_0) $info("%m  OK"); 
  else $error("%m Problem");
endinterface

sequence s_pass_thru_1 ;
  frame_n[ 1] ##1 !frame_n[ 1] ##0 din[ 1] == 0 [*4];  // 0000
endsequence

property p_pass_thru_1 ;
  @(posedge clk) fr_valid |-> s_pass_thru_1;
endproperty

assert property (p_pass_thru_1) $info("%m  OK"); 
  else $error("%m Problem");
endinterface

module top;
bit clk;
bit[15:0] din;
bit frame_n;

io IF1 (.clk, .din, .frame_n);
test TB1 (.clk, io_if(IF1) );

endmodule