specify block需定义于module内
module my_mod;
specify
specify_item
endspecify
endmodule
specify_item指以下内容:
specparam_declaration
| pulsestyle_declaration
| showcancelled_declaration
| path_declaration
| system_timing_check
1、specparam_declaration常量定义
如:
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
2、Module path declarations
2.1 Simple module paths
两种定义路径
— Source *> destination
— Source => destination
符号 *> 建立源端到目的端的所有连接
符号 => 建立源端到目的端的连接
如:
(A => Q) = 10;
(B => Q) = (12);
(C, D *> Q) = 18;
2.2 Edge-sensitive paths边缘敏感路径
polarity operator 极性操作符表示输入到输出的路径是否有反向,+号表示输入经过延时就到输出(路径上没有反向),-号表示输入经过取反且延时后才到输出。
如:
( posedge clock => ( out +: in ) ) = (10, 8);
表示clock上升沿时,in变高到out变高的延时是10ns,in变低到out变低的延时是8ns
( negedge clock[0] => ( out -: in ) ) = (10, 8);
表示clock[0]下降沿时,in变高到out变低的延时是10ns,in变低到out变高的延时是8ns
( clock => ( out : in ) ) = (10, 8);
表示任何clock的沿变化,in变高到out变高是10ns,in变低到out变低是8ns
2.3 State-dependent paths条件路径
有3种形式:
if ( module_path_expression ) simple_path_declaration
if ( module_path_expression ) edge_sensitive_path_declaration
ifnone simple_path_declaration
条件判断语句结果为1,那么就赋予延时到指定的路径上,如果条件判断语句结果是x或z,也会同样赋予延时到该路径。
ifnone用于该路径其它的条件都不成立时的延时情形
if (C1) (IN => OUT) = (1,1);
ifnone (IN => OUT) = (2,2);
// add operation
if (opcode == 2'b00) (i1,i2 *> o1) = (25.0, 25.0);
// pass-through i1 operation
if (opcode == 2'b01) (i1 => o1) = (5.6, 8.0);
// pass-through i2 operation
if (opcode == 2'b10) (i2 => o1) = (5.6, 8.0);
// all other operations
ifnone (i2 => o1) = (15.0, 15.0);
(posedge CLK => (Q +: D)) = (1,1);
ifnone (CLK => Q) = (2,2);
2.4 pulse filtering behavior脉冲过滤行为
PATHPULSE$ = ( reject_limit_value [ , error_limit_value ] )
当脉冲宽度小于reject_linit_value时,输出不变化;
当脉冲宽度小于error_linit_value大于等于reject_limit_value时,输出X;
当脉冲宽度大于等于error_limit_value,输出该变化的逻辑值。
specify
(clk => q) = 12;
(data => q) = 10;
(clr, pre *> q) = 4;
specparam
PATHPULSE$clk$q = (2,9),
PATHPULSE$clr$q = (0,4),
PATHPULSE$ = 3;
endspecify
clk到q的延时是12ns,如果clk有个小于2ns的毛刺,q端不会有变化;
如果clk有个4ns的毛刺,q端会输出X态;
如果clk有个9ns的毛刺(比如低电平毛刺),q端会输出变化的逻辑值(比如低电平)