ConstHw 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Есть задача - модулю проверить, какие параметры в него передали и если они ему не понравятся, выкинуть ошибку В симуляции как проверять понятно initial begin if (BW0+BW1 > 5) begin $display(" Error parameters"); $finish(); end .... ... ... end Но ведь синтезатор игнорирует эти директивы? Как правильно выполнять такие процедуры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Есть задача - модулю проверить, какие параметры в него передали и если они ему не понравятся, выкинуть ошибку В симуляции как проверять понятно initial begin if (BW0+BW1 > 5) begin $display(" Error parameters"); $finish(); end .... ... ... end Но ведь синтезатор игнорирует эти директивы? Как правильно выполнять такие процедуры? $display не игнорирует, если в секции initial (в Quartus) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ConstHw 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Vivado успешно синтезнула модуль с initial begin $finish(); end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба generate if ( (pODAT_W >= pIDAT_W) && ((pIDAT_SCALE + pCOE_SCALE) >= pODAT_SCALE) ) begin // align mac result to output data fixed point assign saturation__idat_re = sum_re >>> (pIDAT_SCALE + pCOE_SCALE - pODAT_SCALE); assign saturation__idat_im = sum_im >>> (pIDAT_SCALE + pCOE_SCALE - pODAT_SCALE); end else begin assign saturation__idat_re[-1] = 1'bx; // incorrect input/output data settings or assign saturation__idat_im[-1] = 1'bx; // input/output/coefficient fixed point end endgenerate Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ConstHw 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба des00 спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuravg 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Есть задача - модулю проверить, какие параметры в него передали и если они ему не понравятся, выкинуть ошибку можно и так: localparam SOME = 11; initial begin if ( SOME > 4 ) $error("Invalid parameter SOME = %0d",SOME); end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ConstHw 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 (изменено) · Жалоба Однако нет. Синтезатор Vivado пробегает по всем веткам и даже если модуль не-инстантинейтится, то все равно проверяет его код и вываливает ошибку на строчку в нем типа reg a; assign a=1'bx; yuravg О! Вот это прям то что надо и с сообщением и вообще. Спасибо! Изменено 20 апреля, 2016 пользователем ConstHw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuravg 0 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Вы там quartus упоминали, поискав слова $error в его установочной директории, среди файлов verilog, найдете примеры и с assert Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ConstHw 0 21 апреля, 2016 Опубликовано 21 апреля, 2016 · Жалоба Одна проблема - директива $error отсутствует в стандартах языка 2001/2005 При том что например функцию clog2 из 2005 верилога Vivado не поддерживает. А error из 2009 поддерживает. Очередной пример того, что как инструмент, Verilog сырой недоязык с кучей частично поддерживаемых в случайном режиме сапрами стандартов =/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 21 апреля, 2016 Опубликовано 21 апреля, 2016 · Жалоба Одна проблема - директива $error отсутствует в стандартах языка 2001/2005 При том что например функцию clog2 из 2005 верилога Vivado не поддерживает. А error из 2009 поддерживает. Очередной пример того, что как инструмент, Verilog сырой недоязык с кучей частично поддерживаемых в случайном режиме сапрами стандартов =/ если учесть, что $error это SVешная фича, то да...... ЗЫ. универсальное решение я вам написал: индексация несуществующего бита в векторе при не корректных параметрах (а не присвоение неизвестной величины) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ConstHw 0 21 апреля, 2016 Опубликовано 21 апреля, 2016 · Жалоба des00 к сожалению оно не универсально. Для Vivado оно вообще не является решением 1) Присвоение х, как в вашем примере вызывает ошибку всегда. Не зависимо от попадания в эту ветку 2) Присвоение корректного значения reg[-1] не вызывает ошибку на синтезе. Конструкция error кстати поддерживается Vivado без указания типа файла SV. Чудеса применения стандартов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 21 апреля, 2016 Опубликовано 21 апреля, 2016 · Жалоба des00 к сожалению оно не универсально. Для Vivado оно вообще не является решением 1) Присвоение х, как в вашем примере вызывает ошибку всегда. Не зависимо от попадания в эту ветку 2) Присвоение корректного значения reg[-1] не вызывает ошибку на синтезе. Конструкция error кстати поддерживается Vivado без указания типа файла SV. Чудеса применения стандартов. Не знаю как у вас, у меня исе/Вивада/квартус корректно себя ведет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться