|
--
|
|
-- File Name: TranscriptPkg.vhd
|
|
-- Design Unit Name: TranscriptPkg
|
|
-- Revision: STANDARD VERSION
|
|
--
|
|
-- Maintainer: Jim Lewis email: jim@synthworks.com
|
|
-- Contributor(s):
|
|
-- Jim Lewis jim@synthworks.com
|
|
--
|
|
--
|
|
-- Description:
|
|
-- Define file identifier TranscriptFile
|
|
-- provide subprograms to open, close, and print to it.
|
|
--
|
|
--
|
|
-- Developed for:
|
|
-- SynthWorks Design Inc.
|
|
-- VHDL Training Classes
|
|
-- 11898 SW 128th Ave. Tigard, Or 97223
|
|
-- http://www.SynthWorks.com
|
|
--
|
|
-- Revision History:
|
|
-- Date Version Description
|
|
-- 01/2015: 2015.01 Initial revision
|
|
-- 01/2016: 2016.01 TranscriptOpen function now calls procedure of same name
|
|
-- 11/2016: 2016.l1 Added procedure BlankLine
|
|
--
|
|
--
|
|
-- Copyright (c) 2015-2016 by SynthWorks Design Inc. All rights reserved.
|
|
--
|
|
-- Verbatim copies of this source file may be used and
|
|
-- distributed without restriction.
|
|
--
|
|
-- This source file is free software; you can redistribute it
|
|
-- and/or modify it under the terms of the ARTISTIC License
|
|
-- as published by The Perl Foundation; either version 2.0 of
|
|
-- the License, or (at your option) any later version.
|
|
--
|
|
-- This source is distributed in the hope that it will be
|
|
-- useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
-- PURPOSE. See the Artistic License for details.
|
|
--
|
|
-- You should have received a copy of the license with this source.
|
|
-- If not download it from,
|
|
-- http://www.perlfoundation.org/artistic_license_2_0
|
|
--
|
|
|
|
use std.textio.all ;
|
|
package TranscriptPkg is
|
|
|
|
-- File Identifier to facilitate usage of one transcript file
|
|
file TranscriptFile : text ;
|
|
|
|
-- Cause compile errors if READ_MODE is passed to TranscriptOpen
|
|
subtype WRITE_APPEND_OPEN_KIND is FILE_OPEN_KIND range WRITE_MODE to APPEND_MODE ;
|
|
|
|
-- Open and close TranscriptFile. Function allows declarative opens
|
|
procedure TranscriptOpen (Status: out FILE_OPEN_STATUS; ExternalName: STRING; OpenKind: WRITE_APPEND_OPEN_KIND := WRITE_MODE) ;
|
|
procedure TranscriptOpen (ExternalName: STRING; OpenKind: WRITE_APPEND_OPEN_KIND := WRITE_MODE) ;
|
|
impure function TranscriptOpen (ExternalName: STRING; OpenKind: WRITE_APPEND_OPEN_KIND := WRITE_MODE) return FILE_OPEN_STATUS ;
|
|
|
|
procedure TranscriptClose ;
|
|
impure function IsTranscriptOpen return boolean ;
|
|
alias IsTranscriptEnabled is IsTranscriptOpen [return boolean] ;
|
|
|
|
-- Mirroring. When using TranscriptPkw WriteLine and Print, uses both TranscriptFile and OUTPUT
|
|
procedure SetTranscriptMirror (A : boolean := TRUE) ;
|
|
impure function IsTranscriptMirrored return boolean ;
|
|
alias GetTranscriptMirror is IsTranscriptMirrored [return boolean] ;
|
|
|
|
-- Write to TranscriptFile when open. Write to OUTPUT when not open or IsTranscriptMirrored
|
|
procedure WriteLine(buf : inout line) ;
|
|
procedure Print(s : string) ;
|
|
|
|
-- Create "count" number of blank lines
|
|
procedure BlankLine (count : integer := 1) ;
|
|
|
|
end TranscriptPkg ;
|
|
|
|
--- ///////////////////////////////////////////////////////////////////////////
|
|
--- ///////////////////////////////////////////////////////////////////////////
|
|
--- ///////////////////////////////////////////////////////////////////////////
|
|
|
|
package body TranscriptPkg is
|
|
------------------------------------------------------------
|
|
type LocalBooleanPType is protected
|
|
procedure Set (A : boolean) ;
|
|
impure function get return boolean ;
|
|
end protected LocalBooleanPType ;
|
|
type LocalBooleanPType is protected body
|
|
variable GlobalVar : boolean := FALSE ;
|
|
procedure Set (A : boolean) is
|
|
begin
|
|
GlobalVar := A ;
|
|
end procedure Set ;
|
|
impure function get return boolean is
|
|
begin
|
|
return GlobalVar ;
|
|
end function get ;
|
|
end protected body LocalBooleanPType ;
|
|
|
|
------------------------------------------------------------
|
|
shared variable TranscriptEnable : LocalBooleanPType ;
|
|
shared variable TranscriptMirror : LocalBooleanPType ;
|
|
|
|
------------------------------------------------------------
|
|
procedure TranscriptOpen (Status: out FILE_OPEN_STATUS; ExternalName: STRING; OpenKind: WRITE_APPEND_OPEN_KIND := WRITE_MODE) is
|
|
------------------------------------------------------------
|
|
begin
|
|
file_open(Status, TranscriptFile, ExternalName, OpenKind) ;
|
|
if Status = OPEN_OK then
|
|
TranscriptEnable.Set(TRUE) ;
|
|
end if ;
|
|
end procedure TranscriptOpen ;
|
|
|
|
------------------------------------------------------------
|
|
procedure TranscriptOpen (ExternalName: STRING; OpenKind: WRITE_APPEND_OPEN_KIND := WRITE_MODE) is
|
|
------------------------------------------------------------
|
|
variable Status : FILE_OPEN_STATUS ;
|
|
begin
|
|
TranscriptOpen(Status, ExternalName, OpenKind) ;
|
|
if Status /= OPEN_OK then
|
|
report "TranscriptPkg.TranscriptOpen file: " &
|
|
ExternalName & " status is: " & to_string(status) & " and is not OPEN_OK" severity FAILURE ;
|
|
end if ;
|
|
end procedure TranscriptOpen ;
|
|
|
|
------------------------------------------------------------
|
|
impure function TranscriptOpen (ExternalName: STRING; OpenKind: WRITE_APPEND_OPEN_KIND := WRITE_MODE) return FILE_OPEN_STATUS is
|
|
------------------------------------------------------------
|
|
variable Status : FILE_OPEN_STATUS ;
|
|
begin
|
|
TranscriptOpen(Status, ExternalName, OpenKind) ;
|
|
return Status ;
|
|
end function TranscriptOpen ;
|
|
|
|
------------------------------------------------------------
|
|
procedure TranscriptClose is
|
|
------------------------------------------------------------
|
|
begin
|
|
if TranscriptEnable.Get then
|
|
file_close(TranscriptFile) ;
|
|
end if ;
|
|
TranscriptEnable.Set(FALSE) ;
|
|
end procedure TranscriptClose ;
|
|
|
|
------------------------------------------------------------
|
|
impure function IsTranscriptOpen return boolean is
|
|
------------------------------------------------------------
|
|
begin
|
|
return TranscriptEnable.Get ;
|
|
end function IsTranscriptOpen ;
|
|
|
|
------------------------------------------------------------
|
|
procedure SetTranscriptMirror (A : boolean := TRUE) is
|
|
------------------------------------------------------------
|
|
begin
|
|
TranscriptMirror.Set(A) ;
|
|
end procedure SetTranscriptMirror ;
|
|
|
|
------------------------------------------------------------
|
|
impure function IsTranscriptMirrored return boolean is
|
|
------------------------------------------------------------
|
|
begin
|
|
return TranscriptMirror.Get ;
|
|
end function IsTranscriptMirrored ;
|
|
|
|
------------------------------------------------------------
|
|
procedure WriteLine(buf : inout line) is
|
|
------------------------------------------------------------
|
|
begin
|
|
if not TranscriptEnable.Get then
|
|
WriteLine(OUTPUT, buf) ;
|
|
elsif TranscriptMirror.Get then
|
|
TEE(TranscriptFile, buf) ;
|
|
else
|
|
WriteLine(TranscriptFile, buf) ;
|
|
end if ;
|
|
end procedure WriteLine ;
|
|
|
|
------------------------------------------------------------
|
|
procedure Print(s : string) is
|
|
------------------------------------------------------------
|
|
variable buf : line ;
|
|
begin
|
|
write(buf, s) ;
|
|
WriteLine(buf) ;
|
|
end procedure Print ;
|
|
|
|
------------------------------------------------------------
|
|
procedure BlankLine (count : integer := 1) is
|
|
------------------------------------------------------------
|
|
begin
|
|
for i in 1 to count loop
|
|
print("") ;
|
|
end loop ;
|
|
end procedure Blankline ;
|
|
|
|
end package body TranscriptPkg ;
|