我发现在一些 Verilog 源代码中通常有很多延迟,即使是在一些简单的语句上,如下所示。造成这种延迟的根本原因是什么?
cmd <= #`DEL 32`b0
您的代码不是 VHDL,也不是我知道的任何其他语言。它可能意味着是Verilog。在正常使用中,您不会在任何一种语言中进行大量手动延迟规范,并且带有延迟的源代码由写入所需延迟的工具自动生成(但通常不会像这样的延迟)。但是,在较旧的 Verilog 源代码中,您确实经常看到大量的“#0”延迟规范,因为调度模型在历史上被打破了。
它通常用于门级仿真,您关心信号通过数字逻辑传播所需的时间,以便跟踪设计的时序问题。
为了为每个操作/语句选择正确的值,您需要有关目标器件的时序信息,通常来自数据表或实验室测量。
如果您不知道或无法访问此信息,则您的模型中可能不需要此级别的详细信息。使用除实际值以外的任何值可能会适得其反,因为当您寻找时间问题时,最终会出现误报和误报。
对于门级验证,我希望已对用于综合的库进行了表征,并将适当的延迟添加到基础级组件中。在模拟中将使用哪个来代替 RTL。在 Verilog 中,应该不需要像这样向 RTL 添加延迟。
可以将延迟添加到测试台组件以模拟片外延迟和接口,或不同合成部分之间的延迟。要计算正确的延迟,需要了解最终布局、轨道长度等。外部接口将指定最大和最小延迟。