事件触发器是否可以在verilog中合成?

时间:2016-11-04 11:38:34

标签: verilog hdl synthesis

我正在尝试在我的代码中使用事件触发( - >)。这会合成吗?

always @(posedge clk) begin
count <= count + 1;
-> x;
end

always @(x) flag = 1;

这只是一个示例代码。我想要做的是,当计数中有一个事件我希望将标志置高时,否则它应该保持低位。在我的情况下,计数值在每7个时钟周期后增加。我可以使用事件触发吗?如果不是我能做些什么来满足我的要求?

3 个答案:

答案 0 :(得分:0)

您不应该在可综合代码中执行此操作。虽然有些工具可能能够创建等效逻辑,但几乎总有一种替代方法应该使用。例如,您的代码可以重写为:

always @(posedge clk) begin
  count <= count + 1;
  -> x;
end

always @(count) flag = 1;

答案 1 :(得分:0)

如果工具选择支持,可以合成任何可以在仿真中执行的内容。但大多数RTL综合工具都不支持这一点。

在您的简单情况下,您可以使用任务调用(或SystemVerilog中的void函数调用)替换事件触发器。

 always @(posedge clk) begin
  count <= count + 1;
  x;
end
task x;
flag <= 1;
endtask

答案 2 :(得分:-1)

某些软件可以合成它,但它不是一个好的代码。如果这样做,您的代码将不同步。 要同步,所有«always»语句必须在clk的相同边缘切换。