如何在VHDL中表示数组文字?

时间:2012-11-07 15:43:13

标签: vhdl hdl modelsim

我有以下类型声明:

type cachesubset is record
                      tag     : std_logic_vector(3 downto 0);
                      word0   : w32;
                      word1   : w32;
                      dirty   : std_logic;
                      valid   : std_logic;
                    end record;

type    cacheset is record
                      lru : std_logic;
                      subsets: array(0 to 1) of cachesubset
                    end record;

我想定义空的缓存集常量:

constant 
empty_cachesubset : cachesubset := (
                                    tag   => "0000",
                                    word0 => "00000000000000000000000000000000",
                                    word1 => "00000000000000000000000000000000",
                                    dirty => '0',
                                    valid => '0'
                                   );

constant 
empty_cacheset    : cacheset    := (
                                    lru     => '0',
                                    subsets => ???
                                   );

重点是我不知道如何创建数组文字。

有些注意事项......

请不要介意我使用两个单独的字段来处理子集中的单词,而我可能对缓存集和子集执行相同的操作......重点是我还将为单词应用数组在一个子集......

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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;

答案 1 :(得分:0)

subsets => ???

最简单的方法是将数组中的每个条目设置为相同的值...

subsets => (others => empty_cachesubset);

正如另一个答案所示,您可以将单个元素设置为不同的值 - 然后使用“其他”来默认其余元素。