User Tag List

Страница 62 из 81 ПерваяПервая ... 585960616263646566 ... ПоследняяПоследняя
Показано с 611 по 620 из 803

Тема: Реверс-инжиниринг Z80

  1. #611

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Осмелюсь предположить, как и в случае с ВМ80, регистр А и тем более флаги - особые.
    В случае Z80 как раз AF хранится в общем регистровом файле, а флаги кэшируются непосредственно перед выполнением очередной команды.
    Но думаю, что задумка была именно такая, подальше разнести момент обмена AF (такт T1) и загрузка AF по умолчанию в начале следующей команды (такт T2).
    Думаю, если перенести EX AF,AF' с T1 на T2, все работало бы так же прекрасно.
    Впрочем, если хотелось так заранее все сделать, никто не мешал авторам и EXX сделать в T1, а не T2.
    В общем, как сделали, так и сделали)

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

    Кстати, поговорил с ребятами с эмураши (nukeykt), они рассказали, как реверсили Z80.
    Сперва NMOS в августе 2022, затем сейчас CMOS уже почти сделали (примерно месяц на реверс процессора!).
    Схема на уровне вентилей перегонялась сперва на Си, затем на Verilog.
    Т.к. версия оставалась асинхронной, то делался дополнительный мастер-клок (MCLK), в несколько раз превышающий CLK, и с помощью него эмулировались латчи примерно так, как я уже писал выше:

    Код:
    always @(posedge MCLK)
    begin
      if (CLK)
        x <= a;
    end
    Плюс этого подхода, что схема фактически оставалась оригинальной, без вмешательств. Меньше поле для косяков, когда ручками переделываешь на синхронный дизайн.
    Минус - завышенная тактовая, что приводит к дополнительной трате ресурсов.
    Кроме того, такой подход не требует детального понимания работы схемы. Фактически это клонирование и симуляция.
    Вот так понял я из общения с ними.

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

    Я люблю максимально все оптимизировать, поэтому без глобального разбирательства в принципах работы схемы и переделывания на синхронный дизайн исходя из этого не обойтись.
    Но это да, значительно затратнее по времени и всему остальному.
    Последний раз редактировалось Titus; 27.10.2024 в 12:50.

    Эти 3 пользователя(ей) поблагодарили Titus за это полезное сообщение:

    AlexG(27.10.2024), Reobne(02.11.2024), Копейкин(08.11.2024)

  2. #612

    Регистрация
    12.12.2007
    Адрес
    Жлобин
    Сообщений
    47
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    79
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Плюс этого подхода, что схема фактически оставалась оригинальной, без вмешательств. Меньше поле для косяков, когда ручками переделываешь на синхронный дизайн.
    Минус - завышенная тактовая, что приводит к дополнительной трате ресурсов.
    Кроме того, такой подход не требует детального понимания работы схемы. Фактически это клонирование и симуляция.
    Вот так понял я из общения с ними.

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

    Я люблю максимально все оптимизировать, поэтому без глобального разбирательства в принципах работы схемы и переделывания на синхронный дизайн исходя из этого не обойтись.
    Но это да, значительно затратнее по времени и всему остальному.
    Мои все проекты на аналогичном принципе работают, по поводу ресурсов особо не парюсь, т.к. даже камни с 150к ячеек вполне себе доступны на Али, не говоря уже о 6-ти или 10-ти тысячных Циклонах IV .
    Так например те же ядра процессоров Денди (PPU + APU) можно вполне себе вместить в Циклон II с 5к ячеек. Но при оптимизации дебаг будет заметно веселее, так как мест, где можно косякнуть будет заметно больше.
    Единственное, что я оптимизировал, так это инверсную логику.

  3. #613

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от and1981 Посмотреть сообщение
    Мои все проекты на аналогичном принципе работают, по поводу ресурсов особо не парюсь, т.к. даже камни с 150к ячеек вполне себе доступны
    Вопрос не только в количестве ячеек, но и в максимальной рабочей скорости симулируемого устройства.

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

    Цитата Сообщение от and1981 Посмотреть сообщение
    Но при оптимизации дебаг будет заметно веселее, так как мест, где можно косякнуть будет заметно больше.
    Да, тут безусловно все так)

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

    Цитата Сообщение от and1981 Посмотреть сообщение
    Мои все проекты на аналогичном принципе работают
    Какие у тебя проекты?

  4. #614

    Регистрация
    12.12.2007
    Адрес
    Жлобин
    Сообщений
    47
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    79
    Поблагодарили
    40 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Вопрос не только в количестве ячеек, но и в максимальной рабочей скорости симулируемого устройства.

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


    Да, тут безусловно все так)

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


    Какие у тебя проекты?
    ядро 6502 и чипы APU и PPU NES

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

    Этот пользователь поблагодарил and1981 за это полезное сообщение:

    Titus(27.10.2024)

  5. #615

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от and1981 Посмотреть сообщение
    Пока скорости хватает, ибо старым железякам оно не сильно чтобы нужно. А более новые чипы уже все и так оптимизированы еще на стадии проектирования и изготовления.
    Я согласен, что это ускоряет процесс разработки и уменьшает число багов.
    Но мой характер оптимизатора или перфекциониста, не знаю, что тут играет роль, заставляет всегда стремиться к оптимизации, если я вижу ее возможной.
    Хочется из любой вещи слепить конфетку. Чтобы смотреть и любоваться)
    Хотя это человекоресурсоемко, и далеко не на все хватает усидчивости)
    Поэтому и получаются эмуляторы без интерфейсов типа EmuStudio. Типа, хотел, чтобы еще на тех старых PC (2005 года) все летало синхронно с разверткой, чтобы поиграться в любимые игры детства. Сделал, поигрался, удовлетворил потребность, и все.

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

    Кстати, наверное это вопрос к @Alex_G, можно ли в Vivado сделать так, чтобы участок памяти ПЛИС отображался в виде какой-то графики в окне? Т.е. визуальное наблюдение за битовым массивом в виде картинки хочу.

  6. #616

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Реализовал синхронный модуль специального ресета.
    Некоторая проблема в перевода в синхронный дизайн была в том, что в основе модуля асинхронный RS-триггер, который управлялся как CLK, так и /CLK-синхронными сигналами.
    Но в итоге все же перевел в полностью синхронный дизайн, и все диаграммы полностью совпали с теоретическими

    reset - внешний сигнал сброса, не синхронный с CLK.
    reset_c - тот же сигнал, но синхронизированный с CLK.
    res - внутренний сигнал сброса, синхронный с /CLK (при специальном ресете так и остался в нуле)
    spec_res - сигнал специального ресета. Активизировался, т.к. короткий сигнал внешнего сброса пришел во время такта M1.T2. И длится сигнал до следующего машинного цикла, такта М1.Т2.


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

  8. #617

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    974
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    "можно ли в Vivado сделать так, чтобы участок памяти ПЛИС отображался в виде какой-то графики в окне?"

    Теоретически - да (как бы в теории сия фишка была придумана для ускорения моделирования, и вряд ли для работы с графикой . хотя чем чОрт не шутит...).
    Практически:
    - это требуется exp lvl 50+
    - знание Си (CLANG /gcc) (НЕ С++ ?)
    - знание api wimdows (наверно уровня win32 - простейшие функции по работе с окнами)
    - ключевые слова DPI. (для начала почитать UG900)
    - возможно потребуется применение каких либо особенностей systemverilog (там вагон и тележка функционала применительно к тестированию).

    Выглядит как DLLка. с точки зрения симулятора оно видится как реализация некоторого "модуля" (только не на языке верилог , а на Си - заранее скомпилированного)

    ПС: такой потребности у меня ещё не было - обходился "модулями на верилоге" (для эмуляции/моделирования внешних устройств)
    ПС:ПС: возможно существуют и другие возможности...
    вот что первое на гуглил
    https://www.doulos.com/knowhow/syste...-dpi-tutorial/

    Вот пример на русском для старой версии вивады
    https://fpga-systems.ru/publ/xilinx/...ivado/8-1-0-49
    Последний раз редактировалось AlexG; 29.10.2024 в 21:45.

    Этот пользователь поблагодарил AlexG за это полезное сообщение:

    Titus(29.10.2024)

  9. #618

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Вопрос задавал на емураше, но чего-то однозначного ответа не получил:

    У меня такая дилемма, как реализовать банк регистров.
    Или же генерить адрес регистра, с которым я работаю (0..13), и тогда удобнее использовать массив регистров reg [7..0] reg_block [16].
    Либо же генерить 14 линий, и каждая линия выбирает свой регистр reg_AF, или reg_HL и т.д. Но тогда им на выходе нужно много логики, чтобы все выходы 14 8-битных регистров обьеденить в одну шину. Если бы реализовал на базе массива регистров, то это бы не понадобилось, т.к. там выбирается по адресу.
    Поэтому и спрашиваю, что будет быстрее работать?

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

    И еще, я спрашивал, как сделать так, чтобы компилятор не превращал многовходовый элемент типа 10-ИЛИ в кучу каскадно включенных элементов 2-ИЛИ. А чтобы группировал их параллельно. Мне предложили ключ KEEP="TRUE', но это никак не отразилось в Schematic)

  10. #619

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    974
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    максимально компактно память реализуется на примитиве BRAM - по сути это ОЗУ N*M
    А вот во что реализуется память на рассыпухе - это "секрет".
    По факту проще реализовать оба варианта и посмотреть что после синтеза получилось (не после елаборатион, а именно после синтеза).
    То что выглядит "страшно" в коде - может быть "изящным в примитивах" и на оборот.
    С другой стороны "этот кусок схемы" "живёт" в окружении других схем. По сему и выбирать "конкретный" вариант схемы.

    Про атрибуты (* KEEP="TRUE' *) и еже с ними - их достаточно много для разных применений.
    см UG901 глава 3. и да, есть атрибуты и для имплемента.

    Про: KEEP "предложение" несколько не применимое к 10-ИЛИ.
    "10-ИЛИ в кучу каскадно включенных элементов 2-ИЛИ." По факту превратится в два слоя примитивов (мне так видится на вскидку) два примитива 5 входовых и второй слой из 2 входной логики.
    и сиё не зависит от этого аттрибута тк в плисе не существует единого примитива. Можно попробовать применить BRAM (это изврат)

    ПС: 1) любое применение атрибутов приводит к потери "переносимости" кода verilog между разными производителями плис.
    2) некоторы аттрибуты устарели
    3) и временами важно где именно размещается атрибут (у имени цепи или у места определения модуля) - короче есть нюансы.

    ПСПС% ну и на последок: вполне возможно (очевидно) что результат синтеза на этапе уже учитывает времянки и синтезатор может по разному синтезировать схему (и не забываем что и от имплементация ещё зависит конечный результат), Конечно если цель получить прошивку для конкретной плис и конкретной тактовой. а Если "забить на времянки" то зачем волноваться за "красоту" которую никто не увидит (да и излишне она будет для симуляции)
    Последний раз редактировалось AlexG; 30.10.2024 в 01:48.

    Этот пользователь поблагодарил AlexG за это полезное сообщение:

    Titus(30.10.2024)

  11. #620

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,392
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,218
    Поблагодарили
    872 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Чем больше я разбираюсь в Z80, тем больше понимаю, что фактически большая часть процессора (кроме работы с портами/памятью и кое-чего еще) спроектирована под нормальный синхронный дизайн без всякой ощутимой активности во время полутактов. Но, в силу специфичности элементной базы и невозможности синхронно переключать латчи, были добавлены промежуточные латчи для смещения сигналов на пол-такта, чтобы к моменту прихода /CLK не было гонки сигналов. А после того, как схема авторами была оптимизирована, эти латчи еще и размазались, делая понимание логики работы более сложным.

    Что же касается управления памятью/портами, то там да, много активности и в полутактах. Возможно, где-то из-за того, что пытались уместить в 4 классических такта и чтение опкода, и регенерацию памяти. Поэтому чтение 1.5 такта, регенерация 1 такт. А может по каким-то еще причинам.

    Но вообще, авторы - монстры. Не даром процессор столько лет живее всех живых)

Страница 62 из 81 ПерваяПервая ... 585960616263646566 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 1739
    Последнее: 09.01.2025, 10:55
  2. Ответов: 32
    Последнее: 18.12.2024, 18:19
  3. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  4. Реверс МК-92
    от Случайность в разделе Программируемые калькуляторы
    Ответов: 55
    Последнее: 24.04.2021, 23:47
  5. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46

Ваши права

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