Jump to content

    

Krys

Свой
  • Content Count

    2025
  • Joined

  • Last visited

Everything posted by Krys


  1. Переделал всё на верилог. Умножение сделал через генерацию LPM_MULT в визарде. Прописал latency большую в надежде, что упихает в регистры внутри DSP-блока. Нифига. Сделал снаружи на рассыпухе. Сейчас умножение напишу прямо на верилоге, может поможет. Дополнение: но при этом слаков больше нет. Значит переделывать не буду, так и оставлю, не стоит оно идеализации.
  2. Огромное спасибо, действительно, проблема один в один, сейчас буду читать, что там вышло в итоге. Понравились высказывания, ржал )) Выше - это один в один мои мысли. Думаю чо мозг напрягать, подкину регистров, 5 на входе, 5 на выходе, "пусть долгоносик подавится" )))) И вообще, продвинутые спецы умеют под альтеру в виваде сразу разводить: Ржал до слёз:
  3. И всё же меня смущает, зачем задействована межкаскадная шина. Вот она на resource property editor (есть и в первом посте, но ниже более подробно): В первом посте есть картинка из Technology map viewer, привожу её ещё раз, чтобы туда не прокручивать: И на этой картинке видно, что операнды 25 и 16 бит, а результат 22 бита (лишние биты не используются, отрезаны). Для таких разрядностей всё должно влезать в один DSP-блок, без каскадирования. И главное на этой же картинке не показано наличие этой межкаскадной шины. И я даже не понимаю, где и как глянуть, куда всё же она потом идёт с выхода DSP-блока.
  4. На работе ваша ссылка открыталсь (до этого смотрел из дома, а на работе хитрый прокси есть для обхода). Я посмотрел оглавление документа и понял, что это всё про синплифай синопсис. Или для квартус прайм тоже годится? У меня с чего всё началось: после компиляции прошивки моего чудо-девайса вылезли слаки. Я начал разбираться, понял, что регистр, который подразумевался внутри DSP-блока, был размещён снаружи по непонятной мне причине. Вот это и есть причина слака. Вот если регистр всё же заставить упихаться, тогда и посмотрим, "в определённых местах" или не в определённых местах. А пока до этого ещё не дошли, это так сказать величина второго порядка малости )
  5. Да, Прайм, спасибо за уточнение и помощь с параметром! Я думал всё одинаково с квартусом 2, это от недостатка опыта. И ведь точно, не открылось, написало про санкции, спасибо, что предусмотрительно скинули скрины! Меня смущает вот это: Т.е. применяется к цепям, но не к регистрам. А мне то надо заставить регистр упихаться в DSP блок. Я тут подумал... Не может ли виной быть, что задействована межкаскажная шина? Хотя по идее должно и с ней регистр ставить
  6. Здравствуйте. С Альтерой у меня опыта нет, поэтому вопрос возможно простой. Плисина Ария 5. Не получается синтезатору запихать выходной регистр внутрь DSP-блока. Вот так это описано: process(clk) begin if rising_edge(clk) then dta_c3_re_r <= coef3_reg_re_pp * deg2_mult_r_reg_pp; end if; end process; Предполагается, что регистр dta_c3_re_r будет внутри DSP-блока. Но он снаружи. Я даже атрибут нашёл вот тут и приделал его к описанию регистра: signal dta_c3_re_r : signed(2*wide_data_g-pre_dsp_cut_c+16 downto 0) := (others => '0'); attribute multstyle : string; attribute multstyle of dta_c3_re_r : signal is "dsp"; Но это не помогает. Выглядит это вот так на technology map: И вот так на resource property editor:
  7. Ну что вы, не за что, я отсюда столько опыта за всё своё время регистрации здесь вывез, что грузовика не хватит, так что надо по-маленьку возвращать долги ))
  8. спасибо за ссылку! Там правда симулинк, не голый матлаб, мож кто в симулинке не работает по каким-то причинам... А так - да, получается куда быстрее. Но в целом один раз это пройти, будет некий шаблон, который можно будет очень быстро корректировать под любую следующую косимуляцию. Долгая писанина - это с начала, шаблон создать. Да и вообще путь пройти, как это должно правильно быть написано. А последующие разы - по накатанной.
  9. Выложу здесь инструкцию по косимуляции в матлабе (оно же может называться Matlab Cosimulation, Matlab Link for Modelsim). Это когда из матлаба запускается HDL код в симуляторе, входные и выходные данные передаются напрямую между симулятором и матлабом без использования промежуточных текстовых файлов (как это обычно было принято). Инструкция скорее для себя, чтобы не забыть. И может ещё кому-то полезно будет, чтобы с нуля не ходить по граблям. Косимуляция бывает как минимум двух видов: Когда все тестовые воздействия генерятся в тестбенче симулятора, потом вход и выход симулятора передаются в малтаб, где подаются на матлаб-функцию модели HDL-кода для сравнения. В результате выдаётся вердикт: совпало или не совпало в симуляторе и в матлабе. Когда пользователь в матлабе генерит тестовые воздействия, они передаются в симулятор, а результаты с выхода HDL-кода принимаются обратно в матлаб для анализа. Для моих работ мне больше подошёл последний вариант, поскольку при отладке DSP генерация сложного сигнала в матлабе проще, чем в симуляторе. Как и анализ результатов работы HDL-кода в матлабе проще, поскольку можно нанести несколько графиков на один рисунок, построить преобразование Фурье или другие функции. К тому же, как потом выяснилось, при таком способе возможно задавать не только воздействия на входные порты, но и переопределять любые внутренние сигналы (как делается drive в тестбенче). А также можно вычитывать в матлаб любые внутренние сигналы для анализа и отладки. Для косимуляции требуется определённая версия матлаба и симулятора. Для Matlab R2021b требуется Modelsim SE 2020.4. Однако в такой версии моделсима у меня почему-то не получилось, и я перешёл на QuestaSim 2021.1, в такой связке у меня работает нормально. Правда выдаёт warning, что несовместимые версии, но его можно отключить, просто подправив код выдачи ворнинга, номер строки указывается в самом ворнинге. Вообще за пример была взята эта страница: https://www.mathworks.com/help/hdlverifier/ug/verify-viterbi-decoder-using-matlab-system-object-and-hdl-simulator.html Там справа сверху есть команда для запуска примера в матлабе: openExample('hdlverifier/VerifyViterbiDecoderUsingSystemObjectAndHDLSimulatorExample') Можно открыть, поизучать, попробовать запустить. Нужно будет установить правильный тип симулятора, там сверху константы задаются. Также возможно потребуется увеличить таймаут на запуск симулятора, т.к. со штатным таймаутом почему-то не вышло. Краткое пояснение основных шагов, необходимых для создания косимуляции: 1. В коде матлаб вставляем примерно такую конструкцию (исправляем её под себя): hDec = hdlcosim('InputSignals', {'/viterbi_block/In1','/viterbi_block/In2','/viterbi_block/Traceback_out1'}, ... 'OutputSignals', {'/viterbi_block/Out1', '/viterbi_block/Delay5_out1'}, ... 'OutputSigned', false, ... 'OutputFractionLengths', 0, ... 'TCLPostSimulationCommand', 'echo "done";', ... 'PreRunTime', {10,'ns'}, ... 'Connection', {'Shared'}, ... 'SampleTime', {10,'ns'}); Пока эта команда просто создаёт объект с параметрами. Здесь задаём входые и выходные сигналы. При том, как было сказано выше, можно задавать не только воздействия на входные порты, но и переопределять любые внутренние сигналы (как делается drive в тестбенче). А также можно вычитывать в матлаб любые внутренние сигналы для анализа и отладки. Также нужно обратить внимание на PreRunTime и SampleTime и правильно задать их значения: PreRunTime - это время предварительного выполнения симуляции для установления всех переходных процессов, требуемых перед основной симуляцией. Например это может быть длительность сигнала сброса или задержка появления сигнала на выходе (связана с Latency вашего HDL кода). Более подробно про предварительное выполнение будет понятно ниже. SampleTime - это периодичность выборок данных (обмена данными) между матлабом и симулятором. Наиболее вероятно это будет совпадать с периодом вашей тактовой частоты clk, ведь данные у вас будут меняться каждый клок. Если у вас несколько кратных частот, то видимо придётся взять самую высокую и на ней обмениваться с матлабом. Если несколько частот некратных, то наверное данная косимуляция вообще не подойдёт, т.к. выборки будет в непредсказуемые моменты времени. Хотя... можно и сам клок ещё вытаскивать в матлаб на утроенной или упятерённой частоте, а потом определять в нём интервал неизменного состояния, для которого фиксировать данные. Короче уже извраты пошли. Ну и может кому-то будет интересно поправить TCLPostSimulationCommand, это строка с TCL-скриптом, который будет выполнен по окончании симуляции. Параметр Connection задаёт способ соединения с симулятором: есть через разделяемую память, а есть через сокет TCP/IP. Сами матлабохелпописатели продвигают вариант через сокет, типа крутой и многофункциональный. Но я решил оставить через память как простой, без единой настройки. 2. Далее вставляем примерно такую конструкцию (и тоже правим под себя): hDec.TCLPreSimulationCommand = ... 'force /viterbi_block/clk_enable 1 0; force /viterbi_block/clk 0 0 ns, 1 5 ns -repeat 10 ns; force /viterbi_block/reset 1 0 ns, 0 8 ns; '; Здесь описывается обычный TCL скрипт, который, вобщем-то, и будет являться нашим тестбенчем, т.е. он сработает в момент начала симуляции. Как мы видим тут переопределяется поведение клока и сброса. Тут наверное всё понятно, как исправить под себя. 3. Далее вставляем такую конструкцию (в вышеупомянутом примере это довольно запутано, но вместо кучи вложенных функций и переменных можно написать всё самому плоским текстом при желании): vsim('tclstart',viterbi_cosimulation_tclcmds('vsimmatlabsysobj')); где второй аргумент - это функция (её имя можно исправить на подходящее по смыслу под ваш проект), которую пользователь сам должен под себя написать примерно так: function tclCmds = viterbi_cosimulation_tclcmds(loadCmd) srcDir = './viterbi_hdlsrc'; % VHDL source files srcFiles = {... 'viterbi_block_pkg.vhd',... ' 'ACS0.vhd'}; compile_cmds = strcat({'vcom "'}, {srcDir}, '/', srcFiles,'"'); tclCmds = [{'vlib work'}, ... compile_cmds, ... [loadCmd ' viterbi_block -voptargs=+acc=lprn'], ... 'do wave.do', ... 'puts "Ready for cosimulation ..."']; Тут командой vsim() вызывается симулятор, в котором должен выполниться стартовый tcl-скрипт. Но это не тот стартовый скрипт, что упоминался выше. Выше там именно типа тестбенч, выполняемый во время самой симуляции, в самом её начале. А тут предполагается, что стартовый скрипт - это просто компиляция исходников. Т.е. tclCmds - это просто строка, в которую записаны обычные команды скрипта TCL, которые бы вы сами написали, чтобы скомпилировать ваши исходники. Может кому-то будет полезна ещё информация, как сделать самому тестбенч. У кого опыта выше крыши - тот может сам всё написать как ему надо. Но если опыта недостаточно, можно подсмотреть, как тестбенч делает Vivado, ведь в вивадо есть встроенный инструмент для запуска симуляции в моделсиме. Нужно обратить внимание в куске кода выше на строку do wave.do Её не было в вышеупомянутом примере, её приписал я сам для своих нужд. А нужды такие, чтобы мочь отлаживать что-то по осциллограммам в самом симуляторе, как мы это обычно делаем, если пользуемся только самим симулятором, без матлаба. Можно этот файл пока оставить пустым, если вам не нужны осциллограммы. А потом в него можно будет что-то дописать. Допустим мы выполнили косимуляцию, у нас плохой результат, нам надо подебажить внутренности по осциллограммам в симуляторе. Окно симулятора мы не закрываем по окончании косимуляции. Переходим в симулятор и мышкой или ещё как вытаскиваем нужные нам сигналы на окно waveform. Затем это окно с сигналами сохраняем в файл в wave.do просто командой сохранить. И вот тогда указанная выше строчка do wave.do при каждой косимуляции будет открывать нам окно с нужными нам сигналами и на них будут осциллограммы. Также обращу внимание на запись -voptargs=+acc=lprn Её тоже не было в вышеупомянутом примере, её я дописал для своих нужд. Эта запись позволила получить видимость всех сигналов, чтобы их можно было подключить в косимуляции. Для вышеупомянутого примера это не требуется, но когда будете писать на его основе свою косимуляцию, то может так получиться, что в результате оптимизации не видно тех сигналов, с которыми требуется связаться из матлаба. Понятно, что это отключение оптимизации приведёт к тормозам, и нужно быть аккуратным с этим. Подсказку по такой записи нашёл здесь: https://stackoverflow.com/questions/24179095/modelsim-optimization-issue Ну и кроме того, во время выполнения команды vsim на данном шаге происходит подключение между матлабом и симулятором. По команде vsim выполняется не просто целиком скрипт, указанный в аргументе tclCmds, а генерируется более расширенный скрипт compile_and_launch.tcl (его можно будет увидеть в вашей рабочей папке, где выполняется симулятор), в который tclCmds входит как конечная часть. А вот начальная часть, как раз, описывает подключение между матлабом и симулятором. И выглядит это примерно следующим образом: proc vsimmatlabsysobj {args} { lappend sllibarg -foreign \{matlabsysobjserver \{D:/Program Files/MATLAB/R2021b/toolbox/edalink/extensions/modelsim/windows64/liblfmhdls_gcc450vc12.dll\} if {[catch {lsearch -exact $args -socket} idx]==0 && $idx >= 0} { set socket [lindex $args [expr {$idx + 1}]] set args [lreplace $args $idx [expr {$idx + 1}]] append socketarg " \; -socket " "$socket" lappend sllibarg $socketarg } set runmode "GUI" if { $runmode == "Batch" || $runmode == "Batch with Xterm"} { lappend sllibarg " \; -batch" } lappend sllibarg \} set args [linsert $args 0 vsim] lappend args [join $sllibarg] uplevel 1 [join $args] } Заметьте: ключевое слово vsimmatlabsysobj уже фигурировало выше, и можно проследить взаимосвязь этих кусков кода. 4. Далее в код нужно добавить такие строчки: Timeout=90; processid = pingHdlSim(Timeout); % Check if HDL simulator is ready for Cosimulation. assert(ischar(processid),['Timeout: HDL simulator took more than ', num2str(Timeout),' seconds to setup,please increase the timeout in ''pingHdlSim''']); disp('...Simulator is ready for cosimulation.'); Эта секция приостанавливает на этом месте дальнейшее выполнение скрипта, пока симулятор не отработает предыдущее. Чтобы выполнение матлаба и симулятора было синхронизировано на нужных стадиях. Таймаут задаёт время ожидания ответа. Можно отрегулировать. Изначально в вышеупомянутом примере было 30с, но на моём компе не хватало, я увеличил. 5. Ну и самый главный пункт - основная симуляция. Описывается примерно такой строчкой: [receivedBits, ttt] = step(hDec,input1, input2, input3); Т.е. указываем входные и выходные переменные. При том, как было сказано выше, возможно задавать не только воздействия на входные порты, но и переопределять любые внутренние сигналы (как делается drive в тестбенче). А также можно вычитывать в матлаб любые внутренние сигналы для анализа и отладки. Эти сигналы должны быть определены согласно п.1. Входные переменные могут быть скалярами или векторами одинаковой размерности. Каждый следующий элемент вектора подставляется в симулятор на каждом следующем периоде времени, указанном в параметре SampleTime в п.1. Метод step можно вызывать не обязательно однократно, а сколько угодно раз (в цикле например, как в вышеупомянутом примере), пока не закончатся входные данные. Вместо step(hDec,input1, input2, input3); можно вызывать hDec(input1, input2, input3); Вот тут этому объяснение: https://www.mathworks.com/help/matlab/ref/step.html 6. По окончании симуляции нужно дать следующую команду: clear hDec; Это удалит объект, связанный с симулятором, и разблокирует симулятор для возможности управления им мышкой пользователем (до этого момента симулятор остаётся заблокирован, и ничего с ним сделать пользователю нельзя). После разблокировки пользователь может подебажить в симуляторе обычным образом, по вэйвформам, которые были добавлены командой do wave.do в п.3. Если на вэйвформах не хватает каких-то сигналов, то мышкой или ещё как вытаскиваем нужные нам сигналы на окно waveform. Затем это окно с сигналами сохраняем в файл в wave.do просто командой сохранить. Затем косимуляцию нужно перезапустить с начала, т.е. с п.1. На этом всё. Приведу дополнительные ссылки почитать для общей информации, может, будет полезно: https://www.mathworks.com/help/releases/R2021b/hdlverifier/ref/matlabcp.html https://www.mathworks.com/help/releases/R2021b/hdlverifier/ug/verify-raised-cosine-filter-design-using-matlab.html https://www.mathworks.com/help/releases/R2021b/hdlverifier/ug/import-hdl-code-for-matlab-function.html#btx017h-19 https://www.mathworks.com/help/hdlverifier/ref/hdldaemon.html https://www.mathworks.com/help/hdlverifier/ug/verify-hdl-model-with-matlab-testbench.html https://www.mathworks.com/help/hdlverifier/ug/startup-for-hdl-cosimulation.html?s_tid=srchtitle_startup-for-hdl-cosimulation_1 https://docs.exponenta.ru/hdlverifier/ug/startup-for-hdl-cosimulation.html#bt9u4xl-3 https://docs.exponenta.ru/hdlverifier/ug/verify-hdl-model-with-matlab-testbench.html#bt9obpv-71 https://www.mathworks.com/help/hdlverifier/ref/vsim.html https://www.embedders.org/content/sovmestnoe-modelirovanie-proektov-v-modelsim-qusestasim-i-simulink https://exponenta.ru/hdl-verifier https://www.mathworks.com/help/hdlverifier/ug/getting-started-with-matlab-based-systemverilog-dpi-component-generation.html https://www.mathworks.com/help/releases/R2021b/hdlverifier/gs/supported-eda-tools.html https://www.mathworks.com/help/hdlverifier/ug/verify-hdl-model-with-simulink-test-bench.html https://www.edaboard.com/threads/matlab-and-modelsim-cosimulation.229534/ https://people.ece.cornell.edu/land/courses/eceprojectsland/STUDENTPROJ/2009to2010/mal283/Simulink_ModelSim_Tutorial.pdf
  10. вы думаете это я? Да у меня самого от вхдл глаз дёргается. В настройках проекта при генерации указан целевой язык верилог. И знаете как это понимает вивада? Что нужно обёртку на верилоге сделать. А все внутренности можно продолжать делать на её любимом вхдле. Хуже того, я сталкивался с тем, что во встроенном симуляторе ISE ISim если сгенерить корку под верилог, то не так симулится или вообще подвисает (уже не помню), а вот если под вхдл сгенерить - то симулится норм.
  11. я минимизировал проект, чтобы можно было повторить )) glbl можно было выкинуть, можно было не выкидывать, на повторение это не влияло, т.е. формально я ТЗ не нарушил ) Я сейчас glbl закоментарил, т.е. его нет получается. А ошибка так и вываливается. Так что думаю если вы закоментарите у себя, то ничего не изменится, просто вам будет спокойнее, что ничего лишнего в проекте нет.
  12. Возможно лишнее, рудименты от более полного проекта, недокастрировано ) А возможно этот модуль используется в симуляционных моделях корок для корректной отработки поведения по старту, и без него никак. Не уверен.
  13. ftp://ftp.electronix-portal.org/upload/__TRASH__/lib_xil_compiled.zip некоторые сложности с доступом к фтп на работе
  14. Да, что-то сломалось. В выходные вообще был недоступен сайт. А сейчас доступен, но пакет не найден, хотя обещали 30 дней хранить. Залил библиотеки заново: https://dropmefiles.net/en/xXDQWUvTh Я думаю подойдут. Я же их скомпилил уже в нужных версиях софта, а подцепить их можно из софта любой версии, чтобы воспроизвести ошибку. Но это не главное. Главное - подсказать, как эту ошибку обойти, не прибегая к либам из других версий, а то костыль какой-то лютый. Не понял, о чём вы, подскажите пожалуйста конкретнее. Ну нормально. И на таких должно воспроизвестись.
  15. Спасибо! Это под Квартус. А под Виваду всё так же или что-то надо поменять?
  16. отредактировал сообщение выше, ссылку на файлообменник дал. С фтп местным у меня не всё просто из-за прокси на работе. Другие версии вивады устраивают, просто изначально мой проект, который мне достался, был сделан на этой версии, и я решил именно на этой продолжить, без миграции, чтобы не привносить новые глюки, связанные с новой версией, т.к. заведомо известно, что на старой точно работает. А моделсим такой версии взял только потому, что в документе из первого сообщения именно эта версия фигурирует. Решил сделать максимально как рекомендовано.
  17. выложил. Архив с библиотеками тоже прикладываю: https://dropmefiles.net/en/BVy6WZ. Но в принципе его и самому получить можно путём компиляции. Только надо взять вивадо 2016.4 и моделсим 10.5С (или квесту этой же версии, но в местных закромах я её не нашёл) tb_error_cmpy_xil_lib.zip
  18. Я именно через это и пробовал, по-другому не пробовал компилить.
  19. Здравствуйте. Используется Vivado 2016.4. Согласно этому документу, с.9, ему подходит симулятор Modelsim 10.5C. Скачал из местных закромов. Скомпилировал библиотеки штатно, ни одной ошибки при компиляции не было. Однако при запуске симуляции появляется такая ошибка: # ** Error: ./../../cores/cmul14x16/sim/cmul14x16.vhd(56): (vcom-1136) Unknown identifier "cmpy_v6_0_12". В 56й строке записано так: USE cmpy_v6_0_12.cmpy_v6_0_12; Дело точно в либах. На пробу взял подменил (вместе с подменой пришлось поправить версии ядер типа как в строчке выше use cmpy_v6...) всю папку скомпиленных библиотек другой версии (были под рукой скомпиленные когда-то давным давно в другом месте из Vivado 2019.1 под Modelsim 10.7С), и всё запускается без ошибок, всё симулится как должно работать в реальности. Вообще я хотел бы с этим проектом работать на квесте 2021.1, я попробовал, но у меня не получилось, поэтому опустился до версии 10.5С, т.к. именно она рекомендована. А не получилось почему описывал здесь. Короче если подсунуть либы другой версии, то всё работает. Не хочется пользоваться таким костыльным вариантом как либы найденные где-то на помойке. Может кто знает ЧЯДНТ?
  20. Вот тут я описал свои попытки скомпилить под виваду без -novopt, но не всё получилось гладко. Пока не знаю что дальше делать.
  21. Здравствуйте. Есть ли инфа, как сделать то же самое для Vivado? Я пробовал сделать как подсказывают в этом документе на стр. 168 через config_compile_simlib. Отредактировал опции для всех библиотек, чтобы не было фразы -novopt, получилось вот так: config_compile_simlib -cfgopt {questasim.verilog.axi_bfm:-quiet} config_compile_simlib -cfgopt {questasim.verilog.ieee:-quiet} config_compile_simlib -cfgopt {questasim.verilog.simprim:-source +define+XIL_TIMING} config_compile_simlib -cfgopt {questasim.verilog.std:-quiet} config_compile_simlib -cfgopt {questasim.verilog.synopsys:-quiet} config_compile_simlib -cfgopt {questasim.verilog.unisim:-source} config_compile_simlib -cfgopt {questasim.verilog.vl:-quiet} config_compile_simlib -cfgopt {questasim.vhdl.axi_bfm:-93 -quiet} config_compile_simlib -cfgopt {questasim.vhdl.ieee:-93 -quiet} config_compile_simlib -cfgopt {questasim.vhdl.simprim:-source -93} config_compile_simlib -cfgopt {questasim.vhdl.std:-93 -quiet} config_compile_simlib -cfgopt {questasim.vhdl.synopsys:-93 -quiet} config_compile_simlib -cfgopt {questasim.vhdl.unisim:-source -93} config_compile_simlib -cfgopt {questasim.vhdl.vl:-93 -quiet} Вроде всё нормально, но проблема в том, среди этого множества нет библиотеки secureip. Попробовал выполнить строчку config_compile_simlib -cfgopt {questasim.verilog.secureip:-source -64 -work secureip -f} Но вивада ругнулась, что такого параметра у неё нет. В итоге эта либа компилится с ошибкой. Вивада 2016.4.
  22. Сам себе отвечу: перешёл на версию 2021b update 1, там это заработало matlab.desktop.editor.getActive
  23. Здравствуйте. Пришла пора повторить вопрос, только для файлов *.mlx (live script, live editor). Версия матлаба 2016b. Не могу найти решение. Гуглил, вот очень близкая проблема:
  24. Спасибо, конечно, "Кэп" ))) Конечно ничего не мешает. Вопрос чисто теоретический. Хотелось бы полноценно пользоваться инструментом. Либо точно знать, что эта фича у хилинха не допилена. У нас есть такие плотно забитые кристаллы, в которых пересинтез (с тем самым сервисным счётчиком) занимает час, а последующая повторная трассировка - несколько часов (бывает до суток). Вот и не всегда получается по-быстрому что-то добавить, чтобы что-то глянуть. И тогда вспоминаешь: а в чипскопе же есть замечательный счётчик, давайте-ка его и используем. А начинаешь смотреть - совсем не то. Вот и вопрос: то ли лыжи не едут, то ли готовить надо уметь