Ещё совсем недавно, лет 30 назад, ПЛИС были маленькими, а языки для их программирования простыми. Именно тогда и появился язык Cupl. Однако, если верить Хиллу и Хоровицу, он и сейчас является адекватным для программирования небольших ПЛИС.
Дабы не сваливаться в академические дебри начнём с конца. Возьмём на ebay-е программатор. Например TL866.
Там же возьмём ПЛИС: atf16v8b.
Или GAL16.
На сайте Atmel возьмём WinCUPL (это среда разработки для CUPL): ссылка (да, придётся чего-нибудь ввести).
На сайте автоэлектрика софт для программатора: ссылка. Зеркало.
После того, как всё скачано и установлено запускаем WinCUPL.
Сначала надо найти название нашей ПЛИС (если она у нас есть). Для этого идём в меню, Options -> Devices.
В открывшемся диалоге ищем свою ПЛИС:
и копируем её название (например, g16v8a).
Создаём проект в WinCUPL. Для этого идём в меню, File -> New -> Project. В диалоге со свойствами проекта зададим какие-нибудь свойства (не принципиально, важно лишь в поле device вписать название из предыдущего шага, или оставить virtual):
В следующих диалогах указываем количества пинов (8 входных и 8 выходных) и пиннодов (ноль) (число пинов можно посмотреть в самом первом диалоге, а пинноды не трогать вообще). В результате будет создан проект с текстовым описанием всего того, что мы ввели в диалоги.
Теперь можно ввести простейший код:
Pin 2 = a;
Pin 3 = b;
Pin 19 = y;
y = a & b;
(Лишние пины я удалил, чтобы не мешали компиляции):
Сохраним и скомпилируем этот код (меню, Run -> Device Dependent Compile (F9)). В результате получится набор файлов, среди которых будет нужный нам ***.jed. (Файлы, почему-то, по умолчанию, подкладываются рядом с исполняемыми файлами среды разработки. А результат компиляции рядом с исходными файлами.)
Его то мы и прошьём. Запускаем MiniPro, жмём кнопку Select IC, выбираем правильную ПЛИС, жмём Select:
Открываем файл с прошивкой: меню -> File -> Open, выбираем файлик Name.jed
Подключаем программатор в USB, в нижней строчке появится его название. Жмём кнопку Information и смотрим, как правильно вставить микросхему в программатор:
Вставляем микросхему в колодку программатора, идём в меню -> Device -> Program, в диалоге жмём Program. Если всё прошло удачно, видим надпись Programming successful ! 🙂
Вуаля! У нас есть логический элемент. Самое время его проверить:
Что внутри?
В принципе, ПЛИС atf16v8 является аналогом GAL16v8 (“The most suitable replacements for the GAL16V8 from Atmel are the ATF16V8B/BQL and ATF16V8C/CZ. They are pin-to-pin and JEDEC fusemap compatible.” (c) Atmel).
Внутри умещается восемь многовходовых элементов И (или более сложных макроячеек, которые в регистровом режиме превращаются в D-триггер), перед которыми стоит пропорциональное число элементов ИЛИ.
Внутренняя схема выглядит так:
Эти ПЛИС являются многократно программируемыми (в отличии, например, от PAL16), поэтому можно смело экспериментировать!
To be continued…
[1]: Описание ATF16V8B: Ссылка