verilog specify块

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端会输出变化的逻辑值(比如低电平)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值