Тема 4. Изучение потокового стиля описания
Цель:исследование процесса моделирования схем
Теоретические сведения.
Электрические сигналы играют ключевую роль в действии электронных элементов. Фактически трудно вообразить прибор, который не посылает или не получает некоторые сигналы. По этой причине сигналы – наиболее существенные объекты любого электронного прибора. В языке VHDL сигналы играют важную роль в описании связи между узлами или блоками. В отличие от переменных в классических языках программирования VHDL-сигналы содержат информацию о прошлых, настоящих и будущих значениях. Эта информация называется историей сигнала. Она позволяет проводить анализ временных зависимостей внутри VHDL системы.
Описание объекта проекта на языке VHDL имеет типовую структуру и содержит две части:
объявление объекта (entitydeclaration) и
определение архитектуры (architecturedefinition)
В декларативной части (entitydeclaration) описывают связи объекта с внешним миром – входы и выходы объекта. Это, прежде всего, спецификация интерфейса описываемого объекта. В описании архитектуры (architecturedefinition) определяют функцию (поведение) либоструктуруобъекта. Рис.4.1 иллюстрируетэтотпринцип.
Рис. 4.1 – Графический вид структуры объекта проекта
В текстовом файле на языке VHDLобъявление объекта (entitydeclaration) и определение архитектуры (architecturedefinition) разделены, как это показано на рис. 4.2.
Рис. 4.2 – Общий вид файла программы на языке VHDL
Объявление объекта в языке VHDL можно считать «оболочкой» архитектуры, скрывающей детали того, что находится внутри, но обеспечивающей «зацепки» для других модулей, использующих данный модуль. Эта идея служит основой иерархического подхода к проектированию систем: архитектура верхнего уровня может использовать (или «обрабатывать») другие объекты, оставляя архитектурные детали объектов нижнего уровня скрытыми от объектов более высокого уровня.
В табл. 4.1 представлен синтаксис объявления объекта. Целью объявления объекта, помимо присвоения объекту имени, является определение сигналов внешнего интерфейса или портов (ports) в части объявления объекта, которая называется объявлением портов (portdeclaration).
Табл. 4.1 –Синтаксис объявления объекта на языке VHDL
entityentity-name is
port(signal-names : mode signal-type;
signal-names : mode signal-type;
. . .
signal-names : mode signal-type);
endentity-name;
Обратите внимание, что после заключительного signal-type нет точки с запятой; изменение порядка следования закрывающей скобки и точки с запятой после нее - типичная синтаксическая ошибка программиста, начинающего писать на языке VHDL.
Кроме ключевых слов entity, is, port и end, объявление объекта содержит следующие элементы:
entity-name | выбираемоепользователемимяобъекта; | |
signal-names | список выбираемых пользователем имен сигналов внешнего интерфейса, состоящий из одного имени или из большего числа имен, разделенных запятой; | |
Mode | одно из четырех зарезервированных слов, определяющих направление передачи сигнала: | |
in | сигналнавходеобъекта; | |
out | сигнал на выходе объекта; заметьте, что значение такого сигнала нельзя «прочитать» внутри структуры объекта; он доступен только объектам, использующим данный объект; | |
buffer | сигнал на выходе объекта; в отличие от сигнала out его значение можно читать также внутри структуры данного объекта; | |
inout | сигнал, который может быть входным или выходным для данного объекта; обычно этот режим используется применительно к входам/выходам схем с тремя состояниями; | |
signal-type | встроенный или определенный пользователем тип сигнала. |
Каждому сигналу (а также переменной и константе) в программе на языке VHDL необходимо поставить в соответствие тип (type). Типом определяется множество или диапазон значений, которые может принимать данный элемент, и обычно имеется набор операторов (таких как сложение, логическое ИЛИ и т.д.), связываемых с данным типом.
Поскольку язык VHDL используется для представления аппаратных проектов в самых разных вариантах, средства типизации данных приобретают здесь особо важное значение. Например, они дают разработчику возможность представить группу проводников шины в виде:
- массивабитов,
- целогочисла.
В языке VHDL есть несколько предопределенных типов (predefinedtypes), которые поддерживают программы синтеза;они перечислены в табл. 4.2. В дальнейшем в пособии будут использованы только следующие предопределенные типы: bit, bit_vector и integer.
Табл. 4.2 – Предопределенные синтезируемые типы данных языка VHDL
bitboolean character
bit_vector integer
О правилах записи программы. Как и в других языках программирования, в языке VHDL пробелы и переходы с одной строки на другую в общем случае игнорируются, и для удобства чтения их можно вставлять как угодно.Комментарии начинаются с двух дефисов (--)и заканчиваются концом строки. В языке VHDL определено много специальных строк символов, называемых зарезервированными словами или ключевыми словами. В приведенном примере имеется несколько ключевых слов: entity, port, is, in, out, to, downto, range, end.Здесь и далее зарезервированные слова выделяются жирным шрифтом.Определяемые пользователем идентификаторы начинаются с буквы и содержат буквы, цифры и подчеркивания. Символ подчеркивания не может следовать за другим символом подчеркивания и не может быть последним символом идентификатора. В данном примере идентификаторами являются MUU_125, R, CLK, KOP, SNO, F, Y, P, CS, SKO, TPO. Зарезервированные слова и идентификаторы не чувствительны к регистру.
В языке VHDL под описанием архитектуры понимают описание функционирования специфицируемого объекта. Если декларативная часть описания объекта определяет его внешнее представление, задает интерфейсную спецификацию объекта, вводит имя объекта и входы/выходы ("порты", в терминах VHDL), то описание архитектуры задает его содержательное наполнение, спецификацию функциональной и временной работы описываемого объекта.
Внутренняя работа объекта задается его определением архитектуры (architecturedefinition), синтаксис которого в общем случае имеет вид, указанный в табл. 4.4.
Табл. 4.4 – Синтаксисопределенияархитектуры
architecturearchitecture-name ofentity-name is
type declarations
signal declarations
constant declarations
function definitions
procedure definitions
component declarations
Begin
concurrent-statement
. . .
concurrent-statement
endarchitecture-name;
Имя объекта (entity-name) в этом определении должно быть таким же, какое раньше было присвоено объекту в объявлении объекта. Этим самым связывается декларативная и архитектурная части описания объекта.
Имя архитектуры (architecture-name) –это выбираемый пользователем идентификатор, обычно так или иначе связанный с именем объекта; при желании имя архитектуры может быть тем же самым, что и имя объекта.
У архитектуры могут быть также сигналы и другие объявления, являющиеся для нее локальными, подобно тому, как это имеет место в других языках высокого уровня.
В данном пособии нас будет интересовать только объявление сигнала (signaldeclaration). Объявление сигнала сообщает ту же самую информацию о сигнале, какую содержит объявление порта, за исключением того, что вид сигнала (in, out, buffer, inout) не задается:
signalsignal-names : signal-type;
Параллельные операторы
В формате описания архитектуры объекта, секция параллельных операторов {concurrent_statement} содержит один или несколько параллельно выполняющихся операторов, с помощью которых задают зависимость выходных сигналов от входных.
Параллельные операторы это такие, каждый из которых выполняется при любом изменении сигналов, используемых в качестве его исходных данных. Результаты исполнения параллельного оператора доступны для других параллельных операторов не ранее, чем будут выполнены все операторы, инициализированные общим событием. Исполнение параллельных операторовинициируется не по последовательному, а по событийному принципу, т.е. они исполняются тогда, когда реализация других операторов программы создала условия для их исполнения. Таким образом, правило моделирования состоит в том, что в случае, когда последним оператором в теле VHDL-архитектуры изменяется сигнал, используемый в первом параллельном операторе данной архитектуры, программа должна вернуться назад к первому оператору и скорректировать его результаты, приведя их в соответствие с только что изменившимся сигналом. Такой режим исполнения заметно отличается от последовательного выполнения операторов в программном обеспечении, написанном на одном из обычных языков программирования.
Параллельные операторы представляют части алгоритма, которые в реальной системе могут исполняться одновременно. Эти части взаимодействуют между собой и с окружением проектируемой системы.
Последовательность записи параллельных операторов в теле архитектурного описания значения не имеет. Порядок выполнения (или, как говорят обычно, в параллельных вычислениях – порядок срабатывания параллельных операторов) определяется не порядком текстуальной записи операторов между begin и end, а другими правилами. Основным принципом здесь является управление от потока изменений сигналов, входных для параллельного оператора. Изменение значения сигнала, являющегося входным для параллельного оператора, запускает срабатывание данного оператора (т.е. акт выполнения оператора).
Основным параллельным оператором является оператор сигнального присваивания (concurrentsignal-assignmentstatement). Его можно прочесть так: «Сигнал с именем signal-nameпринимает значение выражения expression». Присвоение значения сигналу задают составным оператором “<=”. Логические операторы and, or, nand, nor, xor, хnоr имеют одинаковое старшинство и выполняются слева направо в выражениях. В сложных логических выражениях порядок выполнения операторов регулируется скобками.
В листинге 4.2 представлена архитектура объекта для дешифратора, записанная в потоковой форме.
Листинг 4.2 – Потоковая архитектура для дешифратора
entity DECODER is
port (
A0,A1,E: in BIT;
D0,D1,D2,D3: out BIT
);
end DECODER;
architectureDECODER_archof DECODER is
Begin
D0 <= not A0 andnot A1 and E;
D1 <= A0 and not A1 and E;
D2 <= not A0 and A1 and E;
D3 <= A0 and A1 and E;
endDECODER_arch;
Задание для самостоятельной работы
1. Построить потоковое описание схемы по алгебраическому представлению реализуемых комбинационной схемой функций из темы 3.
2. Осуществить вычисления, задаваемые этим описанием.