Vhdl 如何确定std#U logic#U向量中的连续(逻辑';1';)位

Vhdl 如何确定std#U logic#U向量中的连续(逻辑';1';)位,vhdl,Vhdl,我是一个相当新的vhdl用户,我正在尝试解决一个问题,这对我现在来说是困难的。我有两个std_逻辑_向量。第一个有5位,必须有(11111)。第二个有2040位,这是仲裁,我必须将2040位分成24个输出,这意味着每个输出必须有85位。首先,我必须使用一个小向量(5位)确定std_逻辑_向量中连续5位(11111)的位置,它有2040位。在确定2040位向量中是否有(11111)后,输出应该是“1”,它负责有(11111)的85位 概括 例如,我有24个输出,每个控制85位std_逻辑向量(20

我是一个相当新的vhdl用户,我正在尝试解决一个问题,这对我现在来说是困难的。我有两个std_逻辑_向量。第一个有5位,必须有(11111)。第二个有2040位,这是仲裁,我必须将2040位分成24个输出,这意味着每个输出必须有85位。首先,我必须使用一个小向量(5位)确定std_逻辑_向量中连续5位(11111)的位置,它有2040位。在确定2040位向量中是否有(11111)后,输出应该是“1”,它负责有(11111)的85位

概括

例如,我有24个输出,每个控制85位std_逻辑向量(2040位) 如果前85位中有11111,则输出1应为“1”
如果86至170位中存在11111,则输出2应为“1”
如果172至255位中有11111,则输出3应为“1”,依此类推

(11111)是最小值。输出逻辑“1”可能更大。有人知道吗??。。。和((如果2040位是大量的,那么我可以减少位的数量))


谢谢

我想你是想在第二个向量中搜索第一个向量,但是如果你知道它们都是“1”,那么and_reduce宏工作得很好。否则,将其替换为比较

一般原理是将其分成两个循环,外部用于每个输出结果,内部用于每个可能的5位组。该过程可以串行或并行进行,如下所示

如果81到86=“11111”没有模式匹配,则按照您描述问题的方式。如果返回1,则需要稍微更改数组边界

type slvArray is array (natural range <>) of standard_logic_vector;
subtype outputRange is natural range 0 to 23;
subtype partitionRange is natural range 0 to 84;

proc:process(clock)
    variable andResult : slvArray(outputRange)(partitionRange);
begin
    if rising_edge(clock) then
        for olc in outputRange loop
            for ilc in partitonRange'low to partitionRange'high-4 loop
               andResult(olc)(ilc) <= and_reduce(slv2(olc*partitionRange'length + ilc to olc*partitionRange'length+ ilc + 4);
            end loop;
            output(olc) <= or_reduce(andResult);
        end loop;
    end if;
end process;
类型slvArray是标准逻辑向量的数组(自然范围);
子类型输出范围为自然范围0到23;
子类型分区范围为自然范围0到84;
进程:进程(时钟)
变量和结果:slvArray(输出范围)(分区范围);
开始
如果上升沿(时钟),则
对于输出范围环路中的olc
对于partitionRange“低到partitionRange”高-4环路中的ilc

andResult(olc)(ilc)你想合成那个吗?你想要什么速度?非常感谢,我认为是这样。