НПО Системы Безопасности
(499)340-94-73 График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной

Главная » Периодика » Безопасность

0 ... 122123124125126127128 ... 233


/* This device generates chip select signals for one */

/* 8Kx8 ROM and two 2Kx8 static RAMs. It also drives */

/* the system READY line to insert a wait-state of at */

/* least one cpu clock for ROM accesses */

/******************************************************/

Шаг 3 - составление выражений

Для упрощения ввода специфических выражений для декодирования адреса и генерации циклов ожидания рекомендуется сначала составить выражения для промежуточных переменных. Имена таким переменным назначаются произвольно, т. е. им не будут соответствовать какие-либо выводы. Промежуточные выражения вводятся в файле WAITGEN.PLD, предназначенном специально для этих целей.

Первое вводимое промежуточное выражение представляет собой объявление битового поля, которое определяет щину адреса. Используем для этого имя MEMADR (от английского memory address - адрес памяти) для представления адреса и введем следующее выражение:

FIELD MEMADR = [А15..11] ;

На схеме, приведенной на рис. 5.19, можно заметить, что установка сигналов выбора микросхемы для статического ОЗУ зависит не только от адреса, но и от стробов данных MEMW и MEMR.

Для упрощения выражений для сигналов выбора микросхемы при обращении к статическому ОЗУ создадим сигнал MEMREQ (от английского memory request - запрос памяти). Введем следующее выражение:

MEMREQ = MEMW # MEMR ;

Всякий раз, когда в других выражениях будет встречаться MEMREQ, компилятор будет осуществлять замену этой переменной на выражение MEMW # MEMR.

Отметим, что на временных диаграммах декодирование адреса, соответствующего ПЗУ, сочетается со стробом 1MEMR для активизации сигнала выбора микросхемы ПЗУ (ROM CS) и инициации последовательности циклов ожидания.

Создадим промежуточную переменную SELECT ROM, представляющую комбинацию строба IMEMR и адреса, попадающего в диапазон, отведенный для ПЗУ. Для этого введем:

SELECT ROM = MEMR & MEMADR : [0000..1FFF] ;

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

Если сигнал ROM CS, который возвращается в матрицу, используется для инициации циклов ожидания, то в ПЛИС появляется дополнительная задержка распространения. Так как в нащем примере тактовая частота относительно невелика (4-8 МГц), эта дополнительная задержка не вызовет проблем. Однако при использовании высоких тактовых частот рекомендуется создать еще один подобный логический блок (используя промежуточную переменную SELECT ROM), применив выражения для буферизи-рованной логической схемы.



Создадим сигнал выбора микросхемы ПЗУ ROM CS, используя промежуточную переменную SELECT ROM:

ROM CS = SELECT ROM ;

Сигналы выбора микросхем ОЗУ (RAM CSO и RAM CS1) зависят от состояния MEMREQ и адресной шины. Для декодирования этих сигналов используем операцию CUPL для выбора желаемого диапазона адресов с помощью указания верхней и нижней границы диапазона:

RAM CSO = MEMREQ Ь MEMADR : [2000..27FF]; RAM CS1 = MEMREQ Ь MEMADR : [2800..2FFF];

Далее создадим выражения, которые связывают генерацию и временные соотношения циклов ожидания. Сначала, как показано на временной диаграмме (см. рис. 5.21), требуется, чтобы при подаче сигнала выбора микросхемы ПЗУ сигнал WATTI устанавливался по следующему фронту тактовых импульсов процессора. Согласно правилам работы D-триггера логический уровень на его входе передается на его выход Q по приходу тактового импульса. Введем вьфажение для этого сигнала, где WAin.D представляет сигнал на входе D-триггера, реализованного в устройстве ПЛИС:

WAIT1.D = SELECT ROM & ! RESET ,-

Заметим, что в выражении для WAIT1.D сигнал 1RESET подвергается логическому умножению (AND) с остальной частью выражения для того, чтобы вьшолнить синхронный сброс при подаче сигнала RESET.

Теперь создадим сигнал WAIT2, который генерируется по тактовому импульсу, идущему после установки сигнала WAIT1. Поэтому выражение для WAIT2.D будет зависеть от сигнала WAIT1. Так как WAIT2.D должен сбрасываться по тактовому импульсу, идущему после снятия сигнала доступа процессора к ПЗУ, необходимо подвергнуть логическому умножению (AND) переменные SELECT ROM и WAIT1:

WAIT2.D = SELECT ROM Ь WAIT1 ;

Создадим сигнал SELECT ROM согласно временной диаграмме, чтобы показать, что буфер с тремя состояниями должен быть включен, когда декодируется адрес ПЗУ и строб данных MEMR активен. Таким образом, введем следующее вьфажение для выхода буфера с тремя состояниями:

READY.ОЕ = SELECT ROM ;

Данное вьфажение определяет, когда буфер с тремя состояниями активизирует свой выход и переходит из Z-состояния, но оно не определяет, каким логическим уровнем управляется сигнал. Выражение для READY определяет этот логический уровень - сигнал должен оставаться неактивным до тех пор, пока полный период цикла ожидания не будет равен одному полному тактовому циклу процессора. Это условие не будет выполнено, пока не установится сигнал WAIT2, поэтому выражение для READY выглядит следующим образом:

READY = WAIT2;



»t5

1 K>

IROMCS

«14

1 1Ю

REWY

»12

1 RO

WUTI

niCHW

IHEMR

1 1Ю

IRAM CS1

IRESET

1 K>

IRAHCa

Л «

Шаг 4 - выбор целевого устройства

Следующим шагом после составления всех выражений является определение совместимости микросхем ПЛИС, выпускаемых разными производителями. Основными пунктами рассмотрения при выборе целевого устройства будут:

• требуемое количество входных выводов;

• относительное количество буферизованных и небуферизованных выходных выводов;

• наличие выводов с третьим состоянием (если необходимо);

• требуемое количество комбинационных логических блоков (термов произведения) для выполнения логических функций каждого выражения.

Самым простым устройством, удовлетворяющим требованиям данного примера, является микросхема PAL16R4, также здесь может быть использована микросхема GAL16v8. На рис. 5.22 приведено графическое представление устройства на базе ПЛИС с распределением выводов.

Заметим, что при распределении выводов трем сигналам выбора микросхемы CS назначены выводы типа Ю, которые всегда будут работать в качестве выходов. Вывод READY, cw.ax i который подключается к шине процессора для генерации сиг- g 22. Распределение

нала READY, функционирует в режиме с тремя состояниями. выводов ПЛИС

Двум D-триггерам, выполняющим функцию генератора циклов ожидания, назначены выходные выводы, которые подключены к внутреннему регистру.

Один из этих буферизованных выводов можно использовать непосредственно для подачи сигнала READY, так как логическая функция этого сигнала такая же, как и у сигнала WAIT2. Однако тогда потребовалось бы использование отдельного сигнала разрешения с тремя состояниями, подключенного к выводу 11 целевого устройства. А так как вывод 11 управляет выходами всех четьфех выводов, соединенных с внутренними регистрами, то это делает невозможньпл использование двух других буферизованных выходных выводов в цепях, не задействованных для генерации циклов ожидания.

Рекомендуем в этой ситуации не использовать управление с помощью отдельного выхода с тремя состояниями, так как трудно предугадать все изменения, которые могут быть сделаны во время дальнейшего развития проекта. Поэтому вывод 11 соединяется с землей, благодаря чему выходы регистров с тремя состояниями подключаются к выводам устройства.

Микросхема PAL16R4 имеет, по крайней мере, семь доступных конъюнктивных членов для каждого выхода, и этого вполне достаточно для данной задачи. В качестве альтернативы может быть использована микросхема GAL16V8.

Когда файл WAITGEN.PLD является активным документом, необходимо выбрать команду меню PLD » Configure, затем нажать кнопку Target Device Change (изменить целевое устройство) для вызова диалогового окна Target Device (целевое устройство). Далее в списке Device Туре (тип устройства) найти и выбрать строку GAL, а затем в списке Device Name (имя устройства) выбрать строку gl6v8. Для закрытия обоих диалоговых окон нажмите в каждом из них кнопку ОК. Теперь строка DEVICE в заголовке исходного файла ПЛИС будет выглядеть так:

Device gl6v8;



0 ... 122123124125126127128 ... 233