上一篇的文章中,我们介绍了Verilog HDL仿真过程中的时序。在Verilog HDL仿真中,对于时序的描述,通常有以下两种方式:直接的延时语句描述和间接的条件语句描述。例如可以直接用“#1”表示delay1个时间单位,也可以用always@(posedge clk)这种间接的条件语句来表示delay的cycle时长。在平时的工作中,我们可以根据实际情况,灵活选择合适的描述方式。

eda仿真实验中会出现的问题 IC验证中的EDA仿真三(1)

今天书接上文,继续探讨和时序相关内容。

specify-endspecify

我们使用Verilog HDL进行行为级描述时候,有下面两种方式定义时间信息(以反相器为例)。

  1. assign #1 out = ~in;
  2. 使用specify-endspecify块进行定义。

第一种比较常见,不在赘述。我们主要解释一下第二种specify-endspecify块。

specify-endspecify是Verilog HDL的一对关键词,把这两个关键词以及它们之间的代码,通常看做一个整体。我们可以在这对关键词之间,定义从输入到输出端口之间的path delay(路径延时)。我们给出下面使用specify-endspecify的例子(以反相器为例)。

specify

(in => out)= (1.1, 1.0);

endspecify

其中,1.1表示上升延时,1.0表示下降延时。特别的,如果specify中只有一个参数,则认为上升延时和下降延时相等,都等于该参数值。

specify-endspecify中的延时一般都只在模块顶层,作为该模块的输入端口和输出端口之间的路径延时定义,并不能表示实际电路的延时信息。

eda仿真实验中会出现的问题 IC验证中的EDA仿真三(2)

specify-endspecify定义延时的优点

使用specify-endspecify定义延时的优点,主要有以下两个:

  1. 对于功能比较复杂的模块,我们并不十分清楚输入端口和输出端口之间,具体电路的准确延时信息。而specify-endspecify可以做到在不清楚具体电路情况下,就对输入端口和输出端口下延时描述。
  2. 使用标准延时文件(sdf:standrad delay file)中的时序信息反标电路。

我们使用综合工具(例如Design Compiler),进行综合的过程中,会输出标准延时文件(sdf),里面包含了当前设计中所有门电路的时间信息。综合工具在合成过程中,根据单元库中的相关信息,计算得到这些门电路的时间信息,在预综合阶段,可以认为这些时间信息的准确度是可以接受的(实际工作中,在其它的综合阶段,我们认为延时数据的准确度已经不能满足要求,所以一般会走更加准确的DCG流程,在这里不再赘述)。而sdf中的数据可以刷新specify-endspecify中定义的数据,使得specify-endspecify中的延时信息,变得准确。

eda仿真实验中会出现的问题 IC验证中的EDA仿真三(3)

关于sdf的内容,我将在后面的文章中再详细介绍,在这里就不再赘述。

小结

今天的内容,我们主要介绍了specify-endspecify这对关键字,以及它的具体的应用场合。

对于今天的内容,如果有任何疑问或者建议,欢迎和我进行沟通和讨论。

,