С регистрами в условии чувствительности разобрался, даже вроде как реализовал рабочий вариант.
А вот с wireм в условии чувствительности возникли проблемы. Возьмём этот always
допустим, где-то между фронтами частоты, произошло событие "qbus_tena 1->0", при этом этот always сработал, выполнилась частьКод:always @(posedge pin_clk_n or negedge qbus_tena) begin if (~qbus_tena) qbus_timer <= 6'o00; else if (~qbus_tovf) qbus_timer <= qbus_timer + 6'o01; end
затем случилось событие "posedge pin_clk_n", но qbus_tena остался равен 0, должен ли при этом выполняться кодКод:qbus_timer <= 6'o00;
игнорируя условие "if (~qbus_tena)" или нет?Код:if (~qbus_tovf) qbus_timer <= qbus_timer + 6'o01;
У меня работает только такой вариант:
т.е. код по событию "posedge pin_clk_n" выполняется только если qbus_tena == 1, а иначе, если закомментировать строку "if (wire.qbus_tena)" перестаёт работать команда RESET, т.е. она становится бесконечной, и вызывает ошибку зависания на шине.Код:void C1801VM1::eval_all_n() { ... if (wire.qbus_tena) { if (!snap_reg.qbus_tovf) { reg.qbus_timer = (snap_reg.qbus_timer + 1) & 077; } } ... }




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

