|
|
- --
- -- 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 ;
|