Про ПЛМ P11. Данная ПЛМ содержит в себе биты 0 (HN0), 1 (HN1), 4 (RUN) регистра HD.SDH(0161054), бит 8 счётчика буфера(HDBUFA08) и биты 4 (FD-RESET), 1 (HDBUFA10), 0 (HDBUFA09) регистра FD.CNT(0161076). В регистре 0161076 биты 0 и 1 являются не только выбором части буфера, но и 9-м и 10-м разрядами счётчика буфера. В самой ПЛМ четыре логических вывода, в которых логические произведения складываются по ИЛИ-НЕ, а также четыре регистровых вывода, на выходе которых стоит по D-триггеру, информация в котором защелкивается по переднему фронту на входе CLK, в триггере затем используется инверсный выход. На логических выводах находятся сигналы HN1, HN0, RUN и CLK-P11. Вывод CLK-P11 используется для формирования переднего фронта, который подаётся на вход CLK. Выводы FD-RESET, HDBUFA08, HDBUFA09 и HDBUFA10 являются регистровыми, актуальная информация на них появляется после защелкивания по переднему фронту на входе CLK.
Пока рассмотрим логические выводы HN0, HN1 и RUN.
Вывод RUN:
DB4*CL-CNT*/A01
RUN*DB4
RUN*A01
RUN*/CL-CNT
Первое условие обеспечивает выбор бита 4 регистра 0161054. Сигнал CL-CNT является не только сигналом сброса счётчика буфера, но и условием записи в регистры 0161054 и 0161076. Различаются эти регистры в по адресной линии A01, если ноль, то это 0161054, если единица - 0161076. В данном случае формируется условие, равное записываемому биту 4 в регистр 0161054. Остальные три условия являются условиями удержания, реализуя функции триггера. Так как выход инверсный, то на выводе появляется инвертированное значение записанного бита. Оно подаётся на входы запуска мотора интерфейсов дисковода и жёсткого диска MFM. Т.к. шина дисковода и диска MFM также инверсная, то запись единицы обеспечивает запуск мотора, запись нуля - остановка мотора.
Вывод HN1:
DB1*CL-CNT*/A01
HN1*DB1
HN1*A01
HN1*/CL-CNT
Всё точно так же, как и битом 4 (RUN), но только бит 1 регистра 0161054. Этот вывод подаётся на вход HN1 интерфейса жёсткого диска, обеспечивает бит 1 выбора головки, а также на вход 2 интерфейса дисковода, обеспечивает выбор плотности, при операции с диском двойной плотности DD устанавливается в один.
Вывод HN0:
DB0*CL-CNT*/A01
HN0*DB0
HN0*A01
HN0*/CL-CNT
Всё точно так же, как и битом 4 (RUN), но только бит 0 регистра 0161054. Этот вывод подаётся на вход HN0 интерфейса жёсткого диска, обеспечивает бит 0 выбора головки, а также на вход 32 интерфейса дисковода, обеспечивает выбор стороны.
Потом будут описаны другие выводы, которые обеспечивают формирование сигнала CLK и работу трёх старших бит счётчика.
- - - Добавлено - - -
Далее по работу ПЛМ P11.
Для запоминания информации на регистровых выводах необходимо формирование переднего фронта сигнала CLK. Этот сигнал формируется на выводе CLK-P11, который соединён с выводом CLK самой ПЛМ. По схеме там ещё стоит конденсатор C16 на 330 пФ, служащий для формирования длительности импульса. У формирователя импульса и счётчика два режима работы - обычный и под управлением контроллера жёсткого диска. Обычный режим работы это адресный обмен с буфером и обмен с буфером контроллера дисковода.
Здесь необходимо рассмотреть два вывода сразу - P11-CLK и HDBUFA08, т.к. они взаимосвязаны в работе.
Вывод формирования импульса CLK-P11:
HDBUFA07
/HDBUFA08*HD-BDRQ*P11-CLK
HDBUFA08*HD-BDRQ
Вывод восьмого бита счётчика буфера HDBUFA08:
/HD-BDRQ*HDBUFA08
CL-CNT
Рассмотрим работу в обычном режиме. В данном случае сигнал HD-BDRQ имеет низкий уровень, а значит два последних условия при формировании P11-CLK не будут выполняться. В первом условии сигнала HDBUFA08 подаётся инвертированное значение /HD-BDRQ, поэтому оно всё время будет в единичном состоянии. Так как в данном случае на формирование сигнала P11-CLK влияет только вход HDBUFA07, то при очистке счётчика, если он был в единичном состоянии, то он переходит в нулевое. Также он переходит в нулевое состояние во время счёта, что является одновременно сигналом переноса в старшие разряды. Так как выход у ПЛМ инверсный, то на выходе будет изменение с нулевого на единичное состояние и сформируется передний фронт. Но при ситуации, когда HDBUFA07 был в нулевом состоянии, то формирование фронта при очистке происходить не будет. Но в данном случае разработчики между сигналами очистки буфера CL-CNT и выводом HDBUFA07 со счётчика поставили конденсатор C15 на 75 пФ. Во время очистки счётчика CL-CNT принимает высокий уровень и выводе HDBUFA07 возникает импульс, этакий аналоговый одновибратор. Длительности этого импульса должно хватить на формирование переднего фронта на выходе P11-CLK. Таким образом передний фронт будет сформирован либо во время очистки, либо во время счёта при переходе из единичного состояния в нулевое.
Во время обычного режима работы по сигналу CLK меняется состояние вывода HDBUFA08. Сигнал /HD-BDRQ в единичном состоянии, а вывод у ПЛМ инверсный, поэтому HDBUFA08 будет переключаться на противоположное значение. Т.к. импульс происходит при переносе из HDBUFA07, то просто меняется состояние HDBUFA08 на противоположное. Но импульс CLK может возникать и во время очистки счётчика, поэтому вторым условием стоит состояние сигнала CL-CNT, во время очистки он в единичном состоянии, поэтому на выводе HDBUFA08 возникает нулевое состояние, разряд очистился.
Более сложная работа происходит при управлении с контроллера жёсткого диска. Там при операциях записи перед каждым сектором и при форматировании перед запросом буфера выдаётся сигнал HD-BDRQ, этот же сигнал выдаётся после чтения одного сектора. Почему то разработчики решили переключать страницы адреса буфера (биты 9 и 10) только по этому сигналу, наверное от того, что контроллер после операции с каждым сектором требует подтверждения. Остальные биты с 0 по 8 считаются как обычно, т.к. сигнал HD-BDRQ отсутствует. Но бит 8 HDBUFA08 всё равно принудительно дёргается при смене страницы. При выдаче HD-BDRQ контроллер ждёт ответного сигнала на вход BRDY, но в Союз-НЕОН эти выводы соединены. Таким образом выдаётся HD-BDRQ, он поступает на вход BRDY, контроллер в ответ снимает HD-BDRQ и операция продолжается далее, возникает импульс.
При подаче HD-BDRQ вывод счётчика HDBUFA07 обязательно должен быть очищен, иначе ничего не произойдёт. Состояние вывода HDBUFA08 роли не играет, но рассмотрим ситуацию, когда оно нулевое, что и должно быть.
Диаграмма работы:
Код:
HDBUFA07 _________________________
_______
HDBUFA08 _________/ \_______
_________
HD-BDRQ __/ \____________
____ __ _________
P11-CLK \__/ \____/
При подаче сигнала HD-BDRQ выполняется условие /HDBUFA08*HD-BDRQ*P11-CLK и на выводе P11-CLK появляется низкий уровень. Инвертированное значение P11-CLK с учётом задержек снова поступает на вход и условие /HDBUFA08*HD-BDRQ*P11-CLK уже выполняться не будет и на выходе P11-CLK снова появляется высокий уровень и формируется передний фронт на входе CLK. По этому фронту отрабатывает правило /HD-BDRQ*HDBUFA08 для вывода HDBUFA08. Но т.к. /HD-BDRQ у нас в нуле, то на выходе HDBUFA08 защелкивается единица, т.к. используется инверсный выход триггера. После появления единичного сигнала HDBUFA08 для формирования P11-CLK срабатывает правило HDBUFA08*HD-BDRQ, на выходе появляется низкий уровень и ситуация стабилизируется. После исчезновения HD-BDRQ все условия для формирования P11-CLK становятся ложными и вывод переводится в единичное состояние с выдачей переднего фронта. По этому переднему фронту меняется состояние HDBUFA08 с единичного на нулевое, что также приводит к изменению разрядов HDBUFA09 и HDBUFA10 и переключению на следующую страницу. В данном режиме работы длительность импульса HD-BDRQ должна быть больше, чем длительность импульса P11-CLK, иначе будет только один фронт, HDBUFA08 переведется в единичное состояние и переключения страниц не произойдёт.
Осталась третья часть про старшие разряды счётчика HDBUFA09 и HDBUFA10.