Ciro Santilli OurBigBook.com  Sponsor 中国独裁统治 China Dictatorship 新疆改造中心、六四事件、法轮功、郝海东、709大抓捕、2015巴拿马文件 邓家贵、低端人口、西藏骚乱
vhdl/record_tb.vhdl.bak
-- TODO GHDL 1.0.0: "GHDL Bug occurred"
-- Like C struct: named fields of arbitrary types.

library ieee;
use ieee.std_logic_1164.all;

entity record_tb is
end record_tb;

architecture behav of record_tb is
    type bit2_t is array (0 to 1) of bit;
    type record0 is record
        abit : bit;
        anint : integer;
        areal : real;
        bit2 : bit2_t;
        my_std_logic_vector : std_logic_vector(0 to 1);
    end record;
    constant arecord0 : record0 := ('1', 1, 1.0, B"01", B"01");
    constant arecord1 : record0 := ('1', 1, 1.0, B"01", B"01");

    -- http://stackoverflow.com/questions/37924463/how-to-instantiate-a-record-that-has-a-only-a-single-field-in-vhdl
    type record_one_field_t is record
        abit : bit;
    end record;
    -- Fails because of ambiguity with the `'0'` constant.
    --constant record_one_field : record_one_field_t := ('0');
    constant record_one_field : record_one_field_t := (abit => '0');

begin
    process is
    begin
        -- Field access.
        assert arecord0.abit = '1';
        assert arecord0.anint = 1;
        assert arecord0.areal = 1.0;
        assert arecord0.bit2 = B"01";
        assert arecord0.my_std_logic_vector = B"01";

        -- = operator.
        assert arecord0 = arecord1;

        assert record_one_field.abit = '0';

        wait;
    end process;
end behav;