上一篇的文章中,我们介绍了VerilogHDL仿真过程中的时序。在VerilogHDL仿真中,对于时序的描述,通常有以下两种方式:直接的延时语句描述和间接的条件语句描述。例如可以直接用1表示delay1个时间单位,也可以用always(posedgeclk)这种间接的条件语句来表示delay的cycle时长。在平时的工作中,我们可以根据实际情况,灵活选择合适的描述方式。 今天书接上文,继续探讨和时序相关内容。specifyendspecify 我们使用VerilogHDL进行行为级描述时候,有下面两种方式定义时间信息(以反相器为例)。assign1使用specifyendspecify块进行定义。 第一种比较常见,不在赘述。我们主要解释一下第二种specifyendspecify块。 specifyendspecify是VerilogHDL的一对关键词,把这两个关键词以及它们之间的代码,通常看做一个整体。我们可以在这对关键词之间,定义从输入到输出端口之间的pathdelay(路径延时)。我们给出下面使用specifyendspecify的例子(以反相器为例)。 specify (inout)(1。1,1。0); endspecify 其中,1。1表示上升延时,1。0表示下降延时。特别的,如果specify中只有一个参数,则认为上升延时和下降延时相等,都等于该参数值。 specifyendspecify中的延时一般都只在模块顶层,作为该模块的输入端口和输出端口之间的路径延时定义,并不能表示实际电路的延时信息。 specifyendspecify定义延时的优点 使用specifyendspecify定义延时的优点,主要有以下两个:对于功能比较复杂的模块,我们并不十分清楚输入端口和输出端口之间,具体电路的准确延时信息。而specifyendspecify可以做到在不清楚具体电路情况下,就对输入端口和输出端口下延时描述。使用标准延时文件(sdf:standraddelayfile)中的时序信息反标电路。 我们使用综合工具(例如DesignCompiler),进行综合的过程中,会输出标准延时文件(sdf),里面包含了当前设计中所有门电路的时间信息。综合工具在合成过程中,根据单元库中的相关信息,计算得到这些门电路的时间信息,在预综合阶段,可以认为这些时间信息的准确度是可以接受的(实际工作中,在其它的综合阶段,我们认为延时数据的准确度已经不能满足要求,所以一般会走更加准确的DCG流程,在这里不再赘述)。而sdf中的数据可以刷新specifyendspecify中定义的数据,使得specifyendspecify中的延时信息,变得准确。 关于sdf的内容,我将在后面的文章中再详细介绍,在这里就不再赘述。小结 今天的内容,我们主要介绍了specifyendspecify这对关键字,以及它的具体的应用场合。 对于今天的内容,如果有任何疑问或者建议,欢迎和我进行沟通和讨论。