Soviet Union ZX Spectrum CommunityВторник, 19.09.2017, 16:23
Вы вошли как Гость | Группа "Гости" | RSS
 [ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Soviet Union ZX Spectrum Community » ZX-строительство » Концепции » ZX Устройство шины данных
ZX Устройство шины данных
HazarДата: Воскресенье, 22.06.2014, 12:18 | Сообщение # 1
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
{ZX} буфер шины данных и разделительные резисторы

Предыстория вопроса- Black Cat писал:

“собственная ULA и видео ОЗУ отделены от компьютера по шине данных разделительными резисторами. Единственным ограничивающим фактором до сих пор оставалась особенность тактирования CPU ZX Spectrum, когда тактовая частота процессора останавливается на период до 6-ти тактов из-за конкуренции между CPU и ULA при обращении к видео ОЗУ. Это не позволяет простыми методами согласовать работу внешней ULA и CPU, тактируемого таким образом.”

Ранее с различных источников также публиковали :

Речь идет об устройстве шины данных ZX Spectrum (не клонов). Мы уже обсудили тот факт, что при чтении данных из несуществующего порта всегда считывается FFH (или 255D).
Это связано с тем, что, когда не выбрано ни одно устройство (это момент когда в программе нет обращений к устройствам) то процессор переводит шину данных в высокоимпендансное состояние. Но так как шина подключена к плюсу источника питания через резисторы ~8-20 K то разряды шины данных принимают состояние логической единицы 11111111 (Hex FF). Т.е. выполнение строчки 10 PRINT IN 1 20 GO TO 10

даст результат:
255
255
255
SCROLL?

Если эту программку запустить на фирменном Спектруме сразу же после включения или сброса, то мы увидим, что среди результата 255 иногда будет "проскальзывать" результат 56.
Оказалось, что это число зависит от атрибутов экрана. Например, если задать цвет фона (PAPER) черный, а цвет символов (INK) - белый, то это число, иногда считываемое в программе, будет равно 7, т. е. это именно байт атрибутов, считываемый из области 768 байтов атрибутов, Остается выяснить, каким образом, считывая данные из порта с адресом 1 (можно взять любой другой адрес не существующего порта), мы получаем в результате данные из области атрибутов экрана.

Для этого нужно рассмотреть устройство внутренней шины данных компьютера ZX Spectrum. У которого к шине данных подключены: микропроцессор, ПЗУ, поле памяти 16К (нижнее), дополнительное поле памяти 32К (верхнее) и внутренние регистры микросхемы ULA - программируемой логической матрицы, выполняющей в Спектруме функции контроллера дисплея, генератора тактовой частоты процессора и порта ввода/вывода с адресом 254 (а на самом деле с любым четным адресом), для ввода и вывода данных магнитофона, вывода звука, ввода данных от клавиатуры, вывода цвета бордюра.
Причем ULA работает автономно совместно с областью памяти 16К, в которой как раз и выделено место для памяти экрана 6912 байт (растровая графика плюс атрибуты). Периодически, в соответствии с частотой кадров и строк телевизионной развертки, ULA вырабатывает адреса области экрана и считывает 32 раза в течение каждой строки по два байта - один байт из области растровой графики и один из области атрибутов экрана, так как микропроцессор также имеет доступ к этой области памяти, то, если не принять специальные меры, может возникнуть конфликт на шине данных.
Чтобы этого не произошло, принимали следующие меры.

1 При одновременном обращении к полю видео-памяти со стороны ULA и микропроцессора, ULA останавливает тактовую последовательность, поступающую к микропроцессору Z80 и, таким образом, Z80 "ждет" возможности работать дальше, т.е. ULA имеет приоритет на работу с экраном .
2 Чтобы при этом не возникал конфликт на шине данных, шина данных разделена. ULA и поле памяти 16К отделены от остальных пользователей шины данных резисторами 410 Ом.
При этом ULA и микропроцессор по отдельности пользуются каждый своим "куском" шины
данных, не слишком мешая друг другу.

Теперь вернемся к работе нашей программы.
• Когда микропроцессор считывает данные из порта 1, то состояние шины данных на участке, "принадлежащем" микропроцессору, определяется резисторами 8.2 Ком, которыми линии подтянуты к плюсу источника питания. В то же время, к микропроцессору через резисторы 470К поступают данные, считываемые ULA из памяти экрана при его регенерации и при совпадении моментов считывания эти данные воспринимаются микропроцессором, как данные из порта 1. Т.е. в фирменном компьютере при считывании с внешнего порта с неиспользуемым адресом можно получить данные из области атрибутов экрана.
• Это обстоятельство используется в некоторых фирменных программах для более точной синхронизации событии программы и изображения на экране, во всяком случае, то обстоятельство, что в самодельном компьютере шина данных полностью развязана и на ней всегда присутствует лог."1" по всем линиям при невыбранных устройствах, является причиной несовместимости некоторых программ.

Так-же кое-где в самодельных компьютерах с разделенными Полями памяти для достижения подобного результата советовали соединить входы и выходы микросхем памяти (поля 16K) с помощью резисторов 470 Ом.

**************************************************************************
Что можно улучшить в свете перехода на более современную элементную базу CPLD FPGA?


Spectrum жив в нашей душе навсегда
 
HazarДата: Воскресенье, 22.06.2014, 12:32 | Сообщение # 2
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Одна из лучших предложенных схем "Универсальный буфер"
Прикрепления: 1718337.gif(85Kb)


Spectrum жив в нашей душе навсегда
 
HazarДата: Среда, 09.07.2014, 04:30 | Сообщение # 3
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Особенности двунаправленной шины данных
На CPLD (серия MAX3000) при использовании Quartus2

Предлагаемая архитектура данной серии плис не поддерживает возможность
построения двунаправленных шин внутри кристалла .
Но так как все-же есть возможность использовать выходные (pins) в двунаправленном
варианте в связи с чем возникают различные вопросы, как использовать все возможности плис при проектировании подобных шин? Как корректно организовать обмен информацией с внешней периферией и.др .

В общем на самом деле конечно ничего страшного нет, шину данных можно разделить
на несколько однонаправленных шин (потоков) и управлять направлением передачи
данных с помощью логики и специальных примитивов например ALT_IOBUFF
К сожалению многие нужные буферные элементы почему-то не поддерживаются
в некоторых CPLD видимо эти элементы ориентированы на более современные кристаллы.

В базовом наборе буферных элементов можно также найти тристабильный элемент ( TRI)
он ориентирован в основном для управления состоянием выхода (PIN out. bidir)
и в общем нигде толком не упоминается что эти элементы можно использовать
для двунаправленных шин, к тому же следует учесть что нехорошо например
подключать большое количество линий (допустим 20 ) с других шин на один тристабильный выход, Что при этом произойдет наверно догадываетесь сами-
при установлении вывода в состояние Z емкость всей внешней шины нагружается на одиночный вход кристалла, при таких условиях требуется некоторое время что-бы сформировались логические уровни и это практически сильно напоминает аналоговый сигнал с длительным переходным процессом . И потом этот сигнал почти прямиком попадает на другое разветвление уже на внутренней шине кристалла.

Идем дальше: BIDIR - этот элемент я нашел где-то в сети в виде VHDL кода
заготовки. По всей видимости он лучше всего подходит для организации
двунаправленных шин и компилятор на него никогда не ругается.
***********************************************
library IEEE;
use IEEE.std_logic_1164.all;
entity bidir1 is
port (I_O : inout std_logic;
EO, A: in std_logic;
B :out std_logic);
end bidir1;
architecture bi of bidir1 is
begin
process (EO, A)
begin
case EO is
when '1'=>I_O <=A;
when '0' => I_O <= 'Z';
when others => I_O <= 'X';
end case;
end process;
B <=I_O;
end bi;
**************************************************
В отличии от элемента TRI он имеет дополнительный вывод для взаимодействия
с внутренней логикой, используя два таких элемента очень просто организовать
двунаправленную передачу данных от одного bidir выхода к другому при этом есть возможность переводить выход в третье состояние Z
Прикрепления: _ZX.zip(79Kb)


Spectrum жив в нашей душе навсегда
 
HazarДата: Среда, 01.04.2015, 04:00 | Сообщение # 4
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Двунаправленное буферное устройство с преобразователем логических уровней
На основе М.С. ADG3308 .
Микросхема отличается от подобных в своем классе несколько так скажем нетрадиционным схемотехническим подходом и высокими эксплуатационными
Характеристиками и очень простым методом управления .

The (ADG3308/ADG3308-1/ADG3308-2) consist of eight bidirectional channels. Each channel
состоит из восьми двунаправленных каналов.
can translate logic levels in either the (A→Y) or the (Y→A) direction.
Каждый канал может перевести логические уровни либо (A→Y) или (Y→А) направлении
They use a one-shot accelerator architecture, ensuring excellent switching characteristics.
Они используют архитектуру акселератора “один выстрел”, обеспечивая превосходные характеристики переключения
Прикрепления: 0597316.gif(49Kb)


Spectrum жив в нашей душе навсегда
 
Soviet Union ZX Spectrum Community » ZX-строительство » Концепции » ZX Устройство шины данных
Страница 1 из 11
Поиск:

Copyright MyCorp © 2006Сайт управляется системой uCoz