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

在SystemVerilog中,可以在端口中定义事件吗,verilog,system-verilog,Verilog,System Verilog,在Verilog中,我知道我们不能在模块之间传递“事件”。Verilog系统怎么样?我想让事件“trig”钩住触发器源块“eventGen”,并被块“eventConsume”消费掉一些我是如何得到编译错误的 代码: 你需要给出一个港口方向;例如,inout事件。工作示例。SystemVerilog还可以使用ref事件 module eventGen(output event trigGen, input clk); reg [3:0] count; initial count = 0; alw

在Verilog中,我知道我们不能在模块之间传递“事件”。Verilog系统怎么样?我想让事件“trig”钩住触发器源块“eventGen”,并被块“eventConsume”消费掉一些我是如何得到编译错误的

代码:


你需要给出一个港口方向;例如,
inout事件
。工作示例。SystemVerilog还可以使用
ref事件

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
请注意,
事件
不可合成。另外,
reg-count[3:0]
需要是
reg-count[3:0]计数

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

我得到的错误为“输入端口propagateEvents.sv的低连接中的错误-[RILIP]寄存器,21“trigGen”非网络变量“trigGen”不能是输入或输入输出端口。错误-[RILIP]寄存器位于输入端口propagateEvents.sv的低连接中,40“trigGen”“非净变量'trigConsume'不能是输入或输入输出端口。无需使用
ref
端口。分配给另一个事件时使用的事件变量将句柄传递给该事件,该事件本身就是一个引用。只需将端口设置为
输出
事件发生
输入
事件消耗
即可将事件数据类型分配给其他事件数据类型。我有两个或两个以上的事件,比如eventA,eventB,eventC。我希望“trigConsume”是eventA | eventB | eventC;换句话说,assign trgConsume=eventA | eventB | eventC在语义上是有效的?
always@(eventA或eventB或enventC)->trigConsume
始终@(eventA)->trigConsume;始终@(eventB)->trigConsume;始终@(eventC)->trigConsume。执行
trigConsume=eventA
,将其别名为eventA,但
trigConsume=eventB
将覆盖别名<代码>事件A=trigConsume;eventB=trigConsume将别名所有内容。参见第6.17节事件数据类型