VHDL:将向量的位进行或运算

电器工程 视频文件
2022-01-08 04:56:58

我想将向量的位 OR 在一起。因此,假设我有一个称为向量的向量example(23 downto 0),并且我想将所有位 OR 到另一个向量中,有没有什么方法可以做到这一点而不涉及 go example(0) or example(1) or ...example(23)

2个回答

or_reduce是你想要的,它在std_logic_misc. FPGA 的 A 和 X 均支持。

Verilog 有一个方便的“归约运算符”,它可以完全满足您的要求:|example[23:0]给出对example向量的所有位进行 OR 运算的结果。

不幸的是,VHDL 没有这个运算符。不过根据comp.lang.vhdl FAQ

没有预定义的 VHDL 运算符来对向量的所有位执行归约操作(例如,“或”向量的所有位)。但是,归约运算符可以很容易地实现:

[跳过不处理“X”和“Z”值的示例]

    function or_reduce( V: std_logic_vector )
                return std_ulogic is
      variable result: std_ulogic;
    begin
      for i in V'range loop
        if i = V'left then
          result := V(i);
        else
          result := result OR V(i);
        end if;
        exit when result = '1';
      end loop;
      return result;
    end or_reduce;
    ...
    b <= or_reduce( b_vec );