1. begin....end
用来组合需要顺序执行的语句,称为串行块。
module test (
input wire clk ;
input wire [7:0] data_in ;
output reg [7:0] data_out ;
):
reg [7:0] data_in_dl1 ;
reg [7:0] data_in_dl2 ;
reg [7:0] data_in_dl3 ;
always@(posedge clk)
begin
data_in_dl1 <= data_in ;
data_in_dl2 <= data_in_dl1 ;
data_in_dl3 <= data_in_dl2 ;
data_out <= data_in_dl3 ;
end
串行块内的各条语句时按它们在块内的语句逐句顺序执行的,当前一条执行完之后才能执行下一条。块内每一条语句中的延时控制都是相对于前一条语句结束时刻的延时控制。
2. fork...join
用来组合需要并行执行的语句,称为并行块。例如:
parameter d = 50;
reg [7:0] r ;
fork
#d r = 8'h 45;
#2d r = 8'h A2;
#3d r = 8'h C1;
#4d r = 8'h E1;
join
并行语句块内各条语句时各自独立地同时开始执行,各条语句的起始执行时间都等于程序流程进入该语句块的时间。
参考:《无线通信FPGA设计》 田耕 徐文波 张延伟等.