【问题标题】:Vhdl signal declaration usageVhdl 信号声明用法
【发布时间】:2016-03-31 09:25:15
【问题描述】:

我是 vhdl 的初学者,对信号了解不多。

我的理解是您可以分配信号值,例如 signal<='100' 但您不必声明它。对吗?

另外,对于符号扩展 ext_imme<=(31 downto 16=> imme(15)) & imme;,为什么通过重复 imme(15) 两次将 16 位扩展到 32 位?

【问题讨论】:

  • 您的语法不正确(some_signal <= "100"; signal 是保留字),也不是您的假设。一个命名的信号总是被声明的,这个名字可能是一个隐式信号名、切片名或索引名的前缀。对象是一个类型和一个值,由它的声明名称指定。对ext_imme 的信号分配右侧的表达式包含一个聚合,该聚合分配一个长度为 15 的数组,其中每个元素的值都为 imme(15),并将该数组与 imme 连接起来(范围大概是 15 到 0),产生一个 32 长的数组值。显示声明。

标签: vhdl


【解决方案1】:

1) 你不能在没有声明的情况下分配信号值,例如signal<='100'。你说的不对。

VHDL 不喜欢惊喜。一切都必须在使用前声明。

因此,您必须声明一个信号(在architecture声明区域,即在architecturebegin 之间):

architecture SOME_NAME of SOME_OTHER_NAME is
  -- declare signals (and other things) here, eg
  signal SOME_SIGNAL_NAME : std_logic;  -- or some other type
begin

您也可以在声明信号时对其进行初始化,但如果您打算合成代码,我会非常小心,例如:

  signal SOME_SIGNAL_NAME : std_logic := '0';  

2) 这个ext_imme<=(31 downto 16=> imme(15)) & imme聚合连接 的示例。聚合是分配给数组元素的一种方式。串联是一种将两个数组连接在一起形成更大数组的方法。

在您的示例中,这是聚合:(31 downto 16=> imme(15))。在这里,您将位 31 降低到 16 等于 imme 的位 15。这为您提供了 16 位,全部等于 imme 的第 15 位。

“&”操作是连接运算符。在您的示例中,您将聚合的 16 位连接到 imme 的 16 位,总共 32 位。

这里有一些使用聚合的其他示例:http://www.edaplayground.com/x/CQm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多