diff options
Diffstat (limited to 'testsuite/vests/vhdl-93/billowitch/compliant/tc1205.vhd')
-rw-r--r-- | testsuite/vests/vhdl-93/billowitch/compliant/tc1205.vhd | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/testsuite/vests/vhdl-93/billowitch/compliant/tc1205.vhd b/testsuite/vests/vhdl-93/billowitch/compliant/tc1205.vhd new file mode 100644 index 0000000..ed14023 --- /dev/null +++ b/testsuite/vests/vhdl-93/billowitch/compliant/tc1205.vhd @@ -0,0 +1,192 @@ + +-- Copyright (C) 2001 Bill Billowitch. + +-- Some of the work to develop this test suite was done with Air Force +-- support. The Air Force and Bill Billowitch assume no +-- responsibilities for this software. + +-- This file is part of VESTs (Vhdl tESTs). + +-- VESTs is free software; you can redistribute it and/or modify it +-- under the terms of the GNU General Public License as published by the +-- Free Software Foundation; either version 2 of the License, or (at +-- your option) any later version. + +-- VESTs 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 GNU General Public License +-- for more details. + +-- You should have received a copy of the GNU General Public License +-- along with VESTs; if not, write to the Free Software Foundation, +-- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +-- --------------------------------------------------------------------- +-- +-- $Id: tc1205.vhd,v 1.2 2001-10-26 16:29:39 paw Exp $ +-- $Revision: 1.2 $ +-- +-- --------------------------------------------------------------------- + +package c08s01b00x00p08n03i01205pkg is + + -- Type declarations. + type SWITCH_LEVEL is ( '0', '1', 'X' ); + type S_logic_vector is array(positive range <>) of SWITCH_LEVEL; + + -- Define the bus resolution function. + function switchf( s : S_logic_vector ) return SWITCH_LEVEL; + + -- Further type declarations. + subtype SWITCH_T is switchF SWITCH_LEVEL; + type WORD is array(0 to 31) of SWITCH_T; + +end c08s01b00x00p08n03i01205pkg; + +package body c08s01b00x00p08n03i01205pkg is + + function switchf( s : S_logic_vector ) return SWITCH_LEVEL is + + begin + return( S(1) ); + end switchf; + +end c08s01b00x00p08n03i01205pkg; + + + +use work.c08s01b00x00p08n03i01205pkg.all; +entity c08s01b00x00p08n03i01205ent_a is + + generic ( GenOne : in INTEGER ; GenTwo :INTEGER); + +end c08s01b00x00p08n03i01205ent_a; + +------------------------------------------------------------------------- + +architecture c08s01b00x00p08n03i01205arch_a of c08s01b00x00p08n03i01205ent_a is + -- Type definitions. + type WORD2 is array( 0 to 31 ) of SWITCH_LEVEL; + + -- Local signals. + signal A, B : WORD; + signal UnResolved : WORD2; + + +begin + + TEST_PROCESS: process + -- Constant declarations. + constant One : INTEGER := 1; + constant Two : INTEGER := 2; + + -- Local variables. + variable ShouldBeTime : TIME; + variable I : INTEGER; + + variable k : integer := 0; + + begin + -- Test locally static signals. + A( 1 ) <= 'X' after 10 ns; + A( 2 ) <= 'X' after 5 ns; + ShouldBeTime := NOW + 10 ns; + wait on A(1); + + -- Should wake up when the A(1) assignment takes place. + assert (A(1) = 'X'); + assert (ShouldBeTime = NOW); + + if (A(1) /= 'X' and ShouldBeTime /= Now) then + k := 1; + end if; + + -- Perform same test, but with a constant. + A( One ) <= '1' after 10 ns; + A( Two ) <= '1' after 5 ns; + ShouldBeTime := NOW + 10 ns; + wait on A(One); + + -- Should wake up when the A(1) assignment takes place. + assert (A(One) = '1'); + assert (ShouldBeTime = NOW); + + if (A(One) /= '1' and ShouldBeTime /= Now) then + k := 1; + end if; + + -- Perform same test, but with a generic. (globally static) + A( GenOne ) <= 'X' after 10 ns; + A( GenTwo ) <= 'X' after 5 ns; + ShouldBeTime := NOW + 10 ns; + wait on A(GenOne); + + -- Should wake up when the A(1) assignment takes place. + assert (A(GenOne) = 'X'); + assert (ShouldBeTime = NOW); + + if (A(GenOne) /= 'X' and ShouldBeTime /= Now) then + k := 1; + end if; + + -- Perform same test, but assigning to the whole thing. + A <= ('1','1','1','1','1','1','1','1','1','1', + '1','1','1','1','1','1','1','1','1','1', + '1','1','1','1','1','1','1','1','1','1', + '1','1') after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on A(GenOne); + + -- Should wake up when the all assignments take place. + assert (A(GenOne) = '1'); + assert (ShouldBeTime = NOW); + + if (A(GenOne) /= '1' and ShouldBeTime /= Now) then + k := 1; + end if; + + -- Now, perform same test but assigning to a composite + -- signal which is NOT resolved at the scalar subelement + -- level. + UnResolved <= ('1','1','1','1','1','1','1','1','1','1', + '1','1','1','1','1','1','1','1','1','1', + '1','1','1','1','1','1','1','1','1','1', + '1','1') after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on UnResolved(GenOne); + + -- Should wake up when the all assignments take place. + assert (UnResolved(GenOne) = '1'); + assert (ShouldBeTime = NOW); + + if (UnResolved(GenOne) /= '1' and ShouldBeTime /= Now) then + k := 1; + end if; + + assert NOT(k = 0) + report "***PASSED TEST: c08s01b00x00p08n03i01205" + severity NOTE; + assert (k = 0) + report "***FAILED TEST: c08s01b00x00p08n03i01205 - All statically indexed signal names (both locally and globally static) may be used in the sensitivity clause of a wait statement." + severity ERROR; + wait; + end process TEST_PROCESS; + +end c08s01b00x00p08n03i01205arch_a; + +use work.c08s01b00x00p08n03i01205pkg.all; +ENTITY c08s01b00x00p08n03i01205ent IS +END c08s01b00x00p08n03i01205ent; + +ARCHITECTURE c08s01b00x00p08n03i01205arch OF c08s01b00x00p08n03i01205ent IS + + component c08s01b00x00p08n03i01205ent_a + generic( GenOne : in INTEGER; GenTwo : INTEGER ); + end component; + for T1 : c08s01b00x00p08n03i01205ent_a use entity work.c08s01b00x00p08n03i01205ent_a(c08s01b00x00p08n03i01205arch_a); + +BEGIN + + T1 : c08s01b00x00p08n03i01205ent_a generic map ( 1, 2 ); + +END c08s01b00x00p08n03i01205arch; |