Verilog中的合成延迟

时间:2016-11-22 11:42:42

标签: verilog delay system-verilog synthesize system-verilog-assertions

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

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

如何在不失去行为的情况下合成它?

2 个答案:

答案 0 :(得分:1)

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

至于延迟,你唯一的选择是使用触发器来延迟信号。在您的属性中##1表示“在下一个边缘”,假设您的属性具有与之相关的一些时钟(在封面/断言语句中或者在时钟块内)。

在其他可合成代码中创建可合成的循环延迟:

always@(posedge ck or posedge arst) begin
  if(arst)
    data_delayed <= '0;
  else
    data_delayed <= data;
end  

答案 1 :(得分:1)

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

sequence s1;
 ( ( req1 == 0 ) ##1( req1 == 1 ) ##1 !( req2 == 1 ) || ( gnt1 == 0 ) );
endsequence