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

 
 
 
Reply to this topicStart new topic
> Проблема с CPLD
Orgrimar
сообщение Sep 9 2017, 14:35
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 15-09-13
Пользователь №: 78 325



Здравствуйте.
С FPGA и CPLD дело имею уже достаточно времени, но выполняя казалось бы легкую задачу, столкнулся с проблемой. Обо всем по порядку.
Небольшое описание схемы. CoolRunner CPLD, XC2C64A. 8 выходов, которые подают на другую платку выходной код. 3 управляющих входа, от которых зависит выходной код. На выходе стоят светодиоды для проверки правильности кода. На еще один вход заведена кнопка, чтобы проверять этот код (предполагалось , как альтернативная тактовая). На платку заводится синус, который подается на преобразователь синус-прямоугольник, а оттуда на вход основной тактовой. Сброса нет! Думаю, это самое важное.
Задача. Выдавать на выход необходимый код, 16 состояний(после последнего состояния возврат к первому), в зависимости от управляющих входов.
Написал быстренько код на верилоге, промоделировал - все вроде как работает.
Прошил платку. Проверил работу с кнопкой - все правильно идет. Стал подавать синус. И тут появилась проблема: некоторое время светодиоды зажигаются в зависимости от кода. Но со временем, они полностью все зажигаются и так и горят все.
Не понимаю в чем дело. На выходе преобразователя, который формирует тактовую, по умолчанию идет 2,4В . Игрался с IOSTANDART - ничего не помогает. Ощущение, что проблема в отсутствии сброса, как такового. Пробовал сброс от кнопки, подавая синус, но проблема все равно присутствует.
Может кто подскажет в чем дело?
P.S. По утверждениям человека, который дал мне такое задание, такая схема тактирования у них уже использовалась с этой же микросхемой, проблем не было. К сожалению, у него есть только прошивочный файл, да и он отностится к совсем другой задаче.
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 9 2017, 15:30
Сообщение #2


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

Группа: Участник
Сообщений: 1 055
Регистрация: 3-03-06
Пользователь №: 14 942



Код в студию!
Go to the top of the page
 
+Quote Post
Inanity
сообщение Sep 9 2017, 21:43
Сообщение #3


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

Группа: Участник
Сообщений: 177
Регистрация: 6-07-12
Пользователь №: 72 653



Полагаю, что у вас есть дизайне некоторый конечный автомат. И похоже на то, что этот автомат по какой-то причине переходит в запрещённое состояние и зависает в нём. Входы в вашей схеме асинхронные. Тут и метастабильность может быть, и гонки.

Сообщение отредактировал Inanity - Sep 9 2017, 21:45
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 10 2017, 05:40
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 572
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Тактовую частоту после преобразователя осциллографом посмотрите. Предполагаю, там есть звон на фронтах и срезах.
Go to the top of the page
 
+Quote Post
AVR
сообщение Sep 11 2017, 06:51
Сообщение #5


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 051
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Orgrimar @ Sep 9 2017, 17:35) *
Может кто подскажет в чем дело?

Отлажен ли код в симуляторе при помощи тестбенча?
Без тестирования, даже самая простая казалось бы задача, может стать тяжелым адом sm.gif
Игнорирование анализа таймингов тоже может "помочь" в умножении страданий.
Хорошо бы код приложить, он ведь простой и не содержит чего-то секретного?

Цитата(Orgrimar @ Sep 9 2017, 17:35) *
промоделировал - все вроде как работает

Не увидел сразу, код тестбенча тоже желателен.


--------------------
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Sep 11 2017, 07:00
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 391
Регистрация: 11-06-13
Пользователь №: 77 140



Так-же хочу обратить внимание, что даже отлаженный в симуляторе код не даёт гарантии работоспособности схемы, поскольку не все проблемы можно выявить на этапе симуляции. Например, неправильное пересечение клоковых доменов (в том числе и приём асинхронных сигналов), на сколько мне известно, никакими симуляторами не моделируется. Да и правильная организация асинхронного сброса (если он присутствует) так-же остаётся на совести разработчика, и опять-же тут симулятор вряд-ли поможет. Хотя Quartus, если покопаться в его настройках, может выдавать предупреждения, но проверка там так себе.

Сообщение отредактировал Flip-fl0p - Sep 11 2017, 09:57
Go to the top of the page
 
+Quote Post
Orgrimar
сообщение Sep 11 2017, 19:39
Сообщение #7





Группа: Новичок
Сообщений: 2
Регистрация: 15-09-13
Пользователь №: 78 325



Спасибо всем за ответы. Все сигналы до преобразователя и после , естественно, проверял. Тестбенч простой был - просто, чтобы убедиться, что автомат заводится и выдает на выходы необходимые значения. Проблема была в начальных состояниях выходного регистра. Сам код на верилоге - always блок, с автоматом состояний. initial блоком вначале напрямую задавал стартовое значение выходного регистра. Но потом изменил на сброс с помощью флага, т.е. его стартовое значение в initial блоке задал равным 1, а уже в always блоке при флаге равном 1 сбрасывал как регистр состояний, так и выходной, заодно там же этот флаг сбрасывал. После этого Зависания ушли. Все стало работать, как надо.
Я не гуру. Поэтому может быть и неправильно сделал, но работает. Если сделал неправильно, готов получить ...совет, как правильно maniac.gif
До этого просто не работал с логикой без внешней линии сброса. Теперь будет маленький, но опыт biggrin.gif
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Sep 12 2017, 04:54
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 391
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(Orgrimar @ Sep 11 2017, 22:39) *
Поэтому может быть и неправильно сделал, но работает. Если сделал неправильно, готов получить ...совет, как правильно maniac.gif
До этого просто не работал с логикой без внешней линии сброса. Теперь будет маленький, но опыт biggrin.gif

Чтобы сделать вывод о правильности описания схемы необходимо для начала увидеть это описание схемы. Иначе все советы как делать правильно будут лишь общими советами, без указания конкретной ошибки, если такова присутствует.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 12 2017, 08:01
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 204
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Orgrimar @ Sep 11 2017, 22:39) *
.... initial блоком вначале напрямую задавал стартовое значение выходного регистра. Но потом изменил на сброс с помощью флага, т.е. его стартовое значение в initial блоке задал равным 1, а уже в always блоке при флаге равном 1 сбрасывал как регистр состояний, так и выходной, заодно там же этот флаг сбрасывал....



По сути вы ничего не изменили, в идеальных условиях просто перенесли сброс на 1 такт.

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

Совершенно не факт что потом схема не сбойнет, так же не факт что в другой температуре или при другом питании опять это не вылезет.

Правильно вам надо организовать схему сброса. Если имеет место раскачка генератора, то надо ввести счетчик грея, который по клоку досчитает до какого-то значения и после этого выведет остальную схему из сброса, а сам остановится.
Если генератор не раскачивается, то вам надо искать проблемы в другом месте, скорее всего где то еще спрятана метастабильность, гонки сигналов и т.п., а сейчас они пропали просто от изменения схемы.


Go to the top of the page
 
+Quote Post
AVR
сообщение Sep 12 2017, 08:11
Сообщение #10


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 051
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Orgrimar @ Sep 11 2017, 22:39) *
Я не гуру
А я не-телепат, приятно познакомиться sm.gif
Не стесняйтесь, выкладывайте код и тестбенч, в первом же моем сообщении просил, все его смогут посмотреть, может сразу будет видно что не так было, и действительно сейчас проблема ушла, либо просто повезло что она перестала проявляться? Просто не хорошо завершать тему "да там всё просто было, ерунда", ведь кто-то другой наткнется на такой финал и пожелает Вам доброго здравия sm.gif


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st September 2017 - 08:58
Рейтинг@Mail.ru


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