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

crono

Свой
  • Постов

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

  • Посещение

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


  1. Спасибо всем, кто откликнулся. Вопрос работы снят. Прошу прощения у тех, кому не ответил.
  2. Ищу интересное предложение по программированию ПЛИС XILINX. Опыт работы с XILINX-ом с 2003 года. Работал с очень большим перечнем данных микросхем от Spartan 2 до Virtex 7. Реализовывал интерфейсные части (Rapid IO, Aurora, PCIe (вплоть до GEN3) ), участвовал в создании кластеров обработки на базе Virtex-5. АЦП/ЦАП, всякие DDR2/3 - само собой. Реализовывал узлы ЦОС (FFT, DDC). Из последних достижений: алгоритм хэширования с очень высокой плотностью упаковки в ПЛИС Kintex-7 (могу показать скриншоты из вивады) и очень высоким быстродействием: 600 МГц (могу продемонстрировать на ките). Освоил такие технологии как Partial Reconfiguration, Hierarchical Design. Работал с Vivado HLS. Пишу на VHDL. Год (2012-2013) работал в Германии, есть даже блаукарта высококлассифицированного:) специалиста. Интересное для меня - это задачи, связанные с обработкой данных, где требуется высокая оптимизация, большие скорости. Живу в defaultcity:) Более подробное резюме вышлю при заинтересованности.
  3. Прошивка в ПЛИС откуда грузится? Может, время загрузки превышает допустимое? BitStream Compression включен?
  4. FPGA фриланс

    Добавился опыт создания DMA-контроллера для PCIe на Virtex-5 и Spartan-6 с использованием PartialReconfiguration.
  5. "Статья 319. УК РФ. Оскорбление представителя власти. наказывается штрафом в размере до сорока тысяч рублей или в размере заработной платы или иного дохода осужденного за период до трех месяцев, либо обязательными работами на срок до трехсот шестидесяти часов, либо исправительными работами на срок до одного года." Там что-то тоже про часы говорится... :rolleyes: Так что тысячей не отделаетесь
  6. Так если frame_wr = 1 то ведь даные и должны обновляться на каждом таке. Вот при нажатии на Т! (теущее состояние буфера чипскопа) данные каждый раз новые. Или я что-то не понял?:)
  7. Вот эту ветку посмотрите. Там много написано про списки чувствительности и синхронные и асинхронные процессы.
  8. А так Вы автор:) Нет, как 4 числа сложить, это понятно, что сначала нужно две пары сложить, а потом найти сумму пар. Это если стоит задача уменьшить длину конвейера. Но просто я специально написал, что между if(rising_edge(clk))then sum <= a + b + c + d; end if; и if(rising_edge(clk))then sum <= ( a + b ) + ( c + d ); end if; разницы нет, так как длина конвейера одинаковая в обоих случаях. Синтезатор просто раскроет скобки. Чтобы убедиться, я сейчас синтезировал обе эти схемы. Результат как и ожидалось побитно совпадает. То есть скобками задача уменьшения длины конвейера или занимаемых ресурсов не решается. Нужно писать что-нибудь типа if(rising_edge(clk))then sum_ab <= a + b; sum_cd <= c + d; sum <=sum_ab + sum_cd; end if; Тогда да, логически это будет выглядеть как sum <= ( a + b ) + ( c + d );
  9. Это было всего лишь мое мнение. Раздел именование. Пункт 1 мне показался спорным. Допустим, ResetFirstPoint более читаем, чем resetfirstpoint. Пункт 3 либо невнятно написан, либо опять же довольно спорен. Скажем, clkadc, clkdac более информативны чем, clk1, clk2. Пункт 4 под вопросом. Допустим, xilinx очень часто в своих ядрах использует вектора 0 to N. И Иногда это действительно удобней. Раздел Текст описания... Пункт 14 для чего? Почему именно верхнего уровня, а не каждого? Наглядность нужна только для внешнего уровня? Да и вообще лишнее это, по-моему. При помощи языка VHDL и без графических редакторов можно писать довольно наглядные схемы. Пункт 15, я считаю, просто вводит в заблуждение. Для чего в синхронном процессе в списке чувствительности что-то кроме сброса и тактового сигнала? Тем более, что сам автор в этом пункте говорит о возможном замедлении процесса моделирования. Пункт 8 из синтеза тоже непонятен. Почему нельзя использовать 2 тактовых сигнала в одном модуле? Просто декларируется и все: нельзя! А почему? Я вот, допустим, использую и в чем проблема понять не могу. Пункт 9. Как делать счетчики? Допустим, счетчик адреса. Я по незнанию использую арифметический оператор + или -. Пункт 10. Я разницы не уловил. Если я напишу if(rising_edge(clk))then sum <= a + b + c + d; end if; или if(rising_edge(clk))then sum <= ( a + b ) + ( c + d ); end if; по-моему, будет одинаково плохо. И задействует одни и те же ресурсы. Безусловно, есть в этой статье и много полезного, но все что я перечислил, на мой взгляд, как минимум спорно. А так как эта статья была упомянута именно в контексте списка чувствительности, то я и поделился своим мнением:)
  10. В списке чувствительности clk. Процесс срабатывает на каждое изменение сигналов в списке чувствительности и на положительный фронт и на отрицательный.
  11. У Вас есть уверенность - это хорошо. У меня нет. К тому же что такое "работать"? Если на модели как-то выходные сигналы поменялись в результате изменения входных - это еще не значит "работать". Для курсовой, может быть, и пойдет, а во что это выльется после работы синтезатора, я представить себе не могу, да и не хочу по той причине, что не сделаю так никогда. Но, думаю, вероятность того что поведение на модели и в ПЛИС будет различаться высока. Поэтому для меня то что было написано скорее не будет работать, чем будет.
  12. Как правило стараются защелкивать в триггере выход схемы/узла/модуля. Соответственно, схему нужно изменить. Если Вашими терминами, то она должна состоять из инвертора, элемента 2и и одного триггера. Да какие загадки. Если в списке чувствительности только тактовый сигнал, то вся логика должна находиться внутри if rising_edge(clk) then end if; все что находится за if rising_edge(clk)... end if; становится асинхронным, соответственно, либо в отдельный процесс и в список чувствительности все сигналы, которые влияют на выход. В данном случае сигнал c и сигнал a; Либо делать синхронным и вставлять внутрь if rising_edge(clk)... end if; А в том виде, в котором процесс написан он работать не будет. Ну уж если до конца, то process (clk) begin if rising_edge(clk) then outp <= vhod1 and not vhod2; end if; end process;
  13. К слову сказать, процесс написан неправильно. Похоже, тема списка чувствительности осталась неусвоенной:)
  14. Задумываться безусловно нужно. Но статья спорная. Вот пример синхронного сброса process(clk) begin if(rising_edge(clk))then if(rst = '1')then en <='0'; else en <= a; end if; end if; end process; Вот пример асинхронного сброса. process(clk,rst) begin if(rst = '1')then en <='0'; elsif(rising_edge(clk))then en <= a; end if; end process; На модели они ведут по-разному и синтезируются по-разному. Вот это просто надо запомнить. Тут все написано про список чувствительности:
  15. Так это и есть динамическая подстройка. На неком интервале измерить количество нулей и единиц и если счетчики вышли за некие границы, подстроить фазу. А если не нравится постоянно дергать ее, то можно просто провести инициализацию, скорректировать фазу, и в рабочем цикле ее не трогать. На ксайлинксе же прекрасно работает и динамический режим, к тому же на деле дерганье фазы можно настроить так, чтоб происходило оно относительно редко.
  16. Это только если сброс асинхронный. Если сброс синхронный, то в списке чувствительности только тактовый сигнал:)
  17. Вообще, я говорил о динамеческой компенсации линии клока от входной ножки до точки, где клок становится глобальным. Так как все остальное при правильной трассировки платы, по идее, компенсации не требует. На входе ПЛИС клок и данные симфазны. Данные АЦП защелкиваются прямо на входе ПЛИС. Значит остается неопределенным только путь клока от входной ножки до буфера глобального клока. А для компенсации этого пути никакие паттерны не нужны. нужен только сам клок. Идея там очень простая. Входной клок защелкивается во входном буфере глобальным клоком после плл. и вращением фазы плл добиваемся примерно равной вероятности появления 0 и 1. Если мы этого добиваемся, то наш глобальный клок по фазе совпадает с входным клоком АЦП. А данные АЦП защелкиваются клоком сдвинутым на 90 градусов от этого клока.
  18. Да там и танцев то особых нет. Просто компенсируется задержка клока от входной ножки ПЛИС до попадания на глобальный клок. Задержка эта впринципе может от разводки к разводке поменяться. А на счет предельных частот, то 200 МГц DDR это точность установки клока плюс минус 1.25 нс. Достаточно короткий интервал.
  19. Чем не нравится этот вариант? Мы применяли данный вариант, работает вполне себе хорошо. Даже отслеживает изменения температуры при нагреве платы.
×
×
  • Создать...