在ASIC设计中,有两种HDL construct来描述delay信息:

1)Distributed delays:通过specify event经过gates和nets的time,来描述delay;

对于net和gate都有三种delay信息: 1)rise delay   2)fall delay    3)transition to high-impedance value

只有一种delay时,所有change都使用这种delay,两个delay值时,才分为rise/fall

每一种delay信息又分为:min:typical:max三种。

gate和net的model例子:

但是trireg类型的变量一般建模cap的信号:第三个delay信息表示他storage的信号值不再保证的时间;

2)Module path delays:通过描述event从source(input/inout port)到destination(output/inout port)的time,来描述delay;

使用specify......endspecify来进行描述。

在specify block中一般有三种信息:

1)various paths across the module;

2)Assign delays to those paths;

3)Perform timing check;

path的declaration包括三类:

1)simple path declaration;

2)edge sensitive path declaration;   加 posedge/negedge

表示FF的有效沿是posedge,从in到out是一个positive的polarity,rise delay是10, fall delay是8。

3)state dependent path declaration;  加if/ifnone

4)Edge-sensitive state-dependent paths

“ *>”表示 full conection,   “ =>”表示parallel conection

对于会改变polarity的 path,可以通过+/-来进行描述,否则按unknown polarity分析(rise edge可能引起fall edge/rise/edge/no transition)。

"+"表示positive polarity, rise 可能引起rise edge或no transition

"-"表示positive polarity, rise 可能引起fall edge或no transition

Specifying transiiton delay on module path

按rise---fall---to-z的三种来区分,每一种delay信息可以再细分min/typ/max

前三者用","区分,后三者用":"区分

在delay path中,有一些是到同一个output的,这是选择最近有效的一路来计算,如果还是有多条

同时有效,选择delay较小的那一条path。

当Y从0变为1时,如果A transition more recently,那么选择6的delay,否则选择5的delay;

如果A和B都有效,那么选择5的delay;

对于module path delay和distributed delay都存在的情况,选择两者之间大的那一个值。 

对于path的distination必须是的单一driver的,所以一些wire类型的信号,必须变为gate输出的signal

TIming Check,在给定的timing limit内,保证critical event occur;

可以分为两大类:

1)检查stability time window----------$setup, $hold, $setuphold, $recovery, $removal, $recrem

2)检查two event之间的time----------$skew, $width, $period, $nochange

注意这些timing check并不是task,specify内也不允许有task;

所有的这些timing check都有两个基准时间点:reference event和data event;

两个时间评估点:timestamp event和timecheck event;

不报violation,必须保证data event在正确的time window下发生

$setup check: $setup(data_event, reference_event, time_check_limit,notifier)

保证timestamp的时间在time window之内,否则会报violation

当limit设置为0时,表示这个检查永远不会报violation

$hold check: $hold(reference_event, data_event, time_check_limit,notifier)

当limit设置为0时,表示这个检查永远不会报violation

$setuphold check: $setuphold(reference_event, data_event, setup_time_check_limit,hold_time_check_limit,notifier)

$skew(reference_event, data_event, time_check_limit, notifier)

$width(reference_event, time_check_limit, threshold)

reference必须是一个trigger的event,另一个edge作为data event,两者时间间隔大于threshold(防止glitch),小于limit。

$setuphold的完整定义:支持negtive timing

notifier作为一个reg类型变量,在timing check invoke的地方声明,

当检测到timing violation时,notifier通过FF的行为,打印violation信息,并propagate X to the output。

在timing check过程中,data和reference clock的delay copysignal会被创建,

用户可以显式的定义,delayed_reference或者delayed_data。

dclk在setup为负值时,表示clk延时7个cycle,在dclk之前D不再变化,就不会出现violation。

dD在hold为正值时,表示D延时13个cycle,如果dD发生在CLK之后,则不会出现violation。

在多个$setuphold的函数中,选择大的一个赋值。

Verilog中的specify block和timing check的更多相关文章

  1. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  2. system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)

    类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...

  3. 一段比较有意思的代码——介绍system verilog中的新增幅值语句

    system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...

  4. 关于verilog中if与case语句不完整产生锁存器的问题 分类: FPGA 2014-11-08 17:39 260人阅读 评论(0) 收藏

    在很多地方都能看到,verilog中if与case语句必须完整,即if要加上else,case后要加上default语句,以防止锁存器的发生,接下来就来说说其中原因. 一,什么是锁存器?锁存器与触发器 ...

  5. 关于Verilog 中的for语句的探讨

    在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...

  6. Verilog中锁存器与多路选择器

    Verilog中锁存器与多路选择器 Verilog是一种硬件描述语言,它代表的是硬件. Verilog代表的就是逻辑门和连接线. 对于一个always@(*)控制的块而言,只要块中的表达式包含的任意的 ...

  7. 关于Oracle备份中的fractured block

    One danger in making online backups is the possibility of inconsistent data within a block. For exam ...

  8. verilog中always块延时总结

    在上一篇博文中 verilog中连续性赋值中的延时中对assign的延时做了讨论,现在对always块中的延时做一个讨论. 观测下面的程序,@0时刻,输入的数据分别是0x13,0x14 . @2时刻, ...

  9. verilog中读取文件中的字符串_modelsim高级仿真

    今天给个程序大家玩玩.因为今天遇到一个问题,就是要向UART发送指令,指令非常多,都是字符串.一直copy 函数 UART ("COMM_1");  UART ("COM ...

随机推荐

  1. php练习:每5个商品一排

    老板说: 我要一行5个商品,每个长得都不一样 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. 【C++】函数指针宏定义

    看耗子叔文章学习虚函数表(http://blog.csdn.net/haoel/article/details/1948051)的时候被例子的第一句惊到了 typedef void(*Fun)(voi ...

  3. sqlserver 一个排序问题

    当 应用select * into a from b order by b1,b2语句时,试图使a表中的物理顺序改变,是 不能够实现的 select * into 同时复制了b表的物理结构,所以a表中 ...

  4. PMP--论文部分

    个人观点,是三个部分最简单,最容易复习的,当然,如果你没有做好一个项目的摘要和正文的背诵,连各个过程的工具输输入输出的都记不住几个,就不用往下看了,以上内容的观点,至少保证真题做三次以上,书籍教材看三 ...

  5. CSS知识点补充

    一.css框模型概述 元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景.内边距的边缘是边框.边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素 1.css内边 ...

  6. C# serialport

    最近使用C#写串口的程序,实现串口助手的功能,参考文档记录于此. 参考文档 http://blog.csdn.net/geekwangminli/article/details/7851673 htt ...

  7. http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html

    http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html http://bbs.csdn.net/topics/380187593

  8. ASIHTTPRequest实现https双向认证请求

    什么是双向认证呢?简而言之,就是服务器端对请求它的客户端要进行身份验证,客户端对自己所请求的服务器也会做身份验证.服务端一旦验证到请求自己的客户端为不可信任的,服务端就拒绝继续通信.客户端如果发现服务 ...

  9. Java私有构造函数不能阻止继承

    下面是一个调用已经私有化的单列的函数的列子. 这里用了静态内部类,关键就是静态内部类可以访问外部类的私有构造函数. 这种算是变种继承吧.前提是可以在原来的单列类里添加代码. class Single ...

  10. CSRF verification failed. Request aborted.

    在使用Django提交Post表单时遇到如下错误: Forbidden (403) CSRF verification failed. Request aborted. 原因在"帮助&quo ...