August 26, 2011

LUT-мультиплексор

   Задача: реализовать в ПЛИС мультиплексор, описав его структурную модель, использующую только LUT. В мультиплексоре 8 входов данных. 


    Вроде, задача, как задача. Ничего особенного. В распоряжении LUT с количеством входов о 6-ти. Чтобы не расточать ресурсы ПЛИС, воспользуемся 2-мя LUT с 6-ю входами и 1-й LUT с 3-мя входами. В 1-ю LUT6 идут младшие 2 линии адреса и младшие 4 линии данных. Во вторую - те же линии адреса и старшие 4 линии данных. Конечный результат определяем с помощью LUT3, на которую подаются выводы LUT6 и старшая линия адреса.


    Самое сложное - это задать "маску" для 6-ти входовой LUT.  Необходимо учесть 2^6=64 всевозвожных комбинаций - дело нудное, пахнущее мелкими ошибками и кучей расплывающихся в глазах цифр. Не зря сразу хочется плюнуть и описать поведенческую модель вместо структурной. Намного проще ведь. Но это не наш метод. Да и производитель ПЛИС советует использовать одну большую LUT вместо нескольких меньших. Склепав таблицу истинности для LUT6, запишем её маску:
# HEX:
0xFEDCBA9876543210
# BIN:
1111111011011100101110101001100001110110010101000011001000010000
    Маска для LUT3 несколько короче:
# HEX:
0xE4
# BIN:
11100100

   И теперь проведем тест:
  1. устанавливаем адрес
  2. подаём сигнал только на вход по этому адресу
  3. подаём сигнал на все входы, кроме этого адреса
  4. подаём сигнал на все входы
  5. убираем все сигналы
  6. повторяем п 1-5 для каждого адреса (всего 8 раз)
    Смотрим диаграмму результата:


    Вуаля, "It works!", а значит, маска для LUT6 определена верно и ею можно дальше смело пользоваться.

    Если в распоряжении есть LUT с количеством входов только до 4, то можно использовать 7 LUT3:


    Видно 3 вертикальных каскада. Каждый каскад работает с одним битом адреса. 1-й - с младшим, 2-й - со вторым, 3-й - со старшим. Тесты проходятся аналогично.

    Исходники мультиплексора и теста в архиве. В файле с описанием первого приведены 2 описания архитектуры.

No comments:

Post a Comment