VHDL中“=>”和“<=”的区别

13

我总是会忘记,并且在教科书或互联网上搜索答案很困难。


我并不是指大于/小于或等于。 - Useless Intern
好的,谢谢大家。我已经标记了被接受的答案。在我的情境下,它是用于向量分配,但也可以用于其他事情。 - Useless Intern
这个回答解决了你的问题吗?VHDL:箭头的哪一侧是信号和端口=> - Henke
"=>和<="是词汇元素,被用作关系运算符在表达式中,也被用于语法产生式(<=用于信号赋值语句,=>用于case语句的备选项或子程序调用的关联元素、端口映射、通用映射或数组和记录聚合)。它们的使用在语法上是不同的。与Bryan Mealy的《数字Mclogic设计》不同,VHDL没有赋值运算符。赋值是在赋值语句和对象和接口声明中发现的基本操作。 - user16145658
4个回答

10

嗯,<= 是赋值语句。

signal <= A or B;

=>是用于case语句中的语法,例如: (摘自http://www.cs.umbc.edu/portal/help/VHDL/sequential.html)

=>是用于表示case语句的情况分支的语法。

case  my_val  is
  when 1 =>  -- This is kind of like how the : operator is used for switch in many languages
    a:=b;
  when 3 =>
    c:=d;
    do_it;
  when others =>
    null; -- do nothing
end case;

end case;

=> 也可用于数组赋值

myVector <= (1=>'1', OTHERS=>'0');  -- assigns ('0','1','0','0') to "myVector"

来源:http://www.eda.org/comp.lang.vhdl/html3/gloss_example.html


嗯,这很接近情景,但我是在处理寄存器时遇到的。应该先说明一下D: 即:others=>(others=>'0') - Useless Intern
您是在指向向量分配吗?我更新了我的回答。在处理向量时,您可以使用此操作符将值分配给向量的特定部分。 - Akron

8

记住何时使用=>和何时使用<=的方法是按照以下方式思考。

<=作为信号作为目标的分配(对于变量,它是:=)。

例如:

y <= a + b + c; --y is a signal
v := a + b +c; --v is a variable

=> 作为映射符号.

组件显式映射的示例(我的建议风格):

my_instance : my_component
port map(
  port1 => my_signal1
);

函数显式映射的示例(当参数不是平凡的时候很有用):

my_signal <= my_function(parameter1 => something1, parameter2 => something2);

数组显式映射的示例

type array_type is array(0 to 1) of std_logic_vector(7 downto 0);
constant my_array : array_type := (0 => x"AB", 1 => x"CD");

记录显式映射的示例

type record_type is record
a : natural;
b : std_logic_vector(2 downto 0);
end record;
constant my_record: record_type := (a => 0, b => "101");

优点是这种风格允许你按照自己选择的顺序进行映射(不一定是组件/函数定义中的顺序)。此外,在仅有一个项目的数组的特殊情况下,它是必需的。
最后,使用=>,关键字others允许映射所有尚未映射的其余内容。
分配数组的示例:
type array_type is array(0 to 5) of std_logic_vector(7 downto 0);
constant my_array : array_type := (0 => x"AB", 1 => x"CD", others => (others => '0'));

最后一个示例常量声明是数组类型,其值被分配为数组聚合的值,该聚合的关联元素通过关联列表提供值。 - user16145658

0

运算符<=被称为信号赋值运算符,以突出其真正的目的。信号赋值运算符指定了信号之间的关系。换句话说,信号赋值运算符左侧的信号依赖于运算符右侧的信号。

(来源:Bryan Mealy的Digital_Mclogic_Design,章节:信号赋值运算符:“<=”,第339页)

我找不到有关=>运算符的具体信息。


信号赋值是一种基本操作,没有信号赋值运算符,它在信号赋值语句中。<= 只是语法的一部分。请参阅 IEEE Std 1076。 - user16145658

0

<=表示赋值运算符,而=>用于case语句,例如:

case sel is
  when "01"   => line <= "1";
  when others => line <= "0";
end case

如果sel为"01",则将line设置为"1",否则设置为"0"。

=>也用于端口映射中的结构代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接