2014-03-19 79 views
4

良好的編碼約定表示我們應該在組合塊中使用阻塞賦值,並在順序塊中使用非阻塞賦值。我想在組合塊中使用++運算符,但我不知道它是否阻塞。因此,這是代碼: 系統Verilog中的++操作符是阻塞的還是非阻塞的?

input [3:0] some_bus; 
logic [2:0] count_ones; 
always_comb begin 
    count_ones = '0; 
    for(int i=0; i<4; i++) begin 
    if(some_bus[i]) 
     count_ones++; 
    end 
end 

相當於這個

input [3:0] some_bus; 
logic [2:0] count_ones; 
always_comb begin 
    count_ones = '0; 
    for(int i=0; i<4; i++) begin 
    if(some_bus[i]) 
     count_ones = count_ones + 1; 
    end 
end 

或本:

input [3:0] some_bus; 
logic [2:0] count_ones; 
always_comb begin 
    count_ones = '0; 
    for(int i=0; i<4; i++) begin 
    if(some_bus[i]) 
     count_ones <= count_ones + 1; 
    end 
end 

我也期待在1800年至2012年的標準,但不能弄明白。值得讚賞的是,這個答案將我指向標準中的適當部分。

+0

並非所有的代碼示例都等於'always_comb count = 4;'? – toolic

+0

@toolic,你是對的。這是一個非常簡單的例子。我會讓它更真實。 – nguthrie

回答

8

根據IEEE Std 1800-2012的第11.4.2節,它是阻塞的。

SystemVerilog的包含C增量和減量賦值運算符++ I,--I,我++和我 - 。在表達式中使用時,不需要括號。這些遞增和遞減賦值運算符的行爲與阻塞賦值相同。