blob: 4b9aba35c7c71f261e893b8943ea4c716b0065ec [file] [log] [blame]
//
//-----------------------------------------------------------------------------
// Copyright 2007-2009 Mentor Graphics Corporation
// Copyright 2007-2018 Cadence Design Systems, Inc.
// Copyright 2018 NVIDIA Corporation
// Copyright 2017 Cisco Systems, 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.
//-----------------------------------------------------------------------------
//------------------------------------------------------------------------------
//
// CLASS: uvm_text_tr_stream
//
// The ~uvm_text_tr_stream~ is the default stream implementation for the
// <uvm_text_tr_database>.
//
//
// @uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
class uvm_text_tr_stream extends uvm_tr_stream;
// Variable- m_text_db
// Internal reference to the text-based backend
local uvm_text_tr_database m_text_db;
`uvm_object_utils_begin(uvm_text_tr_stream)
`uvm_object_utils_end
// Function: new
// Constructor
//
// Parameters:
// name - Instance name
function new(string name="unnamed-uvm_text_tr_stream");
super.new(name);
endfunction : new
// Group: Implementation Agnostic API
// Function: do_open
// Callback triggered via <uvm_tr_database::open_stream>.
//
// @uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
protected virtual function void do_open(uvm_tr_database db,
string scope,
string stream_type_name);
$cast(m_text_db, db);
if (m_text_db.open_db())
$fdisplay(m_text_db.m_file,
" CREATE_STREAM @%0t {NAME:%s T:%s SCOPE:%s STREAM:%0d}",
$time,
this.get_name(),
stream_type_name,
scope,
this.get_handle());
endfunction : do_open
// Function: do_close
// Callback triggered via <uvm_tr_stream::close>.
//
// @uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
protected virtual function void do_close();
if (m_text_db.open_db())
$fdisplay(m_text_db.m_file,
" CLOSE_STREAM @%0t {NAME:%s T:%s SCOPE:%s STREAM:%0d}",
$time,
this.get_name(),
this.get_stream_type_name(),
this.get_scope(),
this.get_handle());
endfunction : do_close
// Function: do_free
// Callback triggered via <uvm_tr_stream::free>.
//
// @uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
protected virtual function void do_free();
if (m_text_db.open_db())
$fdisplay(m_text_db.m_file,
" FREE_STREAM @%0t {NAME:%s T:%s SCOPE:%s STREAM:%0d}",
$time,
this.get_name(),
this.get_stream_type_name(),
this.get_scope(),
this.get_handle());
m_text_db = null;
return;
endfunction : do_free
// Function: do_open_recorder
// Marks the beginning of a new record in the stream
//
// Text-backend specific implementation.
//
// @uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
protected virtual function uvm_recorder do_open_recorder(string name,
time open_time,
string type_name);
if (m_text_db.open_db()) begin
return uvm_text_recorder::type_id::create(name);
end
return null;
endfunction : do_open_recorder
endclass : uvm_text_tr_stream