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:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 |


