在VHDL中,“异或”是按位还是逻辑的?

时间:2019-08-21 16:32:39

标签: vhdl

例如,相比之下,在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;

1 个答案:

答案 0 :(得分:4)

Verilog(和C)中的

“逻辑”运算符仅是(数学上错误的)定义的缩写,其中任何非零均假定为“ 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)

代替“逻辑”运算符。