PDA

Просмотр полной версии : Эмулятор железа



CityAceE
22.12.2022, 14:23
Наверное, я сейчас спрошу какую-то глупость, но меня давно мучает вопрос. А почему нет (или всё-таки есть?) эмуляторов, которые эмулируют не поведение компьютера в целом, а отдельно каждый его элемент и далее взаимодействие этих элементов между собой? Что-то типа ПЛИС, но полностью в софтовом виде.

ivagor
22.12.2022, 16:02
Главный ограничивающий фактор - быстродействие процессоров.

s_kosorev
22.12.2022, 16:10
Любой hdl симулятор, только 1 секунду компьютера он будет просчитывать может 15 минут а может пару часов, зависит от сложности что и на чем моделируют

ZX_NOVOSIB
22.12.2022, 18:21
Главный ограничивающий фактор - быстродействие процессоров.
даже i7 не хватит?

svofski
22.12.2022, 19:54
Я могу заблуждаться, давно не заглядывал внутрь, но по-моему MAME модульный и примерно так как раз и устроен.

Если применить совсем железячный подход, можно скомпилировать Verilog в С++ Verilator-ом и получить нативный бинарник для своей любимой архитектуры. Быстродействие может получиться терпимым, сейчас компы быстрые. Это само по себе не гарантия правильности, конечно же.

[bETA]mEN
22.12.2022, 20:35
Наверное, я сейчас спрошу какую-то глупость, но меня давно мучает вопрос. А почему нет (или всё-таки есть?) эмуляторов, которые эмулируют не поведение компьютера в целом, а отдельно каждый его элемент и далее взаимодействие этих элементов между собой? Что-то типа ПЛИС, но полностью в софтовом виде.

типа такого?

https://github.com/iaddis/metalnes

ivagor
22.12.2022, 21:23
Тут (https://news.ycombinator.com/item?id=30481762) можно почитать про оценку быстродействия

AlexG
22.12.2022, 21:43
https://cxem.net/software/proteus.php

Conan
22.12.2022, 22:55
Наверное, я сейчас спрошу какую-то глупость, но меня давно мучает вопрос. А почему нет (или всё-таки есть?) эмуляторов, которые эмулируют не поведение компьютера в целом, а отдельно каждый его элемент и далее взаимодействие этих элементов между собой? Что-то типа ПЛИС, но полностью в софтовом виде. В свое время… лет 15 назад (уж очень быстро время летит) была идея сравнительного проекта по клонам Спекки. Вкратце: находим подходящий эмулятор, переносим в него схему(ы) и моделируем работу. Оцениваем совместимость (такты, прерывания, задержки) и получаем оценку. Заносим в сравнительную табличку.
Но найти эмулятор, учитывающий реальные особенности тех или иных схем, не удалось. Дело в том, что для «настройки» (чуток странный термин для цифровых автоматов) часто навешивали емкости или RC-цепочки. На задержки (и что хуже питание) влияла конкретная разводка плат. А еще была мешанина из разных серий (155/555/1533). А еще эти серии имели немалый разброс (не говоря уже про память и другие капризные блоки).

В общем вывод был такой: в эмуляторе все может быть неплохо, а на практике клон капризный в работе или сбоит или артефакты на экране. Поэтому считаю, что ничего лучше конкретной практики (сборка/запуск/тестирование) с железом не дает его оценки. Еще раз повторюсь: это для конкретной задачи по старым клонам, а не для моделирования.

Spectramine
23.12.2022, 04:37
Я могу заблуждаться, давно не заглядывал внутрь, но по-моему MAME модульный и примерно так как раз и устроен.
Такой эмулятор бы дико тормозил, так что вряд ли.

svofski
23.12.2022, 12:27
OP не озвучил уровень детализации, на котором он хотел бы остановиться, поэтому все поняли по своему. Я разумеется не имею ввиду эмуляцию устройств на уровне транзисторов. ivagor и Conan уже озвучили приблизительные оценки производительности и трудности связанные с таким низкоуровневым моделированием. И всегда можно взять уровнем ниже.


Такой эмулятор бы дико тормозил, так что вряд ли.

Я это понял с более прагматичной позиции эмуляции законченных логических блоков.
Вот пример 8253 из MAME pit8253.h (https://github.com/mamedev/mame/blob/master/src/devices/machine/pit8253.h)
И вот как выглядит например Вектор-06ц, он просто собран из типовых деталей: vector06.h (https://github.com/mamedev/mame/blob/master/src/mame/ussr/vector06.h) vector06.cpp (https://github.com/mamedev/mame/blob/master/src/mame/ussr/vector06.cpp)
Разумеется это не то же самое, что принципиальная схема, но это очень близко. Настолько близко, что при большом желании можно провернуть фарш назад, получить из этого Верилог и синтезировать его для ПЛИС.

Бихевиоральное описание на Верилоге можно скомпилировать Verilator-ом, оно не будет таким тормозным, как описание на уровне транзисторов. Но в нем будут все те же оговорки, что и для описания чипов "как в MAME" -- могут быть ошибки, или вольности в интерпретации неполной документации.

b2m
23.12.2022, 16:51
которые эмулируют не поведение компьютера в целом, а отдельно каждый его элемент и далее взаимодействие этих элементов между собой?
Вопрос в том, насколько мелкий этот элемент. Я поначалу так и планировал, но потом пришлось отойти в сторону крупно-блоковой эмуляции. Эмулировать микросхемы на уровне сигналов слишком медленно, и требуется достаточная точность эмуляции этих сигналов. Даже если учесть, что с момента создания первой версии моего эмулятора, скорость наших PC возрасла в 10 раз, то на мой взгляд это пока невозможно. Протеус хотя и может кое-что, но это всё-же пока не realtime, особенно для более сложных поделок, а не просто процессор+ПЗУ+ОЗУ.

CityAceE
23.12.2022, 19:51
Спасибо всем за ответы! Я примерно так себе ситуацию и представлял, но на всякий случай всё-таки решил уточнить.

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

Raydac
23.12.2022, 20:20
Тогда следующий вопрос. А существуют ли в природе эмуляторы, которые эмулируют процессор не симулируя поведение каждой отдельно взятой команды, а эмитируя обработку битов, выставленных на адресной шине и шине данных и других сигналов.
я делал что то вроде такого, но х.з. насколько правильно https://github.com/raydac/zxpoly/blob/master/zxpoly-z80/src/main/java/com/igormaznitsa/z80/Z80.java

goodboy
23.12.2022, 21:15
хочется чтобы эмулятор процессора пусть и не потранзисторно, но как-то на более низком уровне обрабатывал поступающую информацию
подобное например сделали после реверса AY
https://github.com/lvd2/ay-3-8910_reverse_engineered


// This verilog model of the AY chip was made from the transistor-level schematics
// recreated by deathsoft. He used high-resolution photos of the AY's decapped die.
//
// The purpose of this model is to be as close to the schematics as possible,
// wihout ever trying to be synthesizable. Suitable only for simulations!

andrews
23.12.2022, 21:28
Есть еще смешанный подход. CPU реальный, а все остальное на PC( или другом компе). Я кучу таких плат в Америке напокупал под z80, 8085, 6809 (эти мне спаяли), а 1802 и прочее осталось в виде деталей. То есть видеоконтроллер и прочие причиндалы компа от PC, а процессор какой есть реальный. Правда чтобы прогон обеспечить на 100% скорости приходится дополнительное железо городить. На низкой достаточно AVR.
И никакой Proteus это автоматом не поддерживает. Чтобы начертил схему, вставил CPU в колодку и вперед, экспериментируй сколько влезет.

Spectramine
24.12.2022, 04:16
Я это понял с более прагматичной позиции эмуляции законченных логических блоков.
Вот пример 8253 из MAME pit8253.h
И вот как выглядит например Вектор-06ц, он просто собран из типовых деталей: vector06.h vector06.cpp
Разумеется это не то же самое, что принципиальная схема, но это очень близко. Настолько близко, что при большом желании можно провернуть фарш назад, получить из этого Верилог и синтезировать его для ПЛИС.
Все же уровень абстракции/эмуляции "счетчики, значения, логические сигналы" повыше, чем "логические элементы/транзисторы/конденсаторы", который, как я предполагал, имелся ввиду. А так без разделения на логические блоки, соответствующие функциональным блокам устройства, вообще сложно написать эмулятор, а уж многоплатформенный эмулятор и подавно.

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



Тогда следующий вопрос. А существуют ли в природе эмуляторы, которые эмулируют процессор не симулируя поведение каждой отдельно взятой команды, а эмитируя обработку битов, выставленных на адресной шине и шине данных и других сигналов.

Видимо, имелось ввиду "имитируя".


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

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

AlexG
24.12.2022, 14:09
взять тотже z80 его по транзисторная модель выполняет несколько команд в секунду. интел на 4ггц. зато все недокументированности в наличии

Raydac
24.12.2022, 14:28
взять тотже z80 его по транзисторная модель выполняет несколько команд в секунду. интел на 4ггц. зато все недокументированности в наличии

зачем брать транзисторную модель если есть расписанная вся модель состояний проца и расшифровки команд

andrews
24.12.2022, 16:03
есть расписанная вся модель
ну тогда должно быть ПО, которое автоматически получает такую модель из транзисторной модели, а та в свою очередь получается из снимков слоев распотрошенной микросхемы. Внешние проявления "жизнедеятельности микросхемы" видны, если записывается состояние всех ее выводов с частотой превышающей ее тактовую частоту.
Есть такие инструменты?

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


многоплатформенный эмулятор и подавно.
в идеале нужен всего один
zif-сокет в случае ASIC DIP, устройство сопряжения и система с ИИ. Ставишь чип, программа прогоняет его по полной, сравнивая с имеющейся моделью, при несоответствии предлагает разработчику модель скорректировать (пока недообученная система). Затем повышает уровень модели снизу-вверх и вуаля все эмулирует. Как соединить отдельные модели чипов в работоспособную схему это задачка посложнее. Если она и это станет делать без участия человека, то отсюда уже недалеко и до "восстания машин"

AlexG
24.12.2022, 23:56
Если кратко. НЕТу модели

Titus
25.12.2022, 03:01
зачем брать транзисторную модель если есть расписанная вся модель состояний проца и расшифровки команд

Я такой модели Z80 не видел. Поэтому сам реверсил его по транзисторной схеме (правда, не до конца причесал).

AlexG
25.12.2022, 03:22
уточню. есть "фантазии" о том как работает z80. на текущий момент есть только транзисторная модель (срисованная с топологии микросхемы).

goodboy
25.12.2022, 16:37
вот кстати похожая тема https://zx-pk.ru/threads/34454-big-release-ppu.html

Raydac
26.12.2022, 15:30
Я такой модели Z80 не видел. Поэтому сам реверсил его по транзисторной схеме (правда, не до конца причесал).
я про такую http://www.z80.info/decoding.htm

AlexG
26.12.2022, 18:09
Сиё написано по "архитектурному/биологическому" принципу (взято с потолка или высосано из пальца). Другими словами "реализовано" не из знания реальной схемы на кристалле, а по анализу поведения "чорного ящика".

andrews
26.12.2022, 19:01
Способ получения данной модели не указан. Но вообще-то за вскрытие чипов статья в УК РФ не отменена и даже мораторий не наложен. Поэтому безопасней сделать свою дурацкую схему, которая функционирует как оригинальная только чуть хуже или чуть лучше, а еще добавить какой-то свой функционал.

Titus
26.12.2022, 23:59
Но вообще-то за вскрытие чипов статья в УК РФ не отменена и даже мораторий не наложен.
Это что за статья такая?

andrews
27.12.2022, 14:23
УК РФ Статья 146. Нарушение авторских и смежных прав
"
Виды интеллектуальных прав принято классифицировать на:

авторское право;
права, смежные с авторскими;
патентное право;
нетрадиционные объекты ИС (производственные секреты, топология микросхем и прочее);
средства индивидуализации юридических лиц (фирменное наименование, коммерческое обозначение, товарный знак);
единая технология (технические данные).
"
Подробности здесь (https://zakon.ru/blog/2020/1/24/intellektualnaya_sobstvennost_pravovoe_obespecheni e)

Хотя конкретных процессов и решений в РФ по исследованию топологии микросхем вроде пока не было. И право в РФ как бы не прецедентное. Но и "охранных грамот" никому государство тоже не выдает! Так что ненулевые риски все-таки есть.

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


вот кстати похожая тема https://zx-pk.ru/threads/34454-big-release-ppu.html
здесь же вообще массовая продукция и риски еще выше, чем для z80 и ZX Spectrum

ivagor
27.12.2022, 15:16
И кто сейчас подаст в суд (причем в РФ), Littelfuse? В начале-середине 90х в РФ выпускались клоны z80 (варианты ГДРовских). Тогда еще была какая-то остаточная коммерческая ценность данного процессора, но разве кто-то подавал в суд на наших производителей?

andrews
27.12.2022, 18:25
И кто сейчас подаст в суд (причем в РФ), Littelfuse?
а что теперь Zilog Littelfuse перекупил? Точно через IXYS.
Уже и z8051 не производят.
Сайт пока живой и торгующий их продукцией (https://www.zilog.com/).

AlexG
27.12.2022, 20:05
а есть разница между "топологией построения транзисторов" и "топологической схемой соединений оных транзисторов" ? это две больших разницы... и на что распространяется вышеупомянутый указ ?

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

вот выжимка:
ГК РФ Статья 1448. Топология интегральной микросхемы

1. Топологией интегральной микросхемы является зафиксированное на материальном носителе пространственно-геометрическое расположение совокупности элементов интегральной микросхемы и связей между ними. При этом интегральной микросхемой является микроэлектронное изделие окончательной или промежуточной формы, которое предназначено для выполнения функций электронной схемы, элементы и связи которого нераздельно сформированы в объеме и (или) на поверхности материала, на основе которого изготовлено такое изделие.

2. Правовая охрана, предоставляемая настоящим Кодексом, распространяется только на оригинальную топологию интегральной микросхемы, созданную в результате творческой деятельности автора и неизвестную автору и (или) специалистам в области разработки топологий интегральных микросхем на дату ее создания. Топология интегральной микросхемы признается оригинальной, пока не доказано обратное.

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

(в ред. Федерального закона от 12.03.2014 N 35-ФЗ)

(см. текст в предыдущей редакции)

3. Правовая охрана, предоставляемая настоящим Кодексом, не распространяется на идеи, способы, системы, технологию или закодированную информацию, которые могут быть воплощены в топологии интегральной микросхемы.

Особенно интересен 3 пункт.

andrews
27.12.2022, 20:59
Переведите на доступный русский, пожалуйста. Я полагаю, что по аналогии запрета исследовать(дизассемблиро ать и осмыслять)из исполняемой программы чужой код, защищенный (C) в топологии микросхемы защищены схемотехнические решения? Или реализация этих решений(собственно способ изготовления с целью воспроизведения самой микросхемы)?
То есть запрет на восстановление транзисторной схемы чипа? Или на ее копирование для массового производства и продажи?

Насколько все проще в случае с архитектурами DEC! Которая давным давно не существует и никогда не реализовывала их в виде одиночных полнофункциональных чипов. А советские разработчики аналогов прав интеллектуальной собственности не приобрели?

По поводу Intel 8008, 8080, 8048, 8051, 8086 им изменили лицензии с (С) на какие-то другие? 8051 тиражировали все кому не лень! Интересно на основании какой лицензии?А немецкие(ГДР) и советские разработчики аналогов прав интеллектуальной собственности не приобрели?

Вопросы не праздные. Отрадно осознавать что(если) реально существует свободные сегмент в микроэлектронике, действуя в котором, ты и как физическое и как юридическое лицо находишься в полной и бесплатной юридической безопасности.

Conan
27.12.2022, 21:32
На вопрос «а легально ли воспроизвести потранзисторную копию чипа в эмуляторе?» - ответ да, поскольку система команд (читай: внутренняя логика) не запатентованы. Ибо это не нарушает авторские права на топологию кристалла. На этот вопрос мне отвечал юрист по IP (Intellectual Properties) крупнейшей в мире компании, в которой за правами следят очень строго.

Кстати, история разработки Z80 чрезвычайно интересна в этом плане. Ключевым разработчиком архитектуры и топологии был японец Масатоси Шима (Masatoshi Shima), ранее участвовавший в разработке Intel 4004 и 8080. Шима приобрел легендарную репутацию за способность преобразовывать логические концепции в физический дизайн в режиме реального времени. Обсуждая каждую новую функцию, он указывал, сколько места она займет на кристалле, и накладывал вето на ее добавление, если она была слишком большой. Шима включил в проект несколько собственных концепций. В частности, он использовал опыт работы с миникомпьютерами NEC, и добавил второй набор регистров, чтобы Z80 мог быстро обрабатывать прерывания.
Одним из первых покупателей неизвестного ранее Z80 был NEC. В то время японские электронные компании промышляли тем, что копировали американские разработки микросхем и производили их без лицензии. Команда разработчиков Z80 думала о том, как от этого защититься. Фаггину (руководителю проекта) пришла в голову идея добавить на кристалл транзисторы, которые были особым образом модифицированы. Они работали иначе, чем можно было предположить при визуальном осмотре. Шима добавил шесть таких "ловушек" в топологии кристалла. Некоторое время спустя инженер NEC сообщил Шиме, что из-за ловушек их попытки копирования затянулись на полгода.
Однако это не помешало NEC воспроизвести свой клон Z80 (NEC D780C) по технологии КМОП и начать производство и торговлю.

andrews
27.12.2022, 21:51
"Все это конечно хорошо" Киндза-дза, но надежней, чтобы это было локализовано в России. С этими суждениями имхо надо пойти к депутату какому-нибудь, чтобы он инициировал закон или поправки в УК РФ. Извиняйте за занудство, но у меня это идея фикс. Чтобы четко было прописано в законах об интеллектуальной собственности. И никакой самый изощренный юрист не смог рубля взыскать с тех, кто "пытает внутренности" кристаллов и программ.