Jump to content

    

RobFPGA

Свой
  • Content Count

    2308
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

Контакты

  • ICQ
    Array

Recent Profile Visitors

12062 profile views
  1. Приветствую! Программное решение где? В CPU/MCU/DSP ? Или все-же в FPGA? Хотя "одновибратор" реализуется в любой архитектуре. Это просто принцип - по фронту запускается таймер до истечения времени которого любые другие фронты блокируются. Как только таймер отсчитал свое - то с чистой совестью на свобо... следующий фронт опять его запускает (а заодно и измерения). Удачи! Rob.
  2. Приветствую! Зачем так сложно - если стоит задача Достаточно сделать "одновибратор" на 10 мс (не путать с просто вибратором ) сигналом которого и блокировать последующие запускающие импульсы. Удачи! Rob.
  3. Приветствую! Если в симе работает, а в железе нет, то начинать надо с проверки физики - корректность назначения пинов, есть ли клоки, соответствуют ли они требуемым, есть ли захваты PLL, сняты ли reset, ... Проверить все через chipscope. Я на vu09p еще эту корку пока не запускал но на vu095 эта же корка запустилась на 8 портов без проблем. На сколько помню линк подниматься должен без всяких посылок по XGMII, даже больше - пока линка нет нет смысла что то пихать на TX. А состояние user_rx_reset = 1; user_tx_reset = 1; как бы намекает что линка нет. Удачи! Rob. P.S. Попробуйте подключить к внешней 10G карте - так как если у вас не работает одно из направлений (TX или RX) то может можно будет это увидеть.
  4. Приветствую! Эта же ситуация повторилась но теперь непосредственно в GUI Qu. Создал проект с несколькими LL регионами. Открыл в GUI Qu, все OK. Закрыл проект в GUI (не выходя из Qu). Убрал из файла qsf все настройки LL, удалил все рабочие директории (db, incremental_db, ...). Открываю опять проект в GUI Qu - вижу старые LL регионы! Которые к тому-же опять записываются в файл qsf если в GUI как то изменить настройки проекта Это чертовщина сохраняется до тех пока пока либо не закроешь Qu либо не откроешь другой проект (даже несуществующий). Еще прикол в том что так фантомно LL только сохраняются - то есть когда удаляешь их из закрытого проекта, если же после закрытия в GUI, добавить LL в qsf, то при открытии все прекрасно добавится. В общем какая-то Удачи! Rob.
  5. Приветствую! Эээ ... как бы не вижу связи одного с другим При чем тут структура клоков и "неаккуратность" разработчика? Удачи! Rob.
  6. Приветствую! Xilinx с этим утверждением несколько не согласен page 6. Ну или UltraScale Architecture Clocking Resources User Guide UG572 Chapter 2: Clocking Resources: Можете в этом убедится посмотрев роутинг клока тяжелого по клокам проекта. Удачи Rob. P.S. Популярно с картинками
  7. Приветствую! Обычно clock-gate для плис работает в другую сторону - гейт на клоке заменяется на CE в триггерах. Что получается в железе можно увидеть в нетлисте после синтеза/P&R. По поводу дерева клока в FPGA в последних оно похоже на ASIC по структуре - строится динамически из малых веток и даже с выравнивание skew по возможности (во всяком случае у Xilinx). Но для оптимизации по клоку есть нюанс - если вы не контролируете расположение логики на кристалле то выигрыша от обрезки неиспользуемого части дерева клока может быть мало если логика будет "размазана" по всему кристаллу. Все же размер "веток" не столь мал. Для оптимизации надо собирать логику относящуюся к клоку в компактную группу. Удачи! Rob.
  8. Приветствую! Ограничить область размещения это LogicLock, который вам "... не предлагать" С неоднозначной паковкой в DSP и у меня были проблемы которые я костыльно решил синтезировав отдельно нужный модуль с DSP и включив его как нетлист в основной проект. Ну и правильный ответ - есть ... ... просто имя [get_node_info -node $id -info "name"] ... полное имя [get_node_info -node $id -info "Full Node Name"] ... короткое имя [get_node_info -node $id -info "Short Node Name"] ... очень короткое имя [get_node_info -node $id -info "Very Short Node Name"] и предпочтительное имя [get_node_info -node $id -info "Preferred Name"] ... Следующая загадка пока без ответа - когда и где нужно использовать то или иное имя? Удачи! Rob.
  9. Приветствую! Вопрос фиксации флорплана в Qu обычно решался через DP, но как я понял для web edition это не работает. Можете попробовать обходной путь героя - сделать back_annotate размещения логики после fit. С фиксацией части оной при следующих fit через set_location_assignment. Для этого можно в командной строке выполнить quartus_cdb --back_annotate=lc -c <revision name> <project_name> Получите в revision_name.qsf портянку на десяток-другой MB типа set_location_assignment MLABCELL_X163_Y56_N6 -to "bla_bla_path|...|inst_analog_datactrl|lpm_add_sub:inst_p2add_sub_wr|add_sub_iae:auto_generated|add_sub_cella[1]" set_location_assignment M20K_X132_Y26_N0 -to "bla_bla_path|...|altsyncram:g_alt_core.i_altsyncram|altsyncram_cos2:auto_generated|ram_block1a1~PORTADATAOUT0" Которую можно будет или использовать как есть , или немного почистив в отдельный файл подключать в проект через set_global_assignment -name SOURCE_TCL_SCRIPT_FILE "..../lock.tcl". Бяка в том, что в Standart версии Qu нет встроенной фильтрации по типам и инстансам. А в выдаваемой портянке куча странностей - например для памяти указываются все порты а не сам примитив памяти. Придется либо смирится либо нетривиально парсить этот бардак. Есть второй вариант - в том же quartus_cdb (или в tcl консоле chip_planner) через TCL скрипт получить список nodes и потом уже брать параметры этих node. Плюс в том, что список nodes можно сразу фильтровать по типу lc, ram, dsp. И примитив выдается один раз. Например для всей памяти: project_open -revision revision_name project_name read_netlist foreach_in_collection id [get_nodes -type ram] { set name [get_node_info -node $id -info "name"] set loc_ind [get_node_info -node $id -info "Location Index"] set str [format "set_location_assignment %-20s -to %s" $loc_ind $name] puts ">> $str" } Можно добавить выбор типа примитивов, фильтрацию по инстансам, разбивку на файлы, ... в общем повторить то, что недавно сделали в Qu Pro 20.3 Естественно если все это хоть как то работает в web версии Удачи! Rob. P.S. Вопрос на засыпку - знаете сколько вариантов имени node есть в db базе ?
  10. Приветствую! Для UDP считать сумму по payload не обязательно - можно просто 0 в поле чек-суммы UDP записать. Это говорит что сумма не считалась. Если же сумму по payload считать обязательно - то да, считаете все данные + псевдо-заголовок UDP, заполняете поле cуммы (с учетом замены FFFF если расчетная сумма получилась 0) и только потом отправляете. Удачи! Rob.
  11. Приветствую! Тогда тем более непонятно как при чисто синхронном always @(posedge clk) можно сгенерить латч? Удачи! Rob.
  12. Приветствую! ??? Удивительно что только один латч Удачи! Rob.
  13. Приветствую! Синтезаторы уже дано на такое не обращают внимание. При синхронном ресете бывает надо еще и постараться (через атрибуты) чтобы синтезатор использовал выделенный reset регистра, а не комбинировал логику сброса в обычный LUT. Такие!? или все же под каким-нибудь always(*) ? Удачи! Rob.
  14. Приветствую! Если уж считаете в уме то считайте весь алгоритм а не только серединку - сдвиг в строке чуть выше : crc16x1 = (crc16xW << 1); Удачи! Rob.
  15. Приветствую! Чет то вы уж больно агрессивны категоричны. При чем тут состояние reset? С точки зрения языка никто не запрещает писать always @(posedge clk) begin if (reset) bgin // reset state end else begin // work state end if (~reset) bgin // work state end else begin // reset state end end Ну да - немного не по фэншую как у классиков, как и вариант always @(posedge clk) begin // work state ... if (reset) begin // reset state end end Но чтоб сразу пальцы в дверь ... Чем же потом код править? Удачи! Rob.