interface中的setup_time和hold_time

input:约束input信号提前T时间采样,然后在时钟沿更新到input信号上。

output:约束output信号,在时钟沿T时间后驱动数据到output信号上。

这个两个时间和setup和hold没有关系,不知道为啥取这个名字。

clocking drv_cb @(posedge clk);
default input #setup_time output #hold_time;
output data;
endclocking:drv_cb clocking mon_cb @(posedge clk);
default input #setup_time output #hold_time;
input data;
endclocking:mon_cb

在DUT中这样与interface连接

initial begin
force TH.data_in = drv_cb.data;
end assign mon_cb.data = TH.data_out;

setup_time:用于monitor,提前时钟沿(posedge clk)setup_time时间采集DUT的信号数据,并在时钟沿将数据赋给interface的data上。

hold_time:用于driver,driver在时钟沿(posedge clk)采集interface中data的数据,并延时hold_time时间force到DUT的信号上。

在interface里面定义时钟块clocking block 可以控制同步信号相对于时钟的时序,时钟块中的任何信号都可以同步的驱动或采样,保证了测试平台在正确的时间点与信号交互。一个接口中可以有多个时钟块,每个时钟块中都只有一个时钟表达式,所以每一个时钟块对应各自的时钟域。

何为建立时间(Setup Time)和保持时间(Hold Time)?以D触发器为例,在作为接收端时;由于工艺、寄生参数、触发器结构等原因决定,被采样数据必需有一个稳定区间,保证数据可以正确的被触发器采样。通常我们把这个要求的稳定区间称为 Setup-Hold window。我们把 Setup-Hold window 和时钟沿对应起来,把Setup-Hold window 分解为两部分,建立时间(Setup Time)和保持时间(Hold Time)。

在触发器的时钟沿到来前,输入数据必须保持在一个稳定状态的最小时间;称为建立时间(setup time)。

在触发器的时钟沿到达后,输入数据需要继续保持在原状态的最小时间,称为保持时间(hold time)。

那么我们在验证环境中为了更加贴近实际的电路情况,也在时钟块里面定义了SETOU_TIME和HOLD_TIME。

这里的HOLD_TIME指的是driver将clocking block里面的输出信号驱动到总线上时会延时HOLD_TIME时间。

SETOU_TIME指的是monitor会在时钟沿前SETOU_TIME时间从总线上采集信号输入到clocking block里面。

如果用例通过,一般在Verdi上是看不到SETOU_TIME的效果的,为了能弄清楚SETUP_TIME和HOLD_TIME的意思,我将SETOU_TIME和HOLD_TIME的时间分别设为5ns和6ns,时间已经超出了时钟周期的一半,所以monitor采样的时候会报错。通过查看Verdi中的波形可以验证这一点。

从图中能够很容易看出,1和2之间的时间差是6ns,也就是说driver将信号驱动到总线上,其实是延迟了HOLD_TIME时间。但是SETOU_TIME不容易看出来,monitor需要在时钟沿的前SETOU_TIME时间,也就是提前5ns的时候采集总线上的数据,也就是在3时钟沿的时候提前5ns采集总线上的数据,这时,由于HOLD_TIME的时间为6ns,时钟周期为10ns,所以在3时钟沿,monitor中data采到的数据是72a6,data_valid采到的是0。只有在4时钟沿时data_valid 才为1,数据才有效,这就造成了有一拍的数据漏采,所以用例failed。将SETOU_TIME和HOLD_TIME的时间改成低于时钟周期的一半时,用例pass。

interface中setup_time和hold_time的更多相关文章

  1. 关于 "java中常量定义在interface中好还是定义在class中好" 的一些思考

    原文链接 http://blog.csdn.net/voo00oov/article/details/50433672 java中interface中定义变量都是"public static ...

  2. java中常量定义在interface中好还是定义在class中

    Java中interface中定义变量都是"public static final" 类型的, 也就是常量, 因此很多人在interface定义常用的常量,除此之外单独定义一个cl ...

  3. 【Java关键字-Interface】为什么Interface中的变量只能是 public static final

    三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...

  4. java8新特性:interface中的static方法和default方法

    java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...

  5. Java8新特性interface中的static方法和default方法

    static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface InterfaceA { /** * 静 ...

  6. interface中定义default方法和static方法

    interface的default方法和static方法 接口中可以定义static方法,可通过接口名称.方法名()调用,实现类不能继承static方法: 接口中可以定义default方法,defau ...

  7. JAVA中的常量定义在class中还是interface中比较合理?

    本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 java中使用的常量可以集中定义在一个文件中. 有两种解决方案: 1.在Constants.java中 ...

  8. C# Interface中的属性

    只能写get,和set,到具体类实现的时候才确定get的是哪个字段的值,set的是哪个字段的值.

  9. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

随机推荐

  1. xxe-lab学习

    0x00 前言 xxe-lab是一个一个包含php,java,python,C#等各种语言版本的XXE漏洞Demo这里附上下载链接https://github.com/c0ny1/xxe-lab我们用 ...

  2. Vulnhub系列——持续更新

    vulnhub系列--持续更新 一 · XXE Lab: 1 ​ 使用vmware搭建靶机 ​ 扫描存活主机 ​ 找到目标主机--192.168.1.18 ​ 开始扫描目标端口 ​ 发现只开了一个80 ...

  3. kubernetes运行应用2之DaemonSet详解

    kubernetes运行应用1之Deployment详解   查看daemonset 如下,k8s自身的 DaemonSet kube-flannel-ds和kube-proxy分别负责在每个结点上运 ...

  4. 【记录一个问题】golang中使用sync.Pool反而造成了负优化

    之前有这样的代码:从http收数据后,进行snappy解码: dst := make([]byte, 0, len(httpRequestData)*5) dst, err = snappy.Deco ...

  5. C++与lua交互之C++访问lua

    假设lua中: name="gzw" id=17010805 sex=man tab={ num=100, str="hello" } foo_one=func ...

  6. String类(获取,转换,判断,比较)

    1 package cn.itcast.p1.string.demo; 2 3 import java.util.Iterator; 4 5 import com.sun.org.apache.xpa ...

  7. MacBook USB 连 iPhone 响个不停,充电频繁的连上/断开

    电脑是 MacBook Pro (Retina, 15-inch, Mid 2015) 连 iPhone 响个不停,充电频繁的连上 /断开,数据线是原装的,想连接爱思助手连接不上. 网上方法 1 开启 ...

  8. HTML(前端web)

    目录 一:HTML前端 1.什么是前端? 2.什么是后端? 3.什么是HTML? 4.HTML不是什么? 5.前端的学习流程 6.BS架构 7.搭建服务器 简易(浏览器访问) 8.浏览器访问报错原因 ...

  9. MySQL OOM

    问题 前几天遇到一个奇怪的问题,服务器内存明明够用,结果在对 MySQL 进行测压的时候却出现了 OOM,是 Linux 内核出错了吗? 具体现象如下:使用 sysbench 对 mysql 进行压测 ...

  10. linux可用内存判断

    free是完全没有占用的空闲内存,Available 减 free是操作系统为了优化运行速度拿来调用的内存, 程序需要的话操作系统会进行释放.所以一般看Available即可. free+buffer ...