-1

我想合成一个 SystemVerilog 代码,它的延迟写为 ##1 但合成器会给出语法错误,因为延迟是不可合成的。我想知道有什么方法可以给延迟合成吗?例如,这是代码中带有延迟的 SystemVerilog 断言

断言属性 ( ( req1 == 0 ) ##1( req1 == 1 ) ##1 !( req2 == 1 ) || ( gnt1 == 0 ) );

我怎样才能在不丢失其行为的情况下合成它?

4

2 回答 2

1

属性不是 Verilog 的一部分,而是 SystemVerilog 的一部分。更重要的是,属性本身也无法合成。属性在模拟环境中的coveror语句中使用。assert

至于延迟,您唯一的选择是使用触发器来延迟信号。在您的财产##1中意味着“在下一个边缘”,假设您的财产有一些与之相关的时钟(在封面/断言声明中或它在时钟块内)。

要在其他可合成的代码中创建可合成的周期延迟:

always@(posedge ck or posedge arst) begin
  if(arst)
    data_delayed <= '0;
  else
    data_delayed <= data;
end  
于 2016-11-22T12:32:41.867 回答
1

你写的属性没有任何意义。您不能在布尔表达式的中间添加延迟。你的意思是写一个表达式序列吗?那么正确的语法是

sequence s1;
 ( ( req1 == 0 ) ##1( req1 == 1 ) ##1 !( req2 == 1 ) || ( gnt1 == 0 ) );
endsequence
于 2016-11-22T15:06:30.887 回答