OpenCores
URL https://opencores.org/ocsvn/avalon-wishbone-bridge/avalon-wishbone-bridge/trunk

Subversion Repositories avalon-wishbone-bridge

[/] [avalon-wishbone-bridge/] [trunk/] [UVM/] [wb_slave_agent/] [wb_slave_sequence.svh] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sumanta.ch
//------------------------------------------------------------
2
//   Copyright 2010 Mentor Graphics Corporation
3
//   All Rights Reserved Worldwide
4
//
5
//   Licensed under the Apache License, Version 2.0 (the
6
//   "License"); you may not use this file except in
7
//   compliance with the License.  You may obtain a copy of
8
//   the License at
9
//
10
//       http://www.apache.org/licenses/LICENSE-2.0
11
//
12
//   Unless required by applicable law or agreed to in
13
//   writing, software distributed under the License is
14
//   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
15
//   CONDITIONS OF ANY KIND, either express or implied.  See
16
//   the License for the specific language governing
17
//   permissions and limitations under the License.
18
//------------------------------------------------------------
19
`ifndef wb_slave_sequence
20
`define wb_slave_sequence
21
 
22
 
23
//
24
// Class Description:
25
//
26
//
27
class wb_slave_sequence #(N=100) extends uvm_sequence #(wb_slave_seq_item);
28
 
29
// UVM Factory Registration Macro
30
//
31
`uvm_object_utils(wb_slave_sequence#(N))
32
 
33
//------------------------------------------
34
// Data Members (Outputs rand, inputs non-rand)
35
//------------------------------------------
36
bit [31:0] memory [int];
37
 
38
//------------------------------------------
39
// Constraints
40
//------------------------------------------
41
 
42
 
43
 
44
//------------------------------------------
45
// Methods
46
//------------------------------------------
47
 
48
// Standard UVM Methods:
49
extern function new(string name = "wb_slave_sequence");
50
extern task body;
51
 
52
endclass:wb_slave_sequence
53
 
54
function wb_slave_sequence::new(string name = "wb_slave_sequence");
55
  super.new(name);
56
endfunction
57
 
58
task wb_slave_sequence::body;
59
  wb_slave_agent_config m_cfg = wb_slave_agent_config::get_config(m_sequencer);
60
  wb_slave_seq_item req;
61
  wb_slave_seq_item rsp;
62
 
63
  req = wb_slave_seq_item#(32,64,2) ::type_id::create("req");
64
  rsp = wb_slave_seq_item#(32,64,2) ::type_id::create("rsp");
65
 
66
  //wait (m_cfg.WB.rst_n);
67
  // Slave sequence finishes after 60 transfers:
68
  repeat(N) begin
69
 
70
    // Get request
71
    start_item(req);
72
    finish_item(req);
73
    $display ("req item emitted\n");
74
    // Prepare memory for response:
75
    if (req.rw) begin
76
      memory[req.addr] = req.wdata;
77
    end
78
    else begin
79
      if(!memory.exists(req.addr)) begin
80
        memory[req.addr] = 32'hdeadbeef;
81
        memory[req.addr] = req.addr;
82
      end
83
    end
84
 
85
    // Respond:
86
    start_item(rsp);
87
    rsp.copy(req);
88
    assert (rsp.randomize() with {if(!rsp.rw) rsp.rdata == memory[rsp.addr];});
89
    finish_item(rsp);
90
    $display ("rsp item emitted\n");
91
  end
92
 
93
endtask:body
94
 
95
`endif // wb_slave_sequence

powered by: WebSVN 2.1.0

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