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

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [env/] [verilog/] [scoreboard/] [sb_monitor.v] - Blame information for rev 19

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 18 ghutchis
// combination refmodel/monitor for scoreboard
2
 
3
module sb_monitor
4
  #(parameter width=8,
5
    parameter items=64,
6
    parameter use_txid=0,
7
    parameter use_mask=0,
8
    parameter txid_sz=2,
9
    parameter asz=$clog2(items))
10
  (input      clk,
11
   input      reset,
12
 
13
   input      c_srdy,
14
   input      c_drdy,
15
   input      c_req_type, // 0=read, 1=write
16
   input [txid_sz-1:0] c_txid,
17
   input [width-1:0] c_mask,
18
   input [width-1:0] c_data,
19
   input [asz-1:0]   c_itemid,
20
 
21
   input     p_srdy,
22
   output reg   p_drdy,
23
   input  [txid_sz-1:0] p_txid,
24
   input [width-1:0]   p_data
25
   );
26
 
27 19 ghutchis
  localparam pat_dep = 8;
28
 
29 18 ghutchis
  reg [width-1:0]      sbmem [0:items-1];
30 19 ghutchis
  reg [7:0]             drdy_pat;
31
  integer              dpp;
32
  reg                  nxt_p_drdy;
33 18 ghutchis
 
34 19 ghutchis
  reg [width-1:0]      outbuf[0:items-1];
35
 
36
  initial
37
    begin
38
      drdy_pat = {pat_dep{1'b1}};
39
      dpp = 0;
40
    end
41
 
42
  always @*
43
    begin
44
      nxt_p_drdy = p_drdy;
45
 
46
      if (p_srdy & p_drdy)
47
        begin
48
          if (drdy_pat[dpp])
49
            begin
50
              nxt_p_drdy = 1;
51
            end
52
          else
53
            nxt_p_drdy = 0;
54
        end
55
      else if (!p_drdy)
56
        begin
57
          if (drdy_pat[dpp])
58
            begin
59
              nxt_p_drdy = 1;
60
            end
61
          else
62
            nxt_p_drdy = 0;
63
        end
64
    end // always @ *
65
 
66 18 ghutchis
  always @(posedge clk)
67
    begin
68 19 ghutchis
      if ((c_srdy & p_drdy) | !p_drdy)
69
        dpp = (dpp + 1) % pat_dep;
70
 
71
      p_drdy <= #1 nxt_p_drdy;
72
    end
73
 
74
  always @(posedge clk)
75
    begin
76 18 ghutchis
      if (c_srdy & c_drdy & (c_req_type == 1))
77
        begin
78 19 ghutchis
          sbmem[c_itemid] <= #18 (sbmem[c_itemid] & ~c_mask) | (c_data & c_mask);
79 18 ghutchis
        end
80 19 ghutchis
      else if (c_srdy & c_drdy & (c_req_type == 0))
81
        begin
82
          outbuf[c_itemid] = sbmem[c_itemid];
83
        end
84 18 ghutchis
 
85
      if (p_srdy & p_drdy)
86
        begin
87 19 ghutchis
          if (p_data != outbuf[p_txid])
88 18 ghutchis
            begin
89
              $display ("%t: ERROR: sb returned %x, expected %x",
90 19 ghutchis
                        $time, p_data, outbuf[p_txid]);
91 18 ghutchis
            end
92
        end
93
    end
94
 
95
  initial
96
    begin
97
      p_drdy = 1;
98
    end
99
 
100
endmodule // sb_monitor

powered by: WebSVN 2.1.0

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