Jump to content

    

RobFPGA

Свой
  • Content Count

    1887
  • Joined

  • Last visited

Everything posted by RobFPGA


  1. Приветствую! Вообще для 40 KHz требуемая точность измерения расстояния должна быть десятитысячные доли мм или даже меньше. Не хотите же вы сказать что у вас на 40 KHz амплитуда в пару см? Опять же для такой частоты колебаний мерить по "площади" сложно так как на такой частоте непонятно какие будут упругие колебания поверхности. Так что скорее всего напрашивается что-то точечное с лазерным излучателем c AM модуляцией 30-100 MHz. Или что-то типа СВЧ автодин-радиолокатора. Сейчас можно найти интегрированные решения для таких локаторов. Но вот хватит ли чувствительности для требуемой точности? Удачи! Rob.
  2. Приветствую! Пока суть да дело, да очередная компиляция идет прикинул вариант без ругани на отсутствующие переменные `define asgXX( a_name, v_name, i1, n) `_asgXX_``n(a_name, v_name, i1) `define _asgXX_1( a_name, v_name, i1) assign a_name[i1``0] = v_name``i1``0; `define _asgXX_2( a_name, v_name, i1) `_asgXX_1( a_name, v_name, i1) assign a_name[i1``1] = v_name``i1``1; ... `define _asgXX_10(a_name, v_name, i1) `_asgXX_9( a_name, v_name, i1) assign a_name[i1``9] = v_name``i1``9; generate `asgnXX(va, r_, 0, 10); ... `asgnXX(va, r_, 4, 9); endgenerate Писанины чуть больше, ругани при компиляции меньше. Удачи! Rob.
  3. Приветствую! То что у вас это как раз стандартная конкатенация строки в макро-подстановке. Поддерживается вроде с 2005 года. Кроме того могло поддерживаться разными вендорами и ранее, еще до включения в стандарт. Удачи! Rob.
  4. Приветствую! Какая конструкция? Удачи! Rob.
  5. Приветствую! Я не вижу проблем с таймиг-анализом даже если такой клок будет идти обычным интерконнектом. Понятное дело skew будет большим но это дизайнер и должен учитывать при задании констрэйнов. А тулз при P&R может разве что поворчать " ... что клок мол из жо.. одного места выходит ..." но тайминги посчитает нормально. Ситуацию когда в FPGA сигнал нельзя на глобальный буфер назначить я уже не помню когда и встречал, но ясень пень это специфика, и для нее нужны другие решения. Удачи! Rob.
  6. Приветствую! Макро подстановка работает ДО момента начала компиляции. То есть когда "работает" цикл макро уже нет :( Поэтому можно лепить макро только упрощающие код, типа такого `define asgnXX(a_name, v_name, idx1, len) \ if (len>0) assign a_name[idx1``0] = v_name``idx1``0; \ if (len>9) assign a_name[idx1``9] = v_name``idx1``9; \ if (len>10) assign a_name[-1] = 1 reg [48:0] va; reg r_00, ..., r_48; generate `asgnXX(va, r_, 0, 10); ... `asgnXX(va, r_, 4, 9); endgenerate Но тут тоже проблемы могут быть так как может ругаться на отсутствующие переменные (типа r_49) если в коде таких нет. Хотя они реально и не присваиваются. Удачи! Rob.
  7. Приветствую! Такую же "навороченную" логику я воротил еще на MAX7000/Flex10k/VirtexE когда мне надо было переключать источник клока. И все на обычной логике и триггерах. А также делал классический gated clock на пол чипа чтобы синхронизировать обработку в сложной логике и не тянуть тучу сигналов СE на каждый триггер. И это не считалось чем-то зазорным. Об этом естественно надо помнить. А вот тайминг анализ вполне себе нормально работает если вы не пытаетесь задрать констрэйны по самые гланды. Для прогнозирования - слепили генератор, - оценили задержки по миниму и максимуму, накинули запасец и получили рабочий диапазон частот. В чем проблема для тайминг анализа? Ситуации бывают разными, кто-то что-то забыл, кто-то не проверил, ... - можно конечно стать в позу и обос.... "тряпку" - а можно найти рабочее решение не оглядываясь на "авторитеты". Еще раз повторюсь - IMHO хороший разработчик должен знать и уметь делать все, в том числе собирать "костыли" из подручных веточек. Удачи! Rob.
  8. Приветствую! Увы - в Verilog генерировать имя переменной в цикле нельзя. Поэтому единственный путь "упрощения" себе жизни как советовали выше внешний кодогенератор.Ну или использовать макро. Заменой на массивы тут не получится использовать так как это довольно распространенная проблема при стыковке с чужим кодом со множеством однотипных портов или переменных (который тоже чаще всего генерится автоматом из шаблонов). Удачи! Rob.
  9. Приветствую! Вполне рабочая идея. Правда решение такое получится не самое дешевое но это и естественно. Получится этакой hand-made metamako switch Хотя полносвязная матрица 24х24 на 10G потребует серьезной буферной памяти и немало работы. Понятное дело если делать для себя то можно и "сэкономить" на функционале или совместимости со стандартами. Но это как и плюсы/минусы такой работы надо тщательно взвешивать. Удачи! Rob.
  10. Приветствую! Вопрос скорее стоит не в железе, а в экономии на лицензиях на софт - покупать кучу дорогих лицензий на каждое рабочее место бывает не выгодно если этот софт реально нужен всего несколько дней в месяц. Удачи! Rob.
  11. Приветствую! Да, вы можете строить каскады из AXI interconnect так как будет удобно. При этом желательно распределять master|slave между интерконнектами так чтобы минимизировать траффик межу разными блоками interconnect . Удачи! Rob.
  12. Приветствую! Разрядность аккумулятора фазы влияет на точность частоты которую вы можете генерировать - чем больше чем более точнее можете задавать генерируемую частоту. А размер выходной таблицы sin/cos влияет на величину гармоник. Так как вход задания частоты у вас всего 8 бит то надо масштабировать его перед суммированием в аккумуляторе ( Kfi = Kfin*A + B). Ну и для уменьшения размера таблиц sin|cos можно использовать интерполяцию . Удачи! Rob.
  13. Приветствую! " Вы и пальцы за меня загибать будете? Ага!" (Вовка в тридевятом царстве) ... Эта возможность у TC разбивается о его же хотелки "... динамической конфигурации соединения всех имеющихся аналоговых контактов ..." без всяких ограничений. Удачи! Rob.
  14. Приветствую! Судя по всему новая фича это использование на форуме таких "высоко инженерных" терминов. Без всяких на то знаний и умений для анализа ситуации (окромя пары статеек на хабре или ixbt). Удачи! Rob.
  15. Приветствую! Память для PCie? Или вы имеете ввиду NVMe? Не нужно громко кричать если запахло г.., надо для начала пощупать свои штаны Жуткий дефицит возникает и от того что товар хорош и все его хотят купить - несмотря на то что он и на "устаревшем" техпроцессе. Удачи! Rob.
  16. Приветствую! Это может быть и кусок г... (грязи) А вообще это просто открытый вход с подтяжкой к питанию рассчитанный на подключение контактов с замыканием на землю. И в точке TP6 будет напряжение 24*10/61 = ~3.9V или 0 при нормальной работе. Ну или от -0.7 до +5.7 при попытке воткнуть вход в 220 V переменки . Удачи! Rob.
  17. Приветствую! Vivado при создании скрипта проверяет версию сима и естественно возмущается не находя знакомого названия. В ISE вроде можно было создать скрипт без запуска самого процесса компиляции. Но давно уже не работал с ISE мог и подзабыть. Самый простой вариант - посмотреть в скомпилированных библиотеки - там обычно есть копия/лог выполнения скрипта компиляции. Удачи! Rob.
  18. Приветствую! Основание вот. А без бубна увы не получится. Скрипт для компиляции библиотеки надо будет ручками ваять. Но не факт что все криптованые примитивы Xilinx могут быть скомпилированны. Удачи! Rob.
  19. Приветствую! Мне такой подход нравится - в этом и прелесть Проблема в вашем варианте может быть в том что проект Vivado тяжело переносим - при попытке clone на другую машину вы скорее всего получите нерабочий проект с кучей глюков из за путей файлов. Удачи. Rob.
  20. Приветствую! Есть вариант Modelsim Started Intel edition. Работает без лицензии (если вам не нужны крутые фичи для верификации и вы никуда не торопитесь ) Удачи! Rob.
  21. Приветствую! Думаю что единого правильного решения пока нет. Каждый делает так как будет ему удобно и привычно. Я например сразу делаю все исходники внешними к проекту. Сам же проект воссоздается скриптом. Удобно при работе с СКВ, но и минусы есть так как надо не забывать експортировать изменения в проекте (в основном BD, и сам файл проекта). Но это легко автоматизируется скриптами. Удачи! Rob.
  22. Приветствую! Это не "gated clock" - это просто выход инвертора. И то что на вход clk триггера clk_o идет сигнал котрый (о боже!) не является выходом clock buffer никак не делает этот сигнал ужасным "gated clock". Вы же не называете gated clockом выход с глобального клокового буфера? Для того чтобы clock стал gated его нужно пропустить через логический элемент AND/OR и неаккуратно управляя этим элементом разрешать или запрещать срабатывание триггера. Хотя в таком случае почти все клоки последних семейств (например в Xilinx) можно считать gated - так как они управляются через BUFG_CTRL логику позволяющую управлять состоянием клока. И как тогда быть бедному новичку - ему же больно сидеть будет Тактирование clk входа триггеров в FPGA не только сигналами обычных клоков, а и сигналами формируемыми на лог примитивах или с выходов других триггеров (ripple clock) стандартная практика для решения некоторых задач. Естественно при полном понимании специфики этого использования. Удачи! Rob.
  23. Приветствую! Что ж - судя по всему ваша колокольня очень высока и вам с нее наверное не видно что в приведенном коде как раз присутствует атрибут для синтеза - равно как отсутствует gating clock в классическом понимании этого термина. Думаю что вам как и новичкам тоже будет полезно это знать. Ну и мое имхо что основной источник геморроя для начинающих это отнюдь gating clock а отсутствие опыта что и как можно сделать в той или иной ситуации. И если не объяснять новичкам возможные решения равно как и и нюансы применения этих решений они так и останутся новичками - суеверно крестящимися при упоминании какого либо страшного термина. Например того же devilish gating clock Хотя это вполне стандартная методика применимая для решения некоторых задач даже в FPGA. Удачи! Rob.
  24. Приветствую! Вот интересное решение в виде пружинных контактов. Удачи! Rob.
  25. Приветствую! Это и невозможно - так как давно уже понятно что вопрос TC это классический псевдонаучный троллинг. Непонятно для чего - скучно может, а может посты набирает. Удачи! Rob.