====== Plog - язык для програмируемой логики ====== (Старые версии: [[plog-2007-01-08 | 2007-01-08]]) Идея состоит в построении процедурного Си-подобного языка, который бы однозначным образом компилировался в Верилог. Язык Си часто называют высокоуровневым ассемблером. В этом есть определенная сермяжная правда: опытный программист хорошо представляет себе, в какие ассемблерные конструкции превращается Си-шный код. Нечто аналогичное хочется проделать с Верилогом. Отличие разработки на Верилоге от традиционного программирования состоит в существенно более высоком уровне параллелизма. Система создается как некоторое количество конечных автоматов, фукнционирующих одновременно. Каждый из конечных автоматов имеет несколько десятков, реже - сотен состояний. Количество таких автоматов - тысячи и десятки тысяч. Традиционная же программа представляет собой один конечный автомат, имеющий сотни тысяч и миллионы состояний. Каждое значение регистра адреса команды (PC) есть одно состояние конечного автомата. Иногда программа может состоять из нескольких конечных автоматов, если в ней используются потоки. Представляется интересным проект языка --- надстройки над Верилогом, позволяющего писать программы в процедурном стиле, но оставляющего свободу доступа к низкому уровню для инженера-электроника. В качестве учебного проекта рассмотрим пешеходный светофор. ===== Проект пешеходного светофора ===== Имеем следующее оборудование: * светофор для автомобилей, три сигнала: красный, желтый, зеленый * светофор для пешеходов, два сигнала: стойте, идите * кнопка запроса на переход для пешехода * служебная кнопка сброса светофора в исходное состояние * генератор импульсов, задающий время В обычном состоянии автомобильный светофор должен быть открыт (зеленый), а пешеходный - закрыт (красный). По нажатию пешеходной кнопки светофоры должны переключиться, открыв пешеходный переход, затем вернуться в исходное состояние. Проектируемый модуль имеет три входа и пять выходов:
          ________
   rst ---|      |--- red
   clk ---|      |--- yellow
	  |      |--- green
	  |      |
button ---|      |--- stop
	  |      |--- walk
	  |______|
Фазы светофора:
  * Зеленый для автомобилей, "стойте" для пешеходов. Обычное состояние при отсутствии пешеходов.
  * Мигает зеленый для автомобилей, горит "стойте" для пешеходов. Включается через некоторое время (не более 30 секунд) после нажатия кнопки запроса. Длится три секунды.
  * Жёлтый для автомобилей, "стойте" для пешеходов. Длится три секунды.
  * Красный для автомобилей, "идите" для пешеходов. Длится десять секунд.
  * Красный для автомобилей, мигает "идите" для пешеходов. Длится три секунды.
  * Жёлтый+красный для автомобилей, "стойте" для пешеходов. Длится одну секунду.
==== Пример ====
"Примерная" реализация светофора на языке Plog приведена
[[tlight-plog | в файле tligt-plog]].
Спецификация языка еще не готова, пока только образец кода.
После компиляции должен получиться код на Верилоге
примерно следующего вида: [[tlight-v]].
===== Вспомогательные ссылки =====
  * [[http://www.lysator.liu.se/c/ANSI-C-grammar-y.html | Yacc-грамматика языка Си]]
  * [[http://www.verilog.com/VerilogBNF.html | Грамматика языка Верилог]]
  * [[http://www.sutherland-hdl.com/on-line_ref_guide/vlog_ref_body.html | On-line Verilog quick reference]]