Jump to content

    

Krys

Свой
  • Content Count

    2001
  • Joined

  • Last visited

Everything posted by Krys


  1. Хочу похвастаться своими успехами. Вот такую схему: реализовал вот таким кодом: (* use_dsp48 = "yes" *) reg addsub_pp, muxzero_pp; (* use_dsp48 = "yes" *) reg [DIN_BW-1 : 0] din_pp, cin_pp, din_pp2, cin_pp2; (* use_dsp48 = "yes" *) reg [DIN_BW*2 - 1 : 0] mult; (* use_dsp48 = "yes" *) reg [ACC_BW - 1 : 0] acc; (* use_dsp48 = "yes" *) wire [ACC_BW - 1 : 0] dsp48_z; // z input of post-adder // dsp48 slice logic always @(posedge clk) begin addsub_pp <= addsub; muxzero_pp <= muxzero; din_pp <= din; cin_pp <= cin; din_pp2 <= din_pp; cin_pp2 <= cin_pp; mult <= din_pp2 * cin_pp2; if(addsub_pp == 0) begin acc <= dsp48_z + mult; end else begin acc <= dsp48_z - mult; end end assign dsp48_z = muxzero_pp ? acc : 0; Т.е. это простой перемножитель комплексных чисел с накоплением суммы нескольких произведений (взятие линейной комбинации входных сигналов с применением некоторых весовых коэффициентов), реализованный в последовательной форме, когда одна операция делается за несколько тактов. Здесь необходимо переключать сложение-вычитание, а также в некоторые моменты времени начинать накопление с начала, для чего подавать 0 вместо обратной связи. Радуюсь, что удалось обойтись вот такой малой кровью, а то поначалу светила перспектива описывать DSP48 как макроблок (неприятная рутина). ЗЫ: это всё скушал XST под Spartan-6.
  2. Точнее так для общего случая: +ceil(log2(N_add)) бит. Т.е. если заранее известно, что будут складываться 4 числа, то разрядность надо увеличить не на 4 бита, а всего на 2.
  3. aldec active hdl ещё умеет схемы по коду рисовать. Правда такая фигня получается ))) (бородатый анекдот: я умею печатать слепым набором со скоростью 1000 знаков в минуту! ... правда такая фигня получается...)
  4. А из какой книжки это взято? И как это работает? Можете плиз на пальцах объяснить?
  5. Ну дифцепь на резисторе и конденсаторе грубо говоря ))) В книжке Триггеры об этом говорится ))) Типа способ был не распространён в виду сложности реализации емкостей в микросхемах (того времени ))) ) А цифровой - как в современных двухступенчатых триггерах. Есть и другие способы выделения фронта на цифровых элементах, в частности, реализуемые на ПЛИС, но к синхронной логике это не относится (так делали в первобытность ПЛИС, когда о синхронном дизайне мало кто догадывался).
  6. А Вы об истории в той книжке Триггеры прочитали? Мне кажется, с динамическим управлением придумали раньше (не уверен). Но фронт выделяли аналоговым способом.
  7. Правильно - что учили по книжке. Неправильно - что книжка содержит неправильную картинку. Итого: учили неправильно ))) Правильная картинка должна быть такая: Автор книжки в виду её (и своей) архаичности поперемешал в одну кучу аналоговые и цифровые способы получения динамического входа. В итоге связь, указанная на моей картинке вопросом - она справедлива лишь для аналогового способа выделения фронта. Итого - это всё неактуально для современных ПЛИС. С другой стороны, автор книжки забыл провести связь, указанную на моей картинке стрелкой. Эта связь образуется автоматически, т.е. любой двухступенчатый триггер по умолчанию динамический (нет, ну можно, если очень надо, умудриться сделать нединамический двухступенчатый триггер, но это неконструктивно, как велосипед с квадратными колёсами).
  8. Спасибо за тайное знание! Вот уж точно хакерство ))) Т.е. это придётся делать ручками для каждой цепи?...
  9. Вот смотрите: в ISE заходите в меню tools - core generator. В нём заходите в меню file - open project, указываете путь к файлу *.cgp (обычно coregen.cgp) в общей папке ваших корок. Когда откроете - увидите внизу в окошке весь список сгенерённых Вами корок. Далее заходите в меню Project - Project Options и там видите следующее: Делаете нужные настройки симуляционных файлов. Затем заходите в Project - Regenerate all project IP (можно и по одной перегенерить). Но вполне возможно эти настройки уже и так правильно стояли, поэтому симуляционные файлы и так были сгенерены. И искать их нужно в папке с коркой. Открывайте в этой папке все подряд файлы с расширениями *.vhd и смотрите - то, не то.
  10. Ну видимо неправильно учили )) Динамическое управление невозможно сделать без двух ступеней. Либо, как написано в той же книжке выше, на аналоговых дифференциальных цепях. Двухступенчатый - это не обязательно 2 строго одинаковых последовательно соединённых триггера. Это просто 2 триггера последовательно, неважно одинаковых или немного разных. В конце концов все "разные" триггеры сделаны из RS путём навешивания на его входы и выходы всякой логической обвязки )))
  11. Вот тут например: http://www.dsplib.ru/content/complex/complex.html Частное от деления комплексных чисел имеет амплитуду, равную отношению модулей, и фазу, равную разности фаз, от этого и плясать.
  12. Насчёт разводки не уверен. Но по опыту главное - расстановка. При правильной расстановке разводка делается за секунду.
  13. Спасибо. Несколько фраз непонятны: Поподробнее пожалуйста, что значит могут, но не дотягивают? И как понять плохая повторяемость между разными блоками? Дааа... тестовый проект бы, на котором наблюдаются обе ситуации (когда при половине блоков тайминги выполняются, а для полного количества не выполняются) - проанализировать бы, где не выполняются, как сигнал проходит там и там, это же всё в конкретных примерах можно проследить. Вообще, у Вивады же куча встроенных стратегий. Можно разные RUNы настроить на разные стратегии, прогнать их все, какая-то стратегия, да вытянет Ваши требования. Вы бы вот тут человеку подсказали, что знаете. Только не в приват, а в тему, чтобы все могли читать и впитывать опыт...
  14. Припоминаю, что когда-то делал такое для виртекса 6 серии. У Вас спартан, но тоже 6 серии, так что наверное всё то же самое. Может, здесь? http://www.xilinx.com/support/documentatio...ology_Guide.pdf Помню, что для Planahead была команда сохранить сделанную вручную расстановку. Затем её как-то можно было оформить в отдельную ngc-шку.
  15. Покажите плиз. Вообще обычно у корки предлагается сгенерировать vhdl-модель для симуляции. В ней и регистры будут видны. Полазьте в настройках коргенератора, посмотрите в папке с коркой на предмет наличия исходников.
  16. Не годится, в ней нет режима мануального редактирования источников сигнала для симуляции, как это было в симуляторе старых квартусов. Для простеньких проектов очень удобно.
  17. Хм... а что по-Вашему на 3 схеме образуют элементы под номерами 5 и 6?
  18. И ещё заложите раздачу тактовой на ЦАП и АЦП от одного источника, чтобы когерентно было, тоже жизнь облегчите. Ещё АЦП бывают с возможностью рандомизации битов, т.е. кодирование данных по псевдослучайному закону, чтобы разровнять спектр наводок по (от) каждой линии. Ещё бывают с возможностью генерации на выход тестового паттерна. Но это похоже не Ваш случай ))
  19. Вот тут описывается: http://www.xilinx.com/support/documentatio...versampling.pdf В двух словах: это аппаратные блоки, преобразующие последовательный поток в параллельный. Ну и наоборот. Т.е. элементарные сдвиговые регистры с некоторой обвязкой. На них подаются (на приём) последовательные данные с ног LVDS, производится подстройка задержки (на аппаратных блоках задержки, задаваемой из пользовательской логики).
  20. Да можно и обойтись попробовать... считать, что в температуре уплывёт несильно. Можно только по старту сделать, и успокоиться. А почему Вас в рантайме пугает? Положение фронтов можно ловить необязательно по заранее известному сигналу. Быстро задержка не уплывёт, а за это время хоть один фронт - да придёт. Повторю вопрос:
  21. вот тут книжку триггеры советовали: https://disk.yandex.ru/public/?hash=NTX%2B1...0Ye3OY3izHyY%3D