我想合成一个SystemVerilog代码,其延迟写为## 1但合成器给出了语法错误,因为延迟不能合成。我想知道有什么方法可以延迟合成吗? 例如,这是带有延迟的代码中的SystemVerilog断言
断言属性((req1 == 0)## 1(req1 == 1)## 1!(req2 == 1)||(gnt1 == 0));
如何在不失去行为的情况下合成它?
答案 0 :(得分:1)
属性不是Verilog的一部分,而是SystemVerilog的一部分。更重要的是,属性本身也不是可合成的。属性在模拟环境中的cover
或assert
语句中使用。
至于延迟,你唯一的选择是使用触发器来延迟信号。在您的属性中##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