IEEE Verilog 手册 第14章 Specify blocks

本文详细介绍了Verilog中的Specify blocks,用于描述ASIC cell的延时和时序检查。内容涵盖路径声明、沿敏感路径、状态依赖路径的定义,以及传输延时格式、脉冲过滤控制等关键概念,帮助理解Verilog的时序建模。
摘要由CSDN通过智能技术生成

目录

路径声明

简单路径

沿敏感路径

状态依赖路径

给路径赋延时

传输延时格式

x态传输延时

选择延时值

混合路径延时和分布式延时

多驱output

脉冲过滤控制

error limit和reject limit配置

别的脉冲控制能力

增加x态持续时间

负脉冲显示


        有两种hdl结构用来在结构模型(如 asic cell)中描述延时。

        — 分布式延时,指定事件通过module内的gates和nets所需的时间。

        — module 路径延时,描述事件从源端口(input port或inout port)传到目的端口(output port或inout port)所需的时间。

        specify 块描述 module中的路径,以及这些路径上的delay,并可以做一些时序检查。

        specify块语法如下,

specify_block ::= 
	specify { specify_item } endspecify 

specify_item ::= 
	  specparam_declaration 
	| pulsestyle_declaration 
	| showcancelled_declaration 
	| path_declaration 
	| system_timing_check 

        举例,

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

路径声明

        path_declaration包含三种类型的路径— 简单路径、沿敏感路径、状态依赖路径。

简单路径

        简单路径包含下面两种形式,polarity是可选的,

        — Source [polarity]*> destination // 全连接,source和destination都可以是信号的list。

        — Source [polarity]=> destination // 一对一连接

        举例,

(A => Q) = 10;
(B => Q) = (12);
(C, D *> Q) = 18;

        下图描述了一对一连接和全连接的区别,

        此处添加图片

        示例如下,

module mux8 (in1, in2, s, q) ;
	output [7:0] q;
	input [7:0] in1, in2;
	input s;
	// Functional description omitted ...
	specify
		(in1 => q) = (3, 4) ;
		(in2 => q) = (2, 3) ;
		(s *> q) = 1;
	endspecify
endmodule
 (a, b, c *> q1, q2) = 10;
等同于
(a *> q1) = 10 ;
(b *> q1) = 10 ;
(c *> q1) = 10 ;
(a *> q2) = 10 ;
(b *> q2) = 10 ;
(c *> q2) = 10 ;

        polarity表示信号从in传到out时是否会反向,示例如下,

// Unknown polarity, 这个时候不确定是否反向,source的上升/下降沿传到destination,可能是上升沿、下降沿或没有变化。
(In1 => q) = In_to_q ; 
(s *> q) = s_to_q ;

// Positive polarity, source的上升沿传到dest,可能是上升沿或没有变化,source的下降沿传到dest,可能是下降沿或没有变化
(In1 +=> q) = In_to_q ;
(s +*> q) = s_to_q ;

// Negative polarity, source的上升沿传到dest,可能是下降沿或没有变化,source的下降沿传到dest,可能是上升沿或没有变化
(In1 -=> q) = In_to_q ;
(s -*> q) = s_to_q ;

沿敏感路径

        在source端加上沿标识符 posedge 或 negedge就是沿敏感路径,只有指定沿跳变场景出现时,对应的delay才生效。

        沿敏感路径也包括一对一连接和全连接。

        举例,

( posedge clock => ( out +: in ) ) = (10, 8); // : in 表示从in输出到out,这个不影响路径延时,可省略;+|-表示从in传到out信号有没有反向,-反向。在clock的上升沿发生后,out上升沿变化的delay为10,下降沿变化的delay为8。
( negedge clock[0] => ( out -: in ) ) = (10, 8); // 在clock的第0 bit发生下降沿变化时,out有对应的delay
( clock => ( out : in ) ) = (10, 8); // clock任意变化,out都有对应的delay。

状态依赖路径

        当某个表达式为真时,才给一段路径赋延时,这样的路径叫状态依赖路径。

        状态依赖路径形式如下,

if(expression) 简单路径 // expression 结果为1、x、z都是true,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值