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

Nick_K

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные Nick_K


  1. Разницы нет, если только для платформы нет каких-либо ограничений. Иногда бывает, что ПЛИС не содержит понятия, к примеру, синхронный сброс. В таком случае будет дополнительная логика на входах сброса (флоп + гейты).
    В таком случае могут быть сложности с утилизацией/плейсментом/деревом/таймингом.

    Для ненапряжных проектах по сути не играет роли.

  2. У меня сложилось впечатление, что это конкретно проблемы с оболочкой Waveform. В моём случае просто сохранял результаты в CSV и переоткрывал другим вьювером. Хотя не уверен, что такой функционал сработает в ILA.

    И ещё попробуйте оставить минимум сигналов в ILA (создать с нуля и добавить до 10 пробников) иногда из-за этого тоже бывает тормозит

  3. 2 hours ago, TRILLER said:

    На моей памяти никогда не было "внутреннего" интерконнекта между триггерами у них.

    Чисто внутреннего - не было, всегда коннект идёт через интерконнект матрицу, но так, чтобы в одном слайсе использовались подряд все флопы (к примеру для таймеров), можно сделать физическими констрейнами.

  4. 2 hours ago, blackfin said:

    Внутри SLICE/CLB всё жестко соединено проводами и задержки внутри одного SLICE/CLB не больше сотни пс.

    Всё верно. Чисто внутри Слайсов (за Альтеровское не ручаюсь) задержки по разным путям отличаются незначительно (у меня было до 25-50 ps). Проблема вылазит позже, так как разные выходы/входы Слайса подключены к матрице интерконнекта по разному и там задержки могут быть и по 100-200 ps запросто.

  5. 3 hours ago, dxp said:

    А Quartus вполне приличный тул, и поддержка того же SV в нём началась раньше и была лучше, чем в Synplify

    Так как я не сильно пользовался Квартусом, не могу предъявить сильные аргументы против него (но могу сказать, что Sinplify и вправду хорош).

    Но ребята пользуются Альтеровскими чипами и говорят, что там даже банальное always_comb не работает как нужно (есть подозрение, что это про какие-то вложенные конструкции).

    Из-за чего во всём коде после прототипинга стоят always@*, которые потом синтезируются трудноуловимыми Латчами.

    Вот такие дела)

  6. 2 hours ago, dxp said:

    А Quartus на том же коде пропускал массу всего, к чему придирался Synplify (кстати, по делу придирался по большей части), зато вот на это  ' + 1' ворчал.

    Всё потому, что Симплифай - это лидирующий производиткль тулзов для SPnR, а Квартус - условно-бесплатная поделка индусов, чтобы просто работало. Плюс есть мысль, что Симплифай имеет на борту автоматический LEC, который и выдаёт все нужные ворнинги

  7. Попробуйте посмотреть тут:

    40090 - Design Assistant for XST - Help with Register Duplication and fanout (xilinx.com)

    Вроде бы ситуация вполне подобная.

    Сама настройка была в более ранних версиях, а теперь видимо является частью параметра register_balancing.

  8. Во-первых для указанной технологии должна применятся настройка register duplication (на сколько помню).

    Во-вторых, для того, чтобы у Вас был небольшой фанаут... задайте его вручную) порядка 75 подключений будет вполне достаточно и синтезабельно

  9. 13 minutes ago, Freibier said:

    Уж как только не пробовал, никак не понимает.

    Можете написать полностью весь констрейн согласно правилам тикля вайлдкарты?

     

    Если раговор про -regexp, тогда все пины VD с любым номерным значение будет выглядеть так:

    get_ports -regexp {VD\[[0-9]\]}

    По крайней мере у меня так работает.

    Самое интересное, что у меня работает так тоже:

    get_ports {VD\[?\]}

    И так

    get_ports "VD*"

    Так что мне кажется нужно просто понять какой аннотацией пользоваться и так и писать. Проверить можно всегда в открытом проекте в консоли тикля.

  10. 34 minutes ago, Freibier said:

    set_input_delay -clock clk 0.8 [get_ports {VD[5] VD[4] VD[3] VD[2] VD[1] VD[0]}]

    По правилам тикля вайлдкарты используются в кавычках.

    get_ports "VD\[*\]"

    должно работать. Ну или просто звёздочка в конце, без квадратных скобок.

  11. У меня похожее поведение было в следствии внутренних констрейнов ILA.

    В частности просто прикрутив клоковую к ILA без всяких дебажных сигналов собирало нормально проект, а без ILA - всё валилось на STA и очень долго собирало (утилизация около 15%).

    Увы как решил вопрос - не припоминаю. Наверное просто пересоздал все IP и пересобрал проект с нуля, благо там не так много было модулей.

  12. 3 hours ago, yes said:

    upd2: да вроде ОК - с массивом (это я гугль спросил) - если unpacked массив packed массивов - то вначале перебираются unpacked индексы (в нормальном порядке - как в С), а затем packed (и опять как в С) 

    Да, вполне возможно. Я просто помню, что наступал на эти грабли пару раз, считая не с той стороны. Вот видно не с той что нужно и запомнил.

  13. 38 minutes ago, yes said:

    logic [MBLOCKS-1:0][15:0] udout;

    Если мне не изменяет память (могу ошибаться), то при аннотации типа:

    genvar k;
    generate for(k=0; k<MBLOCKS; k++) begin : mem_pool
    	...
        udout[k]
    	...
    end
    endgenerate

    Индекс 'k' будет перечисляемым для диапазона [15:0], а не как хотелось [MBLOCKS-1:0], потому как индексация идёт от переменной влево для упакованых и вправо для неупакованных массивов.

    А вообще попробуйте запись типа:

    	csa #(
    		.p_synch_rst	(1),
    		.p_preload		(0),
    		.p_int_res		(p_int_res * p_num_adders))
    	carry_adder [ 1 : 0 ] (
    		.i_clk			(i_clk),
    		.i_nrst			(s_nrst),
    		.i_csa_ce		({s_owerflow_0,i_en}),
    		.o_overflow		({s_owerflow_1,s_owerflow_0}),
    		.o_csa_count	({r_csa_1_cnt,r_csa_0_cnt}));

    Без вских дженериков и прочего. Вивада поругается немного, но такая конструкция вполне допустима

     

  14. 14 minutes ago, Bovee said:

    ну вот допустим строчка:........ то есть при изменении сигнала LD сигналу D идет загрузка???? не совсем в голове укладывается((((( также и про if(SHFT)....

    
    if(SHFT) begin
                    D <= {InS, D[3:1]}
    
    if(LD) begin
                D <= InP;

    Вы сколько занимаетесь разработкой/изучением схемотехники?

    Это обычный enable для флопа (читай регистр).

    Если такие элементарные понятия не укладываются в голове, то нужно почитать детальнее соответствующую литературу.

  15. Код и фактическое наличие такого флопа - две разные вещию Скорее всего это описание некого кастомного компонента.

    Данный RTL реализует последовательную загрузку через serial порт InS и сдвигает по одному биту при активном сигнале сдвига (SHIFT).
    Если же подать единичное значение на сигнал загрузки (load - LD)  произведётся запись из параллельного порта InP во все соответствующие флопы.

    Хотя куку было упомянуто - описание достаточно корявое

  16. На мой достаточно дилетантский взгляд фазовое детектирование можно увеличивать практически до бесконечности. Вопрос в данных, сколько они длятся. Если длинна каждого бита наносекунда и менее, тогда можно и не пробовать (разве что как-то подстраивать гигабитные трансиверы). Если данные висят до десятков нан, тогда можно определить фазирование запросто до 400-200 ps и немного заморочившись до 1-0.5 ps. Тут ещё важный момент, какой допустимый оффсет для получения результата.

  17. Спасибо. По сути это и есть интересный мне момент.

    От себя добавлю, возможно изменив команду с добавлением $arg получится запускать Виваду и передавать ей нужные аргументы:

    58 minutes ago, 5EN5E said:

    "command": "vivado -mode tcl -source c:/utils/nonproject/synth_step.tcl $arg"

  18. 10 minutes ago, 5EN5E said:

    Тогда остается вопрос по написанию taskов в vscode, чтоб этот же скрипт с новыми параметрами передать в существующий shell.

    Вот у меня был собственно вопрос как эти самые task'и создавать. Может и себе смогу чего оптимизировать в процессе.

    Это скорее уточнение предыдущего вопроса.

  19. 3 minutes ago, 5EN5E said:

    При Вашем подходе получается сквозной маршрут сборки, т.е. если мне нужно сделать place, то обязательно выполнится этап синтеза. Я бы хотел отсинтезировать проект, запустить ГУЙ, поковырять DEBUG, поиграться с репортами, выйти из ГУЯ. Если все ок, то запустить сборку следующего этапа.

    Это то, что я указал последним. Придётся добавлять аргументы на запуск мастер скрипта (по крайней мере у нас так сделано) и получится нечто:

    set run_step=place // выполнить присвоение в обычной консоли или через bash/bat скрипт
    
    // Далее идёт вместимость собственно мастер скрипта
    if { $env(run_step) == all } {
      source synthesis.tcl
      source place.tcl
      source route.tcl
      source program.tcl
    } elsif { $env(run_step) == syn } {
      source synthesis.tcl
    } elsif { $env(run_step) == place } {
      source place.tcl
    } elsif { $env(run_step) == route } {
      source route.tcl
    } elsif { $env(run_step) == program } {
      source program.tcl
    } else {
      puts "Uncorrect argument passed"
    }

     

  20. 36 minutes ago, 5EN5E said:

    Я бы хотел сборку осуществлять по дизайн флоу, как в Vivado, т.е. по шагам. У меня для каждого этапа написан скрипт, а вот запуском скриптов управляют taskи vscodа. У меня собсно вопрос по написанию этих самих taskов, т.к. у меня не получается передать следующий скрипт в уже запущенный Shell Vivado. Мастер скрипт просто прогонит все нужные мне скрипты за раз, а это не то что мне нужно.

    Немного не согласен. Мастер скрипт будет вызывать нужные скрипты один за другим в соответствии с вышеупомянутым флоу при этом дожидаясь выполнения соответствующего шага.

    Грубо говоря мастер скрипт состоит из:

    source synthesis.tcl
    source place.tcl
    source route.tcl
    source program.tcl

    соответственно каждый скрипт будет запущен по очереди и только после завершения предыдущего (при условии что в скрипте синтеза есть команда запуска собственно синтеза launch_runs synth_1 и т.д.).

    Сложности начнутся, когда нужно сделать только синтез, к примеру. Тогда придётся городить скрипт с аргументами запуска.

  21. 3 minutes ago, 5EN5E said:

    Как будет понимание и реальные результаты, поделюсь. Задал вопрос на Реддите, пока ответов по существу нет.

    Ну попробуйте через мастер скрипт всё сделать. Уверен так будет проще всего.

  22. On 1/21/2022 at 4:07 PM, 5EN5E said:

    2. Хочу реализовать сборку проектов Vivado в non-project режиме. Написал тиклёвые скрипты по сборке, которые кушает Shell Vivadы. Создал task для VSCode, который запускает Vivado и передает ему скрипт. При запуске task успешно запускается Shell Vivado и исполняется скрипт, после чего shell ожидает новых команд. Как мне в уже запущенный shell передать другой скрипт? Мои эксперименты с taskами закончились на том, что запуск taska приводит к запуску нового терминала и у меня никак не выходит обратится к терминалу с shellом Vivadы.

    А можно какой-то гайд или может даже пример, так как данный вопрос очень интересен.

    У нас фактически используется такой же подход как non-project режим от Вивады. С той лишь разницей, что запускается оболочка и передаётся мастер скрипт, который в зависимости от аргументов выполняет тот или иной шаг (или весь SPnR) и выходит через exit из инструмента (по любой из ошибок или по успешному завершению). Возможно есть опции запуска скриптов по очереди или запуска следующего, но это скорее всего неудобно и принесёт много лишних действий

  23. 6 hours ago, eugen_pcad_ru said:

    Для примера на картинке сколько получается?

    Быстрый поиск по просторам дал следующее значение: 6 двухвходовых AND гейтов соответствуют 1му LUTу.
    Соответственно данный проект соответствует 30 двухвходовым AND гейтам.

  24. Почему очень грубо? Для проектов в Виваде в GUI есть финальный репорт, который показывает занятость всех используемых макроячеек (LUT, BRAM, FF и т.д.). Взяв структуру ЛУТа и перемножив - получите более-менее реальные значения в логике, откуда нехитрыми манипуляциями мождно получить значение в вентилях.

    image.thumb.png.5bce33975400066fd0b005a0a653b845.png

×
×
  • Создать...