Verilog执行并行或顺序if块以及其他语句

Verilog执行并行或顺序if块以及其他语句,verilog,fpga,hdl,sequential,Verilog,Fpga,Hdl,Sequential,以下是verilog代码 我试图理解always块中语句的工作原理。 我知道阻塞语句使用=和非阻塞语句编写的规则这里的故事非常简单。在模拟中,always块中的所有语句始终按顺序执行,就像在任何编程语言中一样。if语句将在赋值后执行,如下所示 1> out1=c; //statement 1 2> out2=c+1; //statement 2 3> if(out2>5) begin 3a> out3=out1+out2;

以下是verilog代码
我试图理解always块中语句的工作原理。
我知道阻塞语句使用=和非阻塞语句编写的规则这里的故事非常简单。在模拟中,always块中的所有语句始终按顺序执行,就像在任何编程语言中一样。
if
语句将在赋值后执行,如下所示

  1> out1=c;   //statement 1
  2> out2=c+1; //statement 2
  3> if(out2>5)
       begin
  3a>      out3=out1+out2;//statement 3
     end
     else
  3b>     out3=0;
  4> out4=out1-out2;
上述内容将与任何通用编程语言一样工作。如果
out1>5
,将采用
if


混淆在阻塞/非阻塞分配中。Verilog对
有一个非常特殊的语义。这个问题是重复的,谢谢你指出,但是。。。。。。这个问题很相似。。。。。但我的困惑是中间if块的位置是否会影响序列。谢谢你的详细解释。现在我有了一个更好的主意。Out3和out4不是最终输出。它们代表一些决定最终输出的操作。如果它是while循环或带有完全阻塞分配的for循环,则不使用if语句。这两种操作是否相同?是的,它将遵循相同的规则。但是,在编写可合成循环时,迭代次数必须在编译时可计算,并且应使用块分配来更新循环计数器。
  1> out1=c;   //statement 1
  2> out2=c+1; //statement 2
  3> if(out2>5)
       begin
  3a>      out3=out1+out2;//statement 3
     end
     else
  3b>     out3=0;
  4> out4=out1-out2;
  out1=c;   //statement 1
  out2 <= c+1; //<<<< non blocking, assignment here, statement 2
  if(out2>5)
       begin