У меня проблема с предполагаемой блокировкой моего кода.Я знаю, что защелка обычно возникает из-за того, что не учитываются все ситуации для выхода, но в этой ситуации я не видел ни одного онлайн-примера, который бы охватывал это.У меня есть вложенный оператор if-else в операторе процесса, как показано ниже.Просто, чтобы быстро объяснить, что я делаю, после инициализации сброса, reset_cnt достигнет высокого уровня и запустит процесс подсчета для sck до 24 циклов и повторится, и вывод будет увеличиваться.
clock_counter: process(reset, sck, counter, output, reset_cnt, reset_done)
begin
if (reset = '1') then
counter <= 0;
output <= 1;
reset_cnt <= 1;
reset_done <= '1';
else
reset_done <= '1'; -- added to fix
reset_cnt <= 1; -- added to fix
output <= output; -- added to fix (didn't work)
if (reset_cnt AND counter = 24) then
counter <= 0;
output <= output + 1;
elsif (rising_edge(sck)) then
counter <= counter + 1;
end if;
end if;
end process;
Изначально у меня была проблема с 3 защелками: reset_done, reset_cnt и output.Я добавил несколько строк кода (с комментариями рядом) и смог удалить защелки для reset_done и reset_cnt.Похоже, я все еще получаю вывод защелки, потому что я использую его во вложенном операторе If.Я думал:
output <= output;
может сработать, но я думаю, что нет.Кто-нибудь знает как починить такую защелку?Я должен отметить, что я попытался разделить это на 2 оператора процесса и превратить его в оператор случая, но это тоже не сработало.Любая помощь или совет высоко ценится!