You can do this like this:
library ieee;
use ieee.std_logic_1164.all;
package test is
subtype w32 is std_logic_vector(31 downto 0);
type cachesubset is record
tag : std_logic_vector(3 downto 0);
word0 : w32;
word1 : w32;
dirty : std_logic;
valid : std_logic;
end record;
type subsetst is array (0 to 1) of cachesubset;
type cacheset is record
lru : std_logic;
subsets : subsetst;
end record;
constant empty_cachesubset : cachesubset := (
tag => (others => '0'),
word0 => (others => '0'),
word1 => (others => '0'),
dirty => '0',
valid => '0'
);
constant empty_cacheset : cacheset := (
lru => '0',
subsets => (
0 => empty_cachesubset,
1 => (
tag => (others => '0'),
word0 => (others => '0'),
word1 => (others => '0'),
dirty => '0',
valid => '0'
)
)
);
end package test;