这里有很多新的VHDL,所以我不完全确定这是否可行,但这里有:
在我的某些RAM测试代码中,我有2个8位std_logic_vector变量wdata_a_v
和wdata_b_v
。这就是我当前设置所需的全部内容,但如果读写数据长度的比例发生变化,我将需要更多名称为wdata_*_v
的变量。我正在尝试编写一般代码,以便它可以适用于任何数量的这些变量,但我不想在代码中声明其中的26个,而我可能只需要一些。
如果有办法声明一个如此变量的话会很好:
variable wdata_*_v : std_logic_vector (7 downto 0);
这将在幕后声明所有适合此框架的变量,以便我可以编写循环而不必担心耗尽变量。
如果有办法编写一个函数或程序等来完成这项工作,那就太棒了。
答案 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;