在 SystemVerilog 中,可以在端口中定义事件吗

In SystemVerilog, can events be defined in ports

在 Verilog 中,我知道我们不能在模块之间传递 "events"。 System Verilog 怎么样?我想要事件 "trig" 挂钩触发源块 "eventGen" 并被块消耗 "eventConsume" 我如何得到编译错误

代码:

module propagateEvents;

reg clk;
event trig;

initial
begin
    clk = 1'b0;
end

always #10 clk = ~clk;

eventGen eventGen (trig, clk);
eventConsume eventConsume (trig, clk);

endmodule

module eventGen(trigGen, clk);

input clk;
event trigGen;

reg count[3:0];

initial
    count = 0;

always @(posedge clk)
begin
    count = count + 1'b1;
    if (count == 'h8)
        ->trigGen;
end

endmodule

module eventConsume(trigConsume, clk);

input clk;
event trigConsume;

always @(trigConsume)
begin
    $display("Trigger caught");
end
endmodule

你需要给个端口方向;前任。 inout event。工作示例 here。 SystemVerilog 也可以使用 ref event.

请注意 event 不可合成。另外 reg count[3:0] 需要 reg [3:0] count.

module eventGen(output event trigGen, input clk);
reg [3:0] count;
initial count = 0;
always @(posedge clk)
begin
    count = count + 1'b1;
    if (count == 'h8)
        ->trigGen;
end
endmodule

module eventConsume(input event trigConsume, input clk);
always @(trigConsume)
begin
    $display("Trigger caught");
end
endmodule