Главная
Новости рынка
Рубрикатор



Архив новостей -->



 



   

Ю. Хапочкин

Суета вокруг RESETa. Или ответ на незаданные вопросы

От Редакции

Вскоре после выхода из печати “Chip News” № 1 в редакцию пришло письмо.

Здравствуйте редакция,
прочитал статью «Технический минимум пользователя САПР MAX+PLUS II» в № 1 за 2001 год, и у меня возникло недоумение.
Фактические ошибки:
1. Временные диаграммы (рис. 2 и 3) просто неправильные, так как при RESET = “1” машина состояний будет сброшена.
2. Если установить RESET = “0”, то симулятор абсолютно корректно симулирует работу машины состояний. Проверено на двух разных версиях MAX+PLUS II.
Соответственно, вызывает большие сомнения квалификация автора, допускающего столь грубые ошибки. А также падает престиж вашего, весьма уважаемого мною, журнала.
Думаю, стоило бы в одном из последующих номеров опубликовать “уточнения” к данной статье. Так как наверняка не я один заметил подобное несоответствие.
С уважением, Юрий Хапочкин.

Понимая, что сугубо специальные ошибки или неточности, которые действительно встречаются в присылаемых материалах, нам никогда полностью не “выловить”, мы решили обратиться за комментариями к автору статьи. Однако, пока мы ожидали ответ, пришло ещё одно письмо.

Уважаемая редакция.
Уверен, что Вы уже получили подобные письма, тем не менее считаю своим долгом написать Вам, а не звонить тов. Лобанову.
Причина следующая. В журнале CHIP NEWS #1 2001 в статье тов. Лобанова “Технический минимум пользователя САПР MAX+plus II” содержится неверная информация об указанном пакете. Цитирую: “Симулятор и в данном случае подтвердил промашку фирмы. После анализа огрехов фирмы ALTERA был найден способ автоматического решения проблемы. Это фундаментальная ошибка, поскольку она не позволяет использовать формальный синтез МПА”.
Мой опыт работы с MAX+plus II — две недели. Однако такой ошибки в MAX-е я не нашёл (что, конечно, не означает её отсутствие). Однако я сразу нашёл ошибку тов. Лобанова. Состоит она в том, что активным уровнем сброса является высокой уровень, а не низкий, как указано на диаграммах. Если сигнал сброса задать правильно, то и автомат заработает как надо.
Не исключаю, что тов. Лобанов об этом знает, и его “ошибку” просто “заказали”. Если же я не прав, и он в самом деле ошибся, то прежде чем извергать патриотизм, гнать пену и стебаться над чужой продукцией, стоит проверить в первую очередь себя. И несколько раз проверить себя перед тем, как дать информацию в журнал.
С уважением, Киселев И.В.

И вот пришёл долгожданный ответ автора, который мы тут же переадресовали читателям.

Автор выражает читателям глубокую признательность за внимательное прочтение своей статьи (“Chip News”, № 1, 2001 г., с. 56–58). Отвечая на письма, выскажу следующие соображения.
1. Заблуждения оппонентов связаны с тем, что вход сброса в триггерах типа DFF (см. библ. примитивов и HLP) является активно низким.
2. Защищая честь мундира западной науки, читатель Киселев И.В. невольно способствовал обнаружению ещё одной ошибки в MAX+PLUS II всё в том же самом примере: реакция конечного автомата на сигнал сброса некорректна.
3. Если читатели проявят интерес к формальному синтезу цифровых устройств, то автор готов в объёме двух статей провести ликбез для инженеров.
С уважением, В.И. Лобанов

Результатом явились личная встреча одного из авторов писем с автором статьи и коментарий, который мы приводим ниже.

Данная заметка является попыткой разобраться, насколько правомерны заявления в статье В. Лобанова “Технический минимум пользователя САПР MAX+PLUS II” в журнале “Chip News” № 1 за 2001 год (в дальнейшем “статья”).
В статье утверждается, что САПР “MAX+PLUS II” неправильно моделирует работу конечных автоматов, и приведён пример “неправильного” моделирования. Поскольку столь серьёзные ошибки в САПР могут привести к большим потерям времени инженера-разработчика, стоит внимательно проанализировать этот пример и попытаться понять, кто ошибается — САПР или автор статьи.
Как показал мой опыт проектирования самых разнообразных устройств, когда программа работает неправильно, не надо торопиться искать ошибки в компиляторе. Сначала стоит внимательно проверить текст программы, прочитать ещё раз описание компилятора, обратиться к справочной системе, не один раз подумать и только в самую последнюю очередь грешить на компилятор.

SUBDESIGN moore2
(
clk : INPUT;
reset : INPUT;
y : INPUT;
z : OUTPUT;
)
VARIABLE
ss: MACHINE WITH STATES (s0, s1, s2, s3);
zd: NODE;
BEGIN
ss.clk = clk;
ss.reset = reset;

z = DFF(zd, clk, VCC, VCC);

TABLE
% current current next next %
% state input state output %
ss, y => ss, zd;

s0, 0 => s0, 0;
s0, 1 => s2, 1;
s1, 0 => s0, 0;
s1, 1 => s2, 1;
s2, 0 => s2, 1;
s2, 1 => s3, 0;
s3, 0 => s3, 0;
s3, 1 => s1, 1;
END TABLE;
END;

На рис. 1 приведён исходный текст программы на языке AHDL из комплекта поставки САПР, рассматриваемый в статье.
Данная программа состоит из конечного автомата “ss”, вспомогательной переменной “zd” и D-триггера.
Согласно правилам AHDL, сигнал “reset” не инвертируется.
Рассмотрим, каким должно быть поведение данной программы при входном сигнале “reset” = “1”. В соответствии со строками

reset : INPUT;
ss.reset = reset;

конечный автомат “ss” при активном “reset” должен находиться в состоянии “s0”.
Согласно таблице состояний, если автомат “ss” находится в состоянии “s0”, значение промежуточной переменной “zd” будет асинхронно совпадать с состоянием входной переменной “y”, независимо от состояния сигнала “clk”, то есть несмотря на то, что состояние конечного автомата неизменно, промежуточная переменная “zd” будет изменяться. После прохождения сигнала через D-триггер, в соответствии со строкой

z = DFF(zd, clk, VCC, VCC);

состояние выхода “z” будет равно значению “zd”, синхронизированному с фронтом сигнала CLK. При запуске симулятора мы получим временные диаграммы.

Именно такими они и должны быть, причём в полном соответствии из статьи. Несмотря на то, что на схему подан активный сигнал “reset” и конечный автомат постоянно находится в состоянии ”s0”, выход схемы будет зависеть от входного сигнала “y”, что, возможно, и послужило поводом для “обнаружения ошибки” в статье.
Для того, чтобы проверить работу конечного автомата, естественно, надо установить входной сигнал “reset” = ”0”, то есть в неактивное состояние.
Запустив симулятор, получим результаты моделирования работы конечного автомата.
Опять же, в полном соответствии с результатами ручного моделирования и статьи, с точностью до значения сигнала ”reset”.
По-видимому, при ручном моделировании поведения програмы в статье использовался правильный алгоритм работы, но с инвертированным сигналом ”reset” с активным “0” (что не соответствует исходному тексту).
Стоит заметить, что в зависимости от выбранного семейства ПЛИС и опции “One-Shot State Machine Encoding”, конечный автомат может быть реализован как на двух триггерах с состояниями “00”, ”01”, “10”, “11”, так и на четырёх с состояниями “1000”, “0100”, “0010”, “0001”.
Для полноты картины на рис. 4 приведена схемная интерпретация этой программы. Здесть SSi обозначает вход таблицы (current state), SSo — выход (next state).
Таким образом, можно сделать вывод, что симулятор корректно моделирует работу конечного автомата в данном примере, на рисунках статьи приведены правильные результаты, однако их интерпретация была неверна.
В результате, как и ожидалось, проблема не в САПР, а в недостаточно внимательном изучении текста примера или документации на САПР.

P.S. Обещание В.И. Лобанова о “ликбезе” по формальному синтезу цифровых автоматов остаётся в силе.







Реклама на сайте
тел.: +7 (495) 514 4110. e-mail:admin@eust.ru
1998-2014 ООО Рынок микроэлектроники