Модели триггеров. Динамическое управление записью, страница 5

Подпись: Входы	Старое состояние	Новое состояние	Режим
работы
C	S	R	QOLD	NQOLD	QNEW	NQNEW	
0	*	*	0/1	1/0	0/1	1/0	Хранение
1	0	0	0/1	1/0	0/1	1/0	Хранение
1	0	1	*	*	0	1	Сброс
1	1	0	*	*	1	0	Установка
1	1	1	*	*	1	1	Запрещённый режим (ЗР)
1	0	0	1	1	Случайное
поведение	Выход из ЗР в режим хранения
0	*	*	1	1	Случайное
поведение	Выход из ЗР в режим хранения
Разновидности описаний для поведенческих моделей нам уже известны – это булевские уравнения (аналитические модели) и алгоритмические описания в виде блок-, граф- или операторных схем (имитационные модели). Возможно также словесное или табличное описание поведения объекта, например - логические таблицы.

Графическое описание в данном примере представляет собой функциональную схему (рис.5,а), на которой в обязательном порядке должны быть проставлены уникальные имена элементов (DD1…DD4) и цепей (INP1, INP2, ADR, F1, F2, F3, OUT1).


Текстовое описание (рис. 5,б) составлено по функциональной схеме в виде системы булевских уравнений (они записаны в формате языка VHDL). Обратите внимание, что в описании отсутствуют имена элементов DD1…DD4. Это означает, что структура объекта представлена списком цепей, а точнее сигналов, действующих на данных цепях. Тем не менее, неявно элементы присутствуют в описании, ведь именно они определяют функции not, and и or, выполняемые над сигналами.

Существует ещё один альтернативный способ описания структуры, которая задаётся списком элементов в явном виде, а цепи указываются неявно. И только по одинаковым именам сигналов можно понять, что они действуют на одной и той же цепи, то есть в действительности эти точки соединены электрическим проводником. В качестве примера такого описания назовём SPICE-описание структуры в САПР DesignLab 8 (разговор о нём ещё впереди).


Рис.5. Способы структурного описания цифрового мультиплексора

Для наглядности представим «список» элементов сначала в графической форме (рис.5,в), а затем преобразуем его в табличное описание (рис.5,г). Такое описание кажется менее наглядным, но оно легко транслируется во внутреннюю структуру данных (в связный список) и потому удобно для компьютерной обработки.

Показанная на рис.5,г таблица хороша только для визуального восприятия. При попытке программной реализации обнаруживаются все её недостатки и, прежде всего, неэффективное использование оперативной памяти «по максимуму» (ориентация на максимальное число элементов, максимальное число входов, максимальную длину имени).

Для создания гибких структур данных, то есть таких структур, размеры и организация которых динамически изменяются, очень удобно использовать указатели (ссылки). Характерным примером такой структуры являются уже упоминаемые нами вскользь связные списки.

На рис.6 показано использование указателей для связывания списков элементов и списков сигналов (соединений). В отличие от таблицы, показанной на рис.5,г, в двух правых столбцах указываются не имена сигналов, а только их адреса (номера строк) в таблице соединений.


Рис.6. Табличное описание цифрового мультиплексора с использованием указателей

Например, для элемента DD1 по ссылке 3 легко найти имя сигнала ADR, действующего на его входе, а по ссылке 4 – имя выходной цепи F1, на которую работает данный элемент.

В таблице соединений задаётся полный список всех цепей, включая входы INP1, INP2, ADR, выход OUT1 и внутренние связи F1, F2, F3. Здесь же могут храниться и текущие значения сигналов для всех цепей (столбец 3).

В принципе приведённой информации вполне достаточно, чтобы промоделировать работу любой схемы. Простейшие способы моделирования (лекция 10) предлагают обрабатывать все элементы схемы в том порядке, как они записаны в таблице элементов.

Моделятор выбирает из таблицы первый элемент с именем DD1, находит имя сигнала ADR на его входе и его текущее значение ADR = 1. Затем он выясняет тип этого элемента и вызывает соответствующую подпрограмму INVR, передавая в неё входные данные. Отработав, подпрограмма возвращает моделятору вычисленное значение выходного сигнала, которое он присваивает выходной цепи F1.

Затем из таблицы считывается имя следующего элемента DD2, и повторяются те же самые действия, пока не будет исчерпан весь список. После этого модельное время продвигается на один шаг (такт) и моделятор выполняет следующий цикл, обрабатывая реакцию схемы на новый набор входных данных.