2012-01-18 2 views
9

Есть ли разница междуРазница между @ (posedge Clk); a <= 1'b1; и @ (posedge Clk) a <= 1'b1;

@(posedge Clk); 
    a<= 1'b1; 

и

@(posedge Clk) 
    a<= 1'b1; 

Обратите внимание на точку с запятой после CLK. Когда я просматривал тестовый стенд, я сталкивался с подобными строками кода. Я сделал несколько простых экспериментов, и я не мог найти различий во время моделирования. Будет ли последовательность выполнения кода, следующего за этими строками, каким-либо образом измениться из-за наличия/отсутствия точки с запятой?

ответ

10

Вы правы - нет никакой поведенческой разницы.

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

@(posedge Clk) a<= 1'b1; 
12

Синтаксис BNF для любого процедурного заявления по существу

statement_item := 
     {procedural_timing_control} statement; 

Это означает, что вы можете иметь 0 или больше контроля синхронизации перед любым заявление. В вашем примере @(posedge Clk) - это контроль времени и a<= 1'b1; - это утверждение.

Если ваш пример находился внутри вилки/соединения, то было бы поведенческое различие, потому что первое - это два утверждения; позднее это одно утверждение.

fork 
    @(posedge Clk); a<1'b1; 
join 

В этом случае 2 заявления запускаются параллельно - a не будет ждать posedge быть назначены.

Смежные вопросы