Verilog:两个always块是否可以合并为一个always块?

Verilog:两个always块是否可以合并为一个always块?,verilog,Verilog,我有一个问题,两个always@(posedge-clk)块将与一个always@(posedge-clk)块相同 比如说, always @(posedge clk) begin // do task1 end always @(posedge clk) begin // do task2 end 和这个一样吗 always @(posedge clk) begin // do task1 // do task2 end 谢谢视情况而定。如果这两个任务之间没

我有一个问题,两个
always@(posedge-clk)块
将与一个
always@(posedge-clk)块
相同

比如说,

always @(posedge clk) begin
    // do task1
end

always @(posedge clk) begin
   // do task2
end
和这个一样吗

always @(posedge clk) begin
    // do task1
    // do task2
end

谢谢

视情况而定。如果这两个任务之间没有依赖关系,而这对于可合成RTL来说通常是不存在的,那么这并不重要


但是,如果要求task1在task2之前执行,那么只有单个
始终
块可以保证这一点

视情况而定。如果这两个任务之间没有依赖关系,而这对于可合成RTL来说通常是不存在的,那么这并不重要

但是,如果要求task1在task2之前执行,那么只有单个
始终
块可以保证这一点

不,他们不是

在第一个示例中,两个任务并行执行。在第二种情况下,它们按顺序执行

这是一个极端的例子,情况不仅不同,甚至还有令人讨厌的副作用。因此,让我们首先定义一个时钟和两个任务:

reg clk,a,b;

   initial
   begin
      clk = 1'b0;
      a = 1'b0;
      b = 1'b0;
      forever
         #50 clk = ~clk;
   end

task task1;
begin
   #10;
   a <= 1'b1;      
   #30;
   a <= 1'b0;
end
endtask


task task2;
begin
   #10;
   b <= 1'b1;      
   #70;
   b <= 1'b0;
end
endtask
这将产生以下波形,其中模式在每个时钟周期重复,且两个波形平行:

如果我们使用第二个代码,任务中的总时间比时钟周期长

always @(posedge clk) begin
    task1;
end

always @(posedge clk) begin
   task2;
end
这会产生一个不同的波形,其中模式是顺序的,但也会每隔一秒重复一次

不,他们不是

在第一个示例中,两个任务并行执行。在第二种情况下,它们按顺序执行

这是一个极端的例子,情况不仅不同,甚至还有令人讨厌的副作用。因此,让我们首先定义一个时钟和两个任务:

reg clk,a,b;

   initial
   begin
      clk = 1'b0;
      a = 1'b0;
      b = 1'b0;
      forever
         #50 clk = ~clk;
   end

task task1;
begin
   #10;
   a <= 1'b1;      
   #30;
   a <= 1'b0;
end
endtask


task task2;
begin
   #10;
   b <= 1'b1;      
   #70;
   b <= 1'b0;
end
endtask
这将产生以下波形,其中模式在每个时钟周期重复,且两个波形平行:

如果我们使用第二个代码,任务中的总时间比时钟周期长

always @(posedge clk) begin
    task1;
end

always @(posedge clk) begin
   task2;
end
这会产生一个不同的波形,其中模式是顺序的,但也会每隔一秒重复一次


很好的反例!!但是,如果没有延迟代码(例如:#10,#30),该怎么办?例如,只是这样做,“你仍然存在串行与并行执行的问题,如果存在依赖关系,这可能会导致差异。在大多数Verilog情况下,这并不重要,但你问了一个一般性的问题。很好的反例!!但是,如果没有延迟代码(例如:#10,#30)?例如,只是这样做,”a您仍然存在串行与并行执行的问题,如果存在依赖关系,则可能导致差异。在大多数Verilog情况下,这并不重要,但您提出了一个一般性问题。