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 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 Version: 1.5.5 Wed Jan 7 19:27:18 2009 |