3.4. Цифровой компаратор (lpm_compare)
Параметризированный компаратор lpm_compare рекомендуется фирмой Altera для использования взамен всех других типов компараторов.
Прототип модуля lpm_compare:
function lpm_compare(dataa[lpm_width-1..0], datab[lpm_width-1..0], clock, aclr, clken)
with (lpm_width, lpm_representation, lpm_pipeline, chain_size, one_input_is_constant)
returns (alb, aeb, agb, ageb, aneb, aleb);
Входные порты модуля lpm_compare:
Имя порта | Необходимость | Описание | Примечание |
dataa[] | Да | Входные данные, сравниваемые с данными на входе datab[] | Разрядность определяется параметром lpm_width |
datab[] | Да | Входные данные, сравниваемые с данными на входе dataa[] | Разрядность определяется параметром lpm_width |
clock | Нет | Вход синхронизации для конвейерного режима | Обеспечивает синхронизацию при использовании конвейерного режима. Должен быть подключен при значении lpm_pipeline, отличном от 0 (значение по умолчанию) |
clken | Нет | Вход разрешения синхронизации для конвейерного режима | Если не подключен, то значение по умолчанию 1 |
aclr | Нет | Вход асинхронного сброса для конвейерного режима | В конвейерном режиме устанавливает выходы в исходное для этого режима состояние: aeb=0, agb=0, ageb=0, alb=1, aleb=1, aneb=1 |
Выходные порты модуля lpm_compare:
Имя порта | Необхо-димость | Описание | Примечание |
alb | Нет | 1 – если dataa[] < datab[] | Хотя бы один из выходов следует использовать |
aeb | Нет | 1 – если dataa[] = = datab[] | |
agb | Нет | 1 – если dataa[] > datab[] | |
ageb | Нет | 1 – если dataa[] >= datab[] | |
aneb | Нет | 1 – если dataa[] != datab[] | |
aleb | Нет | 1 – если dataa[] <= datab[] |
Параметры модуля lpm_compare:
Параметр | Тип | Необхо-димость | Описание |
lpm_width | Число | Да | Разрядность портов dataa[] и datab[] |
lpm_representation | Строка | Нет | Тип осуществляемого сравнения: "signed" (со знаком), "unsigned" (без знака) или "unused" (не используется). Представление чисел со знаком реализуется в дополнительном коде |
lpm_pipeline | Число | Нет | Определяет число тактов синхронизации, по прошествии которых устанавливается действительное значение выходов. Значение по умолчанию 0, что означает не конвейерный (не синхронизируемый) режим. Если установлено значение 0, то вход clock не должен быть подключен |
lpm_hint | Строка | Нет | Для применения в проектах на языке VHDL |
lpm_type | Строка | Нет | Для применения в проектах на языке VHDL |
chain_size | Число | Нет | Определяет максимальную длину цепочек переноса или каскадирования в семействах микросхем ACEX1K, APEX20K, APEX II, ARM-based Excalibur, FLEX6000, FLEX10K и Mercury. Значение по умолчанию 8. Значение параметра имеет более высокий приоритет, чем эта же величина, установленная с помощью переменных окружения компилятора Carry Chain Length и Cascade Chain Length. Для микросхем других семейств изменение значения обеспечивает различные соотношения параметров устройства размер и быстродействие: меньшее значение chain_size дает в результате большую скорость, но и больший объем, и наоборот |
one_input_is_constant | Строка | Нет | Допустимые значения "yes", "no" и"unused". Обеспечивает лучшую оптимизацию, если один вход представлен константой. Значение по умолчанию "no" |
Таблица истинности модуля lpm_compare:
Входы | Выходы | ||||||
dataa[] | datab[] | alb | aeb | agb | ageb | aleb | aneb |
a | b | a < b | a = = b | a > b | a >= b | a <= b | a!= b |
Потребляемые модулем lpm_compare ресурсы: реализация 16-битного беззнакового компаратора на микросхемах семейства APEX20K может потребовать от 17 до 25 логических ячеек, в зависимости от типа оптимизации.
3.5. Двоичный дешифратор (lpm_decode)
Параметризированный двоичный дешифратор lpm_decode рекомендуется фирмой Altera для использования в случаях, когда размерность дешифрируемых данных не превышает 8. Кроме того, если в проекте используются лишь несколько отдельных выходов дешифратора, то рекомендуется применять компаратор lpm_compare с фиксированным значением на одном из входов.
Прототип модуля lpm_decode:
function lpm_decode(data[lpm_width-1..0], enable, clock, aclr, clken)
with (lpm_width, lpm_decodes, lpm_pipeline)
returns (eq[lpm_decodes-1..0]);
Входные порты модуля lpm_decode:
Имя порта | Необходи-мость | Описание | Примечание |
data[] | Да | Входные данные. Рассматриваются как двоичное число без знака | Разрядность определяется параметром lpm_width |
enable | Нет | Разрешение работы дешифратора. Если неактивен, то на всех выходах устанавливается 0 | Если не подключен, то значение по умолчанию 1 (активный) |
clock | Нет | Вход синхронизации для конвейерного режима | Обеспечивает синхронизацию при использовании конвейерного режима. Должен быть подключен при значении lpm_pipeline отличном от 0 (значение по умолчанию) |
aclr | Нет | Вход асинхронного сброса для конвейерного режима | В конвейерном режиме устанавливает все выходы в исходное состояние 0 |
clken | Нет | Вход разрешения синхронизации для конвейерного режима | Если не подключен, то значение по умолчанию 1 |
Выходные порты модуля lpm_decode:
Имя порта | Необходимость | Описание | Примечание |
eq[] | Да | Выходы дешифратора | Размерность определяется параметром lpm_decodes. Если data[] >= lpm_decodes, то значения всех выходов равны 0 |
Параметры модуля lpm_decode:
Параметр | Тип | Необходимость | Описание |
lpm_width | Число | Да | Разрядность входного порта data[] (разрядность дешифрируемых данных) |
lpm_decodes | Число | Да | Количество выходов дешифратора. Необходимо выполнение условия lpm_decodes <= 2 ^ lpm_width |
lpm_pipeline | Число | Нет | Определяет число тактов синхронизации, по прошествии которых устанавливается действительное значение выходов. Значение по умолчанию 0, что означает не конвейерный (не синхронизируемый) режим. Если установлено значение 0, то вход clock не должен быть подключен |
lpm_hint | Строка | Нет | Для применения в проектах на языке VHDL |
lpm_type | Строка | Нет | Для применения в проектах на языке VHDL |
Таблица истинности модуля lpm_decode:
Входы | Выходы | |
enable | data[lpm_width-1 .. 0] | eq[lpm_decodes-1 .. 0] |
0 | x | 0 |
1 | lpm_decodes-1 | 1 |
1 | lpm_decodes-2 | 0 |
. . . | . . . | . . . |
1 | 1 | 0 |
1 | 0 | 0 |
Дешифратор нормально функционирует при неподключенном входе enable.
Потребляемые модулем lpm_decode ресурсы: одна логическая ячейка на один выход при количестве выходов до 16 и две логические ячейки на один выход при большем количестве выходов.
4. Контрольная работа
Задачей контрольной работы является разработать на ПЛИС операционный (решающий) модуль схемотехнического устройства для обработки информации.
4.1. Общая схема вычислительной системы
На рис.15 представлена общая блок-схема вычислительной системы.
![]() |
Операционный или решающий модуль преобразует данные, поступающие из устройства ввода данных, и передает их для дальнейшего использования в устройство вывода данных.
Устройством ввода данных может служить любое устройство формирующее данные в формате пригодном для использования Операционным модулем. Им могут быть: клавиатура, аналого-цифровой преобразователь, модем линий связи. В нашем случае им является реальное или виртуальное устройство считывания кода ключа (ридер ключа).
Устройством вывода данных может быть любой потребитель информации, который либо непосредственно использует полученные от операционного модуля данные, либо передает их для хранения или дальнейшего преобразования. Устройствами вывода могут быть: принтер, дисплей, цифро-аналоговый преобразователь и др. В нашем случае им является реальный или виртуальный исполнительный механизм электрически управляемого замка, турникета и т. п.
4.2. Задание на контрольную работу
Цель работы – приобретение навыков использования языка AHDL прия разработке схемотехнического устройства для обработки информации. В качестве схемотехнического устройства рассматривается контроллер кодового замка в системе распределенного доступа.
Задание
1. Подготовить проект встраиваемого в ПЛИС модуля для вычисления заданной логической функции Y=Y(A, B,C, D), где A, B, C, D – биты вырабатываемые устройством считывания кода 4-х битового ключа, Y – сигнал управления исполнительным механизмом замка.
2. Осуществить компиляцию проекта в применении к микросхеме EP2C8Q208N8 семейства CYCLONE. Сформировать список цепей для функционального моделирования.
3. Подготовить файл временных диаграмм для моделирования, обеспечивающий демонстрацию 16-ти состояний 4-х битового ключа. Осуществить функциональное и временное моделирование контроллера кодового замка, построить «Таблицу истинности» для функции Y.
Содержание отчета о работе. Отчет должен содержать заголовочную часть с названием работы, фамилиями и именами исполнителей, номером учебной группы, датой выполнения работы. В содержательную часть необходимо включить: блок-схему алгоритма вычисления функции, модульную схему верхнего уровня проекта; схему операционного модуля контроллера кодового замка; схемы отдельных субмодулей, если используются; результаты моделирования работы операционного модуля и всех субмодулей; словесное описание работы схем контроллера.
Вопросы для защиты
1. Основные классы электронных приборов, предназначенных для разработки цифровых устройств. Особенности различных классов.
2. Особенности архитектур ПЛИС (CPLD, FPGA, SOPC).
3. Архитектура логической ячейки FPGA на примере CYCLONE.
4. Последовательность операций разработки устройства на основе схемного способа функционально-логического описания.
5. Примитивы логических функций САПР Quartus II (названия, условные обозначения, отечественные обозначения, функционирование).
6. Примитивы выводов САПР Quartus II (названия, условные обозначения, назначение, особенности применения).
7. Операторы языка AHDL.
8. Структура текстового описания модуля на языке AHDL.
4.3. Варианты индивидуальных заданий
Номер варианта контрольной работы определяется по формуле:
N =НЗК mod 20, где N – номер варианта, НЗК – номер зачетной книжки.
Вариант | Функция |
0 | Y=A*D*C+(A*D+A+(B+A*D*#C))+(B+A*D*C) |
1 | Y=D*C*B+(D*C+D+(A+D*#C*#B))$(A+D+D*C*B) |
2 | Y=B*A*D+(B+B+(C+B*A*D))$(#C+B+B*A*D) |
3 | Y=D*C*B+(D*C+D+(A+D*#C*#B))$(A+D+D*C*B) |
4 | Y=C*B+(C*B+C+(D+#C*#B))$(D+C+C*B) |
5 | Y=A*D*C+(A*D+A+(B+A*D*#C))$(B+A*D*C) |
6 | Y=D*C*B+(D*C+D+(A+D*#C*#B))$(A+D+D*C*B) |
7 | Y=B*A*D+(B+B+(C+B*A*D))$(#C+B+B*A*D) |
8 | Y=A*D*C+(A*D+A+(B+A*D*#C))$(B+A*D*C) |
9 | Y=C*B+(C*B+C+(D+#C*#B))$(D+C+C*B) |
10 | Y=B*A*D+(B+B+(C+B*A*D))$(#C+B+B*A*D) |
11 | Y=D*C*B+(D*C+D+(A+D*#C*#B))+(A+D+D*C*B) |
12 | Y=C*B+(C*B+C+(D+#C*#B))+(D+C+C*B) |
13 | Y=A*D*C+(A*D+A+(B+A*D*#C))+(B+A*D*C) |
14 | Y=C*B+(C*B+C+(D+#C*#B))+(D+C+C*B) |
15 | Y=B*A*D+(B+B+(C+B*A*D))+(#C+B+B*A*D) |
16 | Y=D*C*B+(D*C+D+(A+D*#C*#B))+(A+D+D*C*B) |
17 | Y=C*B+(C*B+C+(D+#C*#B))+(D+C+C*B) |
18 | Y=A*D*C+(A*D+A+(B+A*D*#C))+(B+A*D*C) |
19 | Y=D*C*B+(D*C+D+(A+D*#C*#B))+(A+D+D*C*B) |
Библиографический список
1. Глухих схемотехника. Технология внутрисхемного программирования. –Иркутск: Изд-во ИрГТУ,2001. –160 с.
2. Антонов описания цифровых устройств AlteraHDL: Практический курс. – М.: ИП РадиоСофт, 2001. –224 с.
3. Амосов и средства проектирования цифровых устройств. – СПб.: БХВ-Петербург, 2007. – 560с.
4. , , Филиппов автоматизированного проектирования фирмы Altera MAX+plus II и Quartus II: Краткое описание и самоучитель. – М.: ИП РадилСофт, 2002 – 352с.
5. ПЛИС фирмы «Altera»: элементная база, система проектирования и языки описания аппаратуры. – М.: Изд. дом «Додэка-XXI», 2002. – 576с.
6. , Глухих автоматы. –Иркутск: Изд-во ИрГТУ,2003. –71 с.
7. Бибило языка VHDL. М.: СОЛОН-Р, 20с.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |



