Jump to content

    

Flip-fl0p

Свой
  • Content Count

    871
  • Joined

  • Last visited

Everything posted by Flip-fl0p


  1. А почему так лучше не делать. Лично я бы делал так: 1. Синхронизировал все сигналы SPI с внутренней частотой ПЛИС. 2. В случае если SPI медленный - поставил бы простейший антидребезг, чтобы исключить влияние пологих фронтов сигналов SPI. 3. Поставил бы детекторы фронтов на сигналы SPI. 4. Вся схема работала бы на внутренней частоте ПЛИС, а вся обработка бы велась событийно - по детектированным фронтам SPI. Если можно как-то иначе работать - расскажите пожалуйста, всегда интересно узнавать что-то альтернативное.
  2. Букв достаточно, чтобы компонент можно было применять для любого вида кнопок с любым активным уровнем. Алгоритм простой: Мы настраиваем порог, досчитав до которого делается вывод о том, что кнопка нажата. Т.е. если кнопка нажата - счетчик считает вверх. Кнопка отпущена - счетчик считает вниз. Соответственно если счетчик смог досчитать вверх - значит у нас формируется сигнал button_pressed равный лог.1, говорящая о том, что кнопка была нажата. Из преимуществ я вижу: 1. Возможность указания активного уровня сигнала, что позволит использовать любые кнопки. 2. Отсутствие привязки к активному уровню сигнала, за счет того, что нажатой кнопке всегда соответствует флаг button_pressed = '1' . 3. Максимальная простота работы модуля. 4. Хоть для современных FPGA уже не так актуально, однако мой модуль занимает минимальное количество ресурсов. 5. Контроль правильности вводимых параметров. 6. Защита от метастабильности. 7. Ну и самое главное, как я считаю - у меня достаточно подробно описано как, что и зачем в модуле сделано. В вашем модуле мне не нравится: 1. вот эта строчка: if (ireset = '1') then cnt <= (others => '0'); odata <= idata; Асинхронно установить триггер в то значение, которое на входе. И это значение выдать в качестве флага нажатой кнопки.... Ну не знаю, не знаю. А как-же борьба с метастабильностью ? Или Вы считаете, что асинхронная установка триггера лишена метастабильного состояния ? Да и по ресурсам как-то слишком много у Вас уходит на обработку банального дребезга. И идеологически я не считаю, что считывать состояния кнопки через какое-то время - это правильное решение. P.S. и я не экономлю строчки кода. Я экономлю время, которое затрачивается на разработку.
  3. Как при помощи командной строки запустить проверку синтаксиса ? Ситуация какая: в силу удобства работы в сторонних текстовых редакторах, таких как: Notepad ++, Geany и пр. возникло некоторое неудобство работы с САПР Quartus/Modelsim. Написав файл проекта, я переключаюсь на Quartus/Modelsim проверяю проект на наличие ошибок, и в случае если есть ошибка то я запоминаю строку, содержащую ошибку, переключаюсь на текстовый редактор и исправляю её, потом я переключаюсь на Quartus/Modelsim проверяю проект на наличие ошибок.... И так по кругу пока всё синтаксические ошибки не исправлю. А можно ли как-то запустить проверку синтаксиса через командную строку не переключаясь на Quartus/Modelsim. Перечисленные мной редакторы умеют работать с командной строкой..
  4. Так я так и делаю с модельсимом (с Vivado пока не пробовал). Но проблема возникает когда есть сложная иерархия проекта: компилятор проверяет только тот файл, который в данный момент открыт в редакторе. Файлы уровнем ниже - он не проверяет поскольку не может найти. И собственно есть 2 пути как писал Уважаемый nice_vladi. Вот я и думаю может есть какой TCL скрипт который парсит иерархию проекта, и компиляцию начинает с самого низкого уровня.
  5. Подниму свою старую темку. А как можно сделать проверку синтаксиса всего проекта без работы в GUI таких программ как Vivado\Quartus\Modelsim ?
  6. Умножайте ценник в 10...20 раз.... Ну разве что старые CPLD покупать.
  7. Ну вы бы хоть сказали какие настойки у FIFO... Телепаты в отпуске. Могу предположить: контроллер видит порт usedw = 0 ---> считает, что FIFO пустое ---> не выставляет запрос на чтение.
  8. Этого мало. Как минимум надо все асинхронные пути пометить как false_path в вашем случае - это входной сигнал. Ещё неплохо было бы подумать над возможным дребезгом входного сигнала, нужна ли его фильтрация ? И забудьте про временную симуляцию. Проводите функциональную. Затем правильные констрейны. И в 99% случаях заработает сразу, без всяких хитрых атрибутов и констрейнов. Вот когда не заработает стандартный вариант - тогда надо доставать бубен и шаманить, путем задавания хитрых констрейнов и атрибутов.
  9. Так. Давайте по-порядку. 1. Где симулируете ? 2. Какая ПЛИС применяется ? 3.Как обнаружили проблему ? 4. Какие констрейны заданы. 5. Не находится ли первый триггер в ячейке входного буфера, а второй триггер в логический блоках ПЛИС ? (из-за большого пути между двумя триггерами может между ними расходиться времянка)
  10. Обычно симуляция с задержками не нужна. Достаточно провести функциональное моделирование. А правильность работы схемы задается констрейнами. Какие ошибки Вам говорит временной анализатор ? P.S. Я предпочитаю синхронизатор держать отдельным модулем, с правильными атрибутами синтеза. Т.е отдельно модуль для синхронизации с клоковым доменом, отдельно модуль детектора фронтов...
  11. Описание вполне корректное. Скорее всего задана слишком высокая тактовая частота для симуляции. И поскольку Вы моделируете с учетом задержек, то и результат получается соответствующий. И измените входной синхронизатор до двух триггеров. 2 триггера на синхронизатор. 1 триггер на детектор.
  12. Использовать кнопку как тактовый сигнал ? Ну не знаю, не знаю.....
  13. Клок - это опора. Относительно клока рассчитываются остальные задержки. Если при, выбранном Вами клоке, рассчитываемые задержки соответствуют тем диапазонам, которые указаны в datasheet - то никаких проблем с другим клоком быть не должно. Во всяком случае я запускал память на меньшем клоке, и проблем не встречал.
  14. Ну там не только в этом проблема.... Например, одновременная работа по переднему и заднему фронту. Фактически это ошибка.
  15. Вы лучше подробно опишите изначальную задачу. Затем, опишите алгоритм того, что было сделано. А дальше будет видно. Советую почитать: http://iosifk.narod.ru/nat_m3.pdf
  16. Ну... Это в Ваших же интересах описать задачу наиболее полно. Но я ещё нигде не видел, чтобы для описания задачи требовалось 2000 строк. Не каждое ТЗ на изделие имеет столько... Но если надо - то выкладывайте
  17. А если бы вы прислушались к совету описать все подробнее - то может быть и ещё варианты решения появились...
  18. Вы документацию читали на FIFO ? У Altera очень хорошо описана эта корка. Ещё можно отмоделировать FIFO. Вы задаете странные вопросы. Если очень упрощенно: если включен режим Show-Ahead, то сигнал чтения данных из FIFO (rdreq) фактически является сигналом подтверждения чтения. При этом ещё одной важной особенностью являет то, что данные автоматически появляются на выходе FIFO.
  19. Нет конечно. Там если вы посмотрите структуру ножки TX и RX, то увидите что они отличаются. Для приёма как правило более сложная структура. Если очень нужно много LVDS линий - посмотрите внешний конвертер в LVDS.
  20. Опишите проблему так: Надо сделать - и ПОДРОБНО описываете проблему. Моя реализация - скидываете полноценный код, а не "огрызки". Можно даже архивчик забабахать со всем. Столкнулся с проблемой - описываете проблему. Тогда Вы наиболее вероятно получите полноценный ответ на вопрос. А может ещё Вам подскажут альтернативную реализацию, которая может быть лучше Вашей. И в итоге Вы получите ответ на вопрос. И форум дополнится ещё толикой мудрости... Сейчас же лазить по форуму, вникать в "огрызки - нет никакого желания.
  21. Начните отладку с VGA и простейшего синхрогенератора. Подключаете через обычный ЦАП к VGA монитору и проверяете. ЦАП можно на коленке из резисторов собрать. Когда заработает VGA. Начинайте отлаживать TMDS кодер. Отлаживать просто: берете кодер и декодер. На вход кодера идут данные - с выхода декодера выходят данные. Очевидно, что на выходе должно быть то же самое, что и на входе. Потом отлаживайте SDRAM. Модель памяти берите у микрона (www.micron.com) Когда заработает на микроновской модели - тогда меняете задержки под Вашу память. Контроллеры памяти для SDRAM на 99% одинаковые. Разница только в задержках. Сейчас я ткнул пальцем в SDRAM контроллер и сразу увидел работу по двум фронтам clk одновременно. Уже ляп, как минимум. (100 строчка и 110 строчка) Могу поделиться TMDS декодером. 100% проверенный, гарантированно работающий. Правда на VHDL. На самом деле вывод на DVI/HDMI монитор - штука не самая сложная. Можете даже попробовать без SDRAM буфера обойтись для тестов ибо данные, которые выходят с VGA - сразу должны попадать на TMDS кодер, откуда потом сразу на частоте x10 (или частоте x5 если применить DDR регистры - это небольшой намек, как ещё можно делать) через серилайзер уходят на DVI. Фактически буферизировать ничего не надо.
  22. Хотите сделать правильно и удобно - делайте цифровой автомат. Потом на отладке сэкономите кучу времени. Когда буду дома могу скинуть пример