Verilog 合成时,此代码将产生多少次翻转?

Verilog 合成时,此代码将产生多少次翻转?,verilog,synthesis,Verilog,Synthesis,我试图了解合成时这段代码会产生多少翻转 我有两个带有非阻塞和阻塞分配代码的测试用例 测试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 wire-aclk; 导线[1:0]a; reg[1:0]c; reg[1:0]b; 始终@(posedge aclk) 开始 b它们在功能上是不同的。非阻塞赋值先对右侧语

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

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

测试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
wire-aclk;
导线[1:0]a;
reg[1:0]c;
reg[1:0]b;
始终@(posedge aclk)
开始

b它们在功能上是不同的。非阻塞赋值先对右侧语句求值,然后继续下一个语句,直到所有其他语句都先求值后,才会将数据存储到左侧语句。阻塞语句计算右侧,并立即将其存储到左侧

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

就像前面提到的toolic一样,您通常在顺序逻辑中使用非阻塞语句。大多数人也建议不要在同一个开始-结束块中混合非阻塞语句和阻塞语句。

“有多少个翻转…”你的意思是“?”因为NBA和BA的糟糕混合,第一次测试在模拟和合成后可能表现不同。第二个就可以了。不要混用它们。因此,Test2相当于“将(a+1)存储到c中”,b不需要寄存器。@mkrieger1我对Test3感到困惑。
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