aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/gna/issue1764/repro.vhdl
blob: a00be03badf5089c4b54d86d8339f7f4c0236cef (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
entity repro is
end;

architecture behav of repro is
  type my_channel is record
    valid : bit;
    ack : bit;
    data : bit_vector;
  end record;

  type my_bus is record
    waddr : my_channel;
    wdata : my_channel;
  end record;

  function init_channel (fmt : my_channel) return my_channel is
  begin
    return (valid => '0',
            ack => '0',
            data => (fmt.data'range => '0'));
  end init_channel;

  function init_bus (fmt: my_bus) return my_bus is
  begin
    return (waddr => init_channel (fmt.waddr),
            wdata => init_channel (fmt.wdata));
  end init_bus;

  constant chan8 : my_channel := (valid => '0', ack => '0', data => x"a5");
begin
  process
    variable b0 : my_bus (waddr(data (7 downto 0)), wdata (data (15 downto 0)));
    variable b1 : b0'subtype;
  begin
    b1 := init_bus(b1);
    assert b1.waddr.valid = '0';
    assert b1.waddr.ack = '0';
    assert b1.waddr.data = "00000000";

    assert b1.wdata.valid = '0';
    assert b1.wdata.ack = '0';
    assert b1.wdata.data = x"0000";

    wait;
  end process;
end behav;