例如,相比之下,在Verilog中,存在“逻辑与”和“逻辑与”:
//Verilog
x = a && b; //logical "and"
y = a || b; //logical "or"
y = !a; //logical "not"
,然后是“按位与”,“按位或”和“按位异或”:
//Verilog
x = a & b; //bitwise 'and'
y = a | b; //bitwise 'or'
z = a ^ b; //bitwise 'xor'
q = ~a; //bitwise 'not' or negate
我的问题是,对于VHDL,将其应用于std_logic_vector,无符号,有符号或bit_vector时,是“异或”逻辑或按位运算的:
-- VHDL
library ieee;
use ieee.std_logic_1164.all;
entity top is
port(y :out std_logic_vector(7 downto 0));
end entity;
architecture rtl of top is
signal a: std_logic_vector(7 downto 0) := X"11";
signal b: std_logic_vector(7 downto 0) := X"F0";
begin
y = a xor b; --bitwise or logical?
y = a and b; --bitwise or logical?
y = a or b; --bitwise or logical?
y = not a; --bitwise or logical?
end architecture;
答案 0 :(得分:4)
“逻辑”运算符仅是(数学上错误的)定义的缩写,其中任何非零均假定为“ true”,而零值则假定为“ false”。这样的
(a != 0) & (b != 0)
缩写为
a && b
和
(a != 0) | (b != 0)
缩写为
a || b
在VHDL中,您必须编写完整的表达式。
(a /= "0000") or (b /= "0000")
(假设您正在与4位bit_vector
进行比较)
VHDL 2008使得此操作不再那么冗长。它具有对向量进行运算的二进制归约运算符,方法是将运算符应用于向量的所有元素之间,即
(or "0001")
减少为“ 1”和
(or "0000")
减少为“ 0”。因此,在VHDL 2008中,您可以编写
(or a) or (or b)
(or a) and (or b)
代替“逻辑”运算符。