Jump to content

    

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

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

a = b | c ^ d & e;

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

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

 

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

Share this post


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

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

Share this post


Link to post
Share on other sites
Ну почему же пофигу? Латчи образуются.

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

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

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

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

Share this post


Link to post
Share on other sites
А вообще, переходить с verilog2000 на verilog95 - это регресс :), надо наоборот, к SV двигаться

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

Share this post


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

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

Share this post


Link to post
Share on other sites
Не уловил мысль... Допустим я напишу

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

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

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

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

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

Share this post


Link to post
Share on other sites
Или пример неудачный? Приведите свой.

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

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

Share this post


Link to post
Share on other sites
ну вот так будет латч

    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;

Share this post


Link to post
Share on other sites
ну вот так будет латч

    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 так вообще в списке чувствительности ничего не пропущено.

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

Share this post


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

 

вот пример

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

 

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

 

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

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

Share this post


Link to post
Share on other sites
а так его не будет

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 привел пример. Присоединяюсь. В списке чувствительности должно быть все, что в правой части присваивания.

Share this post


Link to post
Share on other sites
вот пример

always @(c)

a=c?b:0;

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this