Я хочу разработать сниффер IIC на VHDL, и я борюсь с очень простым моментом.
Чтобы сохранить его «последовательным», я хочу установить флаг после каждой части, которая будет выполняться сущностью.
Теперь я хочу установить флаг в состоянии START (SCL = HIGH & RISING_EDGE на SDA). Этот флаг должен быть сброшен в состоянии STOP (SCL = HIGH & FALLING_EDGE на SDA) и когда я нажимаю кнопку сброса.
Теперь у меня проблема, что я не могу установить флаг командой START и сбросить командой STOP.
Как мне подойти, чтобы получить флаг на этот период?
entity scltest is
port( scl, sda: in std_logic;
scled, sdaled, flag: out std_logic
);
end scltest;
architecture test of scltest is
begin
scled <= scl;
sdaled <= sda;
process(sda)
begin
if (scl = '1' AND rising_edge(sda)) then
flag <= '1';
else
if (scl = '1' AND falling_edge(sda)) then
flag <= '0';
end if;
end if;
end process;
end test;
Этот код не работает, потому что: «Ошибка (10820): ошибка списка соединений в scltest.vhd (18): невозможно определить регистр для флага, поскольку его поведение зависит от границ нескольких отдельных часов».
Я понимаю, почему это не сработает, но я не могу придумать конструкцию, которая будет работать и даст мне ту же функцию.
Заранее спасибо.