User Tag List

Страница 83 из 273 ПерваяПервая ... 798081828384858687 ... ПоследняяПоследняя
Показано с 821 по 830 из 2727

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

  1. #821

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Возник вопрос по работе ВЕ-таймера.

    В предыдущих версиях CPP-модели reg.tve_div = 0 выполняется при каждой установке сигнала INIT, а в 4-й версии CPP-модели reg.tve_div = 0 выполняется только при установке сигнала DCLO.

    Это правильно ?
    Да, предделители ВЕ-таймера не сбрасываемые, как при включении установилась какая-то случайная фаза, так от нее и начинается непрерывный счет. Сброс в модели добавлен для предсказуемого моделирования, по аналогии с регистром счетчика. Еще есть предделитель таймера шины, 3-битный, его фаза тоже не сбрасываемая. То есть тайм-аут может наступать в интервале от 56 до 63 тактов процессора, мне это не понравилось и я сделал всегда точные 60.

  2. #822

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Да, предделители ВЕ-таймера не сбрасываемые.
    Предделитель - это reg.tve_pre

    reg.tve_div - это ( вроде ) что-то другое :

    Код:
    	BYTE	tve_pre;			//reg[6:0]		// clock prescaler counter
    	BYTE	tve_div;			//reg[5:0]		// timer clock divisor
    Что предделитель не сбрасывается по INIT - это понятно, но правильно ли, когда по INIT не сбрасывается и делитель ?

    - - - Добавлено - - -

    И ещё вопрос на ту же тему.

    В новой CPP-модели по INIT по-прежнему сбрасываются reg.tve_tclk4, reg.tve_tclk и reg.tve_edge - это правильно ?
    Последний раз редактировалось Patron; 01.12.2015 в 19:07.

  3. #823

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    reg.tve_div - это ( вроде ) что-то другое :
    Это две последовательные части одного большого общего предделителя. На топологии они тоже разнесены и имеют разную схемотехнику - первый каскад деления на 128 построен на затворных емкостях, а последующий 1/64 уже на честных триггерах. Поэтому оно так было перенесено в Верилог, но логический смысл у него - именно один большой общий предделитель. По INIT фаза ни у первого ни у второго каскада не сбрасывается. Названия каскадов "предделитель" и "делитель" условны.

    Цитата Сообщение от Patron Посмотреть сообщение
    В новой CPP-модели по INIT по-прежнему сбрасываются reg.tve_tclk4 и reg.tve_tclk - это правильно ?
    В смысле аутентичности не совсем правильно, но неприницпиально - по INIT сбрасывается регистр управления, счет прекращается, а фаза зависит о предделителя и сохраняется. Поэтому это просто моя перестраховка.

  4. #824

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    это просто моя перестраховка.
    Т.е. в реальном 1801ВМ1 reg.tve_tclk4, reg.tve_tclk и reg.tve_edge не сбрасываются по INIT, а reg.tve_intrq в реале сбрасывается по INIT ?

    ...

    И ещё вопрос - регистры R0 .. R6 у 1801ВМ1 в реале обнуляются при включении питания ?

  5. #825

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Т.е. в реальном 1801ВМ1 reg.tve_tclk4, reg.tve_tclk и reg.tve_edge не сбрасываются по INIT
    В реальном процессоре tve_tclk4 и tve_clk просто тупо отдельные разряды предделителя, tve_clk коммутируется мультиплексором с нужного. То есть - они не сбрасываются (потому что это предделитель). В модели они представляют отдельные триггеры, активный уровень длительностью только один такт (а не меандр), и формируются из фазы предделителя (запаздывают на такт, но фазу предделителя никто нигде программно не видит и "дорогая не узнает, какой у парня был конец"), поэтому их сброс по INIT не важен - к моменту счета или другого события они восстановятся из фазы предделителя, которая при INIT выживает.

    Детектор tve_edge в реальном процессоре сделан на затворном триггере, тактируется tclk4 и дает одиночный импульс по обнаружении фронта на входе SP. Поскольку по INIT сбрасывается разрешение детектора в TVE_CSR, то останов tve_tclk4 и сброс tve_edge никак не влияют на работу таймера. Ну пропустим фронт на SP и что? Таймер все равно остановлен и его работа заблокирована.

    Цитата Сообщение от Patron Посмотреть сообщение
    а reg.tve_intrq в реале сбрасывается по INIT ?
    Хм, это залет. Нет, не сбрасывается, очищается только по сбросу процессора. И проверялся же список сбрасываемых объектов по INIT, но для версии ВМ1А. Для ВМ1Г "бросил апельсин мимодумно в воду" В модуле таймера до ревизии 1.4с был только вход сброса по INIT, вот оно неверно и прицепилось.

    Цитата Сообщение от Patron Посмотреть сообщение
    И ещё вопрос - регистры R0 .. R6 у 1801ВМ1 в реале обнуляются при включении питания ?
    Нет, там случайные значения. Вот в РОНы, наверное, более правильно версию ядра вставить, потому что ВЕ-таймер не во всех процессорах есть (ВМ2/3), а с регистрами будет универсальный подход.

  6. #826

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Нет, там случайные значения.
    Надо бы выполнить на реальном 1801ВМ1 что-то вроде:

    Код:
    	MOV	R0, (PC)+
    	NOP
    	MOV	R1, (PC)+
    	NOP
    	MOV	R2, (PC)+
    	NOP
    	MOV	R3, (PC)+
    	NOP
    	MOV	R4, (PC)+
    	NOP
    	MOV	R5, (PC)+
    	NOP
    	MOV	R6, (PC)+
    	NOP
    
    	HALT
    И опубликовать результаты. Тогда станет понятно, какие биты превалируют в начальных значениях регистров - нулевые или единичные.


    Цитата Сообщение от Vslav Посмотреть сообщение
    Вот в РОНы, наверное, более правильно версию ядра вставить, потому что ВЕ-таймер не во всех процессорах есть (ВМ2/3), а с регистрами будет универсальный подход.
    Но обнулять 177706 и 177710 при включении питания тоже не стоит - лучше продублировать значения, получаемые при включении питания в этих регистрах у тестируемого процессора ( эти значения на удивление стабильны от включения к включению ).
    Последний раз редактировалось Patron; 01.12.2015 в 20:19.

  7. #826
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #827

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Надо бы выполнить на реальном 1801ВМ1 что-то вроде:
    Этот опыт проведу чуть позже, пока процессор при загрузке ПЛИС живет какое-то время своей жизнью (исполняет мусор с пустой шины), регистры разрушаются, надо разобраться.

    Цитата Сообщение от Patron Посмотреть сообщение
    Но обнулять 177706 и 177710 при включении питания тоже не стоит
    Сейчас было сделано по DCLO, это не совсем включение питания. Переделано на более честный вариант, при помощи блока initial теперь прескайлер и регистры счетчика и предела инициализируются один раз именно при включении питания ПЛИС. Оператор initial предназначен только для симуляции, для синтеза его использование очень не рекомендуется, и не всегда поддерживается синтезаторами, но для Altera/Xilinx - подходит. В принципе, определенное начальное значение нужно только для симуляции, в физической системе начальное значение этих триггеров не играет никакой роли, поэтому можно не переживать, если оно вдруг перестанет синтезироваться,
    скажем, для какой-нибудь ASIC.

    В реальной ПЛИС в качестве начального значения лучше использовать нули. Попробовал ненулевые значения (задал для пробы tve_count = 16'o157240; tve_limit = 16'o177321 и сразу получил использование ресурсов 1741 ячейку против 1705 и небольшое снижение граничной частоты (но в 100МГц пока вписалось). Полез разбираться, там интересно - триггеры альтеры имеют только входы асинхронного сброса, и у них нет входов установки. Эти входы сброса и используются для назначения начальных состояний при включении питания. Если нужно установить в единицу, то функция инвертируется, и триггер работает в инверсии. Все бы ничего, но tve_count - это счетчик, относительно длинный, ячейки там работают в специальном арифметическом режиме, при вкраплении инверсии отдельных триггеров (те которые мы установили в 1 при включении питания), оно синтезируется как произвольная логика, а не как стандартный счетчик (под которые в архитектуре ПЛИС есть специальные заточки), что приводит к ухудшению параметров.

    Цитата Сообщение от Patron Посмотреть сообщение
    - лучше продублировать значения, получаемые при включении питания в этих регистрах у тестируемого процессора ( эти значения на удивление стабильны от включения к включению ).
    Это прекрасно, но нельзя гарантировать стабильность при другой температуре или, скажем, при другой крутизне фронта напряжения питания. Ну и от партии выпуска наверняка зависисят как-то. Поэтому, в общем случае, эти значения undefined и ноль не является криминалом. Если использование ненулевого значения приводит к ухудшению синтезируемого результата, то лучше от этого воздержаться, имхо. В модель симуляции Async или эмулятор добавить ненулевые инициализации не проблема, в синтезируемые - лучше ненуна.

    Итого, подправил таймер (выложу после тестирования):
    - начальные значения прописываются в счетчик/предел один раз при включении питания ПЛИС (немного некошерный блок initial, но синтезируемость его непринципиальна, хотя на альтерке/ксайлинксе успешно синтезируется), и переживают сброс по DCLO или INIT как в реальном процессоре
    - фаза предделителя тоже теперь не портится сбросом процессора по DCLO или INIT, как в реальном процессоре

  9. #828

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    В модель симуляции Async или эмулятор добавить ненулевые инициализации не проблема, в синтезируемые - лучше ненуна
    Но что касается R0 .. R6 - там при включении питания всегда надо эмулировать аутентичные значения. А то получается, что большая часть из написанных мною ПЗУ-тестов 1801ВМ1 могут не работать на реальном процессоре, потому что они прямо рассчитаны на обнуление процессором R0 .. R6 при включении питания.

    Если бы в модели 1801ВМ1 не была изначально заложена столь критичная неадекватность - под сотню тестов не оказались бы под подозрением.

    - - - Добавлено - - -

    Цитата Сообщение от Vslav Посмотреть сообщение
    процессор при загрузке ПЛИС живет какое-то время своей жизнью (исполняет мусор с пустой шины)
    Т.е. процессор что-то делает до снятия DCLO ?
    Последний раз редактировалось Patron; 02.12.2015 в 13:50.

  10. #829

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Но что касается R0 .. R6 - там при включении питания всегда надо эмулировать аутентичные значения. А то получается, что большая часть из написанных мною ПЗУ-тестов 1801ВМ1 могут не работать на реальном процессоре, потому что они прямо рассчитаны на обнуление процессором R0 .. R6 при включении питания.
    Реальный процессор ничего не обнуляет, ни при включении питания, ни по сбросу. Его регистры - такие же обычные триггеры, без входов сброса/установки. При подаче питания принимают случайные значения, при сбросе сохраняют то что в них было. Начальная микропрограмма записывает 340 в PSW и записывает в PC <старший байт из @#177716>:8'o000 (подлежит уточнению как это сделано). Остальные регистры не обнуляются и никак не изменяются.

    V-модель задает нулевые значения регистров при включении питания, сброс регистры переживают, как и в реальном процессоре. Сделать ненулевые начальные в регистрах - несложно и не будет стоить ресурсов (для ВМ1, по крайней мере - оно там в блоке памяти находится, память прогружается при включении питания из конфигурации ПЛИС).

    Содержимое регистров по включению питания реального ВМ1Г:

    R0: 077577
    R1: 176777
    R2: 001010
    R3: 004042
    R4: 011113
    R5: 053756
    R6: 041202

    Реальный ВМ1А:

    R0: 133000
    R1: 100514
    R2: 100410
    R3: 040000
    R4: 100057
    R5: 060000
    R6: 000011

    Повторяемость хорошая, если нажать сброс там уже будут другие значения, и не всегда одни и те же - зависит от момента в каком месте программы настиг сброс по DCLO.

    Цитата Сообщение от Patron Посмотреть сообщение
    Т.е. процессор что-то делает до снятия DCLO ?
    Думаю дело не в процессоре, по DCLO автомат микропрограммы остановлен точно. У меня разрушалось ОЗУ с программой при перепрошивке ПЛИС, полагаю это проблема где-то в проекте, пока вставил блокировку записи до сброса и старта процессора. На всякий случай тесты выше проведены удерживая кнопку сброса при включении питания, то есть процессор гарантировано ничего не исполнял до отпускания кнопки и регистры сохранились.

  11. #830

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    При подаче питания принимают случайные значения, при сбросе сохраняют то что в них было.
    Чтобы адекватно эмулировать различия в поведении процессора при подаче питания и при снятии DCLO - есть смысл добавить в CPP-модель публичный метод C1801VM1::Power_ON(), где можно было бы выполнять начальные установки значений регистров, в зависимости от текущего типа процессора.

    - - - Добавлено - - -

    И в программную модель шины МПИ надо бы добавить линию DC5V, чтобы знать, когда в подключенных к шине эмуляторах осуществлять "включение питания".

Страница 83 из 273 ПерваяПервая ... 798081828384858687 ... ПоследняяПоследняя

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

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

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

Похожие темы

  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

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

Ваши права

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