我是vhdl的初学者,对信号的掌握程度不高。
我的理解是你可以分配信号值等
signal<='100'
但您不必申报。这是对的吗?
另外,对于符号扩展ext_imme<=(31 downto 16=> imme(15)) & imme;
,为什么这会通过重复imme(15)
两次将16位扩展到32位?
答案 0 :(得分:2)
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位。
'&amp;' operation是连接运算符。在您的示例中,您将聚合的16位加到imme
的16位,以使总共32位。
此处使用聚合的其他一些示例:http://www.edaplayground.com/x/CQm。