User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 803

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

Комбинированный просмотр

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

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Мне еще пока не понятно главное - как при произвольной CLK, но не превышающей определенную частоту, сделать, чтобы часть триггеров работала по спаду, часть по фронту?
    Могу точно пояснить по Spartan-6.
    Там в каждом блоке SLICE (в котором имеется 4-8 триггеров, 4 6-входовых комбинационных LUT6 и кое-что еще) можно конфигурировать полярность сигнала CLK на триггеры.

    Поэтому можно взять тактовый сигнал, описать на языке (VHDL/Verilog) инвертор для него, и подавать прямой или инверсный CLK на тактовый вход всех триггеров. Та часть из них, на которую подается прямой CLK, будет срабатывать по его нарастанию, а другая часть (с инверсным CLK) - по спаду. При синтезе схемы этот инвертор не займет никаких ресурсов кристалла. Ни буферов тактовой частоты (BUFG), ни комбинационной логики (LUT), ничего. И даже задержки сигнала от инверсии не будет.

    Как на Spartan-7 или Artix-7 - не знаю. У Xilinx была тенденция уменьшения гибкости логических ресурсов от поколения к поколению, чтобы упаковать их больше на один кристалл. Например, в Spartan-3 были триггеры с входами R и S, а в Spartan-6 - только один из двух (R или S). Также у Spartan-6 были асинхронные R- или S-входы у триггеров, а у Artix-7 - только синхронные (по фронту тактовой частоты). На самом деле эти ограничения даже полезные, они повышают культуру разработки и ни в коей мере не ограничивают свободу разработчика, если только он немного по-другому решит задачу, которую ранее решал асинхронными входами. В общем, по Artix-7 или Spartan-7 надо смотреть по докам, есть ли там тоже возможность инверсии тактового входа триггеров. В Spartan-6 точно есть.

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

    Потому, что скважность тактового сигнала неизвестна. А размещение/разводка схемы требуют конкретных чисел. Например: что частота сигнала не более стольки-то МГц, и скважность не менее x % и не более y%. Тогда оптимизатор, исходя из наихудших условий (экстремально короткие тактовые импульсы и т.д.), раскидает и разведет схему по ресурсам ПЛИС, гарантируя ее работоспособность.

    Но широкие допуски на входной тактовый сигнал приведут к тому, что максимальная тактовая частота, при которой синтез проекта пройзойдет успешно, окажется весьма низкой. В самом деле, а вдруг пользователь подаст на тактовый вход сигнал самой неприятной для схемы скважности? Очень короткие положительные или отрицательные импульсы на тактовом входе приведут к трудностям при генерации работоспособной конфигурации ПЛИС.

    Что я предлагаю взамен? Гарантировать скважность 50% для тактовой частоты. Это можно сделать при условии, что входной тактовый сигнал периодический (без выпадений импульсов и т.п.). Подать входной тактовый сигнал на ФАПЧ, умножить его в n раз, и наслаждаться. На практике, у меня в железе на Spartan-6 работал 32-битный Softcore-процессор на частоте 80МГц, а некоторые модули схемы (напр. Gigabit MAC) - на 125МГц. Еще были приемники данных, работавшие на битовой частоте 960МГц и байтовой - 120МГц. Более современные поколения ПЛИС могут дать и более высокие рабочие частоты.

    Если внешней схеме требуется задержать работу процессора - то это следует делать не путем манипуляций с тактовой частотой, а другим способом. Сделать какой-нибудь сигнал типа WAIT, возможно - с более высоким приоритетом, который безусловно заставляет процессор в любом состоянии пропустить тактовый импульс.

    По языкам программирования (Verilog или VHDL) - наверное, это спор о вкусах. Когда учился, я пробовал освоить их оба, легче зашел VHDL, на нем и работал далее. Как профессиональный программист на Си, скажу, что "сходство" Verilog и C - кажущееся. Это совершенно разные языки, для совершенно разных задач, и способ мышления для них различается коренным образом. Между VHDL и Verilog больше сходств, чем между Verilog и C.

    Оба языка, повторюсь, задумывались для описания симуляции. Самые главные их концепции:
    1) описание узла схемы состоит из "параллельных" и "последовательных" инструкций.
    2) Параллельные инструкции выполняются (в абстрактной среде исполнения) все параллельно, непрерывно и одновременно. Как правило, они описывают комбинационные схемы.
    3) Последовательные инструкции исполняются как в обычном языке программирования, одна за другой. Они объединяются в "процессы" (Process в VHDL, Always-блоки в Verilog). Основная идея: "процесс" запускается по какому-либо событию (как правило - фронту тактовой частоты) и всякий раз мгновенно (в абстрактной среде исполнения) исполняется до конца. Отсюда конструкции VHDL типа: proc1: process(CLK) begin if CLK='1' and CLK'Event then ......... end if; end process;. В Verilog используется конструкция always @posedge(CLK). Хотя языки VHDL/Verilog допускают запуск "процесса" по изменению произвольных сигналов или их комбинаций, для синтезируемых схем следует запускать процессы только по фронту CLK. Ведь "процессы" синтезируются инструментами разработки в триггеры и комбинационную логику на их входах. Тело "процесса" может содержать разные команды, в том числе циклы, сложные конструкции if/else. Но опять же, для синтезируемых в приемлемых размерах схем следует ограничиться записью в какие-либо сигналы (это будут выходы триггеров) некоторой логической функции от каких-то других сигналов. "Процессов" в узле схемы может быть произвольное количество. По одному и тому же событию может запускаться много разных процессов, и все они (в абстрактной среде исполнения) исполняются одновременно и мгновенно.
    Последний раз редактировалось Barmaley_m; 30.08.2024 в 23:14.

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

    Titus(30.08.2024)

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

  3. #2

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

    По умолчанию

    Согласен на 98%
    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Я не рекомендую подавать внешний тактовый сигнал с неизвестной скважностью на схему, часть триггеров которой срабатывает по нарастанию, а другая часть - по спаду. Почему?
    "здесь" - не стремятся добиться космических скоростей. Посему допустимо "подавать внешний тактовый сигнал с неизвестной скважностью". Главное обеспечить длительность любого полупериода больше чем минимальное время от Максимальной допустимой частоты модели. Это если не требуется использовать PLL (но я не помню требований к входной частоте для оного).
    Про похожесть ("сходство" Verilog и C - кажущееся) имеется ввиду сложность написание. Verilog и C одного уровня, а VHDL это уровень языка ADA (более строгое соответствие типов, постоянные преобразования типов, знаков итд).

    Для 7-семейства в systemveriloge (да и в vhdl) не требуется использовать инвертор (достаточно указывать по какому фронту "мы" работаем).

    И да, в клонах ZX есть режим турбо, который переключает на ходу тактовый сигнал.
    - - - Добавлено - - -

    Цитата Сообщение от Titus Посмотреть сообщение
    Я не сторонник в лоб переписывать с параллельного языка на последовательный. Понятно, что так можно получить наибольшую идентичность исходному коду, с меньшими шансами накосячить при оптимизации. Однако, на мой взгляд, это крайне расточительно в плане ресурсов.
    Я подразумевал о возможности. а так - да, временами может потребоваться много вспомогательной работы по созданию "рунтайма".
    ПС: к слову в виваде симулятор преобразуется *.v (любой hdl) в *.exe исполняемый файл , выводом является результат симуляции.
    Последний раз редактировалось AlexG; 30.08.2024 в 23:33.

  4. #3

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

    По умолчанию

    Цитата Сообщение от AlexG Посмотреть сообщение
    ПС: к слову в виваде симулятор преобразуется *.v (любой hdl) в *.exe исполняемый файл , выводом является результат симуляции.
    Вивада - это что? Лучше пояснять термины, которые известны вериложцам)

  5. #4

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Вивада - это что?
    Наверно, имеется в виду Vivado Design Studio от Xilinx - среда разработки.

    Симуляторы Xilinx действительно переводят проект, состоящий из симуляционного скрипта (который подает на входы испытуемой схемы сигналы) и собственно схемы, в язык Си. Потом компилируют его компилятором GCC в .exe и исполняют. Тем самым достигается высокая производительность симуляции. Но я смотрел этот Си-код, он явно не предназначен для чтения человеком. Это просто код программы расчета результатов симуляции. Она всякий раз генерируется заново. Также я тихо подозреваю, что Си-код там не очень эффективный генерируется. Но за счет компиляции в нативный машинный код все равно достигается некоторая оптимизация.

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

    Titus(31.08.2024)

  6. #5

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

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Также у Spartan-6 были асинхронные R- или S-входы у триггеров, а у Artix-7 - только синхронные (по фронту тактовой частоты). На самом деле эти ограничения даже полезные, они повышают культуру разработки и ни в коей мере не ограничивают свободу разработчика, если только он немного по-другому решит задачу, которую ранее решал асинхронными входами.
    Т.е. я еще и должен подумать о том, чтобы избавиться от асинхронных R/S-триггеров, чтобы все было адаптировано под современные ПЛИС? Это жестко, т.к. процессор Z80 изобилует ими.
    Как схематически обозначаются синхронные R/S-триггеры и синхроные R/S входы на D-триггерах?

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

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Если внешней схеме требуется задержать работу процессора - то это следует делать не путем манипуляций с тактовой частотой, а другим способом. Сделать какой-нибудь сигнал типа WAIT, возможно - с более высоким приоритетом, который безусловно заставляет процессор в любом состоянии пропустить тактовый импульс.
    Это все хорошо, но никак не подходит к проекту Z80, который может быть вставлен в любую схему с CLK произвольной скважности. Поэтому даже и обсуждать нет смысла.

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

    Да, и как реализуются схемы с многопортовыми D-триггерами на ПЛИСах?

  7. #6

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Т.е. я еще и должен подумать о том, чтобы избавиться от асинхронных R/S-триггеров, чтобы все было адаптировано под современные ПЛИС? Это жестко, т.к. процессор Z80 изобилует ими.
    Жестко только на первый взгляд. Надо просто почесать голову и придумать решение без асинхронных RS-триггеров. На самом деле, асинхронные RS-триггеры - зло. Почему?

    При переходе сигнала R (для S рассуждения аналогичны) из неактивного в активный уровень проблем не возникает. Триггер просто сбрасывается, независимо от входов CLK и D. Однако переход R из активного в неактивный уровень должен быть обязательно согласован с тактовой частотой. В противном случае может возникнуть метастабильность. Если снятие R и фронт CLK приходят на триггер почти одновременно - то неизвестно, какой (из-за задержек разводки связей на чипе и т.п. эффектов) придет раньше. И если вход D=1, то R может быть снят как раз в тот короткий промежуток времени, когда информация с входа D проходит на выход триггера. И тогда триггер может остаться в промежуточном состоянии между 0 и 1 на длительное время (один-два такта, изредка более). При этом, до перехода триггера в какое-нибудь (заранее неизвестное!) стабильное состояние, схема, которая смотрит на его выход, может увидеть несколько переключений.

    Как лучше всего перевести схему с асинхронных на синхронные RS-триггеры - этот вопрос решается индивидуально в каждом конкретном случае. Если столкнешься с практическим примером, который трудно самому решить - приведи схему, попробуем покумекать вместе.
    Цитата Сообщение от Titus Посмотреть сообщение
    Как схематически обозначаются синхронные R/S-триггеры и синхроные R/S входы на D-триггерах?
    Это зависит от ГОСТов той страны, в которой ведется разработка. Иногда еще от "стандартов" фирмы-производителя FPGA. Конкретно у Xilinx приняты следующие обозначения:
    триггер с асинхронным сбросом - FDC, вход сброса - CLR
    триггер с синхронным сбросом - FDR, вход сброса - R
    триггер с асинхронной установкой - FDP, вход установки - PRE (от слова Preset)
    триггер с синхронной установкой - FDS, вход установки - S
    По ГОСТ 2.743-91, триггеры обозначаются символами T или TT. Вход установки - SET или S, сброс - RES или R (синхронность или асинхронность задается не буквами, а графическим "указателем свойства выводов").
    Цитата Сообщение от Titus Посмотреть сообщение
    Да, и как реализуются схемы с многопортовыми D-триггерами на ПЛИСах?
    Что значит "многопортовыми"? Параллельные регистры с несколькими триггерами? Просто задаешь входные и выходные шины данных для этих регистров в виде "векторных" сигналов на языке (Verilog/VHDL). Задаешь один "процесс", запускающийся по фронту тактовой частоты. Внутри процесса (и, возможно, блока if) одна команда - запись выходных сигналов регистра на его выход. Еще можно сделать регистру вход разрешения записи (CE) путем помещения в "процесс" команды IF, которая позволяет запись на выходы регистра только если CE='1'. Триггеры внутри FPGA имеют вход разрешения записи, им можно и нужно пользоваться.

    Для более подробной информации рекомендую документ Xilinx UG626 "Synthesis and Simulation Design Guide". Там глава 5 "Coding for FPGA Device Flow", подраздел "Registers in FPGA Design".

  8. #7

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

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Что значит "многопортовыми"? Параллельные регистры с несколькими триггерами?
    Нет, многопортовые - это вот:



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

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

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

    Обозначение синхронного RS-триггера я нашел:



    А вот D-триггера, у которого есть еще синхронные RS-входы - нет.

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

    Кстати, можно сказать, что большинство RS-триггеров в Z80 фактически синхронные. Просто я рисовал - отдельно базовый RS-триггер, и отдельно 2И элементы на входе со входами CLK для синхронного переключения. Можно было это сразу упаковать в синхронный RS-триггер.

  9. #8

    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    735
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    37 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Нет, многопортовые - это вот:
    А какова логика работы такого триггера?
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  10. #9

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от IanPo Посмотреть сообщение
    А какова логика работы такого триггера?
    Присоединяюсь. Мне из графического изображения непонятно, как он работает. Там по два входа D и C, но только один выход. Каким образом комбинируется информация в этом элементе схемы? Два триггера и логическая функция на их выходе? Или один триггер и логическая функция на его входе?

  11. #10

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Т.е. я еще и должен подумать о том, чтобы избавиться от асинхронных R/S-триггеров, чтобы все было адаптировано под современные ПЛИС? Это жестко, т.к. процессор Z80 изобилует ими.
    Как схематически обозначаются синхронные R/S-триггеры и синхроные R/S входы на D-триггерах?
    Это все хорошо, но никак не подходит к проекту Z80, который может быть вставлен в любую схему с CLK произвольной скважности. Поэтому даже и обсуждать нет смысла.
    Да, и как реализуются схемы с многопортовыми D-триггерами на ПЛИСах?
    1)В современных плиса (я за ксайлинкс говорю/ у конкурента аналогично на 95% ) нет в чистом виде R/S-триггеров. НО D-триггер с R или S входом (асинхронные и синхронные относительно тактовой) есть и реализуемы. За другие виды триггеров вот так сходу не скажу - тк "по жизни" они в таком виде не требуются.
    2) Про скважность я уже говорил - что можно, в плоть до отсутствия тактовой (статический уровень), есть ограничение на минимальное время полупериодов.
    3) про " многопортовыми D-триггерами" я не понял... Это когда 8 бит шина "стробируется" одним сигналом тактовым ? ну дык хоть 512 бит можно сделать, да ещё и сброс на них завести при желании.

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

    Насколь мне видится R и S сигналы в данной схеме формируются полюбому с привязкой к CLK, а посему здесь говорить о метастабильности неуместно. и в общем случае без разницы асинхр или синх будет триггер.
    ПС: блин щаз запугаем ТС и он сорвётся с крючка ;-)
    ТС - я не настаиваю на то чтоб вы вписывались в плисы, однако этот мир (плис) по своему прекрасен. и вовсе не обязательно всё знать - достаточно и 5% всего функционала (языка) использовать, чтоб творить "маленькие шедевры".

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

    Barmaley_m(31.08.2024)

Страница 1 из 2 12 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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