Полная версия этой страницы:
Проблема с VIO и ILA
RinettaFox
May 3 2016, 19:27
Здравствуйте. Такая проблема: не могу верно использовать ILA и VIO. При нажатии кнопки происходит такая вот бесконечная загрузка. Не понимаю в чем дело.
Объясните пожалуйста, в чем может быть ошибка. Может быть в коде не верно прописываю их подключение, может быть в анализаторе что-то сделала не так. Только начинаю работать с анализатором.
FakeDevice
May 3 2016, 20:02
Попробуйте для начала вернуть значение TriggerPort4 в "X" и сделать повторный старт. Если ситуация не изменится, скорее всего -- проблема с тактами, от которых работает ILA. Если же данные примутся, то под подозрением TriggerPort4: либо не поднимается в '1', либо не является синхронным относительно всё тех же тактов. Еще можно попробовать заменить значение TriggerPort4 на 'R' вместо '1'.
RinettaFox
May 3 2016, 20:05
Если вернуть значение X, то при нажатии на осциллографе ILA не происходит ничего, enable остается на уровне ноль.
Тактовый сигнал подается всегда один и тот же, на ILA, на VIO, на CONTROL, он же используется и самой программой.
FakeDevice
May 3 2016, 20:11
Тогда под подозрением такты. Попробуйте либо переключить на другие, либо убедиться в наличии уже подключенных к анализатору. Перепроверить, какие именно такты используются. Возможно, просто опечатка где-то имела место быть.
Да, и покажите, пожалуйста, что скрыто под вкладкой Capture Settings.
RinettaFox
May 3 2016, 20:13
Вы же имеете ввиду тактовый сигнал, верно?
Сейчас не могу показать, с платой работаю только на учебе.
FakeDevice
May 3 2016, 20:17
Да, я имею в виду тактовый сигнал, который вы подключали к анализатору в процессе его конфигурирования, наряду с сигналами, которые необходимо наблюдать.
Убедитесь, что под Capture Settings не содержится "лишних условий". Если вы туда успели добавить какие-либо условия -- нужно убрать.
RinettaFox
May 3 2016, 20:24
Он у меня всего один и я не думаю, что там где-то опечатка. На всякий случай проверила код, вроде бы все нормально.
А если нет проблем с Capture Settings, могут быть проблемы с чем-то еще?
Вкладку в четверг проверю с платой.
FakeDevice
May 3 2016, 20:46
Еще можно проконтролировать, что в момент запуска сбора данных анализатором конфигурация ПЛИС соответствует требуемой. Например, если могут быть сбои по питанию или что-то в таком духе, то ПЛИС может перегрузить свою конфигурацию из флешки, т.е. заново переконфигурироваться. Либо и вовсе могли загрузить не ту конфигурацию плис, устаревшую версию и т.д. Больше вариантов пока не вижу.
Цитата(RinettaFox @ May 3 2016, 22:27)

Здравствуйте. Такая проблема: не могу верно использовать ILA и VIO. При нажатии кнопки происходит такая вот бесконечная загрузка. Не понимаю в чем дело.
Объясните пожалуйста, в чем может быть ошибка. Может быть в коде не верно прописываю их подключение, может быть в анализаторе что-то сделала не так. Только начинаю работать с анализатором.
По-моему тут просто не срабатывает триггер, так как условие триггера никогда не выполняется. Попробуйте поставить на TriggerPort4 value 0. Ещё можно дёрнуть триггер принудительно зелёной кнопкой(не помню какой из двух).
RinettaFox
May 4 2016, 16:24
Почему не выполняется, если по идее должен сигнал enable переходить в единицу при нажатии?
Ведь при нажатии переменной enable должно присваиваться значение единицы? А значит условие должно выполнится? Или я что-то не так понимаю?
Цитата(RinettaFox @ May 4 2016, 19:24)

Почему не выполняется, если по идее должен сигнал enable переходить в единицу при нажатии?
Ведь при нажатии переменной enable должно присваиваться значение единицы? А значит условие должно выполнится? Или я что-то не так понимаю?
Телепат его знает, почему не выполняется, наверное, что-то пошло не так

. Если дёрнете триггер вручную, а нужные сигналы в waveform подключены, то увидите точно.
RinettaFox
May 12 2016, 07:46
Нашла проблему. Не заметила что делаю неверное присваивание.
Сделала вот так:
wire sync_in;
assign enable sync_in = enable;
Но теперь возникает ошибка:
"this signal is connected to multitype drivers"
Я думаю, что это происходит потому, что мой сигнал enable используется также в коде программы в always, но не понимаю как исправить.
Maverick
May 12 2016, 07:54
Цитата(RinettaFox @ May 12 2016, 10:46)

Нашла проблему. Не заметила что делаю неверное присваивание.
Сделала вот так:
wire sync_in;
assign enable sync_in = enable;
Но теперь возникает ошибка:
"this signal is connected to multitype drivers"
Я думаю, что это происходит потому, что мой сигнал enable используется также в коде программы в always, но не понимаю как исправить.
без описания verilog, хотя бы частичного сложно что либо сказать
RinettaFox
May 12 2016, 07:56
Вы имеете ввиду полный код?
Maverick
May 12 2016, 08:17
Цитата(RinettaFox @ May 12 2016, 10:56)

Вы имеете ввиду полный код?
Посмотрите Вы скорее всего присваиваете одному и тому же сигналу разные данные/сигналы в разных местах описания.
В описании у Вас должно быть присвоение одному сигналу в одном месте например в одном always, а не в разных частях описания или в разных always
Цитата
Я думаю, что это происходит потому, что мой сигнал enable используется также в коде программы в always, но не понимаю как исправить.
Вы на верном пути
Насчет описания нужен always (с signal is connected to multitype drivers) с и место с присвоением
RinettaFox
May 12 2016, 10:15
В always идет только проверка условия, равен ли enable 0 или 1, присвоения нет.
Делаю следующим образом:
wire SYNC_OUT;
assign enable = SYNC_OUT;
ila ILA
(
.CLK (clk),
.CONTROL (control0),
.TRIG0 (block_5V),
.TRIG1 (cod),
.TRIG2 (comand),
.TRIG3 (ready),
.TRIG4 (enable)
);
vio VIO
(
.CLK (clk),
.CONTROL (control1),
.SYNC_IN(SYNC_IN), // IN BUS [7:0]
.SYNC_OUT(SYNC_OUT)
);
Т.е. enable используется только здесь, в остальных случаях идет лишь условие проверки его значения.
Может быть здесь что-то не то? Хотя вроде бы логично, я завожу кнопку на VIO, при ее нажатии ей должно присваиваться значение единицы, потом завожу на ILA и там значение кнопки выводится на осциллографе.
RinettaFox
May 12 2016, 12:42
Может быть с типами переменных что-то не то?
enable у меня является входом:
input enable
SYNC_OUT переменной типа wire.
Цитата(RinettaFox @ May 12 2016, 15:42)

Может быть с типами переменных что-то не то?
enable у меня является входом:
input enable
SYNC_OUT переменной типа wire.
Не то, если enable - input, то вход модуля является одним из драйверов этого сигнала, а вторым - assign. enable надо объявлять как wire.
RinettaFox
May 12 2016, 13:39
А если я не могу его объявить как wire? Мне нужно, чтобы он был входом в моей программе. Можно как-то иначе?
Может быть какую-то промежуточную переменную ввести? Пока не поняла как.
Tausinov
May 12 2016, 14:29
Цитата(RinettaFox @ May 12 2016, 16:39)

А если я не могу его объявить как wire? Мне нужно, чтобы он был входом в моей программе. Можно как-то иначе?
Может быть какую-то промежуточную переменную ввести? Пока не поняла как.
Можно сделать его inout портом, но это не очень хорошая практика, лучше как-то так:
Код
....
input external_enable
wire external_enable
wire temp_enable, internal_enable
assign temp_enable = то, что вам надо.
assign internal_enable = external_enable | temp_enable;
Хотя непонятно, зачем его делать портом, если вы все равно назначаете его внутри блока.
RinettaFox
May 12 2016, 14:34
Спасибо большое, заработало.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.