Table of Contents
Plog - язык для програмируемой логики
(Старые версии: 2007-01-08)
Идея состоит в построении процедурного Си-подобного языка, который бы однозначным образом компилировался в Верилог.
Язык Си часто называют высокоуровневым ассемблером. В этом есть определенная сермяжная правда: опытный программист хорошо представляет себе, в какие ассемблерные конструкции превращается Си-шный код. Нечто аналогичное хочется проделать с Верилогом.
Отличие разработки на Верилоге от традиционного программирования состоит в существенно более высоком уровне параллелизма. Система создается как некоторое количество конечных автоматов, фукнционирующих одновременно. Каждый из конечных автоматов имеет несколько десятков, реже - сотен состояний. Количество таких автоматов - тысячи и десятки тысяч.
Традиционная же программа представляет собой один конечный автомат, имеющий сотни тысяч и миллионы состояний. Каждое значение регистра адреса команды (PC) есть одно состояние конечного автомата. Иногда программа может состоять из нескольких конечных автоматов, если в ней используются потоки.
Представляется интересным проект языка — надстройки над Верилогом, позволяющего писать программы в процедурном стиле, но оставляющего свободу доступа к низкому уровню для инженера-электроника.
В качестве учебного проекта рассмотрим пешеходный светофор.
Проект пешеходного светофора
Имеем следующее оборудование:
- светофор для автомобилей, три сигнала: красный, желтый, зеленый
- светофор для пешеходов, два сигнала: стойте, идите
- кнопка запроса на переход для пешехода
- служебная кнопка сброса светофора в исходное состояние
- генератор импульсов, задающий время
В обычном состоянии автомобильный светофор должен быть открыт (зеленый), а пешеходный - закрыт (красный). По нажатию пешеходной кнопки светофоры должны переключиться, открыв пешеходный переход, затем вернуться в исходное состояние.
Проектируемый модуль имеет три входа и пять выходов:
________ rst ---| |--- red clk ---| |--- yellow | |--- green | | button ---| |--- stop | |--- walk |______|
Фазы светофора:
- Зеленый для автомобилей, “стойте” для пешеходов. Обычное состояние при отсутствии пешеходов.
- Мигает зеленый для автомобилей, горит “стойте” для пешеходов. Включается через некоторое время (не более 30 секунд) после нажатия кнопки запроса. Длится три секунды.
- Жёлтый для автомобилей, “стойте” для пешеходов. Длится три секунды.
- Красный для автомобилей, “идите” для пешеходов. Длится десять секунд.
- Красный для автомобилей, мигает “идите” для пешеходов. Длится три секунды.
- Жёлтый+красный для автомобилей, “стойте” для пешеходов. Длится одну секунду.
Пример
“Примерная” реализация светофора на языке Plog приведена в файле tligt-plog. Спецификация языка еще не готова, пока только образец кода.
После компиляции должен получиться код на Верилоге примерно следующего вида: tlight-v.