User Tag List

Показано с 1 по 10 из 2727

Тема: Цифровая археология: 1801 и все-все-все

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,807
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    149
    Поблагодарили
    80 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Похоже, я немного поторопился с оправданием текущей V-модели, так как не учёл, что после eval_all_p() и eval_all_n() выполняются ещё и assign_all().

    Если поставить отладочную печать после assign_all() :

    Код:
    /* Выполнение модели по переднему фронту ТЧ */
    void vm1_qbus::eval_p(int nClk, VM1_QBUS_INOUT *pINOUT)
    {
    	m_pINOUTPins = pINOUT;
    	m_nClk = nClk;
    
    InLog('p');
    	eval_all_p();	//выполняем все always для переднего фронта
    	assign_all();	//вычисляем все assignы
    OutLog('p');
    }
    
    /* Выполнение модели по заднему фронту ТЧ */
    void vm1_qbus::eval_n(int nClk, VM1_QBUS_INOUT *pINOUT)
    {
    	m_pINOUTPins = pINOUT;
    	m_nClk = nClk;
    
    InLog(' ');
    	eval_all_n();	//выполняем все always для заднего фронта
    	assign_all();	//вычисляем все assignы
    OutLog(' ');
    }

    То проблема с неправильным распределением сигналов по тактам встаёт во весь рост:


    Код:
       clk    ad      bsy wtbt sync  din dout rply
    p> 000019 000000    0    0    0    0    0    0
    p< 000019 000000    0    0    0    0    0    0
     > 000019 000000    0    0    0    0    0    0
     < 000019 177716    1    0    0    0    0    0
    p> 000020 177716    1    0    0    0    0    0
    p< 000020 177716    1    0    0    0    0    0
     > 000020 177716    1    0    0    0    0    0
     < 000020 177716    1    0    1    0    0    0
    p> 000021 177716    1    0    1    0    0    0
    p< 000021 000000    1    0    1    1    0    0
     > 000021 000000    1    0    1    1    0    0
     < 000021 000000    1    0    1    1    0    1


    Если же поменять местами выполнение eval и assign :

    Код:
    /* Выполнение модели по переднему фронту ТЧ */
    void vm1_qbus::eval_p(int nClk, VM1_QBUS_INOUT *pINOUT)
    {
    	m_pINOUTPins = pINOUT;
    	m_nClk = nClk;
    
    InLog('p');
    	assign_all();	//вычисляем все assignы
    	eval_all_p();	//выполняем все always для переднего фронта
    OutLog('p');
    }
    
    /* Выполнение модели по заднему фронту ТЧ */
    void vm1_qbus::eval_n(int nClk, VM1_QBUS_INOUT *pINOUT)
    {
    	m_pINOUTPins = pINOUT;
    	m_nClk = nClk;
    
    InLog(' ');
    	assign_all();	//вычисляем все assignы
    	eval_all_n();	//выполняем все always для заднего фронта
    OutLog(' ');
    }

    То распределение входных и выходных сигналов по фронтам становится идеальным:

    Код:
       clk    ad      bsy wtbt sync  din dout rply
    p> 000019 000000    0    0    0    0    0    0
    p< 000019 177716    1    0    0    0    0    0
     > 000019 177716    1    0    0    0    0    0
     < 000019 177716    1    0    0    0    0    0
    p> 000020 177716    1    0    0    0    0    0
    p< 000020 177716    1    0    1    0    0    0
     > 000020 177716    1    0    1    0    0    0
     < 000020 000000    1    0    1    1    0    0
    p> 000021 000000    1    0    1    1    0    0
    p< 000021 000000    1    0    1    1    0    1
     > 000021 000000    1    0    1    1    0    1
     < 000021 000000    1    0    1    1    0    1

    Но с синхронным адаптером процессор зависает в ходе выполнения первой же команды.


    Кстати, при вычислении assign перед eval сигнал SEL1 должен корректно устанавливаться даже в исходной версии V-модели, что дополнительно указывает на верность такого подхода.


    Чтобы воспроизвести проблему зависания модифицированной V-модели при работе с синхронным адаптером МПИ - достаточно убрать обработку сигналов шины между 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++;
    }
    Последний раз редактировалось Patron; 19.10.2015 в 16:54.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. Ответов: 7
    Последнее: 28.06.2014, 17:50
  2. Микросхемы МПК 580,1801,1810 и другие...
    от Alex_Vac в разделе Барахолка (архив)
    Ответов: 44
    Последнее: 07.04.2012, 08:03
  3. ЦИФРОВАЯ МУЗЫКА НА ZX
    от AAA в разделе Музыка
    Ответов: 98
    Последнее: 18.09.2011, 22:33
  4. Учебный стенд УМПК-1801
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 12.05.2010, 16:52
  5. Цифровая музыка от Вадима Ермеева
    от zxmike в разделе Музыка
    Ответов: 2
    Последнее: 06.08.2007, 23:13

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •