Vhdl信号声明用法

Vhdl signal declaration usage

我是vhdl的初学者,对信号掌握的不多

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

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

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.