这更像是一个客观问题。 什么是验证时钟频率的最佳方法? (主要在使用RTL仿真时,门级仿真应禁用这些检查)
以前我用断言做过,但我想得到意见,因为我遇到了以下几个问题:
考虑SPI协议,时钟仅在CS有效时才有效,因此仅在CS置为无效时才进行检查,这不会转换为简单的断言,因为填充配置会改变CS的时序和功能。
即使在RTL仿真中也没有精确周期的时钟,具体取决于逻辑时钟的+/-范围。
答案 0 :(得分:0)
如果您只想验证时钟的频率,我想您知道时钟有效,然后您可以运行模拟一段时间并保持时钟计数器,然后您获得$ time和counter,frequency = $定时/计数器。大致你可以得到频率。
如果要验证精度或占空比,我认为它与时钟的特性有关,应该属于模拟设计类,如PLL,振荡器。模拟工程师应证明其正确性。他们可以使用spice模拟。
是的,这不仅仅是讨论SV / UVM的好主题。
如果我的理解不正确,请纠正我。 : - )
答案 1 :(得分:0)
您好,您可以使用断言来验证时钟周期/频率,这是一个例子:
具有50%占空比和1 Mhz频率的时钟
property p_clk_hi;
time v;
@(posedge clk) (1, v=$time) |-> @(negedge clk) ($time-v)==500ns;
endproperty
ap_clk_hi: assert property(p_clk_hi);
property p_clk_lo;
time v;
@(negedge clk) (1, v=$time) |-> @(posedge clk) ($time-v)==500ns;
endproperty
ap_clk_lo: assert property(p_clk_lo);
endmodule
答案 2 :(得分:0)
在您的RTL中,时钟数量较少然后断言将是更好的选择,但如果您有大量时钟,那么实施"时钟检查器"将是一个最好的选择。
与SVA相比,时钟检查器具有各种优势,例如
实施概述:
如下面的方框图所示,我们需要创建一个简单的时钟检查器代理,在其中实例化监视器,接口和配置类;此外,还要创建一个通过配置句柄启用检查器的测试用例。
使用此检查程序可以简单地解决您遇到的两个问题
除了这个检查器成为救星之外,如果你有超高速IP,就像PCIe那样,在整个模拟过程中,时钟频率根据Gen1,Gen2,Gen3而变化。
希望这能解决您的问题!!