diff options
Diffstat (limited to 'testsuite/gna/issue317/PoC/src/sim/sim_simulation.v08.vhdl')
-rw-r--r-- | testsuite/gna/issue317/PoC/src/sim/sim_simulation.v08.vhdl | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/testsuite/gna/issue317/PoC/src/sim/sim_simulation.v08.vhdl b/testsuite/gna/issue317/PoC/src/sim/sim_simulation.v08.vhdl new file mode 100644 index 000000000..81a964b95 --- /dev/null +++ b/testsuite/gna/issue317/PoC/src/sim/sim_simulation.v08.vhdl @@ -0,0 +1,173 @@ +-- EMACS settings: -*- tab-width: 2; indent-tabs-mode: t -*- +-- vim: tabstop=2:shiftwidth=2:noexpandtab +-- kate: tab-width 2; replace-tabs off; indent-width 2; +-- ============================================================================= +-- Authors: Patrick Lehmann +-- Thomas B. Preusser +-- +-- Package: Simulation constants, functions and utilities. +-- +-- Description: +-- ------------------------------------- +-- .. TODO:: No documentation available. +-- +-- License: +-- ============================================================================= +-- Copyright 2007-2016 Technische Universitaet Dresden - Germany +-- Chair of VLSI-Design, Diagnostics and Architecture +-- +-- 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. +-- ============================================================================= + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; +use IEEE.math_real.all; + +library PoC; +use PoC.utils.all; +-- use PoC.strings.all; +use PoC.vectors.all; +use PoC.physical.all; + +use PoC.sim_global.all; +use PoC.sim_types.all; +use PoC.sim_protected.all; + + +package simulation is + -- Legacy interface for pre VHDL-2002 + -- =========================================================================== + -- prepared aliases, if GHDL gets the aliases fixed. Reported on 08.02.2015 as Issue #38 + -- alias simmInitialize is globalSimulationStatus.initialize[NATURAL, TIME]; + -- alias simmFinalize is globalSimulationStatus.finalize[]; + + -- alias simmCreateTest is globalSimulationStatus.createTest[STRING return T_SIM_TEST_ID]; + -- alias simmFinalizeTest is globalSimulationStatus.finalizeTest[T_SIM_TEST_ID]; + -- alias simmRegisterProcess is globalSimulationStatus.registerProcess[T_SIM_TEST_ID, STRING, BOOLEAN return T_SIM_PROCESS_ID]; + -- alias simmRegisterProcess is globalSimulationStatus.registerProcess[STRING, BOOLEAN return T_SIM_PROCESS_ID]; + -- alias simmDeactivateProcess is globalSimulationStatus.deactivateProcess[T_SIM_PROCESS_ID]; + + -- alias simmIsStopped is globalSimulationStatus.isStopped[T_SIM_TEST_ID return BOOLEAN]; + -- alias simmIsFinalized is globalSimulationStatus.isFinalized[T_SIM_TEST_ID return BOOLEAN]; + -- alias simmIsAllFinalized is globalSimulationStatus.isAllFinalized [return BOOLEAN]; + + -- alias simmAssertion is globalSimulationStatus.assertion[BOOLEAN, STRING]; + -- alias simmFail is globalSimulationStatus.fail[STRING]; + -- alias simmWriteMessage is globalSimulationStatus.writeMessage[STRING]; + + procedure simInitialize(MaxAssertFailures : natural := natural'high; MaxSimulationRuntime : TIME := TIME'high); + procedure simFinalize; + + impure function simCreateTest(Name : string) return T_SIM_TEST_ID; + procedure simFinalizeTest(constant TestID : T_SIM_TEST_ID); + impure function simRegisterProcess(Name : string; constant IsLowPriority : boolean := FALSE) return T_SIM_PROCESS_ID; + impure function simRegisterProcess(constant TestID : T_SIM_TEST_ID; Name : string; constant IsLowPriority : boolean := FALSE) return T_SIM_PROCESS_ID; + procedure simDeactivateProcess(ProcID : T_SIM_PROCESS_ID); + + impure function simIsStopped(constant TestID : T_SIM_TEST_ID := C_SIM_DEFAULT_TEST_ID) return boolean; + impure function simIsFinalized(constant TestID : T_SIM_TEST_ID := C_SIM_DEFAULT_TEST_ID) return boolean; + impure function simIsAllFinalized return boolean; + + procedure simAssertion(cond : in boolean; Message : in string := ""); + procedure simFail(Message : in string := ""); + procedure simWriteMessage(Message : in string := ""); + + -- TODO: integrate VCD simulation functions and procedures from sim_value_change_dump.vhdl here + + -- checksum functions + -- =========================================================================== + -- TODO: move checksum functions here +end package; + + +package body simulation is + -- legacy procedures + -- =========================================================================== + -- TODO: undocumented group + procedure simInitialize(MaxAssertFailures : natural := natural'high; MaxSimulationRuntime : TIME := TIME'high) is + begin + globalSimulationStatus.initialize(MaxAssertFailures, MaxSimulationRuntime); + if C_SIM_VERBOSE then report "simInitialize:" severity NOTE; end if; + if (MaxSimulationRuntime /= time'high) then + wait for MaxSimulationRuntime; + report "simInitialize: TIMEOUT" severity ERROR; + globalSimulationStatus.finalize; + end if; + end procedure; + + procedure simFinalize is + begin + globalSimulationStatus.finalize; + end procedure; + + impure function simCreateTest(Name : string) return T_SIM_TEST_ID is + begin + return globalSimulationStatus.createTest(Name); + end function; + + procedure simFinalizeTest(constant TestID : T_SIM_TEST_ID) is + begin + globalSimulationStatus.finalizeTest(TestID); + end procedure; + + impure function simRegisterProcess(Name : string; constant IsLowPriority : boolean := FALSE) return T_SIM_PROCESS_ID is + begin + return globalSimulationStatus.registerProcess(Name, IsLowPriority); + end function; + + impure function simRegisterProcess(constant TestID : T_SIM_TEST_ID; Name : string; constant IsLowPriority : boolean := FALSE) return T_SIM_PROCESS_ID is + begin + return globalSimulationStatus.registerProcess(TestID, Name, IsLowPriority); + end function; + + procedure simDeactivateProcess(ProcID : T_SIM_PROCESS_ID) is + begin + globalSimulationStatus.deactivateProcess(ProcID); + end procedure; + + impure function simIsStopped(constant TestID : T_SIM_TEST_ID := C_SIM_DEFAULT_TEST_ID) return boolean is + begin + return globalSimulationStatus.isStopped(TestID); + end function; + + impure function simIsFinalized(constant TestID : T_SIM_TEST_ID := C_SIM_DEFAULT_TEST_ID) return boolean is + begin + return globalSimulationStatus.isFinalized(TestID); + end function; + + impure function simIsAllFinalized return boolean is + begin + return globalSimulationStatus.isAllFinalized; + end function; + + -- TODO: undocumented group + procedure simWriteMessage(Message : in string := "") is + begin + globalSimulationStatus.writeMessage(Message); + end procedure; + + procedure simFail(Message : in string := "") is + begin + globalSimulationStatus.fail(Message); + end procedure; + + procedure simAssertion(cond : in boolean; Message : in string := "") is + begin + globalSimulationStatus.assertion(cond, Message); + end procedure; + + -- checksum functions + -- =========================================================================== + -- TODO: move checksum functions here +end package body; |