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

 
 
> Проблема с 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
 
Start new topic
Ответов
AVR
сообщение Sep 11 2017, 06:51
Сообщение #2


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

Группа: Свой
Сообщений: 1 353
Регистрация: 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
Сообщение #3


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 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
Сообщение #4





Группа: Новичок
Сообщений: 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
Сообщение #5


В поисках себя...
****

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



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

Чтобы сделать вывод о правильности описания схемы необходимо для начала увидеть это описание схемы. Иначе все советы как делать правильно будут лишь общими советами, без указания конкретной ошибки, если такова присутствует.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 5th August 2025 - 19:17
Рейтинг@Mail.ru


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