电平触发事件:
always@(*)begin
$display("1%0t, %b", $realtime, y);
end
编译之后:
E_0x55b19973c4a0 .event anyedge, v0x55b199774d10_0; //(*)编译得到,地址、触发类型、变量地址
.scope S_0x55b19973da30;
T_2 ;
%wait E_0x55b19973c4a0; //@编译为%wait,跟着等待的事件地址。
%vpi_call 2 11 "$display", "1%0t, %b", $realtime, v0x55b199774d10_0 {0 0 0};
%jmp T_2;
.thread T_2, $push;
边沿触发事件:
always@(posedge y)begin
$display("1%0t, %b", $realtime, y);
end
always@(negedge y)begin
$display("1%0t, %b", $realtime, y);
end
编译后:
E_0x55daef7b44a0 .event negedge, v0x55daef7ed560_0; //地址、触发类型、变量地址
E_0x55daef7ebd40 .event posedge, v0x55daef7ed560_0;
.scope S_0x55daef7b5a30;
T_2 ;
%wait E_0x55daef7ebd40;
%vpi_call 2 11 "$display", "1%0t, %b", $realtime, v0x55daef7ed560_0 {0 0 0};
%jmp T_2;
.thread T_2;
.scope S_0x55daef7b5a30;
T_3 ;
%wait E_0x55daef7b44a0;
%vpi_call 2 14 "$display", "1%0t, %b", $realtime, v0x55daef7ed560_0 {0 0 0};
%jmp T_3;
.thread T_3;
多边沿触发:
always@(posedge y,negedge y,y1)begin
$display("1%0t, %b", $realtime, y);
end
编译之后:
E_0x55c5b808f4a0/0 .event anyedge, v0x55c5b80d7390_0;
E_0x55c5b808f4a0/1 .event negedge, v0x55c5b80c8000_0;
E_0x55c5b808f4a0/2 .event posedge, v0x55c5b80c8000_0;
E_0x55c5b808f4a0 .event/or E_0x55c5b808f4a0/0, E_0x55c5b808f4a0/1, E_0x55c5b808f4a0/2; //组合多个事件,or的关系
.scope S_0x5630384f5a30;
T_2 ;
%wait E_0x55c5b808f4a0;
%vpi_call 2 11 "$display", "1%0t, %b", $realtime, v0x55c5b80c8000_0 {0 0 0};
%jmp T_2;
.thread T_2;