При следующих предположениях существует большая разница:
module tb;
bit DataFull, clk;
bit [2:0] rWrPageCntr;
bit [2:0] rWrPageCntr2;
always #5 clk++;
always_ff @(posedge clk)
if(~DataFull) begin
rWrPageCntr <= rWrPageCntr - 1;
end
always_ff @(posedge clk)
rWrPageCntr2 <= rWrPageCntr2 - ~DataFull;
always @(negedge clk) $display("full=%b %d %d", DataFull, rWrPageCntr, rWrPageCntr2);
initial begin
DataFull = 1;
#150;
DataFull = 0;
#150 $finish;
end
endmodule
Выводы:
full=1 0 2
full=1 0 4
full=1 0 6
full=1 0 0
full=1 0 2
full=1 0 4
full=1 0 6
full=1 0 0
full=1 0 2
full=1 0 4
full=1 0 6
full=1 0 0
full=1 0 2
full=1 0 4
full=0 0 6
full=0 7 7
full=0 6 0
full=0 5 1
full=0 4 2
full=0 3 3
full=0 2 4
full=0 1 5
full=0 0 6
full=0 7 7
full=0 6 0
full=0 5 1
full=0 4 2
full=0 3 3
full=0 2 4
Первый пример ведет себя так, как и следовало ожидать, но второй пример больше сложный.
Во втором примере перед вычитанием DataFull
будет расширено до 3 бит, затем оно будет побитовое инвертирование, давая 7 и 6. Когда DataFull
= 0, ~DataFull
= 7. Когда DataFull
= 1, ~DataFull
= 6.