14. Specify blocks
两种类型的HDL构造通常被用来描述结构模型(如ASIC细胞)的延迟。具体如下:
—分布式延迟,指定事件通过模块内部的门和网传播所花费的时间(参见7.14)
—模块路径延迟,描述一个事件在源(输入端口或inout端口)传播到目标(输出端口或inout端口)所花费的时间。
该子句描述了如何在模块中指定路径,以及如何将延迟分配给这些路径。
14.1 Specify block declaration
一个称为指定块的块语句是用来描述源和目标之间的路径以及为这些路径分配延迟的工具。指定块的语法见语法14-1。
指定块应该由关键字specify和endspecify限定,并且它应该出现在一个模块声明中。指定的block可以执行以下任务:
—描述跨模块的各种路径。
—为这些路径分配延迟。
—执行定时检查,以确保在模块输入处发生的事件满足模块所描述的设备的定时约束(见第15条)。
指定块中描述的路径,称为模块路径,将信号源与信号目的地配对。源可以是单向的(输入端口)或双向的(inout端口),被称为模块路径源。类似地,目的地可以是单向的(输出端口)或双向的(inout端口),被称为模块路径目的地。
例如:
specify
specparam tRise_clk_q = 150, tFall_clk_q = 200;
specparam tSetup = 70;
(clk => q) = (tRise_clk_q, tFall_clk_q);
$setup(d, posedge clk, tSetup);
endspecify
关键字指定之后的前两行声明指定参数,在4.10.3中讨论。指定参数声明之后的行描述了模块路径,并为该模块路径分配延迟。指定参数决定分配给模块路径的延迟。指定模块路径将在14.2中介绍。为模块路径分配延迟将在14.3中讨论。关键字end前的行指定了一个系统定时检查的实例化,将在第15章中进一步讨论。