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情况下,这并不重要,但您提出了一个一般性问题。