我正在尝试创建动态大小的嵌套生成语句,以便非固件人员可以更改常量的值。
我想创建类似 C++ 向量的东西,它在编译时将具有定义的大小并包含整数常量。例如,我想要一个看起来像这样的 2D 向量:
a = < <1,2> , <1,3> , <3,4,5> >
所以我可以这样访问它:
a[0,0] = 5
a[1,0] = 3
a[2,1] = 1
到目前为止我已经试过了:
type int_array is array (integer range<>) of integer;
type int_array_array is array (integer range<>, integer range<>) of integer;
constant nOuter : positive := 2;
constant nInner : int_array := (2 , 2 , 3);
constant vals : int_array_array(nOuter - 1 downto 0 , ???) := ( (1,2) , (1,3) , (3,4,5) );
我不完全确定这将如何编写,或者这是否可能?
然后我的想法是可以像这样创建动态大小的 block :
nOuters: for i in 0 to nOuters -1 generate:
nInners: for j in 0 to nInner(i) generate:
nVals: for inner k in 0 to vals(i,j) -1 generate:
最佳答案
我糟糕的解决方案,我添加了另一个常量:
constant nMaxInner : positive := 3;
constant vals : int_array_array(nOuter - 1 downto 0 , nMaxInner - 1 downto 0) := ( (0,1,2) , (0,1,3) , (3,4,5) );
但这并不优雅。
关于arrays - 创建一个不受约束的非对称数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292784/