&引用;当别人;VHDL case语句中的行?

&引用;当别人;VHDL case语句中的行?,vhdl,Vhdl,我是一名学习VHDL的学生,我的教科书中的示例代码在几个地方显示了与下面类似的行 when "000" => tmp_result <= a and b; when "001" => tmp_result <= a or b; ... when others => tmp_result <= (others => '0'); 当“000”=>tmp_结果tmp_结果tmp_结果“0”时; 我发现VHDL的语法总体上非常不直观,但我真的一点也不“理解”

我是一名学习VHDL的学生,我的教科书中的示例代码在几个地方显示了与下面类似的行

when "000" => tmp_result <= a and b;
when "001" => tmp_result <= a or b;
...
when others => tmp_result <= (others => '0');
当“000”=>tmp_结果tmp_结果tmp_结果“0”时;
我发现VHDL的语法总体上非常不直观,但我真的一点也不“理解”这一行

我真的很困惑,为什么上面这句话不仅仅是:

when others => tmp_result <= '0'

when others=>tmp_result这是因为
tmp_result
被定义为std_逻辑向量(而不是简单的std_逻辑)


tmp_结果这是因为
tmp_结果
被定义为std_逻辑向量(而不是简单的std_逻辑)


tmp_结果
STD_逻辑_向量
具有固定大小。因此,当您为它赋值时,您可以使用

(others => '0')
表示希望将剩余位设置为
0
。由于变量具有固定大小,编译器将知道要设置多少位。你可以把这句话和其他一些说法混在一起,例如

tmp_result <= (1=>'1', OTHERS => '0');

你看,我们可能每次都要更改大小,这就是为什么我们要定义一个
generic
变量。使用
(其他=>'0')
将其设置为
0
将使我们不必再次更改整个程序。

STD\u LOGIC\u VECTOR
具有固定大小。因此,当您为它赋值时,您可以使用

(others => '0')
表示希望将剩余位设置为
0
。由于变量具有固定大小,编译器将知道要设置多少位。你可以把这句话和其他一些说法混在一起,例如

tmp_result <= (1=>'1', OTHERS => '0');
你看,我们可能每次都要更改大小,这就是为什么我们要定义一个
generic
变量。使用
(其他=>'0')
将其设置为
0
将使我们不必再次更改整个程序