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

 
 
 
Reply to this topicStart new topic
> Странное поведение Questa
MegaVolt
сообщение Jan 18 2016, 14:35
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783




Прикрепленное изображение


Странно выдёт себя симулятор. Смотрим первый курсор. Циклограмма берётся из схемы и подаётся на вход регистра.

Clk - клок
Bus2IP_Data данные на входе регистра
CPU_GPIO_Write это CE регистра.
ADC_GPIO выход регистра.

Т.е. мы подали на вход FFFFFFFF подали запись и ничего не записалось sad.gif(

Смотрим второй курсор.
Та же циклограмма только сформирована с помощью Force.

Всё работает и записывается.

Чём подобное поведение может быть объяснено?
Go to the top of the page
 
+Quote Post
Kolya
сообщение Jan 18 2016, 15:02
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 21-03-11
Из: Киев
Пользователь №: 63 755



Цитата(MegaVolt @ Jan 18 2016, 16:35) *

Прикрепленное изображение


Странно выдёт себя симулятор. Смотрим первый курсор. Циклограмма берётся из схемы и подаётся на вход регистра.

Clk - клок
Bus2IP_Data данные на входе регистра
CPU_GPIO_Write это CE регистра.
ADC_GPIO выход регистра.

Т.е. мы подали на вход FFFFFFFF подали запись и ничего не записалось sad.gif(

Смотрим второй курсор.
Та же циклограмма только сформирована с помощью Force.

Всё работает и записывается.

Чём подобное поведение может быть объяснено?

Даже на циклограмме под курсором первым видно, что сигнал FFFFFFFF снимается до того как наступит передний фронт. и по-видимомупоявляется позже.соответственно вы можете записфвать нули. Самая простая проверка - инициализировать регистр во что-то (!), и посмотреть заново.

З.Ы. Под "во что-то" я подразумевал не 00 и не FF
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Jan 18 2016, 15:05
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(Kolya @ Jan 18 2016, 18:02) *
Даже на циклограмме под курсором первым видно, что сигнал FFFFFFFF снимается до того как наступит передний фронт. и по-видимомупоявляется позже.соответственно вы можете записфвать нули.
Это функциональная симуляция. Все изменения проиходят по клоку. Никаких задержек я там не могу заметить при любом увеличении. Схема полностью синхронная. Как нечто может измениться до клока не очень понимаю.
Цитата
Самая простая проверка - инициализировать регистр во что-то (!), и посмотреть заново.
Не очень понял что это даст? Чем одна константа отличается от какой либо другой?
Go to the top of the page
 
+Quote Post
Kolya
сообщение Jan 18 2016, 15:16
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 21-03-11
Из: Киев
Пользователь №: 63 755



Как минимум тем, что если вы случайно записываете нули в нулевой регистр - то не увидите этого.

Сделайте просто, чтобы Bus2IP_Data и ADC_GPIO ВСЕГДА различались. Иногда только так косяки можно найти)
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Jan 18 2016, 16:04
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(Kolya @ Jan 18 2016, 18:14) *
Как минимум тем, что если вы случайно записываете нули в нулевой регистр - то не увидите этого.
Как это случайно? На картинке вполне реальные сигналы которые в одном случае приводят к записи а во втором нет. О какой случайности идёт речь?

Я даже больше скажу этот кусок в железе работает. Т.е. проблема в каких то нюансах симуляции.


Всё оказалось чуть хитрее.

В тестбенче нельзя писать вот так:

wait until CLK'event and CLK='1';
Signal <= '0';

Потому что изменения будут происходить ровно по фронту а не после него как мне казалось sad.gif((

Пришлось сделать так:

wait until CLK'event and CLK='1';
wait for 1 ns;
Signal <= '0';

Может кто подскажет как правильно генерить синхронные сигналы?
Go to the top of the page
 
+Quote Post
Kolya
сообщение Jan 18 2016, 18:40
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 21-03-11
Из: Киев
Пользователь №: 63 755



Собственно что я и написал...
Я не использовал клоковые сигналы в тестбенче, а всегда считал тактами:
wait for 50 ns;
Signal <= '0';
wait for 1200 ns;
Signal <= '1';
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 18 2016, 20:35
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(MegaVolt @ Jan 18 2016, 19:04) *
Может кто подскажет как правильно генерить синхронные сигналы?

Так какие проблемы? Под первый фронт выставляйте данные, под следующий фронт их захватывайте...
или данные выставляйте под отрицательный фронт, а захватывайте под положительный...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Jan 19 2016, 07:19
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(Kolya @ Jan 18 2016, 21:40) *
Собственно что я и написал...
Я не использовал клоковые сигналы в тестбенче, а всегда считал тактами:
wait for 50 ns;
Signal <= '0';
wait for 1200 ns;
Signal <= '1';
В моём тесте стояла задача привязаться к ответам схемы. Т.е. генерить некое взаимодействие а не просто статическую циклограмму.

Цитата(iosifk @ Jan 18 2016, 23:35) *
Так какие проблемы? Под первый фронт выставляйте данные, под следующий фронт их захватывайте...
или данные выставляйте под отрицательный фронт, а захватывайте под положительный...
Так сверху картинка того что вышло. Почему то не ловит ни первый ни второй фронт. Рискну предположить что причиной этому смена состояния ровно вместе с фронтом клока. И симулятор это понимает похоже как то хитро.

Go to the top of the page
 
+Quote Post
Kolya
сообщение Jan 19 2016, 12:24
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 21-03-11
Из: Киев
Пользователь №: 63 755



Цитата(MegaVolt @ Jan 19 2016, 09:19) *
В моём тесте стояла задача привязаться к ответам схемы. Т.е. генерить некое взаимодействие а не просто статическую циклограмму.


Если так, тогда поменяйте
wait until CLK'event and CLK='1';
на wait until CLK'event and CLK='0';
Для тестбенча не принципиально, а вот для себя вы точно сделаете сдвижку на половину такта и гарантированно будет ловится сигнал CE и Data по переднему фронту системного клока.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jan 19 2016, 13:09
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(MegaVolt @ Jan 18 2016, 19:04) *
В тестбенче нельзя писать вот так:

wait until CLK'event and CLK='1';
Signal <= '0';

Потому что изменения будут происходить ровно по фронту а не после него как мне казалось sad.gif ((
Это вельми странно. Я именно так и пишу, и никогда проблем не имел. Правда, я пишу wait until rising_edge(clk); но не думаю, что это должно отличаться поведением от вашего варианта.

Цитата
Пришлось сделать так:

wait until CLK'event and CLK='1';
wait for 1 ns;
Signal <= '0';
Дельта-задержка есть, поэтому дополнительной явной задержки по идее не нужно.
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Jan 19 2016, 14:31
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(andrew_b @ Jan 19 2016, 16:09) *
Это вельми странно. Я именно так и пишу, и никогда проблем не имел. Правда, я пишу wait until rising_edge(clk); но не думаю, что это должно отличаться поведением от вашего варианта.

Дельта-задержка есть, поэтому дополнительной явной задержки по идее не нужно.
Так и я считал что так должно работать. Но видимо есть какой то нюанс который я не до конца понимаю. Но картинки вверху. При любом увеличении изменения данных и клока происходят одномоментно. А есть или нет дельта сказать сложно.

Цитата(Kolya @ Jan 19 2016, 15:24) *
Если так, тогда поменяйте
wait until CLK'event and CLK='1';
на wait until CLK'event and CLK='0';
Для тестбенча не принципиально, а вот для себя вы точно сделаете сдвижку на половину такта и гарантированно будет ловится сигнал CE и Data по переднему фронту системного клока.
Вариант. Когда ясна проблема её решить уже можно кучей разных способов. Тут важно было понять что за глюк.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 9th July 2025 - 00:45
Рейтинг@Mail.ru


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