Search the Community
Showing results for tags 'sv'.
-
SystemVerilog always_comb infinite loop
dxp posted a topic in Языки проектирования на ПЛИС (FPGA)
Всем привет! Вопрос по планировщику симулятора. Пример привожу примитивный, чтобы только принцип продемонстрировать. Вот предположим есть код в двух комбинационных блоках: logic a = 0; logic b = 0; always_comb begin a = 0; if(<true_cond>) a = 1; if(b) ... end always_comb begin b = 0; if(a) begin b = 1; end По логике работы симулятора получается, что в первом блоке переменная a даёт результат 1, при этом она меняет значение: на входе 0, после условия 1, т.е. как бы происходит событие (event). Это событие триггерит второй блок, где с переменной b происходит аналогичная картина - т.е. изменение переменной b, что есть тоже событие, и это событие должно триггернуть первый блок, т.к. там есть ссылка на b в условии if. Но прогон (evaluation) первого блока снова сгенерит событие (т.к. a поменялась внутри блока), которое запустит второй блок. И так далее без конца. На практике такой простой код, однако, не вызывает этого бесконечного цикла - очевидно, симулятор как-то "соображает", что реально-то события не должно возникать. Но вот у меня в рабочем проекте это тем не менее произошло. Там код не такой простой, но схематично аналогичный: вместо первого блока там описание логики переходов FSM, в другом - сигналы, которые используют fsm_next значение. Реально петли по сигналам там нет - та же Vivado не находит при синтезе. Т.е. как и в примере выше, сигналы a и b не образуют петлю, т.к. b на a не влияет, просто описана в том же блоке. И насколько понимаю, если бы симулятор анализировал переменную при прогоне блока только в конце по её результирующему значению, он бы "увидел", что реально переменная не меняется и поэтому события возникать не должно. Вот тут аналогичная проблема, и там посоветовали использовать для симулятора опцию командной строки -delay_trigger (там кэденсовский симулятор), которая, как объяснил советующий, заставляет симулятор как раз вести себя так, чтобы он не спешил генерить события, а дожидался окончания прогона блока. Но насколько это корректный путь? И зачем режим без этой опции, если он работает вот так "странно". Существуют ли какие-то приёмы борьбы с этим эффектом? Кто-нибудь и как часто с этим сталкивался? В общем, прошу высказываться. P.S. Симулятор: квеста.- 26 replies
-
Генерация единичной матрицы на SV
TamRazZ posted a topic in Языки проектирования на ПЛИС (FPGA)
Добрый день! Подскажите, пожалуйста, простой и доступный способ реализации на SV функции генерации единичной матрицы. Вот набросок моего видения этой функции: function automatic logic[size-1:0][size-1:0] eye (input int size); for (int i = 0; i < size; i++) for (int j = 0; j < size; j++) eye[i][j] = (i == j); endfunction Понятно, что компилятор не видит size в шапке объявляемой функции. Не понятно, как описать функцию, у которой размерность выходного аргумента зависит входного аргумента.- 4 replies
-
- sv
- systemverilog
-
(and 3 more)
Tagged with:
-
Зависание при записи в BAR
new123 posted a topic in Работаем с ПЛИС, области применения, выбор
Форумчане, доброй ночи. Подскажите, может кто сталкивался. Бьюсь третий день. 1) Развернул корку на Stratix V, PCIE avalon 256bit + DMA 2) пытаюсь драйвер сделать, ничего не идет. 3) Что выяснил. При попытке записать что то в BAR0, BAR4, вешается компьютер. Ровно после тридцать девятой попытки записи четырех байт происходит зависание. При это сразу считываю, что там записалось, а ничего ничего не записалось. 4) Jungo Wizard пишет что BAR0, BAR locked. В Jungo так же пытаюсь записать и сразу прочитать. Не записывает значения. Уже начинаю склоняться, что то с альтерой или коркой. Может кто сталкивался с такой проблемой.