Очень низкоуровневый эмулятор 6502 / NES
Автор |
Сообщение |
20 ноя 2012, 00:03 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Теперь тебе осталось доказать что когда на затворе NMOS-транзистора есть заряд - то он открыт Соответственно, если хотя бы один транс откроется в той "палке", то весь заряд стечет на землю. a b c 0 0 | 1 0 1 | 0 1 0 | 0 1 1 | 0 c = nor(a,b)
|
|
20 ноя 2012, 13:09 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
org писал(а): Теперь тебе осталось доказать что когда на затворе NMOS-транзистора есть заряд - то он открыт Соответственно, если хотя бы один транс откроется в той "палке", то весь заряд стечет на землю. a b c 0 0 | 1 0 1 | 0 1 0 | 0 1 1 | 0 c = nor(a,b) Мы говорим об одном и том же, только разными терминами. Я думаю, надо закрыть тему и идти дальше. Какой блок на очереди? PS В предыдущих постах, когда я говорил ИЛИ забывал добавлять НЕ. Т.е., правильно ИЛИ-НЕ.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
20 ноя 2012, 16:48 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
да, мы только что доказали то же самое, что и де Морган 200 лет назад: !(p or q) = !p and !q
единственное что входы на H/V декодер не в инверсной логике, поэтому уместнее использовать NOR. ну да ладно )
|
|
20 ноя 2012, 20:11 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
org писал(а): да, мы только что доказали то же самое, что и де Морган 200 лет назад: !(p or q) = !p and !q Так ты признаешь, что там инверторы с ОК, соединенные в монтажное И? :3 org писал(а): единственное что входы на H/V декодер не в инверсной логике, поэтому уместнее использовать NOR. ну да ладно ) Давай уже следующий модуль. Прежде чем эти таблицы разбирать, нужно счетчики раскурить. Их разрядность, источник тактов и пр. Идти надо последовательно, сверху вниз по тактовой частоте. На входе с делителем разобрались, давай дальше по цепочке.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
20 ноя 2012, 21:01 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
что-то я совсем запутался ) походу выходы все таки инвертированы у счетчиков =) -- 21 ноя 2012, 08:38 -- Вот, один "шаг" H/V счетчика: inc: если на входе 1, то счетчик делает инкремент, иначе на выходе (out) текущее значение. carry: перенос на следующий шаг RES: сигнал общего сброса HC (или VC у V-counter): сигнал очистки всего счетчика, H-counter сбрасывается когда декодер обнаруживает там значение H=340, V-counter сбрасывается при V=261. так как H-counter считает все время, то вход самого первого каскада заведен на Vcc. вход V-counterа регулируется H-декодером. когда H=340, то вход V устанавливается в 1, что дает возможность увеличить его значение на 1. carry каждого предыдущего бита заведен на inc следующего, получается carry-chain. По схеме: - без tri-state никак не обошлось. вход inc управляет двумя tri-state. Если inc = 1 (сделать шаг), то правый D-триггер (текущее значение счетчика) обновляется с выхода. Когда inc = 0, то этот D-триггер берет своё значение с левого D-триггера. - по поводу левого триггера, я честно ХЗ как его сделать стандартным )) он получается совмещенным: когда PCLK=1, то открывается прямой вход, когда PCLK=0 открывается реверсный вход - и всё это заливается на одну защелку. есть какой-то стандартный аналог этого элемента ? -- 21 ноя 2012, 09:14 -- Вот та же схема на tri-state: -- 21 ноя 2012, 10:35 -- Весь H-counter. переносы с 0 по 4 суммируются через NOR и подаются на вход 5. вход 0 заведен на Vcc (счетчик всегда считает)
|
|
22 ноя 2012, 16:10 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Новости с фронта 6502. Поубирал лишние шланги, что позволило идентифицировать практически все узлы рандомной логики: И схема стала выглядеть куда понятней.
|
|
22 ноя 2012, 19:45 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Интересно. Это видоизмененный синхронный счетчик. Обычно там применяется AND-XOR ступень. Ее смысл в том, чтобы зарулить выход триггера на вход без изменений, если нет кондиции и проинвертировать ее, чтобы триггер перекинулся, если кондиция случилась. Вот, например:
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
23 ноя 2012, 09:20 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Внешне это обыкновенный 9-разрядный up-counter по модулю 2, с одним синхровходом и 2-мя входами для сброса. 2 входа нужно чтобы не пересекаться с общей линией Reset. необычная схема для суммирования переносов с первой половины счетчика на самом деле нужна для уменьшения propagation delay в carry chain. да хотя у меня подозрения что даже с таким "фиксом" счетчик "плывет" по таймингу (тут даже не используется трюк с инвертированным carry chain как в 6502). Спасает только то, что он довольно часто очищается. -- 23 ноя 2012, 14:02 -- Сделал карту связей для рандомной логики 6502: С помощью этой карты можно узнать в какой очередности работает тот или иной кусок. Такую же схему сделаю и для PPU, когда повторно соберу полную схему. На днях как раз закончил перерисовку всех недостающих контрольных линий, осталась непонятной всего лишь одна(!), идущая из адресного декодера в логику сравнения спрайтов
|
|
23 ноя 2012, 20:21 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
org писал(а): Внешне это обыкновенный 9-разрядный up-counter по модулю 2, с одним синхровходом и 2-мя входами для сброса. 2 входа нужно чтобы не пересекаться с общей линией Reset. необычная схема для суммирования переносов с первой половины счетчика на самом деле нужна для уменьшения propagation delay в carry chain. да хотя у меня подозрения что даже с таким "фиксом" счетчик "плывет" по таймингу (тут даже не используется трюк с инвертированным carry chain как в 6502). Спасает только то, что он довольно часто очищается. Да не, пока такты идут на все ступени - он достаточно синхронный, гличи минимальны и соразмерны тактовому сигналу. Давай теперь подведем итог: первый горизонтальный счетчик на 9 бит. Но у ППУ всего 32 символа в ширину - т.е. 5 бит. Еще 4ре - это на каждые 8 точек экрана, т.е. по 2 такта на точку. Надо теперь смотреть в ПЛА (дешифратор) и смотреть какие линии он дергает в какие моменты. А, кстати, они считает до предела? Все 9 бит, сброс только общечиповый?
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
23 ноя 2012, 21:36 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Там два счетчика. Слева - для подсчета пикселей (H), справа идентичный (но схематично зеркально отраженный) для подсчета строк (V). Различаются только тем, что вход V управляется дешифратором. Когда H = 340, то вход V временно включается и происходит его увеличение на 1. Сброс H/V счетчиков тоже осуществляется дешифратором, это видно по транзисторной схеме. У каждого счетчика помимо сброса по Reset есть свой дополнительный сброс HC/VC (H-clear, V-clear), так как счетчики не делают полный круг. Оба счетчика 9-разрядные. Цитата: Да не, пока такты идут на все ступени - он достаточно синхронный Хотя такты идут на все ступени - распространение переноса идёт последовательное, значит задержка имеет место быть. Другого объяснения трюка с переносом я дать не могу. Дешифратор в общем не всегда дергает какие-то определенные пиксели/линии. Например часть выходов настроена так, что они срабатывают каждый 2й и 3й пиксель. Это нужно для отрисовки бэкграунда, ведь каждая точка требует чтения байта из NT, байта из AT и двух байт данных тайла: H:105 V:0 F/NT VIS PICTURE H:106 V:0 F/NT VIS PICTURE H:107 V:0 F/AT VIS PICTURE H:108 V:0 F/AT VIS PICTURE H:109 V:0 F/TA VIS PICTURE H:110 V:0 F/TA VIS PICTURE H:111 V:0 F/TB VIS PICTURE H:112 V:0 F/TB VIS PICTURE Часть других выходов срабатывает от A до B, например от 0 до 63 (подготовка дополнительной спрайтовой памяти). Если диапазон не удается подобрать по модулю 2, тогда для этого используются 2 линии, которые заведены на RS-триггер, который активен от линии A до линии B.
|
|
24 ноя 2012, 10:39 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Вот именно это давай и разберем. Входные такты и H счетчик с его частью дешифратора.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
04 дек 2012, 20:50 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
ПИНГ -T
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
05 дек 2012, 23:55 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Декап ревизии "H" заглох?
_________________ Nestopia 1.37/1.40 Fixed
|
|
06 дек 2012, 09:41 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
HWM, я сейчас с 6502 вожусь, хочу добить его к НГ )
|
|
06 дек 2012, 12:21 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
ОК, ждемс.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
16 дек 2012, 12:36 |
|
Зарегистрирован: 04 янв 2011, 22:07 Сообщения: 29
|
что то тишина у вас тут хоть что нибудь упомянули, интересно же читать З.Ы.: Блин, из за вашей темы начал читать Хоровиц/Хилл - "Искусство схематехники" и Келим - "Вычислительная техника", скоро сессия а я читаю книги "малость" не своего профиля...
|
|
16 дек 2012, 20:14 |
|
Зарегистрирован: 18 окт 2012, 11:50 Сообщения: 7
|
Все будет. Просто работы невпроворот.
|
|
18 дек 2012, 16:58 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Над 6502 работы ведутся, но чего-то интересного показывать пока нечего. Нудный процесс полировки полученной схемы и пошаговая симуляция логики.
Параллельно веду трассировку APU, покажу как будут готовы все слои (сейчас пока только металл готов).
Nepo, нечего читать эту фигню ) Все необходимые знания можно получить из этой темы )
|
|
29 дек 2012, 21:50 |
|
Зарегистрирован: 28 ноя 2012, 17:56 Сообщения: 63
|
Пытался понять как понять как работает схема и застопорился на принципе работы open-drain транзисторов у которых исток замкнут на базу. Кто-нибуть может объяснить как они могут проводить заряд? Ведь транзистор открыт только когда на базу подается заряд, но база подключена к земле. как тогда заряд то проходит? О_о
|
|
30 дек 2012, 21:06 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Это нагрузка. Такой режим полевика, в котором он работает как генератор тока. В логическом смысле это обычная нагрузка.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|