TimelySpec спасибо огромное!
Пришло время публикации отчета по схемотехнике InviteDRIVE v6 MAX.
И это ответ тем кто отправил карты на доработку но ещё не получил от меня никакой обратной связи.
Основная причина, - медленные сигналы и "бросание" приставкой шин данных и адреса в Z состояние. Для согласования уровней между FPGA (3.3в) и приставкой (5в) я использовал "быстрые" трансиверы 74ALVC164245 и резисторы номиналом 33 Ом, включенные последовательно в линии данных (чтобы подавить звон), однако я не учел особенности именно этих трансиверов, а что же происходит?
Использование медленных сигналов (с большой длительностью фронта и спада) на входах трансивера может привести к ряду негативных эффектов, характерных для стандартных КМОП-устройств без триггеров Шмитта на входах.
1. Повышенное энергопотребление Delta ICC.
Когда входное напряжение находится в промежуточной области (между уровнями логического нуля и единицы), и верхний, и нижний транзисторы входного каскада оказываются частично открытыми. Это создает сквозной ток от шины питания к «земле». В момент медленного переключения ток может возрастать в сотни раз (до нескольких мА на один вход).
2. Генерация и паразитные осцилляции.
Медленное прохождение через пороговую зону может вызвать многократные ложные переключения выхода («дребезг» или осцилляции). Это происходит из-за усиления шумов на входе, когда сигнал находится в линейном режиме работы входного каскада.
3. В 74ALVC164245 входные цепи портов A и B остаются активными, даже когда выходы находятся в Z-состоянии. Если пин порта «плавает» в Z-состоянии и никуда не подключен внешне, напряжение на нем может зависнуть в промежуточной зоне (между 0 и 1).Это приведет к возникновению сквозных токов, что вызывает повышенное потребление энергии.
Оч яркий пример это VA2.3, у которой, для примера возьмем, сигнал nVRES организован иначе, нежели в большинстве других консолей, внутри он подключен как OPEN DRAIN с подтяжкой к + резистором 2.2к.
В чем тут "подвох"?
Когда приставка включается, вначале консоль "отпускает" сигнал холодного сброса nMRES (в картридже он через трансиверы не заведен, поэтому никак не влияет), затем консоль генерирует горячий сброс nVRES, OPEN DRAIN подключение предполагает что задний фронт оч крутой, а вот крутизна переднего фронта (завершение которого сигнализирует о начале запуска консоли) определяется номиналом "подтягивающего" резистора, который у нас 2.2k, этого значения не достаточно чтобы крутизна переднего фронта соотв. требованиям к микросхеме а именно 5nS/V (скорость возрастания, - через сколько наносекунд напряжение поднимется на 1 вольт). Таким образом в трансивер попадает сигнал который на долго "зависает" в неопределенном состоянии, из за этого вначале на выходе трансивера по линии nVRES начинаются генерации, затем трансивер "сходить с ума" целиком, а так как у нас в трансивер заходят и другие сигналы nCE0/nCAS0/nAS/nLWR/nUWR программируемая логика начинает получать кашу из этих сигналов. Кроме прочего в зависимости от ревизии консоли, перечисленные выше сигналы могут быть ровно так же реализованы. Почти во всех консолях nCE0 так же реализован и "насилует" трансивер как и nVRES, но пожалуй чуть в меньшей степени.
Внутри программируемой логики я могу отфильтровать шум, это замедляет прохождение сигналов, но это не есть основная "бяка".
Основная "бяка" в том что вышедший из рекомендованных параметров трансивер начинает шуметь в консоль по питанию и в шины к которым он подключен, это влияет на всю консоль целиком и никакая фильтрация внутри программируемой логики картриджа, а именно исправить это обновлениями никак не получиться.
Иная ситуация с линиями адреса, но не менее "стремная", трансиверы считывающие адреса обязаны находиться постоянно во включенном состоянии, потому что подключение напрямую к консоли и через 32X похожи как "ишак" и "ворона". Происходит следующая ситуация, когда консоль "бросает" шину адреса происходит ситуация описанная выше в пункте 3.
Что нужно сделать.
1. Нужно выбрать трансиверы с возможностью "проглатывать" медленные сигналы (идеальный вариант с Триггерами Шмидта на входе).
2. Трансиверы должны иметь устойчивость к переходу входных сигналов в Z состояние.
3. Должны обеспечивать развязку 5в-3.3в.
Таким образом получается что нужно всего лишь заменить трансиверы для полной совместимости со всеми консолями.
Как это сделано в других картриджах?
1. MEGA SD, - трансиверы для входных в картридж сигналов: SN74LVCH16373, трансивер для двунаправленных сигналов: SN74LVCH16T245.
Плюсы: BUS HOLD, а значит входные сигналы будут удерживаться в случае брошенной шины.
Минусы: Хотя BUS HOLD и удерживает последнее логическое состояние, скорость нарастания сигнала после выхода с трансивера будет такой же медленной и значит всё равно придется бороться с медленным сигналом, но уже в программируемой логике.
2. EVERDRIVE PRO, - трансиверы для входных и для двунаправленных сигналов: 74LVC162245 (обязательно производитель NEXPERIA).
Плюсы: тут интересная тема, до 2019 года в этих трансиверах не было никаких намеков на способность противостоять "медленным" сигналам, после 2020 внезапно появляется Trigger-Schmits Effect (эффект триггера Шмидта). Это не триггеры Шмидта, это эффект, сдается мне это чисто маркетинг, так как с 90х годов технология производства не изменилась, а триггеры появились, ну да ладно, оно видимо работает.
Минусы: из за того что эти трансиверы не имеют раздельного питания, чтобы не "загасить" входные буферы FPGA, питать их нужно от 3-х вольт. С одной стороны транзисторы верхнего плеча трансиверов будут сбрасывать 5-ти вольтовые сигналы в линию питания 3.3в и тут нужно чтобы на питании 3,3в постоянно были потребители рассеивающие энергию, с другой стороны входное питание должно поддерживаться достаточно сильным регулятором, иначе будет вот так:
Mega Everdrive Pro умер, а ещё трансиверы рассчитаны на логику 3,3в, из за чего опять не получается полной совместимости ибо порог срабатывания "1" может быть выше чем 3,3в и тут снова встречается проблема совместимости, но с меньшим процентом консолей и в основном с самыми ранними моделями.
Спасибо за внимание! С НОВЫМ ГОДОМ!
P.S.
Таким образом трансиверы меняем на SN74LVCH16T245ADGG,11.