Форум Эму-Россия
http://forum.emu-russia.net/

Очень низкоуровневый эмулятор 6502 / NES
http://forum.emu-russia.net/viewtopic.php?f=13&t=3938
Страница 16 из 21

Автор:  HardWareMan [ 21 июн 2014, 11:13 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

У 6502 нет "неверных" кодов. Есть недокументированные опкоды и они вполне уже разобраны на тематических форумах.

Автор:  CaH4e3 [ 21 июн 2014, 18:12 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

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

Автор:  VEG [ 08 июл 2014, 17:46 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Эх, жалко, в последнее время маловато новостей от проекта. Очень интересно было читать.

Автор:  org [ 04 ноя 2014, 03:16 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Завершена логическая схема рандомной логики 6502.

Схема получилась довольно внушительная.

В верхней части находится рандомная логика, отвечающая за транслирование 130 линий декодера в набор команд для управления контекстом и АЛУ.

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

Вложения:
RANDOM.png
RANDOM.png [ 409.34 КБ | Просмотров: 11962 ]

Автор:  tfwbbt [ 05 ноя 2014, 23:16 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Чувааак. Ты безумно крут. Я зарегистрировался, чтобы сказать тебе это.

Я загорелся идеей сделать свой NES на FPGA, с целью апа своего скилла в цифровой элетронике. Предвижу, что ваши наработки будут мне очень полезны.

Автор:  org [ 05 ноя 2014, 23:20 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Я тоже планирую в ПЛИС это загнать, когда потестю на симуляторе) В конце-концов из верилога будет проще перегнать в Си, чем из схем.

-- 05 ноя 2014, 22:24 --

PS. Заходи в стрим я там буду разбирать факап, который не даёт схеме нормально работать.

http://twitch.tv/ogamespec

Автор:  tfwbbt [ 05 ноя 2014, 23:26 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

org писал(а):
Я тоже планирую в ПЛИС это загнать, когда потестю на симуляторе) В конце-концов из верилога будет проще перегнать в Си, чем из схем.

Я так и понял, где же еще может потребоваться транзисторный уровень. Но даже для ПЛИС реализация транзисторного уровня это хардкорно.

Автор:  org [ 06 ноя 2014, 01:10 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Ну я транзисторный уровень поэтому и перегоняю в логику. А потом на верилог и в ПЛИС)

Автор:  tfwbbt [ 06 ноя 2014, 01:21 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

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

Стрим понравился, правда впечатление смазано тем, что я нифига в твоих сигналах пока не понимаю ~_~. Какие-то ф1, ф2, фетч и прочее :D
Ничего, надеюсь наверстаю.

Автор:  org [ 06 ноя 2014, 01:27 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Ну PHI1 / PHI2 - это тактовые сигналы. Проц работает на оба полутакта.

Из исходного PHI0 они получаются так :

PHI1 = NOT(PHI0) (нижний уровень)
PHI2 = PHI0 (верхний уровень)

а остальные сигналы, их там туча) FETCH в частности загружает код операции с предекодера на регистр инструкций (IR).
часть сигналов вообще просто типа управляющие, одним словом не описать что они делают )) я когда схему рисовал подписывал их "BADA", "BOBO", "KAKA", "XXX" и тому подобное) потом постепенно переименовал в нечто вроде "ENDS", "ENDX", "TRES1" итп., чтобы хотя бы примерно понимать что они делают.

Автор:  tfwbbt [ 06 ноя 2014, 01:34 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

А, вот оно что. clk и инвертированный clk.

Цитата:
Ну я транзисторный уровень поэтому и перегоняю в логику.

Верилог, насколько мне известно, позволяет описывать схемы даже на транзисторном уровне, но часто оставляют эту задачу синтезатору. Я сначала решил, что ты собрался описывать именно на нем :)

Автор:  org [ 06 ноя 2014, 01:38 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Именно, я и планирую передать генерацию RTL синтезатору. Транзисторный уровень на верилоге - это был бы изврат)

Автор:  tfwbbt [ 07 ноя 2014, 01:17 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

По поводу timing generator. Что собой представляет t0? Нигде не нашел у тебя на схемах, где он формируется.
И чем отличается T1 от T1X (схема Хенсона)?

Автор:  tfwbbt [ 07 ноя 2014, 14:01 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Нашел. Этот кусок в dispatch оказался.

Автор:  org [ 08 ноя 2014, 00:33 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

T1 это внутренний сигнал, который идёт на рандомную логику из dispatch. Во время T1 производится FETCH.

T0X и T1X -- это eXternal сигналы, которые идут на декодер.

Все сигналы вида Tx - соответствуют циклам выполнения инструкции.

Как я понимаю во время T0 производится выставление адреса на Program Counter, а во время T1 производится выборка опкода по этому адресу + одновременно завершаются короткие двухцикловые опкоды (минимальная длина инструкций в 6502 - два цикла).

Хотя может быть я ошибаюсь... Логичнее было бы во время T0.PHI1 выставить адрес, а во время T0.PHI2 загрузить опкод. А во время T1 выполнить (завершить) инструкцию. Сомнения у меня вызывает правильность названия сигнала T1 вообщем)

Автор:  org [ 08 ноя 2014, 15:50 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Нашёл у себя ещё одну ошибку - все D-LATCH по какой-то причине стали работать не по уровню, а по фронту %)

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

Автор:  tfwbbt [ 08 ноя 2014, 16:31 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

org писал(а):
Нашёл у себя ещё одну ошибку - все D-LATCH по какой-то причине стали работать не по уровню, а по фронту %)

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


WTF?! У тебя в схемах D-триггера срабатывают по уровню? :shock:

Автор:  org [ 08 ноя 2014, 17:59 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Там не D-триггеры, а D-латчи.

Сейчас таких элементов не встретишь, они были только во времена N-MOS. Работа их основывается на хранении заряда на затворах MOSFET (см. аттач).

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

Поэтому такие D-latch работают по уровню (enable = 1).

-- 08 ноя 2014, 17:01 --

Схему кстати пофиксил, теперь всё работает перфектно )))

Косяк был в сигнале TRESX, там BRK6E не очищал его, поэтому прерывания никогда не завершались. Теперь всё гуд.

Схему можно взять тут : https://code.google.com/p/breaks/source ... ANDOM.circ

Теперь нужно немного времени, чтобы проанализировать работу инструкций, а конкретнее - какие контрольные линии они выдают на нижнюю часть процессора и можно собирать полную сборку (с регистрами и АЛУ).

Вложения:
d-latch.png
d-latch.png [ 3.82 КБ | Просмотров: 11783 ]

Автор:  tfwbbt [ 08 ноя 2014, 18:15 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Ясно, придется немного переосмыслить твои схемы под современные веяния в ПЛИС (100% синхронная логика, конвейерная архитектура итд).

Кстати я оплошался. Написать что-либо на транзисторном уровне на верилоге можно, но синтезировать это в реальном железе - нет. Архитектура ПЛИС не заточена под такие вещи. Это казасается и альтеры (проверил сам), и зайлинкса (погуглил); про других производителей не в курсе.

Поэтому только Gate/RTL level.

Автор:  org [ 08 ноя 2014, 18:23 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Транзисторы это bottom ground, сейчас на транзисторах делают только custom логику типа встроенной SRAM памяти ну и стандартных ячеек.
Всё остальное gate-level (опять же основанные на стандартных ячейках).
И по уровню сейчас CMOS не работает, только edge. Хотя D-latch по идее можно сделать как DFF по posedge, должно работать идентично.

Страница 16 из 21 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/