ovm_push_sequencer.svh

Go to the documentation of this file.
00001 //----------------------------------------------------------------------
00002 //   Copyright 2007-2008 Mentor Graphics Corporation
00003 //   Copyright 2007-2008 Cadence Design Systems, Inc.
00004 //   All Rights Reserved Worldwide
00005 //
00006 //   Licensed under the Apache License, Version 2.0 (the
00007 //   "License"); you may not use this file except in
00008 //   compliance with the License.  You may obtain a copy of
00009 //   the License at
00010 //
00011 //       http://www.apache.org/licenses/LICENSE-2.0
00012 //
00013 //   Unless required by applicable law or agreed to in
00014 //   writing, software distributed under the License is
00015 //   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
00016 //   CONDITIONS OF ANY KIND, either express or implied.  See
00017 //   the License for the specific language governing
00018 //   permissions and limitations under the License.
00019 //----------------------------------------------------------------------
00020 
00021 
00022 typedef class ovm_sequence_base;
00023 
00024 class ovm_push_sequencer #(type REQ = ovm_sequence_item,
00025                            type RSP = REQ) extends ovm_sequencer_param_base #(REQ, RSP);
00026 
00027   typedef ovm_push_sequencer #( REQ , RSP) this_type;
00028 
00029   ovm_blocking_put_port #(REQ) req_port;
00030 
00031   function new (string name, ovm_component parent);
00032     super.new(name, parent);
00033 
00034     req_port              = new ("req_port", this);
00035   endfunction // new
00036 
00037   protected virtual function int  m_find_number_driver_connections();
00038     return(req_port.size());
00039   endfunction
00040 
00041   task run();
00042     REQ t;
00043     integer selected_sequence;
00044 
00045     fork
00046       super.run();
00047       forever
00048    begin
00049           do 
00050             begin
00051               wait_for_sequences();
00052               selected_sequence = choose_next_request();
00053               if (selected_sequence == -1) begin
00054       wait_for_available_sequence();
00055               end
00056             end while (selected_sequence == -1);
00057           // issue grant
00058           if (selected_sequence >= 0) begin
00059             set_arbitration_completed(arb_sequence_q[selected_sequence].request_id);
00060             arb_sequence_q.delete(selected_sequence);
00061             m_update_lists();
00062           end
00063           m_req_fifo.get(t);
00064           req_port.put(t);
00065           m_wait_for_item_sequence_id = t.get_sequence_id();
00066           m_wait_for_item_transaction_id = t.get_transaction_id();
00067    end // forever begin
00068     join
00069   endtask
00070 endclass

Intelligent Design Verification
Intelligent Design Verification
Project: OVM, Revision: 2.0.1
Copyright (c) 2008 Intelligent Design Verification.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included here:
http://www.intelligentdv.com/licenses/fdl.txt
doxygen
Doxygen Version: 1.5.5
Wed Jan 7 19:27:18 2009
Find a documentation bug? Report bugs to: bugs.intelligentdv.com Project: DoxygenFilterSV