Относительно порядка вычисления 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-фронт :
Поэтому V-модель начинает давать нормальное распределение сигналов шины по номерам тактов только при смене местами вызовов eval_p и eval_n - только тогда SYNC и DIN устанавливаются на переднем и заднем фронте одного и того же тактового импульса.





Ответить с цитированием
