Подсчитайте последовательность «01» во входном сигнале - PullRequest
0 голосов
/ 08 февраля 2019

Моя цель - подсчитать количество последовательностей "01" в массиве iaI.Я попробовал следующий код, но он не работает, как я предполагал.

entity prob35 is
port (
    iaI : in   std_logic_vector (11 downto 0);
    oaO : out  std_logic_vector (2 downto 0)
);
end prob35;

architecture Behavioral of prob35 is
    signal counter : integer := 0;
begin
process(iaI)
begin
    for i in 1 to 11 loop
        if (iaI(i-1)='1' and iaI(i)='0') then
            counter<=counter+1;
        end if;
    end loop;
    oaO<=conv_std_logic_vector(counter,oaO'length);
end process;

end Behavioral;

1 Ответ

0 голосов
/ 08 февраля 2019

Существует значительная разница между сигналами и переменными в VHDL.В то время как переменная немедленно принимает значение присваивания, сигнал в последовательном коде (например, процесс) используется для создания триггеров, которые по своей сути не сразу принимают значение своего присваивания.Вы должны использовать переменную для достижения желаемой функциональности здесь.

entity prob35 is
port (
    iaI : in   std_logic_vector (11 downto 0);
    oaO : out  std_logic_vector (2 downto 0)
);
end prob35;

architecture Behavioral of prob35 is
begin
process(iaI)
    variable counter : unsigned(2 downto 0) := "000";
begin
    counter := "000";
    for i in 1 to 11 loop
        if (iaI(i-1)='1' and iaI(i)='0') then
            counter := counter + 1;
        end if;
    end loop;
    oaO <= std_logic_vector(counter);
end process;

end Behavioral;
...