CUPL, part I

Ещё совсем недавно, лет 30 назад, ПЛИС были маленькими, а языки для их программирования простыми. Именно тогда и появился язык Cupl. Однако, если верить Хиллу и Хоровицу, он и сейчас является адекватным для программирования небольших ПЛИС.

Дабы не сваливаться в академические дебри начнём с конца. Возьмём на ebay-е программатор. Например TL866.
Там же возьмём ПЛИС: atf16v8b.
Или GAL16.
На сайте Atmel возьмём WinCUPL (это среда разработки для CUPL): ссылка (да, придётся чего-нибудь ввести).
На сайте автоэлектрика софт для программатора: ссылка. Зеркало.

После того, как всё скачано и установлено запускаем WinCUPL.
Сначала надо найти название нашей ПЛИС (если она у нас есть). Для этого идём в меню, Options -> Devices.
В открывшемся диалоге ищем свою ПЛИС:

DeviceSelection.png

и копируем её название (например, g16v8a).

Создаём проект в WinCUPL. Для этого идём в меню, File -> New -> Project. В диалоге со свойствами проекта зададим какие-нибудь свойства (не принципиально, важно лишь в поле device вписать название из предыдущего шага, или оставить virtual):

ProjectProperties.png

В следующих диалогах указываем количества пинов (8 входных и 8 выходных) и пиннодов (ноль) (число пинов можно посмотреть в самом первом диалоге, а пинноды не трогать вообще). В результате будет создан проект с текстовым описанием всего того, что мы ввели в диалоги.

Template.png

Теперь можно ввести простейший код:


Pin 2 = a;
Pin 3 = b;
Pin 19 = y;
y = a & b;

(Лишние пины я удалил, чтобы не мешали компиляции):

WinCupl.png

Сохраним и скомпилируем этот код (меню, Run -> Device Dependent Compile (F9)). В результате получится набор файлов, среди которых будет нужный нам ***.jed. (Файлы, почему-то, по умолчанию, подкладываются рядом с исполняемыми файлами среды разработки. А результат компиляции рядом с исходными файлами.)

Его то мы и прошьём. Запускаем MiniPro, жмём кнопку Select IC, выбираем правильную ПЛИС, жмём Select:

MiniPro.png

Открываем файл с прошивкой: меню -> File -> Open, выбираем файлик Name.jed

Подключаем программатор в USB, в нижней строчке появится его название. Жмём кнопку Information и смотрим, как правильно вставить микросхему в программатор:

MiniPro_Info.png

Вставляем микросхему в колодку программатора, идём в меню -> Device -> Program, в диалоге жмём Program. Если всё прошло удачно, видим надпись Programming successful ! 🙂

Chip Program.png

BurnAnd.jpg

Вуаля! У нас есть логический элемент. Самое время его проверить:

TestAnd.jpg

Что внутри?

В принципе, ПЛИС 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-триггер), перед которыми стоит пропорциональное число элементов ИЛИ.

Внутренняя схема выглядит так:

ATF16V8_sch.png

Эти ПЛИС являются многократно программируемыми (в отличии, например, от PAL16), поэтому можно смело экспериментировать!

To be continued…

[1]: Описание ATF16V8B: Ссылка