Перейти к содержанию
    

DuHast

Свой
  • Постов

    348
  • Зарегистрирован

  • Посещение

Весь контент DuHast


  1. Я бы ещё сигналтапом посмотрел на входные сигналы и на результаты всех четырёх сравнений в строчке got_It <= '1' when xHeader(4) = A_BYTE_KEY and xHeader(3) = B_BYTE_KEY and xHeader (2) = (not xHeader(1)) and xHeader(0)(7 downto 2) = "000000" else '0'; т.е. завел бы 4 сигнала и присвоил бы им без защёлкивания в тригере результаты 4-х сравнений. Может с входным воздействием проблема. Ещё заметил, что у Вас старые ключи симметричны относительно ориентации бит в байте, а новые нет.
  2. Порядочные синтезаторы так себя вести не могут. Проблема должна быть в коде. Хотелось бы посмотреть на Ваш "процесс приема"
  3. Сомневаюсь, что Вы этого не знаете, но, на всякий случай, напишу, что в блочной двух портовой памяти порты могут иметь разную разрядность.
  4. Использование примитива не обязательно. В проекте объявляете положительный пин и используете его, как обычный сигнал, а в пинпланере объявляете его дифференциальным, после этого отрицательный пин квартус назначит сам.
  5. Это не обязательно. Триггеры, как на шине адреса, так и на шине данных можно независимо отключать, по желанию разработчика. Конечно, тактовая при этом уменьшается.
  6. Можно в COREGenaranor'е создать блок ROM и вставить его в свой проект. При создании блока укажете ему файл с Вашими рассчитанными значениями. Ну или в коде вместо signal ram : memory_t := init_ram; написать: signal ram : memory_t := (12,34,355,222........); :)
  7. Насколько я в курсе, Time-Limited файл прошивки у Alter'ы создается, если в проекте есть IP модуль, на которую нет лицензии. Либо отключите этот IP модуль, либо ищите лицензию на него.
  8. 2 faton_11, буду в выходные дома пришлю Вам проект. Есди сами до этого времени не разберётесь, пришлите почту в личку.
  9. Проверьте внимательно входные сигналы в тестбенче и посмотрите, какие предупреждения выдаются во время симуляции. Я библиотеку гетерю по другому. В квартусе: tools=> create libraries или что-то в этом роде. Указываете, какие компоненты нужны для симуляции, на выходе папки с библиотеками, которая надо скопировать в папку проекта. Моделсим сам их подхватит.
  10. Была похожая проблема, правда с QDR. Просто опишу свою ситуацию, может Вам поможет. После включения пита local_init_done иногда устанавливался в 0. Причем, как и у Вас только на одной из двух микросхем. Выяснил, что контроллер при включении питания пишет по нулевому адресу 0x55 и потом пытается вычитать его от туда, меняя при этом задержки толи шины данных, клока (калибрует). Если удачно, то local_init_done <= 1 иначе local_init_done <= 0. При дальнейшей работе калибровка не проводится ( у Вас не так, может потому что DDR2). Внимательно почитав доки на altmemphy, понял, что на плате перепутана полярность дифференциального клока, и не потому что разводчик платы "редиска", а потому, что в альтеровских доках мелким шрифтом на 100 какой-то странице написано " если ваша память работает по циклу 2.5 или 3.5, то заводите сигнал положительной полярности на вход с отрицательной полярностью и наоборот". Поскольку плату переделать я не мог, то пришлось констрейнами уговорить Quartus , задержать входной клок на пол периода, что получилось. Далее с local_init_done проблем не было, но были проблемы с тем, что из памяти не всегда читалось то, что туда писалось, особенно если ПЛИС была хорошо закружена. На этот раз проблема была в нехватке питания, и плату пришлось дорабатывать напильником. Может, я написал немного сумбурно на из моего опыта работы с различными высокоскоростными интерфейсами могу сделать следующие выводы: 1. Зачастую это проблема печатной платы 2. Плисовод в состоянии либо исправить эту проблему, либо четко указать на неё разработчику платы.
  11. Слышал лет 8 назад о подобной попытке, которая закончилась неудачно. Может на этот раз получиться.
  12. Проблем никогда не было. В корневой папке проекта должна папка altera_mf с одноименной библиотекой и сам файл инициализации, причём можно mif. Подключаем библиотеку LIBRARY altera_mf; USE altera_mf.altera_mf_components.all; и вперёд.
  13. Сжечь еретика. :maniac: А если серьезно, то можете привести пример на каких частотах, в каких кристаллах и какой функционал Ваших проектов.
  14. Результат результатом, но велосипед изобретать тоже не хочется. Буду делать соответствующие выводы. Всем спасибо.
  15. Две переменных на один счетчик? Жуть. Комбинаторные процессы вообще считаю чем-то искусственным. Хотя... нашёл в этом рациональное зерно и сформулировал для себя следующие правила, которые буду тестировать на практике: 1) не использовать блокирующее присвоение, если это возможно. 2) Если к переменной применяется блокирующее присваивание, то значение этой переменной передаётся во вне процесса через другую переменную с неблокирующим присваиванием.(так в VHDL variable не видны вне процесса и выполнение этого пункта происходит автоматически) Тогда код будет выглядеть так(предполагается, что соблюдение первого пункта правил невозможно): always @( posedge Clk) begin cnt=cnt_r+1; cnt_r<=cnt; end always @(posedge Clk) begin del<=cnt_r; end
  16. Всем привет. Работаю с VHDL довольно давно, но тут, от нечего делать, решил поиграться с Verilog и вод что получилось: always @(posedge Clk) begin cnt=cnt+1; // cnt<=cnt+1; end always @(posedge Clk) begin del<=cnt; end Здесь cnt - счетчик, del - он же, но задержанный на такт. Quartus синтезирует всё, как и было задумано, не зависимо от того, какое присваивание происходит в третьей строке. А вот при симуляции в ModelSim при блокируемом присваивании, задержка не происходит. Как если бы оба присваивания находились в одном always. Почему Quartus и ModelSim ведут себя по разному и как избежать подобных расхождений в дальнейшем?
  17. Так у Вас проблема при симуляции. А можно посмотреть, как Вы формируете входные сигналы для памяти.
  18. Метастабильность? Уверен, что если, для теста, будете писать и читать одним клоком, то всё будет Ок. У меня была похожая проблема, с FIFO, но там Мегавизард предлагал улучшить исполнение за счёт увеличения используемых элементов, что и помогло. Тригеров, что ли напихайте до и после памяти :) Нет, с метастабильностью я погорячился. В RAM, в отличии от FIFO, клоковые домены чётко разделены. Но тест с одним клоком я бы всё равно провёл.
  19. Если Вы пишите про триггеры, то это синтезируемый код , а если про after, то это симуляция.
  20. Всё. Первое не указан список чувствительности процесса. Но не это главное. Как долго Вы собираетесь держать outflag в '1' ? Если добавить input в список чувствительности, то после его изменения outflag перейдет из начального состояния (должно быть 'X") в '1'. Но к чему тогда else? Всё что под ним никогда не будет исполняться.
  21. Можно предположить: 1 Вы запитываете PLL'и клоками, которые могут питать только, например, 1-ую PLL. 2 В проекте есть трансивер, который забирает для своей работы одину из PLL.
  22. IP core подсчёта CRC генерил в Quartus 11 использовал в Quartus 13, который её уже не поддерживал. Всё работало.
×
×
  • Создать...