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

Assert в Verilog во время имплемента

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

 

В симуляции как проверять понятно

initial begin
if (BW0+BW1 > 5) begin
    $display(" Error parameters");
    $finish();
end

....
...
...
end

 

Но ведь синтезатор игнорирует эти директивы? Как правильно выполнять такие процедуры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В симуляции как проверять понятно

initial begin
if (BW0+BW1 > 5) begin
    $display(" Error parameters");
    $finish();
end

....
...
...
end

 

Но ведь синтезатор игнорирует эти директивы? Как правильно выполнять такие процедуры?

 

$display не игнорирует, если в секции initial (в Quartus)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

  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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

можно и так:

localparam SOME = 11;
initial begin
    if ( SOME > 4 )
        $error("Invalid parameter SOME = %0d",SOME);
end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однако нет.

 

Синтезатор Vivado пробегает по всем веткам и даже если модуль не-инстантинейтится, то все равно проверяет его код и вываливает ошибку на строчку в нем типа

reg a;
assign a=1'bx;

 

 

yuravg О! Вот это прям то что надо и с сообщением и вообще. Спасибо!

Изменено пользователем ConstHw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы там quartus упоминали,

поискав слова $error в его установочной директории, среди файлов verilog,

найдете примеры и с assert

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одна проблема - директива $error отсутствует в стандартах языка 2001/2005

При том что например функцию clog2 из 2005 верилога Vivado не поддерживает. А error из 2009 поддерживает.

Очередной пример того, что как инструмент, Verilog сырой недоязык с кучей частично поддерживаемых в случайном режиме сапрами стандартов =/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одна проблема - директива $error отсутствует в стандартах языка 2001/2005

При том что например функцию clog2 из 2005 верилога Vivado не поддерживает. А error из 2009 поддерживает.

Очередной пример того, что как инструмент, Verilog сырой недоязык с кучей частично поддерживаемых в случайном режиме сапрами стандартов =/

если учесть, что $error это SVешная фича, то да......

 

ЗЫ. универсальное решение я вам написал: индексация несуществующего бита в векторе при не корректных параметрах (а не присвоение неизвестной величины)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

des00 к сожалению оно не универсально. Для Vivado оно вообще не является решением

1) Присвоение х, как в вашем примере вызывает ошибку всегда. Не зависимо от попадания в эту ветку

2) Присвоение корректного значения reg[-1] не вызывает ошибку на синтезе.

 

Конструкция error кстати поддерживается Vivado без указания типа файла SV. Чудеса применения стандартов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

des00 к сожалению оно не универсально. Для Vivado оно вообще не является решением

1) Присвоение х, как в вашем примере вызывает ошибку всегда. Не зависимо от попадания в эту ветку

2) Присвоение корректного значения reg[-1] не вызывает ошибку на синтезе.

 

Конструкция error кстати поддерживается Vivado без указания типа файла SV. Чудеса применения стандартов.

Не знаю как у вас, у меня исе/Вивада/квартус корректно себя ведет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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