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
我声明了两种类型的数组:
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