VHDL 中的多维数组部分赋值

Multidimensional array partial assignment in VHDL

我声明了两种类型的数组:

typeA is array(0 to 15) of std_logic_vector(15 downto 0);
typeB is array(0 to 7) of std_logic_vector(15 downto 0);

然后我实例化了3个信号:

X1 : typeA;
X2, X3 : typeB;

我想将 X1 的前 8 个向量分配给 X2,其余的分配给 X2:

X2 <= X1(0 to 7);
X3 <= X1(8 to 15);

但是我收到一个错误,因为赋值的右侧部分与左侧部分不同,但尺寸应该匹配。正确的做法是什么?

问题在于 TypeA 和 TypeB 是不同(虽然相似)的类型,因此您不能直接将一个分配给另一个。因为它们相似(它们都是相同子类型的数组),所以您可以从一种类型转换为另一种类型。

X2 <= typeB(X1(0 to 7));

一个更简单的解决方法可能只是将类型声明为不受约束,并在声明中对其进行约束:

type slv16_array_t is array(natural range <>) of std_logic_vector(15 downto 0);

X1: slv16_array_t(0 to 15);
X2: slv16_array_t(0 to 7);

X2 <= X1(0 to 7); -- these are the same type already, so can be assigned to each other without a cast