Хорошо бы картинку осциллограмм из симулятора добавить. Будет нагляднее, кмк.
Вид для печати
Хорошо бы картинку осциллограмм из симулятора добавить. Будет нагляднее, кмк.
Есть предположение, что мультиплексоры появляются только в отображении RTL Viewer, тогда как Technology Map Viewer показывает совершенно идентичную картинку. В обоих случаях расходуются две логические ячейки с одинаковыми LUT и даже Fitter размещает их в одном и том же месте. Получается, различные варианты кода из примера выше синтезируются одинаково и разницы на осциллограмме быть не должно.
Поправьте, если я ошибаюсь.
Вложение 58722
Я закончил преобразовывать схемный ввод модели PPU в синхронную модель. Теперь я готов выкладывать все узлы сюда, с пояснениями. Моделька работает отлично, я даже убрал артефакт, присущий аппаратной реализации, правда он виден только если телевизор правильно настроен. Это узкая (1-1,5 пикселя) белая полоска слева от растра, на границе экрана. Вот как было => стало:
http://savepic.net/10222685.pnghttp://savepic.net/10216541.png
Процесс шел так: сначала я покромсал каждый блок в схемном вводе, приводя его к синхронному виду и избавляясь от второй фазы пиксельклока. Затем перевод в Верилог. Очень сложным оказался узел формирования адреса VRAM. Там лихо закручен сюжет со счетчиками, которые по совместительству еще и регистры. И вот хитросплетение переносов между разрядами счетчика в схемном вводе не вызывает сомнений у Quartus'а - варнингов вообще нет. А как только я описал их в Верилоге, так ТаймКвест сразу поругался на 5 цепей, что они якобы образуют комбинаторное кольцо. Попробуем проанализировать эту проблему позже. А сейчас отдыхать!
SegaBoy, 9й Квартус вот такой код:
Развернул вот так (RTL):Код:if (W6_2) W6Req <= 1'b1;
else if (W6Done) W6Req <= 1'b0;
http://savepic.net/10190941.png
http://savepic.net/10192989.png
А в карте технологии вот так:
[Изображение утеряно]
Красный трейс это выход W6Req, он на другой странице (Q9 разбивает схему мельче, чем Q10+). А выход открытого LUTа идет на его вход. И комбинация AND-OR это уже классический мультиплексор, который формируется вот так (MX4x1):
http://savepic.net/10204253.png
Быть может более свежий Квартус умнее, другого объяснения я не могу найти. Или выбрано не то семейство ПЛИС (правила меняются от семейства к семейству).
- - - Добавлено - - -
Titus, она меня раздражала. Но на растактовку патч не влияет - я просто синхронизировал выходной поток пикселей: часть сигналов гашения оказалось идет асинхронно и из-за небольшого лага просачивается пиксель с серым цветом.
Есть. Да везде, в том числе и китайских 6538. Правда ширина ее колеблется от модели к модели. Вот полные (я вставлял маркер в левый верхний угол тайла и смотрел как поплывут относительно него спрайты, это очень помогло при выравнивании фаз тактирования):
http://savepic.net/10216540.png
http://savepic.net/10215516.png
http://savepic.net/10217564.png
http://savepic.net/10162269.png
Сейчас все примерно вот так:
http://savepic.net/10159197.png
http://savepic.net/10158173.png
На цвета не обращайте внимания: сейчас там кривая быстрая RGB палитра. Про формирование настоящего выхода я расскажу в разделе про видео ЦАП.
А вот ты меня заинтересовал. Она точно есть на оригинальной 2C02E (NTSC):
http://savepic.net/10204252.png
Ее нет на оригинальной 2C02G (NTSC):
http://savepic.net/10206300.png
Ее нет на клоне UM6528 (NTSC):
http://savepic.net/10205276.png
Она еле заметна на клоне UM6538 (PAL):
http://savepic.net/10202204.png
Она еле заметна на клоне HA6538 (PAL):
http://savepic.net/10211420.png
Вот такой не однозначный результат тестов. Так что нет: убрать полосу не есть отклонение от тактовой точности. :)