【问题标题】:Multidimensional array partial assignment in VHDLVHDL中的多维数组部分赋值
【发布时间】:2020-01-13 11:39:36
【问题描述】:

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

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 都不是多维数组类型,它们只有一个索引(IEEE Std 1076-2008 5.3.2.1)没有显示提供对象类的声明(6.5.6.3)X2 和 X3 是信号的目标赋值语句 (10.5) - 它们是类信号而不是类变量,信号已更新并具有历史记录(附件 I 词汇表),变量赋值是即时的 (10.6)。多维数组和变量赋值标签不适合您的 VHDL sn-ps(不包含 minimal reproducible example,也缺少实际错误)。

标签: arrays multidimensional-array vhdl variable-assignment


【解决方案1】:

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

X2 &lt;= 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多