Перейти к содержанию
    

Комбинаторика: сочетания из n по 2 на Verilog

Изредка возникает необходимость в вычислении сочетаний из n элементов по m в группе, причём, чаще всего m=2. Чистая комбинаторика. Калькулятор в руки и за дело - один факториал делим на произведение двух других. А если нужно расписать сами сочетания? Тоже не проблема - составляем программулю на любом знакомом алгоритм. языке. Вот только загвоздка в том, что я уже забыл, где моя C-среда находится и чего в ней нажимают, создавая проекты, а из Verilog_а не вылезаю.

Для таких же приведу модуль create_binions, вычисляющий число и выдающий сами сочетания из n элементов по 2, написанный на Verilog. Ограничение: число элементов множества не должно быть больше 26. Пользуйтесь..

 

Схемотехническое применение сочетаний из n элементов по 2.

Допустим, у вас стоит задача адресации некоторого числа А абонентов, представляющих собой ячейки (разъёмы) или корпуса ПЛИС, причём, адрес абонента зависит только от его места расположения без всяких заданий адреса в самом абоненте (джампера и пр.), т.е, географическая что ли, по-научному, адресация. Обычно задача решается пибо выделением каждому абоненту своего CS, что расточительно при А > 8, либо кодированием адреса на проводах с использованием инверсных линий (проводной дешифратор).

В сдучае проводного дешифратора разрядность адресной шины K = 2D, должна удовлетворять равенству 2**D >= A, число контактов разъёма (ПЛИС) будет равно D, а функция, реализующая дешифратор, будет Fdc = &D. Но и 2D проводов и D контактов кажется расточительством.

Более щадящие цифры получаются в проводном дешифраторе, имеющим кодировкой сочетания из D по 2. Число контактов разъёма (ПЛИС) будет всегда равно 2, а число проводов D тоже уменьшится. Повычисляем немного (хотя бы с помощью модуля create_binions) C[D/2] = A :

C[4/2] = 6 (для дешифр. с инверсными линиями при K=2D=4, A = 4),

C[5/2] = 10,

C[6/2] = 15 (для дешифр. с инверсными линиями при K=2D=6, A = 8),

C[7/2] = 21,

C[8/2] = 28 (для дешифр. с инверсными линиями при K=2D=8, A = 16).

Дальнейшее увеличение D ещё больше увеличивает разницу, а кроме того, появились промежуточные значения с нечётным числом проводов! Такой вот "бином Ньютона".

binion_v.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...