Относительно порядка вычисления eval_p и eval_n.
В текущей V-модели считается, что передним фронтом ТЧ является P-фронт, а задним N-фронт, и поэтому сначала вычисляется eval_p, а затем eval_n.
Код:void tboard::maincycle()
{
m_pCPU->eval_p(m_nClk, m_pMPI); //отработаем передний фронт ТЧ
m_pMemory->eval(m_pMPI);
m_pIRPS->eval(m_pMPI);
#ifdef OUT_VM1PIN_DBG_LOG
OutLog();
#endif
m_pCPU->eval_n(m_nClk, m_pMPI); //отработаем задний фронт ТЧ
m_pMemory->eval(m_pMPI);
m_pIRPS->eval(m_pMPI);
#ifdef OUT_VM1PIN_DBG_LOG
OutLog();
#endif
m_nClk++;
}
Но если внимательно разобраться с осциллограммой - становится ясно, что на самом деле всё наоборот и передним фронтом ТЧ является переход CLK из высокого уровня в низкий - т.е. N-фронт :
http://pic.pdp-11.ru/images/sel1.png
Поэтому V-модель начинает давать нормальное распределение сигналов шины по номерам тактов только при смене местами вызовов eval_p и eval_n - только тогда SYNC и DIN устанавливаются на переднем и заднем фронте одного и того же тактового импульса.

