Vector 带32位向量的VHDL或逻辑 zero

Vector 带32位向量的VHDL或逻辑 zero,vector,components,vhdl,bit,Vector,Components,Vhdl,Bit,我假设您使用的是std\u逻辑/std\u逻辑向量类型。 然后您可以使用ieee.std\u logic\u misc中的或

我假设您使用的是
std\u逻辑
/
std\u逻辑向量
类型。 然后您可以使用ieee.std\u logic\u misc中的

如果您刚开始使用VHDL,一个一般提示是不要忘记函数和过程。与Verilog(没有SystemVerilog)不同,VHDL很好地支持编写干净的高级代码,甚至支持使用函数和过程进行合成。如果你正在做一些重复的事情,这是一个明确的信号,它应该被包装在一个函数/过程中。在本例中,已经有一个标准函数可以使用


您可能还需要考虑在阶段之间流水线化或减少和插入触发器。可能您在示例中使用的32位缩减在FPGA设备中仍应运行合理的高频率,但如果您要使用更多位或以真正的高频率为目标,您可能希望使用or树,其中每个管道阶段的or不超过6-8位。不过,您仍然可以在中间操作中重复使用or_reduce函数。

您可以使用vhdl 2008版来实现它

VHDL-2008定义了一元运算符,如下所示:

function or_reduce(vector : std_logic_vector) return std_logic is
    variable result : std_logic := '0';
begin
    for i in vector'range loop
        result := result or vector(i);
    end loop
    return result;
end function;

outp您有想要它看起来像什么的例子吗?你试过的东西呢?我只想要同样的逻辑,但要短一点。我试过这个:零我想这是你想要的,但对于or运算符。这取决于结果_i的声明方式,以及您是否拥有符合IEEE Std 1076-2008的综合工具。如果是后者,则只有一个参数或运算符可用(零)。您确实意识到,您尝试的较短的备选方案会产生完全相反的效果,不是吗?
library ieee;
use ieee.std_logic_misc.or_reduce;
...
zero <= or_reduce(result_i);
function or_reduce(vector : std_logic_vector) return std_logic is
    variable result : std_logic := '0';
begin
    for i in vector'range loop
        result := result or vector(i);
    end loop
    return result;
end function;
outp <= and "11011";

outp <= xor "11011";
zero <= or result_i;