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

Как описать конструкцию always @(*) на verilog 95?

По хорошему, вместо звездочки нужно перечислить все сигналы, используемые в данном always в качестве источников. Например, если в теле

a = b | c ^ d & e;

то нужно указывать b,c,d,e ('a' не надо).

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

 

А вообще, переходить с verilog2000 на verilog95 - это регресс :), надо наоборот, к SV двигаться

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


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

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

Ну почему же пофигу? Латчи образуются.

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


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

Ну почему же пофигу? Латчи образуются.

Не уловил мысль... Допустим я напишу

reg a;
always @( b )
  a = b & c;

как видно, в списке чувствительности пропущен 'c'. Что по вашему синезируется? Не представляю, откуда здесь возмется латч.

Или пример неудачный? Приведите свой.

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


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

А вообще, переходить с verilog2000 на verilog95 - это регресс :), надо наоборот, к SV двигаться

FPGA Advantage 7.2 не желает с Verilog2000 дружить, а другие версии FPGA Advantage у меня на компе не запускаются, почему-то, вот и приходится.

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


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

FPGA Advantage 7.2 не желает с Verilog2000 дружить, а другие версии FPGA Advantage у меня на компе не запускаются, почему-то, вот и приходится.

думаю не стоит из-за средства ввода проекта отказывать себе в удовольсятвии пользоваться более продвинутым языком (другое дело если бы у вас синтезатор или моделятор язык не поддерживал)

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


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

Не уловил мысль... Допустим я напишу

reg a;
always @( b )
  a = b & c;

как видно, в списке чувствительности пропущен 'c'. Что по вашему синезируется? Не представляю, откуда здесь возмется латч.

Или пример неудачный? Приведите свой.

ну вот так будет латч

    always @( b or c )
        if(b)
            a <= d;
        else
        if(c)
            a<=~d;

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


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

Или пример неудачный? Приведите свой.

Ну вот вам типичный латч:

always @(d or g)
  if (g)
    q <= d;

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


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

ну вот так будет латч

    always @( b or c )
        if(b)
            a <= d;
        else
        if(c)
            a<=~d;

 

а так его не будет

always @( b or c )
        if(b)
            a <= d;
        else
        if(c)
            a <= ~d;
            else  a <= 1'b0;

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


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

ну вот так будет латч

    always @( b or c )
        if(b)
            a <= d;
        else
        if(c)
            a<=~d;

Ну вот вам типичный латч:

always @(d or g)
  if (g)
    q <= d;

Огромное спасибо за то что рассказали как описать латч :a14: . Буду знать :biggrin: .

Собственно вопрос был в чем: я утверждал, что синтезатору пофиг, все ли сигналы перечислены в списке чувствительности блока always. Ув. dvladim возразил, что не пофиг, и (я так понял) если перечислить не все, то образуются латчи. Я попросил пример. Но не любой пример латча, а такой, где синтез латча обусловлен тем, что что-то пропущено в списке чувствительности!

В обоих приведенных примерах наличие латчей обусловлено не списком чувствительности, а просто отсутствием последнего else после if-ов. В примере dvladim так вообще в списке чувствительности ничего не пропущено.

Так что пока я остаюсь при мнении, что результат работы синтезатора не зависит от того, все ли сигналы перечислены в списке чувствительности.

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


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

Собственно вопрос был в чем: я утверждал, что синтезатору пофиг, все ли сигналы перечислены в списке чувствительности блока always.

 

вот пример

always @(c)
a=c?b:0;

 

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

 

предполагаю, что хотелось описать мультиплексор

always @(c or b)
a=c?b:0;

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


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

а так его не будет

always @( b or c )
        if(b)
            a <= d;
        else
        if(c)
            a <= ~d;
            else  a <= 1'b0;

Ну, комбинационной схемы тоже не будет. Надо же как-то d хранить. Я хочу сказать, что при b и с равным 1 возможны все 4 сочетания a и d. Т.е. a не будет функцией трех входов.

 

Я попросил пример. Но не любой пример латча, а такой, где синтез латча обусловлен тем, что что-то пропущено в списке чувствительности!

В обоих приведенных примерах наличие латчей обусловлено не списком чувствительности, а просто отсутствием последнего else после if-ов. В примере dvladim так вообще в списке чувствительности ничего не пропущено.

Да принципиальной разницы нет. Вот yes привел пример. Присоединяюсь. В списке чувствительности должно быть все, что в правой части присваивания.

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


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

вот пример

always @(c)

a=c?b:0;

 

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

 

Умный, или не умный, ругнется или не ругнется, а ничего кроме упомянутого мультиплексора (точнее and гейта с одним инвертеным входом) синтезатор сделать не сможет. Уж латч тут точно не получится. Другое дело, что обнаружив такое безобразие синтезатор может вообще оказаться синтезировать. Ведь, строго говоря, always с неполным списком чувствительности является несинтезируемой конструкцией. Те синтезаторы, с которыми я сталкивался, дают warning, но синтезируют.

 

Впрочем предлагаю дискуссию свернуть, в силу ее абсолютной бесполезности. Благо уже давно можно не заморачиваться, а писать @(*). Я собственно тоже с самого начала не рекомендовал что-то пропускать. Разве что если хочется чудес при симуляции.

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


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

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

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

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

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

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

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

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

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

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