Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Странное поведение Questa
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
MegaVolt
Нажмите для просмотра прикрепленного файла

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

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

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

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

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

Чём подобное поведение может быть объяснено?
Kolya
Цитата(MegaVolt @ Jan 18 2016, 16:35) *
Нажмите для просмотра прикрепленного файла

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

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

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

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

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

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

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

З.Ы. Под "во что-то" я подразумевал не 00 и не FF
MegaVolt
Цитата(Kolya @ Jan 18 2016, 18:02) *
Даже на циклограмме под курсором первым видно, что сигнал FFFFFFFF снимается до того как наступит передний фронт. и по-видимомупоявляется позже.соответственно вы можете записфвать нули.
Это функциональная симуляция. Все изменения проиходят по клоку. Никаких задержек я там не могу заметить при любом увеличении. Схема полностью синхронная. Как нечто может измениться до клока не очень понимаю.
Цитата
Самая простая проверка - инициализировать регистр во что-то (!), и посмотреть заново.
Не очень понял что это даст? Чем одна константа отличается от какой либо другой?
Kolya
Как минимум тем, что если вы случайно записываете нули в нулевой регистр - то не увидите этого.

Сделайте просто, чтобы Bus2IP_Data и ADC_GPIO ВСЕГДА различались. Иногда только так косяки можно найти)
MegaVolt
Цитата(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';

Может кто подскажет как правильно генерить синхронные сигналы?
Kolya
Собственно что я и написал...
Я не использовал клоковые сигналы в тестбенче, а всегда считал тактами:
wait for 50 ns;
Signal <= '0';
wait for 1200 ns;
Signal <= '1';
iosifk
Цитата(MegaVolt @ Jan 18 2016, 19:04) *
Может кто подскажет как правильно генерить синхронные сигналы?

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

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

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


Если так, тогда поменяйте
wait until CLK'event and CLK='1';
на wait until CLK'event and CLK='0';
Для тестбенча не принципиально, а вот для себя вы точно сделаете сдвижку на половину такта и гарантированно будет ловится сигнал CE и Data по переднему фронту системного клока.
andrew_b
Цитата(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';
Дельта-задержка есть, поэтому дополнительной явной задержки по идее не нужно.
MegaVolt
Цитата(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 по переднему фронту системного клока.
Вариант. Когда ясна проблема её решить уже можно кучей разных способов. Тут важно было понять что за глюк.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.