Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
6502:decoder [2013/09/23 15:08]
org
6502:decoder [2020/02/10 13:10] (текущий)
org
Строка 1: Строка 1:
 +# Декодер
 +
 Декодер 6502 (англ. PLA) - это обыкновенный демультиплексор,​ но очень большой. Формула демультиплексора получается 21-to-130, но с некоторыми исключениями (об этом ниже) Декодер 6502 (англ. PLA) - это обыкновенный демультиплексор,​ но очень большой. Формула демультиплексора получается 21-to-130, но с некоторыми исключениями (об этом ниже)
  
Строка 11: Строка 13:
 Логика декодера основана на принципе исключения. Схематически каждый выход представляет собой многовходовый элемент NOR, это значит,​ что если хотя бы на одном из входов будет 1, то вся линейка НЕ сработает. Логика декодера основана на принципе исключения. Схематически каждый выход представляет собой многовходовый элемент NOR, это значит,​ что если хотя бы на одном из входов будет 1, то вся линейка НЕ сработает.
  
-=== Особенные линии ​===+{{6502:​decoder_nice.jpg?​1000}} 
 + 
 +## Особенные линии
  
 Кроме перечисленных выше значений в качестве дополнительных входов могут выступать специальные контрольные линии. Кроме перечисленных выше значений в качестве дополнительных входов могут выступать специальные контрольные линии.
  
   * Внутренняя линия Push/Pull : специальная (129я по счёту) линия, которая не выходит за пределы декодера. Используется чтобы "​отсечь"​ инструкции Push/pull при выборе инструкций. Используется в трёх линейках : 83, 90 и 128.   * Внутренняя линия Push/Pull : специальная (129я по счёту) линия, которая не выходит за пределы декодера. Используется чтобы "​отсечь"​ инструкции Push/pull при выборе инструкций. Используется в трёх линейках : 83, 90 и 128.
-  * /PRDY : эта линия приходит на 80ю линейку декодера (Branch ​T2+  * /PRDY : эта линия приходит на 73ю линейку декодера (Branch ​T0
-  * IR0 : обычно для проверки двух младших разрядов кода операции используется общий сигнал IR01, но исключительно для 128й линейки (IMPLIED) используется значение IR0.+  * IR0 : обычно для проверки двух младших разрядов кода операции используется общий сигнал IR01, но исключительно для 128й линейки (IMPL) используется значение IR0. 
 + 
 +Есть мнение что эти специальные управляющие линии хотя и территориально входят в декодер - на самом деле просто части рандомной логики,​ а в декодер попали просто потому что так удобней было развести соединения. 
 + 
 +## Содержимое PLA
  
-=== Содержимое PLA ===+Онлайн-декодер : http://​breaknes.com/​files/​6502/​decoder.htm
  
 ^Group ^N  ^Raw bits                ^Decoded ​ ^T      ^Comments^ ^Group ^N  ^Raw bits                ^Decoded ​ ^T      ^Comments^
Строка 161: Строка 169:
 |K07 |126 |000000000000010000000 ​  ​|0XXXXXXX |TX     ​|/​IR7| |K07 |126 |000000000000010000000 ​  ​|0XXXXXXX |TX     ​|/​IR7|
 |K08 |127 |001001011010100100000 ​  ​|10111000 |TX     |CLV| |K08 |127 |001001011010100100000 ​  ​|10111000 |TX     |CLV|
-|K09 |128 |000000011000000000000 ​  ​|XXXX10X0 |TX     |IMPLIED|+|K09 |128 |000000011000000000000 ​  ​|XXXX10X0 |TX     |IMPL| 
 + 
 +## Что значит Raw bits 
 + 
 +Если представить себе декодер как ROM 21x130, где каждый бит представляет собой транзистор,​ образуемый пересечением полисиликона и диффузии,​ то raw bits будут представлять одну линейку декодера. 
 + 
 +Для примера на картинке представлена 5-я линейка декодера. Счёт бит начинается снизу-вверх. 0 означает отсутствие транзистора,​ 1 - наличие. 
 + 
 +{{6502:​decoder_line.jpg}} 
 + 
 +## Branch T0 skipping 
 + 
 +С контакта [[6502:​pads#​rdy_sync|RDY]] через линию задержки приходит специальная линия **/PRDY**. Если процессор был не готов на момент завершения //​предыдущей//​ инструкции,​ то если следующая инструкция является инструкцией условного перехода (branch), то её 0-й цикл (T0) пропускается. 
 + 
 +Зачем они это сделали - не известно. 
 + 
 +## Симуляция 
 + 
 +Существует два подхода в симуляции декодеров : 
 +  * Обычный перебор всех линий в цикле. При этом каждая итерация будет представлять собой операцию NOR над всеми входами. В нашем случае это будет очень медленно,​ потому что у декодера 6502 очень много линий (130). 
 +  * Табличный метод. Смысл в том, что мы заранее генерируем массив массивов для всех 130 линий, перебирая все возможные комбинации входов (IR, T0-T5, /PRDY). Индекс массива получается 8+6+1=15 бит, итого получается 32768 130-байтовых массивов (4.2 MB памяти). 
 + 
 +{{template>​6502_blocks}}
  • Показать страницу