URL
https://opencores.org/ocsvn/uart2bus_testbench/uart2bus_testbench/trunk
Subversion Repositories uart2bus_testbench
[/] [uart2bus_testbench/] [trunk/] [tb/] [uvm_src/] [tlm1/] [uvm_tlm_imps.svh] - Rev 16
Compare with Previous | Blame | View Log
////----------------------------------------------------------------------// Copyright 2007-2011 Mentor Graphics Corporation// Copyright 2007-2010 Cadence Design Systems, Inc.// Copyright 2010 Synopsys, Inc.// All Rights Reserved Worldwide//// Licensed under the Apache License, Version 2.0 (the// "License"); you may not use this file except in// compliance with the License. You may obtain a copy of// the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in// writing, software distributed under the License is// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR// CONDITIONS OF ANY KIND, either express or implied. See// the License for the specific language governing// permissions and limitations under the License.//----------------------------------------------------------------------`ifndef UVM_TLM_IMPS_SVH`define UVM_TLM_IMPS_SVH//// These IMP macros define implementations of the uvm_*_port, uvm_*_export,// and uvm_*_imp ports.////---------------------------------------------------------------// Macros for implementations of UVM ports and exports/*`define UVM_BLOCKING_PUT_IMP(imp, TYPE, arg) \task put (TYPE arg); \if (m_imp_list.size()) == 0) begin \uvm_report_error("Port Not Bound","Blocking put to unbound port will wait forever.", UVM_NONE);@imp;endif (bcast_mode) begin \if (m_imp_list.size()) > 1) \forkbeginforeach (m_imp_list[index]) \fork \automatic int i = index; \begin m_imp_list[i].put(arg); end \join_none \wait fork; \end \join \else \m_imp_list[0].put(arg); \end \else \if (imp != null) \imp.put(arg); \endtask \`define UVM_NONBLOCKING_PUT_IMP(imp, TYPE, arg) \function bit try_put(input TYPE arg); \if (bcast_mode) begin \if (!can_put()) \return 0; \foreach (m_imp_list[index]) \void'(m_imp_list[index].try_put(arg)); \return 1; \end \if (imp != null) \return imp.try_put(arg)); \return 0; \endfunction \\function bit can_put(); \if (bcast_mode) begin \if (m_imp_list.size()) begin \foreach (m_imp_list[index]) begin \if (!m_imp_list[index].can_put() \return 0; \end \return 1; \end \return 0; \end \if (imp != null) \return imp.can_put(); \return 0; \endfunction*///-----------------------------------------------------------------------// TLM imp implementations`define UVM_BLOCKING_PUT_IMP(imp, TYPE, arg) \task put (TYPE arg); \imp.put(arg); \endtask`define UVM_NONBLOCKING_PUT_IMP(imp, TYPE, arg) \function bit try_put (TYPE arg); \return imp.try_put(arg); \endfunction \function bit can_put(); \return imp.can_put(); \endfunction`define UVM_BLOCKING_GET_IMP(imp, TYPE, arg) \task get (output TYPE arg); \imp.get(arg); \endtask`define UVM_NONBLOCKING_GET_IMP(imp, TYPE, arg) \function bit try_get (output TYPE arg); \return imp.try_get(arg); \endfunction \function bit can_get(); \return imp.can_get(); \endfunction`define UVM_BLOCKING_PEEK_IMP(imp, TYPE, arg) \task peek (output TYPE arg); \imp.peek(arg); \endtask`define UVM_NONBLOCKING_PEEK_IMP(imp, TYPE, arg) \function bit try_peek (output TYPE arg); \return imp.try_peek(arg); \endfunction \function bit can_peek(); \return imp.can_peek(); \endfunction`define UVM_BLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) \task transport (REQ req_arg, output RSP rsp_arg); \imp.transport(req_arg, rsp_arg); \endtask`define UVM_NONBLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) \function bit nb_transport (REQ req_arg, output RSP rsp_arg); \return imp.nb_transport(req_arg, rsp_arg); \endfunction`define UVM_PUT_IMP(imp, TYPE, arg) \`UVM_BLOCKING_PUT_IMP(imp, TYPE, arg) \`UVM_NONBLOCKING_PUT_IMP(imp, TYPE, arg)`define UVM_GET_IMP(imp, TYPE, arg) \`UVM_BLOCKING_GET_IMP(imp, TYPE, arg) \`UVM_NONBLOCKING_GET_IMP(imp, TYPE, arg)`define UVM_PEEK_IMP(imp, TYPE, arg) \`UVM_BLOCKING_PEEK_IMP(imp, TYPE, arg) \`UVM_NONBLOCKING_PEEK_IMP(imp, TYPE, arg)`define UVM_BLOCKING_GET_PEEK_IMP(imp, TYPE, arg) \`UVM_BLOCKING_GET_IMP(imp, TYPE, arg) \`UVM_BLOCKING_PEEK_IMP(imp, TYPE, arg)`define UVM_NONBLOCKING_GET_PEEK_IMP(imp, TYPE, arg) \`UVM_NONBLOCKING_GET_IMP(imp, TYPE, arg) \`UVM_NONBLOCKING_PEEK_IMP(imp, TYPE, arg)`define UVM_GET_PEEK_IMP(imp, TYPE, arg) \`UVM_BLOCKING_GET_PEEK_IMP(imp, TYPE, arg) \`UVM_NONBLOCKING_GET_PEEK_IMP(imp, TYPE, arg)`define UVM_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) \`UVM_BLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg) \`UVM_NONBLOCKING_TRANSPORT_IMP(imp, REQ, RSP, req_arg, rsp_arg)`define UVM_TLM_GET_TYPE_NAME(NAME) \virtual function string get_type_name(); \return NAME; \endfunction`define UVM_PORT_COMMON(MASK,TYPE_NAME) \function new (string name, uvm_component parent, \int min_size=1, int max_size=1); \super.new (name, parent, UVM_PORT, min_size, max_size); \m_if_mask = MASK; \endfunction \`UVM_TLM_GET_TYPE_NAME(TYPE_NAME)`define UVM_SEQ_PORT(MASK,TYPE_NAME) \function new (string name, uvm_component parent, \int min_size=0, int max_size=1); \super.new (name, parent, UVM_PORT, min_size, max_size); \m_if_mask = MASK; \endfunction \`UVM_TLM_GET_TYPE_NAME(TYPE_NAME)`define UVM_EXPORT_COMMON(MASK,TYPE_NAME) \function new (string name, uvm_component parent, \int min_size=1, int max_size=1); \super.new (name, parent, UVM_EXPORT, min_size, max_size); \m_if_mask = MASK; \endfunction \`UVM_TLM_GET_TYPE_NAME(TYPE_NAME)`define UVM_IMP_COMMON(MASK,TYPE_NAME,IMP) \local IMP m_imp; \function new (string name, IMP imp); \super.new (name, imp, UVM_IMPLEMENTATION, 1, 1); \m_imp = imp; \m_if_mask = MASK; \endfunction \`UVM_TLM_GET_TYPE_NAME(TYPE_NAME)`define UVM_MS_IMP_COMMON(MASK,TYPE_NAME) \local this_req_type m_req_imp; \local this_rsp_type m_rsp_imp; \function new (string name, this_imp_type imp, \this_req_type req_imp = null, this_rsp_type rsp_imp = null); \super.new (name, imp, UVM_IMPLEMENTATION, 1, 1); \if(req_imp==null) $cast(req_imp, imp); \if(rsp_imp==null) $cast(rsp_imp, imp); \m_req_imp = req_imp; \m_rsp_imp = rsp_imp; \m_if_mask = MASK; \endfunction \`UVM_TLM_GET_TYPE_NAME(TYPE_NAME)`endif
