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

时间:2015-02-25 02:58:09

标签: verilog system-verilog

在Verilog,我知道我们无法通过"事件"模块之间。 Howe关于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

1 个答案:

答案 0 :(得分:1)

你需要给出一个端口方向;恩。 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