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

Subversion Repositories socgen

[/] [socgen/] [trunk/] [common/] [opencores.org/] [Testbench/] [bfms/] [micro_bus_model/] [rtl/] [verilog/] [top.sim] - Blame information for rev 131

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 131 jt_eaton
 
2
module micro_bus_model_def
3
#(parameter addr_width   = 16,
4
  parameter OUT_DELAY    = 15,
5
  parameter OUT_WIDTH    = 10
6
  )
7
 
8
 
9
 (
10
  input wire                  clk,
11
  input wire                  reset,
12
 
13
  output reg [addr_width-1:0]           addr,
14
  output reg [7:0]            wdata,
15
  output reg                  rd,
16
  output reg                  wr,
17
  output reg                  cs,
18
 
19
  inout  wire [7:0]           rdata
20
);
21
 
22
 
23
   reg [7:0]  exp_rdata;
24
   reg [7:0]  mask_rdata;
25
 
26
always@(posedge clk)
27
  if(reset)
28
    begin
29
      addr  <= 16'h0000;
30
      wdata <=  8'h00;
31
      wr    <=  1'b0;
32
      rd    <=  1'b0;
33
      cs    <=  1'b1;
34
      exp_rdata    <=  8'h00;
35
      mask_rdata    <=  8'h00;
36
   end
37
 
38
 
39
 
40
io_probe_in
41
 #(.MESG         ("micro rdata Error"),
42
   .WIDTH        (8)
43
  )
44
rdata_tpb
45
  (
46
  .clk            (  clk        ),
47
  .expected_value (  exp_rdata  ),
48
  .mask           (  mask_rdata ),
49
  .signal         (  rdata      )
50
  );
51
 
52
 
53
  // Tasks
54
 
55
 
56
 
57
task automatic next;
58
  input [31:0] num;
59
  repeat (num)       @ (posedge clk);
60
endtask // next
61
 
62
 
63
 
64
 
65
 
66
  // write cycle
67
  task u_write;
68
    input [addr_width-1:0] a;
69
    input  [7:0] d;
70
 
71
    begin
72
 
73
      $display("%t %m cycle %x %x",$realtime,a,d );
74
 
75
      addr  <= a;
76
      wdata <= d;
77
      rd    <= 1'b0;
78
      wr    <= 1'b1;
79
      next(1);
80
 
81
      wr     <= 1'b0;
82
      next(1);
83
 
84
    end
85
  endtask
86
 
87
  // read cycle
88
  task u_read;
89
    input   [addr_width-1:0]  a;
90
    output  [7:0]   d;
91
 
92
     begin
93
 
94
      addr  <= a;
95
      wdata <= 8'h00;
96
      rd    <= 1'b1;
97
      wr    <= 1'b0;
98
      next(2);
99
 
100
      d     <= rdata;
101
      $display("%t %m  cycle %x %x",$realtime,a,rdata );
102
      rd    <= 1'b1;
103
      next(1);
104
      rd    <= 1'b0;
105
    end
106
  endtask
107
 
108
  // Compare cycle (read data from location and compare with expected data)
109
  task u_cmp;
110
    input  [addr_width-1:0] a;
111
    input  [7:0] d_exp;
112
 
113
     begin
114
      addr      <= a;
115
      wdata     <= 8'h00;
116
      rd        <= 1'b1;
117
      wr        <= 1'b0;
118
      exp_rdata <= d_exp;
119
 
120
      next(1);
121
      mask_rdata  <= 8'hff;
122
 
123
 
124
      next(1);
125
      $display("%t %m   cycle %x %x",$realtime,a,d_exp );
126
      mask_rdata <= 8'h00;
127
      rd         <= 1'b0;
128
 
129
   end
130
  endtask
131
 
132
 
133
 
134
 
135
 
136
endmodule
137
 

powered by: WebSVN 2.1.0

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