vector - 具有 32 位向量的 VHDL OR 逻辑

标签 vector components vhdl bit

zero <= result_i(31) OR result_i(30) OR result_i(29) OR result_i(28)
        OR result_i(27) OR result_i(26) OR result_i(25) OR result_i(24)
        OR result_i(23) OR result_i(22) OR result_i(21) OR result_i(20)
        OR result_i(19) OR result_i(18) OR result_i(17) OR result_i(16)
        OR result_i(15) OR result_i(14) OR result_i(13) OR result_i(12)
        OR result_i(11) OR result_i(10) OR result_i(9) OR result_i(8)
        OR result_i(7) OR result_i(6) OR result_i(5) OR result_i(4)
        OR result_i(3) OR result_i(2) OR result_i(1) OR result_i(0);

我怎样才能缩短它?

最佳答案

我假设您使用的是 std_logic/std_logic_vector 类型。 然后您可以使用 ieee.std_logic_misc 中的 or_reduce

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;

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

您可能还想考虑流水线化 or-reduction 并在阶段之间插入触发器。也许您在示例中使用的 32 位缩减仍然应该在 FPGA 设备中运行相当高的频率,但是如果您要使用更多位或以非常高的频率为目标,您可能想要使用 or-tree 不再超过 6-8 位在每个流水线阶段进行或运算。不过,您仍然可以为中间操作重新使用 or_reduce 函数。

关于vector - 具有 32 位向量的 VHDL OR 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825642/

相关文章:

c# - 注册(许可)您自己的组件有多重要?

VHDL:组件端口映射中的索引

port - VHDL - 端口映射 - 将组件的不同端口映射到不同的实体

C++ vector 内存访问问题

r - 将字母向量拆分为大小相等的向量

c++ - LLDB C++调试

javascript - 在 Angular 中更改路由事件的数据

wpf - 触摸界面中的 Slider\ScrollViewer 无法正常工作

c++ - 不使用 <algorithm> 从 2 个 vector (或列表)中删除相似元素

python - 如何在 Cocotb 中指定记分板的比较功能?