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

Krys

Свой
  • Постов

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

  • Посещение

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


  1. Ну об этом я уже хвастался тут Я не о том. А вот о чём. Если открыть доку на DSP48, то там будет параметр, задающий синхронный или асинхронный сброс в DSP48. Чисто теоретически, синтезатор имел возможность понять по Вашему коду, что этот параметр надо при синтезе выставить в асинхронный режим. Другое дело, что он этого асинхронного сброса почему-то не распознал... Это уже недостатки синтезатора. Возможность у него была.
  2. там вроде был где-то параметр указания типа сброса: синхронный или нет. Хотя могу путать. Ну и конечно ничто не мешает всё равно на этом месте синтезатору спотыкаться. Просто не умеет корректно обрабатывать, возможно. Так что Вы может быть очень даже правы ))
  3. Одной из причин может быть то, что подаваемая частота 50Гц не строго синхронна частоте выборок АЦП, поэтому возникает размытие спектра. Попробуйте тест вашего БПФ не на реальных данных с АЦП, а на заранее подготовленном в Matlab буфере данных, где частота сигнала строго синхронна получится. Можно даже в симуляторе прогнать наверное.
  4. навскидку: положительное значение fractional bitwidth говорит о том, что десятичный разделитель (точка, отделяющая целую и дробную часть) находится левее на столько-то битов по сравнению с положением этой точки ровно после самого младшего бита разрядной сетки данной переменной. А отрицательное значение - соответственно, что десятичный разделитель находится правее. Это однозначно означает, что разрядная сетка вашей переменной содержит только целую часть, и то не всю, а начиная с какого-то разряда (указанного в отрицательном значении fractional). Вот пример: разряды вообще : 9 8 7 6 5 4 3 2 1 0.-1 -2 -3 разрядная сетка : 4 3 2 1 0 конкретной переменной В данном примере у конкретной переменной bitwidth = 5, а fractional bitwidth = -4. Это говорит о том, что нулевой разряд вашей переменной он на самом деле не нулевой, а 4.
  5. решили проблему? В чём была ошибка?
  6. Выигрыш ещё и в том, что на последующих этапах децимации тактовая частота поступления отсчётов снижается, и фильтры могут работать в т.н. "полифазном" режиме, т.е. когда на одном и том же умножителе обсчитывается сразу несколько коэффициентов последовательно, а на умножитель подаётся повышенная тактовая частота.
  7. Короче завёл полностью тот же текст под функцию - проблема исчезла. Так что такой вот workarround этого бага. Если кому-то допустимо менять таск на функцию.
  8. а, ну тогда в любом брандмауэре отрубить ему вообще под ноль доступ к инету. Или есть проги (для андроида это называется adaway), которые все рекламные адреса добавляют в файл hosts, после чего эти адреса не грузятся ))
  9. А вообще в Вашей конструкции DSP48 хоть в каком-то виде вставляется, но без PREG? Или он вообще ни в каком виде не вставляется, а суммирование делается на рассыпухе? Возможно, его смущает "after td". А возможно, ena. Попробуйте для начала убрать оба. Возможно, тип сигнала data должен быть signed, а прибавляемая величина - ту же разрядность (т.е. надо единичку расширить), хотя последнее - вряд ли должно влиять.
  10. Спасибо за версию. Насколько я понял, всё, что не указано в шапке task, не является подставляемыми параметрами и берётся из переменных, объявленных вне task (как глобальные). Таким образом, rst в таск заходить должен, как и куча других сигналов, которые я в шапке таска не объявил (куча других сигналов у меня используется в "боевой версии", а когда я сюда выкладывал пример - упростил его до предела, чтобы выявить суть). То, что rst заходит в таск, косвенно подтверждает и то, что всё работает, как надо, если поменять условие в нижней ветви на определённое, скажем, 1'b0. Использую pure verilog.
  11. Здравствуйте. Хочу поделиться багой Aldec Active HDL: неверно симулирует условия с неопределёнными состояниями (x) в task. Ну или у меня лыжи не едут ))) Условия задачи: Код с таском: task ovfl_proc; output res; input inp; if(rst) begin res <= 1'b1; end else begin if(1'bx) begin res <= 1'b0; end else begin res <= inp; end end endtask always @(*) begin ovfl_proc(fifo_ovfl, fifo_ovfl_r); // output value, old value end и без таска: always @(*) begin if(rst) begin fifo_ovfl <= 1'b1; end else begin if(1'bx) begin fifo_ovfl <= 1'b0; end else begin fifo_ovfl <= fifo_ovfl_r; end end end В момент действия сигнала rst код с таском даёт неопределённое состояние: А код без таска даёт единицу, как и должно быть (или у меня лыжи не едут?). Как я понимаю, согласно коду, в момент действия rst работает верхняя ветвь условия, поэтому должно быть пофигу, какие условия (определённые или нет) находятся в нижней ветви. Если неопределённое состояние в условии заменить на любое определённое, то отрабатывает корректно в обоих случаях.
  12. У меня была собственная корка, у неё был AXI-Lite интерфейс к процу. Среда SDK могла читать содержимое регистров по заданным мной адресам памяти, так что я наблюдал актуальное состояние регистров корки. Только помню, что вычитывалось не просто постоянно, а по какому-то событию, не помню по какому. Вот подзабыл уже. Толи при паузе программы, то ли при обновлении экрана... ))) Чипскоп частенько не любит одновременно работать во время отладки в SDK... Как лечится - не знаю, у нас коллеги на это ругаются, а у меня ни разу такого не вылазило.
  13. А намного ли это быстрее, чем ручками с применением автоматизации блочного выделения в Notepad++? Пользуюсь последним, копировать цепи согласно указанным Вами проблемам вообще не напрягало...
  14. Интересно, китайские V2 можно применять в нашей военной отрасли? Или только отечественные ПЛИС...
  15. Вот именно! Xilinx позволяет подцеплять несколько ucf-файлов.
  16. В ISE есть такая опция: Может, надо Вам такой же ключик в Aldec прописать?
  17. А откуда же у Вас такое мнение, если у самого не получалось? У коллег получалось?
  18. И вообще, не на языке описания. А только макрокомпонентом. Подробности тут
  19. Здравствуйте. Подскажите, пожалуйста: синтезатор Xilinx даёт ошибку: Функция такая: function clog2ge1; input x; clog2ge1 = ($clog2(x) < 1) ? 1 : $clog2(x); endfunction Какими рациональными причинами можно объяснить такое ограничение? И как его обойти?
  20. Поковырялся тут маленько. Похоже показывает состояние памяти на момент окончания симуляции (точнее симуляция на паузе). Исходный вопрос остаётся в силе: Как заставить показывать содержимое памяти в Memory View в определённый момент времени, определяемый положением курсора? (или надо как-то по-другому указывать момент времени показа содержимого для Memory View?)
  21. ну понятно, что оно везде "рекомендация", т.к. если я атрибутом попрошу разместить какой-то элемент там, где он размещён быть не может чисто физически (например опишу массив памяти под атрибутом USE_DSP48), то такая "рекомендация" будет проигнорирована. А в моём случае всё реально.
  22. Сделаем из старой темы по типу "вопрос-ответ". Мой вопрос: вывел содержимое памяти на Memory View. Двигаю курсор по осциллограмме, где сигналы заполнения памяти.Ожидаю, что циферки содержимого в Memory View будут меняться (так работает по крайней мере Cadence). Но не меняются, хоть куда курсор в осциллограмме ставлю, хоть в самое начало (где содержимое 100% другое, не определено). ЧЯДНТ? )) Как заставить показывать содержимое памяти в Memory View в определённый момент времени, определяемый положением курсора? (или надо как-то по-другому указывать момент времени показа содержимого для Memory View?)
×
×
  • Создать...