Jump to content

    

RobFPGA

Свой
  • Content Count

    2388
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

Контакты

  • ICQ
    Array

Recent Profile Visitors

12317 profile views
  1. Приветствую! Слишком по BARски на каждую периферию по BARу . На один из BARов вешаете AXI interconnect, а уже к нему лепите столько периферии сколько нужно . Размер этого BAR при этому должен покрывать пространство адресов всех слейвов. Только учтите что обычные материнки могут и не выделить несколько GB под BAR. Поэтому надо аккуратно распоряжаться адресным пространством. Удачи! Rob.
  2. Приветствую! Эко вы грозный! Зачем же сразу банит - надо для начала разъяснительную работу проводить, воспитывать так сказать культуру общения Удачи! Rob.
  3. Приветствую! Зачем же удалять, раз разобрались поделитесь! Для других будет полезно, да и самому через какое то время может пригодится вспомнить Удачи! Rob.
  4. Приветствую! Проблема в том что в вашей функции clogb2 возможна ситуация когда calc НЕ вычисляется - например если number <=0 . Соответственно Qu на такое считает что функция неконстантна. Для синтеза в константных функциях важно чтобы все ветки вычислялись или переменные имели дефолтные значения. Ну и если у вас SystemVerilog то почему бы не использовать встроенный $clog2(); Удачи! Rob.
  5. Приветствую! Это понятно, лень матушку надо лелеять и баловать Но увы - массив строковых переменных словами из одной исходной строки без парсера (даже простейшего) не заполнить. Так что "Пилите Шура, пилите ..." (... строку на слова) Удачи! Rob.
  6. Приветствую! Опять вы себе жизнь усложняете Где в задании сказано что инициализировать mystr по умолчанию надо рандомными словами? То есть объявление string mystr = "bla bla bla и еще 18 символов!" как раз укладывается в условие задачи Если же хочется заполнят рандомными словами тогда да - придется в цикле сначала генерировать эти слова а уж затем склеивать их в строку. Ну и получив строку через $value$plusargs (или взяв то что задали по умолчанию) придется парсить выделяя слова в пробелах. По умолчанию массивы инициализируются константами через = `{....}. Удачи! Rob.
  7. Приветствую! Для частотомера можно и ripple counter счетчик использовать. Тогда можно выжать высокую частоту счета близкую к максимально возможной для триггера (да и старт/стоп только для входного триггера делать удобнее). Естественно надо акуратно останавливать его и ждать перед считыванием пока все "успокоится" Удачи! Rob.
  8. Приветствую! Вам же в задании не сказано инвертировать все поля разом? Ну так и инвертируйте поэлементно! Зачем себе жизнь усложнять var1 = '{36, "453", 234, 434}; initial begin var1.field1 = ~var1.field1; var1.field3 = ~var1.field3; var1.field4 = ~var1.field4; ... Удачи! Rob.
  9. Приветствую! Странно - то вы пишете что на холостом ток 130 мА - то что на холостом греется на 100 Вт ? Как то не стыкуются цифры. Приведенный вами движек ДАО 73-16-3-Д33 малой мощности, дешевый по конструкции и ожидать от него высоких характеристик КПД бессмысленно. Такие движки специально проектируются чтобы безопасно эксплуатироваться в быту без применения спец защитных автоматов. Удачи! Rob.В
  10. Приветствую! IMHO в таблице приведены параметры и потребляемая мощность двигателя на холостом ходу, без всякой нагрузки. И макс. ток при максимальной нагрузке. То есть такой двиг. кушает 16 ват сам по себе. Что не удивительно для дешевых двигателей с кпд ~85% . Удачи! Rob.
  11. Приветствую! Ну вот берите и считайте - 16 бит 800х600х25 получается ~24 MB/s. Для 1600x1200 все в 4 раза хуже - ~96 MB/s. Программным чтением через CPU вы такой поток не вытащите, даже с большими буферами и частыми прерываниями. Так что без DMA вам никак. А когда DMA есть то буфера в FPGA нужны (как и говорили выше) небольшие - лишь для сглаживания пиковых провалов на шине PCIe и задержек при пере-инициализации DMA. Ну и прерывания если и нужны будут то только для этого, что как раз можно совместить с размером кадра. Удачи! Rob.
  12. Приветствую! Думаю что универсального рецепта пока нет - где то удобно интерфейсами, где-то структурами, а где-то и голыми портами да еще с потрошками макросами Каждый выбирает как ему более нравится. Хорошо когда есть из чего выбрать! Удачи! Rob.
  13. Приветствую! MSI/MSIx прерывания через PCIe это фактически запись со стороны периферийного устройства (FPGA) 32 бит слова по определенному адресу в PC. Генерировать такое прерывание можно хоть каждую 1 us, НО сомневаюсь что ваша OS потянет обработку прерываний с такой частотой. Поэтому предельная частота прерываний определяется софтом. И в обычных системах редко бывает выше 1...10KHz. Для потока данных прерывание обычно генерят по окончании пересылки данных посредством контроллера DMA в FPGA. Поэтому ван надо внимательней посмотреть на пример PCIeSGDMA скорее всего прерывания там генерируются внутри контроллера DMA. Удачи! Rob.
  14. Приветствую! КомукакМневотнапримернаоборотприятнеесмотретьнаструктуированныййкод. Удачи! Rob.
  15. Приветствую! Хорошо работать хорошими инструментами особенно когда они условно "бесплатны" Но и чисто в тексте RTL, при некой доли организации и самодисциплине получается отнюдь не медленнее и напряжнее. Но зато гораздо универсальнее. Удачи! Rob.