Jump to content

    

RobFPGA

Свой
  • Content Count

    1447
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

About RobFPGA

  • Rank
    Профессионал

Recent Profile Visitors

10067 profile views
  1. Приветствую! Не так уж упорно - начиная с 10.7с версии, по умолчанию, сим запускается с оптимизацией. А режим сима без оптимизации (-novopt) объявили устаревшим с угрозой в последующих версиях вообще убрать. Поэтому теперь надо явно указывать какие внутренние порты|/сигналы вы хотите видеть (опцией +acc). Удачи! Rob.
  2. Приветствую! Чудеса прям! Вы бы сказали сколько у вас "много" было 100, 1000, и ли 10 тыс. портов? И какое сообщение об ошибке выводит при компиляции такого модуля? Тогда мы бы тоже в чудеса поверили бы. О вкусах организации проектов не спорят. Лепят кому как удобнее. Многие компании свои IP корки поставляют одним файлом в котором может сидеть от десятка до сотен отдельных модулей. Удобно компилировать - не надо писать простыни списков файлов составляющих модуль. Но редактировать такое - Как то раз довелось ковырять 20-ти мегабайтный исходник на VHDL c более чем 600 отдельных сущностей ... Для verilog|systemverilog есть еще такое понятие как compilation unit. Если грубо - модули в одном файле компилируются как бы в общем глобальном пространстве имен. Соответственно можно шарит макро и package файлы. Но поддержку такого надо смотреть для конкретного tools. Так что организовывайте так как вам будет удобно - главное тут именно "организовывайте" Удачи! Rob. P.S. Сам почти всегда делаю для одного модуля один файл. Бывают и исключения (но не на 20 MByte)
  3. Приветствую! Еще как применим ... output [0:23] data; ... reg [31:0] shift_reg [0:23]; ... genvar gi; generate for ( gi=0; gi<24; gi=gi+1) begin : g_out assign data[ii]=shift_reg[ii][31]; end endgenerate ... Удачи! Rob. P.S. Спасибо Nagisa, исправил for в generate чтобы соответствовало и Verilog и SystemVerilog
  4. Приветствую! Все что делается одинаково несколько раз обычно делается в цикле for. Будет ли это generate for или always for зависит от предпочтений. // или так generate for (genvar gi= ... ) begin : g_for always @(posedge ...) begin ... shift_reg[gi]<=shift_reg[gi]<<1; .... end end generate // или этак always @(posedge ...) begin for (int ii= ...) begin : p_for ... shift_reg[ii][14:0] <= ~data_reg[ii*16 +: 15]; // загрузка shift_reg[ii][15] <= data_reg[ii*16 + 15]; .... end end Но если вы делаете многоканальный I2S то есть смысл сделать модуль для одного канала, а уж потом в generate цикле лепить из сколько столько нужно. Если конечно не стоит цель поупражняться в циклописательстве логики. Удачи! Rob.
  5. Приветствую! Попробуйте в 6 битах записать число 64 :) Удачи! Rob.
  6. Приветствую! Мелкая неприятность, а не проблема оказалась Хотя когда FPGA на плате за 30-50K уе. вдруг отказывается грузиться тот еще мандраж бывает. Удачи! Rob.
  7. Приветствую! С таким не встречался, но как гипотеза: Может вы в настойках SysMon накрутили низкие пороги (в отличие от дефолтных) и при загрузке они срабатывают и сбрасывают прошивку? Удачи! Rob.
  8. Приветствую! Еще есть весьма интересное для некоторых типов приложений Удачи! Rob.
  9. Приветствую! Думаю что если и есть кто, то будут молчать как партизаны Удачи! Rob.
  10. Приветствую! А чего тут удивительного - axisc_registr_slices это простенькое FIFO на 2 слова сделанное на 2 регистрах и mux на выходе. По другому через SRL оно и не перетянет. Удачи! Rob.
  11. Приветствую! У меня ощущения что xsim еще тот тормоз очень сырой Иногда даже при простенькой функциональной симуляции медленнее modelsim в 10-100 раз. Особенно добивает ситуация когда 15-20 мин ждёшь запуска сима чтобы потом на 1 ps симуляции получить неопределенную ошибку. А уж про post-synth мне и подумать страшно. Надо бы технологию симуляции отлаживать на простеньком проекте чтобы не было так мучительно больно ждать. Удачи! Rob.
  12. Приветствую! Во многих симулятора можно указать значение регистров (0 или 1) в начале симуляции (с помощью опции при компиляции или запуске сима. Как пример для vlog +initreg[=<spec>][+0|1|X|Z] Initialize variables of type indicated by <spec>.) По умолчанию это обычно X. Если логика дизайна не критична к процедуре сброса то тогда да - задали через глобально начальное значение как в целевой FPGA и будь что будет. А если критично то полагаться что само как то сбросится наивно. Спокойнее самому сделать так, чтобы быть уверенным что это произойдет и так как нужно и тогда когда надо. И если так случилось что нет внешнего сброса то самое простое это сделать на счетчике/регистре сдвига автомат формирующий глобальный импульс сброса для всей внутренней логики. С различной степенью параноидальности контролирующей что это произойдет. А для установки начального значения в таком модуле при симуляции как раз и использовать initial. О чем это? Удачи! Rob.
  13. Приветствую! оффтоп: У меня один знакомый ставил matlab чтобы им как калькулятором пользоваться "... удобно мол - историю сохраняет ..." На том же python прием по UDP/TCP и запись в файл делается на десятке строк кода. Еще на паре десятков - realtime парсинг и рисовка картинок как в том же matlab. Понятно дело если matlab уже сп. стоит то грех добру пропадать . Удачи! Rob.
  14. Приветствую! В UltraScale изменилась структура построения тактового дерева - она стала более распределенная и строится из сегментов. IMHO отсюда и увеличение Clock Path Skew иногда до неприличных значений. Радикальный способ борьбы с этим - локализация критически связанной логики в пределах одного или нескольких соседних Clock Region (CR). Вручную распараллелить клок по углам навряд ли получится. Так как использоваться будут все те же clock routing линии на которых в основном и получается slack. Можно попробовать привязать источник (MMCM с BUFG) ближе к центру кристалла для уменьшения разницы длинны путей распределения клока. Но это надо пробовать. Удачи! Rob.