Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Программируемые логические схемы и их применение»

Изыскания в области индикации состояний цифрового автомата.

Отправлено wukrly 25 января 2008 г. 20:00


Симулятор Квартуса «видит» состояние цифрового автомата не зависимо от того, находится ли цифровой автомат на отлаживаемом уровне или погружен в какой-либо элемент. Внимание! При вызове состояния ЦА на индикацию надо пользоваться фильтром “Design Entry (all names)” окна “Node Folger”. Для упрощения поиска пользуемся маской *имя*, где имя – это имя цифрового автомата.
Я экспериментировал на несложном проекте, схема управления которого размещена в субпроекте ca_FN. Я обычно так делаю, чтобы не загромождать проект «излишними тонкостями». Однако в этом случае окончательная отладка схемы управления производится совместно с отладкой основной части. Т.е. в процессе работы с основным проектом необходимо следить за состоянием устройства управления.
Устройство управления описывается в субпроекте следующим образом:

fca: MACHINE OF BITS (faa5, faa4, faa3, faa2, faa1)
WITH STATES (a0 = B"00000",
a1 = B"10001",
a2 = B"10010",
a3 = B"10100",
a4 = B"01000");

Цифровой автомат имеет имя fca, включает биты faa5 – faa1, имеет состояния a0 – a4, используется двоичная кодировка пользователя, коды представлены выше.
Моделируем работу ЦА на нижнем уровне, все в порядке. Состояния индицируются как задумано – a0 – a4.
Переходим на уровень выше. Теперь состояние цифрового автомата находится под именем ca_FN.. ..fca. Размещаем его в окне моделирования и прогизводим моделирование. На поле состояния a2 светится надпись Undefined, на поле состояния a4 – a0. Продеклари-рованные возможности работы с состояниями работают неправильно. Пакет отвечает сообщениями:
Warning: Can't display state machine states -- register holding state machine bit "|FilterY1b|ca_FN:inst7|faa4" was synthesized away
Warning: Can't display state machine states -- register holding state machine bit "|FilterY1b|ca_FN:inst7|faa2" was synthesized away
Не найдены биты faa2, faa4, попытается разобраться, что произошло с проектом. Для этого в окне Node Folger устанавливаем фильтр на Register post-fitting, а маску поиска на *faa*. В проекте найдены все биты faa, но кроме того, появились 2 новых бита, которые имеют приставку ~_Dublicate. Для выяснения, которые биты «фиктивные», а какие нет, переносим эти биты в окно моделирования и повторяем моделирование. В результате видим, что биты с приставками остались, а биты без приставок оказались фиктивными и были удалены с поля. О чем в окне сообщений появились соответствующие сообщения.
Warning: Compiler packed, optimized or synthesized away node "ca_FN:inst7|faa2". Ignored vector source file node.
Warning: Compiler packed, optimized or synthesized away node "ca_FN:inst7|faa4". Ignored vector source file node.
Вывод – все очень просто, пакет при трансляции переназвал два бита, а симулятор их затем не нашел. Нам повезло, что в новом названии присутствует «зацепка», по которой мы определили название. Иногда это сделать достаточно сложно.

Конференция говорит, что если вывести состояния ЦА на виртуальные ПИНЫ, то все исправится. Проводим соответствующий эксперимент. Для этого на нижнем уровне меняем описание ЦА следующим образом:
fca: MACHINE OF BITS (faa [5..1])
В шапке подпроекта добавляем выход: faa[5..1] : output;
Транслируем субпроект, затем в окне Assignments Editor => all находим выходы faa и всем им в поле Assignment Name присваиваем значения Virtual Pin, а в поле Value - значение On. Повторно транслируем субпроект.
В основном проекте в шапке и на рабочем поле, соответственно, добавляем строки:
faa[5..1] : output;
faa[] = caF.faa[5..1];
Транслируем проект, в окне Assignment Editor этим выходам также присваиваем значения Virtual Pin. Повторно транслируем проект. Моделируем, проект отвечает сообщениями:
Warning: Can't display state machine states -- register holding state machine bit "|filterYN|ca_FN:caF|a4" was synthesized away
Warning: Can't display state machine states -- register holding state machine bit "|filterYN|ca_FN:caF|a2" was synthesized away
На позициях индикации состояний a2 и a4 светится надпись Undefined. Стало немного лучше, по крайней мере вместо a4 светится Undefined, а не a0. Т.е. для индикации состояния ЦА ничего не поменялось, проект не понимает, что появившиеся новые имена faa эквивалентны битам автомата.
В поле симуляции появилась группа faa. Попробуем воспользоваться ей для определения состояния ЦА, сравнивая машинные коды, индицируемые в этой группе, с кодами в листинге. ВОТ ТУТ ПРОКОЛ, коды в этом поле перевернуты относительно исходного текста. Глянем на текст, представленный выше , Например, состояние a2 кодируется двоичным кодом 10010, причем первая единица воспринимается как старший бит. Пакет независимо от порядка объявления бит строит группу, считая первый бит младшим. В результате в поле моделирования коды в группе faa светятся инверсно относительно исходного текста.
Данную ситуацию может исправить только такой вариант построения подпрограммы ca_FN: В шапке – объявление faa[5..1] : output;
В объявлении ЦА fca: MACHINE OF BITS (fa5, fa4, fa3, fa2, fa1)
В тексте подпрограммы faa[5] = fa1;
faa[4] = fa2;
faa[3] = fa3;
faa[2] = fa4;
faa[1] = fa5;

ВЫВОД: В общем понятно, куда двигаться, но жалко, что через ЖОПУ.
Есть ли у кого дополнения, изменения или возражения?


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 234:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru