是否可以使用星号在VHDL中声明变量?

时间:2013-06-17 15:51:41

标签: variables vhdl ram variable-declaration

这里有很多新的VHDL,所以我不完全确定这是否可行,但这里有:

在我的某些RAM测试代码中,我有2个8位std_logic_vector变量wdata_a_vwdata_b_v。这就是我当前设置所需的全部内容,但如果读写数据长度的比例发生变化,我将需要更多名称为wdata_*_v的变量。我正在尝试编写一般代码,以便它可以适用于任何数量的这些变量,但我不想在代码中声明其中的26个,而我可能只需要一些。

如果有办法声明一个如此变量的话会很好:

variable wdata_*_v : std_logic_vector (7 downto 0);

这将在幕后声明所有适合此框架的变量,以便我可以编写循环而不必担心耗尽变量。

如果有办法编写一个函数或程序等来完成这项工作,那就太棒了。

1 个答案:

答案 0 :(得分:1)

是的,你可以使用2d数组,食谱:

entity TestHelper is
  generic (n: natural range 2 to 255 := 8);
end TestHelper;

architecture behavioral of TestHelper is
  type array2d is array (n-1 downto 0) of std_logic_vector(7 downto 0);
begin
   process
     variable a : array2d;
   begin
       a(0)(0) := '0';
   end process;
end architecture behavioral;

编辑:现在使用它并为每个wdata_*_v创建类似的代码:

process
   variable wdata_v : array2d;
begin
   someLabel: for i in 0 to n-1 generate
       wdata_v(i)(0) := '0';
       x <= y and z;
       ...
   end generate;

   x <= '1';
   ...

   anotherLabel: for i in 1 to n generate
      ...
   end generate;

   ...
end process;