这个代码在合成时会产生多少翻转?

al0*_*l01 2 verilog synthesis

我试图了解这段代码在合成时会产生多少翻转?

我有2个带有非阻塞和阻塞分配代码的测试用例.

测试1.

wire aclk; 
wire [1:0] a; 
reg [1:0] c; 
reg [1:0] b;

always @(posedge aclk) 
begin 

 b <= a + 1; 
 c = b; 
end
Run Code Online (Sandbox Code Playgroud)

测试2.

wire aclk; 
wire [1:0] a; 
reg [1:0] c; 
reg [1:0] b;

always @(posedge aclk) 
begin 

 b = a + 1; 
 c <= b; 
end
Run Code Online (Sandbox Code Playgroud)

测试1有4个FF,测试2有2个FF.

我无法理解它是如何改变我只是切换代码.

谢谢你让我知道.

ser*_*ixo 5

它们在功能上是不同的.非阻塞分配评估右侧,然后继续到下一个语句,在第一次评估所有其他语句之前,不会存储到左侧.阻止语句评估右侧并立即将其存储在左侧.

Test1 is doing this:
evaluate (a+1)
store b into c , BEFORE (a+1) is stored into b!!!
store (a+1) into b

Test2 is doing this:
evaluate (a+1)
store (a+1) into b
store b into c
Run Code Online (Sandbox Code Playgroud)

与提到的工具类似,您通常在顺序逻辑中使用非阻塞语句.大多数人还建议不要在同一个开始端块中混合使用非阻塞和阻塞语句.