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

Subversion Repositories srdydrdy_lib

[/] [srdydrdy_lib/] [trunk/] [env/] [verilog/] [common/] [sd_seq_check.v] - Blame information for rev 22

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 ghutchis
//----------------------------------------------------------------------
2
// Srdy/Drdy sequence checker
3
//
4
// Simplistic traffic checker for srdy/drdy blocks.  Checks for an
5
// incrementing data sequence.
6
//
7
// Naming convention: c = consumer, p = producer, i = internal interface
8
//----------------------------------------------------------------------
9
// Author: Guy Hutchison
10
//
11
// This block is uncopyrighted and released into the public domain.
12
//----------------------------------------------------------------------
13
 
14
// delay unit for nonblocking assigns, default is to #1
15
`ifndef SDLIB_DELAY
16
 `define SDLIB_DELAY #1
17
`endif
18
 
19
module sd_seq_check
20
  #(parameter width=8)
21
  (input clk,
22
   input reset,
23
   input          c_srdy,
24
   output reg     c_drdy,
25
   input [width-1:0] c_data);
26
 
27
  parameter pat_dep = 8;
28
 
29
  reg [width-1:0]    last_seq;
30
  reg                first;
31
  reg [pat_dep-1:0]  drdy_pat;
32
  integer            dpp;
33
  reg                nxt_c_drdy;
34 22 ghutchis
  integer            err_cnt;
35 3 ghutchis
 
36
  initial
37
    begin
38
      drdy_pat = {pat_dep{1'b1}};
39
      dpp = 0;
40
    end
41
 
42
  initial
43
    begin
44
      first = 1;
45
      c_drdy = 0;
46 22 ghutchis
      err_cnt = 0;
47 3 ghutchis
    end
48
 
49
  always @*
50
    begin
51
      nxt_c_drdy = c_drdy;
52
 
53
      if (c_srdy & c_drdy)
54
        begin
55
          if (drdy_pat[dpp])
56
            begin
57
              nxt_c_drdy = 1;
58
            end
59
          else
60
            nxt_c_drdy = 0;
61
        end
62
      else if (!c_drdy)
63
        begin
64
          if (drdy_pat[dpp])
65
            begin
66
              nxt_c_drdy = 1;
67
            end
68
          else
69
            nxt_c_drdy = 0;
70
        end
71
    end
72
  always @(posedge clk)
73
    begin
74
      if ((c_srdy & c_drdy) | !c_drdy)
75
        dpp = (dpp + 1) % pat_dep;
76
    end
77
 
78
  always @(posedge clk)
79
    begin
80
      if (reset)
81
        begin
82
          c_drdy <= `SDLIB_DELAY 0;
83 22 ghutchis
          err_cnt  = 0;
84
          drdy_pat = {pat_dep{1'b1}};
85
          dpp = 0;
86
          first = 1;
87
          last_seq = 0;
88 3 ghutchis
        end
89
      else
90
        begin
91
          c_drdy <= `SDLIB_DELAY nxt_c_drdy;
92
          if (c_srdy & c_drdy)
93
            begin
94
              if (!first && (c_data !== (last_seq + 1)))
95 22 ghutchis
                begin
96
                  $display ("%t: ERROR   : %m: Sequence miscompare rcv=%x exp=%x",
97
                            $time, c_data, last_seq+1);
98
                  err_cnt = err_cnt + 1;
99
                end
100 3 ghutchis
              else
101
                begin
102
                  last_seq = c_data;
103
                  first = 0;
104
                end
105
            end // if (c_srdy & c_drdy)
106
        end // else: !if(reset)
107
    end
108
 
109
endmodule // sd_seq_check

powered by: WebSVN 2.1.0

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