реклама на сайте
подробности

 
 
> AHDL. Непонятное поведение output сигнала., Quartus II. AHDL.
Grenka
сообщение Jul 20 2008, 19:08
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 11-04-08
Пользователь №: 36 682



Добрый день,

я столкнулся с такой проблемой. Разработал в Quartus II state machine (конечный автомат). Провёл Vector wafeform Simulation. Всё работает правильно, т.е. переход от состояния к состоянию согласно плану и выходные сигналы соответствуют состояниям. Создаю Symbol File для использощания автомата в другом проекте. Делаю графический дизайн с этим символом. И в Vector wafeform Simulation для графического дизайна замечаю, что один из выходных сигналов ведущих от автомата к другому элементу не изменяется как надо. Хотя все остальные сигналы и состояния автомата меняются правильно.
Посоветуйте, пожалуйста, что это могло бы быть. help.gif 1111493779.gif
Прикрепленные файлы
Прикрепленный файл  Schaltung.bmp ( 1.19 мегабайт ) Кол-во скачиваний: 50
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
CaPpuCcino
сообщение Jul 20 2008, 21:46
Сообщение #2


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



код проекта - в студию. (скорее всего при синтезе происходит упрощение)
ЗЫ: слезали бы вы с АХДЛя. это рудимент, скоро отсохнет и совсем отвалится.


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 21 2008, 15:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Grenka - похожая фигня как раз недавно у меня была - квартус соптимизировал как мог и в результате получил каку.
Хотя отдельно компонент когда проверял - идеальная диаграммка получалась.
Подход там поменять пришлось, чтоб заработало корректно..
smile.gif
Go to the top of the page
 
+Quote Post
Grenka
сообщение Jul 21 2008, 18:57
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 11-04-08
Пользователь №: 36 682



@CaPpuCcino, @Kuzmi4 огромное спасибо. a14.gif Хорошо знать, что такая хрень произошла не только со мной и имеет конкретную причину. А то я пол дня убил на то что бы найти ошибку в коде, и всё без результатно. wacko.gif
Цитата(Kuzmi4 @ Jul 21 2008, 17:25) *
2 Grenka - похожая фигня как раз недавно у меня была - квартус соптимизировал как мог и в результате получил каку.
Хотя отдельно компонент когда проверял - идеальная диаграммка получалась.
Подход там поменять пришлось, чтоб заработало корректно..
smile.gif


Подход поменять? При компилировании или при написании? А можно эту оптимизацию отключить нафиг?

Цитата(CaPpuCcino @ Jul 20 2008, 23:46) *
код проекта - в студию. (скорее всего при синтезе происходит упрощение)


SUBDESIGN stateMachineIEEE1284

(

Clk, HostClk, HostAck, nReverseRequest, Zaehler0 : INPUT;

EnableADC, EnableDAC, ErrorS, Multipl, nAckReverse : OUTPUT;

PeriphAck, PeriphClk, ZaehlerReset, ZaehlerZaehlen : OUTPUT;

%Data[7..0] : BIDIR;%

)



VARIABLE

stateMachine : MACHINE

OF BITS (EnableADC, EnableDAC, ErrorS, Multipl, nAckReverse, PeriphAck, PeriphClk, ZaehlerReset, ZaehlerZaehlen)

WITH STATES (

Q0 = B"000110110",

Q1 = B"010111101",

Q2 = B"000110110",

Q3 = B"100001110",

Q4 = B"000001001",

Q5 = B"000001110",

Q6 = B"000001101",

Q7 = B"000001110",

Q8 = B"001100010");

BEGIN

stateMachine.clk=Clk;



CASE stateMachine IS

WHEN Q0 =>

% Из Q0 в Q1. PC - передатчик. Он сигнализирует, что данные выставлвны.%

IF (nReverseRequest & !HostClk & HostAck) THEN

stateMachine = Q1;

END IF;



% Из Q0 в Q3. PC запрашивает данные.%

IF (!nReverseRequest & !HostAck) THEN

stateMachine = Q3;

END IF;



% Q1 Запуск счётчика.%

WHEN Q1 =>

% Из Q1 в Q2. Если счётчик не досчитал и PC считает, что данные переданы.%

IF (HostClk & HostAck & !Zaehler0) THEN

stateMachine = Q2;

END IF;



% Из Q1 в Q8. Счётчик досчитал до нуля и PC не ответил.%

IF (Zaehler0) THEN

stateMachine = Q8;

END IF;



WHEN Q2 =>

% Из Q2 в Q0. Передача PC к устойству закончена.%

IF (1) THEN

stateMachine = Q0;

END IF;



%Q3 посылаем сигнал к ADC%

WHEN Q3 =>

% Из Q3 в Q4. Если PC ещё в режиме приёма (!nReverseRequest).%

IF (!nReverseRequest) THEN

stateMachine = Q4;

END IF;



%Данные от ADC получены. Запуск счётчика.%

WHEN Q4 =>

% Из Q4 в Q5. Если счётчик не досчитал и PC подтверждает приём.%

IF (!nReverseRequest & HostAck & !Zaehler0) THEN

stateMachine = Q5;

END IF;



% Из Q4 в Q8. Счётчик досчитал до нуля и PC не ответил.%

IF (Zaehler0) THEN

stateMachine = Q8;

END IF;



% Q5 - вспомогательное состояние, для перезапуска счётчика.%

WHEN Q5 =>

% Из Q5 в Q6. Если PC ещё в режиме приёма (!nReverseRequest).%

IF (!nReverseRequest) THEN

stateMachine = Q6;

END IF;



%Устройство считает, что данные были переданы, снимает сигнал PeriphClk и запускает счётчик.%

WHEN Q6 =>

% Из Q6 в Q7. Счётчик не досчитал до нуля и PC сообщает о готовности принять новые данные.%

IF (!HostAck & !Zaehler0) THEN

stateMachine = Q7;

END IF;



% Из Q6 в Q8. Счётчик досчитал до нуля и PC не ответил.%

IF (Zaehler0) THEN

stateMachine = Q8;

END IF;



WHEN Q7 =>

% Из Q7 в Q0. Передача от устройства к PC закончена.%

IF (nReverseRequest) THEN

stateMachine = Q0;

END IF;



WHEN Q8 =>

% Из Q8 в Q0.%

IF (!nReverseRequest) THEN

stateMachine = Q0;

END IF;

% WHEN OTHERS =>

__statement;

__statement; %

END CASE;





END;

Хорошего всем времени суток. smile3046.gif

Ах да забыл написать. Глючит Выходной сигнал Multipl. Графический дизайн был прицеплен к сообщению открывающему тему.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Jul 22 2008, 13:10
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



У Вас сигналы Multipl, nAckReverse принимают почти во всех стадиях (кроме Q8) одинаковое значение.
Вполне возможно, что проанализировав переходы автомата с учётом внешних цепей, Quartus определил, что Q8 не наступит никогда. Тогда он просто избавился от дублирующего сигнала.
Я обычно тактирую управляющее устройство (в вашем случае - автомат) и периферию, если она должна подхватывать его состояния, со сдвигом фронта - инверсным clk, например. Может быть, потому у Вас сигнал, переводящий в Q8 и не видится автомату...
з.ы.: простенькая на пару цветов картинка в .bmp на 1.2МБ это солидно :-)


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 22 2008, 15:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Grenka - при написании.
Чем больше прожект тем больше связей можно замуксить, соптимизировать - тут аккуратней надо.
На сколько я знаю убрать оптимизацию невозможно.
Квартус подгоняет под свои синхронные мерки..
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Jul 22 2008, 16:38
Сообщение #7


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(Евгений Николаев @ Jul 22 2008, 17:10) *
Вполне возможно, что проанализировав переходы автомата с учётом внешних цепей, Quartus определил, что Q8 не наступит никогда.

тоже есть впечатление, что у вас где-то возникает логическая петля: вы уверены, что выход Null с элемента Zaehler вообще когда-либо меняет своё состояние(я просто не могу знать какое у него поведение, но присутствие сигнала сброса с отсутствующим сигналом установки, и всё это усугублено наличием разрешающего сигнала при отсутствующем тактирующем наводят на грустные мысли)? а ведь он единственный сигнал заставляющий переходить автомат в состояние Q8, где есть разница в состояниях выходов Multipl, nAckReverse


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
Grenka
сообщение Jul 29 2008, 18:34
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 11-04-08
Пользователь №: 36 682



Доброе время суток. Спасибо всем за ответы.

Цитата(CaPpuCcino @ Jul 22 2008, 18:38) *
вы уверены, что выход Null с элемента Zaehler вообще когда-либо меняет своё состояние

да уверен. наблюдал такое. При проведении Vector wafeform Simulation.
Цитата(CaPpuCcino @ Jul 22 2008, 18:38) *
я просто не могу знать какое у него поведение.
но присутствие сигнала сброса с отсутствующим сигналом установки, и всё это усугублено наличием разрешающего сигнала при отсутствующем тактирующем наводят на грустные мысли

Zaehler - это просто счётчик, который считает назад до нуля от определённого значения. Это начальное значение жёстко записано в счётчике и устанавливается при подаче сигнала "Reset". На рисунке просто криво получилось и не видно, что этот сигнал присоеденён к счётчику. Cчитает счётчик, толко когда подан сигнал "Enable". Такт (Clk) подан на все составные части схемы. При достижении нуля счётчик генерит 1 на выходе "Null". При его получении автомат stateMachine... переходит в состояние Q8.

логика автомата: state_maschine.jpg. заранее прошу прощения за язык используемый на картинке, но думаю логика понятна.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016