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