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
的 声明区域 ,即 architecture
和 begin
之间:
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.
我是vhdl的初学者,对信号掌握的不多
我的理解是您可以分配信号值,例如
signal<='100'
但您不必申报。对吗?
此外,对于符号扩展 ext_imme<=(31 downto 16=> imme(15)) & imme;
为什么这可以通过重复 imme(15)
两次来将 16 位扩展到 32 位?
1) 您不能在未声明的情况下分配信号值,例如 signal<='100'
。你错了。
VHDL 不喜欢惊喜。 在使用之前必须声明所有内容。
因此,您必须声明一个信号(在 architecture
的 声明区域 ,即 architecture
和 begin
之间:
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.