summaryrefslogtreecommitdiff
path: root/testsuite/vests/vhdl-93/billowitch/compliant/tc1309.vhd
blob: 1bf2b64170cda733113926fad145d7c0fd5f51c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152

-- 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: tc1309.vhd,v 1.2 2001-10-26 16:29:39 paw Exp $
-- $Revision: 1.2 $
--
-- ---------------------------------------------------------------------

package c08s04b00x00p07n01i01309pkg is

  -- Type declarations.
  subtype     BV2  is BIT_VECTOR( 0 to 1 );
  subtype     CH2  is STRING( 1 to 2 );

  -- Constant declarations.
  constant BVC  : BV2 := B"00";
  constant CHC  : CH2 := "bb";

  -- Function returns BV2.
  function  returnBV2 return BV2;

  -- Function returns CH2.
  function  returnCH2 return CH2;

end c08s04b00x00p07n01i01309pkg;

package body c08s04b00x00p07n01i01309pkg is
  
  -- Function returns BV2.
  function  returnBV2 return BV2 is
  begin
    return ( BVC );
  end returnBV2;
  
  -- Function returns CH2.
  function  returnCH2 return CH2 is
  begin
    return( CHC );
  end returnCH2;
  
end c08s04b00x00p07n01i01309pkg;

use work.c08s04b00x00p07n01i01309pkg.all;
ENTITY c08s04b00x00p07n01i01309ent IS
END c08s04b00x00p07n01i01309ent;

ARCHITECTURE c08s04b00x00p07n01i01309arch OF c08s04b00x00p07n01i01309ent IS
  -- Local signals.
  signal S       : BIT;
  signal T       : BIT;
  
  signal C1, C2  : CHARACTER;
BEGIN
  TESTING: PROCESS
    
    -- local variables
    variable BITV     : BV2 := B"11";
    variable STRV     : CH2 := "ab";
    variable ShouldBeTime : TIME;
    
    variable k : integer := 0;
    
  BEGIN
    -- Assign with a variable as the expression.
    ( S, T )  <= BITV after 10 ns;
    ShouldBeTime := NOW + 10 ns;
    wait on S,T;
    if (ShouldBeTime /= Now or S /= BITV(0) or T /= BITV(1)) then
      k := 1;
    end if;
    assert (ShouldBeTime = NOW);
    assert ((S = BITV( 0 )) and (T = BITV( 1 )));
    
    ( C1,C2 ) <= STRV after 10 ns;
    ShouldBeTime := NOW + 10 ns;
    wait on C1,C2;
    if (ShouldBeTime /= Now or C1 /= STRV(1) or C2 /= STRV(2)) then
      k := 1;
    end if;
    assert (ShouldBeTime = NOW);
    assert ((C1 = STRV( 1 )) and (C2 = STRV( 2 )));
    
    -- Assign with a function return value.
    ( S, T )  <= returnBV2 after 10 ns;
    ShouldBeTime := NOW + 10 ns;
    wait on S,T;
    if (ShouldBeTime /= Now or S /= BVC(0) or T /= BVC(1)) then
      k := 1;
    end if;
    assert (ShouldBeTime = NOW);
    assert ((S = BVC( 0 )) and (T = BVC( 1 )));
    
    ( C1,C2 ) <= returnCH2 after 10 ns;
    ShouldBeTime := NOW + 10 ns;
    wait on C1,C2;
    if (ShouldBeTime /= Now or C1 /= CHC(1) or C2 /= CHC(2)) then
      k := 1;
    end if;
    assert (ShouldBeTime = NOW);
    assert ((C1 = CHC( 1 )) and (C2 = CHC( 2 )));
    
    -- Assign with a qualified expression.
    ( S, T )  <= BV2'( '0', '1' ) after 10 ns;
    ShouldBeTime := NOW + 10 ns;
    wait on S,T;
    if (ShouldBeTime /= Now or S /= '0' or T /= '1') then
      k := 1;   
    end if;
    assert (ShouldBeTime = NOW);
    assert ((S = '0') and (T = '1'));
    
    ( C1,C2 ) <= CH2'( 'c', 'c' ) after 10 ns;
    ShouldBeTime := NOW + 10 ns;
    wait on C1,C2;
    if (ShouldBeTime /= Now or C1 /= 'c' or C2 /= 'c') then
      k := 1;
    end if;
    assert (ShouldBeTime = NOW);
    assert ((C1 = 'c') and (C2 = 'c'));
    
    assert NOT( k = 0 ) 
      report "***PASSED TEST: c08s04b00x00p07n01i01309"
      severity NOTE;
    assert ( k = 0 ) 
      report "***FAILED TEST: c08s04b00x00p07n01i01309 - If the target of the signal assignment statement is in the form of an aggregate, then the type of the aggregate must be determinable from the context."
      severity ERROR;
    wait;
  END PROCESS TESTING;

END c08s04b00x00p07n01i01309arch;